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

  1. /*---------------------------------------------------------------------------*\
  2. |   SET all Logon Assignments to a LAN Server 3.0 and higher                  |
  3. |   from an ASCII file                                                        |
  4. |       (C) Alain Rykaert IBM Belgium & Hermann Pauli IBM Germany SEP95-MAY96 |
  5. \*---------------------------------------------------------------------------*/
  6.  
  7.     Parse Arg Option
  8.  
  9.     Call INIT                     /* Initalisation 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 = TRANSLATE(LineIN(INPF))
  24.        OLINE = LLINE
  25.        LLINE = Strip(LLINE)
  26.  
  27.        parse value LLINE with OPT ';' LLINE
  28.        select
  29.         when OPT = '' | LLINE = ''    then Iterate
  30.         when Left(OPT,1)      = '*'   then Iterate
  31.         when Translate(OPT)   = 'OPT' then Call COLUMNS
  32.         when Translate(OPT)   = 'D'   then Call DELASS
  33.         when Translate(OPT)   = 'U'   |,
  34.              Translate(OPT)   = 'A'   then Call UPDASS
  35.         otherwise
  36.          do
  37.             call ToCheck
  38.             call Logit 'Main','wrong input allowed options only U and D.',,
  39.                               'Invalid option' OPT
  40.          end
  41.        end
  42.        if EC
  43.         then do
  44.                 call ToCheck
  45.                 EC = 0
  46.                 ExitCode = X2D('1604')               /* Bad CID return code*/
  47.              end
  48.         else Nop
  49.     end
  50.  
  51.     say ;say '0909'x 'Total Time  =' Trunc(Time('E'),2)
  52.  
  53.     Return
  54.  
  55.  UPDASS:/* ---------------------------------------------------- UPDASS: -----*/
  56.  
  57.     EC = 0
  58.  
  59.     /*   get the users new logon assignment values */
  60.     parse value LLINE with UserId ';' LLINE
  61.     UserId = Strip(UserId)
  62.  
  63.     i = 0
  64.  
  65.     /* scan through input line to retrieve new device assignments         */
  66.     AssNum = 0
  67.  
  68.     Assign_Set. = 0
  69.     do while LLine <> ''
  70.        i = i+1
  71.        AliasName = AliasByCol.i
  72.        parse value LLINE with ActDevice ';' LLINE
  73.        ActDevice = strip(ActDevice)
  74.        if ActDevice <> ''
  75.        then do    /* there is an assignment */
  76.                AssNum = AssNum + 1
  77.                Assign.AssNum.Alias  = AliasName
  78.                Assign.AssNum.Device = ActDevice
  79.                Assign_Set.AliasName = 1
  80.             end
  81.        else nop
  82.     end
  83.  
  84.     Assign.0 = AssNum
  85.  
  86.     /* Check for multiple entries for the same device */
  87.     do i = 1 to Assign.0
  88.        do j = i+1 to Assign.0
  89.           if Assign.i.device = Assign.j.device
  90.           then do
  91.                   EC = 1
  92.                   Call LOGIT 'Update LA' , 'wrong input',,
  93.                              'may use' Assign.i.device 'only once'
  94.                 return
  95.                end
  96.           else nop
  97.        end
  98.     end
  99.  
  100.  
  101.  
  102.     say '0909'x 'Updating User ...' UserId
  103.  
  104.     /*   get the users old logon assignment values */
  105.     O_Device. = ''
  106.  
  107.     RC = NetGetInfo(NETLOGONASN, 'OldAssgn', '\\'SRVNAME, UserID)
  108.     if RC = 0
  109.      then do
  110.              do i = 1 to OldAssgn.count
  111.                 AliasName = OldAssgn.i.Alias
  112.                 O_Device.AliasName =Strip(OldAssgn.i.Device)
  113.              end
  114.           end
  115.  
  116.      else if left(strip(RC),1) = 3
  117.            then OldAssgn.count = 0      /* no previous assignments */
  118.            else do
  119.                    EC = 1
  120.                    Call LOGIT 'NetGetInfo LA' , UserID , RC
  121.                    return
  122.                 end
  123.  
  124.     /*  del all existing assignments                */
  125.     if OldAssgn.count >0
  126.      then do
  127.              RC = NetDelete(NETLOGONASN, '\\'SRVNAME, UserID)
  128.              if RC = 0
  129.               then nop
  130.               else do
  131.                       EC = 1
  132.                       Call LOGIT 'NetDelete LA' , UserID , RC
  133.                      return
  134.                    end
  135.           end
  136.       else nop
  137.  
  138.     /*  log deleted assignments                   */
  139.     do i = 1 to OldAssgn.count
  140.        AliasName = OldAssgn.i.alias
  141.        if Assign_Set.AliasName
  142.         then iterate
  143.         else do
  144.                 Call LOGIT 'Delete LA' ,,
  145.                            UserID AliasName '-' O_Device.AliasName ,''
  146.              end
  147.     end
  148.  
  149.  
  150.     /*  add all assignments                       */
  151.     do i = 1 to Assign.0
  152.        AliasName = Assign.i.Alias
  153.        RC = NetAdd(NETLOGONASN, '\\'SRVNAME, AliasName, Assign.i.device,,
  154.                    UserID)
  155.        if RC = 0
  156.           then do
  157.                   RC = 'OK'
  158.  
  159.                   if O_Device.AliasName = ''
  160.                    then Call LOGIT 'Add LA' ,,
  161.                              UserID AliasName '-' Assign.i.device , ''
  162.                    else if Assign.i.device <> O_Device.AliasName
  163.                          then Call LOGIT 'Update LA' ,,
  164.                               UserID AliasName '-' Assign.i.device , ''
  165.                          else nop
  166.                end
  167.           else do
  168.                   EC = 1
  169.                   Call LOGIT 'NetAdd LA' , UserID ||'/'|| AliasName , RC
  170.                   return
  171.                end
  172.     end
  173.     Return
  174.  
  175.  ToCheck: /*--------------------------------------------------- ToCheck: ----*/
  176.  
  177.     CHKLines = CHKLines + 1
  178.     if CHKLines = 1 | CHKLines // 20 = 0
  179.      then call LineOut CHKF, ALIASLst
  180.      else nop
  181.     Call LineOut CHKF, OLINE
  182.     return
  183.  
  184.  DELASS: /*---------------------------------------------------- UPDASS: -----*/
  185.  
  186.     EC = 0
  187.     i  = 0
  188.  
  189.     parse value LLINE with UserId ';' LLINE
  190.     UserId = Strip(UserId)
  191.  
  192.     say '0909'x 'Updating User ...' UserId
  193.  
  194.     /*  del all logon assignments                   */
  195.     RC = NetDelete(NETLOGONASN, '\\'SRVNAME, UserID)
  196.  
  197.     if RC = 0
  198.        then do
  199.                RC = 'OK'
  200.                Call LOGIT 'Delete LA' , UserID '- all' , ''
  201.             end
  202.        else do
  203.                EC = 1
  204.                Call LOGIT 'NetDelete LA' , UserID , RC
  205.                return
  206.             end
  207.  
  208.     Return
  209.  
  210.  COLUMNS: /*--------------------------------------------------- COLUMNS: ----*/
  211.  
  212.     ALIASLst = OPT || ';' || LLINE
  213.     parse value LLINE with UserId ';' LLINE
  214.  
  215.     i = 0
  216.     do while LLine <> ''
  217.        i = i+1
  218.        parse value LLINE with AliasByCol.i ';' LLINE
  219.        AliasByCol.i = strip(AliasByCol.i)
  220.     end
  221.     AliasByCol.0 = i /* AliasByCol.: Alias-Name retrieveable via col number */
  222.  
  223.     Return
  224.  
  225.  
  226.  CHKOPT: /*---------------------------------------------------- CHKOPT: -----*/
  227.  
  228.     SRVNAME = '';
  229.     INPF    = 'ASSGN.CSV';
  230.     LOGF    = 'LSMT.LOG';
  231.     CHKF    = 'ASSGN.CHK';
  232.     PIPE    = '';
  233.     TRACE   = 0;
  234.     MUTE    = 0;
  235.  
  236.     OPTION = Translate(OPTION)
  237.     do while OPTION <> ''
  238.        Parse value OPTION with ARGUMENT ' ' OPTION
  239.        select
  240.         when Left(ARGUMENT,5) = '/SRV:' then SRVNAME = Substr(ARGUMENT,6)
  241.         when Left(ARGUMENT,5) = '/INP:' then INPF    = Substr(ARGUMENT,6)
  242.         when Left(ARGUMENT,5) = '/LOG:' then LOGF    = Substr(ARGUMENT,6)
  243.         when Left(ARGUMENT,5) = '/CHK:' then CHKF    = Substr(ARGUMENT,6)
  244.         when Left(ARGUMENT,5) = '/PIP:' then PIPE    = Substr(ARGUMENT,6)
  245.         when Left(ARGUMENT,2) = '/M'    then MUTE    = 1
  246.         when Left(ARGUMENT,2) = '/T'    then TRACE   = 1
  247.         otherwise Nop
  248.        end
  249.     end
  250.  
  251.     if SRVNAME = '' then signal GETHELP
  252.  
  253.     if \MUTE
  254.      then do
  255.              Topic1='SETWELCOME'
  256.              Topic_String.Topic1.1=SRVNAME;
  257.              Topic_String.Topic1.2=INPF;
  258.              Topic_String.Topic1.3=LOGF;
  259.              Topic_String.Topic1.4=CHKF;
  260.              Topic_String.Topic1.5=PIPE' ';
  261.              Topic_List='WELCOMELOGO' Topic1 'SETASSGN';
  262.              Call GETANS
  263.              Parse VALUE SysCurPos() With Old_R Old_C; '@pause'
  264.              Call SysCurPos Old_R, Old_C; say ESC'[K'
  265.           end
  266.      else do
  267.              say 'ServerName =' SRVNAME
  268.              say 'InputFile  =' INPF
  269.              say 'LogFile    =' LOGF
  270.              say 'CheckFile  =' CHKF
  271.           end
  272.  
  273.     Return
  274.  
  275.  CHKPWS: /*---------------------------------------------------- CHKPWS: -----*/
  276.  
  277.     RC = NetGetInfo(350, 'WKSTAINFO','')
  278.     if RC = 0
  279.      then do
  280.              ADMNAME = WKSTAINFO.UserName
  281.              PWSNAME = WKSTAINFO.ComputerName
  282.           end
  283.      else do
  284.             Call LOGIT 'Get PWS Info', ,RC
  285.             Call Quit
  286.           end
  287.     Return
  288.  
  289.  INIT: /*------------------------------------------------------ INIT: -------*/
  290.  
  291.     Call RgUtil   '/m' /* Rexx Utilities        */
  292.     Call RgUtils  '/m' /* Rexx Utilities        */
  293.     Call RgLSRXUT '/m' /* Lan Server Rexx Utils */
  294.  
  295.     Parse Upper Source . . P_NAME
  296.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  297.  
  298.    '@echo off'
  299.     ESC   = '1B'x
  300.     REDIR = '>NUL 2>NUL'
  301.  
  302.     NETLOGONASN = 52
  303.     NETALIAS    = 20
  304.     EC  = 0
  305.     CHKLines = 0
  306.  
  307.     COLF  = 'USERS.INI'          /* Column description file */
  308.     Call CHKFILE COLF
  309.  
  310.     Resource_File = 'LSMT.RSC'
  311.     Call CHKFILE Resource_File
  312.  
  313.     Return
  314.  
  315.  GETANS: /*---------------------------------------------------- GETANS: -----*/
  316.  
  317.     Vars_List =Ansi_Say(Resource_File Topic_List);
  318.     Parse VALUE SysCurPos() With Old_R Old_C;
  319.     Do While Vars_List <> '';
  320.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List;
  321.        Call SysCurPos Row, Column;
  322.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m';
  323.        End;
  324.     Call SysCurPos Old_R, Old_C;
  325.  
  326.     Return
  327.  
  328.  GETHELP: /*--------------------------------------------------- GETHELP: ----*/
  329.  
  330.     if \MUTE
  331.      then do
  332.              Topic1='SETHELP'
  333.              Topic_String.Topic1.1=PRGN;
  334.              Topic_List=Topic1;
  335.              Call GETANS
  336.           end
  337.      else say 'Incorrect options.'
  338.  
  339.     Call QUIT
  340.  
  341.     Return
  342.  
  343.  CHKFILE: /*--------------------------------------------------- CHKFILE: ----*/
  344.  
  345.     Parse Arg FILE
  346.     RC = Stream(FILE, 'C', 'QUERY EXIST')
  347.     if RC = ''
  348.      then do
  349.              say ' File' FILE 'not found.'
  350.              Call QUIT
  351.           end
  352.      else Nop
  353.     Call Stream FILE, 'C', 'CLOSE'
  354.  
  355.     Return
  356.  
  357.  LOGIT: /*----------------------------------------------------- LOGIT: ------*/
  358.  
  359.     FUNC = ARG(1); INFO = ARG(2); RCOD = ARG(3)
  360.     RC = LLOGIT(LOGF, PIPE, ADMNAME, PRGN, FUNC, INFO, RCOD)
  361.  
  362.     Return
  363.  
  364.  QUIT: /*------------------------------------------------------ QUIT: -------*/
  365.  
  366.     Call LineOut 'LSMT.END', PRGN, 1
  367.     Call Stream  'LSMT.END', 'C', 'CLOSE'
  368.     Call Stream   INPF,      'C', 'CLOSE'
  369.     Call Stream   LOGF,      'C', 'CLOSE'
  370.     Call Stream   CHKF,      'C', 'CLOSE'
  371.     Exit ExitCode
  372.  
  373.  /*--------------------------------------------------------------------------*/
  374.