home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / getprivs.vms < prev    next >
Internet Message Format  |  1989-02-03  |  6KB

  1. Path: xanth!mcnc!rutgers!tut.cis.ohio-state.edu!cwjcc!hal!ncoast!allbery
  2. From: terrell@musky2.MUSKINGUM.EDU
  3. Newsgroups: comp.sources.misc
  4. Subject: v04i035: getprivs.pas (VMS Pascal)
  5. Message-ID: <8808241513.AA01329@musky2.MUSKINGUM.EDU>
  6. Date: 24 Aug 88 19:13:00 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: terrell@musky2.MUSKINGUM.EDU
  9. Lines: 186
  10. Approved: allbery@ncoast.UUCP
  11.  
  12. Posting-number: Volume 4, Issue 35
  13. Submitted-by: "A. Nonymous" <terrell@musky2.MUSKINGUM.EDU>
  14. Archive-name: getprivs.vms
  15.  
  16. [Note:  this is a VMS DCL shar file, but not the fancy kind.  ++bsa]
  17.  
  18. This program was written because we needed a quick way to find out
  19. what users had a certain privilege.  You just tell the program what
  20. privilege(s) you are interested in, and it will tell you who has
  21. them.  Note that you have to have certain privileges to run this program.
  22.  
  23. This was written in VAX Pascal, version 3.6 under VMS version 4.7 .
  24.  
  25. Roger Terrell
  26. ...!musky2!terrell
  27.  
  28. =====Cut Here=====Cut Here=====Cut Here=====Cut Here=====Cut Here=====
  29. $! This is a DCL shar-type archive created by Unix dclshar.
  30. $!
  31. $CREATE GETPRIVS.PAS
  32. $DECK
  33.  
  34. [INHERIT ('SYS$LIBRARY:STARLET')]
  35. PROGRAM Get_Privileges (INPUT, OUTPUT, OutFile);
  36.  
  37. (*
  38.    Written by Roger W. Terrell
  39.    24-AUG-1988
  40.  
  41.    This program takes as input a list of privileges and produces as output
  42.    an alphabetical list of the users who have those privileges.
  43. *)
  44.  
  45. CONST
  46.   %INCLUDE 'SYS$LIBRARY:PASSTATUS.PAS'
  47.  
  48.  
  49. TYPE
  50.   PrivType = (CMKRNL,CMEXEC,SYSNAM,GRPNAM,ALLSPOOL,DETACH,DIAGNOSE,LOG_IO,
  51.               GROUP,ACNT,PRMCEB,PRMMBX,PSWAPM,ALTPRI,SETPRV,TMPMBX,WORLD,
  52.               MOUNT,OPER,EXQUOTA,NETMBX,VOLPRO,PHY_IO,BUGCHK,PRMGBL,SYSGBL,
  53.               PFNMAP,SHMEM,SYSPRV,BYPASS,SYSLCK,SHARE,UPGRADE,DOWNGRADE,
  54.               GRPPRV,READALL,SECURITY);
  55.  
  56.   PrivArray = [QUAD] PACKED ARRAY [CMKRNL..SECURITY] OF BOOLEAN;
  57.  
  58.   Item_List_3 = PACKED ARRAY [1..3] OF PACKED RECORD
  59.                                        CASE INTEGER OF
  60.                                          1 : (FIELD1 : [WORD] 0..65535;
  61.                                               FIELD2 : [WORD] 0..65535;
  62.                                               FIELD3 : UNSIGNED;
  63.                                               FIELD4 : UNSIGNED );
  64.                                          2 : (TERMINATOR : UNSIGNED);
  65.                                        END;
  66.  
  67.  
  68.   String12 = PACKED ARRAY [1..12] OF CHAR;
  69.  
  70.  
  71. VAR
  72.   Privilege  : PrivType;
  73.   PrivCount  : PrivType;
  74.  
  75.   DefPrivs   : [VOLATILE] PrivArray;
  76.   AuthPrivs  : [VOLATILE] PrivArray;
  77.   Privs      : PrivArray;
  78.  
  79.   Identifier : String12;
  80.  
  81.   ID_Context : UNSIGNED;
  82.   ID_Status  : UNSIGNED;
  83.   UAI_Stat   : UNSIGNED;
  84.  
  85.   InfoList   : Item_List_3;
  86.  
  87.   DefLength  : [VOLATILE] INTEGER;
  88.   AuthLength : [VOLATILE] INTEGER;
  89.  
  90.   NameOut    : BOOLEAN;       
  91.   ErrorOut   : BOOLEAN;
  92.  
  93.   OutFile    : TEXT;
  94.  
  95.   OutName    : PACKED ARRAY [1..32] OF CHAR;
  96.  
  97.  
  98. BEGIN
  99.   ErrorOut := FALSE;
  100.  
  101.   WRITELN ('Enter privilege(s) to check for.  Separate mulitiple');
  102.   WRITELN ('privileges with a single space.');
  103.   WRITE ('> ');
  104.  
  105.   FOR Privilege := CMKRNL TO SECURITY DO
  106.     Privs[Privilege] := FALSE;
  107.  
  108.   REPEAT
  109.     READ (Privilege, ERROR := CONTINUE);
  110.  
  111.     IF STATUS(INPUT) = PAS$K_SUCCESS THEN
  112.       Privs[Privilege] := TRUE
  113.     ELSE
  114.       ErrorOut := TRUE;
  115.  
  116.   UNTIL EOLN(INPUT) OR ErrorOut;
  117.  
  118.   READLN;
  119.  
  120.  
  121.   IF NOT ErrorOut THEN
  122.     BEGIN
  123.       WRITELN;
  124.       WRITE ('Enter file to write to [ TT: ]: ');
  125.       READLN (OutName);
  126.  
  127.       WRITELN ('Working...');
  128.       WRITELN; WRITELN;
  129.  
  130.       IF OutName = '' THEN
  131.         OutName := 'TT:';
  132.  
  133.       OPEN (OutFile, OutName);
  134.       REWRITE (OutFile);
  135.  
  136.       WRITELN (OutFile, 'Privileges that are DEFAULT but not AUTHORIZED');
  137.       WRITELN (OutFile, 'are marked with an asterisk.');
  138.       WRITELN (OutFile);
  139.  
  140.       ID_Context := 0;
  141.  
  142.       InfoList[1].FIELD1 := 64;
  143.       InfoList[1].FIELD2 := UAI$_DEF_PRIV;
  144.       InfoList[1].FIELD3 := (ADDRESS(DefPrivs))::UNSIGNED;
  145.       InfoList[1].FIELD4 := (ADDRESS(DefLength))::UNSIGNED;
  146.  
  147.       InfoList[2].FIELD1 := 64;
  148.       InfoList[2].FIELD2 := UAI$_PRIV;
  149.       InfoList[2].FIELD3 := (ADDRESS(AuthPrivs))::UNSIGNED;
  150.       InfoList[2].FIELD4 := (ADDRESS(AuthLength))::UNSIGNED;
  151.  
  152.       InfoList[3].Terminator := 0;
  153.  
  154.       ID_Status := SS$_NORMAL;
  155.  
  156.       WHILE ID_Status <> SS$_NOSUCHID DO
  157.         BEGIN
  158.           ID_Status := $IDTOASC (-1, NAMBUF := Identifier, CONTXT := ID_Context);
  159.           UAI_Stat := $GETUAI (USRNAM := Identifier, ITMLST := InfoList);
  160.  
  161.           IF UAI_STAT = SS$_NORMAL THEN
  162.             BEGIN
  163.               NameOut := FALSE;
  164.         
  165.               FOR PrivCount := CMKRNL TO SECURITY DO
  166.                 IF (Privs[PrivCount] AND AuthPrivs[PrivCount]) OR 
  167.                    (Privs[PrivCount] AND DefPrivs[PrivCount]) THEN
  168.                   BEGIN
  169.       
  170.                     IF NOT NameOut THEN
  171.                       BEGIN
  172.                         WRITE (OutFile, Identifier, '   ');
  173.                         NameOut := TRUE;
  174.                       END; (* IF *)
  175.         
  176.                     WRITE (OutFile, PrivCount);
  177.          
  178.                     IF (DefPrivs[PrivCount] AND (NOT AuthPrivs[PrivCount])) THEN
  179.                       WRITE (OutFile, '* ')
  180.                     ELSE
  181.                       WRITE (OutFile, ' ');
  182.         
  183.                   END; (* IF *)
  184.         
  185.               IF NameOut THEN
  186.                 WRITELN (OutFile);
  187.         
  188.             END; (* IF *)
  189.  
  190.         END; (* WHILE *)
  191.  
  192.     END (* IF *)
  193.   ELSE
  194.     WRITELN ('Error reading Privilege(s).  Program ends.');
  195.  
  196. END.
  197. $EOD
  198.