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

  1. /*---------------------------------------------------------------------------*\
  2. |   GET & SET all ACL from a Drive with all (sub)directories and/or files     |
  3. |   to/from an ASCII File for OS/2 Lan Server 3.0 and higher                  |
  4. |                               (C) Alain Rykaert - IBM-Belgium - SEP95-FEB98 |
  5. \*---------------------------------------------------------------------------*/
  6.     Version = '2.02'
  7.  
  8.     Parse Upper Arg Option
  9.  
  10.     Call Init                    /* Initialisation of DLL's and other stuff*/
  11.     Call ChkOpt                          /* Check Options & display Welcome*/
  12.     Call ChkPws                               /* Check the PWS & Admin name*/
  13.     Call Main                                          /* Do the main thing*/
  14.     Call Quit
  15.  
  16.  MAIN:/* --------------------------------------------------------------------*/
  17.  
  18.     If Get
  19.      Then Call Get
  20.      Else Call Set
  21.  
  22.     Return
  23.  
  24.  GET:/* ---------------------------------------------------------------------*/
  25.  
  26.    'If exist' OutF 'del' OutF
  27.  
  28.     ChkDir = '\\'SrvName'\'Left(Source,1)'$'SubStr(Source,3,)
  29.  
  30.     If Dir  Then Call GetDir
  31.     If File Then Call GetFile
  32.  
  33.     Return
  34.  
  35.  GETDIR:/* ------------------------------------------------------------------*/
  36.  
  37.     Call Time('R')
  38.  
  39.     Say ' Getting all dirs, please wait ...'
  40.  
  41.     Call SysFileTree ChkDir, 'Source', 'DOS'
  42.     If Source.0 = 0
  43.       Then Say '! Nothing found'
  44.       Else Do
  45.              Say ' Total directories found:' Source.0 'in:' Trunc(Time('E'),2)
  46.           /* Call RxStemSort 'Source' */
  47.              Do i = 1 to Source.0
  48.                Call GetAcc Source.i
  49.              End
  50.            End
  51.  
  52.     Return
  53.  
  54.  GETFILE:/* -----------------------------------------------------------------*/
  55.  
  56.     Call Time('R')
  57.     Say ' Getting all files, please wait ...'
  58.  
  59.     Call SysFileTree ChkDir, 'Source', 'FOS'
  60.     If Source.0 = 0
  61.       Then Say '! Nothing found'
  62.       Else Do
  63.              Say ' Total Files found :' Source.0 'in:' Trunc(Time('E'),2)
  64.           /* Call RxStemSort 'Source' */
  65.              Do i = 1 to Source.0
  66.                Call GetAcc Source.i
  67.              End
  68.            End
  69.  
  70.     Return
  71.  
  72.  GETACC:/* ------------------------------------------------------------------*/
  73.  
  74.     Parse Arg Resource
  75.  
  76.     RC = NetGetInfo(10, 'Access', '\\'SrvName, Resource)
  77.     If RC = 0
  78.       Then Do
  79.           /* Call RxStemSort 'Access'*/
  80.              Do j = 1 to Access.count
  81.                OutT = '   ;'Source.i';'Access.j.UgName';'Access.j.Access';'Access.Audit
  82.                If \Mute Then Say OutT
  83.                If OutT = ''
  84.                  Then Nop
  85.                  Else Call LineOut OutF, OutT
  86.              End
  87.            End
  88.       Else Nop
  89.  
  90.     Return
  91.  
  92.  SET:/* ---------------------------------------------------------------------*/
  93.  
  94.     ExitCode = X2D('FE00')
  95.  
  96.     Do While Lines(InpF)
  97.       LLine = LineIn(InpF)
  98.       OLine = LLine
  99.       Parse Value LLine With Opt ';' LLine
  100.       Select
  101.         When Opt = '',
  102.          | LLine = '',
  103.          | Left(Strip(Opt),1) = '*' Then Iterate
  104.         When Translate(Opt) = 'A'   Then Call AddACL
  105.         When Translate(Opt) = 'D'   Then Call DelACL
  106.         When Translate(Opt) = 'U'   Then Call UpdACL
  107.         Otherwise Iterate
  108.        End
  109.        If RCode Then ExitCode = X2D('1604')
  110.     End
  111.  
  112.     Return
  113.  
  114.  ADDACL:/* ------------------------------------------------------------------*/
  115.  
  116.     RCode = 0
  117.  
  118.     Call ReadLine LLine                        /* Read & Interpret the Line*/
  119.  
  120.     Access.Count    = 1
  121.     Access.1.UgName = AccessControlList
  122.     Access.1.Access = AccessControlPermission
  123.     Access.Audit  = AccessAuditing
  124.  
  125.     RC = NetAdd(10, 'Access', '\\'ServerName, Resource)
  126.     If RC = 0
  127.       Then RC = ''
  128.       Else Do
  129.              RC = ':' RC
  130.              RCode = 1
  131.            End
  132.     Call Logit 'Add ACL', ServerName'-'Resource'-'AccessControlList'-'AccessControlPermission'-'AccessAuditing, RC
  133.  
  134.     Return
  135.  
  136.  DELACL:/* ------------------------------------------------------------------*/
  137.  
  138.     RCode = 0
  139.  
  140.     Call ReadLine LLine                        /* Read & Interpret the Line*/
  141.  
  142.     RC = NetDelete(10, '\\'ServerName, Resource)
  143.     If RC = 0
  144.       Then RC = ''
  145.       Else Do
  146.              RC = ':' RC
  147.              RCode = 1
  148.            End
  149.  
  150.     Call Logit 'Delete ACL', ServerName'-'AccessControlList'-'AccessControlPermission'-'AccessAuditing, RC
  151.  
  152.     Return
  153.  
  154.  UPDACL:/* ------------------------------------------------------------------*/
  155.  
  156.     RCode = 0
  157.  
  158.     Call ReadLine LLine                        /* Read & Interpret the Line*/
  159.     Access.Audit    = AccessAuditing
  160.     Access.Count    = 1
  161.     Access.1.UgName = AccessControlList
  162.     Access.1.Access = AccessControlPermission
  163.  
  164.     RC = NetSetInfo(10, 'Access', '\\'ServerName, Resource)
  165.     If RC = 0
  166.       Then RC = ''
  167.       Else Do
  168.              RC = ':' RC
  169.              RCode = 1
  170.            End
  171.     Call Logit 'Update ACL', ServerName'-'Resource'-'AccessControlList'-'AccessControlPermission'-'AccessAuditing, RC
  172.  
  173.     Return
  174.  
  175.  READLINE:/* ----------------------------------------------------------------*/
  176.  
  177.     Parse Arg LineToRead
  178.  
  179.     Parse Value LineToRead With Resource ';' ACL ';' ACP ';' AUD .
  180.  
  181.     AccessControlList       = Translate(Strip(ACL))
  182.     AccessControlPermission = Translate(Strip(ACP))
  183.     AccessAuditing          = Strip(AUD)
  184.  /*
  185.     j = 0
  186.     Do While Resource <> ''
  187.       j = j + 1
  188.       Parse Value Resource With Extract.j '\' Resource
  189.     End
  190.  
  191.     Resource = Left(Extract.4,1) || ':'
  192.     Do k = 5 to j
  193.       Resource = Resource || '\' || Extract.k
  194.     End
  195.  
  196.     ServerName = Extract.3
  197.    */
  198.  
  199.     Parse Upper Value Resource With '\\' ServerName '\' .
  200.  
  201.     If Trace
  202.       Then Do
  203.              Say ' ServerName              =>'ServerName'<'
  204.              Say ' Resource                =>'Resource'<'
  205.              Say ' AccessControlList       =>'AccessControlList'<'
  206.              Say ' AccessControlPermission =>'AccessControlPermission'<'
  207.              Say ' AccessAuditing          =>'AccessAuditing'<'
  208.            End
  209.       Else Nop
  210.  
  211.     Return
  212.  
  213.  CHKOPT:/* ------------------------------------------------------------------*/
  214.  
  215.    '@echo off'
  216.     SrvName = ''
  217.     Source  = ''
  218.     InpF    = 'RXACL.CSV'
  219.     OutF    = 'RXACL.CSV'
  220.     LogF    = 'LSMT.LOG'
  221.     ChkF    = 'RXACL.CHK'
  222.     Dir     = 0
  223.     File    = 0
  224.     Get     = 0
  225.     Set     = 0
  226.     Mute    = 0
  227.     Trace   = 0
  228.     Pipe    = ''
  229.  
  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) = '/INP:' Then InpF    = Substr(Argument,6)
  235.         When Left(Argument,5) = '/OUT:' Then OutF    = Substr(Argument,6)
  236.         When Left(Argument,5) = '/SRC:' Then Source  = Substr(Argument,6)
  237.         When Left(Argument,5) = '/TRG:' Then Target  = Substr(Argument,6)
  238.         When Left(Argument,5) = '/LOG:' Then LogF    = Substr(Argument,6)
  239.         When Left(Argument,5) = '/PIP:' Then Pipe    = Substr(Argument,6)
  240.         When Left(Argument,4) = '/DIR'  Then Dir     = 1
  241.         When Left(Argument,5) = '/FILE' Then File    = 1
  242.         When Left(Argument,4) = '/GET'  Then Get     = 1
  243.         When Left(Argument,4) = '/SET'  Then Set     = 1
  244.         When Left(Argument,2) = '/M'    Then Mute    = 1
  245.         When Left(Argument,2) = '/T'    Then Trace   = 1
  246.         Otherwise Nop
  247.       End
  248.     End
  249.  
  250.     If SrvName = '' | Get = 0 & Set = 0
  251.      Then Signal GetHelp
  252.      Else Nop
  253.  
  254.     If \MUTE
  255.       Then Do
  256.              If Get
  257.                Then Do
  258.                       Topic1 = 'RXACLGET'
  259.                       Topic_String.Topic1.1 = SRVNAME
  260.                       Topic_String.Topic1.2 = SOURCE
  261.                       Topic_String.Topic1.3 = OUTF
  262.                       Topic_String.Topic1.4 = LOGF
  263.                       Topic_String.Topic1.5 = DIR
  264.                       Topic_String.Topic1.6 = FILE
  265.                       Topic_String.Topic1.7 = PIPE' '
  266.                       Topic_List = 'RXACLWELCOME' Topic1
  267.                       Call GETANS
  268.                     End
  269.                Else Do
  270.                       Topic1 = 'RXACLSET'
  271.                       Topic_String.Topic1.1 = SRVNAME
  272.                       Topic_String.Topic1.2 = INPF
  273.                       Topic_String.Topic1.3 = LOGF
  274.                       Topic_String.Topic1.4 = CHKF
  275.                       Topic_String.Topic1.5 = PIPE' '
  276.                       Topic_List = 'RXACLWELCOME' Topic1
  277.                       Call GETANS
  278.                     End
  279.             Parse Value SysCurPos() With Old_R Old_C; '@pause'
  280.             Call SysCurPos Old_R, Old_C; Say ESC'[K'
  281.           End
  282.       Else Do
  283.              Say ' ServerName =' SrvName
  284.              Say ' Resource   =' Source
  285.              Say ' OutputFile =' OutF
  286.            End
  287.  
  288.     Return
  289.  
  290.  CHKPWS:/* ------------------------------------------------------------------*/
  291.  
  292.     RC = NetGetInfo(350, 'WkstaInfo','')
  293.     If RC = 0
  294.       Then Do
  295.              ADMName = WkstaInfo.UserName
  296.              PWSName = WkstaInfo.ComputerName
  297.            End
  298.       Else Do
  299.              Call Logit 'Get PWS Info', ,RC
  300.              Call Quit
  301.            End
  302.     Return
  303.  
  304.  INIT:/* --------------------------------------------------------------------*/
  305.  
  306.     Call RgUtil   '/m'                                    /* Rexx Utilities*/
  307.     Call RgUtils  '/m'                                    /* Rexx Utilities*/
  308.     Call RgLSRXUT '/m'                             /* Lan Server Rexx Utils*/
  309.  
  310.     Parse Upper Source . . ProgName '.' .
  311.     ProgName = Filespec('N', ProgName)
  312.  
  313.    '@echo off'
  314.     ESC = '1B'x
  315.  
  316.     Resource_File = 'RXACL.RSC'
  317.     Call ChkFile Resource_File
  318.  
  319.     Return
  320.  
  321.  GETANS:/* ---------------------------------------------------- GETANS: -----*/
  322.  
  323.     Vars_List =Ansi_Say(Resource_File Topic_List)
  324.     Parse VALUE SysCurPos() With Old_R Old_C
  325.     Do While Vars_List <> ''
  326.       Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List
  327.       Call SysCurPos Row, Column
  328.       Say X2C(Color) || Topic_String.Topic_Id.Var_Id || ESC'[0m'
  329.       End
  330.     Call SysCurPos Old_R, Old_C
  331.  
  332.     Return
  333.  
  334.  GETHELP:/* -----------------------------------------------------------------*/
  335.  
  336.     Topic1 = 'RXACLHELP'
  337.     Topic_String.Topic1.1= ProgName
  338.     Topic_List = Topic1
  339.     Call GetAns
  340.     Call Quit
  341.  
  342.     Return
  343.  
  344.  CHKFILE:/* -----------------------------------------------------------------*/
  345.  
  346.     Parse Arg File
  347.  
  348.     RC = Stream(File, 'C', 'Query Exists')
  349.     If RC = ''
  350.       Then Do
  351.              Say '! File' File 'not found'
  352.              Call Quit
  353.           End
  354.       Else Nop
  355.  
  356.     Return
  357.  
  358.  LOGIT:/* -------------------------------------------------------------------*/
  359.  
  360.     Func = Arg(1); Info = Arg(2); RCod = Arg(3)
  361.     RC = LLogit(LogF, Pipe, AdmName, ProgName, Func, Info, RCod)
  362.  
  363.     Return
  364.  
  365.  QUIT:/* --------------------------------------------------------------------*/
  366.  
  367.     Call Stream InpF, 'C', 'Close'
  368.     Call Stream OutF, 'C', 'Close'
  369.     Call Stream ChkF, 'C', 'Close'
  370.     Call Stream LogF, 'C', 'Close'
  371.  
  372.     Exit ExitCode
  373.  
  374.