home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / SREFV12J / INITFILT.DOC < prev    next >
Text File  |  1997-09-21  |  122KB  |  3,102 lines

  1. Optimization hints, configuration information, and other commentaries
  2. on SRE-Filter.  19 Sept 1997.
  3.  
  4. This file contains several sections discussing various aspects of SRE-Filter.
  5.  
  6.  1)  Optimization hints: a discussion of ways of speeding up SRE-Filter
  7.  2)  Configuration information: a complete description of all the SRE-Filter
  8.      intialization parameters: including the more important parameters set
  9.      in INITFILT.80, and the more obscure parameters set in SREFILTR.80.
  10.  3)  Remote vs. local redirection: A discussion of the various methods
  11.      SRE-Filter uses to redirect files.
  12.  4)  A sample site: A short example of how one might use PUBLIC_URLS to
  13.      efficiently set up a site.
  14.  
  15.                   ===========================================
  16.  
  17.    SECTION 1.                    Performance hints
  18.  
  19.  
  20. (a) The use of the server side include cache (SSI-Cache) is highly
  21.     recommended. However, for very dynamic documents (such as documents
  22.     that contain several INTERPRET and #EXEC keyphrases), it may
  23.     be more efficient to suppress caching of these files (you
  24.     can use the <!-- CACHE NO --> keyphrase for just such a purpose).
  25.  
  26.       Upgraders note: now that the SSI-cache has been added to SRE-Filter, we
  27.                       NO LONGER RECOMMEND using the "send in pieces" option
  28.                       (as set by the DO_SEND_PIECE parameter).
  29.  
  30. (b) Suppressing incorporation of  server side includes (SSIs)
  31.  
  32.    i) If you 
  33.         1) set SSI_SHTML_ONLY='YES'
  34.         2) name html documents, that contain SSIs, with a .SHT or .SHTML
  35.           extension
  36.       Then
  37.          SRE-Filter will not attempt to process SSI's in .HTM or .HTML files
  38.          but WILL attemp to process SSI's in .SHT or .SHTML files.
  39.       This can save some processing time.
  40.  
  41.       In fact, if you are using GoServe's caching mechanism (see c below),
  42.       this can save a lot of processing time!
  43.  
  44.   ii) If you are willing to NOT have SSIs, then set
  45.           NO_INCLUDE='YES'
  46.      (this saves more processing time, and it also makes
  47.       hints (a) and (b.i) totally irrelevant)
  48.  
  49. (c) Turn on GoServe's cache.  This will have no effect on documents
  50.     containing server side includes, but can greatly speed up transfer of
  51.     other documents (such as .GIF files).
  52.  
  53.       However, if you have imposed ANY access controls, SRE-Filter will
  54.       suppress caching.  To get around this, you can use the CACHE permission.
  55.  
  56.    The CACHE permission (in the ACCESS_FILE) instructs GoServe to allow
  57.    caching on a request specific basis.
  58.  
  59.           One good use of this CACHE option is to cache .GIF files
  60.           that are used as in-line images (and that of themselves
  61.           contain no proprietary information or are unlikely to be requested
  62.           explicitily).  Note that html documents that have been processed for
  63.           server side includes will never be cached, regardless of the use of
  64.           this CACHE permission.
  65.  
  66.     Use CACHE with care, since cached files are sent to all requesters!
  67.  
  68. (d) If you never check "access" info, or virtual directories,
  69.     set the access_file and virtual_file to " " (or see note e).
  70.     Note that the access file can contain (on a SEL-specific basis):
  71.         i>   access control information,
  72.         ii>   ssi, ssp, delete, and put permissions,
  73.         iii>   NO_VIRTUAL, NO_ALIAS, and NO_POSTFILTER permissions
  74.         iv>   the "always cache flag",
  75.         v>   and realm information.
  76.     Thus, with access_file="":
  77.        * these permissions (et al) will equal to " "
  78.        * CAUTION: if allow_access="NO" and ACCESS_FILE=' ', then
  79.                   site access is given only to SUPERUSERS
  80.  
  81.  
  82. (e)  Use the NO_VIRTUAL, NO_ALIAS, and NO_POSTFILTER "permissions"
  83.      in the ACCESS_FILE to suppress unnecessary processing.
  84.  
  85. (f)  If you have a choice, the ACCESS_FILE method is preferable to the
  86.      the HTACCESS access control method: HTACCESS it is not
  87.      implemented with quite the same attention to efficiency.  Or,
  88.      use the NO_HTACCESS permission (in your ACCESS_FILE) whenever possible.
  89.  
  90. (g)  If you have some documents that are supposed to be
  91.      available to everyone, and these documents do not have server
  92.      side includes, set up PUBLIC_URLS entries for them (since public_urls
  93.      are cached if possible)
  94.  
  95. (h)  If ...
  96.             you are serving only 1 host,
  97.             you have many selectors that you can specify with  PUBLIC_URLS,
  98.             and these "selectors" are to be interpreted "literally" --
  99.                     with no internal redirection, auto-header creation,
  100.                     and no server side includes --
  101.      then ...
  102.             you can greatly improve throughput by using
  103.             the  SREFQUIK.80 filter instead of  SREFILTR.80.
  104.  
  105.      SREFQUIK.80 is small filter that processes these "literal
  106.      public_urls" on a single host server (it also recognizes
  107.      "cached" returns).
  108.      When a "literal public_url" is requested, SREFQUIK does
  109.      all the work, saving a great deal of overhead.  That is, the
  110.      main filter (SREFILTER) is never called!
  111.      On the other hand, if the request selector does not match a
  112.      "literal public_url", the standard filter is called, with no
  113.      loss of capability.
  114.  
  115.      Notes and Cautions:
  116.  
  117.      *  Caution #1: Since SREFQUIK adds overhead to requests that are NOT to
  118.         "literal public_urls", if you specify few "literal public_urls" the
  119.         net effect may be detrimental.
  120.         So, when using SREFQUIK, it is important to  specify as many
  121.         "literal public_urls" as possible.
  122.  
  123.      *  Caution #2: If you modify SREFILTR.80 and are using
  124.         SREFQUIK as your filter, be aware that the modifications to
  125.         SREFILTR.80 will take effect AFTER you stop, then restart, GoServe.
  126.  
  127.      *  Caution #3: If you have specified multiple hosts (using the
  128.         HOSTS. variables) , SREFQUIK should NOT be used.
  129.  
  130.      *  Caution #4: If you use SREFQUIK, "cached" responses (requests
  131.         that GoServe was able to satisfy from it's cache) will
  132.         not be checked for the NO_POSTFILTER access permission
  133.         (SREFQUIK.80 discusses a work-around for this problem).
  134.  
  135.      *   For a description of "literal public_urls", see the
  136.          discussion of the PUBLIC_URLS variables, and see
  137.          Section 4 of this document
  138.  
  139.      *   For further details on the SREFQUIK "mini-filter", see SREFQUIK.DOC.
  140.  
  141.  
  142. (i)  As an alternative to SREFQUIK, consider using the SREFAST filter.
  143.      SREFAST is a small & fast filter that is designed
  144.      to handle fairly simple requests.  It is more flexible then
  145.      SREFQUIK (for example, it can handle most of the server side includes),
  146.      but requires a fair amount of configuration (but nothing very complex).
  147.      As with SREFQUIK, use of SREFAST will NOT reduce SRE-Filter's 
  148.      capabilities (if a request can not be handled by SREFAST, 
  149.      SREFILTR is called).
  150.  
  151.      For more details on SREFAST, see SREFAST.80 or SREFAST.DOC.
  152.     
  153.  
  154. (j)  Turn on the RECORD_ALL_FILE cache.  This is useful ONLY if you
  155.      are recording all requests (i.e.; RECORD_OPTION='YES').
  156.      Turning on the cache will cause the RECORD_ALL_FILE to be cached
  157.      in memory, with disk-writes every 5 minutes.  See the description
  158.      of RECORD_CACHE_LINES for details.
  159.  
  160. (k)  If you don't need extensive auditing, set WRITE_LOGS=0
  161.  
  162. (l)  It you don't need "dynamic privileges", set CHECK_ADD_PRIVS='NO'.
  163.  
  164. (m)  As an illustrative example; an apppendix at the bottom of
  165.      this document contains a discussion of how to use SREFQUIK,
  166.      PUBLIC_URLS, etc. to efficiently setup  a site with three levels
  167.      of security.
  168.  
  169.  
  170.  
  171.  
  172.                         =============================
  173.  
  174.    Section 2.                Parameter descriptions
  175.  
  176.  
  177. The following  parameters are in alphabetical order (by name  of parameter).
  178. Many of them can be changed by using SRE-Filter's configurator,
  179. especially the "intermediate mode" configurator. However, to changes several of
  180. these parameters, you must "hand-edit" the INITFILT.80 file.  In general, the
  181. "hand-edit only" parameters are more obsure, and may never need to be changed.
  182.  
  183. "Power users" may wish to see section 2a (below) for a discussion of
  184. variables contained in SREFILTR.80 -- these are "doubly obscure"
  185. variables!
  186.  
  187. Miscellaneous Notes:
  188.  *   The terms "variable" and "parameter" are used interchangeably.
  189.  
  190.  *   In almost all cases the variables (aka parameters) are set to equal
  191.      strings, so if you are "hand editing" INITFILT.80, remember to put
  192.      single quotes (') around the stuff on the rhs of the = sign.
  193.  
  194.  *   When this document mentions "SEL-specific", it really means
  195.      "selector specific", where the selector is the slightly modified
  196.      middle portion of the request string sent by the client to the server.
  197.      For example, if the client requests a URL of:
  198.          http://your.server/animals/bear.jpg
  199.      her brower will issue a request string of:
  200.          GET   /animals/bear.jpg  http/1.0
  201.      and the selector would be
  202.                animals/bear.jpg
  203.  
  204. Notes on Host-specific parameters:
  205.  *   Almost all of the parameters (that are set in INITFILT.80) may be "host
  206.      specific".  The several that aren't are:
  207.           INTERPRET_TYPES, DISPLAY_ENV, KEEP_ADDONS., and HOSTS.
  208.  
  209.  *   Parameters set in SREFILTR.80 (described in section 2a)
  210.      can NOT be host specific (they apply to all hosts).
  211.  
  212.  *   To specify a host-specific parameter, you append the "host nickname"
  213.      to the parameter name (see the HOSTS. variable for a discussion of
  214.      host nicknames).
  215.         For example, to set the CHECKLOG variable for the ZOO host,
  216.            CHECKLOG.ZOO='NO'
  217.         and for all other hosts:
  218.            CHECKLOG='ALWAYS'
  219.         where this non host-specific value (CHECKLOG='ALWAYS') is the
  220.         "generic" value, and will be used for hosts other then the "ZOO" host.
  221.  
  222.  *   When a request to a  host is recieved, SRE-Filter will attempt
  223.      to find the appropriate host-specific parameters. If a given
  224.      parameter does not have a host-specific value, the "generic"
  225.      (the value of the non host-specific parameter) is almost always
  226.      used instead.
  227.  
  228.          The exceptions are: UNALLOWEDIPS., INHOUSEIPS., PUBLIC_URLS.
  229.  
  230.  *   For security reasons, for these three (sets of) parameters
  231.      the generic (non host-specific) values are  NOT used as  a default.
  232.          The astute reader may notice that the OWNERS variable is not
  233.          on this list of "exceptions". In other words, the
  234.          "generic" OWNER has SUPERUSER privileges for ALL hosts.
  235.  
  236. Note on "hand edited" parameters:
  237.  *  Currently, the "hand-edited" parameters (that can NOT be set with the
  238.     intermediate mode configurator) are:
  239.        ACCEPT_RANGE      ADD_USER_NAME      ADD_RESOURCE_NAME  ADD_PRIVS_PREFIX
  240.        CHECK_ALIAS
  241.        DELIM_1.n         DELIM_2.n          DISPLAY_ENV        DO_SEND_PIECE
  242.        HTACCESS_FILE     INTERPRET_TYPES    KEEP_ADDONS.n
  243.        MAX_POINTDIST     NO_INCLUDE
  244.        NO_PROCESSING     NO_INTERPRET_CODE  PREFILTER_NAME     POSTFILTER_NAME
  245.        USE_STDOUT        VERBOSE
  246.  
  247.  
  248. ************
  249. ACCEPT_RANGE: Return only specified range of the request file
  250.  
  251. You can instruct SRE-Filter to respond to a "range:" request header. If such a
  252. request header is present, SRE-Filter will extract the "byte
  253. range" information, and return only this portion of the request file.
  254.  
  255. Primary use:
  256.     Adobe Acrobat can use this to request a given page in a long .pdf file.
  257.  
  258. If accept_range=NO, this processing will not occur -- the entire file will
  259. always be returned.
  260. If accept_range=YES, this processing will occur.  Of course, if there is
  261. no range: header, then the entire file is returned.
  262.  
  263. Accept range is only used when a non-html file is requested.
  264.  
  265.   Example: accept_range='YES'
  266.  
  267. For more information on "byte range retrieval", see the document:
  268.   draft-ieft-http-range-retrieval-00.txt at ds.internic.net.
  269.  
  270. Note on GoServe and Multi-part sends:  GoServe is a bit flaky with
  271. multi-part sends (byte retrieval being a form of multi-part send).
  272. We suggest obtaining GoServe ver 2.50 from:
  273.     http://www2.hursley.ibm.com/goserve/
  274.  
  275. (ACCEPT_RANGE can be host specific)
  276.  
  277. ***********
  278. ACCESS_FAIL_FILE
  279.  
  280. If SEL-specific access is in effect, and a client does not have 
  281. sufficient privileges (i.e; none of her client privileges appear
  282. in the resource privileges list associated with the chosen selector)
  283. you can use the ACCESS_FAIL_FILE as a response.
  284.  
  285. ACCESS_FAIL_FILE should be one of the following values:
  286.   -1 : Terse denial: Do NOT send a message, and do NOT ask for authorization.
  287.        Hint: this is useful when combined with "dynamic privileges"
  288.    0 : Do NOT use an access_fail_file -- just ask for authorization
  289.    1 : If a "SEL-specific" access file is specified (in ALL_FILE.CTL),
  290.        use it. Otherwise, ask for authorization
  291. filename.ext : The "default" file (fully qualified) to return when 
  292.                the client does not have access privileges for this selector.
  293.                Note that if a "SEL-specific" access-fail
  294.                file is specified (in ALL_FILE.CTL), then this is NOT used
  295.                (the "SEL-specific" access-fail file is used instead)
  296.  
  297. As with the LOGON_FAIL_FILE, when the ACCESS_FAIL_FILE is an HTML document,
  298. server side includes are NOT attempted. However, a few special 
  299. substitutions will occur (when the ACCESS_FAIL_FILE is an HTML document):
  300.     <!--#URL--> phrases are substituted with the request selector.
  301.     <!--#SERVER--> phrases are substituted with the servername.
  302.     <!-- #WEBMASTER --> phrases are substituted with the WEBMASTER variable.
  303.     <!-- #MESSAGE --> phrases are substituted with a short description
  304.                      of the reason for failure
  305.     <!-- #LINK --> phrases are substituted with a "forced" URL: which points
  306.                    back to this resource, and forces an "ask authorization"
  307.                    if access is denied.
  308.  
  309. It is HIGHLY recommended that a #LINK be included.  Without such an
  310. entry, the client will be unable to enter a new username/password, should
  311. his first entry be misspelled (or if he had previously used a
  312. different username/password for a different resource on the same server).
  313.  
  314. PROVISO:
  315.    In some cases (such as when dynamic privileges are used to control
  316.    access to .GIF files), you may want to use an ACCESS_FAIL_FILE that does
  317.    not contain a #LINK.  
  318.  
  319. Examples:
  320.    ACCESS_FAIL_FILE=0
  321.    ACCESS_FAIL_FILE='D:\goserve\accfail.htm'
  322.  
  323. Notes:
  324.   * When  ACCESS_FAIL_FILE=0,
  325.       ** the client will be re-sent an authorization request.
  326.       ** SEL-specific access fail files are NOT used, even if one 
  327.          is available.
  328.  
  329.   * The #LINK entry uses a special form of SRE-Filter request selector.
  330.     The effect is to force SRE-Filter to request authorization should
  331.     the current username/password be incorrect; thereby avoiding an
  332.     annoying recursive trap.
  333.  
  334.   *  Reminder: the LOGON_FAIL_FILE is used when the client
  335.      fails a "generic" logon (that is, she does not have a valid
  336.      username and password).  In contrast, the ACCESS_FAIL_FILE
  337.      (or the Sel-specific access fail file) is used when the client 
  338.      does not have sufficient "client privileges".
  339.  
  340. (ACCESS_FAIL_FILE can be host-specific)
  341.  
  342.  
  343. ***********
  344. ADD_USER_NAME: Controls whether a clients "logon name" should be
  345.                added to the list of client privileges.
  346.  
  347.         YES: Add logon name to client privilege list
  348.         NO: Do not add logon name to client privilege list.
  349.  
  350.         This can be a useful means of personallizing a client's
  351.         privilege list (of course, you could always enter his
  352.         name in the privilege list explicitly when setting up his
  353.         username/password entry).
  354.  
  355.   Example:
  356.         ADD_USER_NAME='YES'
  357.  
  358.    Usage Example:
  359.             if a username of ACIDER exists, with a client privileges of
  360.             HARD SOFT, then if ADD_USER_NAME='YES', an ACIDER client
  361.             privilege is added (yielding a client privilege list of
  362.             ACIDER HARD SOFT).
  363.  
  364. Notes:
  365.  *   For INHOUSEIPS. entries, the "clientname" (the full, dotted, IP name) is
  366.      used as the "logon name".
  367.  
  368.  *   If you set ADD_USER_NAME=1, you should be careful that the usernames
  369.      you assign (in the USERS.IN file) do not conflict with the words used for
  370.      privileges. In particular, don't casually give someone a
  371.      username of SUPERUSER or INHOUSE.
  372.  
  373. ***********
  374. ADD_RESOURCE_NAME: Controls whether the "action" portion of the request
  375.                    selector be included as a resource privilege.
  376.  
  377.         YES: Add the action to the resource privilege list
  378.         NO:  Do not add.
  379.  
  380.         Similar to the ADD_USER_NAME, this can be a useful shortcut
  381.         in environments where highly specific access controls are
  382.         required.
  383.  
  384.         CAUTION: When ADD_RESOURCE_NAME='YES', unmatched requests
  385.                  will require clients to have a privilege matching
  386.                  the "requested resource".
  387.  
  388.    Example: ADD_RESOURCE_NAME='YES'
  389.  
  390. Notes:
  391.  *   The "action" portion of a request selector is everything before the
  392.      first ? character (if no ? is found, the entire request selector is used).
  393.  
  394.  *   If ALLOW_ACCESS='YES', ADD_RESOURCE_NAME has no effect.
  395.  
  396. ************
  397. ADD_PRIVS_PREFIX: Modifies the prefix used to distinguish "dynamic"
  398.                   client privileges.
  399.  
  400. As a security measure, when SRE-Filter adds "dynamic" privileges, it will
  401. append the ADD_PRIVS_PREFIX.  For example, if ADD_PRIVS_PREVIX='!', and
  402. a <!-- INTERPRET FILE ADDPRIVS.RXX  SATURN ,30 --> keyphrase appears
  403. in a requested document, the client will be granted a !SATURN
  404. client-privilege (in this example, for 30 minutes).
  405.  
  406. The rationale is to prevent unscrupulous individuals, who may have been
  407. granted a limited ability to post documents to "user" sub-directories,
  408. from subverting access control with keyphrases of the form:
  409.         <!-- INTERPRET FILE ADDPRIVS.RXX  SUPERUSER, 100 -->
  410.  
  411. If such problems are not likely to occur, you may want to
  412. set ADD_PRIVS_PREFIX=' '
  413.  
  414.   Example:
  415.         ADD_PRIVS_PREFIX='!'
  416.  
  417. (ADD_PRIVS_PREVIX may be host specific)
  418.  
  419. ************
  420. ALLOW_ACCESS : Control access to server resources.
  421.  
  422.    You can check "access privileges" for server resources (files, programs, etc.)
  423.    by setting the ALLOW_ACCESS variable.
  424.           YES : no access control
  425.       INHOUSE : don't check in-house and superusers.
  426.           NO  : don't check superusers.
  427.   Note that checking involves examination of privilege information
  428.   on a  per-request-selector basis (using ALL_FILE.CTL).
  429.  
  430.   Note that ALL_FILE.CTL (also known as the ACCESS_FILE) is  used for:
  431.     1) Controlling server side include privileges and server side processing,
  432.         on a SEL-specific basis
  433.     2) Allowing caching of files that would normally not be cached
  434.         (If CHECKLOG<>"YES" or ALLOW_ACCES<>"YES", then caching is
  435.         suppressed).
  436.     3) Setting the default "realm" of the resource (see the THE_REALM variable)
  437.     4) Permitting PUT and DELETE methods to operate
  438.     5) Suppressing aliasing, virtual directory lookup, and "post-filtering"
  439.  
  440.    If you do not ever want SRE-Filter to check the access file,
  441.    just set access_file=" ". BUT if you do, the  above features will not be
  442.    available!
  443.  
  444. Notes:
  445.     * The default name of the ACCESS_FILE is ALL_FILE.CTL (in the DATA/
  446.       directory of GoServe's "working" directory).
  447.  
  448.  
  449.     * WARNING: If you set allow_access="NO", and access_file=" ", then
  450.             only SUPERUSERS will have access to your site!
  451.  
  452. (ALLOW_ACCESS can be host specific)
  453.  
  454. ********
  455. AUTO_HEADER.  Automatic generation of response headers.
  456.  
  457. AUTO_HEADER is used to automatically generate response
  458. headers, based on LINK and META HTTP-EQUIV elements in the <HEAD>
  459. section of HTML documents.
  460.  
  461. 3 values are supported:
  462.        NO : Do not generate these headers
  463.      HEAD : Generate headers for HEAD requests only
  464.    ALWAYS : Generate headers for HEAD and GET requests.
  465.  
  466. Note that this is only relevant for HTML files.
  467. Also, when AUTO_HEADER occurs, the html file is parsed for header information
  468. before server side includes are attempted -- that is, any server side
  469. include in the <HEAD> of a document will NOT appear in the response
  470. headers (but they will appear in the body of the response).
  471.  
  472. IN OTHER WORDS -- Server Side Includes SHOULD NOT BE USED IN THE
  473. <HEAD> portion of an HTML document (unless you do not intend to
  474. automatically generate response headers)
  475.  
  476.   Example: AUTO_HEADER="HEAD"
  477.  
  478. Technical note: HTTP purists would disapprove of the use of the "HEAD" value;
  479. since HEAD method requests are "supposed to" return exactly the same
  480. response headers as GET method requests.
  481.  
  482. (AUTO_HEADER can be host specific)
  483.  
  484.  
  485. *********
  486. AUTO_NAME : Resolving requests for directories.
  487.  
  488.  AUTO_NAME is used to deal with non-specific requests that are NOT to the
  489.  root (the /) directory.
  490.  
  491.  AUTO_NAME should contain a space delimited list of potential "directory
  492.  specific default names".
  493.  
  494.  Several special names are supported:
  495.       *.HTM
  496.   or  *.HTML :  means "use the "directory" name, with .HTM or .HTML appended
  497.      !CREATE :  Create a list of links, one for each file in the directory.
  498.     !CREATE* : Same as !CREATE, but include links to subdirectories
  499.  
  500.   Example: AUTO_NAME=" *.HTM INDEX.HTM PAGE.HTM DESCRIBE.HTM  !CREATE "
  501.  
  502.      If a request for xxx/yyy/ (with optional ?abc after the final /) is
  503.      recieved, then
  504.           first, yyy.htm is looked for (in datadir/xxx/yyy)
  505.         second, INDEX.HTM (in datadir/xxx/yyy).
  506.         Then PAGE.HTM, and then, DESCRIBE.HTM are tried.
  507.         If all these fail, !CREATE signals "just display a list of the files
  508.         in this directory".
  509.  
  510.  
  511.      Note that if !CREATE were not included in this list, and
  512.      none of the requested files exist, a  not_found message is returned.
  513.      Similarly, if !CREATE fails (if there is no such directory),
  514.      the not_found message is returned (see the description of NOT_FOUND_URL
  515.      for details).
  516.  
  517.  
  518.   Notes:
  519.     * AUTO_NAME is NOT used when request is to the root (to /) -- DEFAULT is
  520.       used!
  521.     * See NOEXT_TYPE for a discussion of how to deal with requests that
  522.       have neither an extension or a trailing / (i.e.; xxx/yyy).
  523.     * You can put a "pathed" name (using /, relative to the data directory)
  524.       This is one means of handling bad requests (but only if the request
  525.       ends in a /) -- just put the home page document in the auto_name list,
  526.       i.e.; auto_name=" * INDEX.HTM /HOMEPAGE.HTM "
  527.     * It is recommended that a !CREATE be placed at the end of the
  528.       AUTO_NAME list (since !CREATE is "always a match", assuming the
  529.       request points to a valid directory)
  530.  
  531.   Example: AUTO_NAME=" * INDEX.HTM  "
  532.  
  533. (AUTO_NAME can be host specific)
  534.  
  535.  
  536. CAUTION: When using AUTO_NAME (and other types of local redirection)
  537. URL resolution by the client's browser may have unexpected consequences.
  538. See the discussion of "local  vs remote redirection" at the bottom of
  539. this document for details!
  540.  
  541.  
  542. **************
  543. CHECK_ADD_PRIVS: Check for "dynamic privileges"
  544.  
  545. CHECK_ADD_PRIVS is used to instruct SRE-Filter to check for "additional,
  546. dynamic privileges", and if they exist, add them to the client's "privilege"
  547. list.
  548. CHECK_ADD_PRIVS can take two values;
  549.     YES :  Check for additional, dynamic privileges
  550.      NO:   Do NOT check for additional, dynamic
  551.  
  552.  Example:
  553.         CHECK_ADD_PRIVS='NO'
  554.  
  555. Note:
  556.   *  When CHECK_ADD_PRIVS='YES', an _ADDPRIV.DOC file is created in the
  557.      TEMPDATA_DIR directory (typically, \GOSERVE\TEMP).
  558.  
  559.   *  See ADDPRIVS.DOC for a detailed discussion of "additional, dynamic"
  560.      privileges.
  561.  
  562. (CHECK_ADD_PRIVS can be host specific)
  563.  
  564. ***************
  565. CHECK_ALIAS: Controls whether alias checking occurs.
  566.  
  567.    SREFILTR can check all requests to see if they are aliases for some
  568.    other action.
  569.  
  570.      Uses of aliases include:
  571.         *  implementation of searchable indices
  572.         * "local" redirection -- useful as a means of assigning
  573.            proper document names  to abbreviations
  574.           (say, to convert an request of OVERVU into OVERVIEW.HTM)
  575.         * "remote" document redirection -- typically to a different
  576.           ip addreess
  577.         * transferring non-data directory files
  578.  
  579.  Setting CHECK_ALIAS to --
  580.        NO suppresses this alias lookup
  581.        YES causes this lookup to be done for all requests
  582.  
  583.  
  584.   Example:  CHECK_alias="YES"
  585.  
  586. (CHECK_ALIAS can be host specific)
  587.  
  588. ************
  589. CHECKLOG:  When and how to check for "logon rights".
  590.  
  591.   "Logon rights" refer to basic site access rights.  These may
  592.   be used with, or without, SEL-specific access privileges (see ALLOW_ACCESS)
  593.  
  594.   CHECKLOG can take four values:
  595.          1) NO  -- never check (basic access granted to all clients)
  596.          2) YES -- check when default document (either explicitily, or if a /
  597.                    is requested).  Thus, a request for a specific document
  598.                    does not require logon rights.
  599.          3) ALWAYS -- check on every request.
  600.          4) INHOUSE -- Only let IN-HOUSE users in.
  601.                        IN-HOUSE users are determined by occurence of a
  602.                        INHOUSE in the client's 'privilege list', or
  603.                        if the client has an IP address listed in the
  604.                        INHOUSEIPS.n variables.
  605.    Note: if ALWAYS or INHOUSE is selected, then GOSERVE will NOT cache GET
  606.          requests (the discussion of the ALLOW_ACCESS variable
  607.          describes an exception to this through the use of the CACHE
  608.          permission)
  609.  
  610.    Example:   checklog='NO'
  611.  
  612. (CHECKLOG can be host specific)
  613.  
  614. **********
  615. DEFAULT -- The "default" (home) page.
  616.   Use this when a default request (say, http://www.joe.com/ ) occurs.
  617.  
  618.    Note: it is traditional, but by no means required,
  619.          to use INDEX.HTML as your default
  620.  
  621.   You can enter one, or several, different names.  Each will be tried
  622.   in turn, if the file exists (relative to the possibly host specific 
  623.   data directory), it will be used.
  624.  
  625.   You can also use DEFAULT to redirect a request (using a 301 redirection),
  626.   say, for an IP Alias that has moved.  To do this, just enter the full
  627.   URL -- be SURE to include the leading http://
  628.  
  629.  
  630.    Examples: default='index.htm index.html '
  631.              default.zoo='ourzoo.htm'
  632.              default.circus='http://silly.places.net/bigtop.htm'
  633.  
  634. Notes:
  635.   * the "generic" DEFAULT dictates that Index.htm be used first; 
  636.      if not found, index.html is then tried.
  637.   * you can NOT include * or ? in DEFAULT filenames.
  638.   * default.zoo defines the DEFAULT file for requests to the
  639.     ZOO host only. 
  640.   * default.circus causes request to the default document of the circus 
  641.     host to be redirected aredefault.circus is redirected.
  642.  
  643.  
  644. (DEFAULT can be host specific)
  645.  
  646. CAUTION: When using DEFAULT (and other types of local redirection)
  647. URL resolution by the client's browser may have unexpected consequences.
  648. See the discussion of "local  vs remote redirection" at the bottom of
  649. this document for details!
  650.  
  651. **********
  652. DIR_EXCLUSION: A list of files and subdirectories that the !DIR
  653.                directory lister should exclude.
  654.  
  655. SRE-Filter's !dir function can be instructed to suppress displaying
  656. certain files and subdirectories.  To do this, one uses the
  657. DIR_EXCLUSION parameter.  DIR_EXCLUSION should contain a space
  658. delimited list of files and subdirectories".
  659.  
  660.    Example:  dir_exclusion='Htaccess. /private describe.txt  *.CNT '
  661.  
  662. Note that a / must preceed subdirectories (otherwise, the entry is
  663. interpreted as a file name).
  664.  
  665. Notes:
  666.   *  The !dir function is used by the !CREATE option of AUTO_NAME.
  667.   *  Subdirectories are assumed to be relative to the "requested directory",
  668.      and should only be one name deep.  That is, an entry of
  669.      /personal/family would be ignored.
  670.   *  The wildcard character (*) can be used in file and directory names.
  671.   *  For a further discussion of the !dir function, see DIR.DOC.
  672.  
  673. (DIR_EXCLUSION can be host specific)
  674.  
  675. **********
  676. DIR_ACCESS and DIR_ACCESS_PRIVS
  677.  
  678.  For extra security, you can use DIR_ACCESS to suppress display of 
  679.    selected directories. DIR_ACCESS is checked by both the !DIR SRE-Filter
  680.    facility, and the GETAFILE addo.
  681.  DIR_ACCESS should contain a space delimited list of "selectors" that
  682.  !DIR (and GETAFILE) will limit access to.
  683.   
  684.    More precisely, each item in DIR_ACCESS is compared against the 
  685.    requested directory;and if any of them match (with wild cards allowed) 
  686.    then the client must have one of the privileges listed in DIR_ACCESS_PRIVS
  687.    (or must be a SUPERUSER).
  688.  
  689.         Example: DIR_ACCESS=' SYSTEM    */PRIVATE '
  690.                  DIR_ACCESS_PRIVS='SUPERUSER DIRPRIVS '
  691.  
  692.  
  693.   (DIR_ACCESS and DIR_ACCESS_PRIVS can be host specific)
  694.  
  695.  
  696.  
  697. **********
  698. DIR_OPTIONS: Set the display options of the !dir function.
  699.  
  700. To control the display option of SRE-Filter's !dir function, you should
  701. modify the DIR_OPTIONS parameter.  DIR_OPTIONS should contain a
  702. space delimited list of parameters.
  703.  
  704. The allowed options are:
  705.   AUTO_DESCRIBE DESCRIBE DESC_LEN DATEFMT MULTI_SEND
  706.   NOSIZE  NOTIME NODATE NOICON NOSORT NODIR NO_RECURSE_DIR
  707.   SIZEFMT SHOWPARENT TABLE TABLE_BORDER TIMEFMT
  708.  
  709. For a description of what these options do, see DIR.DOC.
  710.  
  711.   Example: DIR_OPTIONS='notime auto_describe describe  datefmt=u '
  712.  
  713. Notes:
  714.   *  The !dir function is used by the !CREATE option of AUTO_NAME.
  715.  
  716. (DIR_OPTIONS can be host specific)
  717.  
  718. **********
  719. DISPLAY_ENV -- write "SRE-Filter" environment variables to PMPRINTF window
  720.  
  721. Use this as a debugging tool to display the values of the SRE-Filter
  722. enviroment variables in the PMPRINTF window (and possibly the SREFILTR.LOG
  723. file, if you set PMPRINTF_OPTIONS accordingly).
  724.  
  725.   DISPLAY_ENV = 1 : The SRE-Filter environment variables (basically,
  726.                     transforms of everything in INITFILT.80 and REPSTRGS.IN)
  727.                     are written to the "PMPRINTF" window.  This will occur
  728.                     whenever the environment variables are refreshed
  729.                     (say, when you change INITFILT.80).
  730.  
  731.       otherwise  : Do not write environment variables.
  732.  
  733. Example
  734.   DISPLAY_ENV=0
  735.  
  736. (DISPLAY_ENV is NOT host specific)
  737.  
  738. *************
  739. DELIMITERS for KEYPHRASES
  740.  SREFILTR does "server side" includes by looking for keyphrases in your
  741.  HTML documents. A keyphrase is defined as: delim1  keyword keyvalue delim2.
  742.  
  743.  Delim1 and Delim2 are strings (possibly 1 character) that signal the
  744.  location   of the keyphrase.  These delimiters should be odd,
  745.  yet easy to remember (and not likely to occur in your text).
  746.  ALTHOUGH WE DO NOT RECOMMEND IT, you can enter several sets of delimiters.
  747.  
  748.   One useful set is the HTML comment delimiters  '<!--'  and '-->' .
  749.   If you use these, the raw document will not look too wierd should it be
  750.   accidentally sent to the client "as is").
  751.  
  752.   For each set of delimiters, You MUST specify both the beginning (DELIM_1)
  753.   and end (DELIM_2) delimiter.
  754.  
  755.  
  756.  Examples:
  757.  
  758.      delim_1.1="<!--"
  759.      delim_2.1="-->"
  760.  
  761.      delim_1.2="{"
  762.      delim_2.2="}"
  763.  
  764.      delim_1.3=0
  765.      delim_2.3=0
  766.  
  767.  
  768. or, if just the ZOO host should recognize a second set of delimiters
  769.      delim_1.1="<!--"
  770.      delim_2.1="-->"
  771.  
  772.      delim_1.2=0
  773.      delim_2.2=0
  774.  
  775.      delim_1.1.zoo="<!--"
  776.      delim_2.1.zoo="-->"
  777.  
  778.      delim_1.2.zoo='{'
  779.      delim_2.2.zoo='}'
  780.  
  781.      delim_1.3.zoo=0
  782.      delim_2.3.zoo=0
  783.  
  784. Note: The most important reasons for NOT using several sets of delimiters:
  785.  
  786.      * SSI-Caching will be turned OFF (regardless of value of SSI_CACHE_ON)
  787.      * SSI processing will be slower
  788.      * DO_SEND_PIECE will be turned OFF
  789.  
  790.         But if you are willing to accept these performance disadvantages,
  791.         then the use of several delimiters should cause NO problems.
  792.  
  793. (DELIMS can  be host specific)
  794.  
  795. *************************
  796. DNS_CHECK: Force DNS check before access
  797.  
  798.   As a security measure, you might want to look up the IP name of the
  799. client (using the client's IP address and his DNS).  If no name can
  800. be found, logon is not allowed.
  801.  
  802.       NO: do not check DNS for an IP name
  803.       YES: Force lookup of IP name before allowing access
  804.  
  805. Although this will provide some security agains "fake" IP addresses, it
  806. will also slow down response time.  Furthermore, many legitimate clients
  807. may not have "names" (say, if they are using pooled IP addresses).
  808.  
  809. DNS_CHECK='NO'
  810.  
  811. (DNS_CHECK can be host specific)
  812.  
  813. ********
  814. DO_SEND_PIECE: Allow SRE-Filter to send "pieces" of a document as they
  815.                become available.
  816.  
  817.    NOTE: We no longer recommend enabling the DO_SEND_PIECE parameter -- it
  818.          conflicts with the SSI Cache (that is, we recommend DO_SEND_PIECE=0).
  819.  
  820.    To speed up percieved throughput for large documents that contain
  821.    server side includes, transferal of earlier portions of the
  822.    document "as they become" available is recommended.
  823.  
  824.    DO_SEND_PIECE controls this feature, with values:
  825.          NO :  Do NOT send "pieces of the document" as they become
  826.                available (send the entire document when it's ready)
  827.          YES:  DO send these pieces.
  828.  
  829.    DO_SEND_PIECE is ignored if there is more then one set of
  830.    delimiters, or if FIX_EXPIRE is greater then 0.  If either of these
  831.    hold, "pieces" will NOT be sent (that is, DO_SEND_PIECE is set to NO).
  832.  
  833.  Example:
  834.    DO_SEND_PIECE='NO'
  835.  
  836.  
  837. WARNING: If you want to "set header elements" (such as cookies)
  838.          by using server side includes (i.e.; by using INTERPRET
  839.          keyphrases), then you MUST set DO_SEND_PIECE='NO'
  840.  
  841. (DO_SEND_PIECE can be host specific)
  842.  
  843. ********
  844. DO_HTACCESS: Controls whether the HTACCESS method is used.
  845.  
  846. To provide compatability with HTTPD style servers (such as Don Meyer's
  847. GOHTTP), SRE-Filter supports the HTACCESS method of access control
  848. (see the description of HTACCESS_FILE in INITIFLT.DOC for details).
  849.  
  850. DO_HTACCESS can take two values
  851.    YES:   Enable support of the HTACCESS access control method
  852.    NO:    Do NOT support HTACCESS.
  853.  
  854.   Example:  DO_HTACCESS='YES'
  855.  
  856.  
  857. When DO_HTACCESS='YES', SRE-Filter will check for an HTACCESS file
  858. in the directory (and parent directories) of the requested file.
  859. Note that this control is by "file name", rather then by request selector.
  860.  
  861. Details on HTACCESS files are in the description of the
  862. HTACCESS_FILE variable.
  863.  
  864. Details concerning the use of the HTACCESS method can be found at:
  865.   http://w3.ag.uiuc.edu/DLM/GoHTTP/htaccess.html
  866.  
  867.  
  868. (DO_HTACCESS can be host specific).
  869.  
  870.  
  871. *********
  872. FIX_EXPIRE:  For fixing the GoServe automatic response header.
  873.  
  874. For certain responses; when FIX_EXPIRE > 0 , instead of returning
  875. the default GoServe response headers, SRE-Filter will generate it's own.
  876. In particular, it will add FIX_EXPIRE "fractions of a day" to the
  877. current date/time, and use it as the File-Expires date.
  878.  
  879. FIX_EXPIRE is used whenever a server-side include containing HTML
  880. document is being returned.  It is also use by several SRE-Filter
  881. add-ons (such as by GETAFILE and DOSEARCH), and by CGI-BIN programs.
  882. To use it in a custom REXX program, see the description of SREF_FIX_EXPIRE
  883. in SREFPRC1.DOC  (SREFPRC1.DOC is available from
  884. http://rpbcam.econ.ag.gov/srefilter/srefprc1.doc).
  885.  
  886. Note that if FIX_EXPIRE=0, the default GoServe response
  887. headers will be used --plus any headers that may have been specified
  888. using the META and LINK elements in the HEAD (see AUTO_HEADER).
  889.  
  890. Setting FIX_EXPIRE > 0 can be useful when relatively static (that do not
  891. depend on the current "hour") server side includes are performed.
  892. In such cases, GoServe automatically sets the expiration time to be
  893. the current moment.  This can be a hassle for some clients (Netscape
  894. will reload such "expired" documents if "backed up" to).
  895.  
  896. Note that a value of FIX_EXPIRE=0.1 = .1 * 24 hours = 2.4 hours.
  897. Also note that to use DO_SEND_PIECE, you must set FIX_EXPIRE=0
  898.  
  899. Example: FIX_EXPIRE=0
  900.  
  901. (FIX_EXPIRE can  be host specific)
  902.  
  903. Alternative method of suppressing "immediate expire":
  904.   *  When creating REXX server side programs, you can avoid this
  905.      problem by using 'FILE TYPE ... NAME TEMPFILE ' rather then
  906.      'FILE ERASE TYPE ... NAME TEMPFILE ' -- the "expire immediately"
  907.      response header is NOT added to non 'FILE ERASE' completion codes.
  908.         However, you should remember to delete your TEMPFILE (use the
  909.         sysfiledelete rexx procedure).
  910.         ... furthermore, you may want the document to expire in a few hours,
  911.             a message FIX_EXPIRE is designed to deliver.
  912.  *   If you are using GoServe ver 2.50, the HEADER NOTIME option can be used.
  913.                 SPECIAL OPTION: If you are useing GoServe 2.50, setting
  914.                 FIX_EXPIRE=1000 will invoke this HEADER NOTIME option.
  915.  
  916.  
  917. **********
  918. HEADERS and FOOTERS: Automatically added to all HTML documents.
  919.     You can specify a block of HTML code to include at the beginning and the
  920.     end of the body of the document.  This is done by specifying HEADERS.n
  921.     (n=1...) and FOOTERS.n
  922.     To suppress this, set HEADERS.1=0 and/or FOOTERS.1=0
  923.  
  924.     Notes:
  925.         * HEADERS.n lines are written (consecutively) just after the first
  926.           <BODY> phrase in your document (see example 3 below for an exception
  927.           to thisrule)
  928.         * FOOTERS.n lines are written just before the last </BODY> phrase
  929.           in your document.
  930.  
  931. Examples:
  932.  
  933.   1) Simple case:
  934.      HEADERS.1=' <em> Our docuuments are supplied as-is </em> <p>'
  935.      FOOTERS.1=' <p> <strong> goodbye  </strong> '
  936.  
  937.   2)To suppress headers and footers
  938.      HEADERS.1=0
  939.      FOOTERS.1=0
  940.  
  941.   3) The "exception":
  942.     Headers.1='<BODY bgcolor="#5500aa"> <h1> This is our site! </h1> '
  943.  
  944.         Whenever the HEADERS.1 lines begins with <BODY, then
  945.         rather then writing the header AFTER the first <BODY ...> element,
  946.         the header will replace the first <BODY ..> element.
  947.  
  948.  
  949. HEADERS and FOOTERS can be host specific.
  950.   For example:
  951.       HEADERS.1.ZOO = ' <B> The ZOO server </b> '
  952.       HEADERS1.1.CIRCUS = '  <em> The Circus Site </em>
  953.       HEADERS.2.ZOO=0
  954.       HEADERS.2.CIRCUS=0
  955.  
  956.   will set up a one-line header for the ZOO and for the  CIRCUS "hosts".
  957.  
  958. *************
  959. HOME_DIR: The "home directory" -- used as a text replacement whenever a ~
  960.           is encountered in a request selector.
  961.  
  962. A typical value of this would be "Users/".
  963.  
  964.   Example: HOME_DIR='USERS/'
  965.  
  966. (HOME_DIR can be host specific)
  967.  
  968. ADVANCED OPTION: Specifying User Subdirectories
  969.   In many cases, you may wish clients to have access to particular
  970.    subdirectories of your "Users" directories.  For example, all
  971.    "students" may have space on the server machine, some of which
  972.    is used for web, and some for "personal" purposes. The goal is to
  973.    give clients direct access to the "web" related directories
  974.    but not to the "personal" directories.
  975.  
  976.    This can be achieved by including a $ in the HOME_DIR parameter.
  977.    Specifically, the $ is replaced by the substring between the  ~ and the
  978.    first / following the ~.
  979.  
  980.    For example:,
  981.      If the  HOME_DIR=USERS/$/WWW
  982.         and the request selector is /~GERALD/RESUME.HTM
  983.      Then SRE-Filter will use:
  984.         /USERS/GERALD/WWW/RESUME.HTM
  985.    Summarizing, given a $ in the HOME_DIR.
  986.      1) SRE-Filter reads the substring (of the request selector) between ~ and
  987.         the first / following the ~ (i.e.; GERALD)
  988.      2) The substring is deleted from the request selector
  989.      3) The $ in the HOME_DIR is replaced with this substring (from step 1)
  990.      4) The ~ in the modified request selector (from step 2) is replaced with
  991.         the modified HOME_DIR (from step 3)
  992.  
  993.  
  994. NOTES:
  995.  
  996.  * If there is no $ in the HOME_DIR, a simple HOME_DIR for ~
  997.    replacement is done. For example, if HOME_DIR=USERS/and the
  998.    request selector is /~GERALD/RESUME.HTM, the result would be
  999.    /USERS/GERALD/RESUME.HTM
  1000.  
  1001.  * If a / immediately follows the ~ (in the request selector), the $ is
  1002.    removed from HOME_DIR (without replacement).
  1003.  
  1004.  * HOME_DIR substitution occurs BEFORE virtual file lookup and AUTO_NAME
  1005.    construction, but after ALIAS conversion.  Thus, the ~ can point to a
  1006.    virtual directory (or a subdirectory of a virtual directory).
  1007.  
  1008.  * HOME_DIR for ~ substitution is also used when resolving filenames
  1009.    requested in server side includes.
  1010.  
  1011.  * CAUTION: Since HOME_DIR is used in a direct textual substitution, only
  1012.             a mild degree of syntax checking  is attempted. In particular,
  1013.             // are  converted to /.  To be safe, be sure your use of ~ is
  1014.             internally consistent.
  1015.  
  1016.  
  1017. **************
  1018. HOSTS. :  Stem variable containing information on multiple hosts.
  1019.  
  1020. The HOSTS. stem variable(s) is used to define the multiple hosts
  1021. (IP addresses) your server will recognize.
  1022.  
  1023. Each HOSTS. entry should contain the following comma-delimited information:
  1024.     IP_address, host_nickname, default_dir
  1025.  
  1026. Where:
  1027.     IP_address is the IP address (numeric or character) of the host.
  1028.                 You should use the full name -- do not use a "local
  1029.                 abbreviation" (that is, don't use bill as a shorthand
  1030.                 for bill.my.org; even though your local dns may recognize it)
  1031.     host_nickname is the "nickname" that you will use to refer to this host.
  1032.                 It MUST NOT be a number -- that is, it must contain
  1033.                 a non-numeric character. Thus, 234 is invalid, but
  1034.                 N234 is okay.
  1035.     default_directory is the default data directory for this host
  1036.  
  1037. Examples:
  1038.     hosts.1="dh.ag.gov , MY1 , e:\WWW1  "
  1039.     hosts.2=" 151.122.33.6 ,  H20 ,e:\www2  "
  1040.     hosts.3=0
  1041.  
  1042.   If you do NOT have multiple hosts, set hosts.1=0
  1043.   Note that we recommend that the last hosts. value = 0.
  1044.  
  1045. A Caution on Using IP Aliases:  IP aliases offer a convenient means of
  1046. setting up multiple hosts (IP names) while only using one numeric ip address.
  1047. Unfortunately, use of IP name aliases requires browsers that understand
  1048. HTTP/1.1; specifically, that send the HOST: request header with each request.
  1049. Although NetScape (2.0+) will do this, most older browsers will not!
  1050. In these cases, SRE-Filter will use the numeric IP address (that is, it will
  1051. use the "canonical name" for the IP address, rather then the desired alias).
  1052.  
  1053. Note: When using multiple hosts, you can specify many of SRE-Filter's
  1054. parameters, both here and in the various .IN, .CNT, and .CTL files,
  1055. to be "host specific".
  1056.  
  1057.  
  1058. For obvious reasons, HOSTS can NEVER be host specific!
  1059.  
  1060.  
  1061. ****************
  1062. HIT_CACHE_LEN and HIT_CACHE_DURATION:  Used to limit false hits.
  1063.  
  1064. To reduce the number of "false hits" (from clients returning to
  1065. your document after a short absence, which is often caused by the
  1066. use of a browser's "back" button), a current hits list can be
  1067. maintained.  If a request matches a request in this list (where
  1068. the request selector and the client's IP address are both used),
  1069. the "count of hits" will not be augmented.  Specifically,
  1070. the COUNTER_FILE and the RECORD_ALL_FILE will not be augmented.
  1071.  
  1072. There are two methods of storing these current hits: in the
  1073. SRE-Filter's "storage" thread, or in a "file":
  1074.  
  1075. 1) The SRE-Filter's "storage thread". 
  1076.    To specify this, set HIT_CACHE_LEN to the number of entries you wish to set
  1077.    aside.  For example:
  1078.          HIT_CACHE_LEN=1000
  1079.  
  1080. 2) File.  Not as fast, but probably safer if you are storing a lot of hits.
  1081.    To specify this, set:
  1082.          HIT_CACHE_LEN='FILE'
  1083.    A special file in the TEMP/ subdirectory of the GoServe "working"
  1084.    directory, with the name _HITCACH.80 (or .nnn if nnn is your serverport)
  1085.    is created and used to store recent hits.
  1086.  
  1087.     Each selector/client pair will be retained for HIT_CACHE_DURATION minutes.
  1088.     Note that "overflow" will NOT occur, but the _HITCACH.80 file may
  1089.     become large.  Since "expired" entries are removed, only in rare
  1090.     circumstances (extremely heavy load, or when HIT_CACHE_DURATION is
  1091.     very large), will the file size become problemmatic.
  1092.  
  1093.  
  1094. To turn of this feature, set HIT_CACHE_LEN=0
  1095.  
  1096.  
  1097. Example:
  1098.    HIT_CACHE_LEN=500
  1099.    HIT_CACHE_DURATION=5
  1100.  
  1101.    HIT_CACHE_LEN='FILE'
  1102.    HIT_CACHE_DURATION=20
  1103.  
  1104. Notes:
  1105.  
  1106.  * In general, we no longer recommend use of HIT_CACHE_LEN='FILE'
  1107.  
  1108.  * If you are using the FILE mode, a limit of 10,000 entries is imposed.
  1109.  
  1110.  * HIT_CACHE_LEN and HIT_CACHE_DURATION can NOT be host specific.
  1111.  
  1112.  
  1113.  
  1114.  
  1115. *****************
  1116. HIT_OWNER_SUPPRESS: Used to suppress hit recording from "OWNERS"
  1117.  
  1118.     Switch to turn off and on the "suppresion of OWNER request"
  1119.        HIT_OWNER_SUPPRESS='YES'
  1120.            Do not record (in the COUNTER_FILE or RECORD_ALL_FILE)
  1121.            any request from an OWNERS.
  1122.        HIT_OWNER_SUPPRESS='NO'
  1123.             Requests from OWNERS are recorded.
  1124.  
  1125. This is provided to limit the number of false hits attributable to
  1126. site-maintenance operations (say, from the Webmaster monitoring
  1127. her own site).
  1128.  
  1129. Example:
  1130.         HIT_OWNER_SUPPRESS='YES'
  1131.  
  1132. Note: the HIT_SUPERUSER_SUPPRESS variable (set in srefiltr.80)
  1133.       can be used to extend the "range" of HIT_OWNER_SUPPRESS to
  1134.      include SUPERUSERS.
  1135.  
  1136. ***************
  1137. HOME_NAME  : The name of your organization
  1138.   The colloquial (not necessarily IP name) of your organization.
  1139.   This can be included in a document by using the REPLACE HOME_NAME
  1140.   keyphrase.  Note it's use in NOT_FOUND_URL.
  1141.  
  1142.     home_name="DIVISION/AGENCY/DEPARTMENT/GOV"
  1143.  
  1144. (HOME_NAME can be host specific)
  1145.  
  1146. *******
  1147. HTACCESS_FILE : The name of the HTACCESS file.
  1148.  
  1149. When DO_HTACCESS='YES', SRE-Filter will look in the "requested file's"
  1150. directory (and it's parent's directory) for file(s) with the name
  1151. given by HTACCESS_FILE.  Typically, this is HTACCESS. or .HTACCESS,
  1152. but you can use any name you want (but do NOT include path information).
  1153.  
  1154.  
  1155.   Example:  HTACCESS_FILE='HTACCESS.'
  1156.  
  1157.  
  1158. (HTACCESS_FILE can be host specific)
  1159.  
  1160.  
  1161. Hint: The HTACCESS_FILE contains access control information, as well as
  1162. URL redirection and "default index" information.  To use the URL
  1163. redirection, you should set up a file containing entries of the form:
  1164.     old_url  :  new_url
  1165. i.e.
  1166.     PLANET/JUPITER.HTM   :  http://www.starts.edu/ss/n5.htm
  1167. (note the old_url should not contain http://, and should not contain
  1168. the dot address)
  1169.  
  1170. (HTACCESS_FILE can be host specific)
  1171.  
  1172. *******
  1173. INHOUSEIPS. : Stem variable containing IP address of "in-house" clients.
  1174.   You can specify any number of "in-house IP domains".
  1175.     Just specify the 4 elements --
  1176.          you can use * for "all" (say * in  111.222.33.*)
  1177.  
  1178.     If Logon controls are desired, then clients with these
  1179.     IP addresses are automatically given access (they don't need to
  1180.     provide a username and password).
  1181.  
  1182.     In addition, you can specify extra privileges for each inhouseips. entry.
  1183.  
  1184.  
  1185. Examples:
  1186.        inhouseips.1="151.121.64.* VIEWMESS CONTROL "
  1187.        inhouseips.2="JOE.USDA.GOV   "
  1188.        inhouseips.3=0
  1189.        (All clients from 151.121.64.xxx are given VIEWMESS and CONTROL
  1190.         privileges, in addition to the privileges contained in the
  1191.         INHOUSE_PRIVS variable)
  1192.  
  1193. Notes:
  1194.  *  If you do NOT want to identify "in-house" clients, set inhouseips.1=0
  1195.  
  1196.  *  Note that we recommend that the last inhouseips. value = 0.
  1197.  
  1198.  *  INHOUSEIPS. can be host specific.
  1199.  
  1200.                       ************** CAUTION  **************
  1201.     In fact, non-host specific values of INHOUSEIPS will NOT be used
  1202.     as "default" values!
  1203.                       ************** CAUTION  **************
  1204.  
  1205.     For example:
  1206.         inhouseips.1='BUYER.STORE.COM'
  1207.         inhouseips.1.candy='MANAGER.STORE.COM  CONTROL '
  1208.     indicates that requests from MANAGER.STORE.COM to the "host"
  1209.     with a nickname of CANDY should be treated as an "in-House"
  1210.     request (note that if no HOSTS. are specified, this entry
  1211.     will never be used). However, requests from BUYER.STORE.COM wo
  1212.     this CANDY host will NOT be treated as an INHOUSEIPS.
  1213.  
  1214.  
  1215.  
  1216. *******
  1217. INHOUSE. and SUPERUSERS.
  1218.      The following are special variables used with the INHOUSE.n
  1219.       and SUPERUSER.n replacement selector (see decripition of the REPLACE
  1220.       keyphrase).  They will be displayed only for
  1221.       "inhouse" and "superusers", respectively.
  1222.       Note that INHOUSE.n variables correspond to INHOUSE.n replacement
  1223.       strings, and SUPERUSER.n variables correspond to SUPERUSER.n
  1224.       replacement  strings.
  1225.  
  1226. Examples:
  1227.    inhouse.1=" (Staff Version) "
  1228.    inhouse.2=' .. more staff stuff '
  1229.    superuser.1="(Super User)"
  1230.    inhouse.3=0
  1231.    superuser.2=0
  1232.  
  1233. We recommend that the last inhouse. and superuser. should equal 0.
  1234.  
  1235. Note that inhouse. and superuser. can be host-specific; i.e.:
  1236. INHOUSE.1.CANDY='Special this week: Chocolate'
  1237.  
  1238.  
  1239. **************
  1240. INHOUSE_PRIVS: Privileges for IN-HOUSE clients.
  1241.  
  1242.   A space delimited list of  privileges to be granted to OWNERS and
  1243.   IN-HOUSE clients. It is HIGHLY recommended that INHOUSE_PRIVS always contain
  1244.   INHOUSE as one of the privileges!
  1245.  
  1246.   Example: inhouse_privs=" INHOUSE SECRET1 "
  1247.  
  1248.   Note that INHOUSE_PRIVS can be host specific.
  1249.     For example: INHOUSE_PRIVS.ZOO=' INHOUSE  SCHEDULES '
  1250.  
  1251.  
  1252. ********
  1253. INTERPRET_TYPES: Associate an extension with a CGI-BIN script processor
  1254.  
  1255. SRE-Filter can use "non-REXX" processors to interpert CGI-BIN scripts.
  1256. To do this, you must tell SRE-Filter which processor to associate
  1257. with a file extension; where the file extension appears on the
  1258. "scriptname" (that follows the CGI-BIN/ portion of the request
  1259. selector).
  1260.  
  1261. This "association" is accomplished with the INTERPRET_TYPES parameter.
  1262. INTERPRET_TYPES should be a space delimited string of "type_options".
  1263. Each type_option should have the form:
  1264.     EXT=Interpreter_invocation
  1265. For example:
  1266.   interpret_types=' PL=PERL5 FOO=D:\FAKEIT\FOOEXEC '
  1267.  
  1268.    The first type_option (PL=PERL5) instructs SRE-Filter to use the PERL5
  1269.    program to interpret all CGI-BIN scripts with a .PL extension
  1270.    (this example assumes that PERL5 can be found in the OS/2 PATH).
  1271.  
  1272.    The second type_option (FOO=D:\FAKEIT\FOOEXEC) instructs SRE-Filter to use
  1273.    D:\FAKEIT\FOOEXEC to interpret CGI-BIN scripts with .FOO extensions.
  1274.    Note that a fully  qualified name is used for this "FOO interpreter".
  1275.  
  1276. Of particular interest is the use of one of the OS/2 PERL interpreters;
  1277. since there is a slew of PERL scripts out there.  It's not that
  1278. hard to obtain a PERL interpreter -- see PERL.DOC for details
  1279. on one we've had some success with.
  1280.  
  1281. Note: by default, INTERPRET_TYPES=' PL=PERL5 '
  1282.  
  1283.  
  1284. (INTERPRET_TYPES can NOT be host specific!)
  1285.  
  1286. ********
  1287. KEEP_ADDONS.n
  1288.  
  1289. To speed up processing of commonly used SRE-Filter addons (i.e.; STATUS.CMD),
  1290. you can tell SRE-Filter to "load an add-on into macrospace" (procedures
  1291. load more quickly when they are placed into macrospace).  To do this,
  1292. you need to specify KEEP_ADDONS. entries.  
  1293.  
  1294. KEEP_ADDONS.0 should equal the number of entries, and KEEP_ADDONS.n
  1295. (n=1 .. KEEP_ADDONS.0) should contain the entries (note that this
  1296. is a different syntax from INHOUSEIPS. and other stem variables).
  1297. Each KEEP_ADDONS.n (n>0) entry should have the form:
  1298.    KEEP_ADDONS.n=' SEL  FULLY_QUALIFIED_FILE'
  1299.  
  1300. For example:
  1301.    keep_addons.0=2
  1302.    keep_addons.1='STATUS  G:\GOSERVE\ADDON\STATUS.CMD '
  1303.    keep_addons.2='NUSTATUS G:\GOSERVE\ADDON\NUSTATUS.CMD '
  1304.  
  1305. Notes:
  1306.    * the SEL is compared to the requested selector AFTER possible
  1307.      "alias" modifications. 
  1308.    * you don't need to include a leading /
  1309.  
  1310.    * keep_addons. entries are updated along with the SRE-Filter variables.
  1311.      Thus, if you change an internal parameter in an addon, it might
  1312.      take a while for the change to take effect (or, you can "touch"
  1313.      INITFILT.80 to signal SRE-Filter to "update parameters immediately").
  1314.  
  1315.      IF YOU MUST HAVE AN ADDON BE QUICKLY RESPONSIVE TO CHANGES IN
  1316.      HARD-CODED PARAMETERS, DO NOT SPECIFY IT IN A KEEP_ADDONS. ENTRY!
  1317.  
  1318.    * Errors in KEEP_ADDONS. entries are not fatal -- bad entries are ignored.
  1319.    * If you do NOT specify a FULLY_QUALIFIED_FILE, then SRE-Filter will
  1320.      attempt to drop the macrospace procedure associated with the SEL (if no
  1321.      such procedure exists, it is ignored).  This allows you to selectively
  1322.      purge macrospace of "addon" procedures.  For example, inclusion of:
  1323.          Keep_addon.3='DO_ONCE   '
  1324.      tell SRE-Filter to "remove the DO_ONCE program from macrospace"
  1325.      (with no ill consequence if it's not there).
  1326.  
  1327.    * Addons that are referenced by a keep_addons. entry can be invoked using
  1328.      the !RUN special directive.  When  !RUN is used SRE-Filter will
  1329.      immediately call the macrospace version of the addon, and not bother
  1330.      with some unnecessary housekeeping.
  1331.          Example:  <a href="/!RUN/gif_text?font=hobo&mess="Hello">
  1332.      
  1333.       Caution: IF you use !RUN, the addon MUST issue the GoServe completion code
  1334.                (some older addons returned a completion code for SRE-Filter to 
  1335.                 issue).
  1336.  
  1337. KEEP_ADDONS. is NOT Host specific.
  1338.  
  1339.  
  1340. ********
  1341. LOGON_FAIL_FILE
  1342.  
  1343. If a logon failure occurs (either due to an incorrect username/password,
  1344. or due to logon_limit being violated), SRE-Filter can
  1345. either send a "401 Unauthorized" response; or the contents of
  1346. the LOGON_FAIL_FILE.
  1347.  
  1348. If LOGON_FAIL_FILE=0, then a "401 Unauthorized" response is sent.
  1349.  
  1350. Otherwise, the LOGON_FAIL_FILE is sent as is; with a few substitutions:
  1351.     <!--#URL--> phrases are substituted with the request selector.
  1352.     <!--#SERVER--> phrases are substituted with the servername.
  1353.     <!-- #WEBMASTER --> phrases are substituted with the WEBMASTER variable.
  1354.     <!-- #MESSAGE --> phrases are substituted with a short description
  1355.                      of the reason for failure
  1356.     <!-- #LINK --> phrases are substituted with a link back to this URL.
  1357.  
  1358. Examples:
  1359.    LOGON_FAIL_FILE=0
  1360.    LOGON_FAIL_FILE='D:\GOSERVE\LOGFAIL.HTM'
  1361.  
  1362.  
  1363. Notes:
  1364.    *  LOGON_FAIL_FILE should be a fully qualified file name.
  1365.    *  If the LOGON_FAIL_FILE is unavailable, a "401 Unauthorized" response is
  1366.       sent.
  1367.    *  When using #LINK, you probably should advice the client to "wait a
  1368.       minute before trying again" (given that the problem might be
  1369.       due to logon_limit being exceeded).
  1370.  
  1371.    *  Reminder: the LOGON_FAIL_FILE is used when the client
  1372.       fails a "generic" logon (that is, she does not have a valid
  1373.       username and password).  In contrast, the ACCESS_FAIL_FILE
  1374.       is used when the client does not have sufficient "client privileges".
  1375.  
  1376. (LOGON_FAIL_FILE can be host specific)
  1377.  
  1378. *****************
  1379. MAX_POINTDIST : Used with the POINT type in mappable images.
  1380.  
  1381. Max_pointdist is used with mappable images.
  1382.  
  1383.     The "point" area is one of the 4 types of areas (circle, rectangles,
  1384.     polygons, points) used in selecting a URL from a mappable image.
  1385.     If a selected pixel does not lie in one of the first 3, or does not
  1386.     lie directly on top of a point; SRE-Filter determines to which (of
  1387.     the many possible different points that may appear in the map file)
  1388.     the selected pixel is closest to.  However, if the distance to this
  1389.     closest point is greater then max_pointdist, then the Default URL is used.
  1390.  
  1391. Thus, this  limits the region of space "potentially assigned" to each point.
  1392.  
  1393.    Of course, setting max_pointdist to be very high (say, 100000),
  1394.    will effectively cancel this limit.
  1395.  
  1396.   Example: max_pointdist=50
  1397.  
  1398. (MAX_POINTDIST can be host specific)
  1399.  
  1400. *************
  1401. NO_PROCESSING:  Suppress server side processing
  1402.  
  1403. Switch to dictate whether or not to allow server side processing.
  1404.         YES - Do NOT do  allow server side processing
  1405.             If YES, then requests for server side processing will cause
  1406.             a 401 Unauthorized message to be returned to the client.
  1407.         NO -  Allow server side processing.
  1408.  
  1409. Note: A NO_SSP permission (in the access_file), overrides a NO_PROCESSING='NO'.
  1410.  
  1411.   Example: no_processing="NO"
  1412.  
  1413. (NO_PROCESSING   can be host specific)
  1414.  
  1415. ************
  1416. NO_INTERPRET_CODE:  Suppress execution of "in-document" executables.
  1417.  
  1418. This is similar to NO_PROCESSING, but not as stringent -- it only applies
  1419. to the SELECT and INTERPRET CODE "server side include" keyphrases.
  1420.        YES-  Ignore SELECT and INTERPRET CODE server side include keyphrases.
  1421.        NO -  Process SELECT and INTERPRET CODE server side include keyphrases.
  1422. Note that NO_PROCESSING (and NO_SSP) have precedence -- if NO_PROCESSING is
  1423. on, the value of NO_INTERPRET_CODE is irrelevant.
  1424.  
  1425. Notes:
  1426.    *  A NO_CODE permission (in the access_file) overrides a
  1427.       NO_INTERPRET_CODE='NO'
  1428.  
  1429.    *  CGI-BIN scripts, INTERPRET FILE, and other "executed files" WILL
  1430.       be processed if NO_INTERPRET_CODE='YES' (assuming NO_PROCESSING, etc.
  1431.       is not binding).
  1432.       Hence:If NO_INTERPRET_CODE='YES', you can still use an equivalent
  1433.             INTERPRET FILE keyphrase.
  1434.  
  1435.    *  The idea is that users of your site will not be able to cause trouble
  1436.       by including ill-mannered code into their HTML documents.
  1437.       In other words:
  1438.           i) If  site administrators do not want to review HTML documents
  1439.              posted on their site (say, by students)
  1440.          ii) Site adminstrators will review  CGI-BIN scripts, etc. that these
  1441.              "students" wish to place on the server.
  1442.         iii) Site administrators DO want to grant server side processing
  1443.              and server side include privileges to clients.
  1444.       Then, a reasonable level of security, without too harshly limiting
  1445.       flexibility  can be achieved by setting NO_INTERPRET_CODE
  1446.       (or by judicious use of the NO_CODE permission).
  1447.  
  1448.  
  1449.    Example:  no_interpret_code='NO'
  1450.  
  1451. (NO_INTERPRET_CODE can be host specific)
  1452.  
  1453. ************
  1454. NO_INCLUDE:  Suppress server side includes.
  1455.  
  1456. Switch to dictate whether or not to process server side includes (SSIs).
  1457.     YES : Do NOT do dynamic page processing.
  1458.           Files sent as is (if SSI keyphrases occur, they will be sent "as is"
  1459.      NO :  Process server side includes.
  1460.  
  1461. If you  NEVER include SSI keyphrases, and you want to speed
  1462. up processing a bit, set NO_INCLUDE="YES"
  1463.  
  1464. Note: A NO_SSI permission (in the access_file), overrides  NO_INCLUDE=NO.
  1465.  
  1466.   Example: no_include="NO"
  1467.  
  1468. (NO_INCLUDE  can be host specific)
  1469.  
  1470. **********
  1471. NOEXT_TYPE: Determine how to handle "no extension" request selectors.
  1472.  
  1473. NOEXT_TYPE is used to instruct SRE-Filter what to do with requests that
  1474. have no extension, do not end in a /, and do not have ? in them.  There are
  1475. several allowed values of NOEXT_TYPE:
  1476.  
  1477.     DIR : Interpret as a directory; a / is appended to the end, and
  1478.           AUTO_NAME is then used.
  1479.   REDIR : Similar to DIR (a / is appended).  However, rather then immediately
  1480.           using AUTO_NAME; the client is "redirected" back to this new (/ appended)
  1481.           URL (at which time the AUTO_NAME feature kicks in).  This solves
  1482.           potential "resolution of local URL" problems, at the cost of slower
  1483.           overall response times. Note that REDIR is the default value.
  1484.   HTM or HTML : Interpret as an HTML file (a .HTM or .HTML is appended to
  1485.                 the end, respectively)
  1486.    NONE :  Use as is
  1487.   other_string: Append other_string.  For example, if NOEXT_TYPE='.GIF',
  1488.                 then .GIF will be appended to the end).
  1489.  
  1490.  Example: NOEXT_TYPE="DIR"
  1491.  
  1492. (NOEXT_TYPE   can be host specific)
  1493.  
  1494. CAUTION # 1: If you use DIR; then be aware that Access Control entries of the 
  1495.              form  
  1496.                 SECRETS/*
  1497.              will not match selectors of the form
  1498.                 SECRETS.
  1499.              This will cause a small security hole.  Hence, if security is
  1500.              a concern, we recommend the use of REDIR.
  1501.  
  1502. CAUTION #2: When using NOEXT_TYPE (and other types of local redirection)
  1503. URL resolution by the client's browser may have unexpected consequences.
  1504. See the discussion of "local  vs remote redirection" at the bottom of
  1505. this document for details!
  1506.  
  1507. ***************
  1508. NOT_FOUND_URL : A message if the requested resource is not found.
  1509.  
  1510. This string is sent along with a generic "not found url" response.
  1511. Note that it should be a valid HTML string.
  1512. Set it to  " " if you want no such message sent.
  1513.  
  1514.   Example: not_found_url='<a href="/"> Visit the HOME_NAME page? </a> '
  1515.  
  1516. Note that the HOME_NAME substring will be replaced with the current
  1517. value of the HOME_NAME variable.
  1518.  
  1519.  
  1520. !!! Special option !!!
  1521.    If you want to return a custom document, perhaps one that lists
  1522.    several choices, you should use a special form of NOT_FOUND_URL.
  1523.    Specifically:
  1524.         NOT_FOUND_URL= 'FILE=fully_qualified_file_name'
  1525.    For example:
  1526.         NOT_FOUND_URL= 'FILE=d:\www\notfound.htm'
  1527.  
  1528.    If you are very ambitious, you can also append a custom "reponse code".
  1529.    For example:
  1530.         NOT_FOUND_URL= 'FILE=d:\www\notfound.htm, 200 Ok with error '
  1531.         (note the comma follwing the file name)
  1532.  
  1533.   The returned document will NOT have server side includes -- it is sent
  1534.   "as is".  There are a few special exception to this rule (for HTML
  1535.    documents):
  1536.        i) all occurences of <!-- #URL --> will be replaced with the
  1537.           request selector.
  1538.       ii) all occurences of <!-- #SERVER --> will be replaced with the
  1539.           server's IP address.
  1540.  
  1541.   More notes on the FILE= variant of NOT_FOUND_URL:
  1542.      * You can specify any type of document (i.e.; an HTML file, a GIF file,
  1543.      or a plain/text file).
  1544.      * An fully qualified file is expected: no attempt is made to map a
  1545.        relative file name to the data directory.
  1546.      * The file can be anywhere (it need not be in the data directory,
  1547.      or in virtual directories).
  1548.  
  1549.  
  1550. NOT_FOUND_URL can be host specific (and HOME_NAME can also
  1551. be host specific).
  1552.  
  1553.  
  1554. *********
  1555. OPTION_HIT_LINE : Used to write OPTION  info instead of counts
  1556.  
  1557. OPTION_HIT_LINE is used  to write out "# hits drawn from an OPTION
  1558. passed to me" -- that is, it used with the REPLACE OPTION_HITS keyphrase
  1559.  
  1560.   Example: OPTION_Hit_line=":: still access # "
  1561.  
  1562. Note: OPTION_HIT_LINE is somewhat obsolete -- it's major purpose is
  1563.       now better accomplished by using the HIT_CACHE_LEN parameter
  1564.  
  1565. (OPTION_HIT_LINE can be host specific)
  1566.  
  1567.  
  1568. *************************
  1569. OWNERS: Assigned SUPERUSER privileges
  1570.  
  1571. Owners are always given SUPERUSER privileges.
  1572. You can specify any number of owners, just seperate each of them
  1573. with a space. Note that wildcards are NOT allowed.  Furthermore,
  1574. you must specify an IP address (not an IP name).
  1575.  
  1576.     If there are no owners, set owners=0.
  1577.  
  1578.  Example: owners   = " 151.121.65.163 "
  1579.  
  1580. (OWNERS  can be host specific).
  1581.  
  1582.  
  1583. ************
  1584. PRE_FILTER: Call  user written pre-filters.
  1585.  
  1586. PRE_FILTER is used to control whether a set of user written "pre-filter" is
  1587. called before SRE-Filter is given control.  It can take 3 values:
  1588.  NO:  Do not call a pre-filter.
  1589.  YES: Call a pre-filter after checking logon privileges (if the client
  1590.       does not have logon rights, the pre-filter will not be called)
  1591.  FIRST:  Call a pre-filter as the first action (before checking logon rights)
  1592.  
  1593. Note: if the selector matches a public_url, then:
  1594.         > If PRE_FILTER=FIRST, then the pre filter will be called
  1595.         > Otherwise, it will NOT be called (that is, PRE_FILTER="YES" is
  1596.           treated as a NO.)
  1597.  
  1598.  
  1599. Example: PRE_FILTER="FIRST"
  1600.  
  1601. (PRE_FILTER  can be host specific)
  1602.  
  1603. ************
  1604. PREFILTER_NAME: Name(s) of procedure(s) to call as pre-filter(s).
  1605. This should point to a list of external procedures (or just to a
  1606. single external procedure).  Each of them will be called in turn
  1607. (or until one of them responds to the client).  Note that these
  1608. "PREFILTER" files should be in the GoServe working directory.
  1609.  
  1610.  Examples:  PREFILTER_NAME='PREFILTR'
  1611.             PREFILTER_NAME='PREFILT1.CMD  PREFILT9.CMD '
  1612.  
  1613.  
  1614. In the first example, note that a .80 (or .nnn if using port nnn) is added to
  1615. PREFILTR.
  1616.  
  1617. (PREFILTER_NAME  can be host specific)
  1618.  
  1619.  
  1620. ************
  1621. POST_FILTER: Call  user written post-filters.
  1622.  
  1623. POST_FILTER is used to control whether one or more  user written
  1624. "post-filters " are called before SRE-Filter is given control.
  1625. It can take 2 values:
  1626.  NO:  Do not call a post-filter.
  1627.  YES: Call a pre-filter after sending response to client.
  1628.  
  1629. (POST_FILTER  can be host specific)
  1630.  
  1631.  
  1632. ************
  1633. POSTFILTER_NAME: A series of procedures to call as  post filters.
  1634.  
  1635. POSTFILTER_NAME should contain a  list (or just one) procedures that
  1636. will be called as "post filters".
  1637. As with other external procedures, the procedures should correspond
  1638. to files with  names like POSTF1.80 (they should be in the GoServe
  1639. working directory).
  1640.  
  1641. If the  POSTFILTER_NAME variable is missing, a value of  POSTFILT will be used.
  1642.  
  1643.  Examples:  POSTFILTER_NAME='POSTRCRD.80'
  1644.             POSTFILTER_NAME='POST1.CMD POSTMAIL '
  1645.  
  1646. In the second example, first POST1.CMD will be called, and then POSTMAIL --
  1647. note that a .80 (or .nnn if using port nnn) is added to a name when there is
  1648. no extension (and no final period).
  1649.  
  1650. Notes:
  1651.  *  Post-filters are called AFTER the client has recieved a response.
  1652.     Therefore, post-filters can NOT be used to modify the response.
  1653.  
  1654.  *  Certain GoServe functions are NOT available to post-filter procedures
  1655.     (see the description of the SAVE_STATE parameter for details).
  1656.  
  1657.  *  POSTFILTER_NAME can be host specific
  1658.  
  1659.  
  1660. ****************
  1661. PUBLIC_URLS.  A stem variable containing a list of publicly accessible
  1662.               server resources.
  1663.  
  1664. The basic idea is that before logon or access_controls are checked,
  1665. SRE-Filter sees if the request selector matches one of the PUBLIC_URLS.
  1666. If so, no logon, etc. checking is attempted. In a sense, the PUBLIC_URLS are
  1667. purposely placed outside of the 'protection' of SRE-Filter's various access
  1668. controls.
  1669.  
  1670. The basic structure of a PUBLC_URLS entry is:
  1671.     candidate_sel  anoption filename
  1672. where:
  1673.     candidate_sel is compared against the request selector
  1674.     anoption can be: LITERAL LITERAL_NORECORD or NORECORD
  1675.     filename is a file name (with possible * "wildcard character")
  1676. (anoption and filename are both optional)
  1677.  
  1678. When the candidate_sel matches the request selector (and the *
  1679. wildcard character may be included in the candidate_sel), SRE-Filter
  1680. will treat the request as "a request for a Public Resource".  Specifically,
  1681. when anoption and filename are not specified, this means:
  1682.     * logon checking does NOT occur
  1683.     * the ACCESS_file is NOT examined
  1684.     * local redirections (such as home_name substitution, alias lookup
  1685.       and virtual directory lookup WILL occur).
  1686.     * server side includes may be attempted on HTML documents
  1687.  
  1688. The anoption and filename option are included to provide further
  1689. flexibility.
  1690.  
  1691.  
  1692.    * If anoption=NORECORD or LITERAL_NORECORD, SRE-Filter will not
  1693.      record the request, or perform any other "post filter" action
  1694.      (for example, it will not record this request in the common-log
  1695.      audit file). This use of NORECORD and LITERAL_NORECORD can help reduce
  1696.      server load.
  1697.  
  1698.    * For "literal" PUBLIC_URLS, access permissons are not looked-up.
  1699.      Thus, if you want to suppress post-filtering you MUST use the
  1700.      LITERAL_NORECORD variant (see SREFQUIK.DOC for an exception to this).
  1701.  
  1702.    * If filename is specified (after a LITERAL or a LITERAL_NORECORD),
  1703.      then filename is used "as is" (the data directory is not used).
  1704.      Actually, if filename contains a * wildcard, the usual "wildcard
  1705.      substitution" is attempted. The use of the filename argument
  1706.      allows a limited form of "aliasing" and "non-data directory file
  1707.      transfer" (remember: the LITERAL and LITERAL_NORECORD options
  1708.      suppress both virtual directory lookup and alias checking).
  1709.  
  1710. Examples:
  1711.  
  1712.      PUBLIC_URLS.1='INDEX.HTM'
  1713.      PUBLIC_URLS.2='MAPS/* '
  1714.      PUBLIC_URLS.3='STORE/AD1.HTM  LITERAL '
  1715.      PUBLIC_URLS.4='STORE/*.GIF  NORECORD '
  1716.      PUBLIC_URLS.5='PICTURE/HELLO.GIF  LITERAL_NORECORD  D:\PICTS\HELLO.GIF'
  1717.      PUBLIC_URLS.6='FAMILY/*  LITERAL_NORECORD  D:\PERSONAL\*'
  1718.      PUBLIC_URLS.7=0
  1719.  
  1720.     The second gives access to everything in the MAPS/ directory (which
  1721.     might include imagemaps)
  1722.  
  1723.     The third specifies that STORE/AD1.HTM is to be transfered "as is",
  1724.     where STORE/ is a subdirectory of the data directory.
  1725.  
  1726.    The fourth specifies that all .GIF files in STORE/ be transfered,
  1727.    with no recording of these transfers.
  1728.  
  1729.    The fifth specifies that PICTURE/HELLO.GIF cause transfer of
  1730.    d:\picts\hello.gif "as is"; with no "recording" or "post-filtering"
  1731.    done.
  1732.  
  1733.    The sixth specifies that all requests beginning with FAMILY/
  1734.    be directly mapped to D:\PERSONAL\, and transfered "as is", without
  1735.    recording the request.  For example, a request for FAMILY/JUNE.JPG
  1736.    would result in D:\PERSONAL\JUNE.JPG being transferred.
  1737.  
  1738.   The seventh, PUBLIC_URLS.7=0, is not required, but is recommended to
  1739.   avoid possible problems should you change INITFILT.80 "on the fly"
  1740.  
  1741. Notes:
  1742.  
  1743.    * To reiterate, the request selector (sent by the client to your server) is
  1744.      examined for matches to one of the PUBLIC_URLS.  If multiple wildcard
  1745.      matches (and no exact match) occur, the "best" match is used
  1746.         The "best match " is defined as the match with the most characters
  1747.         before the * character; and in the event of ties, the most after.
  1748.  
  1749.    * The "literal public_urls"  are especially useful when you use the
  1750.      SREFQUIK variant of SRE-Filter to speed up throughput.
  1751.  
  1752.    * HTACCESS file lookup is suppressed whenever the request matches a
  1753.      PUBLIC_URLS (HTACCESS access controls, redirection, etc. will not
  1754.      be attempted).
  1755.  
  1756.    * In general, all files are assumed to be relative to the data directory
  1757.      or a virtual directory.  Note that for "literal" public_url's,
  1758.      virtual directories are NOT checked -- so all files are assumed to
  1759.      be relative to the data directory
  1760.      Reminder:  You can skip the "data directory" lookup by
  1761.                 explicitly naming the file that this PUBLIC_URL maps to.
  1762.                 You can do this simply by adding the (fully qualified) file
  1763.                 name after the LITERAL option.
  1764.                 For example:
  1765.                    PUBLIC_URLS.3='STORE/AD1.HTM  LITERAL D:\SHOP\ADS\AD_1.HTM
  1766.  
  1767.    * If you have no PUBLIC_URLS, set PUBLIC_URLS.1=0
  1768.  
  1769.    *  To illustrate use of PUBLIC_URLS, SRE-Filter is shipped with
  1770.       PUBLIC_URLS (and an ALIAS_FILE) setup  to respond to a
  1771.       PUBLIC request by listing all files in the PUBFILES/ subdirectory
  1772.       of the data directory (assuming you've created such a subdirectory).
  1773.  
  1774.    * If a request matches a PUBLIC_URLS, then:
  1775.             If PRE_FILTER=FIRST, then the pre filter will be called.
  1776.             Otherwise, it will NOT be called (that is, PRE_FILTER="YES" is
  1777.             treated as a NO).
  1778.  
  1779.    * You can specify PUBLIC_URLS on a host-specific basis.
  1780.  
  1781.                      ************** CAUTION  **************
  1782.          In fact, non-host specific values of PUBLIC_URLS will
  1783.          NOT be used as "default" values!
  1784.                      ************** CAUTION  **************
  1785.  
  1786.      To do this, append a .HOST_NICKNAME to PUBLIC_ULRS.  For example:
  1787.          PUBLIC_URLS.2.ZOO='HOURS.HTM LITERAL'
  1788.      indicates that this entry  applies to requests to the "host"
  1789.      with a host nickname of ZOO.
  1790.  
  1791.  
  1792.  
  1793. CAUTION: When using  "literal PUBLIC_URLS with fully qualified file names"
  1794. (and other types of local redirection) URL resolution by the client's
  1795. browser may have unexpected consequences. See the discussion of
  1796. "local  vs remote redirection" at the bottom of this document for details!
  1797.  
  1798.  
  1799. **************
  1800. PUBLIC_PRIVS.  Additional privileges for all clients.
  1801.  
  1802. A space delimited list of additional privileges to be granted to all
  1803. clients).
  1804. Set PUBLIC_PRIVS=" " if no additional privileges  are needed.
  1805.  
  1806.  Examples: public_privs=" PUBLIC  MESSBOX=*"
  1807.             public_privs=' PUBLIC  MESSBOX=FORUM1  MESSBOX=PUBGRP* '
  1808.  
  1809.   Notes:
  1810.  
  1811.      * PUBLIC_PRIVS are used for requests to PUBLIC_URLS.
  1812.  
  1813.      * The MESSBOX=* privilege (the SRE-Filter default) grants read/write
  1814.       access to all "message boxes" (assuming Selector and FILE specific
  1815.       access controls are NOT in place).  In contrast,  MESSBOX=FORUM1
  1816.       permits access to the FORUM1 message box. and MESSBOX=PUBGRP*
  1817.       allows access to PUBGRP01, PUBGRP02, etc.
  1818.  
  1819.      * The CONTROL privilege allows some of the special (the !xxx) commands.
  1820.  
  1821.      * The BROADCAST privilege allows the user to "broadcast" e-mail messages
  1822.        using the SRE-Filter message facility.
  1823.  
  1824.      * The VIEWMESS privilege allows a client to download a
  1825.        SRE-Filter message box file (as an alternative to using the
  1826.        FORUM facility).
  1827.  
  1828.  
  1829.  
  1830. (PUBLIC_PRIVS  can be host specific)
  1831.  
  1832. *******
  1833. RECORD_OPTION : Select whether to record all allowed requests.
  1834.  
  1835.  Used if you want to keep a running total of requests.
  1836.  
  1837.   RECORD_OPTION can take several values
  1838.         NO = Do NOT Keep track of requests
  1839.         YES = Remove argument list, and keep track of all requests.
  1840.         YES_ALL = Do not remove argument list, and keep track of all requests.
  1841.         FILE = Record using the name of the requested file (or script)
  1842.  
  1843.     If RECORD_OPTION is <> NO, results will be written to the RECORD_ALL_FILE.
  1844.  
  1845.   Example:  record_option="YES"
  1846.  
  1847.  Notes:
  1848.     * The "argument list" is the ? (and anything that follows it) in a
  1849.       request selector.
  1850.     * If you use YES_ALL or FILE, be prepared for your RECORD_ALL_FILE to
  1851.       grow quite large.
  1852.     * Note that RECORD_ALL_FILE can be hand-edited.  You may want to add
  1853.       appropriate "wildcarded" entries (such as /TEMP/*) to keep track of
  1854.       all temporary files, thereby avoiding the creation of
  1855.       lots of useless entries.
  1856.     * The RECORD_CACHE_FILE (see section 2a) is used to control caching
  1857.       of the RECORD_ALL_FILE.
  1858.     * See the WRITE_LOGS parameters for an alternative auditing mechanism
  1859.       (the common-log file).
  1860.  
  1861. (RECORD_OPTION   can be host specific)
  1862.  
  1863. ************
  1864. SMTP_GATEWAY: Domain name of an SMTP server
  1865.  
  1866. The SMTP_GATEWAY is used when e-mail messages are to be sent; as may
  1867. be attempted by MESSAGE, FORUM, and several other SRE-Filter facilties.
  1868. This should be the domain name of a SMTP mail server.
  1869.  
  1870. You can use your own server as the SMTP gateway by running SENDMAIL.
  1871.  
  1872. Example:  SMTP_GATEWAY=MAILBOX.BIG.EDU
  1873.  
  1874.  
  1875. (SMTP_GATEWAY  can be host specific)
  1876.  
  1877. ***********
  1878. SSI_CACHE_ON
  1879.  
  1880. SSI_CACHE_ON is used to enable the server side include cache (SSI-cache).
  1881.  
  1882.     NO : Turn the SSI-Cache off -- HTML document will not be cached.
  1883.    YES : Turn the SSI-Cache on.
  1884.  
  1885. The SSI-cache is used to store "compiled" versions of HTML documents that
  1886. contain server side includes.  When a request for such document arrives,
  1887. SRE-Filter will return it (perhaps with further modifications).
  1888.  
  1889.    Turning off caching is sometimes useful in highly dynamic
  1890.    environments; say, where INCLUDE files are constantly changing.
  1891.  
  1892. Example: SSI_CACHE_ON = 'YES'
  1893.  
  1894.  
  1895. Notes:
  1896.  * For further discussion of SSI-caching, please see the SSICACHE.HTM
  1897.    file.
  1898.  
  1899.  * The SSI_CACHE_SIZE variable (set in SREFILTR.80) can also be used
  1900.    to disable the SSI-Cache.
  1901.  
  1902.  
  1903. (SSI_CACHE_ON can be host specific)
  1904.  
  1905. *******
  1906. SSI_SHTML_ONLY: Process server side includes for .SHT or .SHTML files only
  1907.  
  1908. SRE-Filter can be instructed to attempt server side includes (SSIs) only on
  1909. files with a .SHT or .SHTML extension -- files with .HTM (or .HTML)
  1910. extension will NOT be checked for server side includes.  This can speed
  1911. up file transfer, but does require more care when naming html files.
  1912.  
  1913.  SSI_SHTML_ONLY : NO.  All HTML documents will be checked for SSIs.
  1914.                        Note that files with .HTM .SHT .HTML and .SHTML are
  1915.                        assumed to be html documents (more specifically,
  1916.                        mime type text/html documents).
  1917.  
  1918.  SSI_SHTML_ONLY : YES  Only .SHTM and .SHTML files are checked for SSIs.
  1919.  
  1920. Notes:
  1921.   * SSIs are NOT processed when NO_INCLUDE='NO' (or if there is no
  1922.     NO_SSI permission).
  1923.  
  1924.   * The list of "SSI capable" files can be modified to include files with
  1925.     extensions other then .SHT and .SHTML.  See the description of the
  1926.     SSI_EXTENSIONS variable (in the next section of this document) for details.
  1927.  
  1928. REMINDER: SRE-Filter  never caches files that contain SSIs (since these
  1929.             are likely to change on a per request basis).
  1930.  
  1931. (SSI_SHTML_ONLY  can be host specific)
  1932.  
  1933.  
  1934. ****************
  1935. THE_REALM: "Realm" name to use in requests for username/password.
  1936.  
  1937. This is the "realm" which client are "challenged" by --
  1938. most browsers will display this "realm" information when asking for
  1939. username/password (as when CHECKLOG<>'ALWAYS' and a non-inhouse
  1940. client comes a calling)
  1941.  
  1942.   Example:  the_realm="OUR WEB SITE"
  1943.  
  1944. Notes:
  1945.  * Note that the "SEL-specific realm"  (specified in the access file) is used
  1946.    if it's available.
  1947.    If no "SEL-specific realm" is available, the value of THE_REALM is used.
  1948.  
  1949.  * THE_REALM can be host specific.
  1950.    For example: THE_REALM.ZOO='ZOO_SITE'
  1951.  
  1952.  
  1953.  
  1954. *******
  1955. UNALLOWEDIPS : Stem variable of "disallowed" IP addresses.
  1956.  
  1957. You can specify a set of ips that are NOT allowed in (a keep out pests
  1958. option). The syntax is the same (* allowed, consecutive numbering), as
  1959. the INHOUSEIPS. variables.
  1960.  
  1961.      Note: UNALLOWEDIPS. is ALWAYS checked (even if checklog=NO) -- and if a
  1962.            match is found, no logon is requested (they can't get in)
  1963.  
  1964.      Example:   unallowedips.1 = "149.126.12.*"
  1965.                 unallowedips.2="136.12.5.212"
  1966.                 unallowedips.3=0
  1967.      Example2: unallowedips.1="*.*.*.*"
  1968.                unallowedips.2=0
  1969.                 Only OWNERS and INHOUSEIPS.n clients can get in !
  1970.      Example3 : unallowedips.1 = 0
  1971.                  means that no one is automatically excluded.
  1972.  
  1973. Notes:
  1974.     * UNALLOWEDIPS. is checked after INHOUSEIPS. and OWNERS
  1975.     *  We recommend that the last unallowedips. value = 0.
  1976.  
  1977.  
  1978. UNALLOWEDIPS. may be specified on a host-specific basis.
  1979.  
  1980.                      ************** CAUTION  **************
  1981.     In fact, non-host specific values of UNALLOWEDIPS will NOT be used
  1982.     as "default" values (see INHOUSEIPS. for details)!
  1983.                      ************** CAUTION  **************
  1984.  
  1985.  
  1986. ********
  1987. UPLOAD_MAXSIZE:  The maximum size (in Kbytes) allowed in a uploaded file.
  1988.  
  1989. Uploaded files are placed on the server when a GET_URL or a PUT_FILE
  1990. request selector is recieved.
  1991.  
  1992. Set this small (say, 20) if you don't want large files dumped onto
  1993. your machine.  Set it to 0 to disable all file uploads!
  1994.  
  1995.   Example: upload_MAXSIZE=50
  1996.  
  1997. Note:
  1998.    Uploads using the PUT http method are not limited by the UPLOAD_MAXSIZE
  1999.    variable.
  2000.  
  2001. (UPLOAD_MAXSIZE can be host specific)
  2002.  
  2003.  
  2004. ********
  2005. UPLOAD_MINFREE: Space that must remain after an upload.
  2006.  
  2007. The minimum amount of free space (in Kbytes) that must exist in the
  2008. upload_DIRECTORY's hard drive after uploading a file with GET_URL or PUT_FILE.
  2009.  
  2010. Set this large (say 100000) if you want to be certain that your
  2011. hard drive doesn't get filled up).
  2012.  
  2013.  
  2014.    Example: upload_MINFREE=25000
  2015.  
  2016. Note: if either upload_MINFREE or upload_MAXSIZE are violated, file
  2017. upload will not occur.
  2018.  
  2019. (UPLOAD_MINFREE can be host specific)
  2020.  
  2021. *******
  2022. USE_STDOUT: In "INTERPRET" keyphrases, use standard output as a means
  2023.             of writing results to a document.
  2024.  
  2025. If USE_STDOUT='YES', then INTERPRET keyphrases will have three
  2026. means of inserting data into your document:
  2027.   1) A string RETURNed (by a RETURN statement in the code block)
  2028.         or
  2029.   2a) interpret.results='some string'
  2030.   2b) All QUEUE (and PUSH) statements will be inserted (after the string stored
  2031.       in interpret.results
  2032.  
  2033. If USE_STDOUT='NO', then ONLY methods 1 or 2a are used (2b, output from
  2034. QUEUE and PUSH statements, will be ignored).
  2035.  
  2036. With USE_STDOUT='YES', INTERPRET will work similarly to the #EXEC
  2037. server side include -- except SAY generated output is NOT retained
  2038. (GoServe seems to trap SAY statements, and sends their output to the 
  2039. PMPRINTF window).
  2040.  
  2041. Hence the need to use QUEUE (or PUSH) ...
  2042.  
  2043.     Example:  USE_STDOUT='YES'
  2044.  
  2045.  
  2046. Note: INTERPRET "interprets" REXX code blocks (rather then
  2047.        call them as external procedures).  Hence, you do NOT have to
  2048.        have a RETURN in the code block (if you do, SRE-Filter will
  2049.        detect it, and use the RETURNed results; viz method 1 above).
  2050.  
  2051.  
  2052. (USE_STDOUT can be host specific)
  2053.  
  2054.  
  2055. *******
  2056. VERBOSE: Controls the extent of comments written to the Pmprintf window/
  2057.          SREFILTR.LOG file..
  2058.  
  2059. Set verbose=1  if you want a fair number of status messages written to
  2060. the pmprintf window and/or the SREFILTR.LOG file
  2061.  
  2062. Set to verbose= 0, and  only error messages and certain initialization 
  2063. messages will be displayed.
  2064.  
  2065.     Example:   verbose=0
  2066.  
  2067. (VERBOSE  can be host specific)
  2068.  
  2069. Notes: 
  2070.   *  for even more comments, set VERBOSE=2, 3 or 4.
  2071.   *  see the description of PMPRINTF_OPT for more details on how SRE-Filter
  2072.      "audits" transient messages
  2073.  
  2074.  
  2075. *********
  2076. WEBMASTER: A static variable.
  2077.  
  2078. The WEBMASTER variable is used in certain error and status messages.
  2079.  
  2080. Note: you might also want to put specify a CONTACT "REPLACEment variable"
  2081.       in the repstrgs_file file.
  2082.  
  2083.   Example: webmaster='<a href="mailto:bb1@farm.ag.gov"> Webmaster </a> '
  2084.  
  2085.  
  2086. WEBMASTER may be host specific
  2087.    (i.e.; WEBMASTER.SWEETSHOP='CANDY@SWEET.ISP.COM')
  2088.  
  2089. ********
  2090. WRITE_LOGS: Enable the common-log, browser, and referer logs.
  2091.  
  2092. The WRITE_LOGS variable is used to enable recording of all requests
  2093. toe the common-log audit file.  In addition, browser and referer information
  2094. will be written to seperate log files.
  2095.  
  2096.    YES = Enable these log files
  2097.    NO  = Do NOT record requestsion in these log files.
  2098.  
  2099.  Example: WRITE_LOGS='YES'
  2100.  
  2101. Note: For further details on the common-log, etc. log files, see
  2102.       SREFLOGS.DOC.  SREFLOGS.DOC also describes how you can
  2103.       run scheduled programs, such as the RENLOGS.CMD "log file
  2104.       renamer".
  2105.  
  2106. WRITE_LOGS may be host specific.
  2107.  
  2108.  
  2109. ********
  2110. List of files and directory identifier variables.
  2111.  
  2112. NOTE: If you change these, you MUST re-start GOSERVE!
  2113.  
  2114.    MESSBOX_DIR) Directory containing message boxes,
  2115.    MAILBOX_DIR) The in-box directory of an SMTP server.
  2116.    CGI_BIN_DIR) Location of CGI-BIN programs.
  2117.    TEMPFILE_DIR) Directory to use for creation of "temporary" files
  2118.        (by external procedures).  In comparison to the TEMPDATA_DIR,
  2119.        this is meant for short-life files (typically created by
  2120.        a server side program) that are meant to be downloaded
  2121.        in response to a subsequent request.
  2122.        Note: The !DELSEND "special action" looks for files in
  2123.              TEMPFILE_DIR.
  2124.    UPLOAD_DIR) Default location for uploaded files.
  2125.    TEMPDATA_DIR) Used for various SRE-Filter temporary files, such as
  2126.         _HITCACH.80, _ADDPRIV.80, and the $xxx.80 temporary
  2127.         "response" files.  In comparison to the TEMPFILE_DIR, these
  2128.         are files that are used by SRE-Filter, and are not intended
  2129.         to be directly accessible to clients.
  2130.    WORKDATA_DIR) Directory containing various SRE-Filter parameter files.
  2131.  
  2132.    COUNTER_FILE) "REPLACE HITS" counter file
  2133.    RECORD_ALL_FILE) "Record all requests" counter file
  2134.    SENDFILE_FILE) File used by SENDFILE procedure to keep track of requests.
  2135.    ACCESS_FILE) File used to control access when ALLOW_ACCESS is binding
  2136.    UPLOAD_LOG) Record of "uploaded files"
  2137.    ALIAS_FILE)  File containing the aliases.
  2138.    VIRTUAL_FILE) File containing "virtual directory" selector aliases.
  2139.    REPSTGS_FILE)  REPLACEment string file
  2140.    USERS_FILE) Username/password file
  2141.    INTERPRET_FILE) File containing blocks of REXX code for use by the
  2142.         INTERPRET keyphrase (obsolete, retained for backwards compatability).
  2143.  
  2144. Examples:
  2145.    messbox_dir='e:\goserve\MESSAGE'
  2146.    messbox_dir='c:\mptn\etc\mail'
  2147.  
  2148.    tempfile_dir='e:\WWW\temp'
  2149.  
  2150.    upload_dir='E:\goserve\upload'
  2151.    cgi_bin_dir='E:\goserve\CGI_BIN'
  2152.  
  2153.    counter_file='e:\goserve\DATA\COUNTER.CNT'
  2154.    record_all_file='e:\goserve\data\recrdall.cnt'
  2155.    sendfile_file='e:\goserve\DATA\SENDFILE.CNT'
  2156.    access_file='e:\goserve\DATA\ALL_FILE.CTL'
  2157.  
  2158.    tempdata_dir='e:\goserve\temp'
  2159.    virtual_file='E:\goserve\VIRTUAL.IN'
  2160.    alias_file='e:\goserve\ALIASES.IN'
  2161.    repstrgs_file='e:\goserve\REPSTRGS.IN'
  2162.    user_file='e:\goserve\USERS.IN'
  2163.    interpret_file='e:\goserve\INTERPET.IN'
  2164.  
  2165.  
  2166. Note: The various .CNT, .CTL, and .IN files that are shipped with
  2167.       SRE-Filter (such as ALL_FILE.CTL) contain additional documentation.
  2168.  
  2169.       Note that these various filenames are NOT host specific, but
  2170.       they MAY contain host specific entries!
  2171.  
  2172.  
  2173.                        =============================
  2174.  
  2175.   Section 2a.           Parameters in SREFILTR.80
  2176.  
  2177.  
  2178. In addition to the variable contained in INITFILT.80, there are a few
  2179. variables in SREFILTR.80 which the ambitious user may wish to change.
  2180. Note that NONE of these parameters are host-specfic.
  2181. Furthermore, in order for changes to these variables to take effect, you MUST
  2182. restart GoServe (this is not strictly true for some of these parameters,
  2183. but for safety sake, we recommend restarting GoServe whenever you
  2184. change any of these following values).
  2185.  
  2186.  
  2187.  
  2188. ********
  2189. ALWAYS_CHECK_PRIVS
  2190.  
  2191.    When a request selector matches a "public_URL", SRE-Filter does not
  2192.    require the client to have "access privileges".  However, the
  2193.    request may be for a SRE-Filter add-on which DOES require specific
  2194.    privileges.
  2195.  
  2196.    Setting ALWAYS_CHECK_PRIVS=1 tells SRE-Filter to "get the client
  2197.    privileges, even if she asked for a public_url".  A value of 0
  2198.    tells SRE-Filter to NOT lookup client privileges when PUBLIC_URLs
  2199.    are requested.
  2200.  
  2201.    Basically, If you know that public_urls NEVER require privilege
  2202.    information, setting ALWAYS_CHECK_PRIVS=0 will improve performance.
  2203.    If you aren't sure, the safe choice is to set ALWAYS_CHECK_PRIVS=1.
  2204.  
  2205.    Example:  always_check_privs=1
  2206.  
  2207.  
  2208.  
  2209. ********
  2210. BACKUPSERVERLIST and LOADTHRESHOLD
  2211.  
  2212.    These variables are used to control "load balancing".  When load balancing
  2213.    is active, the server will first check the number of active clients.
  2214.    If this exceeds the number specified in LOADTHRESHOLD, then the
  2215.    client is redirected to one of the server's listed in BACKUPSERVERLIST.
  2216.  
  2217.    LOADTHRESHOLD :
  2218.        If LOADTHRESHOLD=0, then this "load balancing" is not attempted.
  2219.        Otherwise, load balancing will occur if the number of active clients
  2220.        is greater then the value given.
  2221.  
  2222.    BACKUPSERVERLIST:
  2223.       If BACKUPSERVERLIST=' ', then load balancing is not attempted.
  2224.       Otherwise, it should contain a list of IP addresses of  alternate
  2225.       (backup) servers (that presumably mirror the main site).
  2226.       If  BACKUPSERVERLIST contains more then one entry (entries should be
  2227.       seperated by spaces), then a partially random method is used to select
  2228.       which server to redirect the client to.  For example:
  2229.                2 entries =  2/3 of the redirections go to the first entry.
  2230.                3 entries =  1/2 go to the first entry (1/4 to 2nd and 3rd)
  2231.  
  2232.      Examples:
  2233.                 loadthreshold=0
  2234.                 backupserverlist=' '
  2235.  
  2236.                 loadthreshold=6
  2237.                 backupserverlist='www2.oursite.net'
  2238.  
  2239.                 loadthreshold=3
  2240.                 backupserverlist='www2.oursite.net  overflow.hersite.net '
  2241.  
  2242.  
  2243. Citation: The basic idea is borrowed from Don Meyer's HTTP filter.
  2244.  
  2245. **********
  2246. CERN_ISMAP
  2247.  
  2248. The value(s) in the spaced delimited CERN_ISMAP variables are used
  2249. to indicate that this "is an image-map request".  You can specify several
  2250. different values (though you should only use one of them in your "image map"
  2251. URL).
  2252.  
  2253. When one of these identifier-strings appear in a request selector,
  2254. SRE-Filter assumes that the request "is a response from a mappable image"
  2255.  
  2256. For example, if CERN_ISMAP='/MAPCERN', then selectors (that are generated
  2257. by clicking on a mappable image) of the form:
  2258.      /MAPCERN/GIFSDIR/USMAP.MAP?123,312
  2259. will be interpreted as ...
  2260.      pixel 123,312, in combination with the instructions contained
  2261.      in /GISDIR/USMAP.MAP, is used to determine which URL to redirect
  2262.      the client to (where USMAP.MAP is a CERN style MAP file)
  2263.  
  2264. IMPORTANT NOTE:  the MAPCERN/ is NOT considered to be part of the directory name --
  2265.                        it is treated as a flag!
  2266.  
  2267. Example:
  2268.      CERN_ISMAP="MAPCERN/ CGI-BIG/HTIMAGE/"
  2269.  
  2270. Notes
  2271.   *  The trailing /  in the above example(s) is optional.
  2272.   *  The "map file location" is interpreted using the regular sre-filter rules (relative to
  2273.       the GoServe data directory, or to a virtual directory)
  2274.   *  For NCSA style image maps, see the  NCSA_ISMAP variable.
  2275.   *  CERN_ISMAP and NCSA_ISMAP replace the ISMAP_URL variable (found in 
  2276.      pre 1.2i.325 versions of  SRE-Filter).
  2277.  
  2278.  
  2279. *******
  2280. CGI_BIN_PIECES
  2281.  
  2282. CGI_BIN_PIECES enables the CGI-BIN  "send pieces as they become available" 
  2283. mode.
  2284.  
  2285. One problem with cgi-bin scripts is that if you have lengthy output, or a 
  2286. compute intensive script that  writes stuff in spurts, the client has 
  2287. to wait for everything to be done before recieving any output.
  2288. If this takes more then several seconds, the client may get discouraged,
  2289. and disconnect. Even worse, if one has the "end client after inactive"
  2290. set low (say, 15 seconds), there may be times when the server kills the
  2291. request even though a lengthy script has yet to finish.
  2292.  
  2293. To deal with these situations, SRE-Filter can send CGI-BIN output
  2294. to the client "as it becomes available". To enable this mode, just set
  2295. the CGI_BIN_PIECES parameter:
  2296.  
  2297.    0  : Do NOT send output in pieces; wait until the script is done,
  2298.         and then send the whole thing
  2299.    1  : Send output in pieces, using named pipes
  2300.    2  : Send output in pieces, using FILEREXX procedures
  2301.  
  2302.    Example: CGI_BIN_PIECES=2
  2303.  
  2304. When everything is working properly, modes 1 and 2 are identical.
  2305. Unfortunately, REXXLIB's implementation of named pipes seems to 
  2306. be buggy (or I'm making some suble mistakes). For example, the named
  2307. pipes will "fail to connect" when private REXX queues are simultaneously 
  2308. used. Among other drawbacks, when you are using CGI_BIN_PIECES=1, you 
  2309. can NOT use PMPRINTF_SREF in cgi-bin scripts.
  2310.  
  2311. In contrast, the FILEREXX mode (CGI_BIN_PIECES=2) seems to be stable, except
  2312. for....
  2313.     reasons we can't figure out, sometimes partial loads of
  2314.     FILEREXX functions don't seem to "stick" when done from within
  2315.     a GoServe thread.  However, the same calls when done from a
  2316.     different session (that is, from some program running under
  2317.     a different invocation of CMD.EXE) work.
  2318.     Therefore, if you are getting "can't find procedure" errors
  2319.     (RC=43); you can try running the following program before starting
  2320.     GoServe:
  2321.  
  2322.     /* Program to preload filerexx procedures */
  2323.       say " This will preload several  FILEREXX procedures"
  2324.       if rxfuncquery('fileread_rxf')=1 then do
  2325.         goti1=RxFuncAdd('Fileread_rxf', 'FILEREXX', 'FILEREAD')
  2326.         if goti1=1 then 
  2327.             say " Error: unable to load FILEREAD FILEREXX functions "
  2328.       end
  2329.       if rxfuncquery('fileopen_rxf')=1 then do
  2330.          goti2=RxFuncAdd('Fileopen_rxf', 'FILEREXX', 'FILEOPEN')
  2331.       end
  2332.       if rxfuncquery('fileclose_rxf')=1 then do
  2333.         goti3=RxFuncAdd('Fileclose_rxf', 'FILEREXX', 'FILECLOSE')
  2334.       end
  2335.       if rxfuncquery('fileclose_rxf')=1 then do
  2336.          goti3=RxFuncAdd('Fileclose_rxf', 'FILEREXX', 'FILECLOSE')
  2337.       end
  2338.       if rxfuncquery('fileseek_rxf')=1 then do
  2339.         goti3=RxFuncAdd('FileSeek_rxf', 'FILEREXX', 'fileseek')
  2340.       end
  2341.       if rxfuncquery('filegetinfo_rxf')=1 then do
  2342.         goti3=RxFuncAdd('Filegetinfo_rxf', 'FILEREXX', 'filegetinfo')
  2343.       end
  2344.       exit
  2345.  
  2346.   
  2347. Recommendation: until we get the named pipe calls fixed up, we RECOMMEND
  2348.                 using the FILEREXX mode
  2349.  
  2350.  
  2351. Note on the !CGI-BIN_n server directives:
  2352.   If you need to use the "send pieces" mode occasionally, and the
  2353.   "standard" mode on other occasions, you can use the !CGI-BIN_n
  2354.   (where n=2,3,4, or 5) "server directives" (see SREFILTR.HTM for further
  2355.   discussion of the !CGI-BIN_n "server directives").
  2356.  
  2357.  
  2358.  
  2359. ********
  2360. CUSTOM_INITS
  2361.  
  2362. CUSTOM_INITS can contain a list of REXX procedures to run when first starting
  2363. GoServe/SRE-Filter.  Typically, these will be custom-written procedures
  2364. that will perform special, one-time actions; such as starting up a database
  2365. server, or "preloading" URL's into the GoServe cache.
  2366.  
  2367. CUSTOM_INITS should be a comma delimited list, with each entry containing
  2368. the name of an external procedure, followed by an optional argument.
  2369.  
  2370. If you do NOT want to run any initialization procedures, set CUSTOM_INITS=0.
  2371.  
  2372.  
  2373. Examples:
  2374.    custom_inits=0
  2375.    custom_inits='preload '
  2376.    custom_inits='preload , userproc Web Server 1 '
  2377.  
  2378.   where the "Web Server 1" is an argument that will be sent to the userproc
  2379.   external procedure.
  2380.  
  2381.  
  2382. Notes:
  2383.  *  These procedures are executed very early in the 
  2384.     SRE-Filter initialization processs (i.e.; before reading INITFILT.80).  
  2385.  *  SRE-Filter waits until these procedures finish.  Thus, if these 
  2386.     procedures stay resident, or otherwise take a long time to complete,
  2387.     YOU SHOULD INVOKE A NEW PROCESS (OR THREAD). That is, the external
  2388.     procedure should immediately invoke a new process (or thread), and
  2389.     then exit.
  2390.  *  An (optional) argument list should NOT contain commas!       
  2391.  *  External procedures should be stored in files in the GoServe directory.
  2392.     These files should have the same name  as the procedure, and 
  2393.     should have a .CMD (or .80) extension.   
  2394.        For example, if Custom_inits='preload', 
  2395.        then a PRELOAD.CMD file should be in the GoServe directory.
  2396.  
  2397. Suggestion:
  2398.  
  2399.    The PRELOAD addon to SRE-Filter is a useful example: the PRELOAD.CMD
  2400.    file (invoked by setting custom_inits='PRELOAD') will call a "preload
  2401.    URL's" daemon (PRELOAD.RXX).   
  2402.  
  2403.  
  2404. ********
  2405. DELAY_SECONDS
  2406.  
  2407. Delay_seconds controls how frequently SRE-Filter
  2408. checks input files for updates.  Larger values mean more time between
  2409. checks.  If you never change initialization parameters, etc. you can
  2410. set this to a high value (say, 1000) to reduce the load on the server.
  2411.  
  2412. Example:
  2413.    delay_seconds=9
  2414.  
  2415. Note: you can always force SRE-Filter to re-read files by issuing a
  2416.       !RESET request to your server.
  2417.  
  2418. **********
  2419. DIR_CACHE_DURATION
  2420.  
  2421. DIR_CACHE_DURATION is used by SRE-Filter's !DIR facility. It is the lifespan
  2422. (in days, or fractional days) of entries in the "directory listing cache".
  2423.  
  2424. Example: DIR_CACHE_DURATION=3
  2425.  
  2426. **********
  2427. DIR_CACHE_SIZE
  2428.  
  2429. DIR_CACHE_DURATION is used by SRE-Filter's !DIR facility. It is the
  2430. maximum size (in Kbytes), of the "directory listing cache".
  2431.  
  2432. Example: DIR_CACHE_SIZE=1000
  2433.  
  2434. Notes:
  2435.   * setting DIR_CACHE_SIZE=0 will suppress use of the directory listing
  2436.     cache.
  2437.   * directory listing "cache files" are stored in the TEMPDATA_DIR, with
  2438.     names of _nnnnn.DSH (i.e.; _0000012.DSH).  There is also a
  2439.     _DIRLIST.IDX file used as an index to these listings).
  2440.  
  2441. ***********
  2442. EMPTY_PATH_OK
  2443.  
  2444. Empty_path_ok is a CGI-BIN option: it controls the  value of 
  2445. the PATH_INFO and PATH_TRANSLATED "environment variables". 
  2446. In particular, when there is no PATH_INFO sent (i.e.; a 
  2447. request of /CGI-BIN/TEST-CGI?ARG1 has no PATH_INFO specified),
  2448. there are two possibilties:
  2449.  
  2450.   EMPTY_PATH_OK=1. PATH_INFO (and PATH_TRANSLATED) are set to
  2451.                    an empty string (no spaces).  In addition,
  2452.                    the SCRIPTNAME is preceded by /CGI-BIN/.
  2453.                    This seems to be more of a  standard (ICS and
  2454.                    the NCSA.1.5.2 servers  use it).
  2455.   EMPTY_PATH_OK=0  PATH_INFO='/' and PATH_TRANSLATE='the GoServe
  2456.                    data directory'.
  2457.                    This is what Don Meyer's GOHTTP uses.
  2458.  
  2459. Notes:
  2460.   * we know of several scripts that expect an empty PATH_INFO environment
  2461.     variable when none is specified, and will fail if EMPTY_PATH_OK=0.
  2462.   * to control which is used on a "selector specific basis", you can use
  2463.     the !CGI-BIN_1 and !CGI-BIN_0 "special directives".
  2464.  
  2465.  
  2466.  
  2467. **********
  2468. HIT_SUPERUSER_SUPPRESS
  2469.  
  2470. If HIT_OWNER_SUPPRESS is enabled (see description above), then
  2471. "OWNERS" will not have their hits recorded (in the RECORD_ALL_FILE
  2472. and in the hit counter file).
  2473. You can extend the "range" of HIT_SUPERUSER_SUPPRESS to include SUPERUSERs by
  2474. setting HIT_SUPERUSER_SUPPRESS=1.    That is, if HIT_OWNER_SUPPRESS=1 and
  2475. HIT_SUPERUSER_SUPPRESS=1, the request from OWNERS and from SUPERUSERs
  2476. will NOT be recorded.
  2477.  
  2478. Otherwise (if HIT_SUPERUSER_SUPPRESS=0), SUPERUSER requests will
  2479. be recorded.
  2480.  
  2481.   Example:
  2482.         HIT_SUPERUSER_SUPPRESS=1                (the default is 0)
  2483.  
  2484. Note:  if HIT_OWNER_SUPPRESS=0, then HIT_SUPERUSER_SUPPRESS is ignored
  2485.        (that is, SUPERUSER requests will  be recorded).
  2486.  
  2487. **********
  2488. NCSA_ISMAP
  2489.  
  2490. The value(s) in the spaced delimited NCSA_ISMAP variables are used 
  2491. to indicate that this "is an image-map request".  You can specify several
  2492. different values (though you should only use one of them in your "image map"
  2493. URL).
  2494.  
  2495. When one of these identifier-strings appear in a request selector,
  2496. SRE-Filter assumes that the request "is a response from a mappable image"
  2497.  
  2498. For example, if NCSA_ISMAP='/MAPIMAGE', then selectors (that are generated 
  2499. by clicking on a mappable image) of the form:
  2500.      /MAPIMAGE/GIFSDIR/USMAP.MAP?123,312
  2501. will be interpreted as ...
  2502.      pixel 123,312, in combination with the instructions contained
  2503.      in /GISDIR/USMAP.MAP, is used to determine which URL to redirect
  2504.      the client to (where USMAP.MAP is an NCSA style MAP file)
  2505.  
  2506. IMPORTANT NOTE:  the MAPIMAGE/ is NOT considered to be part of the directory name --
  2507.                        it is treated as a flag!
  2508.  
  2509. Example:
  2510.      NCSA_ISMAP="MAPIMAGE/ CGI-BIG/MAPIMAGE"   
  2511.  
  2512. Notes
  2513.   *  The trailing /  in the above example(s) is optional.
  2514.   *  The "map file location" is interpreted using the regular sre-filter rules (relative to
  2515.       the GoServe data directory, or to a virtual directory)
  2516.   *  For CERN style image maps, see the  CERN_ISMAP variable.
  2517.   *  CERN_ISMAP and NCSA_ISMAP replace the ISMAP_URL variable (found in 
  2518.       pre 1.2i.325 versions of  SRE-Filter).
  2519.  
  2520.  
  2521. *********
  2522. KEY_PREFACE
  2523.  
  2524. If the REPLACE, INCLUDE, OPTIONS, INTERPRET and SELECT "keywords"
  2525. appear at the beginning of real comments (and you are using the
  2526. default "server side keyphrase" delimiters of <!-- and -->), you
  2527. might want to add a "preface" to these keywords.  For example,
  2528. you can add the ! character, so that SRE-Filter will look for
  2529. !REPLACE, !INCLUDE, etc.
  2530.  
  2531.  
  2532. Note that KEY_PREFACE=0 or KEY_PREFACE='' means "do not add a preface".
  2533. Also note that the # can not be used as a preface (since it is
  2534. used by the HTTPD-style #INCLUDE keyphrase).
  2535.  
  2536.   Examples:
  2537.         KEY_PREFACE='!'
  2538.         KEY_PREFACE=0
  2539.  
  2540.  
  2541.  
  2542. ********
  2543. LOGON_LIMIT
  2544.  
  2545. As a security measure, SRE-Filter's "authorization facility" can limit
  2546. the number of unsuccessful attempts, per IP address per minute.  When this
  2547. limit is exceeded, for the next minute further attempts (from this IP address
  2548. will be immediately denied.
  2549.  
  2550. To enable this, set LOGON_LIMIT to the number of logon attempts per minute.
  2551. A value of 0 means "no limits".
  2552.  
  2553.   Examples:
  2554.         LOGON_LIMIT=0
  2555.         LOGON_LIMIT=3
  2556.  
  2557. Warning: do NOT use LOGON_LIMIT=1 (it causes odd problems)
  2558.  
  2559. Note: the authorization facility handles all client answers to
  2560.      "401 Unauthorized" server responses. These include "logon" requests
  2561.       and "SEL-specific" access requests.
  2562.  
  2563.  
  2564.  
  2565. ********
  2566. MESSAGE_SCRAMBLE
  2567.  
  2568. MESSAGE_SCRAMBLE is used to "encrypt" message-box passwords.
  2569. You can change it for a wee bit extra security (though security is never going
  2570. to be great).
  2571.  
  2572. Example:
  2573.    message_scramble=12415
  2574.  
  2575.  
  2576. ( message_scramble should be an integer less than 1 million and greater
  2577.   then 0).
  2578.  
  2579.  WARNING: If you change this, existing "message" passwords will not be
  2580.           decodable!  That is, they won't work anymore.
  2581.  
  2582.  
  2583. Note: only the password, which is just used to control deletion rights,
  2584. is encrypted.
  2585.  
  2586.  
  2587. ***********
  2588. NO_NO_RECORD
  2589.  
  2590. The NO_NO_RECORD option can be used to suppress the !NORECORD directive.
  2591. One reason to suppress !NORECORD is to prevent tricky clients
  2592. from sneaking by your audit mechanisms.
  2593.  
  2594. To disable the !NORECORD directive, set NO_NO_RECORD=1
  2595. To enable it, set NO_NO_RECORD=0
  2596.  
  2597. ***********
  2598. NO_REMOTE_CONFIG
  2599.  
  2600. SRE-Filter is designed to be remotely configurable; with almost all of 
  2601. the SRE-Filter parameters, virtual directories, usernames, etc. settable
  2602. by a SUPERUSER running a web browser from anywhere in the world.  This is a 
  2603. great convenience, but can be somewhat of a security risk.
  2604.  
  2605. If you desire, you can use the NO_REMOTE_CONFIG parameter to
  2606. disable this "remote configuration" feature. 
  2607.  
  2608. NO_REMOTE_CONFIG can take values of:
  2609.    0 :  Allow remote configuration (by clients with a SUPERUSER privilege)
  2610.    1 :  Disallow remote configuration, but allow configuration (using
  2611.         the SRE-Filter configuration forms) from clients sitting at the
  2612.         server (this entails a check of the client's IP address against
  2613.         the server's IP address).
  2614.    2 :  Disable all configuraiton forms -- to modify any SRE-Filter parameter,
  2615.         etc.; you will have to edit the various ascii parameter files.
  2616.  
  2617.  
  2618. Example:
  2619.   NO_REMOTE_CONFIG=0
  2620.  
  2621. Note: The CHECKIT parameter in SREFCONF.CMD, CONFIG2.CMD, and the 
  2622.       *CFG.CMD files can also be used to suppress remote configuration.
  2623.       
  2624. ***********
  2625. PMPRINTF_OPT:
  2626.  
  2627. To lend extra flexibility to SRE-Filter's run-time auditing, and to catch a few
  2628. bugs in the REXXLIB PMPRINTF; SRE-Filter now uses it's own version
  2629. of PMPRINTF (PMPRINTF_SREF),  Furthermore, SRE-Filter uses a seperate
  2630. thread to do the actual screen & file output, this thread will
  2631. "lazy write" output, with consequent reduction in disk & screen overhead.
  2632.  
  2633. You can control the output of PMPRINTF_SREF by setting the PMPRINTF_OPT parameter.
  2634.  
  2635. PMPRINTF_OPT  can take values of:
  2636.        1 : Use PMPRINTF window
  2637.        2 : Use PMPRINTF window and SREFILTR.LOG file
  2638.        3 : Use SREFILTR.LOG only
  2639. SREFILTR.LOG will be written to the GoServe working directory.
  2640.  
  2641. Notes:
  2642.    * Ambitious webmasters can change the name of this log file,
  2643.      and the "maximum line length",  by adjusting a few parameters 
  2644.      in SREFMON.CMD.
  2645.    * Very ambitious webmasters can change the "lazy write" rate, and
  2646.      can add a special preface to PMPRINTF output, by adjusting a
  2647.      few parameters in PMPRINTF.RXX.
  2648.    * Common-log output that is sent to the PMPRINTF window (when VERBOSE>0)
  2649.      will NOT be written to the SREFILTR.LOG (that would be redundant, since it's
  2650.      already being written to the COMMON.LOG file)
  2651.  
  2652. ***********
  2653. QUICK_INTERP
  2654.  
  2655. To facilitate the use of in-line REXX code for server side includes;
  2656. you can use a shorthand for the <!-- INTERPRET FILE filename.ext --> 
  2657. keyphrase. In particular, you can use a $ instead of INTERPRET FILE:
  2658. as in <!-- $ filename.ext -->
  2659.  
  2660. If you'ld rather use some character other then $, just change the
  2661. QUICK_INTERP parameter.
  2662.  
  2663. Example:
  2664.         QUICK_INTERP='$'
  2665.  
  2666.  
  2667. Note: QUICK_INTERP='#' is allowed.
  2668.  
  2669.  
  2670. ***********
  2671. QUICK_INTERP_CODE
  2672.  
  2673. To facilitate the use of in-line REXX code for server side includes;
  2674. you can use a shorthand for the <!-- INTERPRET CODE abc ; def -->
  2675. keyphrase. In particular, you can use a $ instead of INTERPRET CODE:
  2676. as in <!-- # abc ; def  -->
  2677.  
  2678. If you'ld rather use some character other then #, just change the
  2679. QUICK_INTERP_CODE parameter.
  2680.  
  2681. Example:
  2682.         QUICK_INTERP_CODE='$'
  2683.  
  2684. Note: Be sure that the values for QUICK_INTERP and QUICK_INTERP_CODE
  2685.       are different!
  2686.  
  2687.  
  2688. ***********
  2689. RECORD_CACHE_LINES:
  2690.  
  2691. This controls the size of the "request recorder" cache.
  2692. Shrinking the size of this cache (say, if you don't have
  2693. many documents) will free up memory.  Increasing it (say, you
  2694. have a large site, and a lot of RAM) will speed up request
  2695. recording.  In addition, since the RECORD_ALL_FILE is backed up and
  2696. then reset when the cache grows beyond RECORD_CACHE_LINES, a larger
  2697. cache may reduce fragmentation of these RECORD_ALL_FILE audit files.
  2698.  
  2699. To suppress caching, set RECORD_CACHE_LINES=0
  2700.  
  2701.  
  2702. Example:
  2703.   RECORD_CACHE_LINES=750
  2704.  
  2705.  
  2706. ***********
  2707. SAVE_STATE:
  2708.  
  2709. SRE-Filter can save some "request specific"  state-information:
  2710.     such as the "selector", the client's address, and the request headers.
  2711. This information will be written to a temporary file.
  2712. It is then relatively easy to access this information
  2713. by using SRE-Filter's SREF_READ_STATE macrospace procedure.
  2714.  
  2715. The most important use of this is by post-filter routines -- oftentimes
  2716. a necessity, given that GoServe will CRASH if EXTRACT (and other GoServe)
  2717. functions are called from a post-filter procedure.
  2718.  
  2719. Notes:
  2720.  
  2721.  *  The SREF_READ_STATE SRE-Filter macrospace procedure is designed to use the
  2722.     output generated by SAVE_STATE.  SREF_READ_STATE can be called from
  2723.     an external procedure, or by a post-filter procedure, using the
  2724.     following syntax:
  2725.         info=sref_read_state(state_var,occurence,thread,thread_cache_file)
  2726.     where state_var can be one of:
  2727.         SEL REQUEST SOURCE THREAD DATE_TIME SERVER_NAME PRIVSET
  2728.         CLIENT CLIENT_NAME CLIENT_PORT SERVER  SERVER_PORT TRANSACTION
  2729.     or state_var can be one of the "request header" variables.
  2730.  
  2731.  *  For more details, see the description of SREF_READ_STATE in
  2732.     SREFPRC1.DOC (SREFPRC1.DOC is available from:
  2733.     http://rpbcam.econ.ag.gov/srefilter/srefprc1.doc).
  2734.  
  2735. ************
  2736. SEM_MAXWAIT
  2737.  
  2738. The "independent threads" that help SRE-Filter work by waiting on
  2739. queues.  The waiting is partially contolled by a semaphores, which are
  2740. set whenever anything is written to a queue.  Since OS/2 can be a mite
  2741. slow about writing semaphores, it is sometimes convenient to check
  2742. the queue, and then go back to waiting if nothing is there.
  2743.  
  2744. To increase the frequency that this "check queue even though the semaphore
  2745. hasn't been set" occurs, select a low value of SEM_MAXWAIT.  Note that
  2746. SEM_MAXWAIT is in milliseconds, so values under 100 are considered low.
  2747.  
  2748. A possible drawback is that the smaller SEM_MAXWAIT is, the more
  2749. SRE-Filter will engage in useless queue examinations.  The best value to
  2750. use should be determined by experimentation.
  2751.  
  2752. Example: SEM_MAXWAIT=15000
  2753.  
  2754.  
  2755. *********
  2756. SSI_EXTENSIONS:  File extensions that are equivalent to SHTML.
  2757.  
  2758.  
  2759. The SSI_EXTENSIONS variable contains a space delimited list of file extensions
  2760. that will be treated as "SHTML" files.  That is, when SSI_SHTML_ONLY='YES',
  2761. only files with one of with these extensions will have server side
  2762. includes added.
  2763.  
  2764. If you add to this list, you may also need to specify that the file has a
  2765. text/html MIME type.  To do this, you should add entries to the MEDIATYP.RXX
  2766. file located in the GoServe directory.
  2767.  
  2768. Note: SRE-Filter's default value of ssi_extensions is:
  2769.     ssi_extensions=' SHT SHTML HTML-SSI HTM-SSI '
  2770.  
  2771. ****************
  2772. SSI_CACHE_SIZE
  2773.  
  2774. SSI_CACHE_SIZE is used to set the size of the "server side include cache".
  2775. You should enter the size in Kilobytes. For example:
  2776.  
  2777.    SSI_CACHE_SIZE=5000  (the default)
  2778.  
  2779. corresponds to a cache size of 5M.
  2780.  
  2781.  
  2782. Notes:
  2783.  
  2784.  * For further discussion of SSI-caching, please see the SSICACHE.HTM
  2785.    file.
  2786.  
  2787.  * Cached files are stored in your TEMPDATA_DIR directory (typically,
  2788.    GOSERVE\TEMP). They have names of _CSH????.80 (or .nnn, if you are
  2789.    using port .nnn).
  2790.  
  2791.  * Once the size of the cached files exceeds this amount, the oldest
  2792.    entries will be deleted (where oldest is measured in terms of
  2793.    "last request").
  2794.  
  2795.  * Setting SSI_CACHE_SIZE=0 will turn the SSI-Cache off (regardless of
  2796.    the value of SSI_CACHE_ON).
  2797.  
  2798. ****************
  2799. SSI_CACHE_DURATION
  2800.  
  2801. SSI_CACHE_DURATION is used to set (in days) the "lifespan"
  2802. of entries in the server side include cache.
  2803.  
  2804. After this lifespan has been exceeded, the entry will die.
  2805. This helps ensure that documents do not get "too far" out of
  2806. date (thus, egregious out-of-sync errors won't last forever).
  2807.  
  2808. Examples:
  2809.    SSI_CACHE_DURATION=0.5  --  a 12 hr. lifespan.
  2810.    SSI_CACHE_DURATION=30   -- a 30 day lifespan
  2811.    SSI_CACHE_DURATION=0    -- infinite lifespan
  2812.  
  2813.  
  2814. Note:
  2815.     You can use the <!-- CACHE DURATION m.n --> SSI keyphrase
  2816.     to override this "default" value on a file-by-file basis.
  2817.  
  2818.  
  2819. ****************
  2820. SSI_CACHE_STAMP
  2821.  
  2822. The SSI_CACHE_STAMP dictates which fields to use when determining
  2823. whether a SSI-cache "trigger" file has changed.  SSI_CACHE_DURATION
  2824. can have one of the following values:
  2825.  
  2826. ALL -- Use time,date, and size (if any change, the trigger is considered
  2827.        to be out-of-sync)
  2828. DATE -- Just use the date
  2829. TIME -- Just use the time (hr/minute)
  2830. DATETIME -- Use the time and date
  2831. SIZE -- Just use the size
  2832.  
  2833.  
  2834. Note:
  2835.     You can use the <!-- CACHE TRIGGER_TYPE stamp --> SSI keyphrase,
  2836.     where stamp is one of the above values,  to override this "default"
  2837.     value on a file-by-file basis.
  2838.  
  2839. ****************
  2840. USER_LOGON_PROC
  2841.  
  2842. In some circumstances, you might want to use an external program to 
  2843. check & store usename/password/privilege information (and thereby
  2844. not use SRE-Filter's USER.IN database and related procedures).
  2845.  
  2846. To do this, set USER_LOGON_PROC=procedure_name, where procedure_name 
  2847. is an external procedure (either on disk, or preloaded into macrospace).
  2848.  
  2849.   Examples:
  2850.         USER_LOGON_PROC=' '         (use SRE-Filter's procedure)
  2851.         USER_LOGON_PROC="MY_LOGON"  (use the MY_LOGON procedure)
  2852.  
  2853. This procedure MUST will be given the following information
  2854.      USER  PASSWORD CLIENT_IP_NUMBER
  2855. where USER and PASSWORD are extracted from the authentication request header.
  2856.  
  2857. This procedure MUST return the following
  2858.    STATUS PRIVILEGE_LIST
  2859. (The privilege list is optional)
  2860.  
  2861. The status must be a number; with values:
  2862. 0  : Logon unsuccessful
  2863. >1 : Logon successful (the value identifies which "record" matched, and is
  2864.                        not currently used -- a value of 1 for all success
  2865.                        will suffice)
  2866. <0 : Logon unsuccessful, this is the "nth" try. This is used by the 
  2867.                         LOGON_LIMIT facility of SRE-Filter. You can
  2868.                         always use 0 for "failure", in which case
  2869.                         the LOGON_LIMIT stuff will not work.
  2870.  
  2871.  
  2872.                   ========================================
  2873.  
  2874.    Section 3.           A Comparison of Local vs. Remote Redirection of URL's
  2875.  
  2876.  
  2877. One of the strengths of SRE-Filter is the variety of redirection
  2878. mechanisms it offers, where redirection implies "sending the client
  2879. a file that is not a direct mapping of the request selector".  Redirection
  2880. has two general classes: remote and local.
  2881.  
  2882. "Remote" redirection, which  is what most of the literature simply
  2883. calls redirection, involves telling the client's browser that
  2884. "the url you have requested has been moved to xxxx", where xxxx may
  2885. be any URL  -- it need not be on the same server, and it need not have
  2886. the same name.
  2887.  
  2888. For example, an alias (in the alias-file) of
  2889.    whatgot  http://www.mine.org/dir1/index1.htm
  2890. would cause the server to send back a "302" response to the client's
  2891. browser whenever a request for "whatgot" arrives.  This 302 response,
  2892. would instruct the client's browser to automatically request
  2893. http://www.mine.org/dir1/index1.htm.
  2894.  
  2895. "Local" redirection is handled solely by the server, and involves
  2896. substituting the "request selector" with another "request selector".
  2897. SRE-Filter has a number of methods of specifying "local redirection",
  2898. such as the DEFAULT, AUTO_NAME, NOEXT_TYPE variables, and the
  2899. use of aliases of the form:
  2900.    whatgot   dir1/index.htm.
  2901.  
  2902. In all these cases, the browser assumes that the document it recieves
  2903. is a direct result of the  original request selector issued.
  2904.  
  2905. While offering a real convenience, with less demands on the client,
  2906. local redirection can have undesired effects.  In particular, "partial URLS"
  2907. in documents that were sent as the result of a local alias
  2908. may not work properly.
  2909.  
  2910. A short discussion of how browsers handle partial URLs is germane:
  2911.  
  2912.    When a link that is specified as a "partial URL"
  2913.       (such as <img src="wow.gif"> or <a href="wow.htm">)
  2914.    appears in one of the html documents on your site,the  URL actually
  2915.    requested by the browser is determined by using the "full" URL that
  2916.    invoked this html document (that contains this partial URL).
  2917.  
  2918.    For example, if the client asks for, and recieves:
  2919.       http://www.mine.net/dir1/index.htm,
  2920.    and index.htm contains  a "partial URL" of:
  2921.       <img src="wow.gif">,
  2922.    the client's browser would then try to get:
  2923.        http://www.mine.net/dir1/wow.gif.
  2924.  
  2925. In other words, when the browser is asked to get a partial url (that does NOT
  2926. begin with a /), it will take everything before the last / in the "parent" URL
  2927. (of the document that contains this partial URL) and then append the requested
  2928. partial URL.
  2929.  
  2930. (Actually, if a URL does not begin with http://, it will
  2931. append the "begins with / partial URL" to the http://.../ component of
  2932. the "full URL".)
  2933.  
  2934. The use of the "local redirection" features of SRE-Filter is
  2935. complicated by this "automatic resolution of partial URLS".
  2936.     For example, if the client requests:
  2937.         http://www.mine.net/dir1
  2938.     and SRE-Filter's auto-naming feature converts requested URL's
  2939.     (abstracting from the http://www.mine.net/ component) of
  2940.         dir1
  2941.     to
  2942.        /dir1/index.htm,
  2943.     and then sends /dir1/index.htm ... the browser has no way of knowing
  2944.     this --  that is, the client's browser will assume the server
  2945.     sent a file named :
  2946.          dir1
  2947.     that was located in the
  2948.         "root of www.mine.net".
  2949.     So, the browser would assume that a link (in this document) to
  2950.         wow.gif
  2951.     is also located in the root (of www.mine.net), and would request
  2952.          http://www.mine.net/wow.gif
  2953.     (which is wrong, it should request http://www.mine.net/dir/wow.gif)
  2954.  
  2955.  
  2956. So, if you want to use local redirection (AUTO_NAME, aliases, etc.) you should:
  2957.    1) fully specify the links in your documents ..
  2958.       i.e.; use /dir1/foo.gif instead of foo.gif
  2959.    2) Use a <base> element in the <HEAD> of each document...
  2960.       i.e.; <base href="/dir1/">
  2961.    3) Tell people to end "non file requests" with a "/"   ...
  2962.       i.e.; tell people to use "dir1/" rather then "dir1"
  2963.    4) Don't use local redirection (just use remote redirection).  This
  2964.       entails the use of "remote" aliases instead of AUTO_NAME, DEFAULT,
  2965.       and NOEXT_TYPE.
  2966.    5) Set NOEXT_TYPE='REDIR'
  2967.  
  2968. None of these are great solutions.  We might add a
  2969.    "automatically add the appropriate <base> element to the <HEAD>
  2970.    of all HTML documents"
  2971. feature to SRE-Filter in the future???
  2972. ....But, since many browsers don't seem to understand the <BASE> element
  2973.     (WEB ex 1.11d does, but I'm not sure about others)...
  2974.  
  2975.  
  2976.                      ========================================
  2977.  
  2978.   Section 3a.   An example of local redirection.
  2979.  
  2980. Local redirection, despite it's potential pitfalls, does provide some fairly
  2981. powerful configuration possibilitles.  As an example, consider recording
  2982. "successful" transfers of one of several files: STUFF.ZIP and OTHRSTUF.ZIP.
  2983.  
  2984.  i) The simple method.
  2985.        Assume an HTML document with the following links
  2986.            <A href="stuff.zip">Get our stuff </a> <br>
  2987.            or, <A href="othrstuf.zip">get our other stuff </a>
  2988.        Also assume that RECORD_OPTION='YES'
  2989.  
  2990.        When a client invokes one of these links, SRE-Filter will augment the
  2991.        appropriate entry in the RECORD_ALL_FILE.
  2992.  
  2993. If you wish to record "each individual" request, you could wade through
  2994. SRE-Filter's "common-log" audit file. A better idea is to use SENDFILE with
  2995. the COUNTER option:
  2996.  
  2997.    ii) Using SENDFILE, the above would be:
  2998.            <A href="sendfile?stuff.zip&counter=file=stuff">Get our stuff </a>
  2999.            <br> or, <A href="sendfile?othrstuf.zip&counter=file=othrstuf">
  3000.                 get our other stuff </a>
  3001.  
  3002.        The SENDFILE facility is used to transfer the document; and upon
  3003.        successful transfer, the appropriate .CNT file is updated.
  3004.  
  3005. One nice feature of SENDFILE is that unsuccessful (or aborted) transfers
  3006. are explicitily noted.  There is a minor problem: many browsers
  3007. (i.e.; Netscape) will give the client a default filename of "SENDFILE".
  3008. This will probably confuse a number of folks.
  3009.  
  3010. Fortunately, it's not  hard to avoid this problem by using local redirection.
  3011.  
  3012.    iii) Using local redirection, we use what looks like a standard URL, with
  3013.         the following in the HTML document:
  3014.            <A href="stuff.zip">Get our stuff </a> <br>
  3015.            <A href="othrstuf.zip"> or, get our other stuff </a>
  3016.         In addition, we include  the following entries in the ALIAS_FILE:
  3017.            stuff.zip     sendfile?stuff.zip&counter=file=stuff
  3018.            othrstuf.zip  sendfile?othrstuf.zip&counter=file=othrstuf
  3019.  
  3020.         When a request for "stuff.zip" arrives, SRE-Filter uses the
  3021.         sendfile?stuff.zip&counter=file=stuff alias. The client's browser
  3022.         doesn't know this, and will assume the file's name is stuff.zip
  3023.         (which is the desired assumption).
  3024.  
  3025. This use of aliases could not be replicated with virtual directories, or with
  3026. remote redirection!
  3027.  
  3028.  
  3029.                      ========================================
  3030.  
  3031.   Section 4.    A Simple Example of using PUBLIC_URLS to set up a site
  3032.  
  3033. This section discusses how one might efficiently design a web site with
  3034. three levels of security:
  3035.    1)Open, unmonitored access
  3036.    2)Open, monitored access
  3037.    3)Controlled access.
  3038.  
  3039. When using SRE-Filter, a good strategy for increasing throughput is to
  3040. make extensive use of PUBLIC_URLS, and to use the SREFQUIK version of
  3041. SRE-Filter.  With this in mind, consider the following PUBLIC_URLS:
  3042.  
  3043. PUBLIC_URLS.1='~/*   LITERAL_NORECORD'
  3044. PUBLIC_URLS.2='~/*.SHTML  NORECORD '      (or, ~/*.SHT if you are using FAT)
  3045. PUBLIC_URLS.3='PUBLIC/*.HTM LITERAL'
  3046. PUBLIC_URLS.4='PUBLIC/*.SHTML'
  3047. PUBLIC_URLS.5='PUBLIC/*.GIF LITERAL_NORECORD'
  3048. PUBLIC_URLS.6='HELLO  LITERAL  D:\WWW\INDEX.HTM'
  3049. PUBLIC_URLS.7='STAFF/* LITERAL D:\WWW\PEOPLE\STAFF\*'
  3050. PUBLIC_URLS.8-'STAFF/*.SHTML '
  3051. public_urls.9=0
  3052.  
  3053. the following parameter settings:
  3054.  
  3055. SSI_SHTML_ONLY='YES'
  3056. HOME_DIR='STUDENTS/PERSONAL'
  3057.  
  3058. and the following entry in the ALIAS_FILE:
  3059.  
  3060. STAFF/*.SHTML   PEOPLE/STAFF/*.SHTML
  3061.  
  3062.  
  3063. PUBLIC_URLS.1 and .2 deal with documents available to the "open, unmonitored"
  3064. class of requests (i.e.; requests to student owned subdirectories under
  3065. the STUDENTS/PERSONAL directory of the data directory).  The LITERAL_NORECORD
  3066. in .1 instructs SRE-Filter to map the request selector directly to the
  3067. ~ sub-directory, and to suppress SRE-Filter auditing.  The NORECORD in .2 only
  3068. suppresses SRE-Filter auditing -- since LITERAL supresses server side
  3069. includes, we do not want to use LITERAL_NORECORD to suppress audit file
  3070. update.
  3071.  
  3072. The third and fourth entries, which deal with the "open, monitored access"
  3073. class of requests, are equivalent to the first two -- except SRE-Filter
  3074. auditing is not suppressed.  The fifth entry suppresses auditing for .GIF
  3075. files located in the PUBLIC subdirectory, which we may assume are relatively
  3076. unimportant to keep track of.
  3077.  
  3078. The sixth entry is equivalent to an "alias", with easy to remember
  3079. request selector mapped to a specific file.
  3080.  
  3081. The seventh and eighth entries are similar to the fourth and fifth.
  3082. URLs that begin with "STAFF/" (but that do not end in .SHTML) will
  3083. refer to files in or under D:\WWW\PEOPLE\STAFF. In contrast, selectors
  3084. that begin with STAFF, and end with .SHTML, are interpreted using the usual
  3085. SRE-Filter rules (i.e.; in the data directory or a virtual directory).
  3086. Also note that all requests to STAFF/* will be recorded (including .GIF files).
  3087.  
  3088. Lastly, requests that do NOT match these PUBLIC_URLS will be passed
  3089. through to SREFILTR.80, and will be subject to the  whatever access
  3090. controls (and aliasing) have been specified.  In other words, the
  3091. "controlled access" requests are the default!
  3092.  
  3093. Notes:
  3094.    *  "suppression of SRE-Filter auditing" does NOT suppress additions
  3095.       to GoServe's GOAUDIT.80 file. It does suppress changes to SRE-Filter's
  3096.       RECORD_ALL_FILE
  3097.  
  3098.   *   If you are willing to do some careful configuration, we recommend use 
  3099.       of the SREFAST filter (instead of SREFQUIK).
  3100.  
  3101. --- End of Document.
  3102.