{$X+,B-,V-} {essential compiler directives} Program TrCopy; { Example for the nwConn unit/ NwTP 0.6 API. (c) 1993,1995, R. Spronk } { Copies the time restrictions of a supplied user to amother user, or another user group. The destination may conatain wildcards. } { Note that it is possible to change the time restrictions of a number of users by tagging them with F5 (in SYSCON) and then changing the time restrictions. } {(4395) Tue 8 Feb 94 8:43 By: Jos Cobbenhagen To: Allen Re: MUTATIE TIME-RESTR. St: ------------------------------------------------------------ Aan :Allen Van :Jos Cobbenhagen Betreft :Mutaties Time-restrictions Ik moet incidenteel voor een aantal wisselende afdelingen/gebruikers de time-restrictions aanpassen. Dit komt voor bij crises en apparte gebeurtenissen waarbij users ijdelijk 's avonds en in weekenden moeten werken. Enige mogelijkheid die ik hiervoor ken is voor de betreffende users appart deze restricties aanpassen, en voor 50+ gebruikers is dat vrij omslachtig. Vraag is of er een bindery utility is die dit in een keer voor een bepaalde groep gebruikers kan regelen? } uses nwMisc,nwBindry; Var source :string; TimeRestr:array[1..42] of byte; Function ChangeTRforUser(dest:string):boolean; Var res:boolean; ObjName :string; ObjType :word; ObjId :LongInt; Iter :LongInt; Flag,Sec :byte; HasProperties:boolean; propValue:Tproperty; moreSegs :boolean; propFlags:byte; begin res :=false; iter:=-1; WHILE ScanBinderyObject(dest,OT_USER,iter, ObjName,ObjType,ObjId, Flag,Sec,HasProperties) do begin res:=true; IF (source<>ObjName) and ReadPropertyValue(ObjName,OT_USER,'LOGIN_CONTROL',1, propValue,moreSegs,propFlags) then begin Move(TimeRestr[1],propValue[15],42); IF WritePropertyvalue(ObjName,ObjType,'LOGIN_CONTROL',1, propValue,FALSE) then writeln('Time restrictions of user ',ObjName,' changed.'); end; end; ChangeTRForUser:=res; end; Function ChangeTRforGroup(GroupDest:string):boolean; Var res:boolean; ObjName :string; ObjType :word; ObjId :LongInt; Iter :LongInt; Flag,Sec :byte; HasProperties:boolean; propValue:Tproperty; moreSegs :boolean; propFlags:byte; seg,i :byte; UserObjId :LongInt; UserObjName:string; begin res :=false; iter:=-1; WHILE ScanBinderyObject(GroupDest,OT_USER_GROUP,iter, ObjName,ObjType,ObjId, Flag,Sec,HasProperties) do begin res:=true; seg:=1; WHILE ReadPropertyValue(ObjName,OT_USER_GROUP,'GROUP_MEMBERS',seg, propValue,moreSegs,propFlags) do begin i:=1; Repeat UserObjId:=MakeLong((propValue[i] *256 + PropValue[i+1] ), (propValue[i+2] *256 + PropValue[i+3] ) ); if UserObjId<>0 then begin IF GetBinderyObjectName(UserObjId,UserObjName,ObjType) and (UserObjName<>Source) then ChangeTRForUser(UserObjName); end; inc(i,4); Until (i>128) or (objId=0); inc(seg); end; end; ChangeTRForGroup:=res; end; Procedure GetSourceTR(source:string); Var propValue:Tproperty; MoreSegs :boolean; PropFlags:byte; begin IF NOT ReadPropertyValue(source,OT_USER,'LOGIN_CONTROL',1, propValue,moreSegs,propFlags) then begin writeln; Case nwBindry.result OF $F0 :writeln('Wildcards in source not allowed.'); $FC,$FB:writeln('No such userobject'); $F9,$F1:writeln('Not enough privileges..'); else writeln('General error reading the bindery.'); end;{case} Halt(1); end; Move(propValue[15],TimeRestr[1],42); end; {--------------------------------- main -------------------------------------} Var dest :string; MyObjId :Longint; secLevel:byte; version :word; begin If ParamCount<>2 then begin writeln('----- TRCOPY: Copy Login Time Restrictions from one user to another. -----'); writeln; writeln('Usage: TRCOPY '); writeln; writeln('Where is the name of a USER,'); writeln('and the name of a user or group the time restrictions'); writeln('are to be copied to. may contain wildcards.'); writeln; writeln('----- Use with NetWare 3.x only ---------- Written with the NwTP API -----'); halt(0); end; writeln('TRCOPY: Copy Time Restrictions.'); source:=ParamStr(1); dest :=ParamStr(2); UpString(Source); UpString(dest); IF (NOT GetBinderyAccessLevel(secLevel,MyObjId)) or (secLevel<>$33) then begin writeln; writeln('You need to be logged in as a Supervisor equivalent user'); writeln('to use this utility.'); halt(1); end; GetNWversion(version); if (version DIV 100)<>3 then begin writeln; writeln('TRCOPY runs with NetWare 3.X only.'); halt(1); end; GetSourceTR(source); IF NOT ChangeTRforUser(dest) then IF NOT ChangeTRforGroup(dest) then writeln('Error: destination user or group doesn''t exist.'); end.