OpenVMS DCL Command Procedure :
The ACCOUNTS.DAT file has the following format :
Record layout :
(OpenVMS account designation in columns 1-7)
(OpenVMS account group number in columns 8-10)
(OpenVMS account description in columns 11-30)
$!
$! NEW_USER.COM
$!
$! This procedure will add an OpenVMS user account.
$!
$! Generic Setup for Program
$!
$ SET PROC/PRIV=ALL
$ BELL[0,7] = 7
$ ON ERROR THEN GOTO EXIT
$!
$! Assignments
$!
$ MSG :== "BEGIN PROGRAM"
$ ASK :== "READ/PROMPT ="
$ SAY :== WRITE SYS$OUTPUT
$ DEF_DIR :== F$ENVIRONMENT("DEFAULT")
$ CL*EAR :== "SET TERM/WIDTH=80"
$!
$ CL
$ SAY " "
$ SAY " "
$ SAY " This program will add an OpenVMS user account.
$ SAY " "
$!
$TOP:
$!
$!*****************************************************************************
$! Go get UIC group number
$!
$ GOSUB READ_ACCOUNTS
$ CLEAR
$!
$!*****************************************************************************
$! Go get the username information
$!
$ GOSUB GET_INPUT
$ DEF = "[" + USERNAME + "]"
$!
$!*****************************************************************************
$! Create the UIC
$!
$ GOSUB GENERATE_UIC
$!
$!*****************************************************************************
$! Create the account with the selected information
$!
$ SAY " "
$ WRITE SYS$OUTPUT " Creating new account - Please Wait "
$ SAY " "
$!
$ GOSUB ADD_USER
$!
$!*****************************************************************************
$! Create user's directory.
$!
$ GOSUB CREATE_DIR_MENU
$!
$!*****************************************************************************
$! Create VMS e-mail access.
$!
$ GOSUB VMS_E_ACCESS
$!
$!*****************************************************************************
$!
$ MSG = "PROGRAM COMPLETED"
$ SAY MSG," - Account has been added successfully"
$!
$EXIT:
$!
$ CLEAR
$ SAY " "
$ SAY " "
$ SAY " REMEMBER: Add Menu Options If Applicable"
$ SAY " "
$ SAY " "
$ WAIT 00:00:04
$!
$ SET NOVERIFY
$ EXIT
$!
$!****************************************************************************
$!****************************************************************************
$! This subroutine will get the user's name and account information.
$!
$GET_INPUT:
$!
$! Get the user's name for account selection
$ CL
$ SAY ""
$ SAY "ACCOUNT ''ACCOUNT' ''DESCRIPTION' "
$ SAY " "
$ SAY " "
$ ASK " LAST NAME: " -
SYS$COMMAND LASTNAME
$ ASK " FIRST NAME: " -
SYS$COMMAND FIRSTNAME
$ NEW_OWNER = LASTNAME + "," + FIRSTNAME
$ NEW_OWNER = F$EDIT(NEW_OWNER,"UPCASE")
$ NEW_OWNER = F$EDIT(NEW_OWNER,"COLLAPSE")
$ COMMA = F$LOCATE(",",NEW_OWNER)
$ USERNAME = F$EXTRACT(0,COMMA,NEW_OWNER) + F$EXTRACT(COMMA + 1,1,NEW_OWNER)
$ USERNAME = F$EXTRACT(0,12,USERNAME)
$!
$ENT_USERNAME:
$!
$ ASK " ENTER THE NEW USERNAME [''USERNAME'] : " -
SYS$COMMAND UN
$ IF UN .NES. "" THEN USERNAME = UN
$ USERNAME = F$EXTRACT(0,12,USERNAME)
$!
$! Does Username already exist?
$!
$ SET NOON
$ UAF == "$AUTHORIZE"
$ UAF SHOW/BRIEF 'USERNAME'
$ IF $STATUS .EQ. %X00000001
$ THEN
$ SET ON
$ USERNAME = ""
$ GOTO ENT_USERNAME
$ ENDIF
$ SET ON
$!
$! Set the generic password
$!
$ ASK " ENTER THE NEW PASSWORD [TESTPASS] : " -
SYS$COMMAND PASSWORD
$ IF PASSWORD .EQS. "" THEN PASSWORD = "TESTPASS"
$ IF NEW_OWNER .EQS. "" .OR. PASSWORD .EQS. "" THEN GOTO GET_INPUT
$!
$ ACCT = ACCOUNT
$ CLEAR
$ SAY " "
$ SAY "You have selected the following information: "
$ SAY " "
$ SAY " OWNER ''NEW_OWNER' "
$ SAY " USERNAME ''USERNAME' "
$ SAY " ACCOUNT ''ACCOUNT' ''DESCRIPTION' "
$ SAY " "
$ SAY " "
$ ASK " Is the above information correct? [Y/N] Y : " -
SYS$COMMAND YESNO
$ IF YESNO .EQS. "" THEN YESNO = "Y"
$ IF .NOT. YESNO THEN GOTO GET_INPUT
$ RETURN
$!
$!*****************************************************************************
$! Create directory structure for menu.
$!
$CREATE_DIR_MENU:
$!
$ DEFINE/TRANS=(TERM,CONCEAL) ADMUSERS (OpenVMS user account directory)
$ USERNAME = F$EDIT(USERNAME,"UPCASE")
$ CREATE/DIR/LOG ADMUSERS:['USERNAME']
$ COPY/LOG COM:LOGIN.COM ADMUSERS:['USERNAME']*.*;
$ SET SECURITY/OWNER='USERNAME' -
ADMUSERS:[-]'USERNAME'.DIR
$ SET SECURITY/OWNER='USERNAME' -
ADMUSERS:['USERNAME']*.*;*
$ RETURN
$!
$!*****************************************************************************
$! This subroutine will generate the complete UIC number
$!
$GENERATE_UIC:
$!
$ ON WARNING THEN CONTINUE
$ IF GRP .EQS. "000"
$ THEN
$ ASK " ENTER THE GROUP UIC FOR THE NEW ACCOUNT " -
SYS$COMMAND GRP
$ ENDIF
$!
$! Get next available UIC for the input group
$!
$ GROUP = ''GRP'
$ GROUP_HIWORD = %X10000 * %O'GROUP'
$ MEMBER = 100
$!
$LOOKUP_UIC:
$!
$ IF (F$EXTRACT(2,1,F$STRING(MEMBER)) .EQS. "8") .OR. (F$EXTRACT(2,1,F$STRING(MEMBER)) .EQS. "9")
$ THEN
$ MEMBER = MEMBER + 1
$ GOTO LOOKUP_UIC
$ ENDIF
$ UIC = GROUP_HIWORD + %O'MEMBER'
$ NAMEUIC = F$IDENTIFIER(UIC, "NUMBER_TO_NAME")
$ IF NAMEUIC .NES. ""
$ THEN
$ MEMBER = MEMBER + 1
$ GOTO LOOKUP_UIC
$ ENDIF
$!
$ NEW_UIC = "[''GRP',''MEMBER']"
$ SAY " "
$ SAY " You have selected the following UIC: "
$ SAY NEW_UIC
$ SAY " "
$ ASK "Is the new UIC ok? Y/N [Y]: " SYS$COMMAND YN
$ IF YN .EQS. "" THEN YN = "Y"
$ IF .NOT. YN THEN GOTO GENERATE_UIC
$ RETURN
$!
$!*****************************************************************************
$! This subroutine will add the new user to the system.
$!
$ADD_USER:
$!
$ FLAGS = F$STRING("(DISREPORT,RESTRICTED,DISCTLY,NODISUSER)")
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" ADD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/ACCOUNT=''ACCT'")
$ RECORD = F$STRING(RECORD+"/PASS="+PASSWORD)
$ RECORD = F$STRING(RECORD+"/DEV=ADMUSERS:")
$ RECORD = F$STRING(RECORD+"/DIR=[" + USERNAME + "]")
$ RECORD = F$STRING(RECORD+"/FLAG="+FLAGS)
$ RECORD = F$STRING(RECORD+"/UIC="+NEW_UIC)
$ 'RECORD'
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" MOD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/NODIAL/MAXJOB=4")
$ RECORD = F$STRING(RECORD+"/WSDEF=2048/WSQUO=4096/WSEXTENT=16024")
$ RECORD = F$STRING(RECORD+"/ENQLM=2000/FILLM=100/BYTLM=36000")
$ RECORD = F$STRING(RECORD+"/PGFLQUO=150000/DIOLM=50/BIOLM=150")
$ 'RECORD'
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" MOD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/OWN="+ """''NEW_OWNER'""")
$ RECORD = F$STRING(RECORD+"/LGICMD=SYS$LOGIN:LOGIN.COM")
$ 'RECORD'
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" GRANT/ID SYSWIDE "+USERNAME)
$ 'RECORD'
$ IF 'GRP' .EQS. 400
$ THEN
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" MOD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/PRIV=(CMKRNL,SYSNAM,LOG_IO,GROUP,ALTPRI,")
$ RECORD = F$STRING(RECORD+"SETPRV,TMPMBX,WORLD,OPER,NETMBX,")
$ RECORD = F$STRING(RECORD+"MOUNT,SYSPRV,SHARE,SECURITY)")
$ 'RECORD'
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" MOD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/DEFPRIV=(CMKRNL,SYSNAM,LOG_IO,GROUP,ALTPRI,")
$ RECORD = F$STRING(RECORD+"SETPRV,TMPMBX,WORLD,OPER,NETMBX,")
$ RECORD = F$STRING(RECORD+"MOUNT,SYSPRV,SHARE,SECURITY)")
$ 'RECORD'
$ ENDIF
$ IF 'GRP' .EQS. 400
$ THEN
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" GRANT/ID NET$MANAGE "+USERNAME)
$ 'RECORD'
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" MOD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/DIAL/MAXJOB=0")
$ RECORD = F$STRING(RECORD+"/PRIOR=6/ACCESS/NOPWDLIFE")
$ RECORD = F$STRING(RECORD+"/WSDEF=4096/WSQUO=16024/WSEXTENT=32767")
$ 'RECORD'
$ RECORD = " UAF"
$ RECORD = F$STRING(RECORD+" MOD "+USERNAME)
$ RECORD = F$STRING(RECORD+"/ENQLM=2000/FILLM=100/BYTLM=36000")
$ RECORD = F$STRING(RECORD+"/PGFLQUO=200000/DIOLM=100/BIOLM=200")
$ RECORD = F$STRING(RECORD+"/FLAGS=(NODISREPORT,NORESTRICTED,NODISCTLY)")
$ 'RECORD'
$ ENDIF
$ RETURN
$!
$!*****************************************************************************
$! Subroutine to activate VMS mail access so the POP3 service can be used.
$!
$VMS_E_ACCESS:
$!
$ CLEAR
$ MAIL/SUBJ="Welcome!" TESTMAIL.DOC 'USERNAME'
$ RETURN
$!
$!*****************************************************************************
$! Subroutine to determine group number for UIC assignment
$!
$READ_ACCOUNTS:
$!
$ CLEAR
$ OPEN/READ INA ACCOUNTS.DAT
$ ANUM = 0
$!
$AR_LOOP:
$!
$ READ/END=EOF_ACC INA LINE
$ ANUM = ANUM + 1
$ ACCOUNT_'ANUM' = F$EXTRACT(0,7,LINE)
$ GROUP_'ANUM' = F$EXTRACT(7,3,LINE)
$ DESC_'ANUM' = F$EXTRACT(10,20,LINE)
$ OLINE = GROUP_'ANUM' + "-" + DESC_'ANUM'
$ SAY OLINE
$ GOTO AR_LOOP
$!
$EOF_ACC:
$!
$ CLOSE INA
$!
$AC_LOOP:
$!
$ ASK "ENTER THE GROUP NUMBER CORRESPONDING TO THE ACCOUNT: " -
SYS$COMMAND GRP
$ CN = 1
$!
$CHECK_GRP:
$!
$ IF CN .GT. ANUM
$ THEN
$ SAY " ''GRP' IS AN INVALID GROUP NUMBER"
$ GOTO AC_LOOP
$ ENDIF
$ IF GRP .EQ. GROUP_'CN'
$ THEN
$ DESCRIPTION = F$EDIT(DESC_'CN',"COMPRESS")
$ ACCOUNT = ACCOUNT_'CN'
$ GOTO END_READ_ACCOUNTS
$ ENDIF
$ CN = CN + 1
$ GOTO CHECK_GRP
$!
$END_READ_ACCOUNTS:
$!
$ RETURN
This page hosted by
Get your own Free Homepage