home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / SREFV12J / USERCFG.CMD < prev    next >
OS/2 REXX Batch file  |  1997-07-22  |  16KB  |  423 lines

  1. /*   */
  2. usercfg:
  3.  
  4. CHECKIT=0   /* Change this to 0 if you want to enable REMOTE configuration by SUPERUSERS */
  5. USECOLOR='2dd52f'
  6.  
  7. /* ---------------- DO NOT MODIFY BELOW THIS LINE  ------------------ */
  8.  
  9.  
  10. parse arg ddir,tempfile,sel,list,verb,uri,user,basedir,workdir,privset,enmadd,transaction,verbose
  11.  
  12. if verb="" then do
  13.    say " This SRE-Filter add-on is NOT meant to be run from the command line."
  14.    say " It can be invoked by using CONFIGUR.HTM "
  15.    exit
  16. end  /* Do */
  17.  
  18.  
  19. list=translate(list, ' ', '+'||'090a0d'x)  /* Whitespace, etc. */
  20.  
  21. who2=extract('CLIENTADDR')
  22. saddr2=extract('SERVERADDR')
  23.  
  24. NO_REM=VALUE('SREF_NO_REMOTE_CONFIG',,'OS2ENVIRONMENT')
  25.  
  26. select
  27.    when checkit=1 | no_rem>0 then do
  28.  
  29. /* only if user = serveraddress !!! */
  30.      if who2<>saddr2 | no_rem=2 then do
  31.  
  32.         call lineout tempfile, '<!doctype html public "-//IETF//DTD HTML 3.0//EN">'
  33.         call lineout tempfile, "<html><head><title>SRE-FILTER  remote configuartor disabled </title>"
  34.         call lineout tempfile, '</head><body  bgcolor="#'||usecolor||'"> '
  35.  
  36.         call lineout tempfile,' <strong> Action not allowed remotely.</strong> <pre>'
  37.         call lineout tempfile,' </body> </html> '
  38.         call lineout tempfile
  39.         'FILE ERASE TYPE text/html NAME' tempfile
  40.         return 'USERCFG: action not allowed remotely. '
  41.      end
  42.    end
  43.    otherwise do
  44.       if wordpos('SUPERUSER',privset)=0 then do
  45.        'RESPONSE HTTP/1.0 401 Unauthorized '     /* Set HTTP response line */
  46.        'header add WWW-Authenticate: Basic Realm=<CONFIGURE>'  /* challenge */
  47.         call lineout tempfile, '<!doctype html public "-//IETF//DTD HTML 3.0//EN">'
  48.         call lineout tempfile, "<html><head><title>Not authorized </title>"
  49.         call lineout tempfile, '</head><body  bgcolor="#'||usecolor||'"> '
  50.  
  51.         call lineout tempfile,' <strong> You do not have configuration rights.</strong> <pre>'
  52.         if who2=saddr2 then 
  53.                 call lineout tempfile,'<br> <Em> You may want to edit USERCFG.CMD </em> '
  54.         call lineout tempfile,' </body> </html> '
  55.         call lineout tempfile
  56.          iia=dosdir(tempfile,'s')
  57.         'FILE ERASE TYPE text/html NAME' tempfile
  58.         return '401 'iia' USERCFG: not permitted to configure. '
  59.       end
  60.    end
  61. end
  62.  
  63.  
  64.  
  65. list=strip(list)
  66. select 
  67.    when upper(list)='TODO=SHOW' | upper(list)='TODO=SHOW_HEADER' then
  68.         signal doshow
  69.    when upper(list)='TODO=SET' then
  70.         signal doset
  71.    otherwise
  72.         signal dochange
  73. end  /* select */
  74.  
  75. /* jump here to show values */
  76. doshow:
  77. userfile=value(enmadd||'USER_FILE',,'os2environment')
  78. aa=sref_fileread(userfile,'lins',,'E')
  79.  
  80.  
  81.    call lineout tempfile, '<!doctype html public "-//IETF//DTD HTML 3.0//EN">'
  82.    call lineout tempfile, "<html><head><title>SRE-Filter: view users </title>"
  83.     call lineout tempfile, '</head><body  bgcolor="#'||usecolor||'"> '
  84.    
  85.  
  86.  
  87. call lineout tempfile, "<h1> SRE-Filter: view users        </h1> <p>"
  88. call lineout tempfile, "<h2> List of "header" comments </h2> <pre> <blockquote>"
  89.  
  90. /* show "header comments" */
  91. iat=0
  92. do until iat >= lins.0
  93.    iat=iat+1
  94.    if  abbrev(strip(lins.iat),';')  then do
  95.         foo=strip(lins.iat) ;foo=strip(foo,'l',';')
  96.          call lineout tempfile, foo 
  97.    end  /* Do */
  98.    else do
  99.         leave
  100.    end
  101. end /* do -- iat is the first non header comment line  */
  102. call lineout tempfile, '</blockquote></pre> '
  103.  
  104. /* view descriptive header only? */
  105. if upper(list)='TODO=SHOW_HEADER' then do
  106.    call lineout tempfile,' <hr> </body></html>'
  107.    call lineout tempfile
  108.    'file erase  type text/html name  ' tempfile
  109.    return ' done '
  110. end  /* Do */
  111.  
  112.  
  113.  
  114. /* read in usernames, etc */
  115. nusers=0
  116. call lineout tempfile, ' <hr> <h2> List of users </h2>  '
  117.  
  118. call lineout tempfile,'Notes: <ul> <li> Usernames/passwords are stored in: 'userfile
  119. call lineout tempfile,' <li> <em>Comments are in italics </em> '
  120. call lineout tempfile,' <li>  A <strong>* </strong> in the username or password signifies that <em>any entry is a match </em>'
  121. call lineout tempfile, ' <li> Entries with no <strong>host nickname</strong> apply to all requests</ul> <br>'
  122.  
  123. call lineout tempfile,' <table border=1> <th> Host Nickname </th>'
  124. call lineout tempfile,' <th> Username  </th>'
  125. call lineout tempfile,'  <th> Password </th>'
  126. call lineout tempfile,'  <th> Privileges list </th> <tr>'
  127.  
  128. do mm=iat to lins.0
  129.   if lins.mm=' ' then iterate
  130.   if  abbrev(strip(lins.mm),';') | lins.mm=' ' then do  
  131.        call lineout tempfile,'<td colspan=4>  <code>     </code> <em>' strip(strip(lins.mm),'l',';') '</em></td> <tr> '
  132.  
  133.   end
  134.   else do
  135.       if pos('//',lins.mm)>0 then
  136.            parse var lins.mm hostname '//' username password privs
  137.       else do
  138.            hostname=' .. '
  139.            parse var lins.mm username password privs
  140.       end  /* Do */
  141.       privs=strip(privs)
  142.       call lineout tempfile,'<td> <STRONG> 'hostname ' </STRONG></td>'
  143.       call lineout tempfile,'<td> <STRONG> 'username ' </STRONG></td>'
  144.       call lineout tempfile,'<td> <STRONG> ' password ' </STRONG></td>'
  145.       call lineout tempfile,'<td> <STRONG> ' privs  ' </STRONG></td> <tr>'
  146.   end /* do */
  147.  
  148. end
  149. call lineout tempfile,' </table>'
  150.  
  151.  
  152.  
  153.  
  154. call lineout tempfile,' <hr> Thanks for checking </body></html>'
  155. call lineout tempfile
  156.  
  157. foo=sref_expire_response(0.05,dosdir(tempfile))
  158.  
  159. 'file erase  type text/html name  ' tempfile
  160. return ' done '
  161.  
  162. /* jump here if "set values" chosen */
  163. doset:
  164. userfile=value(enmadd||'USER_FILE',,'os2environment')
  165. aa=sref_fileread(userfile,'lins',,'E')
  166.  
  167. call lineout tempfile, '<!doctype html public "-//IETF//DTD HTML 3.0//EN">'
  168. call lineout tempfile, "<html><head><title>SRE-Filter: modify  users list </title>"
  169. call lineout tempfile, '</head><body  bgcolor="#'||usecolor||'"> '
  170.  
  171. /* ignore header stuff */
  172. iat=0
  173. do until iat >= lins.0
  174.    iat=iat+1
  175.    if  abbrev(strip(lins.iat),';') | lins.iat=' ' then iterate
  176.    leave
  177. end /* do -- iat is the first non header comment line  */
  178. call lineout tempfile, "<h1> SRE-Filter: <A NAME="top">modify users list</A>  </h1> <p>"
  179. call lineout tempfile,' <blockquote> You can modify, remove, or add usernames, passwords, and privileges.'
  180. call lineout tempfile,' <br><em> Questions? <A HREF="#notes">The notes might help.</A> </em> </blockquote> '
  181. call lineout tempfile,' <h2> Modify or remove current users </h2>'
  182. call lineout tempfile,'<FORM ACTION="/usercfg" METHOD="GET">'
  183. call lineout tempfile,' <table border=1> <th> Host Nickname <br> (see <A HREF="#hosts">below</A>  for a <br>listing of current hosts) </th>'
  184. call lineout tempfile,' <th> Username  <br> (set to blank to  <br> delete the entry)</th>'
  185. call lineout tempfile,'  <th> Password </th>'
  186. call lineout tempfile,' <th> Superuser and <br>  INHOUSE privileges </th> '
  187. call lineout tempfile,'  <th> Space delimited list  of <br> other privileges </th> <tr>'
  188.  
  189. nhidden=0 ; mm=0
  190. do mm0=iat to lins.0
  191.     alin=translate(lins.mm0,' ','1a000d0a'x)
  192.     mm=mm+1
  193.     if  abbrev(strip(alin),';')=1 | alin=' ' then do
  194.         nhidden=nhidden+1
  195.         hiddens.nhidden='<INPUT TYPE="HIDDEN" name="COMMENT.'||mm||'"  value="'||alin||'" >'
  196.         iterate
  197.     end
  198.  
  199. /* non comment */
  200.     if pos('// ',alin)>0 then
  201.              parse var alin hostname '//' username password privs
  202.         else do
  203.              hostname='  '
  204.              parse var alin username password privs
  205.      end  /* Do */
  206.      call lineout tempfile,'<td> <EM>Host nickname:</EM> <br> <INPUT TYPE="text" NAME="hostname.'||mm||'"'
  207.      call lineout tempfile,'value="'hostname'" SIZE=8 MAXLENGTH=15> </td> '
  208.      call lineout tempfile,'<td> <EM>Username:</EM> <br> <INPUT TYPE="text" NAME="username.'||mm||'"'
  209.      call lineout tempfile,'value="'username'" SIZE=8 MAXLENGTH=15> </td> '
  210.      call lineout tempfile,'<td> <EM>Password:</EM> <br> <INPUT TYPE="text" NAME="password.'||mm||'"'
  211.      call lineout tempfile,'value="'password'" SIZE=8 MAXLENGTH=15> </td> '
  212.  
  213.      privs=strip(privs)
  214.      joe=wordpos('SUPERUSER',upper(privs))
  215.      issuper=0
  216.      if joe>0 then   do
  217.             issuper=1 ;   privs=delword(privs,joe,1)
  218.      end
  219.      inhouse=0
  220.      joe=wordpos('INHOUSE',upper(privs))
  221.      if joe>0 then  do
  222.             inhouse=1 ;   privs=delword(privs,joe,1)
  223.      end
  224.      call lineout tempfile,'  <td> <INPUT TYPE=CHECKBOX NAME="SUPERUSER.'mm||'" '
  225.      if issuper=1 then do
  226.           call lineout tempfile,' CHECKED > SUPERUSER? <br> '
  227.      end
  228.      else
  229.          call lineout tempfile,' >  SUPERUSER? <br> '
  230.      call lineout tempfile,' <INPUT TYPE=CHECKBOX NAME="INHOUSE.'mm||'" '
  231.      if inhouse=1 then do
  232.           call lineout tempfile,' CHECKED > INHOUSE ?</td>  '
  233.      end
  234.      else
  235.          call lineout tempfile,' >  INHOUSE?</td> '
  236.  
  237.      if privs='' then privs=' '
  238.      call lineout tempfile,'<td> <em>Other privileges: </em><br> <INPUT TYPE="text" NAME="privs.'||mm||'"'
  239.      call lineout tempfile,'value="'privs'" SIZE=10 MAXLENGTH=45> </td>  '
  240.      if mm0<lins.0 then do
  241.            call lineout tempfile,'<tr>' ; call lineout tempfile,' '
  242.      end
  243. end
  244. call lineout tempfilem,' '
  245.  
  246. /* --- allow user to enter a few new names */
  247. call lineout tempfile,' </table>  <p> <h2> Add new users </h2> <table border=1>'
  248. mm0=mm
  249. do mm=mm0+1 to mm0+3
  250.      call lineout tempfile,'<td> <EM>Host nickname:</EM> <br> <INPUT TYPE="text" NAME="hostname.'||mm||'"'
  251.      call lineout tempfile,'value=" " SIZE=8 MAXLENGTH=15> </td> '
  252.      call lineout tempfile,'<td> <EM>Username:</EM> <br> <INPUT TYPE="text" NAME="username.'||mm||'"'
  253.      call lineout tempfile,'value=" " SIZE=8 MAXLENGTH=15> </td> '
  254.      call lineout tempfile,'<td> <EM>Password:</EM> <br> <INPUT TYPE="text" NAME="password.'||mm||'"'
  255.      call lineout tempfile,'value=" " SIZE=8 MAXLENGTH=15> </td> '
  256.      call lineout tempfile,'  <td> <INPUT TYPE=CHECKBOX NAME="SUPERUSER.'mm||'"> SUPERUSER? <br> '
  257.      call lineout tempfile,'       <INPUT TYPE=CHECKBOX NAME="INHOUSE.'mm||'"> INHOUSE? </td> '
  258.      call lineout tempfile,'<td> <em>Other privileges: </em><br> <INPUT TYPE="text" NAME="privs.'||mm||'"'
  259.      call lineout tempfile,'value=" " SIZE=10 MAXLENGTH=45> </td>'
  260.      if mm<mm0+3 then call lineout tempfile,' <tr> '
  261. end
  262.  
  263. call lineout tempfile,'</table> <p>'
  264.  
  265.  
  266. /* ----- add comments information */
  267.  
  268. do jj=1 to nhidden
  269.    call lineout tempfile,hiddens.jj
  270. end /* do */
  271. call lineout tempfile,' <input type="hidden" name="entries" value="'||mm||'">'
  272. call lineout tempfile,' <input type="submit"> <input type="reset"> </form> '
  273.  
  274.  
  275. call lineout tempfile,' <hr> <h3> <A NAME="notes">Notes</A> </h3> <ul> <li> Usernames/passwords are stored in: 'userfile
  276. call lineout tempfile,' <li> To add more then 3 new names, just rerun this several times <br> or edit ' userfile 
  277. call lineout tempfile,' <li> Do you want to view a  more complete description of '
  278. call lineout tempfile,' <a href="/usercfg?TODO=SHOW_HEADER"> User information</a>?'
  279. call lineout tempfile,' <li> <em>Comments are NOT displayed </em>  <li> Case is ignored '
  280. call lineout tempfile,' <li> Use a <strong>* </strong> in the username or password to signify that <em>any entry is a match </em>'
  281. call lineout tempfile, ' <li> Entries with no <strong>host nickname</strong> will apply to all requests</ul> <br>'
  282.  
  283. call lineout tempfile,' <h3> A list of the <A NAME="hosts">current hosts</A> </h3>  <blockquote> '
  284.  
  285. ii=value(enmadd||'HOSTS.0',,'os2environment')
  286. if ii>0 then do
  287. call lineout tempfile,' <table> <th> IP address </th> <th> Host Nickname </th> <th> Data Directory </th> <tr> '
  288. do ll=1 to ii
  289.    wow=value(enmadd||'HOSTS.'||ll,,'os2environment')
  290.    parse var wow ip ',' hn ',' hdir
  291.    call lineout tempfile,' <td> ' ip  '</td> <td> ' hn ' </td> <td> ' hdir '</td> <tr> '
  292. end /* do */
  293. call lineout tempfile,' </table> </blockquote> '
  294. end
  295. else do
  296.   call lineout tempfile,' No HOSTS have been defined   </blockquote>'
  297. end
  298.  
  299. call lineout tempfile,' <p> <A HREF="#top">Return to the top of this form.</A>'
  300.  
  301. call lineout tempfile,'</body></html>'
  302. call lineout tempfile
  303.  
  304. foo=sref_expire_response(0.05,dosdir(tempfile))
  305.  
  306. 'file erase  type text/html name  ' tempfile
  307. return ' done '
  308.  
  309.  
  310. /* ********************** jump here to recrod changes */
  311. dochange:
  312.  
  313. parse upper var list foo 'ENTRIES=' nentries '&' .
  314. do ii1=1 to nentries
  315.    fillme.ii1.0=0
  316. end /* do */
  317.  
  318. do until list=""
  319.    parse var list aa '&' list
  320.    parse upper var aa avar '.' aind '=' aval
  321.    aval=packur(aval)
  322.    if abbrev(avar,'ENTRIES=')=1 then iterate
  323.    wow=fillme.aind.0+1
  324.    fillme.aind.0=wow
  325.    fillme.aind.wow.var=avar ; fillme.aind.wow.val=aval
  326.    select
  327.       when avar="COMMENT" then do
  328.           fillme.aind.type='COMMENT'
  329.           parse  var aa foo '=' aval
  330.           fillme.aind.wow.val=packur(aval)
  331.       end
  332.       when avar="USERNAME" then fillme.aind.type='USERNAME'
  333.       otherwise nop
  334.    end
  335. end /* do */
  336.  
  337. userfile=value(enmadd||'USER_FILE',,'os2environment')
  338. aa=sref_fileread(userfile,'lins',,'E')
  339.  
  340. /* pull "header comments" */
  341. iat=0
  342. do until iat >= lins.0
  343.    iat=iat+1
  344.    if  abbrev(strip(lins.iat),';')  then do
  345.        newlines.iat=lins.iat
  346.    end  /* Do */
  347.    else do
  348.         leave
  349.    end
  350. end /* do -- iat is the first non header comment line  */
  351. iat=iat-1
  352.  
  353. do uu=1 to nentries
  354.    select
  355.       when fillme.uu.type='COMMENT' then do
  356.           iat=iat+1
  357.           newlines.iat=fillme.uu.1.val
  358.       end
  359.       when fillme.uu.type='USERNAME' then do
  360.           username=' ' ; password='*' ; hostname=' ' ; privs=' '
  361.           inhouse=' ' ; superuser=' '
  362.           do uu2=1 to fillme.uu.0
  363.              chk1=fillme.uu.uu2.var
  364.              vvv=fillme.uu.uu2.val
  365.              select
  366.                 when chk1='USERNAME' then USERNAME=vvv
  367.                 when chk1='PASSWORD' then password=vvv
  368.                 when chk1='PRIVS' then privs=vvv
  369.                 when chk1='HOSTNAME' then hostname=vvv
  370.                 when chk1='SUPERUSER' then superuser='SUPERUSER'
  371.                 when chk1='INHOUSE' then inhouse='INHOUSE'
  372.                 otherwise nop
  373.              end
  374.           end
  375.           if username<>' ' then do
  376.               iat=iat+1
  377.               newlines.iat=''
  378.               if hostname<>' ' then
  379.                   newlines.iat=hostname||'// '
  380.               newlines.iat=newlines.iat||username' ' password '  ' superuser ' ' inhouse ' ' privs
  381.           end
  382.       end
  383.       otherwise do
  384.             nop
  385.       end  /* Do */
  386.  
  387.   end                   /* select over type */
  388. end                     /* do over entries */
  389.  
  390. /* save to userfile.. but rename access_file first */
  391. foo=lastpos('.',userfile)
  392. if foo=0 then
  393.    acf1=userfile||'.'
  394. else
  395.    acf1=left(userfile,foo)
  396. do hi=1 to 999
  397.    try1=acf1||hi
  398.    if stream(acf1||hi,'c','query exists')='' then leave
  399. end /* do */
  400. foo=dosrename(userfile,try1)
  401. newlines.0=iat
  402. foo=filewrite(userfile,newlines,'R')
  403.  
  404.  
  405. call lineout tempfile, '<!doctype html public "-//IETF//DTD HTML 3.0//EN">'
  406. call lineout tempfile, "<html><head><titLE> SRE-Filter: Changed list of Users</title>"
  407. call lineout tempfile, '</head><body  bgcolor="#'||usecolor||'"> '
  408.  
  409. call lineout tempfile,' <h2> The list of Users has  been changed </h2>'
  410. call lineout tempfile,' The list of Users has been saved to: ' userfile
  411. call lineout tempfile,' <p> The old version of 'userfile' has been moved to ' try1
  412. call lineout tempfile,' </body> </html> '
  413. call lineout tempfile
  414.  
  415. foo=value('SREF_REDO',1,'os2environment')
  416. 'FILE ERASE TYPE text/html NAME' tempfile
  417. return 'done change '
  418.  
  419.  
  420.  
  421.  
  422. return 'done change '
  423.