home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lsmt213c.zip / getacl.cmd < prev    next >
OS/2 REXX Batch file  |  1997-10-23  |  12KB  |  369 lines

  1. /*---------------------------------------------------------------------------*\
  2. |   GET all access control lists of all aliases definEnd on a server          |
  3. |   LS 3.0 and higher and dump into an ASCII file.                            |
  4. |       (C) Alain Rykaert IBM Belgium & Hermann Pauli IBM Germany SEP95-MAY96 |
  5. |                                                                 OCT97       |
  6. \*---------------------------------------------------------------------------*/
  7.  
  8.     LUserId = 8                    /* max.length of any user ID in your Dom*/
  9.                                    /* LS 2.0 and 3.0 LID <= 8, LS 4.0 <= 15 */
  10.     Parse Arg Option
  11.  
  12.     Call Init                     /* Initalisation of DLL's and other stuff*/
  13.     Call ChkOpt                          /* Check Options & display Welcome*/
  14.     Call ChkPWS                               /* Check the PWS & Admin name*/
  15.     Call Main                                            /* Do the main job*/
  16.     Call Quit                                                       /* Quit*/
  17.  
  18.  MAIN:/* ------------------------------------------------------ MAIN: -------*/
  19.  
  20.     Call Time('R')
  21.    'If exist' OUTF 'del' OUTF
  22.     Call LineOut OUTF, '* List of all ACLs of existing Aliases,',
  23.                        || ' allowed Options U=update D=delete'
  24.  
  25.  /* Prepare the output tables banner */
  26.  
  27.     Call GetBanner
  28.     Comment = '* type of alias :'
  29.  
  30.     Call LineOut OutF, GULst
  31.     NumAlias  = 0
  32.  
  33.     Call RxStemSort 'ALIASFiles'
  34.     Do i = 1 to ALIASFiles.0
  35.       Call Status 'F' ALIASFiles.i i
  36.       Call GetInfo ALIASFiles.i
  37.     End
  38.     Say
  39.  
  40.     Call RxStemSort 'ALIASPrint'
  41.     Do i = 1 to ALIASPrint.0
  42.       Call Status 'P' ALIASPrint.i i
  43.       Call GetInfo ALIASPrint.i
  44.     End
  45.     Say
  46.  
  47.     Call RxStemSort 'ALIASSerial'
  48.     Do i = 1 to ALIASSerial.0
  49.       Call Status 'S' ALIASSerial.i i
  50.       Call GetInfo ALIASSerial.i
  51.     End
  52.  
  53.     If \MUTE Then Say '0909'x ' Total Time  =' Trunc(Time('E'),2)
  54.  
  55.     Call Stream OutF, 'C', 'Close'
  56.  
  57.     Call SysSetObjectData OutF, 'ICONFILE='Directory()'\ACL.Ico'
  58.  
  59.     Return
  60.  
  61.  GetInfo:/* --------------------------------------------------- GetInfo: ----*/
  62.  
  63.     Parse Arg W_Alias
  64.     OUT = EmptyLst
  65.     OUT = OVERLAY(W_ALIAS,OUT,5)
  66.  
  67.     /* Retrieve info about all Aliases (we need server and resource info)   */
  68.     RC = NetGetInfo(NETALIAS, 'AliasInfo', '\\'SRVNAME, W_Alias)
  69.     If RC = 0
  70.      Then Nop
  71.      Else Do
  72.             Call LOGIT 'NetGetInfo Alias', W_Alias ,RC
  73.             Call Quit
  74.           End
  75.  
  76.     /* find the correct ressource, depEndEnd on alias type  */
  77.     Select
  78.       When AliasInfo.type = 'Files'   Then Alias_Res = AliasInfo.path
  79.       When AliasInfo.type = 'Printer' Then Alias_Res = '\print\'AliasInfo.queue
  80.       When AliasInfo.type = 'Serial'  Then Alias_Res = '\comm\'AliasInfo.queue
  81.       Otherwise nop
  82.     End
  83.  
  84.     /* Get ACP for alias */
  85.     RC = NetGetInfo(NETACCESS, 'ACP', '\\' || AliasInfo.server, Alias_Res)
  86.     If RC = 0
  87.       Then Do
  88.              NumAlias = NumAlias + 1
  89.              If NumAlias // MAXLINES = 0
  90.                Then Call Lineout OUTF, GULst
  91.                Else nop
  92.  
  93.              Do k = 1 to ACP.count
  94.                UserGroup = ACP.k.ugname
  95.                If GUPos.UserGroup = 0
  96.                  Then nop                               /* user not in list*/
  97.                  Else Do               /* add found ACP info to output line*/
  98.                         OUT = OVERLAY(Strip(ACP.audit),OUT,LPre_Banner-6)
  99.                         LCol = POS(';',GULst,GUPos.UserGroup)-GUPos.UserGroup
  100.                         LACPT = CENTER(ACP.k.access,Max(LCol,LENGTH(ACP.k.access)))
  101.                         OUT = OVERLAY(LACPT,OUT,GUPos.UserGroup)
  102.                       End
  103.              End
  104.               Call LineOut OUTF, OUT
  105.           End
  106.  
  107.       Else If Left(strip(RC),4) = '2222'                     /* no ACP found*/
  108.            Then Do
  109.                    NumAlias = NumAlias + 1
  110.                    If NumAlias // MAXLINES = 0
  111.                     Then Call Lineout OUTF, GULst
  112.                     Else nop
  113.  
  114.                    Call Lineout OUTF, OUT
  115.                 End
  116.  
  117.            Else Call LOGIT 'NetGetInfo Access', W_User ||'/'|| W_Alias, RC
  118.     Return
  119.  
  120.  Status:/* ---------------------------------------------------- Status: -----*/
  121.  
  122.     Parse ARG S_Typ S_ALIAS S_Number
  123.     Select
  124.       When S_Typ = 'F' Then S_Text = 'File  '
  125.       When S_Typ = 'P' Then S_Text = 'Print '
  126.       When S_Typ = 'S' Then S_Text = 'Serial'
  127.       Otherwise nop
  128.     End
  129.  
  130.     Do
  131.        Say '0909'x ESC'[K' S_Text S_Number '=' S_ALIAS
  132.        If \MUTE
  133.           Then Do
  134.                   Call SysCurState OFF
  135.                   parse value SysCurPos() with row col
  136.                   row = row - 1
  137.                   Call SysCurPos row,0
  138.                End
  139.           Else Nop
  140.     End
  141.     Return
  142.  
  143.  GetBanner:/* ------------------------------------------------- GetBanner:---*/
  144.  
  145.     /* get defined groups */
  146.     RC = NetEnumerate(70, 'GROUP', '\\'SRVNAME)
  147.  
  148.     If RC <> 0
  149.      Then Do
  150.              Call LOGIT 'NetEnum. Group' , 'Server \\' || SRVNAME, RC
  151.              Call Quit
  152.           End
  153.      Else    Call RxStemSort 'GROUP'
  154.  
  155.     /* get defined userids */
  156.     RC = NetEnumerate(280, 'USERID', '\\'SRVNAME)
  157.  
  158.     If RC <> 0
  159.      Then Do
  160.              Call LOGIT 'NetEnum. User' , 'Server \\' || SRVNAME, RC
  161.              Call Quit
  162.           End
  163.      Else    Call RxStemSort 'USERID'
  164.  
  165.     /* Get list of all aliases definEnd on server */
  166.     RC = NetEnumerate(NETALIAS, 'ALIASFiles' , '\\'SRVNAME,1)
  167.     If RC <> 0 & substr(RC,1,3) <> '234 '       /* 234 = no File Alias def.*/
  168.      Then Do
  169.              Call LOGIT 'NetEnum. F-Alias' , 'Server \\' || SRVNAME , RC
  170.              Call Quit
  171.           End
  172.      Else    Call RxStemSort 'ALIASFiles'
  173.  
  174.     RC = NetEnumerate(NETALIAS, 'ALIASPrint' , '\\'SRVNAME,2)
  175.     If RC <> 0 & substr(RC,1,3) <> '234 '       /* 234 = no File Alias def.*/
  176.      Then Do
  177.              Call LOGIT 'NetEnum. P-Alias' , 'Server \\' || SRVNAME , RC
  178.              Call Quit
  179.           End
  180.      Else    Call RxStemSort 'ALIASPrint'
  181.  
  182.     RC = NetEnumerate(NETALIAS, 'ALIASSerial', '\\'SRVNAME,4)
  183.     If RC <> 0 & substr(RC,1,3) <> '234 '       /* 234 = no File Alias def.*/
  184.      Then Do
  185.              Call LOGIT 'NetEnum. S-Alias' , 'Server \\' || SRVNAME , RC
  186.              Call Quit
  187.           End
  188.      Else    Call RxStemSort 'ALIASSerial'
  189.  
  190.     /* prepare first non user/group columns of the banner */
  191.     Pre_Banner  = Left('OPT'||';'||'ALIAS',LAlias + 4,' ')
  192.     EmptyLst    = Left('   '||';',length(Pre_Banner),' ')
  193.     Pre_Banner  = Pre_Banner || ';' || 'AUDIT ;'
  194.     EmptyLst    = EmptyLst   || ';' || '      ' || ';'
  195.     LPRe_Banner = length(Pre_Banner)
  196.  
  197.     GULst       = Pre_Banner
  198.  
  199.     GUPos.      = 0                            /* initialize all GUPos to 0*/
  200.  
  201.  /* build banner using the groups */
  202.     Do i=1 to GROUP.0
  203.        GU       = Group.i
  204.        GUPos.GU = length(GULst) + 1
  205.        GULst    = GULst || Left(GU,max(8,length(GU)), ' ') || ';'
  206.        EmptyLst = EmptyLst || Left(' ',max(8,Length(GU)),' ') || ';'
  207.     End
  208.  
  209.  /* build banner using the users */
  210.     Do i=1 to USERID.0
  211.        GU       = USERID.i
  212.        GUPos.GU = length(GULst) + 1
  213.        GULst    = GULst || Left(GU,max(8,length(GU)), ' ') || ';'
  214.        EmptyLst = EmptyLst || Left(' ',max(8,Length(GU)),' ') || ';'
  215.     End
  216.  
  217.     Return
  218.  
  219.  
  220.  CHKOPT:/* ---------------------------------------------------- CHKOPT: -----*/
  221.  
  222.     SRVNAME = '';
  223.     OUTF    = 'ACL.CSV';
  224.     LOGF    = 'LSMT.LOG';
  225.     PIPE    = '';
  226.     TRACE   = 0;
  227.     MUTE    = 0;
  228.  
  229.     OPTION = Translate(OPTION)
  230.     Do While OPTION <> ''
  231.        Parse value OPTION with ARGUMENT ' ' OPTION
  232.        Select
  233.         When Left(ARGUMENT,5) = '/SRV:'  Then SRVNAME = Substr(ARGUMENT,6)
  234.         When Left(ARGUMENT,5) = '/OUT:'  Then OUTF    = Substr(ARGUMENT,6)
  235.         When Left(ARGUMENT,5) = '/LOG:'  Then LOGF    = Substr(ARGUMENT,6)
  236.         When Left(ARGUMENT,5) = '/PIP:'  Then PIPE    = Substr(ARGUMENT,6)
  237.         When Left(ARGUMENT,2) = '/M'     Then MUTE    = 1
  238.         When Left(ARGUMENT,2) = '/T'     Then TRACE   = 1
  239.         otherwise Nop
  240.        End
  241.     End
  242.  
  243.     If SRVNAME = '' Then signal GETHELP
  244.  
  245.     If \MUTE
  246.      Then Do
  247.              Topic1 = 'GETWELCOME'
  248.              Topic_String.Topic1.1 = SRVNAME;
  249.              Topic_String.Topic1.2 = OUTF;
  250.              Topic_String.Topic1.3 = LOGF;
  251.              Topic_String.Topic1.4 = PIPE' ';
  252.              Topic_List = 'WELCOMELOGO' Topic1 'GETACL';
  253.              Call GETANS
  254.              Parse VALUE SysCurPos() With Old_R Old_C; 'Pause';
  255.              Call SysCurPos Old_R, Old_C; Say ESC'[K';
  256.           End
  257.      Else Do
  258.              Say 'ServerName =' SRVNAME
  259.              Say 'OutputFile =' OUTF
  260.              Say 'LogFile    =' LOGF
  261.           End
  262.     Return
  263.  
  264.  CHKPWS:/* ---------------------------------------------------- CHKPWS: -----*/
  265.  
  266.     RC = NetGetInfo(350, 'WKSTAINFO','')
  267.     If RC = 0
  268.      Then Do
  269.              ADMNAME = WKSTAINFO.UserName
  270.              PWSNAME = WKSTAINFO.ComputerName
  271.           End
  272.      Else Do
  273.             Call LOGIT 'Get PWS Info', ,RC
  274.             Call Quit
  275.           End
  276.     Return
  277.  
  278.  INIT:/* ------------------------------------------------------ INIT: -------*/
  279.  
  280.     Call RgUtil   '/m'                                    /* Rexx Utilities*/
  281.     Call RgUtils  '/m'                                    /* Rexx Utilities*/
  282.     Call RgNPipes '/m'                                       /* Named Pipes*/
  283.     Call RgLSRXUT '/m'                             /* Lan Server Rexx Utils*/
  284.  
  285.     Parse Upper Source . . P_NAME
  286.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  287.  
  288.    '@echo off'
  289.     ESC     = '1B'x
  290.     REDIR   = '>NUL 2>NUL'
  291.     MAXLINES = 20              /* Number of Lines to separate with a header*/
  292.  
  293.     LMinAss = 5                     /* min. length for logon assignment col*/
  294.     LAlias  = 9                                  /* max.length of alias col*/
  295.                                  /* 9 entries per alias posible           */
  296.  
  297.     NETACCESS   = 10                                 /* code for LSREXX API*/
  298.     NETALIAS    = 20
  299.     NETWKSTA    = 350
  300.  
  301.     NumAlias  = 0                            /* number of aliases processed*/
  302.  
  303.  
  304.     Resource_File = 'LSMT.RSC'
  305.     Call CHKFILE Resource_File
  306.  
  307.     Return
  308.  
  309.  GETANS:/* ---------------------------------------------------- GETANS: -----*/
  310.  
  311.     Vars_List =Ansi_Say(Resource_File Topic_List);
  312.     Parse VALUE SysCurPos() With Old_R Old_C;
  313.     Do While Vars_List <> '';
  314.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List;
  315.        Call SysCurPos Row, Column;
  316.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m';
  317.        End;
  318.     Call SysCurPos Old_R, Old_C;
  319.  
  320.     Return
  321.  
  322.  GETHELP:/* --------------------------------------------------- GETHELP: ----*/
  323.  
  324.     If \MUTE
  325.      Then Do
  326.              Topic1='GETHELP'
  327.              Topic_String.Topic1.1=PRGN;
  328.              Topic_List=Topic1;
  329.              Call GETANS
  330.           End
  331.      Else Say 'Incorrect options.'
  332.  
  333.     Call QUIT
  334.  
  335.     Return
  336.  
  337.  CHKFILE:/* --------------------------------------------------- CHKFILE: ----*/
  338.  
  339.     Parse Arg FILE
  340.     RC = Stream(FILE, 'C', 'QUERY EXIST')
  341.     If RC = ''
  342.      Then Do
  343.              Say ' File' FILE 'not found.'
  344.              Call QUIT
  345.           End
  346.      Else Nop
  347.     Call Stream FILE, 'C', 'CLOSE'
  348.  
  349.     Return
  350.  
  351.  LOGIT:/* ----------------------------------------------------- LOGIT: ------*/
  352.  
  353.     FUNC = ARG(1); INFO = ARG(2); RCOD = ARG(3)
  354.     RC = LLOGIT(LOGF, PIPE, ADMNAME, PRGN, FUNC, INFO, RCOD)
  355.  
  356.     Return
  357.  
  358.  QUIT:/* ------------------------------------------------------ QUIT: -------*/
  359.  
  360.     Call LineOut 'LSMT.End', PRGN, 1
  361.     Call Stream  'LSMT.End', 'C', 'CLOSE'
  362.  
  363.     Call Stream LOGF, 'C', 'CLOSE'
  364.     Call Stream OUTF, 'C', 'CLOSE'
  365.  
  366.     Exit
  367.  
  368.  /*--------------------------------------------------------------------------*/
  369.