00001 ! & ! L A S T _ L O G I N & ! $ 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 00115 CALL LIB$SYS_FAO(" [!OB,!OB] ",,Z0$, & U_GRP BY VALUE, & U_MEM BY VALUE) 00116 LASTLOGIN = Q_LASTLOGIN_I 00120 USER$ = EDIT$(U_USERNAME,128%) & \ DEVICE$ = EDIT$(U_DEVICE,4%+128%) & \ DIRECT$ = EDIT$(U_DIRECTORY,4%+128%) 00125 ISTAT = SYS$ASCTIM(,TIMBUF,Q_LASTLOGIN_I BY REF,) 00126 IF Q_LASTLOGIN_I = STRING$(8%,0%) & THEN & TIMBUF = " " 00130 PRINT #2, USER$;TAB(30%);TIMBUF 00198 NEXT 00899 ! & ! C L O S E F I L E & ! $ 00900 CLOSE 1,2 00999 ! & ! S O R T T H E F I L E & ! $ 01000 CALL GETPID(JOB.NO$) 01010 TMPFIL$ = "UAF" + JOB.NO$ + ".TMP" 01020 OPEN TMPFIL$ FOR OUTPUT AS FILE 12% 01025 PRINT #12%, "$ SET NOVERIFY" 01030 PRINT #12%, "$ !RUN SYS$SYSTEM:SORTMERGE" & \ PRINT #12%, "$ SORT/KEY=(POSITION:1,SIZE:25)-" & \ PRINT #12%, " LAST_LOGIN.LIS"; & \ PRINT #12%, " LAST_LOGIN.LIS" & \ PRINT #12%, "$ PURGE LAST_LOGIN.LIS" 01050 CLOSE 12 01060 ISTAT = LIB$SPAWN("@"+TMPFIL$) 01070 IF ISTAT <> 1% & THEN & PRINT "Error in Spawn to Sort" 01098 GOTO 32767 08999 ! & ! E R R O R T R A P & ! $ 09000 IF ERR = 11 ! On End of File & THEN ! Then... & RESUME 900 ! Go Close the File 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$ = CVT$$(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