! ----- GET_USERNAME.FUN ----- ! ! ----- SUBROUTINE TO GET USERNAME TO BE AFFECTED ----- ! ! ---------- PASSED: ---------- ! ! ----- ACTION_INDEX = USER_ACTIONS() program action array index ! ----- BACKWARDS = TRUE if we're moving backwards thru prompts ! ----- DEBUG_MODE = TRUE if debug mode is enabled ! ----- FLAGS(0%) = User's SYSUAF Login Flags ! ----- PLEASE_TRY_AGAIN = "Please Try Again" error message ! ----- SYSUAF_NODES() = List of nodes where username exists ! ----- THE_USERNAME = Username of person running this program ! ----- USERNAME_LENGTH = Length of THE_USERNAME ! ! ---------- RETURNED: ---------- ! ! ----- ACTION_SEQ = Next User Input Sequence routine to process ! ----- (-1 if done with all user inputs) ! ----- BACKWARDS = TRUE if we're moving backwards thru prompts ! ----- COPY_USER_FILE_INDEX = SYSUAF_NODES() array index to ! ----- use when copying this user's acct ! ----- COPY_USERS_ACCOUNT = TRUE to copy this user's account ! ----- DEFAULT_MINIMUM_PASSWORD_LEN = Default Minimum Pwd Len ! ----- DIRDEL = "Y" to also Delete Directory Tree ! ----- ENTERED_USERNAME = Username whose acct is to be affected ! ----- (ENTERED_USERNAME is "B" to backup) ! ----- INVALID_DIVISION = TRUE if user is in an unauthorized ! ----- division ! ----- NODE_LIST = List of nodes that user is on ! ----- OTHER_NODE is TRUE if any username is found on a ! ----- non-local node ! ! ----- Last Change 04/08/94 by Brian Lomasky ----- ! SUB GET_USERNAME(STRING DIRDEL, STRING NODE_LIST) %INCLUDE "NUSER.INC" DECLARE WORD RECORD_FOUND ! TRUE IF MATCHING RECORD FOUND DECLARE WORD TEMP ! TEMPORARY WORD VARIABLE DECLARE STRING TEMP_STRING ! TEMPORARY STRING DECLARE WORD VALID_ENTRY ! TRUE IF VALID ENTRY EXTERNAL WORD FUNCTION LOOKUP_DISPLAY_USER_INFO( & WORD, WORD) ! LOOKUP AND DISPLAY USER INFO EXTERNAL WORD FUNCTION SEARCH_SYSUAF(STRING, & WORD) ! SEARCH SYSUAF FOR USERNAME EXTERNAL WORD FUNCTION VALID_USER(STRING, & WORD, WORD) ! SEE IF VALID USERNAME IDENT GET_USERNAME_AGAIN: BACKWARDS = FALSE ! NOT MOVING BACK THRU PROMPTS COPY_USERS_ACCOUNT = FALSE ! ASSUME NOT COPYING ACCOUNT NODE_COUNTER = 0% ! INIT COUNT OF NODES VALID_ENTRY = FALSE WHILE NOT VALID_ENTRY PRINT RECORD_FOUND = TRUE WHEN ERROR IN SELECT USER_ACTIONS(ACTION_INDEX) CASE "A" LINPUT #98%, & "Enter Username for the account to be created: ";& ENTERED_USERNAME CASE "D" LINPUT #98%, & "Enter Username for the account to be deleted: ";& ENTERED_USERNAME CASE "R" LINPUT #98%, & 'Enter Username whose account is to be made Restricted: '; & ENTERED_USERNAME CASE "N" LINPUT #98%, & 'Enter Username whose account is to be made non-Restricted: '; & ENTERED_USERNAME CASE "G" LINPUT #98%, & "Enter Username to grant database access to: "; & ENTERED_USERNAME CASE "X" LINPUT #98%, & "Enter Username to deny database access from: "; & ENTERED_USERNAME CASE "F" LINPUT #98%, & "Enter Username to change division-specific access for: ";& ENTERED_USERNAME CASE "T" LINPUT #98%, & "Enter Username to change the security template for: "; & ENTERED_USERNAME CASE "I" LINPUT #98%, & "Enter Username to grant or deny additional identifiers to: "; & ENTERED_USERNAME CASE "P" LINPUT #98%, & "Enter Username whose password is to be changed: "; & ENTERED_USERNAME CASE "U" LINPUT #98%, & "Enter Username to change the department number for: "; & ENTERED_USERNAME CASE "O" LINPUT #98%, & "Enter Username to change the First, Last name for: "; & ENTERED_USERNAME END SELECT USE RECORD_FOUND = FALSE CONTINUE END WHEN IF NOT RECORD_FOUND THEN ENTERED_USERNAME = "B" BACKWARDS = TRUE! MOVING BACK THRU PROMPTS ACTION_SEQ = ACTION_SEQ - 1% EXIT SUB END IF ! ----- UPPERCASE AND DISCARD ANY GARBAGE CHARS ----- ENTERED_USERNAME = EDIT$(ENTERED_USERNAME, 38%) IF DEBUG_MODE THEN PRINT "DEBUG>USERNAME IS " + & TRM$(ENTERED_USERNAME) + "*" END IF ! ----- ASSUME USER'S DATA IS NOT TO BE COPIED ----- COPY_USER_FILE_INDEX = 0% IF ENTERED_USERNAME = "B" THEN BACKWARDS = TRUE! MOVING BACK THRU PROMPTS ACTION_SEQ = ACTION_SEQ - 1% EXIT SUB END IF IF LEN(TRM$(ENTERED_USERNAME)) = 0% THEN PRINT PRINT "Error - You must enter a" + & " username" + TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF IF LEN(TRM$(ENTERED_USERNAME)) > 12% THEN PRINT PRINT "Error - Username is too long" + & TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF ! ----- SEE IF USERNAME SAME AS PERSON RUNNING ----- ! ----- THIS UTILITY ----- IF LEFT(THE_USERNAME, USERNAME_LENGTH) = & TRM$(ENTERED_USERNAME) THEN SELECT USER_ACTIONS(ACTION_INDEX) CASE "D" PRINT PRINT "You are not allowed to" & + " commit suicide!" + BEL PRINT ITERATE CASE "R" PRINT PRINT "Warning - You are" + & " about to make" + & " your own account" + & " into a Restricted" + & " account!" + BEL PRINT CASE "X" PRINT PRINT "Warning - You are" + & " about to deny" + & " database access" + & " for your own account!" + BEL PRINT CASE "F" PRINT PRINT "Warning - You are" + & " about to change" + & " division-specific" + & " access for your" + & " own account!" + BEL PRINT CASE "T" PRINT PRINT "Warning - You are" + & " about to change" + & " the security" + & " template for your" + & " own account!" + BEL PRINT CASE "I" PRINT PRINT "Warning - You are" + & " about to grant or" + & " deny identifiers" + & " for your own account!" + BEL PRINT CASE "P" PRINT PRINT "Warning - You are" + & " about to change the" & + " password for your" & + " own account!" + BEL PRINT CASE "U" PRINT PRINT "Warning - You are" + & " about to change the" & + " department for" + & " your own account!" + BEL PRINT CASE "O" PRINT PRINT "Warning - You are" + & " about to change your" & + " own name!" + BEL PRINT END SELECT END IF ! ----- MOVE USER RESPONSE TO MAP ----- USER_NAME = ENTERED_USERNAME THE_USERS_COUNTER = 0% ! INIT USERNAME COUNTER IF DEBUG_MODE THEN PRINT "DEBUG>CALL SEARCH_SYSUAF" PRINT "DEBUG>COPY_USER_FILE_INDEX="; & COPY_USER_FILE_INDEX END IF ! ----- SEE IF USER ON ANY NODE ----- RECORD_FOUND = SEARCH_SYSUAF(NODE_LIST, VALID_ENTRY) IF DEBUG_MODE THEN PRINT "DEBUG>AFTER SEARCH_SYSUAF," + & " RECORD_FOUND="; RECORD_FOUND END IF IF INVALID_DIVISION THEN IF DEBUG_MODE THEN PRINT "DEBUG>INVALID DIVISION" END IF VALID_ENTRY = FALSE ITERATE END IF IF USER_ACTIONS(ACTION_INDEX) = "A" THEN IF DEBUG_MODE THEN PRINT "DEBUG>USER ACTION = ADD" END IF IF RECORD_FOUND THEN PRINT PRINT "Error - This username" + & " already exists" + & TRM$(PLEASE_TRY_AGAIN) ! ----- LOOKUP AND DISPLAY USER ----- ! ----- INFO ----- TEMP = LOOKUP_DISPLAY_USER_INFO(& 1%, VALID_ENTRY) VALID_ENTRY = FALSE ITERATE END IF IF DEBUG_MODE THEN PRINT "DEBUG>" + & "COPY_USER_FILE_INDEX=";& COPY_USER_FILE_INDEX END IF ! ----- SEE IF USER DATA IS TO BE COPIED ----- IF COPY_USER_FILE_INDEX <> 0% THEN PRINT VALID_ENTRY = FALSE WHILE NOT VALID_ENTRY RECORD_FOUND = TRUE WHEN ERROR IN PRINT & "Do you want to " & + "create this" & + " user's acc" & + "ount using " & + "information" & + " from node " & + TRM$( & SYSUAF_NODES( & COPY_USER_FILE_INDEX & - 49%)) + "?" LINPUT #98%, & " (Enter Y or N, Default of Y): "; & TEMP_STRING USE RECORD_FOUND = FALSE CONTINUE END WHEN GOTO GET_USERNAME_AGAIN & IF NOT RECORD_FOUND ! ----- UPPERCASE AND ----- ! ----- DISCARD ANY ----- ! ----- GARBAGE CHARS ----- TEMP_STRING = EDIT$( & TEMP_STRING, 38%) GOTO GET_USERNAME_AGAIN & IF TEMP_STRING = "B" TEMP_STRING = "Y" IF & TEMP_STRING = "" GOTO GET_USERNAME_AGAIN & IF TEMP_STRING = "N" IF TEMP_STRING <> "Y" THEN PRINT PRINT "Error -" & + " Invalid" + & " response" + & TRM$( & PLEASE_TRY_AGAIN) PRINT ITERATE END IF VALID_ENTRY = TRUE NEXT ! ----- SET FLAG FOR ACCOUNT COPY ----- COPY_USERS_ACCOUNT = TRUE ! ----- SET FLAG SO AS TO NEXT ----- ! ----- PROMPT FOR ----- ! ----- GET_DEFAULT_QUEUE ----- TEMP = 0% ACTION_SEQ = 0% WHILE TEMP < USER_SEQS(ACTION_INDEX) TEMP = TEMP + 1% IF USER_SEQ( & ACTION_INDEX, & TEMP) = 7% THEN ACTION_SEQ = TEMP END IF NEXT IF ACTION_SEQ = 0% THEN PRINT "Error - No" + & " USER_SEQ()" + & " of 7 found" + & " for " + & "ACTION_INDEX" +& " of " + NUM1$( & ACTION_INDEX) + & " - Aborting..." PRINT "Notify your VAX" & + " System" + & " Manager" + BEL CALL SYS$EXIT( & ERROR_WITH_NO_PUTMSG & BY VALUE) END IF EXIT SUB END IF ELSE ! ----- RE-READ LOCAL NODE'S SYSUAF ----- ! ----- RECORD, IF POSSIBLE ----- IF TRM$(SYSUAF_SPECS(1%)) <> "" THEN ! ----- RE-READ THIS USER'S SYSUAF ----- ! ----- RECORD ----- RECORD_FOUND = TRUE WHEN ERROR IN GET #50%, KEY #0% EQ & USER_NAME, REGARDLESS USE IF ERR = BUCKET_LOCKED THEN SLEEP 1% RETRY END IF IF ERR = REC_NOT_FOUND THEN RECORD_FOUND = FALSE CONTINUE END IF EXIT HANDLER END WHEN IF NOT RECORD_FOUND THEN PRINT PRINT "Someone just" + & " deleted the" +& " record for " +& TRM$( & ENTERED_USERNAME) + BEL ITERATE END IF UNLOCK #50% END IF IF DEBUG_MODE THEN PRINT "DEBUG>USER ACTION=" + & USER_ACTIONS(ACTION_INDEX) + "*" END IF SELECT USER_ACTIONS(ACTION_INDEX) CASE "R" ! ----- ERROR IS THIS USER IS ----- ! ----- ALREADY [NON-]RESTRICTED ----- IF (FLAGS(0%) AND 8%) <> 0% THEN PRINT PRINT "Error - This" + & " user is" + & " already" + & " Restricted" + & TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF CASE "N" ! ----- ERROR IS THIS USER IS ----- ! ----- ALREADY [NON-]RESTRICTED ----- IF (FLAGS(0%) AND 8%) = 0% THEN PRINT PRINT "Error - This" + & " user is" + & " already non" +& "-Restricted" + & TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF CASE "P" ! ----- SAVE THE ORIGINAL ----- ! ----- MINIMUM PASSWORD LENGTH ----- ! ----- OF THE USER BEING CHANGED, ----- ! ----- SO WE CAN CHANGE IT BACK ----- ! ----- TO ITS CORRECT VALUE LATER ----- DEFAULT_MINIMUM_PASSWORD_LEN = & MINIMUM_PASSWORD_LENGTH END SELECT ! ----- ENSURE THAT THIS USER'S UIC-FORMAT ----- ! ----- IDENTIFIER ALREADY EXISTS (FOR ----- ! ----- THOSE COMMANDS WHICH REQUIRE IT) ----- SELECT USER_ACTIONS(ACTION_INDEX) CASE "G", "X", "T", "F", "I" IF DEBUG_MODE THEN PRINT "DEBUG>Ensure" + & " UIC ident exists" END IF ! ----- VALIDATE USERNAME ----- ITERATE IF VALID_USER( & ENTERED_USERNAME, 1%, FALSE) END SELECT ! ----- LOOKUP AND DISPLAY USER INFO ----- PRINT PRINT "Displaying this user's account" & + " information for node " + & TRM$(SYSUAF_NODES(1%)) + "..." ITERATE IF LOOKUP_DISPLAY_USER_INFO(1%, & VALID_ENTRY) END IF IF DEBUG_MODE THEN PRINT "DEBUG>VALID USERNAME" END IF VALID_ENTRY = TRUE NEXT SELECT USER_ACTIONS(ACTION_INDEX) CASE "D", "R", "N", "P" PRINT VALID_ENTRY = FALSE WHILE NOT VALID_ENTRY RECORD_FOUND = TRUE WHEN ERROR IN SELECT USER_ACTIONS(ACTION_INDEX) CASE "D" LINPUT #98%, & "Do you really want to delete this username? (Y or N, Default of N): "; & TEMP_STRING CASE "R", "N" LINPUT #98%, & "Do you really want to change this username? (Y or N, Default of N): "; & TEMP_STRING CASE "P" LINPUT #98%, & "Do you really want to change the password for this username? (Y or N): "; & TEMP_STRING END SELECT USE RECORD_FOUND = FALSE CONTINUE END WHEN GOTO GET_USERNAME_AGAIN IF NOT RECORD_FOUND ! ----- UPPERCASE AND DISCARD ANY GARBAGE ----- ! ----- CHARS ----- TEMP_STRING = EDIT$(TEMP_STRING, 38%) GOTO GET_USERNAME_AGAIN IF TEMP_STRING = "B" TEMP_STRING = "N" IF TEMP_STRING = "" GOTO GET_USERNAME_AGAIN IF TEMP_STRING = "N" IF TEMP_STRING <> "Y" THEN PRINT PRINT "Error - Invalid response"& + TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF VALID_ENTRY = TRUE NEXT SELECT USER_ACTIONS(ACTION_INDEX) CASE "D" VALID_ENTRY = FALSE CASE ELSE DIRDEL = "N" VALID_ENTRY = TRUE END SELECT WHILE NOT VALID_ENTRY RECORD_FOUND = TRUE WHEN ERROR IN IF OTHER_NODE THEN LINPUT #98%, & "Do you want to delete this user's directory tree? (Y or N, Default of N): ";& DIRDEL ELSE LINPUT #98%, & "Do you want to delete this user's directory tree? (Y or N, Default of Y): ";& DIRDEL END IF USE RECORD_FOUND = FALSE CONTINUE END WHEN GOTO GET_USERNAME_AGAIN IF NOT RECORD_FOUND ! ----- UPPERCASE AND DISCARD ANY GARBAGE ----- ! ----- CHARS ----- DIRDEL = EDIT$(DIRDEL, 38%) GOTO GET_USERNAME_AGAIN IF DIRDEL = "B" IF OTHER_NODE THEN DIRDEL = "N" IF DIRDEL = "" ELSE DIRDEL = "Y" IF DIRDEL = "" END IF IF DIRDEL <> "Y" AND DIRDEL <> "N" THEN PRINT PRINT "Error - Invalid response"& + TRM$(PLEASE_TRY_AGAIN) PRINT ITERATE END IF VALID_ENTRY = TRUE ! ----- DONE WITH ALL USER INPUTS ----- ACTION_SEQ = 999% EXIT SUB NEXT END SELECT ACTION_SEQ = ACTION_SEQ + 1% ! CONTINUE WITH DESIRED PROMPT END SUB