00001 ! & ! L O G I N S & ! $ 00010 ON ERROR GOTO 9000 00014 DECLARE LONG ISTAT 00015 EXTERNAL LONG FUNCTION LIB$SPAWN, & SYS$ASCTIM 00016 MAP (X) JOB.NO$ = 8% 00020 MAP (UAFMAP) STRING U_UAFREC = 1412 & \ MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, & LONG U_UIC, & STRING FILL = 12, & STRING U_ACCOUNT = 32, & STRING U_OWNER = 32, & BYTE FILL, & STRING U_DEVICE = 15, & STRING FILL = 17, & STRING U_DIRECTORY = 31, & BYTE FILL, & STRING FILL = 32, & STRING U_COMMANDFILE = 63, & BYTE FILL, & STRING U_CLI = 31, & BYTE FILL, & STRING U_TABLES = 31 & \ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP 00021 MAP (UAFMAP) STRING FILL = 340, & STRING PASSWORD = 8, & STRING PASSWORD2 = 8, & WORD W_LGIFAILS, & WORD W_SALT, & BYTE B_ENCRYPT, & BYTE B_ENCRYPT2, & WORD B_PWD_LENGTH, & STRING Q_EXPIRATION = 8, & STRING Q_PWD_LIFETIME = 8, & STRING Q_PWD_DATE = 8, & STRING Q_PWD2_DATE = 8, & STRING Q_LASTLOGIN_I = 8, & STRING Q_LASTLOGIN_N = 8, & STRING Q_PRIV = 8, & STRING Q_DEF_PRIV = 8, & STRING MIN_CLASS = 20, & STRING MAX_CLASS = 20, & LONG LOGIN_FLAGS 00022 MAP (UAFMAP) STRING FILL = 472, & STRING B_NETWORK_ACCESS_P = 3, & STRING B_NETWORK_ACCESS_S = 3, & STRING B_BATCH_ACCESS_P = 3, & STRING B_BATCH_ACCESS_S = 3, & STRING B_LOCAL_ACCESS_P = 3, & STRING B_LOCAL_ACCESS_S = 3, & STRING B_DIALUP_ACCESS_P = 3, & STRING B_DIALUP_ACCESS_S = 3, & STRING B_REMOTE_ACCESS_P = 3, & STRING B_REMOTE_ACCESS_S = 3, & STRING FILL = 13, & BYTE B_PRIMEDAYS, & BYTE B_PRI, & BYTE B_QUEPRI, & WORD W_MAXJOBS, & WORD W_MAXACCTJOBS, & WORD W_MAXDETACH, & WORD W_PRCCNT, & WORD W_BIOLM, & WORD W_DIOLM, & WORD W_TQCNT, & WORD W_ASTLM, & WORD W_ENQLM, & WORD W_FILLM, & WORD W_SHRFILLM, & LONG L_WSQUOTA, & LONG L_DFWSCNT, & LONG L_WSEXTENT, & LONG L_PGFLQUOTA, & LONG L_CPUTIM, & LONG L_BYTLM, & LONG L_PBYTLM, & LONG L_JTQUOTA, & WORD W_PROXY_LIM, & WORD W_PROXIES, & WORD W_ACCOUNT_LIM, & WORD W_ACCOUNTS 00023 MAP (LOGMAP) LONG LAST_DATE, & LONG LAST_TIME & \ MAP (LOGMAP) STRING LASTLOGIN = 8 00025 MAP (WRKMAP) LONG UIC & \ MAP (WRKMAP) WORD UIC_MEM, & WORD UIC_GRP & \ MAP (X) STRING TIMBUF = 23 00030 OPEN "SYSUAF" FOR INPUT AS FILE 1, & ORGANIZATION INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, & DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONE 00040 OPEN "LAST_LOGIN.LIS" FOR OUTPUT AS FILE 2, RECORDSIZE 132% 00100 WHILE -1 00110 GET #1 00120 USER$ = EDIT$(U_USERNAME,128%) & \ DEVICE$ = EDIT$(U_DEVICE,4%+128%) & \ DIRECT$ = EDIT$(U_DIRECTORY,4%+128%) 00130 PRINT #2, USER$;TAB(31%);DEVICE$;DIRECT$;TAB(80);Q_LASTLOGIN_I 00198 NEXT 00199 ! & ! S O R T T H E F I L E & ! $ 00200 CALL GETPID(JOB.NO$) 00210 TMPFIL$ = "UAF" + JOB.NO$ + ".TMP" 00220 OPEN TMPFIL$ FOR OUTPUT AS FILE 12% 00225 PRINT #12%, "$ SET NOVERIFY" 00230 PRINT #12%, "$ !RUN SYS$SYSTEM:SORTMERGE" & \ PRINT #12%, "$ SORT/KEY=(POSITION:81,SIZE:8,BINARY)-" & \ PRINT #12%, " LAST_LOGIN.LIS"; & \ PRINT #12%, " LAST_LOGIN.LIS" & \ PRINT #12%, "$ PURGE LAST_LOGIN.LIS" 00250 CLOSE 12 00260 ISTAT = LIB$SPAWN("@"+TMPFIL$) 00270 IF ISTAT <> 1% & THEN & PRINT "Error in Spawn to Sort" 00299 ! & ! P R I N T R E P O R T & ! $ 00300 OPEN "LAST_LOGIN.LIS" FOR INPUT AS FILE 1, RECORDSIZE 132 OPEN "LAST_LOGIN.LIS" FOR OUTPUT AS FILE 2, RECORDSIZE 132 00305 WHILE -1 00310 INPUT LINE #1, REC$ 00315 Q_LASTLOGIN_I = MID(REC$,81%,8%) REC$ = EDIT$(REC$,4%) DIRECT$ = MID(REC$,32%,48) USER$ = LEFT(REC$,30%) 00316 LASTLOGIN = Q_LASTLOGIN_I 00325 ISTAT = SYS$ASCTIM(,TIMBUF,Q_LASTLOGIN_I BY REF,) 00326 IF Q_LASTLOGIN_I = STRING$(8%,0%) & THEN & TIMBUF = " " 00330 PRINT #2%, USER$;TIMBUF;TAB(60%);DIRECT$ 00398 NEXT 00899 ! & ! C L O S E F I L E & ! $ 00900 CLOSE 1,2 00998 GOTO 32767 08999 ! & ! E R R O R T R A P & ! $ 09000 IF (ERR = 11) AND (ERL = 110) THEN CLOSE 1,2 RESUME 200 END IF 09010 IF (ERR = 11) AND (ERL = 310) THEN RESUME 900 END IF 09098 RESUME 32500 32499 ! & ! E R R O R M E S S A G E S & ! $ 32500 E% = ERR & \ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) & \ E$ = EDIT$(RIGHT(E$,3%),4%) & \ E$ = E$ + " on line" + NUM$(ERL) 32590 PRINT & \ PRINT "**************************************************" & \ PRINT "* *" & \ PRINT "* JOB ABORTED *" & \ PRINT "* *" & \ PRINT "*"; E$; TAB(49%); "*" & \ PRINT "* *" & \ PRINT "**************************************************" 32767 END