home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lsmt213c.zip / setusers.cmd < prev    next >
OS/2 REXX Batch file  |  1999-01-27  |  16KB  |  500 lines

  1. /*---------------------------------------------------------------------------*\
  2. |   Set all Users to a LAN Server 3.0 and higher from an ASCII File           |
  3. |                                             (C) Alain Rykaert - SEP95-JAN99 |
  4. \*---------------------------------------------------------------------------*/
  5.     Version = '2.02'
  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:/* --------------------------------------------------------------------*/
  16.  
  17.     Call Time('R')
  18.  
  19.    'if exist' ChkF 'del' ChkF
  20.  
  21.     EC = 0                                                   /* Error check*/
  22.     HC = 0                    /* check in case the HomeDir routine wants it*/
  23.     ExitCode = X2D('FE00')                          /* Good CID Return code*/
  24.  
  25.     Do While Lines(InpF)
  26.       LLine = LineIN(InpF)
  27.       OLine = LLine
  28.       Parse Value LLine With Opt ';' LLine
  29.       Select
  30.         When Opt = '' | LLine = '',
  31.                       | Left(Strip(Opt),1) = '*' Then Iterate
  32.         When Translate(Opt) = 'OPT' Then Call Columns
  33.         When Translate(Opt) = 'A'   Then Call AddUser
  34.         When Translate(Opt) = 'D'   Then Call DelUser
  35.         When Translate(Opt) = 'U'   Then Call UpdUser
  36.         Otherwise Iterate
  37.       End
  38.       If EC
  39.         Then Do
  40.                Call LineOut ChkF, OLine
  41.                EC = 0
  42.                ExitCode = X2D('1604')                /* Bad CID return code*/
  43.              End
  44.         Else Nop
  45.     End
  46.  
  47.     Say '0909'x 'Total Time  =' Trunc(Time('E'),2)
  48.  
  49.     If HC
  50.       Then Do
  51.              Topic_List = 'ChkHomeDir'
  52.              Call GetAns
  53.              Call Logit 'Set HomeDir(s)', 'Run RXACL With "HomeACL.CSV"'
  54.            End
  55.       Else Nop
  56.  
  57.     Return
  58.  
  59.  ADDUSER:/* -----------------------------------------------------------------*/
  60.  
  61.     i  = 0
  62.     Do While LLine <> ''
  63.       i = i + 1
  64.       COLNAME = Strip(COLNAME.i)
  65.       Parse value LLine With VALUE ';' LLine
  66.       USERINFO.COLNAME = Strip(VALUE)
  67.       If USERINFO.COLNAME = '-none-' | USERINFO.COLNAME = 'No Restriction'
  68.         Then USERINFO.COLNAME = ''                               /* Filters*/
  69.         Else Nop
  70.     End
  71.  
  72.     USERINFO.PASSWORD = Translate(USERINFO.PASSWORD)
  73.  
  74.     If POS('N',Translate(USERINFO.FLAGS)) = 0,
  75.      & USERINFO.PASSWORD = '****'
  76.      Then Do
  77.             Call LOGIT 'Add User', USERINFO.NAME, 'Password needed'
  78.             EC = 1
  79.             Return
  80.           End
  81.      Else Nop
  82.  
  83.     If TRACE
  84.       Then Do j = 1 to COLT
  85.              COLNAME = Strip(COLNAME.j)
  86.              Say '09'x '>'USERINFO.COLNAME'<' C2X(USERINFO.COLNAME)
  87.            End
  88.       Else Nop
  89.  
  90.     RC = NetAdd(282, 'USERINFO', '\\'SRVNAME)
  91.     If RC = 0
  92.       Then RC = ''
  93.       Else EC = 1
  94.     Call LOGIT 'Add User', USERINFO.NAME, RC
  95.  
  96.     If USERINFO.HOME_DIR = ''
  97.       Then Nop
  98.       Else Call HOMEDIR
  99.  
  100.     Return
  101.  
  102.  DELUSER:/* --------------------------------------------------- DELUSER: ----*/
  103.  
  104.     i  = 0
  105.     Do While LLine <> ''
  106.       i = i + 1
  107.       ColName = Strip(ColName.i)
  108.       Parse Value LLine With Value ';' LLine
  109.       UserInfo.Colname = Strip(Value)
  110.     End
  111.  
  112.     Call NetGetInfo 280, 'UserInfo', '\\'SrvName, UserInfo.Name
  113.     If UserInfo.Home_Dir = '-none-'
  114.       Then Nop
  115.       Else Do
  116.              If Left(UserInfo.Home_Dir,2) = '\\'
  117.                Then Resource = UserInfo.Home_Dir
  118.                Else Do
  119.                       Parse Var UserInfo.Home_Dir . '\' HSName '\' Resource
  120.                       HSName = Strip(HSName,'L','\')
  121.                       Resource = '\\'HSName'\'Resource
  122.                     End
  123.              Call DelDirectory Resource
  124.            End
  125.  
  126.     RC = NetDelete(280, '\\'SrvName, UserInfo.Name)
  127.     If RC = 0
  128.       Then RC = ''
  129.       Else EC = 1
  130.  
  131.     Call Logit 'Delete User', UserInfo.Name, RC
  132.  
  133.     Return
  134.  
  135.  UPDUSER:/* -----------------------------------------------------------------*/
  136.  
  137.     i  = 0
  138.     Do While LLine <> ''
  139.       i = i + 1
  140.       ColName = Strip(ColName.i)
  141.       Parse value LLine With Value ';' LLine
  142.       UserInfo.ColName = Strip(Value)
  143.     End
  144.  
  145.     If TRACE
  146.       Then Do j = 1 to ColT
  147.              ColName = Strip(ColName.j)
  148.              Say '09'x '>'UserInfo.ColName'<' C2X(UserInfo.ColName)
  149.            End
  150.       Else Nop
  151.  
  152.    /* Get OLD User settings */
  153.     RC = NetGetInfo(280, 'OldInfo', '\\'SrvName, UserInfo.Name)
  154.     If RC = 0
  155.       Then RC = ''
  156.       Else Do
  157.              Call Logit 'Get Users', UserInfo.Name, RC
  158.              EC = 1
  159.              Return
  160.            End
  161.  
  162.     OldInfo.PassWord = '****'  /* The only field which can NOT be retrieved*/
  163.  
  164.     Do j = 1 to ColT
  165.       ColName = Strip(ColName.j)
  166.       If OldInfo.ColName <> UserInfo.ColName
  167.         Then Select
  168.                When ColName = 'PASSWORD'
  169.                 Then Do
  170.                        If Pos('N',Translate(UserInfo.Flags)) = 0
  171.                          Then Call SetInfo
  172.                          Else Nop
  173.                      End
  174.                When ColName = 'PRIV'
  175.                  Then Do
  176.                         Select
  177.                           When Left(UserInfo.ColName,1) = 'A'
  178.                             Then UserInfo.ColName = 'ADMIN'
  179.                           When Left(UserInfo.ColName,1) = 'G'
  180.                             Then UserInfo.ColName = 'GUEST'
  181.                           When Left(UserInfo.ColName,1) = 'U'
  182.                             Then UserInfo.ColName = 'USER'
  183.                           Otherwise Nop
  184.                         End
  185.                         Call SetInfo
  186.                       End
  187.                When ColName = 'HOME_DIR'
  188.                  Then Do
  189.                         Call SetInfo
  190.                         Call HomeDir     /* Do something about the HomeDirs*/
  191.                      End
  192.                Otherwise Call SetInfo
  193.              End
  194.         Else Nop
  195.     End
  196.  
  197.     Return
  198.  
  199.  SETINFO:/* -----------------------------------------------------------------*/
  200.  
  201.     If ColName = 'PASSWORD' | ColName = 'PRIV'
  202.       Then UserInfo.ColName = Translate(UserInfo.ColName)
  203.       Else Nop
  204.  
  205.     RC = NetSetInfo(280, ColName, UserInfo.ColName, '\\'SrvName, UserInfo.Name)
  206.      If RC = 0
  207.       Then RC = ''
  208.       Else EC = 1
  209.  
  210.     If ColName = 'PASSWORD'
  211.      Then Call Logit 'Update User', UserInfo.Name '-' 'PASSWORD', RC
  212.      Else Call Logit 'Update User', UserInfo.Name '-' UserInfo.ColName, RC
  213.  
  214.     Return
  215.  
  216.  HOMEDIR:/* -----------------------------------------------------------------*/
  217.  
  218.     If UserInfo.Home_Dir = ''
  219.       Then Return
  220.       Else Nop
  221.  
  222.     If Left(UserInfo.Home_Dir,2) = '\\'
  223.       Then Parse Upper Value UserInfo.Home_Dir With '\\' HServerName '\' Resource
  224.       Else Parse Upper Value UserInfo.Home_Dir With . ':\' HServerName '\' Resource
  225.  
  226.     HResource = '\\'HServerName'\'Resource
  227.  
  228.  /* Say '* HServerName:' HServerName
  229.     Say '* HResource:' HResource */
  230.  
  231.  /* Check If the destination server is avalaible */
  232.  
  233.     If NetGetInfo(370, 'ServerModalInfo', '\\'HServerName) <> 0
  234.       Then Do
  235.              Call Logit 'CHK4SRV', 'Server' HServerName 'not found', RC
  236.              Return
  237.            End
  238.       Else Call ChkDir HResource                   /* make dir If not exist*/
  239.  
  240.  /* Check If the user is (already) defined on the destination server */
  241.  
  242.     If NetGetInfo(280, 'UserInfo', '\\'HServerName, UserInfo.Name) = 0
  243.       Then Do
  244.              Say '* User' UserInfo.Name' exist on' HServerName
  245.  
  246.              Call NetDelete 10, '\\'HServerName, HResource/* delete to be shure*/
  247.  
  248.              ACL.Count    = 1                         /* make a default ACP*/
  249.              ACL.1.UGName = UserInfo.Name
  250.              ACL.1.Access = 'RWCXDAP'
  251.  
  252.              If NetAdd(10, 'ACL', '\\'HServerName, HResource) = 0
  253.                Then RC = ''
  254.                Else Nop
  255.  
  256.              Call Logit 'Update ACL', HResource ACL.1.Access, RC
  257.              RC = ''
  258.           End
  259.      Else Do
  260.              Say '* User' UserInfo.Name' Does NOT exist on' HServerName
  261.              HC = 1                         /* Home Directory warning check*/
  262.  
  263.           /* Check If there is (already) an ACP on the resource */
  264.  
  265.              RC = NetGetInfo(10, 'Access', '\\'HServerName, HResource)
  266.              If RC = 0              /* If ACP already exist, delete all ACP*/
  267.                Then Call LineOut HomeACL, ' D ;'HResource';'UserInfo.Name
  268.                Else Nop
  269.  
  270.              Call LineOut HomeACL, ' A ;'HResource';'UserInfo.Name';RWCXDAP'
  271.  
  272.              Call Stream  HomeACL, 'C', 'Close'
  273.  
  274.              Call SysSetObjectData HomeACL, 'IconFile='Directory()'\HomeACL.ICO'
  275.           End
  276.  
  277.     RC = ''
  278.  
  279.     Return
  280.  
  281.  CHKDIR:/* -----------------------------------------------------------------*/
  282.  
  283.     Parse Arg Dir_Name
  284.  
  285.     RCode = 0                                      /* Reset the Return Code*/
  286.  
  287.     Dir_Name = Translate(Dir_Name)
  288.  
  289.     If Stream(Dir_Name, 'C', 'Query Exists') <> ''      /* is this a file ?*/
  290.       Then RCode = 1   /* Bad RC, there already exist a file With this name*/
  291.       Else Do
  292.              Call SysFileTree Dir_Name, 'DirExist', 'Do'/* Does this DIR exist ?*/
  293.              If DirExist.0 = 0
  294.                Then Do
  295.                       RC = SysMKDir(Dir_Name)
  296.                       If RC <> 0
  297.                         Then RCode = 1
  298.                         Else Nop
  299.                     End
  300.                Else Nop
  301.            End
  302.  
  303.     If RCode = 1
  304.       Then Do
  305.              LOG_Text = 'Error While creating' Dir_Name
  306.              Call Logit 'Create Directory', LOG_Text, RCode
  307.            End
  308.       Else Nop
  309.  
  310.     Return
  311.  
  312.  COLUMNS:/* --------------------------------------------------- COLUMNS: ----*/
  313.  
  314.     BANNER = 'OPT'
  315.     i = 0
  316.     Do While LLine <> ''
  317.        i = i + 1
  318.        Parse value LLine With COLNAME.i ';' LLine
  319.        BANNER = BANNER';'COLNAME.i
  320.     End
  321.     If COLNAME.1 <> 'NAME',
  322.      | COLNAME.2 <> 'PASSWORD'
  323.      Then Do
  324.              OUT = 'Error reading' INPF ': Column 2 MUST be NAME, Column 3 MUST be PASSWORD'
  325.              Call LOGIT OUT
  326.              Exit
  327.           End
  328.      Else Nop
  329.     COLT = i                                    /* Total numbers of columns*/
  330.  
  331.     Call LineOut CHKF, BANNER
  332.  
  333.     Return
  334.  
  335.  CHKOPT:/* ---------------------------------------------------- CHKOPT: -----*/
  336.  
  337.     SRVNAME = ''
  338.     INPF    = 'USERS.CSV'
  339.     LOGF    = 'LSMT.LOG'
  340.     CHKF    = 'USERS.CHK'
  341.     PIPE    = ''
  342.     TRACE   = 0
  343.     MUTE    = 0
  344.  
  345.     OPTION = Translate(OPTION)
  346.     Do While OPTION <> ''
  347.        Parse value OPTION With ARGUMENT ' ' OPTION
  348.        Select
  349.         when Left(ARGUMENT,5) = '/SRV:' Then SRVNAME = Substr(ARGUMENT,6)
  350.         when Left(ARGUMENT,5) = '/INP:' Then INPF    = Substr(ARGUMENT,6)
  351.         when Left(ARGUMENT,5) = '/LOG:' Then LOGF    = Substr(ARGUMENT,6)
  352.         when Left(ARGUMENT,5) = '/CHK:' Then CHKF    = Substr(ARGUMENT,6)
  353.         when Left(ARGUMENT,5) = '/PIP:' Then PIPE    = Substr(ARGUMENT,6)
  354.         when Left(ARGUMENT,5) = '/HOM:' Then HomeACL = Substr(Argument,6)
  355.         when Left(ARGUMENT,2) = '/M'    Then MUTE    = 1
  356.         when Left(ARGUMENT,2) = '/T'    Then TRACE   = 1
  357.         otherwise Nop
  358.        End
  359.     End
  360.  
  361.     If SRVNAME = '' Then signal GETHELP
  362.  
  363.    'If exist' CHKF 'del' CHKF
  364.  
  365.     If \MUTE
  366.      Then Do
  367.              Topic1 = 'SETWELCOME'
  368.              Topic_String.Topic1.1 = SRVNAME
  369.              Topic_String.Topic1.2 = INPF
  370.              Topic_String.Topic1.3 = LOGF
  371.              Topic_String.Topic1.4 = CHKF
  372.              Topic_String.Topic1.5 = PIPE' '
  373.              Topic_List = 'WELCOMELOGO' Topic1 'SETUSERS'
  374.              Call GETANS
  375.              Parse Value SysCurPos() With Old_R Old_C; '@pause'
  376.              Call SysCurPos Old_R, Old_C; say ESC'[K'
  377.           End
  378.      Else Do
  379.              say 'ServerName =' SRVNAME
  380.              say 'InputFile  =' INPF
  381.              say 'LogFile    =' LOGF
  382.              say 'CheckFile  =' CHKF
  383.           End
  384.  
  385.     Return
  386.  
  387.  CHKPWS:/* ---------------------------------------------------- CHKPWS: -----*/
  388.  
  389.     RC = NetGetInfo(350, 'WKSTAINFO','')
  390.     If RC = 0
  391.      Then Do
  392.              ADMNAME = WKSTAINFO.UserName
  393.              PWSNAME = WKSTAINFO.ComputerName
  394.           End
  395.      Else Do
  396.             Call LOGIT 'Get PWS Info', ,RC
  397.             Call Quit
  398.           End
  399.     Return
  400.  
  401.  INIT:/* ------------------------------------------------------ INIT: -------*/
  402.  
  403.     Call RgUtil   '/m'                                    /* REXX Utilities*/
  404.     Call RgUtils  '/m'                                    /* REXX Utilities*/
  405.     Call RgLSRXUT '/m'                             /* Lan Server REXX Utils*/
  406.  
  407.     Parse Upper Source . . P_NAME
  408.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  409.  
  410.    '@echo off'
  411.     ESC   = '1B'x
  412.     REDIR = '>NUL 2>NUL'
  413.  
  414.     Resource_File = 'LSMT.RSC'
  415.     Call CHKFILE Resource_File
  416.  
  417.     HomeACL = 'HomeACL.CSV'        /* temporary file created by the HOMEDIR*/
  418.                                   /* routine in case ACL must be applied on*/
  419.                             /* another physical machine Then the Primary DC*/
  420.     Return
  421.  
  422.  GETANS:/* ---------------------------------------------------- GETANS: -----*/
  423.  
  424.     Vars_List = Ansi_Say(Resource_File Topic_List)
  425.     Parse VALUE SysCurPos() With Old_R Old_C
  426.     Do While Vars_List <> ''
  427.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List
  428.        Call SysCurPos Row, Column
  429.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m'
  430.        End
  431.     Call SysCurPos Old_R, Old_C
  432.  
  433.     Return
  434.  
  435.  GETHELP:/* --------------------------------------------------- GETHELP: ----*/
  436.  
  437.     If \MUTE
  438.      Then Do
  439.              Topic1='SETHELP'
  440.              Topic_String.Topic1.1=PRGN;
  441.              Topic_List=Topic1;
  442.              Call GETANS
  443.           End
  444.      Else say 'Incorrect options.'
  445.  
  446.     Call QUIT
  447.  
  448.     Return
  449.  
  450.  CHKFILE:/* --------------------------------------------------- CHKFILE: ----*/
  451.  
  452.     Parse Arg File
  453.     RC = Stream(File, 'C', 'Query Exists')
  454.     If RC = ''
  455.       Then Do
  456.              Say ' File' File 'not found.'
  457.              Call Quit
  458.            End
  459.       Else Nop
  460.     Call Stream FILE, 'C', 'Close'
  461.  
  462.     Return
  463.  
  464.  LOGIT:/* ----------------------------------------------------- LOGIT: ------*/
  465.  
  466.     Func = Arg(1); Info = Arg(2); RCod = Arg(3)
  467.  
  468.     RC = LLogit(LogF, Pipe, AdmName, PrgN, Func, Info, RCod)
  469.  
  470.     Return
  471.  
  472.  DELDIRECTORY:/* ------------------------------------------------------------*/
  473.  return                                                 /* not finished yet*/
  474.     Parse Arg Dir2Delete
  475.  
  476.     Say '---> Directory 2 delete:' Dir2Delete
  477.     Say '(reminder: del function disabled)'
  478.  
  479.     Call SysFileTree Dir2Delete'\', 'DirCheck', 'DOS'
  480.     Call SysFileTree Dir2Delete'\', 'FileCheck', 'FOS'
  481.     Say ' Directories found:' DirCheck.0
  482.     Say ' Files found:' FileCheck.0
  483.     Total = 0
  484.     Do f = 1 to FileCheck.0
  485.       Total = Total + Stream(FileCheck.f, 'C', 'Query Size')
  486.     End
  487.     Say ' Total found:' Total
  488.  
  489.     Return
  490.  
  491.  QUIT:/* ------------------------------------------------------ QUIT: -------*/
  492.  
  493.     Call LineOut 'LSMT.End', PRGN, 1
  494.     Call Stream  'LSMT.End', 'C', 'Close'
  495.     Call Stream   InpF,      'C', 'Close'
  496.     Call Stream   LogF,      'C', 'Close'
  497.     Call Stream   ChkF,      'C', 'Close'
  498.     Exit ExitCode
  499.  
  500.