home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 5
/
ctrom5b.zip
/
ctrom5b
/
PROGRAM
/
PASCAL
/
NWTP06
/
QAVAIL.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-03-01
|
3KB
|
96 lines
program QAvailable;
{ QMS related utility / NwTP 0.5 API. (c) 1993,1994, R.Spronk }
uses nwMisc,nwBindry,nwQMS;
Var Qname :string;
QobjId:Longint;
Qtype :word;
BinAccLev:Byte;
MyObjId :Longint;
MyObjName:string;
MyObjType:word;
SegNbr :Byte;
propName :string;
propValue:Tproperty;
moreSeg :boolean;
propFlags:byte;
i :Byte;
GrpObjId :Longint;
GrpObjName:string;
GrpObjType:word;
begin
{--- Parameter section }
if paramCount<>1
then begin
writeln('QAVAIL usage: QAVAIL <queue name>');
writeln('Batch file utility to check for the availability of queues.');
writeln;
writeln('Errorlevel 0 : Queue exists, calling user is allowed to use Queue');
writeln(' 1 : Queue doesn''t exist on default fileserver.');
writeln(' 2 : Queue exists but calling user has no Queue rights.');
halt(1); { No queue available }
end;
Qname:=ParamStr(1);
{--- Startup checks }
IF Not (IsShellLoaded and IsUserLoggedOn)
then halt(1); { Queue not available }
{--- Queue name in bindery of effective server ? }
UpString(Qname);
IF not GetBinderyObjectId(Qname,3 {ot_print_queue},QobjId)
then halt(1);
{--- Queue exists. Does the caller have rights to use the queue ? }
IF NOT (GetBinderyAccessLevel(BinAccLev,MyObjId) and
GetBinderyObjectName(MyObjId,MyObjName,MyObjType))
then halt(1); { Oops.. some kind of bindery error }
IF IsBinderyObjectInSet(Qname,3 {OT_PRINT_QUEUE},'Q_USERS',MyObjName, MyObjType)
then halt(0); { OK. Caller has rights }
if nwbindry.result=$FB { According to QMS definitions, when the property }
then halt(0); { Q_USERS doesn't exist, all users have queue rights. }
{--- Is one of the groups I'm a member of a queue user ? }
SegNbr:=1;
propName:='GROUPS_I''M_IN';
While ReadPropertyValue(MyObjName,MyObjType,propName,SegNbr,
propValue,moreSeg,propFlags)
do begin
{ A segment of a set-property consists of a list of object IDs,
each ID 4 bytes long, stored hi-lo.
The end of the list (within THIS segment) is marked by an ID of 00000000. }
i:=1;
Repeat
GrpObjId:=MakeLong((propValue[i] *256 +propValue[i+1]), ( propValue[i+2] *256 + propValue[i+3] ) );
if GrpObjId<>0
then begin
IF GetBinderyObjectName(GrpObjId,GrpObjName,GrpObjType)
and IsBinderyObjectInSet(Qname,3 {OT_PRINT_QUEUE},
'Q_USERS',GrpObjName, GrpObjType)
then halt(0); { OK. Caller's group has queue rights }
end;
inc(i,4);
Until (i>128) or (GrpObjId=0);
inc(SegNbr);
end;
{--- Still no rights found.. }
halt(2);
end.