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

Hosted by www.Geocities.ws

1