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

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