LISTSERV historical documentation, release 1.5m ----------------------------------------------- Copyright Eric Thomas 1986,1987 +---------------------------------------------------------+ | Revised LISTSERV: File Server Functions | +---------------------------------------------------------+ | | | Document number: U01-006a-0 (October 17th, 1987) | | | | Document fileid: "LISTFILE MEMO" (from "Info FILEs") | +---------------------------------------------------------+ Preface This manual is an introductory guide to the file-server functions of LISTSERV that are available to general users. It applies solely to the Revised LISTSERV software (also known as FRECP11-LISTSERV). In particular, the functions described in this document do not neces- sarily apply to the NETSERV software unless otherwise specified. This document is designed to be used in conjunction with the Revised LISTSERV: User's Guide, (Document Number U01-001) and assumes basic knowledge of the LISTSERV functions available to general users. File owners should refer to the Revised LISTSERV: File Maintainer's Guide (Document number M01-008) for a more technical discussion of the internal format of filelist entries and a description of the privi- leged file-maintenance commands available to file owners. Conventions ----------- The following typographical conventions have been made in this docu- ment to improve its readability: | o Recent changes in the publication are indicated by a vertical bar | in the left margin. ! o Intermediate changes between two releases of the document ("Pre- ! releases") are flagged with an exclamation point in the left ! margin. Features described in this fashion should be considered ! as not documented and not officially supported until the exclama- ! tion point is removed. > o Temporary restrictions or circumventions are marked with a > "greater than" sign in the left margin. This sign may also be used > to signal obsolete features for which support will be dropped in > the next release. o This manual duplicates some parts of the Revised LISTSERV: User's Guide (Document Number U01-001) for easier reference. Those excerpts are delimited by runs of ">>>" and "<<<" signs. + + Paragraphs marked with a '+' sign in the left margin contain detailed + explanations for experienced users and can be skipped at first + reading. + **************** * Introduction * **************** Although the primary function of LISTSERV is to distribute mail and files to predefined distribution lists, it may often be desired to provide the subscribers of the list with a set of data or program files to be periodically maintained by a particular person or set of persons. Apart from the obvious example of list "notebooks" (archives), working groups might want to provide minutes of internal meetings held by some of the subscribers, technical groups might want to share application programs related to some software they are all using, etc. It was decided that the most convenient way of meeting these needs was to provide basic, non-specialized file-server functions along with the mail-processing functions of LISTSERV. Those functions would have to provide powerful yet list-based file access control and remote file updating facilities, under the control of both the list owner and the LISTSERV management. Automatic distribution of updated materials to subscribers was another major concern since it makes this distribution more efficient whenever the list is supported by more than one peer server, and relieves the file maintainer of the burden of preparing the list of subscribers - the users request such distribution directly from the server without any intervention from the file maintainer. It was decided that LISTSERV should conform to the well-implemented and well-accepted standard command set of the NETSERV file-server developped by Berthold Pasch for EARN. Commands should be similar enough so as not to confuse unexperienced users who switch from one type of server to the other, with additional commands or parameters being provided if needed. The LISTSERV commands should conform to the general LISTSERV conventions whenever there is a conflict between the LISTSERV and NETSERV commands, the best solution being of course to support both conventions to allow for application programs written for NETSERV to operate with LISTSERV with a minimal amount of changes. A presentation of the set of commands that were retained will follow. You should note that a significant number of these commands have the same syntax for LISTSERV and NETSERV and yet operate very differently on the two servers (the best example being the PW command). ************* * FILELISTs * ************* Several "file directories" (FILELISTs) were required to allow each list to have its own set of files, independently from the other lists, and to make it possible to hide the very existence of private files from those users who are not supposed to retrieve them. LISTSERV maintains a number of FILELISTs which can be nested in each other if needed. The "root" filelist is called LISTSERV FILELIST and is always maintained by the LISTSERV management. In UNIX terms, a FILELIST is a "directory"which can contain sub-directories (any level of nesting is allowed) and is defined upwards in the tree structure with the root being LISTSERV FILELIST. To review the contents of a filelist, you can either request it to be sent to you by means of the usual GET command (see later on) or use the special command INDEX as follows: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! INDex Sends you the specified filelist (defaults to LISTSERV FILELIST). This command is strictly equivalent to "GET filelist_name FILELIST" and has been made available for compatibility with other file servers on the network. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< LISTSERV filelists are almost fully compatible with the ones you may obtain from NETSERV. The header of the filelist will provide informa- tion about the contents of the filelist directory and a list of File Access Codes (FACs) which will be used later in the body of the filelist to identify who is authorized to retrieve the files or store them into the server. This FAC list is included between "banners" made of an asterisk, a blank and a full line of colons, and will usually have been commented by the maintainer of the filelist to provide more information as to whom the FACs refer to. The body of the filelist will contain file declarations, possibly interspersed with comment lines. Comment lines start with an asterisk in column one. The format of the file-declaration lines is as follows (column numbers have been given for easier reference by application programmers): +--------------------------------------------------------------------+ | 1 3 12 23 26 31 35 | | | | | | | | | | | filename filetype get put rfm lrecl | | SAMPLE FILE ALL CTL VP 106 | | | | 41 47 56 65 | | | | | | | | nrecs date time description | | 85 86/11/12 19:50:14 Dummy file | | | | Figure 1. File-definition line format | +--------------------------------------------------------------------+ filename is the 'name' of the file as it should appear in a GET command. filetype is the 'type' of the file as it should appear in a GET command. get is the FAC that controls read access to the file. That is, people who do not "meet" that FAC will not be able to issue GET commands for the file. put is the FAC that controls write access to the file. Usually points to the file maintainers. rfm is the record-format of the file. The first letter is either "V" for "Variable length records" or "F" for "Fixed length records", while the second letter will be set to "P" for "Packed format files" or left blank for non-packed files. Note that packed files will be automatically unpacked prior to being sent to you as a result of a GET command or Automatic File Distribution process; however, if you obtain a direct LINK to the disk on which they are stored, you will find them to be in packed format. nrecs is the number of records in the file. Files flagged with nrecs = 0 and dots in the other fields are not yet available but can be subscribed to or stored by their maintainer. date/time is the date the file was last updated, in yy/mm/dd format (this makes it easier to sort the filelist by date). Note that the process of updating the "date" field in a filelist causes the filelist itself to be flagged as changed and the corresponding date/time in its entry up the tree structure to be modified accordingly. ********************** * Ordering the files * ********************** The GET command --------------- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! GET fn ft Sends you the requested file provided you are authorized to retrieve it. Synonyms have been defined for the GETND, GETDD, ! GETPP, GETLP and GET80 commands of Netserv. "GETND xxxx" is translated to "GET xxxx F=Netdata", etc. Note that in this implementation, GETPP and GET80 are strictly equivalents and will cause the file to be sent in Listserv-Punch format if its logical record length is greater than 80. Send an "Info LPUNch" command to LISTSERV for more information about Listserv-Punch format. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< You can use the GET command, or its synonym SENDme, to request a file to be sent to you. You must specify the filename and filetype of the file as their appear in the filelist, and you may optionally append a third parameter to the command to indicate from which filelist you want the search for the file to start. This parameter is normally not required unless there is more than one file available from LISTSERV with the filename and filetype you are requesting. Application programs which issue GET commands to LISTSERV and know the filelist name should specify it since it speeds up the filelist search. The default is to start at the root filelist, of course. + + For security reasons, files with a filetype of "FILELIST" are always + sought from the root filelist, regardless of the filelist parameter + specified on the command. + ! The LISTSERV-standard "file-format"(F=fformat) and "file-class" ! (CLASS=fclass) keywords are supported on this command. Additionally, synonyms have been defined for the NETSERV GETxx (e.g. GETND, GETDD) commands. Note that the NETSERV GET80 format is not supported by LISTSERV; LISTSERV-Punch (refer to the "Revised LISTSERV: LISTSERV-Punch Implementation Guide" - Document Number R01-007 - for more details) format is substituted. The LISTSERV GET command is compatible with the NETSERV one, with the exception of: o The GET80 format restriction. ! o The addition of the optional file-format and file-class keywords. o The addition of the optional filelist-name parameter. > o The "prologtext" feature of NETSERV, which is not implemented in > the LISTSERV GET command. The GETALL command ------------------ ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! GETALL fn ft ! Sends you the requested file provided that you are ! either authorized to GET it (refer to the description ! of the GET command for more details), or you are ! authorized to PUT the filelist that defines it or any ! other filelist in the same branch up the tree ! structure. ! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ! The GETALL command allows filelist owners to retrieve files defined in ! a filelist that they can PUT, but which they are not allowed to access ! via the GET command because their File Access Codes prevent it. That ! is, whenever the command originator would be able to change the File ! Access Code that prevents him from retrieving the file by modifying ! the filelist in which it is defined, he is allowed to obtain the file ! directly by means of a GETALL command. + + o It should be noted that the GETALL command can be used in all + instances where the GET command would be accepted. Since the + syntax is identical, it can be systematically substituted to GET + whenever desired. You should note, however, that it takes a + significantly higher amount of processor time to LISTSERV to + process a GETALL command. You should therefore avoid using the + GETALL command on a regular basis, and give yourself GET authority + on all the files you plan to retrieve regularly. + o The GETALL command will only bypass the File Access Code access + restriction. If any File Access Verification Exit has been estab- + lished for the file, it will still receive control and might still + deny access to the file. + o The LISTSERV operation staff normally has PUT access over the root + filelist, LISTSERV FILELIST. This implies having GETALL access + over all the files stored on the local server. + The GIVE command ---------------- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> GIVE fn ft userid@node ! Sends the requested file to the specified userid, provided you would be authorized to retrieve it yourself by means of a GET command. The destination userid will receive a mail message saying that you requested the file to be sent to him. You will get a copy of all messages sent to him so that you are informed if some error occurs while sending the file. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ! The GIVE command allows you to request LISTSERV to send a file or ! package to another network user. This is very useful when you want to ! send a file to some user who is not authorized to retrieve it but who ! is topologically nearer to the server than to you. It also allows you ! to order files for people who are not able to issue the requests them- ! selves, for example people behind a one-way gateway which allows mail ! to be received but not sent out to LISTSERV. + + o The filelist maintainer has the option to disable the GIVE command + on a file-per-file basis. This will usually have been done for + confidential files or large files which should not leave the + server's node. + o For technical reasons, it is not possible to GIVE a LIST file: the + present inter-server command protocol does not allow a destination + address different from the command origin address, which would + make it impossible to consistently forward the GIVE request to + other servers. + ************ * Packages * ************ The term "package" refers to a set of program or data files which are supposed to be retrieved together under normal conditions. Provision has been made to allow users to retrieve those packages with a single command, and to subscribe to it as a whole with updated versions of only the individual changed files being sent out. The package exists independently of its individual components which can still be refer- enced separately. With each package is associated a dummy file and a definition file. The dummy file has a fileid of "package-name PACKAGE" and does not really exist. However, ordering this dummy file will cause the whole set of files to be sent to you. Similarly, subscribing to this single dummy file will result in a global subscription for all the components of the package. As a rule of thumb, the dummy file should be used whenever reference is made to the package as a whole. The definition file has a fileid of "package-name $PACKAGE" and lists the set of files that are contained in the package. Unlike the dummy file, it really exists and can be retrieved as any other normal file. It will usually list itself as the first file of the package so that you get a copy of it and you can check you have received all required files before starting to use the package. It may reference another package which is required for the package you ordered to be used (any level of nesting is allowed). If you subscribe to a package via Auto- matic File Distribution (qqv), you will automatically receive updated versions of all the corresponding sub-packages if they are updated. Similarly, ordering the package will cause all sub-packages to be sent to you. + + Application programmers wishing to parse the contents of a package + file should use the following algorithm: + o Blank lines and lines starting with an asterisk are comment lines + and should be ignored. + o Each non-comment line describes a file which belongs to the + package. The first two words of the line are the (mandatory) + filename and filetype, the third word is the optional filelist, + and all remaining words are optional comments which should be + ignored. The program should be able to handle any number of + blanks between words as well as before the first word in the line. + ************* * Notebooks * ************* LISTSERV is able to automatically keep notebooks for a list if the list owner so desires. Those notebooks are listed in a special filelist called "NOTEBOOK FILELIST", which is automatically maintained by the server according to the parameters specified in the headers of ! its various lists. They will also be automatically appended to the ! corresponding "listname FILELIST"(if it exists) so as to make it ! possible to get a listing of all archive files kept for a particular ! list without having to retrieve the whole NOTEBOOK FILELIST. If no ! "listname FILELIST" has been prepared by the list owner, LISTSERV will ! automatically create a dummy one with no file-definition entries other ! than the ones for the notebook files kept for the list. This dummy ! filelist can be retrieved or subscribed to (via the AFD and FUI ! commands) as if it were a normal filelist. ! The NOTEBOOK FILELIST can be subscribed to via FUI, but its retrieval ! has been restricted to registered Node Administrators (NADs) as it is ! usually a very large file prone to generate significant network ! traffic. The files listed in the NOTEBOOK filelist are just like normal files and can be retrieved as indicated by their GET File Access Code. They can be subscribed to as normal files, and can even be modified or deleted by their owners, as indicated by their PUT FAC (which usually points to the list owners). However, once such a file has been deleted, it will disappear permanently from the filelist, unlike a normal file which would be forced to nrecs = 0 but would remain listed. + + Any archive file can be ordered either as "filename filetype listname" + or as "filename filetype NOTEBOOK". The two syntaxes will produce + strictly equivalent results, regardless of whether the NOTEBOOK + filelist has been made available to general users by the local LIST- + SERV management or not. However, it is recommended that the latter + form be preferred in application programs as it will result in better + response time from the server: the NOTEBOOK filelist always denotes + list archive files whereas the listname filelist might contain other + files, which makes it impossible to optimize the search algorithm. + ************************************* * Appendix A. The LISTSERV Library * ************************************* o User's guide . . . . . . . . . . . . . . . . . . . . (U01-001) o List Manager's guide . . . . . . . . . . . . . . . . (M01-002) o Installation guide . . . . . . . . . . . . . . . . . (S01-003) o Application Programmer's guide . . . . . . . . . . . (A01-004) o Maintenance guide . . . . . . . . . . . . . . . . . . (S01-005) --> o File Server Functions . . . . . . . . . . . . . . . . (U01-006) o Listserv-Punch Implementation . . . . . . . . . . . . (R01-007) o File Maintainer's guide . . . . . . . . . . . . . . . (M01-008) o BITNET-Oriented Presentation . . . . . . . . . . . . (P01-009) o Public Utilities Reference . . . . . . . . . . . . . (A01-010) o Licensed Utilities Reference . . . . . . . . . . . . (S01-011) o Database Functions . . . . . . . . . . . . . . . . . (U01-012) LISTSERV Document Numbers ------------------------- U 01 - 006 - 0 _ __ ___ _ | | | | Document Class -----------+ | | | | | | | | | | | | Product Number --------------+ | | | | | | | | Publication Number -------------------+ | | | | Revision Number ------------------------+ Document Class The Document Class indicates for which category of persons the publi- cation was written. The current classes are: A Documents intended for Application Programmers. These publica- tions are usually very technical. M Documents intended for Software Managers, i.e. operators, "list owners", "file maintainers", et al. P General Presentation documents intended for persons who do not have any particular knowledge in the product. These are gener- ally non-technical documents. R Reference documents defining protocols used by the product. These documents are very technical and are intended for people who have to write interfaces for the product or attempt to port it to an operating system or environment for which it was not originally written. S Documents intended for Systems Programmers, i.e. the persons responsible for the installation and operation of the product. U Documents intended for General Users. Product Number The Product Number is a unique number associated with the product to which the publication relates. Number 01 refers to LISTSERV, number 02 corresponds to the NETINFO sub-product, etc. Publication Number This is a unique number associated with the publication. Publication Numbers are assigned sequentially, disregarding the Document Class. There is a different set of Publication Numbers for each product. Revision Number This number is incremented at every release change in the publication. Fractional numbers indicate intermediate changes between two releases.