home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / bbs102e.zip / bbs.doc < prev    next >
Text File  |  1997-12-26  |  96KB  |  2,254 lines

  1. 15 Nov 1997.  BBS ver 1.02e: A bulletin board system for the World Wide Web.
  2.  
  3. BBS, version 1.02e, is a freeware OS/2 bulletin board system for
  4. the World Wide Web (WWW).  It requires the freeware SRE-Http WWW Server
  5. for OS/2; and the free, IBM EWS GoServe Internet Server.
  6. Note: Prior to 15 Nov 1997, SRE-http was named SRE-Filter. 
  7.  
  8. You can obtain GoServe from http://www2.hursley.ibm.com/goserve/
  9. SRE-http, and the latest version of BBS, can be obtained from
  10. http://rpbcam.econ.ag.gov/srehttp (use the "download" and
  11. "addons" links).
  12.  
  13.  
  14.                              INTRODUCTION
  15.  
  16. BBS is designed to offer a rich array of features in a relatively simple
  17. to configure package.  Some of the more basic features include:
  18.  
  19. *  A flexible access control mechanism allows explicit controls on which
  20.    directories (file-areas) a user can peruse.
  21. *  Directory specific inclusion files (i.e.; FILES.BBS)  can be used to control
  22.    file and sub-directory display.
  23. *  Alternatively, directory specific headers, footers, "description files" and
  24.    "exclusion lists" can be used.
  25. *  Individual file descriptions can be displayed, along with file size and
  26.    creation date. If desired, you can suppress any of these fields.
  27. *  Optional "automatic descriptions" can be generated for  HTML, .ZIP,
  28.    and text files.
  29. *  .ZIP files can be "opened and displayed", with subsequent retrieval
  30.     of a specific file from within the .ZIP archive
  31. *  Netscape 2.01, and other HTML 3.2 compliant browsers, can upload
  32.    files to your bulletin board (with several forms of notification).
  33. *  Uploads and downloads can be recorded on a per user basis.
  34. *  Downloads can be disallowed if a user's "download to upload" ratio grows
  35.    too large.
  36. *  Multiple links per file (text-download, binary-download, and "mime
  37.    type" download can be specified.
  38. *  You can create a "latest submissions" index that spans multiple directories.
  39. *  You can create user specific upload and download directory (trees).
  40.  
  41. For a quick start, you should read the installation notes (section 1),
  42. and the "hints and suggestions" (section 1a).
  43.  
  44.  
  45.                  **** IMPORTANT INSTALLATION NOTES ***
  46.  
  47. *  For BBS downloads to work, the following entries MUST be present in your
  48.    SRE-http "alias" file:
  49.        bbs/download/*  bbs?download=*
  50.        bbs/zipdownload/*  bbs?zipdownload=*
  51.    To add these entries, you can either run the SRE-http configurator
  52.    or edit ALIASES.IN in the /DATA subdirectory of the GoServe working
  53.    directory.
  54.  
  55.    Note: by default, SRE-http is installed with these entries. So don't be
  56.          alarmed if they are already there!
  57.  
  58. *  Make sure that a copy of UNZIPAPI.DLL is either in your GoServe working
  59.    directory, or in you LIBPATH (say, in C:\os2\dll).
  60.         Since SRE-http comes with a copy of UNZIPAPI.DLL, you will
  61.         probably find a copy of UNZIPAPI.DLL in the GoServe working directory.
  62.    If for some odd reason you do not have a copy, you can download it from:
  63.         http://rpbcam.econ.ag.gov/srefilter/unzipapi.dll.
  64.    Note: UNZIPAPI.DLL is courtesy of the Info-Zip project:
  65.          http://quest.jpl.nasa.gov/Info-ZIP/
  66.          ftp://ftp.uu.net/pub/archiving/zip/ .
  67.  
  68. *  BBS uploads may require tweaking GoServe (see section V).
  69.  
  70. ==================================================
  71. Table of Contents:
  72.  
  73.    I)  Installation Instructions
  74.   1a)  Hints and suggestions
  75.   II)  Choosing Authentication Mode or User Mode
  76.  IIa)  Using INCLUSION_MODE_FILE for refined control
  77.  IIb)  Using BBSRECNT.CMD to display recent submissions
  78.  III)  The User Log Files.
  79.   IV)  Controlling access to selected directories.
  80.    V)  Notes on file uploads, and a note on configuring GoServe
  81.   VI)  Determining the user's required download/upload ratio.
  82.  VII)  BBS and Caching
  83. VIII)  Descriptions of request-string options to BBS.
  84.   IX)  Description of BBS initialization parameters
  85.    X)  Creating use statistics
  86.   XI)  Notes on the BBS caching daemon.
  87.  XII)  Notes on the use of "own" download and upload directories
  88.  
  89. ===============================================================
  90. I) Installation Instructions
  91.  
  92. The first thing you should do is unzip the BBS .ZIP file (BBS102E.zip)
  93. to an EMPTY temporary directory. You then install the files, modify
  94. some parameters, test it, and let the world know!
  95.  
  96.  
  97. I.1) --- Installing BBS files:
  98.  
  99.    Most people will probably want to use the BBS installer. It's
  100.    the INSTALL.CMD file that is shipped in the BBS .ZIP file (you
  101.    did unzip BBS to an empty temporary directory?). To use it, just
  102.    type INSTALL at an OS/2 command prompt (make sure your default
  103.    directory is this "empty temporary directory" you unzipped BBS into).
  104.  
  105.    For those who want finer control, or if you are curious as to what
  106.    INSTALL will do:  please read the following step-by-step instructions.
  107.  
  108.     1) Copy:
  109.           BBS.CMD,
  110.           BBSNEWU.CMD, and
  111.           BBSUP.CMD
  112.           BBSCONFG.CMD
  113.        to your SRE-http "addon" directory (i.e.; D:\GOSERVE\ADDON).
  114.  
  115.    1a) Copy:
  116.           BBSRECNT.CMD
  117.           BBSCACHE.CMD
  118.           BBS.INI
  119.         to your GoServe "working" directory (i.e.; D:\GOSERVE)
  120.  
  121.     2) Copy:
  122.           BBSHELLO.HTM,
  123.           BBSLOGON.HTM,
  124.           BBSPLAY.HTM,
  125.           BBS1A.HTM,
  126.           BBS1B.HTM,
  127.           BBSUP.HTM and
  128.           BBSNEWU.HTM
  129.        to your GoServe "data directory" (say, D:\WWW).
  130.     2a) Copy:
  131.            *.GIF
  132.          to the /IMGS/ subdirectory of your GoServe data directory.
  133.             Note that the /IMGS/ subdirectory should contain the small
  134.             .GIF files installed by SRE-http.
  135.  
  136.     3a) Create a "BBS parameters directory".
  137.            For example, D:\GOSERVE\BBSDATA
  138.     3b) Create a "BBS files directory".
  139.            For example, D:\BBSFILES.
  140.              This is where the contents of your bulletin board (the file area)
  141.              is located.
  142.     3c) Create several BBS working directories:
  143.         i) Create a "BBS user log directory".
  144.            For example, D:\GOSERVE\BBSDATA\USERLOG
  145.        ii) Create a "BBS upload directory".
  146.            For example,  D:\GOSERVE\BBSDATA\UPLOAD
  147.       iii) Create a "BBS cache directory".
  148.            For example, D:\GOSERVE\BBSDATA\CACHE.
  149.  
  150.     4a) Copy:
  151.            BBS.HDR (the default "HEADER" file)
  152.            BBS.FTR (the default "footer" file)
  153.            BBSZIP.HDR (the default "ZIP HEADER" file)
  154.            BBS.CTL (the default "access control" file)
  155.            BBS.DSC (the default "descriptor" file)
  156.            BBS.EXC (the default "exclusion" file)
  157.            FILES.BBS (the sample "inclusion mode" file)
  158.         to your BBS parameters directory (that you created in step 3a).
  159.  
  160.     4b) Copy:
  161.            BBSSTAT.CMD (the statistics generator)
  162.         to your BBS user log directory (that you created in step 3c.i).
  163.  
  164.  
  165. I.2) -- Modifying parameters
  166.  
  167.   To set/modify the various BBS parameters, most people will probably want
  168.   to use the BBS configurator.
  169.          To use the BBS configurator, (after installing BBS) just point your
  170.          browser at  http://your.server/bbsconfg?
  171.          (make sure you include the trailing ?, with nothing after it).
  172.   You will be given a lightly documented form that allows you to change
  173.   almost all the BBS parameters.
  174.  
  175.   Alternatively, if you aren't afraid of getting personal with a text
  176.   editor, you can edit the BBS.INI file (look in your GoServe working
  177.   directory).
  178.  
  179.   In either case, the following steps are recommended. If you are an
  180.   undemanding bbs-master, they will be enough to get you started.
  181.   You'll probably want to read the "hint and suggestions" (section 1a)
  182.   to get some ideas on what can be done with BBS.
  183.   If you like to tinker, then you should read the volumunious descriptions
  184.   contained in the latter portion of this document.  In particular, section
  185.   IX describes the various and sundry BBS initialization parameters.
  186.  
  187.     1) Set the following "BBS directories" parameters:
  188.            BBS_PARAM_DIR : The "BBS parameters directory" (set in I.1.3a above)
  189.            FILE_DIR   :    The "BBS files directory" (set in I.1.3b above)
  190.            USERLOG_DIR:    The "BBS user log directory" (set in I.1.3c.1 above)
  191.            INCOMING_DIR:   The "BBS upload directory" (set in I.1.3c.ii above)
  192.            BBSCACHE_DIR:   The "BBS cache directory" (set in I.1.3c.iii above)
  193.  
  194.          *** If you used INSTALL.CMD to install BBS, you can use the default
  195.              values of these parameters. ***
  196.  
  197.        1a) If you do NOT want a HEADER and FOOTER added to your
  198.            directory displays, set the HEADER_FILE, FOOTER_FILE, and
  199.            ZIP_HEADER_FILE variables to ' '.  If you do want HEADERs
  200.            and FOOTERs displayed, you SHOULD EDIT THESE FILES!
  201.  
  202.        1b) The HEADER_FILE, FOOTER_FILE, and ZIP_HEADER_FILE
  203.            can be "directory specific".  BBS will first look for
  204.            these files in the requested directory, and if not found
  205.            it will then look in the BBS_PARAM_DIR directory.
  206.  
  207.         1c) If you want newly registered users to be assigned an "own" upload
  208.             and download directory, set the OWN_DOWNLOAD_DIRECTORY and
  209.             OWN_UPLOAD_DIRECTORY parameters (see section XII for details).
  210.  
  211.      2) Edit the BBS.EXC  "exclusion" file (in your BBS_PARAM_DIR).
  212.         As with HEADER_FILE, etc.; the BBS.EXC file can be
  213.         "directory specific".  Note that exclusions are not additive --
  214.         the version of the exclusion file located in the BBS_PARAM_DIR
  215.         directory is used ONLY if there is no "directory specific" exclusion
  216.         file. If you do NOT want to use an exclusion file, set the
  217.         EXCLUSION_FILE variable to ' '.
  218.  
  219.       3) Edit the BBS.DSC "descriptors file" (in your BBS_PARAM_DIR
  220.          directory). As with the HEADER_FILE, etc.; the BBS.DSC file can
  221.          be directory specific.  However, it is cumulative:
  222.          descriptions from the version of BBS.DSC located in your
  223.          BBS_PARAM_DIR directory are added to an "own directory"
  224.          version of BBS.DSC (if an entry occurs in both files, the "own
  225.          directory" version is used).
  226.  
  227.       4) Edit the BBS.CTL "access control" file (in your BBS_PARAM_DIR
  228.          directory).  If you do NOT need to control access to specific
  229.          directories, you can skip this step.
  230.  
  231.       5) If you want to use the "FILES.BBS" emulator, then set
  232.          the INCLUSION_MODE_FILE variable to the name of your
  233.          directory listing file (i.e.; FILES.BBS).
  234.  
  235. I.3) Give it a try
  236.   You are now ready to go (assuming you also read the "IMPORTANT
  237.   INSTALLATION NOTES" at the top of this document).
  238.  
  239.   You can use BBSHELLO.HTM as your "welcome" screen.  Feel free
  240.   to modify it, but please do pay attention to the embedded comments.
  241.        Or, to get a hang of what BBS can do, you can try BBSPLAY.HTM.
  242.   Note that you may want to "register" a few users right away,
  243.   such as yourself!
  244.   Advanced users note: if you like to customize, you should look at BBS1A.HTM
  245.                          and BBS1B.HTM.
  246.  
  247.  
  248. I.4) Tell the world
  249.    If I knew how to do that well, I'ld be a happier software developer.
  250.  
  251. I.5) Notes:
  252. *  To disable caching, set the CACHE_FILES parameter to 0.
  253.     Alternatively, you can include a "NOCACHE=1" option in the request string.
  254.  
  255. *  BBS will attempt to send pieces of the response as they become
  256.    available.  This speeds up percieved throughput (since something is
  257.    displayed almost immediately), at the expense of slightly increasing
  258.    server load. If you wish, you can turn this off by setting the
  259.    SEND_FILE parameter in BBS.CMD (that's right, it's NOT in BBS.INI).
  260.  
  261. *  To select "authorization" mode, set the AUTHORIZATION_MODE parameter
  262.    (in BBS.CMD) to 1. See the next section for a discussion of
  263.    authorization mode.
  264.  
  265. *  You may want to customize the various BBS*.HTM files (that you
  266.    copied in step 2 above). If you do, please pay attention to the
  267.    embedded comments. For example, the BBSHELLO.HTM file points
  268.    to several other BBS*.HTM files -- make sure those links
  269.    aren't broken.
  270.  
  271. *  If you wish to name your "request username" response file to something
  272.    other then BBSLOGON.HTM, change the BBS_LOGON_FILE variable.
  273.    Note that the BBS_LOGON_FILE is assumed to be relative to the GoServe data
  274.    directory, or to a virtual directory -- you should NOT specify a fully
  275.    qualified directory.
  276.  
  277. *  We HIGHLY recommend that you customize  the BBS.HDR, BBS.FTR, BBSZIP.HDR,
  278.    and BBS.EXC files.  You can use the versions that come with BBS as a
  279.    template.
  280.  
  281. *  FILES.BBS files can be used as a BBS descriptor file (you will need to
  282.    you can change the value of the DESCRIPTION_FILE variable in BBS.INI).
  283.    You may also want to change the value of the CONTINUATION_FLAG variable.
  284.  
  285. *  If you choose to use an INCLUSION_MODE_FILE, be aware that the "descriptor
  286.    file (BBS.DSC) will be ignored, sorting of files is not attempted (since the
  287.    order of display is strictly controlled by the INCLUSION_MODE_FILE).
  288.    However, most other parameters and options (including display options,
  289.    caching, HEADER, and FOOTER files) remain valid.
  290.  
  291. *  If you use the OWN_UPLOAD_DIRECTORY and OWN_DOWNLOAD_DIRECTORY parameters,
  292.    be aware that BBS will create subdirectories (under these directories)
  293.    when a new user registers.
  294.  
  295. ===============================================================
  296. Ia) Some Hints and Suggestions
  297.  
  298. * The following parameters will be of greatest interest.  For details,
  299.   see section IX.
  300.  
  301.    FILE_DIR
  302.        The location of your "main file area".
  303.  
  304.    DEF_BIN_TEXT_LINKS (enabled by default)
  305.       If DEF_BIN_TEXT_LINKS is enabled (and you do NOT include a NOICONS=1
  306.       option in the request string), each entry will contain 3 links:
  307.         1) A "text icon" to "download as text"
  308.         2) A "binary icon" to "download as binary"
  309.         3) An "underlined file name" to download using SRE-http's
  310.            mime-type resolution algorithim (i.e.; .HTM files are downloaded
  311.            as text/html documents).
  312.       If this is too crowded, you can set DEF_BIN_TEXT_LINKS=0 (in BBS.INI).
  313.  
  314.     WRITE_DETAILS (enabled by default)
  315.        If WRITE_DETAILS is enabled, then transactions are recorded in the
  316.        user's log file.  By default, these files are in the BBSDATA\USERLOG
  317.        directory, and have names of the form USERNAME.IN (i.e.; someone with
  318.        a user name of JOE will have JOE.IN file).  You might want to
  319.        keep an eye on these files to make sure they don't get too big.
  320.  
  321.    TABLE_BORDER and CELL_SPACING (default values are 0 pixels, and 2 pixels)
  322.        These can increased to help offset each entry (each row/column of
  323.        the table of entries).
  324.  
  325.     DEFFAULT_DATEFMT  (default value is 10 Mar 1997).
  326.         You can set this to one of several styles; such as 10/3/97
  327.         or 3/10/97.
  328.  
  329.     USE_SERVERNAME (default: your server's IP name)
  330.         You might want to set this to be a "colloquial" name,
  331.         such as "The Fabulous BBS at FOO.BAR.NET".
  332.  
  333.     DEFAULT_RATIO and DEFAULT_BYTE_RATIO (default= ignore)
  334.         If you want to encourage uploads from your BBS members,
  335.         you should set these values (and read section VI).
  336.  
  337.      OWN_DOWNLOAD_DIR and OWN_UPLOAD_DIR (default: disabled)
  338.          If you want to grant new users a "personal" upload and
  339.          download directory, you should set these values.
  340.  
  341. *  If you want to experiment with the various "request string" options,
  342.    you can play with BBSPLAY.HTM.
  343.  
  344.  
  345. *  The BBSCACHE.CMD "caching daemon" can help keep your cache up to date.
  346.    See section XI for details.
  347.  
  348. *  BBSSTAT.CMD (in the USERLOG directory) can be used to create use
  349.    statistics.
  350.  
  351. *  Instead of BBSHELLO.HTM, you may wish to modify BBS1A.HTM and BBS1B.HTM --
  352.    they allow you to customize the BBS front end (i.e.; you can set up a
  353.    table of "file areas", each of which will be handled by BBS).  See BBS1A.HTM
  354.    and BBS1B.HTM for details.
  355.  
  356. ===============================================================
  357. II) Choosing Authentication Mode or Native Mode
  358.  
  359. BBS has two modes: a native mode, and an "authentication mode".
  360. In general, we recommend the native mode; but in some circumstances
  361. the authentication mode may be preferred.
  362.  
  363. Roughly speaking, "authentication mode" is similar to using "cookies" to
  364. identify username and passwords, with the difference being in how the BBS
  365. requests (and reads) the username and password.  The main advantage of
  366. "authentication mode" is that older browsers (that do not understand cookies)
  367. will work.  The major disadvantage is that BBS "logon" must be more closely
  368. coordinated with SRE-http's access control facilities.
  369.  
  370. More specifically, authentication mode has the following features:
  371.   a) Browser authentication tools are used to ascertain who the users is.
  372.      In particular, when an unknown user attempts to access BBS, she is then
  373.      "challenged" with the username/password screen (that her browser displays
  374.      when it recieves a '401 Unauthorized' response).
  375.   b) If you are using the SRE-http logon or selector-specific access
  376.      controls, the BBS username must be the same as the "SRE-http" username
  377.      (as set in SRE-http's USERS.IN file).
  378.   c) BBS Registration is granted automatically to everyone with "server" logon
  379.      rights (new BBS users will automatically be given a simple "user log"
  380.      file).
  381.  
  382. In contrast, the native mode has the following features:
  383.   a) Username and password information is built into the request string.
  384.      Alternatively, if the client's browser understand cookies (i.e.;
  385.      Netscape 1.3 and  above), it's passed in an  unencoded "cookie".
  386.   b) SRE-http's user list (USERS.IN0 is not needed (though it may still be
  387.      used by SRE-http for general access controls).
  388.   c) If a user is not found, a customizable HTML document (set in the
  389.      BBS_LOGON_FILE parameter) is returned, which asks for a username and
  390.      password, or allows one to "register" as a new user.
  391.   d) Anyone with access to your site, whether or not they have an explicit
  392.      entry in SRE-http's user list, can register as a BBS user (you can
  393.      suppress this auto-registration feature).
  394.  
  395.  
  396. Basically, authentication mode is similar to the use of "cookies",
  397. and can be handled by most browsers. On the other hand, it is  a little less
  398. flexible (you can't customize the "logon" prompt, and you have to be careful
  399. about coordinating BBS usernames with SRE-http usernames).
  400.  
  401. ==============================================================
  402. II.a) Using INCLUSION_MODE_FILE for refined control
  403.  
  404. Introduction:
  405.   The INCLUSION_MODE_FILE parameter is used when you already have an extensive
  406.   list of "FILES.BBS-style" directory descriptor files, or if you are willing
  407.   to create such a set of files (one per directory).
  408.  
  409.   INCLUSION_MODE_FILE is similar to the EXCLUSION_FILE; except rather then
  410.   listing files to exlude, it lists files and sub-directories that may be
  411.   included -- if a file appears in the directory and is not explicitily listed
  412.   in the "own directory" INCLUSION_MODE_FILE, then it will NOT be shown to the
  413.   user.  Note that unlike the EXCLUSION_FILE, wildcard matches are NOT used.
  414.  
  415.   In addition, use of the INCLUSION_MODE_FILE gives one a few additional
  416.   options:
  417.     i)  The order of display is controlled by the order of appearance in
  418.         the INCLUSION_MODE_FILE.
  419.     ii) You can include "comment lines" that will be displayed (in the
  420.         order of appearance).
  421.     iii) You can specify a "preview mode" -- only the INCLUSION_MODE_FILE
  422.          will be sent to the user; with an optional "link" back to
  423.          the regular file listing. This is useful for quick review
  424.          of site contents.
  425.  
  426.   Of course, the downside is that you have to create an INCLUSION_MODE_FILE
  427.   in EACH directory (though you could use tools from other packages to assist
  428.   in this task).
  429.   AND REMEMBER: Files, and subdirectories not explicitily listed in
  430.                 a directory's INCLUSION_MODE_FILE will NOT be displayed.
  431.  
  432. Basic structure:
  433.   There are 3 types of entries in the INCLUSION_MODE_FILE.
  434.    i) If the first character is a non-space, it is ALWAYS interpreted
  435.       as a filename or a directory name.  Directory names are signified
  436.       by using a / as the first character.
  437.       Following the file or directory name (seperated by at least one
  438.       space) is the (first line of the) description.
  439.    ii) If the first character is a space, and the next NON-SPACE character
  440.        is the "continuation flag" (stripped of spaces), then the
  441.        line is treated as a "continuation" of a previous file
  442.        (or directory) description.
  443.   iii) If the first character is a space, and the next NON-SPACE character
  444.        is NOT the "continuation flag", the line is treated as
  445.        a comment. Comments are displayed as seperate lines in the
  446.        document (they will span the entire width of the table).
  447.  
  448.   It is likely that the INCLUSION_MODE_FILE will occasionally reference
  449.   a non-existent file or directory.  Should this happen, a "not available"
  450.   entry will be included in the file listing. This listing will contain
  451.   the name of the file (without a link associated), and the
  452.   first line of the description (as pulled from the INCLUSION_MODE_FILE).
  453.  
  454. Notes:
  455.   * A single character "continuation flag" (as set in the
  456.     CONTINUATION_FLAG parameter) should not be used.
  457.   * The EXCLUSION_FILE is still used -- it is checked AFTER
  458.     the INCLUSION_MODE_FILE.
  459.   * The DESCRIPTION_FILE is ignored -- the descriptions are all pulled  from
  460.     the INCLUSION_MODE_FILE. Similarly, AUTO_DESCRIBE is not available.
  461.   * Sorting is ignored -- files are displayed in the order of appearance
  462.     (in the INCLUSION_MODE_FILE).
  463.   * HEADER, FOOTER, and comments found in the INCLUSION_MODE_FILE, are
  464.     all displayed.
  465.   * When using BBS's "table mode": comments written before the first file
  466.     entry are written above the table header (but below the document HEADER).
  467.  
  468.  
  469. Notes on Preview Mode:
  470.   * To indicate a "preview mode", just include a &PREVIEW=1 in the request
  471.     string.  You could do this by adding a "hidden" form element to
  472.     BBSHELLO.HTM.
  473.        For example: http://your.server/bbs?dir=/foo1&preview=1
  474.   * To suppress the "link back" to the regular file listing (the listing
  475.     that contains links to the actual files), use &PREVIEW=2.
  476.   * When the user selects a "link back", all sub directories of the selected
  477.     directory will have "preview" links.
  478.   * If you want to display a directory with a full listing of files
  479.     (including links), but a "preview" listing of subdirectories, use
  480.     &PREVIEWDIRS=1.
  481.        For example: http://your.server/bbs?dir=/foo1&previewdirs=1
  482.   * Note that to return to the page from which a "preview link" was
  483.     initiated, the user must use her browsers "back" button.  That is, the
  484.     only explicit link included in a "preview link" invoked document is the
  485.     link to the "regular listing" represented by the displayed
  486.     INCLUSION_MODE_FILE.
  487.  
  488. Notes on directory entries in the INCLUSION_MODE_FILE:
  489.   * Directory entries MUST be placed in the INCLUSION_MODE_FILE.  If not
  490.     explicitily included, links to subdirectories will NOT be displayed.
  491.   * Directory entries should start with a /, and should be relative to the
  492.     "own directory".  Thus, an entry of /SUBDIR1 is valid, but an entry of
  493.     D:\BBSFILES\SUBDIR1 is not allowed.
  494.   * Directories are ALWAYS displayed at the end of the document, regardless
  495.     of where the directory entry occurs in the INCLUSION_MODE_FILE.
  496.   * Comments can NOT be interspersed with directory entries (since the
  497.     directory entries are moved to the end of the document, but comments are
  498.     not).
  499.  
  500. Examples:
  501.       INCLUSION_MODE_FILE='FILES.BBS'
  502.       INCLUSION_MODE_FILE=0
  503.  
  504.       For a very simple sample of an INCLUSION_MODE_FILE, see the
  505.       FILES.BBS file that comes with BBS.
  506.  
  507. ===============================================================
  508. II.b) Using BBSRECNT to display recent files
  509.  
  510. The BBSRECNT.CMD facility allows you to create an index of "recently
  511. added" files.  This index will contain file names, and descriptive
  512. information, that BBS can use to display "a list of recent files".  Note that
  513. this list can span several directories (but it can not contain links to other
  514. directories).
  515.  
  516. The following outlines how one might use BBSRECNT:
  517.  
  518.    1) From an OS/2 prompt (in your GoServe working directory),
  519.       run BBSRECNT.CMD
  520.    2) BBSRECNT will ask you several questions. Let's assume
  521.           you use the defaults.
  522.    3) Create a link that you put in your BBSHELLO.HTM file.
  523.      For example:
  524.           <a href=bbs?user=auser&pwd=apwd&Index_list=bbsrecnt.idx>
  525.           See the latest additions? </a>
  526.  
  527.      Alternatively, if everyone is using Netscape, and you have
  528.      BBS's cookie-mode enabled, you could put the following link in a
  529.      footer file:
  530.           <a href=bbs?index_list=bbsrecnt.idx>See the latest additions?</a>
  531.  
  532.     In either cases when this link is selected, the files chosen
  533.     by BBSRECNT.CMD will be displayed.
  534.  
  535.  
  536. NOTES:
  537.  
  538.   *  When BBS uses an index, it first checks that the client has
  539.      privileges for EACH file contained in the index. Files for which
  540.      the client does NOT have privileges are NOT displayed (files for
  541.      which a client DOES have privileges ARE displayed).
  542.  
  543.   *  When BBSRECNT is run, it will check the various (possibly directory
  544.      specific) EXCLUSION_FILES (and drop all files that appear in an
  545.      appropriate exclusion file).
  546.  
  547.   *  If you use a "cookie" (no explicit mention of user or pwd) link
  548.      to an "index list", and a non-cookie browser is being used;
  549.      BBS will use the BBS_LOGON_FILE to request a user/pwd from
  550.      the client.
  551.  
  552.   *  BBSRECNT.CMD will look in the DESCRIPTOR (.DSC) files for descriptions --
  553.      it will NOT attempt auto_descriptions.
  554.  
  555.   *  These indices are NOT dynamic -- BBS uses them as is. So, if things
  556.      change on your site, you have to re-run BBSRECNT.CMD
  557.  
  558.   *  When displaying an INDEX_LIST, BBS will use most of the request and
  559.      BBS.INI options (but sorting can only be set when you create the
  560.      index list).
  561.  
  562.   *  A special option, INDEX_DAYS, can be included to further narrow the
  563.      set of files displayed. For example:
  564.                 BBS?INDEX_LIST=BBS1.IDX&INDEX_DAYS=20
  565.      where BBS1.IDX may contain files added in the past 30 days.
  566.  
  567.   *  You can create as many different "index lists" as you want -- just be
  568.      sure to use different links (that is, different values for the
  569.      INDEX_LIST option).
  570.  
  571.   *  Ambitious programmers may wish to create their own "index list"
  572.      generators, that may use criteria other then file dates.  You can
  573.      see BBSRECNT.CMD for a description of what is expected in these
  574.      "index list" files.
  575.  
  576.    * As a complement to BBSRECNT, you may also want to create a "search
  577.      index" of your BBS site.  This can be easily done with SRE-http's
  578.      SRCHINDX.CMD add-on (http://rpbcam.econ.ag.gov/srefilter/srchindx.zip).
  579.      One nice trick is to create a "description cache" using the .DSC files
  580.      in your BBS directories -- and then include a "search descriptions
  581.      using SRCHINDX" link in your  BBS logon page.
  582.      For further details, see the SRCHINDX documentation at
  583.      http://rpbcam.econ.ag.gov/srefilter/srchindx.doc
  584.  
  585.  
  586. ===============================================================
  587. III) The User Log Files
  588.  
  589. The User Log files, which are located in the USERLOG_DIR directory, are used
  590. to store user specific information.  These files are first created when an
  591. individual "registers" -- typically by invoking the BBSNEWU.HTM document, or
  592. indirectly from BBSLOGON.HTM.  They contain various information, some of which
  593. you may wish to change on a fairly frequent basis.
  594.  
  595. User Log files are named as username.IN, where username is the "username" an
  596. individual "registered" with.  Thus, a user with the name KAREN will have a
  597. KAREN.IN user log (in the USERLOG_DIR directory).
  598.  
  599. ---  Example of a User Log file. Lines beginning with a ; are comments.
  600.  
  601. ; User file for :  daniel
  602. ; The status: line contains information on downloads and uploads:
  603. ;    Dwnld_files  Upld_files  Dwnld_bytes Upld_bytes time_last_dwnld
  604. Status: 5 0 79959 0 729000.658
  605. ; the User: line contains the username and password (unencoded)
  606. User:  daniel   purple
  607. ; The Privilege: line contains his privileges.
  608. ; !! YOU WILL WANT TO MODIFY THIS LINE IF YOU WISH TO USE BBS.CTL
  609. ;    FOR ACCESS CONTROL !!
  610. Privileges:  NEWUSER group1 group3
  611. ; The ratio: line contains the user's upload ratio -- you may
  612. ; want to change this for favored (or unfavored) users
  613. ; In extreme cases, setting a ratio of -1 means "no downloads permitted"
  614. ; Alternatively, a ratio of 0 means "unlimited" (assuming no other ratios apply)
  615. ; Note that the DEFAULT_RATIO and DEFAULT_BYTE_RATIO variables are used
  616. ; to initialize this "Ratio".
  617. Ratio :  8 100
  618. ; The "real name" of the user.
  619. Name:  danny h
  620. ; The user's E-mail address
  621. Email:  dhm@nowhere.org
  622. ; (optional) A (set of) user specific download & upload directories.
  623. ;  These both contain:
  624. ;     a "prefix", and
  625. ;     a fully qualified directory
  626. ;  Upload_dir entries may contain an (optional) "weight factor"
  627. ;  Download_dir entries may contain an (optional) "privilege list"
  628. ;  Note that the OWN_DOWNLOAD_DIRECTORY, OWN_UPLOAD_DIRECTORY, and OWN_FLAG
  629. ;  variables are (optionally) used to initialize these entries.
  630. Upload_Dir: myup dmh/
  631. Download_Dir: personal  d:\bbs2\danielh
  632. ;
  633. ; other, miscellaneous variables (not currently used by BBS)
  634. SENDNOTES: 1
  635. ;
  636. ; the Messages: line signals the end of the main section.
  637. ; Entries recording individual transactions are written below here.
  638. ; These entries are created if write_details=1 (set in BBS.INI)
  639. Messages:
  640. DIR1/    ADDHITC.SRF   15:44:58 8 Dec 1996
  641. DIR1/    Extract from SREFPRC1.ZIP   makelib.cmd   15:45:38 8 Dec 1996
  642. DIR3/    SHOWDIR.DOC   15:46:03 8 Dec 1996
  643.  
  644. ----- End of example.
  645.  
  646. Notes:
  647.  * In "authentication mode", the User Log files are based on the SRE-http
  648.    username.  They will be created automatically upon an individual's first
  649.    access to BBS -- the individual is not informed of it's creation.
  650.  
  651.  * For efficiency reasons, there should NOT be more then 40 lines before the
  652.    MESSAGE: line -- you should remove comment lines if you are above
  653.    this limit (say, if you have several miscellaneous variables, or
  654.    several UPLOAD_DIR and DOWNLOAD_DIR entries).
  655.  
  656.  * The User Log files can be used to track all download requests made by an
  657.    individual (these entrires are placed at the end of the file).  To enable
  658.    this, set WRITE_DETAILS=1.
  659.  
  660.  * BBS also maintains a count of all downloads, on a "file specific" basis.
  661.    This record is contained in the BBS.CNT file in your BBS_PARAM_DIR
  662.    directory.
  663.  
  664.  * The DOWNLOAD_DIR and UPLOAD_DIR parameters must contain a "prefix" and
  665.    a fully-qualified directory name. See Section XII for further discusssion.
  666.  
  667. ===============================================================
  668. IV)  Using BBS.CTL to control access to selected directories.
  669.  
  670. If you want to control access to selected directories, the BBS.CTL file can
  671. be used.  BBS.CTL can also be used to assign which "root directory" the
  672. "requested directory" is relative to.
  673.  
  674. For details on how to add entries to BBS.CTL, please read the version of
  675. BBS.CTL that is shipped with BBS.  Briefly,
  676. each entry should have the structure:
  677.        dir  priv_list  , root_dir
  678. where:
  679.        dir is a possible "requested directory",
  680.        priv_list is a list of "required privileges"
  681.        root_dir is an (optional) "alternative root directory"
  682.  
  683. Examples:
  684.   1) /DIR1 (of your FILE_DIR directory), and it's subdirectories,
  685.       are open to everyone.
  686.           /dir1/*   *
  687.      Note the use of an asterisk (a *):
  688.        i)  as a wildcard for "all subdirectories", and
  689.       ii)  as an "everyone has access" privilege.
  690.  
  691.   2) /DIR2 (and it's subdirectories) are available only to users with
  692.      a CATS  privilege.
  693.        /dir2/*   CATS
  694.  
  695.   3) /DIR3 is available only to users with a DOGS privilege. Also,
  696.      /DIR3 is relative to d:\others, and not to the default FILE_DIR.
  697.      Lastly, subdirectories of d:\others are NOT available (since
  698.      no * appears after the /dir3).
  699.         /dir3     DOGS , d:\others
  700.  
  701. Note: If FILE_DIR = 'D:\BBSFILES:
  702.          Example 1 refers to all files in D:\BBSFILES\DIR1 and it's
  703.          subdirectories.
  704.          Example 2 refers to all files in D:\BBSFILES\DIR2 and it's
  705.          subdirectories.
  706.          Example 3 refers to all files in  D:\OTHERS\DIR3.
  707.  
  708.  
  709. Notes:
  710.  *  In order to use privileges, you'll have to add appropriate privileges
  711.     to the lucky user(s) "user log" file(s).  See the section III,
  712.     "The User Log Files", for details.
  713.  
  714.  *  BBS.CTL is part of the "setting a  user's download/upload ratio"
  715.     puzzle. See the section VI, "Determining the user's required
  716.     download/upload ratio", for details.
  717.  
  718.  *  See the discussion of "own" download and upload directories (in section
  719.     XII) for an alternative means of dictating "root directories".
  720.  
  721.  
  722. ===============================================================
  723. V) Notes on file uploads.
  724.  
  725. File uploads are achieved through the use of  the "multipart/form-data"
  726. variant of html FORMS.  Specifically, HTML 3.2 compliant browsers
  727. (such as  NetScape 2.01) will transfer a file to the server
  728. when an <input type="file" ...> element appears in an html FORM.
  729.  
  730. BBSUP.HTM is an example of such an html form -- it can be used as-is to
  731. provide access to the BBS uploader.
  732.     Feel free to modify BBSUP.HTM, but do pay attention to the embedded
  733.     comments).
  734. BBSUP.HTM calls the BBSUP.CMD component of BBS.  When BBSUP.CMD
  735. gets a request, it will:
  736.   1) Check the http syntax. If the syntax is not correct, an
  737.      error message is returned.
  738.   2) Determine the upload directory.  By default, uploads
  739.      are to the INCOMING_DIR directory (or are relative to it).
  740.      This can be changed by the use of UPLOAD_DIR entries in the
  741.      user log file(s) (see section XII for details)
  742.   3) Check to see if the name that the file will be saved to (in
  743.      the upload directory) already exists.
  744.      If a file with the desired name already exists, an error message
  745.      will be returned.
  746.      Hint: if you don't care about exact names, you can instruct
  747.             the user to include ? characters in the file name.
  748.             These will be filled in with characters that should
  749.             yield a unique name.
  750.   4) Save the uploaded file.
  751.   5) Return a short status message.
  752.   6) Record the upload in the user's user log file.
  753.   7) Write a note to the UPLOAD.LOG file (which is located in your
  754.      BBS_PARAM_DIR directory) describing the details (user name,
  755.      original filename, filename saved as, etc.) of the upload.
  756.   8) Optionally, send an E-mail not to the BBS-administrator informing
  757.      her of this upload (see the ADMIN_EMAIL, BBS_SMTP_GATEWAY, and
  758.      SEND_ALERT variables for details).
  759.  
  760. Example:
  761.        INCOMING_DIR =  'b:\upfiles'
  762.        BBS_PARAM_DIR =    'D:\BBS'
  763.        the users UPLOAD_DIR parameter = 'myup d:\private\bobj'
  764.        the uploaded file is to be saved as 'myup\simple\minds.htm'
  765.    then BBS will write the uploaded data to d:\private\bobj\simple\minds.htm
  766.  
  767.  
  768. ** A Note on Configuring GoServe
  769.  
  770. GoServe (especially earlier versions) seems to have intermittent problems when
  771. processing these multipart requests.
  772. These settings sometimes help:
  773.      1) Double click on the GoServe icon
  774.      2) Select the OPTIONS  menu
  775.      3) Select the LIMITS tab
  776.      3) Change the Connection Maintain to some relatively large positive value.
  777.         The proper value should be determined by experimentation, and
  778.         may depend on the size of files being transfered.
  779.      4) You may also want to go to page 2 of this tab, and change the
  780.         "body data size" variable (to the largest size you expect to recieve).
  781.         NOTE THAT GOSERVE SEEMS TO HAVE A 1M LIMIT ON UPLOADS.
  782.  
  783.  
  784.  
  785. ================================================================
  786. VI) Determining the user's required download/upload ratio.
  787.  
  788. To encourage active participation by users of your bulletin board, you can
  789. require that each user maintains a satisfactory download to upload ratio.  BBS
  790. offers a number of mechanisms to enforce this; including options to set
  791. different requirements per directory, or per user.
  792.  
  793. The client's required upload download/upload ratio is determined using the
  794. maximum of:
  795.         #1) The value of the RATIO: entry in her user log file.
  796.         #2) The "privilege specific" ratios associated with a directory.
  797.  
  798.     #1  (which is initialized with the DEFAULT_RATIO and
  799.     DEFAULT_BYTE_RATIO parameters) is designed to provide "user specific"
  800.     ratios.
  801.  
  802.     #2 is designed to provide ratios to "groups of users".
  803.  
  804.     In order to provide flexibility, BBS uses the following (slightly
  805.     complicated) method of determining which "group" the user falls into.
  806.  
  807.     The basic logic is:
  808.        i)  If the requested directory matches an entry in the BBS.CTL file
  809.            (or a matching DOWNLOAD_DIR entry in the .IN file), the
  810.            "privileges" associated with this entry are read.
  811.  
  812.        ii) If there is no matching entry, the following steps are skipped --
  813.            only #1 above is used to determine the user's download to upload
  814.            ratio.
  815.  
  816.       iii) These "directory privileges" are compared to the "user's
  817.            privileges".  The matches (the privileges in both lists)
  818.            are then extracted.
  819.  
  820.            Notes on matches:
  821.                   * If there are no matches (and a BBS.CTL entry is being
  822.                     used), the client is denied access to this directory (in
  823.                     which case, the ratio is irrelevant).
  824.  
  825.                   * For matches to a DOWNLOAD_DIR entry, privileges are NOT
  826.                     used to control access.
  827.  
  828.                   * The user's privileges are read from the Privileges:
  829.                     entry in her user log file.
  830.  
  831.        iv) For each element (of this set of matching privileges), a
  832.            "privilege specific" ratio is read from a PRIV_RATIO.! parameter.
  833.            If such a PRIV_RATIO.! entry has not been defined, this element
  834.            is skipped.
  835.  
  836.            Notes:
  837.               * PRIV_RATIO.! parameters are set in the BBS.INI file
  838.               * there is NO requirement that you specify a PRIV_RATIO.!
  839.                 parameter for all the privileges you might use.
  840.  
  841.  
  842.  Summarizing:  The maximum of the "privilege specific" ratios (from step iv)
  843.                and the user specific ratio (from #1) is  used as the required
  844.                download to upload ratio.
  845.  
  846.  Important note:  A ratio of "0" means unlimited, BUT if a ratio of
  847.                   0 and a non-0 ratio are found, the non-zero ratio
  848.                   is used!  That is, "0 means unlimited" is ONLY used
  849.                   if NO other information is available.
  850.  
  851. Example:
  852.   Assume:
  853.     a) The BBS.CTL File contains:
  854.           /dir1   GROUP1
  855.           /dir2   GROUP2
  856.           /dir12  GROUP1 GROUP2
  857.           /dir34  GROUP3 GROUP4
  858.           /dir35  GROUP3 GROUP5
  859.     b) The clients user log file contains:
  860.         Privileges: GROUP1 GROUP3 GROUP5 NEWUSER
  861.         Ratio: 20 100
  862.     c) The BBS.INI file contains:
  863.         PRIV_RATIO.!GROUP2='50 1000'
  864.         PRIV_RATIO.!GROUP3='75 800'
  865.         PRIV_RATIO.!GROUP4='10 4000 '
  866.         PRIV_RATIO.!GROUP5='0  400 '
  867.  
  868.   Requests for files in the following directories will yield:
  869.      /DIR1 ---  the ratio is 20 and 100
  870.                   * no matching PRIV_RATIO entry, so use the  Ratio: values
  871.      /DIR2 ---  the client is not allowed access to /DIR2
  872.                   * she does not have a GROUP2 privilege
  873.      /DIR3 ---  the ratio is 20 and 100
  874.                   * no matching entry in BBS.CTL, so use the Ratio: values
  875.      /DIR34 --  the ratio is 75 and 800
  876.                   * RATIO: and  PRIV_RATIO.!GROUP3  are used, with:
  877.                     max(20,75)=75 and max(100,800)=800.
  878.                   * PRIV_RATIO.!GROUP4 is not used (for this user), since she
  879.                     does not have a GROUP4 privilege.
  880.      /DIR35 --  the ratio is 75 800
  881.                   * RATIO:, PRIV_RATIO.!GROUP3, and PRIV_RATIO.!GROUP5 are
  882.                     used, with: 75=max(20,75,0) and 800=max(100,800,400).
  883.                     Note that the 0 (file) ratio for GROUP5 is NOT used
  884.                     as infinity (however, if all relevant ratios had been
  885.                     been 0, then an "unlimited" download ratio is assumed).
  886.  
  887. Note:
  888.    To suppress downloads on a "per-user" basis (but allow the user to view the
  889.    contents of a directory), you can use -1 as a file ratio in one of your
  890.    PRIV_RATIO.!  variables.  However, if a non "-1" ratio also applies to a
  891.    given user, this suppression will not be invoked (that is, ratios of -1
  892.    and 0 are both subject to the "greater values dominate" rule).
  893.  
  894. Advanced Note:
  895.   You might want to fine tune the "significance" of downloads from selected
  896.   directories.  That is, in addition to relaxing (or tightening) the
  897.   requirements for downloading from a given directory, you may want to state
  898.   that downloads from this directory effect your TOTAL byte (and file) counts
  899.   less then (or more then) usual.  In other words, you may want to "weight"
  900.   the bytes by some factor.  You can do this by setting the appropriate
  901.   PRIV_WEIGHT.!  variables.
  902.  
  903.  
  904. ================================================================
  905. VII) BBS and Caching
  906.  
  907. To improve throughput, BBS supports a form of "dynamic caching" of the
  908. listings of directories and .ZIP file expansions.  This involves "partial
  909. compilation of HTML" files, with these partially compiled files used to honor
  910. sufficiently similar requests.
  911.  
  912.   Basically, after BBS has constructed a document displaying a directory, or a
  913.   .ZIP file expansion, it "caches" a copy of it to the BBSCACHE_DIR directory.
  914.   Since the actual listing may contain user and password information (as may
  915.   the request string that invoked this listing), BBS first strips out username
  916.   and password information.  When a similar request comes in, that differs
  917.   only in the username and password (that is, the same request from a
  918.   different user), BBS will use this "cached" copy (after possibly
  919.   substituting the current username and password).
  920.  
  921. Although this can greatly improve throughput, there are a few potential
  922. drawbacks.  First and foremost, unless otherwise instructed, BBS does NOT
  923. attempt to verify the listing against the current contents of the directory.
  924. Thus, if one removes files from a directory that has been "cached", these
  925. deletions will not be reflected (to the next user requesting a listing of the
  926. directory).  Similarly, changes to the header or footer file will not be
  927. displayed.
  928.  
  929. BBS provides several mechanisms for mitigating this problem.
  930.   1) The CACHE_DURATION parameter.  CACHE_DURATION should be set to number
  931.      of days (where 0.5 yields 12 hours) a "cached file" is valid.  After this
  932.      time has elapsed (measured from the moment the temporary file was
  933.      created), a request will create a new listing (and overwrite the current
  934.      one).  The best value of this parameter will depend on how busy the BBS
  935.      is, both in terms of user requests, and in terms of addition or deletion
  936.      of files.
  937.   2) The INIT option of BBS.  If a BBS?INIT=1 request is issued (by a
  938.      SUPERUSER), BBS will reset the cache (all cached files are deleted).
  939.      This is especially useful after the BBS administrator has made
  940.      substantial changes to the file structure.
  941. ! 3) For greatest efficiency in caching, we highly recommend using the BBS
  942.      caching daemon (BBSCACHE.CMD).  This is described in section XI!
  943.   4) If you enable the CACHE_CHECK variable, file stamps will be checked.
  944.  
  945.  
  946. Another concern is the size of the cache.  This can be controlled with the
  947. CACHE_FILES parameter.  Large values will lead to a larger cache; while small
  948. values save disk space. As a very rough example, if an average "listing" takes
  949. 10-20k, then a CACHE_FILE=100 may lead to a cache of 1 to 2 megabytes.
  950.  
  951. Miscellaneous Notes:
  952.  
  953.  * When the CACHE_FILES limit is hit, BBS will delete the "oldest" listing
  954.    first; no attempt is made to gauge which cached listing is the "busiest".
  955.  
  956.  * The cached listing is unique for all possible combination of options.
  957.    That is (ignoring user and password infomation), a request of BBS?dir=/dir1
  958.    and a request of BBS?dir=/dir1&nosize=1 will lead to seperate listing
  959.    files.  Thus, if you let users easily modify their requests, you may need
  960.    to substantially increase the value of CACHE_FILES.
  961.  
  962.  * If you have a .ZIP file, or a directory, that contains the & character in
  963.    it's name; caching will not work (for convoluted reasons having to with the
  964.    HTML character encoding rules).  However, normal (non-cached) retrieval
  965.    will work.  In other words, for efficiency sake, you should avoid the use
  966.    of the & character in file and directory names.
  967.  
  968.  * If you have enabled the use of "cookies" (by setting USE_COOKIES=1), then
  969.    a seperate cache file is saved for "cookies responses" and "non-cookies"
  970.    responses.
  971.  
  972.  
  973. ================================================================
  974. VIII) Descriptions of request-string options to BBS.
  975.  
  976. Note: A GET method request will consist of:
  977.      BBS?option1=value&option2=value2&....
  978.  
  979.  
  980. The following "options" are recognized (we exclude a few options
  981. that are designed for internal use by BBS):
  982.  
  983. ALTSTART       :  Instead of displaying BBS, redirect to ALTSTART (used by BBS1A.HTM)
  984. BIN_TEXT_LINKS  : Display multiple "links" to the document
  985. DATEFMT        :  The date display format
  986. DIR               : The directory to view
  987. DIRCOLS         : Number of columns to use when displaying directory links
  988. FORCETEXT       : Transfer all files as "text/plain"
  989. FORCEBINARY     : Transfer all files as "application/octet-stream" (binary)
  990. INIT            : Initialize
  991. NOICONS         : Do NOT display icons
  992. NODIR           : Do NOT display parent and child directories
  993. NOTIME          : Dos NOT display file creation time
  994. NODATE          : Do NOT display file creation time and date
  995. NODESC          : Do NOT display file description
  996. NOSIZE          : Do NOT display file size
  997. NOCACHE         : Do NOT cache this directory listing
  998. ROOTDIR         : Do NOT provide link to parent directory
  999. SHORT           : Use a short display format
  1000. SIZEFMT         : The file-size display format
  1001. SORTBY          : The sorting criteria (date, name, etc.)
  1002. TIMEFMT         : The time format
  1003. ZIPFILE         : The .ZIP file to view.
  1004.  
  1005.  
  1006.         ------------------------------------------------------
  1007.  
  1008. ALTSTART:  Redirect to an "alternative" startup document
  1009.  
  1010.    ALTSTART should be equal to an absolute or relative URL.   It is typically
  1011.    used by BBS1A.HTM (or your own equivalent) to provide an "alternative"
  1012.    startup document.
  1013.    For example, you could point to a complicated table, with each cell
  1014.    corresponding to the root of some directory tree -- with BBS handling
  1015.    each of these trees.
  1016.  
  1017.    Example: ALTSTART="/BBS1B.HTM"
  1018.  
  1019.   Note:  for "cookies" to work properly, the ALTSTART URL should be relative
  1020.          to the document that invokes it.
  1021.  
  1022.  
  1023. BIN_TEXT_LINKS:  If 1, then include a "text" link and a "binary" link.
  1024.  
  1025.           This is a convenient way of allowing the client to choose how
  1026.           the file should be "requested".
  1027.  
  1028.           Example:  BBS?DIR=SpotDog/Files&bin_text_links=1
  1029.  
  1030.  
  1031.         If BIN_TEXT_LINKS=1, three choices are displayed:
  1032.             i)  a "download at text" link (displaying a text icon)
  1033.            ii)  a "download as binary" link (displaying a binary icon)
  1034.           iii)  a "download as mime type" link (displaying the file name)
  1035.         Note that if NOICONS is set, then i and ii will be displayed as text.
  1036.  
  1037.         If BIN_TEXT_LINKS=0, two choices are displayed:
  1038.             i)  a "download as mime type" link (using an appropriate icon)
  1039.            ii)  a "download as mime type" link (displaying the file name)
  1040.         Note that if NOICONS is set, then i will NOT be displayed.
  1041.  
  1042.         Notes:
  1043.            *  See the DEF_BIN_TEXT_LINKS parameter for an alternative to
  1044.               the use of BIN_TEXT_LINKS.
  1045.            *  If you use BIN_TEXT_LINKS (or DEF_BIN_TEXT_LINKS), you should
  1046.               NOT use FORCETEXT and FORCEBINARY.
  1047.  
  1048.  
  1049. DATEFMT:   Can take several values (see REXX Date function documentation
  1050.            for details):
  1051.  
  1052.           default:    27 Aug 1988
  1053.                 B:    725975
  1054.                 D:    240
  1055.                 E:    27/08/88
  1056.                 L:    27 August 1988
  1057.                 M:    August
  1058.                 N:    27 Aug 1988
  1059.                 O:    88/08/27
  1060.                 S:    19880827
  1061.                 U:    08/27/88
  1062.                 W:    Saturday
  1063.  
  1064.           Example:  BBS?DIR=SpotDog/Files&datefmt=N
  1065.           Example:  BBS?DIR=SpotDog/Files&datefmt=U
  1066.  
  1067.  
  1068. DIR:      This is the "requested directory" to be displayed.
  1069.  
  1070.                 Example: BBS?DIR=SpotDog/Fires
  1071.  
  1072.                 The "requested directory" is SpotDot/Files
  1073.                 The "prefix" is SpotDog
  1074.  
  1075.           Note that the actual directory pointed to by the "requested
  1076.           directory" should be:
  1077.            i) relative to the FILE_DIR directory,
  1078.           ii) relative to a directory specified in BBS.CTL.
  1079.          iii) specified (using the "prefix") by a DOWNLOAD_DIR
  1080.               entry.
  1081.           See section XII for further details.
  1082.  
  1083. DIRCOLS:  Number of table columns used to display directories.
  1084.  
  1085.           Example:  BBS?DIR=SpotDog/Files&dircols=4
  1086.  
  1087.           Notes:
  1088.            *  If you have directory descriptions, you probably
  1089.               should set DIRCOLS=1.
  1090.            *  The default is 2.
  1091.            *  DIRCOLS is ignored if NOTABLE=1
  1092.  
  1093. FORCETEXT:  If =1, asume all files are "text/plain" MIME type.
  1094.  
  1095.           This is a convenient way to force the client's browser to display
  1096.           all files (such as .LST files), without the need to run a "helper
  1097.           app".  Of course, if a binary file is chosen, this will yield ugly
  1098.           and inappropriate results!
  1099.  
  1100.           Example:  BBS?DIR=SpotDog/Files&forcetext=1
  1101.  
  1102.           When FORCETEXT is used:
  1103.             with icons: A text icon (that links to a "text download")
  1104.                         and a file name (that links to a "mime-type download")
  1105.                         are displayed.
  1106.          without icons: A file name (that links to a "text download")
  1107.                         is displayed.
  1108.  
  1109.           Notes:
  1110.              * You should not use both FORCETEXT and FORCEBINARY
  1111.                (the results will be unpredictable, but not disasterous).
  1112.              * See BIN_TEXT_LINKS for an alternative to FORCETEXT and
  1113.                FORCEBINARY
  1114.  
  1115.  
  1116. FORCEBINARY:  If =1, asume all files are "application/octet-stream" MIME type.
  1117.  
  1118.           This is a convenient way to force the client's browser to save
  1119.           all files to disk (octet-stream is longhand for "binary").
  1120.  
  1121.           Example:  BBS?DIR=SpotDog/Files&forcebinary=1
  1122.  
  1123.           When FORCETEXT is used:
  1124.             with icons: A binary icon (that links to a "binary download")
  1125.                         and a file name (that links to a "mime-type download")
  1126.                         are displayed.
  1127.          without icons: A file name (that links to a "binary download")
  1128.                         is displayed.
  1129.  
  1130.           Notes:
  1131.              * You should not use both FORCETEXT and FORCEBINARY
  1132.                (the results will be unpredictable, but not disasterous).
  1133.              * See BIN_TEXT_LINKS for an alternative to FORCETEXT and
  1134.                FORCEBINARY
  1135.  
  1136.  
  1137.  
  1138. INIT:     If =1, then initialize (clear) the BBS cache.
  1139.  
  1140.                Example:  BBS?INIT=1
  1141.  
  1142. NOTABLE         : Use <PRE>, not <TABLE>
  1143.  
  1144.  
  1145. NOTABLE:  If =1, use <PRE> statements to structure display.
  1146.           If not specified (or if =0), a TABLE will be used.
  1147.  
  1148.           Example:  BBS?DIR=SpotDog/Files¬able=1
  1149.  
  1150.  
  1151.  
  1152. NOICONS: If=1, then do NOT insert small descriptive icons next to file names.
  1153.          (default is to include these icons).
  1154.  
  1155.          Example:  BBS?DIR=SpotDog/Files&noicons=1
  1156.  
  1157.  
  1158. NODIR:     If =1, then do NOT display parent and child subdirectories.
  1159.  
  1160.            Example:  BBS?DIR=SpotDog/Files&nodir=1
  1161.  
  1162. NOTIME:    If =1, then do NOT dispay creation time
  1163.  
  1164.            Example:  BBS?DIR=SpotDog/Files¬ime=1
  1165.  
  1166. NODATE:    If =1, then do NOT display date (or time)
  1167.  
  1168.            Example:  BBS?DIR=SpotDog/Files&nodate=1
  1169.  
  1170. NODESC:    If =1, then do NOT display a description.
  1171.  
  1172.            Example:  BBS?DIR=SpotDog/Files&nodesc=1
  1173.  
  1174. NOSIZE:    If =1, the do NOT display file size
  1175.  
  1176.            Example:  BBS?DIR=SpotDog/Files&nosize=1
  1177.  
  1178. NOCACHE:   If =1, then suppress the use of caching.
  1179.  
  1180.            That is, force the generation of a listing, rather then using a
  1181.            cached listing.
  1182.  
  1183.            Example:  BBS?DIR=SpotDog/Files&nocache=1
  1184.  
  1185.  
  1186. ROOTDIR:   If =1, then this request is treated as the "root" of a tree.
  1187.  
  1188.           The user can go to subdirectories, but not to the parent.  Note
  1189.           the user is allowed to go backwards after going to one of the child
  1190.           subdirectories (there is no suppression of "parent directory" links
  1191.           of child subdirectories).
  1192.  
  1193. SHORT:    If =1, then a very short form of display is used
  1194.           (no icons, no time, no date, no description).
  1195.  
  1196.            Example:  BBS?DIR=SpotDog/Files&short=1
  1197.  
  1198.  
  1199. SIZEFMT:   If =ABBREV, use nnnK or nM.  If not, use 12,345 format.
  1200.  
  1201.            Example:  BBS?DIR=SpotDog/Files&sizefmt=ABBREV
  1202.  
  1203.  
  1204. SORTBY:   Sort by NAME, EXT, SIZE, or DATE; or NOSORT.
  1205.           Default is NAME.
  1206.  
  1207.           Example:  BBS?DIR=SpotDog/Files&sortby=NAME
  1208.           Example:  BBS?DIR=SpotDog/Files&sortby=DATE
  1209.  
  1210.  
  1211.  
  1212. TIMEFMT:   If =24, use  15:03 format. If not, use 3:03p format.
  1213.  
  1214.            Example:  BBS?DIR=SpotDog/Files&timefmt=24
  1215.  
  1216.  
  1217. ZIPFILE:  A .ZIP archive to "open and display".
  1218.  
  1219.           Example:
  1220.              Display contents of GIFS.ZIP:
  1221.                 BBS?dir=foo1/wow&zipfile=GIFS.ZIP
  1222.  
  1223.           This option is typically generated by BBS when it creates
  1224.           directory listings.
  1225.  
  1226.  
  1227. =======================================================================
  1228. IX) Description of BBS initialization parameters.
  1229.  
  1230. These description are in more or less alphabetical order.  You can modify them
  1231. by editing (with your favorite text editor) the BBS.INI file.  Or, you can use
  1232. the BBS configurator -- just point your browser at:
  1233.    http://your.server/bbsconfg?
  1234.  
  1235. List of BBS.INI parameters --------------
  1236.  
  1237. The following lists the various parameters set in BBS.INI
  1238.  
  1239. Parameter Name                  Description
  1240.  
  1241. ADMIN_EMAIL       E-mail address of BBS adminstrator
  1242. AUTO_DESCRIBE     Enable "auto description" of files.
  1243. BBS_PARAM_DIR     Location of BBS support files
  1244. BYTES_NEWUSER     Bytes "credited" to new users
  1245. FILES_NEWUSER     Files "credited" to new users
  1246. BBS_SMTP_GATEWAY  The SMTP gateway to use for optional mail messages
  1247. BBSCACHE_DIR      Location of BBS "cache" files
  1248. CACHE_FILES       Maximum number of files to store in BBSCACHE_DIR
  1249. CACHE_DURATION    Lifespan of a BBS cache file
  1250. CACHE_CHECK       Check filestamp of cache file before use
  1251. CELL_SPACING      Space between table cell border and contents, in pixels
  1252. CONTINUATION_FLAG The continuation flag used in multi-line descriptions.
  1253. DEF_BIN_TEXT_LINKS The default "bin_text_links".
  1254. DEFAULT_DESCRIPTION  Used when no description is available
  1255. DEFAULT_DESCRIPTION_DIR  Used when no description is available for a directory.
  1256. DEFAULT_DATEFMT   Default format for displaying date information
  1257. DEFAULT_RATIO     Default file downloads/file uploads ratio
  1258. DEFAULT_BYTE_RATIO Default byte downloads/file uploads ratio
  1259. DESCRIPTION_FILE  Name of file(s) that contains descriptions.
  1260. DEFAULT_SORT_TYPE The default sort type.
  1261. DESCRIPTION_TEXT  Descriptions displayed as HTML, or as <PRE> text
  1262. DESCRIPTION_TEXT_LENGTH Control line length of <PRE> text descriptions.
  1263. DESCRIPTION_TEXT_LENGTH_1LINE Controls format of 1-line descriptions
  1264. EXCLUSION_FILE    Name of file(s) contains file exclusion information.
  1265. FILE_DIR          Fully qualified name of the (default) root of the BBS.
  1266. GET_Z_ZIP_DESCRIPTION Extract -z description from .ZIP files
  1267. HEADER_FILE       Name of file(s) containing header (displayed to client)
  1268. FOOTER_FILE       Name of file(s) containing footer (displayed to client)
  1269. HEADER_TEXT       Display header as HTML or as <PRE> text
  1270. FOOTER_TEXT       Display footer as HTML or as <PRE> text
  1271. ICONS.1 ..        List of custom icons for specific files/directories.
  1272. ICONS.N
  1273. IMAGEPATH         Location of .GIF files
  1274. INCOMING_DIR      Default location to store uploaded files
  1275. INCLUSION_MODE_FILE  Name of "inclusion mode" file
  1276. MUST_WAIT         Number of days "too many downloads" clients must wait
  1277. OWN_NAME_PRIVILEGE  Add a !username to client's privilege list.
  1278. OWN_UPLOAD_DIRECTORY   Default "root" of own upload directory (used by BBSNEWU)
  1279. OWN_DOWNLOAD_DIRECTORY Default "root" of own download directory  ("   "    "  )
  1280. OWN_FLAG          Default "prefix" for own download directory (" "    "  )
  1281. PRIV_RATIO.!name1 List of "privilege specfic" upload/download ratios.
  1282. PRIV_RATIO.!nameN
  1283. PRIV_WEIGHT.!name1 List of "privilege specfic" download weights.
  1284. PRIV_WEIGNT.!nameN
  1285. SEND_ALERT        Send an e-mail alert (via BBS_SMTP_GATEWAY) to ADMIN_EMAIL.
  1286. TABLE_BORDER      Width of table border (or 0 for no border)
  1287. UPLOAD_MAXSIZE    Maximum size, in kbytes, of uploadable files.
  1288. UPLOAD_MINFREE    Minimum disk space free, in kbytes, after upload.
  1289. UPLOAD_QUICK_CHECK  Check upload directory for matching name before uploading.
  1290. USE_COOKIES       Use "cookies" to send username/pwd information.
  1291. USERLOG_DIR       Directory containing user logs (username,password,history,etc)
  1292. USE_SERVERNAME    Colloquial name of your server
  1293. WRITE_DETAILS     Write details to the user log files
  1294. ZIP_HEADER_FILE   Header file(s) to use in ZIP expansions
  1295. ZIP_DESCRIPTOR_FILE Alternate for FILE_ID.DIZ file
  1296.  
  1297.  
  1298. Detailed Descriptions ---- (in more or less alphabetical order)  -------------
  1299.  
  1300. ADMIN_EMAIL
  1301.  
  1302.     The e-mail address of the BBS administrator.  Used when SRE-http sends
  1303.     e-mail alerts (as when a successful upload occurs).
  1304.  
  1305.   Example: ADMIN_EMAIL='admin@foo.bar.net'
  1306.  
  1307.  
  1308. AUTO_DESCRIBE
  1309.  
  1310.   Controls whether BBS should attempt to create an "automatic description" for
  1311.   files that do not have a explicit description.
  1312.   If =0, auto describe is NOT attempted.
  1313.   If >0, then auto describe is attempted.
  1314.        Auto describe constructs a description from:
  1315.          *  <TITLE> and <META EQUIV NAME="CONTENTS">  headers in HTML files
  1316.          *  -z comments, or FILE_ID.DIZ files in .ZIP files
  1317.          *  The first several hundred bytes in text files
  1318.        For other types of files, automatic descriptions are NOT created.
  1319.  
  1320.   Notes:
  1321.  
  1322.     *  The value of auto_describe controls the maximum length of
  1323.        the description.
  1324.  
  1325.          Examples: AUTO_DESCRIBE=200
  1326.                  -- a max 200 character description is created
  1327.  
  1328.                    AUTO_DESCRIBE=0
  1329.                   -- no automatic description is attempted
  1330.  
  1331.     *  If AUTO_DESCRIBE=1 is used, then a max 120 character description is
  1332.        generated.
  1333.  
  1334.     *  The description can be broken into seperate lines, using the
  1335.        DESCRIPTION_TEXT_LENGTH variable (or using a value of 30, if
  1336.        DESCRIPTION_TEXT_LENGTH=0) -- see DESCRIPTION_TEXT for
  1337.        details.
  1338.  
  1339. BBS_PARAM_DIR
  1340.  
  1341.   Directory containing BBS control, etc. files.  If a relative directory is
  1342.   entered, it is assumed to be relative to the GoServe working directory
  1343.  
  1344.   Example:  bbs_param_dir='BBSDATA'
  1345.  
  1346.   If the GoServe working directory is E:\GOSERVE, the above example
  1347.   refers to  E:\GOSERVE\BBSDATA.
  1348.  
  1349.  Notes: bbs_param_dir\bbs.ctl contains the "access control" and "directory
  1350.         privileges" information.
  1351.         bbs_param_dir\bbs.cnt contains counts (by file) of  downloads
  1352.         bbs_param_dir\upload.log contains record of all uploads
  1353.  
  1354.  
  1355. BYTES_NEWUSER and FILES_NEWUSER
  1356.  
  1357.   Bytes and file "downloads" granted to new users.  This lets them
  1358.   have a first shot at the system.
  1359.  
  1360.   Examples:
  1361.      bytes_newuser=10000
  1362.      files_newuser=1
  1363.  
  1364.  
  1365. BBS_SMTP_GATEWAY
  1366.  
  1367.   The valid IP address of an SMTP Gateway.  This is used if you want
  1368.   to send e-mail alerts to the WEB_ADMIN address (see below) when succesful
  1369.   file uploads occur.
  1370.  
  1371.    Example: BBS_SMTP_GATEWAY='MAIL.OURSITE.NET'
  1372.  
  1373.    Note: this is NOT necessarily the same as the the SRE-http SMTP_GATEWAY
  1374.          variable -- though it can be the same.
  1375.  
  1376.  
  1377. BBSCACHE_DIR
  1378.   The directory to store the BBS cache files.  THIS SHOULD BE A DEDICATED
  1379.   DIRECTORY -- since it will fill up with files, and since BBS occasionally
  1380.   clears it out.  If a relative directory is given (not starting with a drive
  1381.   letter or a /), it is assumed to be relative to the BBS_PARAM_DIR directory.
  1382.  
  1383.   Example:  BBSCACHE_DIR='BBSCACHE'
  1384.  
  1385.  
  1386. CACHE_FILES
  1387.   The size of the BBS cache, in files.  After this number of files have been
  1388.   stored (with each file representing a unique request string), BBS will
  1389.   delete the oldest files.
  1390.  
  1391.   Example: Cache_files=100
  1392.  
  1393.   Note: to suppress caching, set CACHE_FILES=0
  1394.  
  1395.  
  1396.  
  1397. CACHE_DURATION
  1398.   This is the number of days (fractional days are allowed) that a BBS cache
  1399.   will be valid for.  Thus, if a cached "request" is more then CACHE_DURATION
  1400.   days old, it will not be used (in fact, it will be replaced).
  1401.  
  1402.   Example: cache_duration=0.5
  1403.  
  1404.   Note: a tiny (say 0.000001) cache duration is equivalent to a
  1405.         CACHE_FILES value of 0.
  1406.  
  1407.  
  1408. CACHE_CHECK
  1409.   Before using a cache entry, BBS can perform a simple check for any file
  1410.   modifications (either to the files in a directory, or to the .ZIP file
  1411.   chosen for expansion).  If modifications are detected, the cache is not used
  1412.   (in fact, it will be replaced).
  1413.  
  1414.   To enable this check, set CACHE_CHECK=1.
  1415.  
  1416.   Example: cache_check=1
  1417.  
  1418.   Notes:
  1419.       * BBS uses a simple CRC on file dates.  This should find most, but not
  1420.         NOT all changes.  For example, changes in "generic" FOOTER and HEADER
  1421.         files will not be detected.
  1422.       * Use of CACHE_CHECK will slow throughput down somewhat.  You may want
  1423.         to consider using the BBSCACHE daemon instead.
  1424.       * The Toronto Virtual File System (TVFS) has a bug which may impact the
  1425.         use of CACHE_CHECK (the effect of this bug is to cause BBS to over-
  1426.         refresh the cache, leading to slower throughput).
  1427.         If you are running TVFS, you might want to set CACHE_CHECK=0.
  1428.  
  1429.  
  1430. CELL_SPACING
  1431.  
  1432.   Space between cell border and cell content (in a table), in pixels.
  1433.   Set to 0 for "no extra spacing".  This is useful as an alternative
  1434.   to the TABLE_BORDER option (helps visually offset rows of the table).
  1435.  
  1436.   Example: cell_spacing=2
  1437.  
  1438.  
  1439. CONTINUATION_FLAG
  1440.  
  1441.    Continuation flag is a character string used to indicate a "continuation"
  1442.    line in the description_file.
  1443.  
  1444.    Example: continuation_flag=','
  1445.  
  1446.    Another popular example is ' |'  (space followed by a |).
  1447.  
  1448.    Note: if your continuation flag starts with a space, and has a non-space
  1449.          second character, then BBS will match the "first space in the
  1450.          continuation_flag" to an arbitrary number (>0) of spaces in the
  1451.          description file.  For example, if continuation_flag=' |',
  1452.          it WILL match
  1453.  |  first line of description
  1454.       |  second line
  1455.     | third line
  1456.  
  1457.          However, it will NOT match
  1458. | bad line.
  1459.       (note that in this example, the | is the first character in the line)
  1460.       For this case, you MUST set the continuation flag ='|'. However,
  1461.       if continuation_flag='|', the prior 3 examples will NOT be matched.
  1462.  
  1463.    Notes
  1464.      * The SRCHINDX add-on also can read these "multi-line description
  1465.        files" (that is, it understands continuation flags)
  1466.        If you intend to "share" description files between BBS and SRCHINDX,
  1467.        please note that SRCHINDX is not as sophisticated as BBS:
  1468.           it treats any line, whose first non-space character is equal to
  1469.           the stripped-of-spaces continuation flag, as a "continuation line".
  1470.      * If you are using INCLUSION_MODE_FILEs, the CONTINUATION_FLAG must start
  1471.        with a space.
  1472.  
  1473.  
  1474. DEF_BIN_TEXT_LINKS
  1475.  
  1476.   The "default BIN_TEXT_LINKS" is used to control whether multiple download
  1477.   options are to be included for each file.  That is, when
  1478.   DEF_BIN_TEXT_LINKS is enabled (is set to 1), then each file
  1479.   will have three links: a text download link, a binary
  1480.   download link, and a "mime-type" download link.  If set to 0,
  1481.   only one link is used (the mime type link).
  1482.  
  1483.   Note: this setting can be overridden by the BIN_TEXT_LINKS request
  1484.         line option.
  1485.  
  1486.   Example:        DEF_BIN_TEXT_LINKS=1
  1487.  
  1488.  
  1489. DEFAULT_DESCRIPTION:
  1490.  
  1491.   The "default description".  Used if no description for a file can
  1492.   be found in the (appropriate) description_file.
  1493.   Can be useful as a filler when tables are used to display descriptions.
  1494.  
  1495.   Example: default_description='...'
  1496.  
  1497.  
  1498.  
  1499. DEFAULT_DESCRIPTION_DIR:
  1500.  
  1501.   The "default description" for directory entries.
  1502.   Used if  no description can be found,  for a directory, in the
  1503.   (appropriate) description_file.
  1504.  
  1505.   Example: default_description=' '
  1506.  
  1507.  
  1508. DEFAULT_DATEFMT
  1509.  
  1510.   The default "date format" to use.  This is used if a DATEFMT option
  1511.   is not included in the URL. See the description of the DATEFMT
  1512.   parameter (in section VIII) for a list of acceptable values.
  1513.  
  1514.   Note: if a bad value of DEFAULT_DATEFMT is used, BBS wil use
  1515.         a value of 'N' (i.e.; 15 Feb 1994)
  1516.  
  1517.  
  1518. DEFAULT_RATIO and DEFAULT_BYTE_RATIO
  1519.  
  1520.    The default download/upload ratios.
  1521.       The default_ratio is for files,
  1522.       The default_byte_ratio is for bytes.
  1523.    These are assigned to a user when they "register".
  1524.  
  1525.    In general: if either are exceeded, downloads are not permitted.
  1526.  
  1527.    This ratio can be overridden through the use of "privilege specific"
  1528.    ratios.  For further details, see the description of the PRIV_RATIO.!
  1529.    parameters, or see section VI of this document.
  1530.  
  1531.    Notes:
  1532.       If both values are 0, it means "no limit" (unless overridden).
  1533.       If one is -1 means, it means "downloads denied" (unless overridden).
  1534.       If both values are very high (say, 1000000), it effectively means
  1535.       "no limit" (and can NOT be overridden).
  1536.  
  1537.    Examples:
  1538.       default_ratio=0
  1539.       default_byte_ratio=0
  1540.  
  1541.       default_ratio=10
  1542.       default_byte_ratio=100
  1543.  
  1544.       default_ratio=-1
  1545.  
  1546.  
  1547. DESCRIPTION_FILE
  1548.  
  1549.    The "description file".  It contains short descriptions of each
  1550.    file in the directory.  It also can contain descriptions of "directories".
  1551.    BBS looks for the description_file in two locations: the "directory
  1552.    being examined", and the BBS_PARAM_DIR directory.  If both places contain
  1553.    a description file, the results are concatenated. Thus, a description
  1554.    may come from an "own directory" description file, or from the "default"
  1555.    (BBS_PARAM_DIR directory) description file.
  1556.    Note that if a match occurs in both files, the "own directory" entry
  1557.    is used.  However, exact matches in the BBS_PARAM_DIR version are used
  1558.    instead of "wildcard" matches in the "own directory" version.
  1559.  
  1560.    Example: description_File='BBS.DSC'
  1561.  
  1562.  
  1563. DEFAULT_SORT_TYPE
  1564.      The default "sortby" critieria (used to sort the list of files).
  1565.      The options are the same as for the SORTBY request option.
  1566.      By default, files will be sorted by Name.
  1567.  
  1568.      Example: DEFAULT_SORT_TYPE='NAME'
  1569.  
  1570.  
  1571. DESCRIPTION_TEXT
  1572.  
  1573.   This is used to control how descriptions are displayed.  When =1,
  1574.   <PRE> is used to display descriptions "as they are written". Otherwise,
  1575.   descriptions are displayed as regular HTML text (i.e.; line breaks
  1576.   are ignored).
  1577.  
  1578.    Example: DESCRIPTION_TEXT=1
  1579.  
  1580.  
  1581. DESCRIPTION_TEXT_LENGTH
  1582.  
  1583.   This is used to control how "text" style descriptions are displayed.
  1584.   When =0, it is ignored. When >0, line lengths are limited to the
  1585.   selected value (<BR> elements are inserted to create these line lengths).
  1586.  
  1587.    Example: DESCRIPTION_TEXT_LENGTH=25
  1588.             (lines in the description will be approximately 25 characters
  1589.              long, with breaks inserted between words)
  1590.  
  1591.  
  1592. DESCRIPTION_TEXT_LENGTH_1LINE
  1593.  
  1594.    When set =1, this signals that the DESCRIPTION_TEXT_LENGTH variable only
  1595.    be applied to 1 line descriptions.  That is, multi-line descriptions will
  1596.    be left "as is", but 1-line descriptions will be broken up.
  1597.  
  1598.   Example: DESCRIPTION_TEXT_LENGTH_1LINE=0
  1599.  
  1600. EXCLUSION_FILE
  1601.  
  1602.   The "exclusion file" contains file names (and subdirectory names)
  1603.   that will NOT be displayed.
  1604.   The EXCLUSION_FILE is assumed to be in the "requested directory".
  1605.   If not found, the  BBS_PARAM_DIRECTORY directory is searched.  Note that
  1606.   these are NOT cumulative --  the first "exclusion_file" found is used.
  1607.  
  1608.   Example:  exclusion_file='BBS.EXC'
  1609.  
  1610.   Notes:
  1611.     *  the default BBS.EXC file contains further details on the use of
  1612.        exclusion files.
  1613.     *  the "exclusion file", "header file",  "description file", etc.
  1614.        are NOT automatically excluded!
  1615.  
  1616. FILE_DIR
  1617.  
  1618.   Fully qualified root directory of the "bbs tree".
  1619.   This is the default "root" of requested directories (where a request
  1620.   is accomplished by a "DIR=xxx" option in the request string).
  1621.   Note that information in the BBS.CTL file, or DOWNLOAD_DIR entries in the
  1622.   user's user log file, may override this "default".
  1623.  
  1624.   Example:  file_dir='g:\goserv\BBSFILES'
  1625.  
  1626.   Note: Section XII of this document, and the default BBS.CTL file,  contain
  1627.         further descriptions of how the "root directory" may be set on a
  1628.         requsted-directory specific basis.
  1629.  
  1630.  
  1631. GET_Z_ZIP_DESCRIPTION:
  1632.  
  1633.     If =1, then the internal zip file description is displayed
  1634.     (if it is available) using a <PRE> format.
  1635.  
  1636.     Example:   GET_Z_ZIP_DESCRIPTION=1
  1637.  
  1638.  
  1639.     Note: The internal zip file description can be modified by using
  1640.           ZIP.EXE's -z switch.
  1641.  
  1642.  
  1643. HEADER_FILE and FOOTER_FILE
  1644.  
  1645.   The "header file" and "footer file".  The header file is displayed at the
  1646.   top of the "directory listing", the footer file at the bottom.
  1647.   They are both  assumed to be in the requested directory.
  1648.   If  not available, then the BBS_PARAM_DIRECTORY directory is searched.
  1649.   If not in either location, no footer is displayed, and a generic header
  1650.   is displayed.
  1651.  
  1652. **  Important Note: You MUST include a <BODY> element in your HEADER_FILE. **
  1653.  
  1654.  
  1655.   Other notes:
  1656.      *  The BBS.HDR and BBS.FTR files that are shipped with BBS contain
  1657.         additional details on the use of HEADER and FOOTER  files.
  1658.  
  1659.  Examples: header_file="BBS.HDR"
  1660.            footer_file="BBS.FTR"
  1661.  
  1662.  
  1663. HEADER_TEXT and FOOTER_TEXT
  1664.  
  1665.   Flags (if set to 1) which signal "display the HEADER and FOOTER
  1666.   files as text" --  text files will be  displayed with the
  1667.   help of <PRE> elements.
  1668.  
  1669.   Examples: header_text=1
  1670.             footer_text=1
  1671.  
  1672.  
  1673. ICONS.n
  1674.  
  1675.    A list of entries that are used to provide "custom" icons for selected
  1676.    files.  This list should contain entries that look like:
  1677.         FILENAME.EXT    <IMG SRC="...">
  1678.    where filename.ext can contain the * wildcard character.
  1679.    Note that you can have as many entries as you want, with n going from
  1680.    1 (the first) to N (the last entry).  You should also have an N+1 entry
  1681.    set to 0.
  1682.  
  1683.    Examples (each example should be on one line; we split them onto two
  1684.              lines JUST for 80 character display purposes):
  1685.      icons.1='*.CMD   <IMG Src="/imgs/blueball.gif"
  1686.                             height=24 width=24 alt="[cmd]" >'
  1687.      icons.2='PERSONAL.HTM  <IMG src="/imgs/mypic.gif"
  1688.                                  height=30 width=30 alt="[me]">'
  1689.      icons.3='\USERS\BOB   <img src="/usr/pics/bobby.gif
  1690.                                 height=22 width=22  alt="[bobs]">'
  1691.      icons.4 =0
  1692.  
  1693.    Notes:
  1694.       * If a file does not match one of these ICONS.n entries, one of the
  1695.            generic icons will be used.
  1696.       * In the above example, icons.3 is used for a directory -- don't forget
  1697.         that you MUST preceed "directory" entries with a \ (or a /).
  1698.  
  1699.  
  1700. IMAGEPATH
  1701.  
  1702.   Directory, relative to the Goserve DATA directory (NOT the BBS_PARAM_DIR
  1703.   directory), that contains the file-type icons (.gif files).
  1704.  
  1705.   Example:   imagepath="imgs/"
  1706.  
  1707.     Note that a leading / will be ignored -- it does NOT signal a "fully
  1708.     qualified" directory
  1709.  
  1710. INCOMING_DIR
  1711.  
  1712.    Default directory for file uploads.
  1713.    If a relative directory is used, it is assumed to be relative to the
  1714.    BBS_PARAM_DIR directory
  1715.  
  1716.    This is used if there is no (matching) UPLOAD_DIR parameter specified in a
  1717.    given user's .IN file.
  1718.  
  1719.    If a "matching" UPLOAD_DIR parameter does exist, then the INCOMING_DIR is
  1720.    ignored. Note that this UPLOAD_DIR parameter should be a fully qualified
  1721.    directory.
  1722.  
  1723.  
  1724.    Example:    If:
  1725.                   UPLOAD_DIR: up1  d:\private\JOE\STUFF
  1726.                   INCOMING_DIR = 'newfiles'
  1727.                   BBS_PARAM_DIR = 'e:\bbs'
  1728.               Then uploads to up1/foo.bar will map to:
  1729.                  d:\private\joe\stuff\foo.bar
  1730.               And uploads to up2/foo.bar will map to
  1731.                  e:\bbs\newfiles\up2\foo.bar
  1732.  
  1733. INCLUSION_MODE_FILE
  1734.  
  1735.  The INCLUSION_MODE_FILE contains file names and subdirectories that will be
  1736.  displayed, as well as comments and descriptions.  Only these files and
  1737.  directories will be displayed (with possible exclusions due to the
  1738.  EXCLUSION_FILE).
  1739.  
  1740.  Examples:
  1741.      INCLUSION_MODE_FILE=0
  1742.           Do not use an inclusion_mode_file.
  1743.     INCLUSION_MODE_FILE='FILES.BBS'
  1744.  
  1745.  For further details on the use of the INCLUSION_MODE_FILE, see section IIa of
  1746.  this document.
  1747.  
  1748.  
  1749. MUST_WAIT
  1750.  
  1751.    If default_ratio is exceeded, client must wait this many days before he can
  1752.    download 1 more file (after this 1 download, the "must-wait clock
  1753.    restarts").  Fractional days are allowed.
  1754.  
  1755.    Example: must_wait=0.1
  1756.  
  1757. OWN_NAME_PRIVILEGE
  1758.  
  1759.     If =1, include a !username in the user's privilege list.
  1760.     This can facilitate assignation of privileges on a user specific basis.
  1761.     Note that a ! is appended to the username-- this is done as a security
  1762.     precaution (to preclude a randomly chosen username from matching
  1763.     a privilege; since usernames can NOT start with !).
  1764.  
  1765.    Example:  own_name_privilege=1
  1766.     (if the user is JOEY, then a !JOEY privilege is added to his
  1767.     privilege list).
  1768.  
  1769. OWN_DOWNLOAD_DIRECTORY
  1770.  
  1771.    The OWN_DOWNLOAD_DIRECTORY is used by the BBS new user registration facility
  1772.    (BBSNEWU.HTM).  It should either equal 0  or " " (in which cases it is
  1773.    ignored), or it should equal an existing fully qualified directory.
  1774.  
  1775.    When a new user is registered (and if OWN_DOWNLOAD_DIRECTORY<>0), a
  1776.    Download_dir entry will be added to the users's .IN file.
  1777.  
  1778.    For example,
  1779.        if OWN_FLAG='PERSONAL' (see below),
  1780.        the username is JOEY
  1781.        and OWN_DOWNLOAD_DIRECTORY='D:\BBS2
  1782.     then the following will be added to JOEY.IN
  1783.         Download_dir: PERSONAL  D:\BBS2\JOEY
  1784.  
  1785.   Notes:
  1786.        * If it doesn't exist, D:\BBS\JOEY will be created
  1787.        * A request for dir=/personal will yield a  listing of the contents of
  1788.          D:\BBS2\JOEY
  1789.        * See section XII for further details
  1790.  
  1791. OWN_FLAG
  1792.  
  1793.   The OWN_FLAG is used by the BBS new user registration facility
  1794.   (BBSNEWU.HTM).  It's used in conjunction with the OWN_DOWNLOAD_DIRECTORY
  1795.   and OWN_UPLOAD_DIRECTORY.
  1796.  
  1797.   Example: OWN_FLAG='PERSONAL'
  1798.  
  1799.  
  1800. OWN_UPLOAD_DIRECTORY
  1801.  
  1802.    The OWN_UPLOAD_DIRECTORY is used by the BBS new user registration facility
  1803.    (BBSNEWU.HTM).  It should either equal 0 (in which case it is ignored), or
  1804.    equal an existing fully qualified directory.
  1805.  
  1806.    When a new user is registered (and if OWN_UPLOAD_DIRECTORY<>0), then an
  1807.    Upload_dir entry will be added to the user's user log file.
  1808.  
  1809.    For example,
  1810.        if OWN_FLAG='PERSONAL'
  1811.        the username is JOEY
  1812.        and OWN_UPLOAD_DIRECTORY='D:\NEWUP'
  1813.     then the following will be added to JOEY.IN
  1814.        Upload_dir: PERSONAL D:\NEWUP\JOEY
  1815.  
  1816.   Notes:
  1817.        * Uploads to PERSONAL/ will be placed in D:\NEWUP\JOEY (rather
  1818.          then in the PERSONAL subdirectory of the INCOMING_DIR).
  1819.        * See section XII for further details
  1820.  
  1821.  
  1822. PRIV_RATIO.!
  1823.  
  1824.     The PRIV_RATIO.! entries are used to assign a download/upload ratio on
  1825.     a "privilege specific" basis.  These are used in conjunction with the
  1826.     user's  default ratio (set in the RATIO: entry of the user log file),
  1827.     and the "required privileges" (set in bbs.ctl on a directory specific
  1828.     basis).
  1829.  
  1830.     Note that these parameters are a little different then other
  1831.     "stem" variables -- you do not put a number after the ".".
  1832.     Instead, put a !, followed by a "privilege name".
  1833.  
  1834.     The value of these parameters should be a string containing two
  1835.     numbers, the file ratio and the byte ratio.
  1836.  
  1837.     Example (first number is file, second number is byte):
  1838.      PRIV_RATIO.!PREFERRED='50 1000'
  1839.      PRIV_RATIO.!NEWGUY='10 50 '
  1840.  
  1841.     For more details on BBS's use of "privileges", please see section VI.
  1842.  
  1843. PRIV_WEIGHT.!
  1844.  
  1845.    These are similar to the PRIV_RATIO.! variables.  They are used to set a
  1846.    "privilege specific" download weight.  Lower download weights mean that
  1847.    a download will result in a smaller number of bytes being added to a
  1848.    users "downloaded bytes count" (and a smaller number of files).
  1849.    Note that the default weight is (not suprisingly) 1.0.
  1850.  
  1851.    Example:  PRIV_WEIGHT.!PERSONAL='0.5'
  1852.      Requests to a directory for which a "PERSONAL" privilege applies
  1853.      (as set in BBS.CTL or in a download_dir entry) will use a
  1854.      download-weight of 0.5.
  1855.  
  1856.  
  1857. SEND_ALERT
  1858.  
  1859.    Set this to 1 to instruct BBS to send an e-mail alert to the WEB_ADMIN
  1860.    (see below), via the SMTP_GATEWAY (see above) whenever a succesful
  1861.    file upload occurs.
  1862.  
  1863.     Example:  SEND_ALERT=1
  1864.  
  1865.  
  1866. TABLE_BORDER
  1867.  
  1868.   Width of borders, if table is used. Set to 0 for "no border".
  1869.   Note: see the cell_spacing option for an alternative method
  1870.         of visually delineating rows in a table.
  1871.  
  1872.   Example: table_border=1
  1873.  
  1874.  
  1875. UPLOAD_MAXSIZE and UPLOAD_MINFREE
  1876.  
  1877.   UPLOAD_MAXSIZE: Maximum size, in kbytes, of uploadable files.
  1878.   UPLOAD_MINFREE: Minimum disk space free, in kbytes, after upload.
  1879.  
  1880.   Examples: upload_maxsize=5000
  1881.            upload_minfree=20*1000
  1882.  
  1883.   Note: This is NOT THE SAME as the SRE-http UPLOAD_MAXSIZE and
  1884.         UPLOAD_MINFREE parameters.
  1885.  
  1886. UPLOAD_QUICK_CHECK
  1887.    To speed up "pre-existing file" UPLOAD error responses, BBSUP can
  1888.    perform an early check to see if the selected filename already
  1889.    exists.  To do this, set upload_quick_check=1.
  1890.  
  1891.    Although speeding up "error response" a bit, this requires that:
  1892.        No "alternative" file name is used -- the "client's own" filename
  1893.        is used, and it is to be placed in the "root" of the INCOMING_DIR
  1894.        directory.  If you use "alternative file names", you should
  1895.        set UPLOAD_QUICK_CHECK=0.
  1896.  
  1897.    Furthermore, if any UPLOAD_DIR entries have been specified, then
  1898.    UPLOAD_QUICK_CHECK is disabled.
  1899.  
  1900.  
  1901. USE_COOKIES
  1902.  
  1903.    BBS will attempt to use "cookies" (request header information) to
  1904.    store the username and password information.  To suppress this
  1905.    feature, set USE_COOKIES=0; to enable it set USE_COOKIES=1.
  1906.  
  1907.    The primary advantage of cookies is that the username and password
  1908.    will not be displayed on the URL -- this gives a little more
  1909.    security to the user.  The primary disadvantage is that it requires
  1910.    more cache files.
  1911.  
  1912.       Example: USE_COOKIES=1
  1913.  
  1914.   Notes:
  1915.      Many older browsers do not understand cookies.  BBS can recognize
  1916.      this, and will use the request-string-based username/password technique.
  1917.  
  1918.      When cookies are being used, otherwise identical requests will result
  1919.      in different "cache files" on the basis of whether the browser is
  1920.      cookie-capable.
  1921.  
  1922.      The request-string-based technique is still used on the first call to
  1923.      the BBS (that is, from BBSHELLO.HTM).  To remove this last bit
  1924.      of exposure, you can try to use POST method in your
  1925.      welcoming FORM (see BBSHELLO.HTM  for an example).
  1926.  
  1927.      For further discussion of "authorization modes", see section II of
  1928.      this document.
  1929.  
  1930.  
  1931.  
  1932. USERLOG_DIR
  1933.  
  1934.    Directory containing BBS "user log" files.
  1935.    If a relative directory is entered, it is assumed to be relative to the
  1936.    BBS_PARAM_DIR directory.
  1937.  
  1938.    Example:  userlog_dir='USERLOG'
  1939.  
  1940.    Notes
  1941.      * "user log files" have names of UserName.IN.
  1942.      * for further discussion of "user log" files, see section
  1943.        III of this document.
  1944.  
  1945.  
  1946. USE_SERVERNAME
  1947.  
  1948.    Optional.  If available, this value will be used in $SERVERNAME
  1949.    string replacements in the HEADER_FILE, ZIP_HEADER_FILE, and FOOTER_FILE.
  1950.    If =0, then look up the server name (from GoServe if available,
  1951.    otherwise from OS/2).
  1952.  
  1953.     Examples:
  1954.         use_servername=0
  1955.         use_servername='The Free-to-all Project Web Site '
  1956.  
  1957.  
  1958. WRITE_DETAILS
  1959.  
  1960.    Write request info to the user-log file.
  1961.    If =1, "request specific" information is recorded in the user's .IN
  1962.    files.  This includes the name of the file uploaded, and
  1963.    the date of transaction.
  1964.    If 0, just the "upload counts", or  "download counts", are augmented.
  1965.  
  1966.    Examples: write_details=1
  1967.  
  1968.  
  1969. ZIP_HEADER_FILE
  1970.   Similar to the HEADER_FILE, this is displayed at the top of
  1971.   "ZIP file extraction" listings.
  1972.   The ZIP_HEADER_FILE is  assumed to be in the directory
  1973.   being displayed. If not, then the  bbs_param directory is searched.
  1974.   If not in either directory, a generic header is displayed.
  1975.  
  1976.   Notes:
  1977.     *  You MUST include a <BODY> element in your ZIP_HEADER_FILE.
  1978.     *  A ZIP_HEADER_TEXT_ONLY option is NOT currently available (that is, the
  1979.        ZIP_HEADER_FILE is assumed to be HTML).
  1980.     *  A ZIP_FOOTER_FILE is NOT currently available.
  1981.  
  1982.   Example: zip_header_file="BBSZIP.HDR"
  1983.  
  1984. ZIP_DESCRIPTOR_FILE
  1985.  
  1986.   The "within .ZIP file" header file. If found (in a .ZIP file)
  1987.   it will be extracted and displayed at the top of the document
  1988.   (along with -z comments and the ZIP_HEADER_FILE).
  1989.  
  1990.   Examples: zip_descriptor_file='FILE_ID.DIZ'
  1991.  
  1992.   Notes:
  1993.    * ZIP_DESCRIPTOR_FILE should NOT contain path info
  1994.  
  1995.    * Display of ZIP file contents is more rudimentary then directory
  1996.      displays; with no file exclusion, no file descriptions, and <PRE>
  1997.      used instead of TABLES.
  1998.  
  1999.  
  2000. ========================================================================
  2001. X) Creating Use Statistics
  2002.  
  2003. The BBSSTAT.CMD file, that you copied to your USERLOG_DIR directory, can be
  2004. used to generate some simple usage statistics.  BBSSTAT.CMD should be run from
  2005. an OS/2 command prompt -- it is NOT an SRE-http add-on!
  2006.  
  2007. You will be asked to provide a few pieces of information:  the number of
  2008. entries to display, and an output file.  For example, if you choose 10
  2009. entries, then the 10 "busiest" users (for each of several variables) are
  2010. listed.
  2011.  
  2012. The output file will contain these lists as plain text (no HTML elements).
  2013. You may want to:
  2014.      a) modify it (say, with a  few HTML tags),
  2015.      b) copy it to your GoServe data directory.
  2016.      c) include a link to it in BBSHELLO.HTM (or whatever you use as your BBS
  2017.         "welcome" page).
  2018.  
  2019. The variables reported are:
  2020.        File downloads, file uploads, byte downloads, byte uploads,
  2021.        download/upload ratio for files and for bytes,
  2022.        and the most recent users.
  2023. In addition, the total (weighted) number of files (and bytes)
  2024. downloaded (and uploaded), and the number of users in the
  2025. last m days, are reported.
  2026.  
  2027. ========================================================================
  2028. XI)  Using the Caching Daemom
  2029.  
  2030. The BBS caching daemon, BBSCACHE.CMD, can be used to prevent the BBS cache
  2031. from becoming seriously out of date.  To use this, simply open up an OS/2
  2032. window, change directories to your GoServe working directory (where BBS.CMD,
  2033. BBSCACHE.CMD, etc.  are installed), and run the BBSCACHE.CMD program.
  2034.  
  2035. There is one important consideration when using BBSCACHE.  BBSCACHE requires a
  2036. "reference" cache-index -- it uses this reference as a list of "request
  2037. strings" whose output will be cached.
  2038.  
  2039.    The notion is that the administrator will save the BBSCACHE.IDX file
  2040.    (the cache index file) after a representative time period.  Alternatively,
  2041.    she could issue an BBS?INIT=1 request, and then meticulously browse the
  2042.    most important (or most frequently demanded) file areas (and .ZIP files).
  2043.    If this administrator-intensive approach is adopted, note that "cookie" and
  2044.    "non-cookie" versions are cached separately -- you might want to hit your
  2045.    favorite file areas with both kinds of browsers.
  2046.  
  2047. Regardless of the source of this "reference" cache index; it should be saved
  2048. in the BBS_PARAM_DIR directory -- and NOT in the BBSCACHE_DIR directory.  One
  2049. convenient way to do this is by running BBSCACHE.CMD -- it will ask if you
  2050. want to save your cache index.  Of course, once you've saved a good
  2051. cache-index, the next time you run BBSCACHE.CMD (say, after shutting down your
  2052. machine for maintenance), you probably do NOT want to "save the current cache
  2053. index" again.
  2054.  
  2055. After asking if you want to save the current cache index, BBSCACHE will ask
  2056. you to provide the name of the cache index you wish to use.
  2057.    If you have just "saved" the current cache index, you'll probably
  2058.    want to use it (it's the default)!
  2059. It will then ask for a frequency of  cache refreshes (in minutes) --
  2060. or you can tell BBSCACHE to do it "just once" (but don't forget to
  2061. re-run BBSCACHE in a timely fashion).
  2062.  
  2063. BBSCACHE will then enter a  "scan, refresh, sleep" loop:
  2064.   1) Scan through the lists of "request strings" stored in the cache-index you
  2065.      selected
  2066.  2)  For each "request string", generate a cache file containing the correct
  2067.      output.
  2068.   3) The working cache-index is refreshed.  Note that this is NOT the
  2069.      same as the cache-index you selected (although it may contain
  2070.      similar information, especially if you "saved the current cache index").
  2071.   4) BBSCACHE sleeps for the specified number of minutes.
  2072.   5) Jump to step 1.
  2073. Note: If you selected "do it just once", BBSCACHE will exit after step 3.
  2074.  
  2075.  
  2076. ========================================================================
  2077. XII) Using "own" upload and download directories
  2078.  
  2079. By default, BBS will assume that all requested downloads are "relative" to
  2080. the FILE_DIR directory.  Similarly, all uploads will be placed into the
  2081. INCOMING_DIR.  While this may be adequate for most installations, there may
  2082. be cases where "customization" is desired. In order to fill this need,
  2083. you should consider the use of "own" upload and download directories.
  2084.  
  2085. A point about more general control methods is worth mentioning:
  2086.  
  2087.    If you've read this far, you are aware of the use of privileges, in
  2088.    conjunction with the BBS.CTL file, to control access to directories.  In
  2089.    many cases, the use of BBS.CTL may be more then adequate (especially when
  2090.    you have a few large classes of users).  In other words, you may want to
  2091.    review the material in section IV.
  2092.  
  2093. That said, the beauty of the "own" directory strategy is the fine control it
  2094. gives. In short, you can specify directories that will only be accessible by a
  2095. single user (or a small set of users).
  2096. In particular:
  2097.   i) You can specify one, or several, "own" upload directories.
  2098.  ii) You can specify one, or several, "own" download directories.
  2099.  
  2100. Specification of "own" upload and download directories is done by
  2101. adding entries to the user's .IN file. That is, for a username of JINX,
  2102. you would add entries to the JINX.IN file.
  2103.  
  2104. For uploads, these entries take the form:
  2105.    UPLOAD_DIR: prefix  fully-qualified-directory  weight_factor
  2106. Download entries take the form:
  2107.    DOWNLOAD_DIR: prefix  fully-qualified-directory privilege_list
  2108. where:
  2109.    prefix: the "leading sub-directory" of the requested-directory.
  2110.    fully-qualified-directory: where to read (or write) files from (to)
  2111.    weight_factor: (optional) weighting factor (default value is 1.0)
  2112.    privilege_list: (optional) list of privileges
  2113.  
  2114. Let's define the above in greater detail:
  2115.   requested-directory:
  2116.       the directory that appears after a dir=, or
  2117.       the directory portion of a file download (or upload) request.
  2118.       For example, if a client requests (ignoring username/password):
  2119.            bbs?dir=animals/primates
  2120.       the "requested-directory" is "animals/primates".
  2121.   prefix: the "first sub-directory" in the "requested-directory"
  2122.       Some examples:
  2123.         the prefix of "dir=animals/primates" is animals
  2124.         the prefix of "dir=simple"  is simple
  2125.         "dir=/" does NOT have a prefix.
  2126.   fully-qualified-directory:
  2127.         a (fully-qualified) directory used as the upload (or download)
  2128.         directory. It must already exist.
  2129.   weight_factor:
  2130.        usually BBS adds the actual number of bytes to the upload bytes-count.
  2131.        The weight_factor instructs BBS to multiply the byte-count by
  2132.        the "weight_factor".
  2133.        Thus, a weight_factor of 0.5, in conjunction with an upload of
  2134.        10000 bytes, would increase the upload-bytes-count by 5000.
  2135.        If this is not specified, a value of 1.0 is used.
  2136.   privilege_list:
  2137.         as with the privilege list in BBS.CTL, it's used to determine the
  2138.         appropriate "upload/download" ratio(s), and the "weighting factor".
  2139.         However, it is not used to control access (since these are "personal
  2140.         directories", it would be annoying and redundant to "require"
  2141.         privileges).
  2142.  
  2143. Examples:
  2144.  *  If INCOMING_DIR='D:\BBS\UPLOAD'
  2145.       and the username is JINX
  2146.       and JINX.IN contains an entry of: Upload_dir: myup d:\others\jinx
  2147.    then
  2148.       a BBS upload to myup\foo.1 will write results to
  2149.           d:\others\jinx\foo.1
  2150.      If there were no Upload_dir entry, results would be written to
  2151.          D:\BBS\UPLOAD\MYUP\FOO.1
  2152.  
  2153.  * If FILE_DIR='D:\BBSFILES'
  2154.       and the username is JINX
  2155.       and JINX.IN contains an entry of:
  2156.           Download_dir: personal d:\private\jinx
  2157.    then a request for dir=/personal
  2158.        would yield a listing of the files in d:\private\jinx
  2159.  
  2160.  *  If JINX.IN contained two entries:
  2161.       Download_dir: personal d:\private\jinx
  2162.       Download_dir: group1 d:\groups
  2163.    then a request for dir=group1/party
  2164.       would yield a list of the files in d:\groups\party
  2165.  
  2166. Notes:
  2167.  
  2168.   * You can have multiple download_dir and upload_dir entries -- just
  2169.     be sure you use a different prefix for each one (though you can use
  2170.     the same prefix for a download_dir and an upload_dir).
  2171.     Also note that sub-directories are always allowed (as in the
  2172.     third example) -- you should NOT use the * to signal "directories are
  2173.     okay" (contrast this to BBS.CTL).
  2174.  
  2175.  *  Please be aware that the "fully-qualified-directory" is used as an
  2176.     "alias" for the "prefix".  In contrast, BBS.CTL  assumes the
  2177.     entire "requested directory" is under the "alternate root directory".
  2178.     Example:
  2179.       Assume a request for dir=/newstuff/dir0
  2180.       a BBS.CTL entry of: newstuff/* * , g:\BBS2
  2181.          would yield a listing of: g:\bbs2\newstuff\dir0
  2182.       a USERS.IN entry of: DOWNLOAD_DIR: newstuff g:\bbs2
  2183.          would yield a listing of: g:\bbs2\dir0
  2184.  
  2185.   * The "own download directory" is checked before BBS.CTL -- if a
  2186.     matching "own download directory entry" is found, BBS.CTL will not be
  2187.     examined. Thus, in the above example, if both entries existed the latter
  2188.     (g:\bbs\dir0) would be used.
  2189.  
  2190.   * The DEFAULT prefix has a special meaning for both UPLOAD_DIR and
  2191.     DOWNLOAD_DIR.  DEFAULT signals that "this fully-qualified-directory
  2192.     should be used instead of the FILES_DIR (or the INCOMING_DIR)".
  2193.     It's a "user-specific" general replacement: if a requested-directory does
  2194.     NOT match a BBS.CTL entry or some other DOWNLOAD_DIR (or UPLOAD_DIR)
  2195.     entry, then the DEFAULT directory will be used.
  2196.      Example: download_dir: DEFAULT  d:\special\users\files
  2197.  
  2198.  
  2199. * Automatically creating "own" directories.
  2200.  
  2201.   You can always add, delete, and modify entries in the various .IN files.
  2202.   This can become tedious, so the new user registration offers a simple way
  2203.   to automatically create these entries.
  2204.  
  2205.   Three BBS.INI parameters are used by this automatic creation facilty:
  2206.   OWN_DOWNLOAD_DIR, OWN_UPLOAD_DIR, and OWN_FLAG. The first two should
  2207.   be fully qualified directories, or 0.  The last should be a short string.
  2208.  
  2209.   If  OWN_UPLOAD_DIR<>0, then the following entry is added to the user's .IN
  2210.   file:
  2211.       Upload_dir: OWN_FLAG Own_upload_dir\username
  2212.    For example,
  2213.               if:
  2214.                  OWN_UPLOAD_DIR='E:\STOREF', and E:\STOREF exists,
  2215.                  username is COYOTE
  2216.                  own_flag='PERSONAL'
  2217.               then the following entry is created,
  2218.                      Upload_dir: personal E:\STOREF\COYOTE
  2219.               and an upload from COYOTE to personal/ will be placed in
  2220.                  E:\STOREF\COYOTE
  2221.  
  2222.  
  2223.    Similarly, if OWN_DOWNLOAD_DIR<>0, then the following entry is added to the
  2224.    user's .IN  file:
  2225.       Download_dir: Own_flag Own_download_dir\username
  2226.       For example:
  2227.            if OWN_DOWNLOAD_DIR='E:\MYOWN' (and E:\MYOWN exists),
  2228.                     and the username is COYOTE
  2229.                     and OWN_FLAG='PERSONAL'
  2230.            then the following entry is created,
  2231.                      Download_dir: PERSONAL  E:\MYOWN\COYOTE
  2232.            * a request (from COYOTE) for dir=personal will yield a listing of
  2233.              E:\MYOWN\COYOTE
  2234.            * a request for dir=personal/kids will yield a listing of
  2235.              E:\MYOWN\COYOTE\KIDS
  2236.  
  2237.  
  2238.   Notes:
  2239.    * In both of these examples, note that use of OWN_FLAG.  By default, it
  2240.      equals PERSONAL, but you can change it to suit your tastes.
  2241.  
  2242.    * If the "own_upload_dir\username" directory, or the
  2243.      "own_download_dir\username" directories to not exist, they will be
  2244.      created.
  2245.  
  2246.   *  These three parameters (OWN_DOWNLOAD_DIR, OWN_UPLOAD_DIR, and
  2247.      OWN_FLAG) are only used in "new user registrations". If you prefer,
  2248.      you can always hand-enter entries into the various .IN files -- in which
  2249.      case you can freely assign directory names (and "requested directory
  2250.      prefixes").
  2251.  
  2252.  
  2253. -- End of BBS documentation.
  2254.