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

  1. /*---------------------------------------------------------------------------*\
  2. |   SET all GROUPS to a LAN Server 3.0 and higher                             |
  3. |   from an ASCII File                                                        |
  4. |                                   (C) Alain Rykaert IBM Belgium SEP95-MAY96 |
  5. \*---------------------------------------------------------------------------*/
  6.  
  7.     Parse Arg Option
  8.  
  9.     Call INIT                    /* Initialisation of DLL's and other stuff*/
  10.     Call CHKOPT                          /* Check Options & display Welcome*/
  11.     Call CHKPWS                               /* Check the PWS & Admin name*/
  12.     Call MAIN                                            /* do the main job*/
  13.     Call QUIT                                                       /* Quit*/
  14.  
  15.  MAIN:/* ------------------------------------------------------ MAIN: -------*/
  16.  
  17.     Call Time('R')
  18.    'if exist' CHKF 'del' CHKF
  19.     EC = 0
  20.     ExitCode = X2D('FE00')                          /* Good CID Return code*/
  21.  
  22.     do while Lines(INPF)
  23.        LLINE = LineIN(INPF)
  24.        OLINE = LLINE
  25.        parse value LLINE with OPT ';' LLINE
  26.        select
  27.         when OPT = '',
  28.          | LLINE = '',
  29.          | Left(Strip(OPT),1) = '*' then Iterate
  30.         when Translate(OPT) = 'OPT' then Call COLUMNS
  31.         when Translate(OPT) = 'A'   then Call UPDGROUP
  32.         when Translate(OPT) = 'D'   then Call DELGROUP
  33.         when Translate(OPT) = 'U'   then Call UPDGROUP
  34.         otherwise Iterate
  35.        end
  36.        if EC
  37.         then do
  38.                  Call LineOut CHKF, OLINE
  39.                  EC = 0
  40.                  ExitCode = X2D('1604')              /* Bad CID return code*/
  41.              end
  42.         else Nop
  43.     end
  44.     say '0909'x 'Total Time  =' Trunc(Time('E'),2)
  45.  
  46.     Return
  47.  
  48.  ADDGROUP:/* -------------------------------------------------- ADDGROUP: ---*/
  49.  
  50.     /* Goto the UPDGROUP section */
  51.  
  52.  DELGROUP:/* -------------------------------------------------- DELGROUP: ---*/
  53.  
  54.     EC = 0                                    /* Reset the Error Check Flag*/
  55.     Parse Value LLINE with USERID ';' LLINE
  56.     USERID = Strip(USERID)
  57.  
  58.     i = 1
  59.     do while LLINE <> ''
  60.        i = i + 1
  61.        parse value LLINE with FLAG ';' LLINE
  62.        FLAG = Translate(Strip(FLAG))
  63.        GROUP = COLNAME.i           /* Reminder : COLNAME = GroupName */
  64.        select
  65.  
  66.         when GROUP = 'ADMINS',
  67.            | GROUP = 'GUESTS',
  68.            | GROUP = 'USERS'
  69.          then Nop
  70.  
  71.         when FLAG = 'X'
  72.          then do
  73.                 RC = NetDelete(340, '\\'SRVNAME, GROUP, USERID)
  74.                 if RC = 0
  75.                  then RC = ''
  76.                  else Nop
  77.                 Call LOGIT 'Del User from Group', USERID'-'GROUP, RC
  78.              end
  79.  
  80.         otherwise Nop
  81.  
  82.        end
  83.     end
  84.  
  85.     Return
  86.  
  87.  UPDGROUP: /*-------------------------------------------------- UPDGROUP: ---*/
  88.  
  89.     EC = 0       /*  Reset the Error Check Flag  */
  90.     Parse Value LLINE with USERID ';' LLINE
  91.     USERID = Strip(USERID)
  92.     if \MUTE
  93.      then do
  94.              Call SysCurState OFF
  95.              Call SysCurPos 20,16
  96.              say ESC'[K'
  97.              Call SysCurPos 20,16
  98.           end
  99.      else Nop
  100.     say ' Update User =' USERID
  101.  
  102.     i = 1
  103.     do while LLINE <> ''
  104.        i = i + 1
  105.        parse value LLINE with FLAG ';' LLINE
  106.        FLAG = Translate(Strip(FLAG))
  107.  
  108.        GROUP = COLNAME.i           /* Reminder : COLNAME = GroupName */
  109.  
  110.        if GROUP = 'ADMINS',
  111.         | GROUP = 'GUESTS',
  112.         | GROUP = 'USERS'
  113.         then Iterate
  114.         else Nop
  115.  
  116.        if FLAG = 'X'
  117.          then do
  118.                  CHKGRP = ''        /* Get old Info */
  119.                  RC = NetGetInfo(330, 'USERGROUPS', '\\'SRVNAME, USERID)
  120.                  if RC = 0
  121.                   then do
  122.                           Call RxStemSort 'USERGROUPS'
  123.                           do j = 1 to USERGROUPS.0
  124.                              CHKGRP = CHKGRP USERGROUPS.j
  125.                           end
  126.                       /*  say '-' USERID 'is member of  :' CHKGRP */
  127.                           if Wordpos(GROUP,CHKGRP) > 0
  128.                            then Nop
  129.                            else do
  130.                                    RC = NetAdd(340, '\\'SRVNAME, GROUP, USERID)
  131.                                    if RC = 0
  132.                                      then RC = ''
  133.                                      else Nop
  134.                                    Call LOGIT 'Add User to Group', USERID'-'GROUP, RC
  135.                                 end
  136.                        end
  137.                   else Nop
  138.               end
  139.          else do
  140.                  CHKGRP = ''        /* Get old Info */
  141.                  RC = NetGetInfo(330, 'USERGROUPS', '\\'SRVNAME, USERID)
  142.                  if RC = 0
  143.                   then do
  144.                           Call RxStemSort 'USERGROUPS'
  145.                           do j = 1 to USERGROUPS.0
  146.                              CHKGRP = CHKGRP USERGROUPS.j
  147.                           end
  148.                       /*  say '-' USERID 'is member of  :' CHKGRP */
  149.                           if Wordpos(GROUP,CHKGRP) > 0
  150.                            then do
  151.                                    RC = NetDelete(340, '\\'SRVNAME, GROUP, USERID)
  152.                                    if RC = 0
  153.                                     then RC = ''
  154.                                     else Nop
  155.                                    Call LOGIT 'Del User from Group', USERID'-'GROUP, RC
  156.                                 end
  157.                            else Nop
  158.                        end
  159.                   else Nop
  160.               end
  161.     end
  162.  
  163.     Return
  164.  
  165.  SETINFO: /*--------------------------------------------------- SETINFO: ----*/
  166.  
  167.     RC = NetSetInfo(70, COLNAME, GROUPINFO.COLNAME, '\\'SRVNAME, GROUPINFO.NAME)
  168.      if RC = 0
  169.       then RC = ''
  170.       else EC = 1
  171.     if COLNAME = 'PASSWORD'
  172.      then Call LOGIT 'Update Groups', GROUPINFO.NAME '-' '****', RC
  173.      else Call LOGIT 'Update Groups', GROUPINFO.NAME '-' GROUPINFO.COLNAME, RC
  174.  
  175.     Return
  176.  
  177.  COLUMNS: /*--------------------------------------------------- COLUMNS: ----*/
  178.  
  179.     BANNER = 'OPT'
  180.     i = 0
  181.     do while LLINE <> ''
  182.        i = i + 1
  183.        parse value LLINE with COLNAME.i ';' LLINE
  184.        BANNER = BANNER';'COLNAME.i
  185.     end
  186.  
  187.     COLT = i                      /* Total numbers of columns */
  188.     Call LineOut CHKF, BANNER
  189.  
  190.     Return
  191.  
  192.  CHKOPT: /*---------------------------------------------------- CHKOPT: -----*/
  193.  
  194.     SRVNAME = '';
  195.     INPF = 'GROUPS2.CSV';
  196.     LOGF = 'LSMT.LOG';
  197.     CHKF = 'GROUPS2.CHK';
  198.     PIPE = '';
  199.     TRACE = 0;
  200.     MUTE = 0;
  201.  
  202.     OPTION = Translate(OPTION)
  203.     do while OPTION <> ''
  204.        Parse value OPTION with ARGUMENT ' ' OPTION
  205.        select
  206.         when Left(ARGUMENT,5) = '/SRV:' then SRVNAME = Substr(ARGUMENT,6)
  207.         when Left(ARGUMENT,5) = '/INP:' then INPF    = Substr(ARGUMENT,6)
  208.         when Left(ARGUMENT,5) = '/LOG:' then LOGF    = Substr(ARGUMENT,6)
  209.         when Left(ARGUMENT,5) = '/CHK:' then CHKF    = Substr(ARGUMENT,6)
  210.         when Left(ARGUMENT,5) = '/PIP:' then PIPE    = Substr(ARGUMENT,6)
  211.         when Left(ARGUMENT,2) = '/M'    then MUTE    = 1
  212.         when Left(ARGUMENT,2) = '/T'    then TRACE   = 1
  213.         otherwise Nop
  214.        end
  215.     end
  216.  
  217.     if SRVNAME = '' then signal GETHELP
  218.  
  219.     if \MUTE
  220.      then do
  221.              Topic1='SETWELCOME'
  222.              Topic_String.Topic1.1=SRVNAME;
  223.              Topic_String.Topic1.2=INPF;
  224.              Topic_String.Topic1.3=LOGF;
  225.              Topic_String.Topic1.4=CHKF;
  226.              Topic_String.Topic1.5=PIPE' ';
  227.              Topic_List='WELCOMELOGO' Topic1 'SETGRPS';
  228.              Call GETANS
  229.              Parse VALUE SysCurPos() With Old_R Old_C; '@pause'
  230.              Call SysCurPos Old_R, Old_C; say ESC'[K'
  231.           end
  232.      else do
  233.              say 'ServerName =' SRVNAME
  234.              say 'InputFile  =' INPF
  235.              say 'LogFile    =' LOGF
  236.              say 'CheckFile  =' CHKF
  237.           end
  238.  
  239.     Return
  240.  
  241.  CHKPWS: /*---------------------------------------------------- CHKPWS: -----*/
  242.  
  243.     RC = NetGetInfo(350, 'WKSTAINFO','')
  244.     if RC = 0
  245.      then do
  246.              ADMNAME = WKSTAINFO.UserName
  247.              PWSNAME = WKSTAINFO.ComputerName
  248.           end
  249.      else do
  250.             Call LOGIT 'WKSTAINFO' USERID.i ':' RC
  251.             Call Quit
  252.           end
  253.     Return
  254.  
  255.  INIT: /*------------------------------------------------------ INIT: -------*/
  256.  
  257.     Call RgUtil   '/m' /* Rexx Utilities        */
  258.     Call RgUtils  '/m' /* Rexx Utilities        */
  259.     Call RgLSRXUT '/m' /* Lan Server Rexx Utils */
  260.  
  261.     Parse Upper Source . . P_NAME
  262.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  263.  
  264.    '@echo off'
  265.     ESC   = '1B'x
  266.     REDIR = '>NUL 2>NUL'
  267.  
  268.     Resource_File = 'LSMT.RSC'
  269.     Call CHKFILE Resource_File
  270.  
  271.     Return
  272.  
  273.  GETANS: /*---------------------------------------------------- GETANS: -----*/
  274.  
  275.     Vars_List =Ansi_Say(Resource_File Topic_List);
  276.     Parse VALUE SysCurPos() With Old_R Old_C;
  277.     Do While Vars_List <> '';
  278.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List;
  279.        Call SysCurPos Row, Column;
  280.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m';
  281.        End;
  282.     Call SysCurPos Old_R, Old_C;
  283.  
  284.     Return
  285.  
  286.  GETHELP: /*--------------------------------------------------- GETHELP: ----*/
  287.  
  288.     if \MUTE
  289.      then do
  290.              Topic1='SETHELP'
  291.              Topic_String.Topic1.1=PRGN;
  292.              Topic_List=Topic1;
  293.              Call GETANS
  294.           end
  295.      else say 'Incorrect options.'
  296.  
  297.     Call QUIT
  298.  
  299.     Return
  300.  
  301.  CHKFILE: /*--------------------------------------------------- CHKFILE: ----*/
  302.  
  303.     Parse Arg FILE
  304.     RC = Stream(FILE, 'C', 'QUERY EXIST')
  305.     if RC = ''
  306.      then do
  307.              say ' File' FILE 'not found.'
  308.              Call QUIT
  309.           end
  310.      else Nop
  311.     Call Stream FILE, 'C', 'CLOSE'
  312.  
  313.     Return
  314.  
  315.  LOGIT: /*----------------------------------------------------- LOGIT: ------*/
  316.  
  317.     FUNC = ARG(1); INFO = ARG(2); RCOD = ARG(3)
  318.     RC = LLOGIT(LOGF, PIPE, ADMNAME, PRGN, FUNC, INFO, RCOD)
  319.  
  320.     Return
  321.  
  322.  QUIT: /*------------------------------------------------------ QUIT: -------*/
  323.  
  324.     Call LineOut 'LSMT.END', PRGN, 1
  325.     Call Stream  'LSMT.END', 'C', 'CLOSE'
  326.     Call Stream   INPF,      'C', 'CLOSE'
  327.     Call Stream   LOGF,      'C', 'CLOSE'
  328.     Call Stream   CHKF,      'C', 'CLOSE'
  329.     Exit ExitCode
  330.  
  331.  /*--------------------------------------------------------------------------*/
  332.