home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lsmt213c.zip / getassgn.cmd < prev    next >
OS/2 REXX Batch file  |  1996-10-09  |  13KB  |  366 lines

  1. /*---------------------------------------------------------------------------*\
  2. |   GET all Logon assignments from Server 3.0 and higher                      |
  3. |   and dump it to an ASCII File                                              |
  4. |       (C) Alain Rykaert IBM Belgium & Hermann Pauli IBM Germany SEP95-MAY96 |
  5. \*---------------------------------------------------------------------------*/
  6.                                    /* you may change this variables         */
  7.     LUserId  = 8                   /* max.length of any user ID in your dom*/
  8.                                    /* LS 2.0 and 3.0 LID <= 8, LS 4.0 <= 15 */
  9.     MaxLines = 20                    /* max. number of lines between banner*/
  10.  
  11.     Parse Arg Option
  12.  
  13.     Call INIT                     /* Initalisation of DLL's and other stuff*/
  14.     Call CHKOPT                          /* Check Options & display Welcome*/
  15.     Call CHKPWS                               /* Check the PWS & Admin name*/
  16.     Call MAIN                                            /* do the main job*/
  17.     Call CHKERR                                         /* Check for errors*/
  18.     Call QUIT                                                       /* Quit*/
  19.  
  20.  MAIN:/* ------------------------------------------------------ MAIN: -------*/
  21.  
  22.     Call Time('R')
  23.    'if exist' OUTF 'del' OUTF
  24.  
  25.    /* get all defined groups */
  26.     RC = NetEnumerate(NETGROUP, 'GroupInfo', '\\'SRVNAME)
  27.     if RC <> 0
  28.      then do
  29.              Call LOGIT 'NetEnum. Group' , 'Server \\' || SRVNAME , RC
  30.              Call quit
  31.           end
  32.      else call RxStemSort 'GroupInfo'
  33.  
  34.    /* prepare the output tables banner */
  35.     Call GetBanner
  36.  
  37.    /* prepare the top of the output */
  38.    'if exist' OUTF 'del' OUTF
  39.  
  40.     NumOut = 0 ; NumGrp = 0
  41.  
  42.    /* put info to outfile, sorted by Group and UserID */
  43.     do i = 1 to GroupInfo.0
  44.        /* decide whether this group will be covered or not :                 */
  45.        /*     (groups SERVERS, GROUPID and LOCAL will always be ignored)     */
  46.        /* if you selected show groups only   => ignore group USERS           */
  47.        /* if you selected do not show groups => only ADMINS, GUESTS & USERS  */
  48.        /*                                       else show ALL groups         */
  49.        if (\ShowGrp & Translate(GroupInfo.i) <> 'USERS',
  50.                     & Translate(GroupInfo.i) <> 'GUESTS',
  51.                     & Translate(GroupInfo.i) <> 'ADMINS') |,
  52.           (\ShowUsr & Translate(GroupInfo.i)  = 'USERS' ) |,
  53.           (ShowGrp  & (Translate(GroupInfo.i) = 'SERVERS',
  54.                      | Translate(GroupInfo.i) = 'GROUPID',
  55.                      | Translate(GroupInfo.i) = 'LOCAL'))
  56.         then iterate
  57.  
  58.        NumGrp = NumGrp + 1
  59.        Call Lineout OUTF, ALIASLST
  60.        Call Lineout OUTF, '* Members Of Group' GroupInfo.i
  61.  
  62.        RC = NetGetInfo(NETGROUPUSERS, 'USERID', '\\'SRVNAME, GroupInfo.i)
  63.        if RC <> 0
  64.         then do
  65.                 Call Logit 'NetGetInfo G/U' ,,
  66.                            'Server \\' || SRVNAME USERID.i , RC
  67.                 Call Quit
  68.              end
  69.         else Call RxStemSort 'USERID'
  70.  
  71.        do j = 1 to USERID.0
  72.           NumOut = NumOut + 1
  73.           if j // MaxLines = 0
  74.            then Call Lineout OUTF, ALIASLST
  75.            else nop
  76.  
  77.           if \Trace
  78.            then do
  79.                    if ShowGrp
  80.                     then say '0909'x ESC'[K Total Groups =' NumGrp 'Users =' j'/'UserID.0 USERID.j
  81.                     else say '0909'x ESC'[K Total Users  =' NumOut '('j'/'UserID.0')' USERID.j
  82.                    if \MUTE
  83.                     then do
  84.                             Call SysCurState OFF
  85.                             parse value SysCurPos() with row col
  86.                             row = row - 1
  87.                             Call SysCurPos row,0
  88.                          end
  89.                     else Nop
  90.                  end
  91.            else say '0909'x NumOut ':' GroupInfo.i USERID.j
  92.  
  93.           W_ID = USERID.j
  94.           OUT  = EmptyLst
  95.           OUT  = OVERLAY(W_ID,OUT,5)
  96.  
  97.           RC = NetGetInfo(NETLOGONASN, 'LASSINFO', '\\'SRVNAME, USERID.j)
  98.           if RC = 0
  99.            then do
  100.                    do k = 1 to LASSINFO.count
  101.                       W_Alias  = LASSINFO.k.Alias
  102.                       W_Device = LASSINFO.k.Device
  103.                       Call PrepOut
  104.                    end
  105.                    Call LineOut OUTF, OUT
  106.                 end
  107.            else if left(strip(RC),1) <> 3
  108.                  then do
  109.                          Call LOGIT 'NetGetInfo LA' , USERID.j , RC
  110.                          call quit
  111.                       end
  112.                  else do                    /* no assignments for this user*/
  113.                          W_Alias  = ''
  114.                          Call PrepOut
  115.                          Call LineOut OUTF, OUT
  116.                       end
  117.        end
  118.        Call Lineout OUTF, ' '
  119.     end
  120.  
  121.     if \MUTE then say '0A0D0909'x ' Total Time   =' Trunc(Time('E'),2)
  122.  
  123.     Call Stream OUTF, 'C', 'CLOSE'
  124.  
  125.     Call SysSetObjectData OUTF, 'ICONFILE='Directory()'\Assgn.Ico'
  126.  
  127.     Return
  128.  
  129.  PREPOUT:/* --------------------------------------------------- PREPOUT: ----*/
  130.  
  131.     if strip(W_Alias) <> ''
  132.      then do
  133.         if APos.W_Alias = 0
  134.          then do
  135.                  ErrAsgn = 1
  136.               end
  137.          else do
  138.                  LCol  = POS(';',ALIASLST,APos.W_Alias) - APos.W_Alias
  139.                  LAssT = CENTER(W_Device,Max(LCol,LENGTH(W_Device)))
  140.                  OUT   = OVERLAY(LAssT,OUT,APos.W_Alias)
  141.               end
  142.      end
  143.      else nop
  144.     Return
  145.  
  146.  CHKERR:/* --------------------------------------------------- CHECKERR: ----*/
  147.  
  148.     if ErrAsgn
  149.      then do
  150.             Topic_List='CHKASSGN';
  151.             Call GETANS
  152.           end
  153.      else nop
  154.     Return
  155.  
  156.  GETBANNER:/* ------------------------------------------------- GETBANNER:---*/
  157.  
  158.     /* Get list of all aliases definend on server */
  159.     RC = NetEnumerate(NETALIAS, 'ALIASFiles' , '\\'SRVNAME,1)
  160.     if RC <> 0 & substr(RC,1,3) <> '234 '       /* 234 = no File Alias def.*/
  161.      then do
  162.              Call LOGIT 'NetEnumerate F-Alias' , 'Server \\' || SRVNAME , RC
  163.              call quit
  164.           end
  165.      else call RxStemSort 'ALIASFiles'
  166.  
  167.     RC = NetEnumerate(NETALIAS, 'ALIASPrint' , '\\'SRVNAME,2)
  168.     if RC <> 0 & substr(RC,1,3) <> '234 '       /* 234 = no File Alias def.*/
  169.      then do
  170.              Call LOGIT 'NetEnumerate P-Alias' , 'Server \\' || SRVNAME , RC
  171.              call quit
  172.           end
  173.      else call RxStemSort 'ALIASPrint'
  174.  
  175.     RC = NetEnumerate(NETALIAS, 'ALIASSerial', '\\'SRVNAME,4)
  176.     if RC <> 0 & substr(RC,1,3) <> '234 '       /* 234 = no File Alias def.*/
  177.      then do
  178.              Call LOGIT 'NetEnumerate S-Alias' , 'Server \\' || SRVNAME , RC
  179.              call quit
  180.           end
  181.      else call RxStemSort 'ALIASSerial'
  182.  
  183.     ALIASLST = 'OPT'           || ';' || left('USERID',LUserId,' ') || ';'
  184.     EmptyLst = left(' ',3,' ') || ';' || left(' ',LUserId,' ')      || ';'
  185.  
  186.     APos.   = 0                                 /* initialize all APos to 0*/
  187.     do i=1 to ALIASFiles.0
  188.        AN       = ALIASFiles.i
  189.        APos.AN  = length(ALIASLST) + 1
  190.        ALIASLST = ALIASLST || strip(AN) || ';'
  191.        EmptyLst = EmptyLst || Left(' ',Length(AN),' ') || ';'
  192.     end
  193.  
  194.     do i=1 to ALIASPrint.0
  195.        AN       = ALIASPrint.i
  196.        APos.AN  = length(ALIASLST) + 1
  197.        ALIASLST = ALIASLST || Left(AN,Max(Length(AN),LMinAss),' ') || ';'
  198.        EmptyLst = EmptyLst || Left(' '  ,Max(Length(AN),LMinAss),' ') || ';'
  199.     end
  200.  
  201.     do i=1 to ALIASSerial.0
  202.        AN       = ALIASSerial.i
  203.        APos.AN  = length(ALIASLST) + 1
  204.        ALIASLST = ALIASLST || Left(AN,Max(Length(AN),LMinAss),' ') || ';'
  205.        EmptyLst = EmptyLst || Left(' '  ,Max(Length(AN),LMinAss),' ') || ';'
  206.     end
  207.  
  208.     Return
  209.  
  210.  CHKOPT:/* ---------------------------------------------------- CHKOPT: -----*/
  211.  
  212.     SRVNAME = ''
  213.     OUTF  = 'ASSGN.CSV'
  214.     LOGF  = 'LSMT.LOG'
  215.     PIPE  = ''
  216.     TRACE = 0
  217.     MUTE  = 0
  218.     ShowGrp = 0
  219.     ShowUsr = 1
  220.  
  221.     OPTION = Translate(OPTION)
  222.     do while OPTION <> ''
  223.        Parse value OPTION with ARGUMENT ' ' OPTION
  224.        select
  225.         when Left(ARGUMENT,5) = '/SRV:'  then SRVNAME = Substr(ARGUMENT,6)
  226.         when Left(ARGUMENT,5) = '/OUT:'  then OUTF    = Substr(ARGUMENT,6)
  227.         when Left(ARGUMENT,5) = '/LOG:'  then LOGF    = Substr(ARGUMENT,6)
  228.         when Left(ARGUMENT,5) = '/PIP:'  then PIPE    = Substr(ARGUMENT,6)
  229.         when Left(ARGUMENT,2) = '/M'     then MUTE    = 1
  230.         when Left(ARGUMENT,2) = '/T'     then TRACE   = 1
  231.         when Left(ARGUMENT,6) = '/GROUPS',
  232.            | Left(ARGUMENT,2) = '/G'     then ShowGrp = 1
  233.         otherwise Nop
  234.        end
  235.     end
  236.  
  237.     if SRVNAME = '' then signal GETHELP
  238.  
  239.     if \MUTE
  240.      then do
  241.              Topic1 = 'GETWELCOME'
  242.              Topic2 = 'GETASSGN'
  243.              Topic_String.Topic1.1 = SRVNAME;
  244.              Topic_String.Topic1.2 = OUTF;
  245.              Topic_String.Topic1.3 = LOGF;
  246.              Topic_String.Topic1.4 = PIPE' ';
  247.              if ShowGrp
  248.                 then ShowTxt = 'Yes'
  249.                 else ShowTxt = 'No '
  250.              Topic_String.Topic2.1 = ShowTxt;
  251.              Topic_List='WELCOMELOGO' Topic1 Topic2;
  252.              Call GETANS
  253.              Parse VALUE SysCurPos() With Old_R Old_C; 'Pause';
  254.              Call SysCurPos Old_R, Old_C; say ESC'[K';
  255.           end
  256.      else do
  257.              say 'ServerName =' SRVNAME
  258.              say 'OutputFile =' OUTF
  259.              say 'LogFile    =' LOGF
  260.           end
  261.     Return
  262.  
  263.  CHKPWS:/* ---------------------------------------------------- CHKPWS: -----*/
  264.  
  265.     RC = NetGetInfo(350, 'WKSTAINFO','')
  266.     if RC = 0
  267.      then do
  268.              ADMNAME = WKSTAINFO.UserName
  269.              PWSNAME = WKSTAINFO.ComputerName
  270.           end
  271.      else do
  272.             Call LOGIT 'Get PWS Info', ,RC
  273.             Call Quit
  274.           end
  275.     Return
  276.  
  277.  INIT:/* ------------------------------------------------------ INIT: -------*/
  278.  
  279.     Call RgUtil   '/m'                                    /* Rexx Utilities*/
  280.     Call RgUtils  '/m'                                    /* Rexx Utilities*/
  281.     Call RgNPipes '/m'                                       /* Named Pipes*/
  282.     Call RgLSRXUT '/m'                             /* Lan Server Rexx Utils*/
  283.  
  284.     Parse Upper Source . . P_NAME
  285.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  286.  
  287.    '@echo off'
  288.     ESC     = '1B'x
  289.     REDIR   = '>NUL 2>NUL'
  290.  
  291.     LMinAss = 5                     /* min. length for logon assignment col*/
  292.     ErrAsgn = 0                                      /* no assignment error*/
  293.  
  294.     NETLOGONASN   = 52                               /* code for LSREXX API*/
  295.     NETUSER       = 280
  296.     NETGROUPUSERS = 340
  297.     NETGROUP      = 70
  298.     NETWKSTA      = 350
  299.     NETALIAS      = 20
  300.  
  301.     Resource_File = 'LSMT.RSC'
  302.     Call CHKFILE Resource_File
  303.  
  304.     Return
  305.  
  306.  GETANS:/* ---------------------------------------------------- GETANS: -----*/
  307.  
  308.     Vars_List =Ansi_Say(Resource_File Topic_List);
  309.     Parse VALUE SysCurPos() With Old_R Old_C;
  310.     Do While Vars_List <> '';
  311.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List;
  312.        Call SysCurPos Row, Column;
  313.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m';
  314.        End;
  315.     Call SysCurPos Old_R, Old_C;
  316.  
  317.     Return
  318.  
  319.  GETHELP:/* --------------------------------------------------- GETHELP: ----*/
  320.  
  321.     if \MUTE
  322.      then do
  323.              Topic1='GETASSGNHELP'
  324.              Topic_String.Topic1.1=PRGN;
  325.              Topic_List=Topic1;
  326.              Call GETANS
  327.           end
  328.      else say 'Incorrect options.'
  329.  
  330.     Call QUIT
  331.  
  332.     Return
  333.  
  334.  CHKFILE:/* --------------------------------------------------- CHKFILE: ----*/
  335.  
  336.     Parse Arg FILE
  337.     RC = Stream(FILE, 'C', 'QUERY EXIST')
  338.     if RC = ''
  339.      then do
  340.              say ' File' FILE 'not found.'
  341.              Call QUIT
  342.           end
  343.      else Nop
  344.     Call Stream FILE, 'C', 'CLOSE'
  345.  
  346.     Return
  347.  
  348.  LOGIT:/* ----------------------------------------------------- LOGIT: ------*/
  349.  
  350.     FUNC = ARG(1); INFO = ARG(2); RCOD = ARG(3)
  351.     RC = LLOGIT(LOGF, PIPE, ADMNAME, PRGN, FUNC, INFO, RCOD)
  352.  
  353.     Return
  354.  
  355.  QUIT:/* ------------------------------------------------------ QUIT: -------*/
  356.  
  357.     Call LineOut 'LSMT.END', PRGN, 1
  358.     Call Stream  'LSMT.END', 'C', 'CLOSE'
  359.  
  360.     Call Stream   LOGF,      'C', 'CLOSE'
  361.     Call Stream   OUTF,      'C', 'CLOSE'
  362.  
  363.     Exit
  364.  
  365.  /*--------------------------------------------------------------------------*/
  366.