{$X+,B-,V-} {essential compiler directives} Program CexpPw; { Example for the nwConn unit / NwTP 0.6 API. (c) 1993,1995, R. Spronk } { Andre Middendorp [2:512/220] wrote on Sun 3 Jul 94 Q: Ik ben op zoek naar een tooltje waarmee ik op een NW 3.1x server een file aan kan maken met daarin alle gebruikers waarvan het wachtwoord is vervallen. Wie weet iets....? A: Here's a short program that will check whether or not the password has expired of any user object. It will present you with a list of all accounts that are expired.} Uses nwMisc,nwBindry,nwConn,nwServ; { nwServ used for GetFileServerDateAndTime only } { Demonstates the GetObjectLoginControl function. see also the information provided with the ObjectCanLoginAt call } Var TimeNow :TnovTime; lastObjSeen :Longint; RepName :String; RepType :Word; RepId :LongInt; RepFlag :Byte; RepSecurity :Byte; RepHasProperties:Boolean; LogControlInfo :TloginControl; NbrOfExp :word; Begin Writeln('CEXPPW: Check Expired Passwords.'); IF NOT (IsShellLoaded and IsUserLoggedOn) then begin writeln('Load network shell and logon before running this program'); halt(1); end; GetFileServerDateAndTime(TimeNow); NbrOfExp:=0; lastObjSeen:=-1; WHILE ScanBinderyObject('*',OT_USER,lastObjSeen, RepName, RepType, RepId, RepFlag, RepSecurity, RepHasProperties) do begin IF GetObjectLoginControl(RepName,RepType,LogControlInfo) then with LogControlInfo.AccountExpirationDate do if (year>0) { year=0: no expiration date was set } and (TimeNow.year>=year) and (TimeNow.month>=month) and (TimeNow.day>=day) then begin writeln('Account of ',Repname,' expired on: ',day,'/',month,'/',year); inc(NbrOfExp); end; end; if nwBindry.Result<>$FC { NO_SUCH_OBJECT, indicates end of search } then writeln('Error scanning bindery : $',HexStr( nwBindry.Result,2)); if NbrOfExp=0 then writeln(#10#13,'No expired passwords found.') else writeln('(dates expressed in dd/mm/yy format.'); end.