! *** PREDECLARED TYPES %IF %DECLARED ( %BASIC$QUADWORD_DECLARED ) = 0 %THEN RECORD BASIC$QUADWORD LONG FILL ( 2 ) END RECORD %LET %BASIC$QUADWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$OCTAWORD_DECLARED ) = 0 %THEN RECORD BASIC$OCTAWORD LONG FILL ( 4 ) END RECORD %LET %BASIC$OCTAWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$HFLOAT_AXP_DECLARED ) = 0 %THEN RECORD BASIC$HFLOAT_AXP LONG FILL ( 4 ) END RECORD %LET %BASIC$HFLOAT_AXP_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$F_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$F_FLOATING_COMPLEX SINGLE REAL_PART SINGLE IMAGINARY_PART END RECORD %LET %BASIC$F_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$D_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$D_FLOATING_COMPLEX DOUBLE REAL_PART DOUBLE IMAGINARY_PART END RECORD %LET %BASIC$D_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$G_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$G_FLOATING_COMPLEX GFLOAT REAL_PART GFLOAT IMAGINARY_PART END RECORD %LET %BASIC$G_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$H_FLOAT_AXP_CMPLX_DCL ) = 0 %THEN RECORD BASIC$H_FLOATING_COMPLEX_AXP BASIC$HFLOAT_AXP REAL_PART BASIC$HFLOAT_AXP IMAGINARY_PART END RECORD %LET %BASIC$H_FLOAT_AXP_CMPLX_DCL = 1 %END %IF ! ++ ! User authorization file format ! Note: With the exception of the username and account name, ! all strings are blank padded counted strings. Username and ! account name are uncounted, blank padded. ! -- DECLARE LONG CONSTANT UAF070$C_USER_ID = 1 ! main user ID record DECLARE LONG CONSTANT UAF070$C_VERSION1 = 1 ! this version DECLARE LONG CONSTANT UAF070$C_KEYED_PART = 52 ! ISAM keys come this far DECLARE LONG CONSTANT UAF070$C_MAX_PWD_LENGTH = 32 ! maximum plaintext password length DECLARE LONG CONSTANT UAF070$K_MAX_PWD_LENGTH = 32 ! maximum plaintext password length DECLARE LONG CONSTANT UAF070$C_AD_II = 0 ! AUTODIN-II 32 bit crc code DECLARE LONG CONSTANT UAF070$C_PURDY = 1 ! Purdy polynomial over salted input DECLARE LONG CONSTANT UAF070$C_PURDY_V = 2 ! Purdy polynomial + variable length username DECLARE LONG CONSTANT UAF070$C_PURDY_S = 3 ! PURDY_V folded into password length DECLARE LONG CONSTANT UAF070$K_CURRENT_ALGORITHM = 3 ! current DEC algorithm number DECLARE LONG CONSTANT UAF070$C_CURRENT_ALGORITHM = 3 ! current DEC algorithm number DECLARE LONG CONSTANT UAF070$C_PREFERED_ALGORITHM = 127 DECLARE LONG CONSTANT UAF070$K_PREFERED_ALGORITHM = 127 DECLARE LONG CONSTANT UAF070$C_PREFERRED_ALGORITHM = 127 ! preferred hash algorithm - use current DECLARE LONG CONSTANT UAF070$K_PREFERRED_ALGORITHM = 127 ! preferred hash algorithm - use current DECLARE LONG CONSTANT UAF070$C_CUST_ALGORITHM = 128 ! customer algorithm division DECLARE LONG CONSTANT UAF070$K_CUST_ALGORITHM = 128 ! customer algorithm division DECLARE LONG CONSTANT UAF070$K_FIXED = 644 ! length of fixed portion DECLARE LONG CONSTANT UAF070$C_FIXED = 644 ! length of fixed portion DECLARE LONG CONSTANT UAF070$K_LENGTH = 1412 DECLARE LONG CONSTANT UAF070$C_LENGTH = 1412 DECLARE LONG CONSTANT UAF070$S_UAF070DEF = 1412 ! Old size name, synonym for UAF070$S_UAF070 DECLARE LONG CONSTANT UAF070$S_UAF070 = 1412 record UAF070 BYTE UAF070$B_RTYPE ! UAF070 record type BYTE UAF070$B_VERSION ! UAF070 format version WORD UAF070$W_USRDATOFF ! offset of counted string of user data group UAF070$R_FILL_47_ variant case STRING UAF070$T_USERNAME = 32 ! username case group UAF070$R_FILL_48_ STRING UAF070$T_FILL_0 = 31 STRING UAF070$T_USERNAME_TAG = 1 ! tag to differentiate records end group UAF070$R_FILL_48_ end variant end group UAF070$R_FILL_47_ group UAF070$R_FILL_49_ variant case LONG UAF070$L_UIC ! user ID code case group UAF070$R_FILL_50_ WORD UAF070$W_MEM ! member subfield WORD UAF070$W_GRP ! group subfield end group UAF070$R_FILL_50_ end variant end group UAF070$R_FILL_49_ LONG UAF070$L_SUB_ID ! user sub-identifier BASIC$QUADWORD UAF070$Q_PARENT_ID ! identifier of owner of this account STRING UAF070$T_ACCOUNT = 32 ! account name STRING UAF070$T_OWNER = 32 ! owner's name STRING UAF070$T_DEFDEV = 32 ! default device STRING UAF070$T_DEFDIR = 64 ! default directory STRING UAF070$T_LGICMD = 64 ! login command file STRING UAF070$T_DEFCLI = 32 ! default command interpreter STRING UAF070$T_CLITABLES = 32 ! user CLI tables group UAF070$R_FILL_51_ variant case BASIC$QUADWORD UAF070$Q_PWD ! hashed password case group UAF070$R_FILL_52_ LONG UAF070$L_PWD ! 32 bit subfield end group UAF070$R_FILL_52_ end variant end group UAF070$R_FILL_51_ BASIC$QUADWORD UAF070$Q_PWD2 ! second password WORD UAF070$W_LOGFAILS ! count of login failures WORD UAF070$W_SALT ! random password salt BYTE UAF070$B_ENCRYPT ! primary password hash algorithm ! known hash algorithm indices BYTE UAF070$B_ENCRYPT2 ! secondary password hash algorithm BYTE UAF070$B_PWD_LENGTH ! minimum password length BYTE UAF070$$$_FILL_1 ( 1 to 1 ) BASIC$QUADWORD UAF070$Q_EXPIRATION ! expiration date for account BASIC$QUADWORD UAF070$Q_PWD_LIFETIME ! password lifetime BASIC$QUADWORD UAF070$Q_PWD_DATE ! date of password change BASIC$QUADWORD UAF070$Q_PWD2_DATE ! date of 2nd password change BASIC$QUADWORD UAF070$Q_LASTLOGIN_I ! date of last interactive login BASIC$QUADWORD UAF070$Q_LASTLOGIN_N ! date of last non-interactive login BASIC$QUADWORD UAF070$Q_PRIV ! process privilege vector BASIC$QUADWORD UAF070$Q_DEF_PRIV ! default process privileges group UAF070$R_MIN_CLASS ! minimum security class BYTE UAF070$B_FILL_2 ( 1 to 20 ) end group UAF070$R_MIN_CLASS group UAF070$R_MAX_CLASS ! maximum security class BYTE UAF070$B_FILL_3 ( 1 to 20 ) end group UAF070$R_MAX_CLASS group UAF070$R_FILL_53_ variant case LONG UAF070$L_FLAGS ! user flags longword case group UAF070$R_FILL_54_ ! no user control-y ! only allow user default CLI ! disable SET PASSWORD command ! restricted account (pre-V5.2 CAPTIVE) ! no interactive login ! skip welcome message ! skip new mail message ! disable mail delivery ! passwords must be generated ! password has expired ! 2nd password has expired ! audit all actions ! skip last login messages ! inhibit reconnections ! auto-login only ! disable forced password change ! captive account (no overrides) ! disable arbitrary image activation ! disable password dictionary search ! disable password history search ! default classification is valid LONG DISCTLY_bits ! COMMENT ADDED BY SDL - DISCTLY_bits contains bits DISCTLY through FILL_57_ end group UAF070$R_FILL_54_ end variant end group UAF070$R_FILL_53_ BYTE UAF070$B_NETWORK_ACCESS_P ( 1 to 3 ) ! hourly network access, primary BYTE UAF070$B_NETWORK_ACCESS_S ( 1 to 3 ) ! hourly network access, secondary BYTE UAF070$B_BATCH_ACCESS_P ( 1 to 3 ) ! hourly batch access, primary BYTE UAF070$B_BATCH_ACCESS_S ( 1 to 3 ) ! hourly batch access, secondary BYTE UAF070$B_LOCAL_ACCESS_P ( 1 to 3 ) ! hourly local access, primary BYTE UAF070$B_LOCAL_ACCESS_S ( 1 to 3 ) ! hourly local access, secondary BYTE UAF070$B_DIALUP_ACCESS_P ( 1 to 3 ) ! hourly dialup access, primary BYTE UAF070$B_DIALUP_ACCESS_S ( 1 to 3 ) ! hourly dialup access, secondary BYTE UAF070$B_REMOTE_ACCESS_P ( 1 to 3 ) ! hourly remote access, primary BYTE UAF070$B_REMOTE_ACCESS_S ( 1 to 3 ) ! hourly remote access, secondary BYTE UAF070$$$_FILL_4 ( 1 to 12 ) ! space for 2 more access types group UAF070$R_FILL_55_ variant case BYTE UAF070$B_PRIMEDAYS ! bits representing primary days case group UAF070$R_FILL_56_ ! bit clear means this is a primary day ! bit set means this is an off day BYTE MONDAY_bits ! COMMENT ADDED BY SDL - MONDAY_bits contains bits MONDAY through FILL_58_ end group UAF070$R_FILL_56_ end variant end group UAF070$R_FILL_55_ BYTE UAF070$$$_FILL_5 ( 1 to 1 ) BYTE UAF070$B_PRI ! base process priority BYTE UAF070$B_QUEPRI ! maximum job queuing priority WORD UAF070$W_MAXJOBS ! maximum jobs for UIC allowed ! 0 means no limit WORD UAF070$W_MAXACCTJOBS ! maximum jobs for account allowed ! 0 means no limit WORD UAF070$W_MAXDETACH ! maximum detached processes for UIC ! 0 means no limit WORD UAF070$W_PRCCNT ! subprocess creation limit WORD UAF070$W_BIOLM ! buffered I/O limit WORD UAF070$W_DIOLM ! direct I/O limit WORD UAF070$W_TQCNT ! timer queue entry limit WORD UAF070$W_ASTLM ! AST queue limit WORD UAF070$W_ENQLM ! enqueue limit WORD UAF070$W_FILLM ! open file limit WORD UAF070$W_SHRFILLM ! shared file limit LONG UAF070$L_WSQUOTA ! working set size quota LONG UAF070$L_DFWSCNT ! default working set size LONG UAF070$L_WSEXTENT ! working set size limit LONG UAF070$L_PGFLQUOTA ! page file quota LONG UAF070$L_CPUTIM ! CPU time quota LONG UAF070$L_BYTLM ! buffered I/O byte count limit LONG UAF070$L_PBYTLM ! paged buffer I/O byte count limit LONG UAF070$L_JTQUOTA ! job-wide logical name table creation quota WORD UAF070$W_PROXY_LIM ! number of proxies user can grant WORD UAF070$W_PROXIES ! number of proxies granted WORD UAF070$W_ACCOUNT_LIM ! number of sub-accounts allowed WORD UAF070$W_ACCOUNTS ! number of sub-accounts in use group UAF070$R_DEF_CLASS ! default security class BYTE UAF070$B_FILL_6 ( 1 to 20 ) end group UAF070$R_DEF_CLASS BYTE UAF070$$$_FILL_99 ( 1 to 44 ) ! spare space BYTE UAF070$$$_FILL_100 ( 1 to 768 ) ! user-extensible area end record UAF070