home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume34 / mserv / part02 < prev    next >
Encoding:
Text File  |  1993-01-05  |  59.0 KB  |  1,778 lines

  1. Newsgroups: comp.sources.misc
  2. From: jv@squirrel.mh.nl (Johan Vromans)
  3. Subject: v34i093:  mserv - Squirrel Mail Server Software, version 3.1, Part02/06
  4. Message-ID: <1993Jan7.034749.11553@sparky.imd.sterling.com>
  5. X-Md4-Signature: 283b7d93bee784d971a0bc194f7430bc
  6. Date: Thu, 7 Jan 1993 03:47:49 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: jv@squirrel.mh.nl (Johan Vromans)
  10. Posting-number: Volume 34, Issue 93
  11. Archive-name: mserv/part02
  12. Environment: Perl
  13. Supersedes: mserv-3.0: Volume 30, Issue 46-49
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # Contents:  mserv-3.1/HELP mserv-3.1/MANIFEST mserv-3.1/pr_dowork.pl
  20. # Wrapped by kent@sparky on Wed Jan  6 21:39:45 1993
  21. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  22. echo If this archive is complete, you will see the following message:
  23. echo '          "shar: End of archive 2 (of 6)."'
  24. if test -f 'mserv-3.1/HELP' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'mserv-3.1/HELP'\"
  26. else
  27.   echo shar: Extracting \"'mserv-3.1/HELP'\" \(40399 characters\)
  28.   sed "s/^X//" >'mserv-3.1/HELP' <<'END_OF_FILE'
  29. XAuthor:     Johan Vromans 
  30. XCmpny:      SQS 
  31. XCompany:    Squirrel Software 
  32. XDept.:      Public Domain 
  33. XProject:    Squirrel Mail Server 
  34. XTitle:      Squirrel Mail Server
  35. X            User Guide 
  36. XVersion:    V3.01 
  37. X----------------------------------------
  38. X
  39. X1.    INTRODUCTION: THE MAIL SERVER 
  40. X
  41. X      The mail server is a mail response program. This means that you 
  42. X      can send it an email message, and the program will read this 
  43. X      message, extracts commands from it, and execute these commands if 
  44. X      no errors were encountered. 
  45. X
  46. X      The main purpose of the mail server is to handle requests for 
  47. X      files in archives. By sending a request for a file, the mail 
  48. X      server will look it up and send the requested file to the 
  49. X      originator of the request, either via email or via UUCP. 
  50. X
  51. X      When files are transferred via email, binary files (e.g. 
  52. X      compressed archives) are encoded using one of several popular 
  53. X      encoding schemes. Big files are split into pieces to avoid mailer 
  54. X      limits. 
  55. X
  56. X      The algoritms of the mail server are designed to satisfy user 
  57. X      requests as much as possible, without taking the risk that 
  58. X      unwanted information is sent. 
  59. X
  60. X      IMPORTANT:   This document describes the mail server software in
  61. X                   its generic form. Every site that implements the
  62. X                   mail server software can add or disable
  63. X                   functionalities, change defaults etc.. Consult the
  64. X                   information provided by the mail server HELP command
  65. X                   for an actual list of commands and options.
  66. X
  67. X2.    BASIC USE 
  68. X
  69. X      To request a file from the server send an email message with the 
  70. X      following contents: 
  71. X
  72. X            SEND filename
  73. X
  74. X      This will have the requested file sent via email to the originator 
  75. X      of the mail message. Encoding, if needed, will be performed to 
  76. X      protect binary contents of the file from ASCII-based email 
  77. X      systems. BEGIN and END can be used to protect the request from 
  78. X      anything else in the mail message, e.g. a signature: 
  79. X
  80. X            BEGIN
  81. X            SEND filename
  82. X            END
  83. X            .signature follows.....
  84. X
  85. X      If your system has a direct UUCP connection to the server system, 
  86. X      you can transfer requests via UUCP. Using UUCP to transfer 
  87. X      requests has a number of advantages: it eliminates the overhead 
  88. X      (and limits) of email systems, and the information need not be 
  89. X      encoded. In general, this will cut down the transfer time 
  90. X      (connection) with 30-50%. If your UUCP supports grades, UUCP 
  91. X      transfers can be postponed to cheap hours. 
  92. X
  93. X      To receive a file via UUCP, use the following commands: 
  94. X
  95. X            UUCP host!path user
  96. X            SEND filename
  97. X
  98. X      This will have all requested files transferred via UUCP to the 
  99. X      designated host!path. It is equivalent to the Unix command: 
  100. X
  101. X            uucp -d -r -nuser host!path/filename
  102. X
  103. X      NOTE:  It is your own responsibility that the supplied path is
  104. X             accessible for UUCP transfers to your system!
  105. X
  106. X      If you issue the UUCP command without arguments, the program will 
  107. X      try to intuit some defaults from the message headers. 
  108. X
  109. X      If the mail server has been configured with support for FTP, you 
  110. X      can issue commands like: 
  111. X
  112. X            SEND host:filename
  113. X
  114. X      The mail server will attempt to retrieve the file using anonymous 
  115. X      FTP, and send it to you. 
  116. X
  117. X3.    THE SERVER'S ARCHIVES 
  118. X
  119. X      Files are stored in the archives in one of the following formats: 
  120. X
  121. X      Plain          Normal ASCII text.
  122. X
  123. X      Shell Archive  ASCII files which can be unloaded using the
  124. X                     Unix sh(1) program.
  125. X                     Shell Archives have names ending in ".shar".
  126. X
  127. X      Compressed     16-bit compression using the compress(1) utility.
  128. X                     Compressed files have names ending in ".Z".
  129. X
  130. X      Tar            Standard Unix tar(1) format.
  131. X                     Tar archives have names ending in ".tar".
  132. X
  133. X      Compressed Tar Compressed tar archive.
  134. X                     Compressed tar archives have names ending in
  135. X                     ".tar.Z" or ".TZ".
  136. X
  137. X      Zoo            Standard 'zoo' format.
  138. X                     These files have names ending in ".zoo".
  139. X
  140. X      Zip            Standard 'zip' format.
  141. X                     These files have names ending in ".zip".
  142. X
  143. X      When requesting a file you do not have to specify the 
  144. X      format-specific extension. A request for a file 'foo' will 
  145. X      automatically be changed to 'foo', 'foo.tar', 'foo.shar', etc, 
  146. X      whichever is available. 
  147. X
  148. X      Additional formats may be added. 
  149. X
  150. X4.    MAIL SERVER COMMANDS 
  151. X
  152. X4.1   Command syntax 
  153. X
  154. X      A command consists of a keyword (verb), followed by zero or more 
  155. X      arguments, depending on the command. Command verbs may be 
  156. X      specified in all uppercase letters, lowercase or whatever mixed 
  157. X      case. In other words: case is not significant in command verbs. 
  158. X      Case *IS* significant in command arguments, e.g. file names. Empty 
  159. X      lines are ignored. 
  160. X
  161. X      Multiple commands can be specified on a line by separating them 
  162. X      with semi-colons. Commands can be continued over multiple lines by 
  163. X      adding a backslash in the last position of the line. This causes 
  164. X      the next line of input to be glued to the end of the current line. 
  165. X      The backslash and all leading space of the next line are removed. 
  166. X
  167. X      Some commands have aliases, others allow for noise words (e.g. 
  168. X      "MAIL TO <user>"). 
  169. X
  170. X4.2   Command classes 
  171. X
  172. X      Commands are divided into the following classes: 
  173. X
  174. X      *  Commands that select the destination, e.g. where replies should 
  175. X         be sent to, and how the requested files should be delivered. 
  176. X
  177. X      *  Commands that specify transfer parameters, e.g. the maximum 
  178. X         amount of data to transfer, and what encoding to use. 
  179. X
  180. X      *  Commands that request for files, directory information, and 
  181. X         index lookups. 
  182. X
  183. X      *  Commands that deal with FTP. 
  184. X
  185. X4.3   Command processing 
  186. X
  187. X      When processing an input message, the mail server performs the 
  188. X      following actions: 
  189. X
  190. X      1. Parse the headers of the incoming message, and extract 
  191. X         information about the sender. 
  192. X
  193. X      2. Parse the commands in the message. If errors are found, supply 
  194. X         a short help message and quit. 
  195. X
  196. X      3. Execute the commands. Files are looked up in the archives, or 
  197. X         retrieved via FTP. 
  198. X
  199. X      4. Enqueue the requested files for delivery, and send a feedback 
  200. X         message to notify the user. This feedback message will show the 
  201. X         results of FTP commands, directory information, index lookups, 
  202. X         and a list of files to be delivered. 
  203. X
  204. X      5. Perform the actual delivery. Execution of this phase can be at 
  205. X         a later time, e.g. when the system load is acceptable. 
  206. X
  207. X4.4   Destination selection 
  208. X
  209. X      One or more of the following commands must be issued before any 
  210. X      request command. 
  211. X
  212. X4.4.1 REPLY <address> 
  213. X
  214. X      The return address used by the server is set to the indicated 
  215. X      <address>. This must be a valid address by which you can be 
  216. X      reached. It should contain a domain-based address. Use this 
  217. X      command if you are not sure that the return addresses generated by 
  218. X      your mail system are reliable. The address specified with this 
  219. X      command will be used by the server to confirm receipt. 
  220. X
  221. X      The REPLY command is ignored in interactive mode. 
  222. X
  223. X      Alias for REPLY is PATH. It is allowed (but not encouraged) to 
  224. X      insert the word "to" after REPLY or PATH. 
  225. X
  226. X4.4.2 UUCP [ [<host>!]<path> ] [ <user> ] 
  227. X
  228. X      The mail server will transfer requests to the indicated host using 
  229. X      UUCP. The host must be known to the server system. Requests will 
  230. X      be transferred to the indicated <path>. UUCP notification messages 
  231. X      will be send to <user>. If missing, the <host> and <user> 
  232. X      information is extracted from the UUCP 'From' header. <path> 
  233. X      defaults to ~uucp/receive/<user> . 
  234. X
  235. X      It is allowed (but not encouraged) to insert the word "to" after 
  236. X      UUCP. 
  237. X
  238. X      The UUCP command is only available if the mail server software has 
  239. X      been installed with UUCP support. 
  240. X
  241. X      NOTE:  If not in interactive mode, only one UUCP or MAIL
  242. X             command may be issued.
  243. X
  244. X4.4.3 MAIL <address> 
  245. X
  246. X      The mail server will transfer requests to the indicated address 
  247. X      using e-mail. This is the default transfer method for the server. 
  248. X      You must specify a valid (preferable domain-based) address by 
  249. X      which you can be reached. 
  250. X
  251. X      If no UUCP or MAIL command has been issued, requests will be sent 
  252. X      to the recipient as specified by a REPLY command, or dereived from 
  253. X      the mail headers. 
  254. X
  255. X      It is allowed (but not encouraged) to insert the word "to" after 
  256. X      MAIL. 
  257. X
  258. X      The MAIL command is only available if the mail server software has 
  259. X      been installed to support it. 
  260. X
  261. X      NOTE:  If not in interactive mode, only one UUCP or MAIL
  262. X             command may be issued.
  263. X
  264. X4.5   Transfer parameters 
  265. X
  266. X      These parameters may be set as often as needed. Setting transfers 
  267. X      parameters affects only requests that follow these commands. 
  268. X
  269. X4.5.1 LIMIT [<number>] 
  270. X
  271. X      Specify the maximum number of Kbytes which may be sent in a single 
  272. X      transfer. Requests that exceed this amount will be split before 
  273. X      sending. The amount may be specified with a trailing K, e.g. 
  274. X      "30K", but this is not needed. "30" is equivalent to "30K". 
  275. X
  276. X      If <number> is omitted, the limit is set to its default value. The 
  277. X      default value is 64K for email and 256K for UUCP, however, these 
  278. X      values may be changed upon installation. 
  279. X
  280. X      NOTE:  Due to overhead, it is possible that the size of the
  281. X             mail which reaches you will (slightly) exceed this limit.
  282. X
  283. X4.5.2 ENCODING, UUENCODE, XXENCODE, UUE, BTOA 
  284. X
  285. X      The requested files will be encoded using the indicated encoding 
  286. X      method. You can preceede the encoding verb with ENCODING if you 
  287. X      like. 
  288. X
  289. X      The following encoding verbs are understood. 
  290. X
  291. X      UUENCODE     Basic Unix uuencode. Decode with 'uudecode'.
  292. X
  293. X      XXENCODE     Enhanced version of uuencode. Decode with 'xxdecode'.
  294. X
  295. X      UUE          Dumas' enhanced uuencoding.
  296. X                   Multiple parts can be automatically joined when
  297. X                   decoding with 'uud'.
  298. X
  299. X      BTOA         Binary to Ascii encoding. Uses checksums to verify
  300. X                   integrity of the data. Decode with 'atob'.
  301. X
  302. X      Each of these commands is only available if the mail server 
  303. X      software has been configured to support it. 
  304. X
  305. X      The BTOA encoding is most efficient and reliable. 
  306. X
  307. X      Usually, for all supported encoding methods the associated tools 
  308. X      can be retrieved from the mail server. 
  309. X
  310. X      UUDECODE can be used as an alias for UUENCODE, UUD for UUE etc. 
  311. X      The following commands all set the encoding to binary to ascii: 
  312. X
  313. X            BTOA
  314. X            ATOB
  315. X            ENCODING BTOA
  316. X            ENCODE ATOB
  317. X
  318. X4.5.3 CWD [<path>] 
  319. X
  320. X      Sets (or cancels) the current working directory for subsequent 
  321. X      commands. The current working directory is prepended to the 
  322. X      arguments of SEND, RESEND and DIR commands, e.g. the following two 
  323. X      commands are equivalent: 
  324. X
  325. X            CWD foo; SEND bar
  326. X            SEND foo/bar
  327. X
  328. X      For compatibility with another brand of info server software, 
  329. X      REQUEST is accepted as an alias for CWD. For example, the 
  330. X      following three commands are all equivalent: 
  331. X
  332. X            REQUEST foo; TOPIC bar
  333. X            CWD foo; SEND bar
  334. X            SEND foo/bar
  335. X
  336. X      NOTE:  CWD commands do not nest, e.g. after "CWD foo; CWD bar"
  337. X             the current directory will be "bar", not "foo/bar".
  338. X
  339. X4.6   Request commands 
  340. X
  341. X      The following commands request for information. This can be a file 
  342. X      to be retrieved, or the contents of a specific directory. Other 
  343. X      commands return more general information about the files in the 
  344. X      server's archives. 
  345. X
  346. X4.6.1 INDEX [<item>] 
  347. X
  348. X      The specified <item> is looked up in the server archives. If 
  349. X      found, a list of all items that match the request is returned. For 
  350. X      example, "INDEX gcc" will return a list of every item in the 
  351. X      server archives that has "gcc" in its name or path. The INDEX 
  352. X      command is like a Unix grep(1) on a list of files, but it does not 
  353. X      support regular expressions patterns. 
  354. X
  355. X      INDEX without arguments will request for a file INDEX in the 
  356. X      archives, if present. 
  357. X
  358. X      Since index requests can return a huge amount of information, the 
  359. X      number of lines returned is limited to (usually) a few houndred 
  360. X      lines. 
  361. X
  362. X      Index lookup is only available if the mail server software has 
  363. X      been configured to support it. 
  364. X
  365. X4.6.2 SEARCH <item> 
  366. X
  367. X      The specified <item> is looked up in the server archives. If 
  368. X      found, a list of all items that match the request is returned. 
  369. X      SEARCH is more limited than INDEX. It returns only archive entries 
  370. X      that are eligible to be found by a SEND command. This can be used 
  371. X      to find out which versions of a specific package can be found on 
  372. X      the server, and where. 
  373. X
  374. X      For example, "SEARCH gcc" will return a list of every item in the 
  375. X      server archives that has a name that starts with "gcc", followed 
  376. X      by something that looks like a version number, and ends with 
  377. X      ".tar.Z" or some other predefined extension. 
  378. X
  379. X4.6.3 DIR [<path>] 
  380. X
  381. X      Returns the list of files in <path>. The current directory will 
  382. X      the prepended to <path>. 
  383. X
  384. X      If the amount of information does not exceed a specific limit, the 
  385. X      information is included in the feedback message. Otherwise it is 
  386. X      send as a separate file. 
  387. X
  388. X      Aliases for DIR are LIST and LS. 
  389. X
  390. X4.6.4 SEND <item> [<item>...] 
  391. X
  392. X      The specified <item>s are looked up in the server archives. If 
  393. X      found, they will be sent to you. Multiple items may be specified 
  394. X      with one SEND command. 
  395. X
  396. X      If looking up the named item returns multiple possibilities, the 
  397. X      SEND request will be treated as a SEARCH, i.e. a list of 
  398. X      possibilities is returned instead. 
  399. X
  400. X      For compatibility with another brand of info server software, 
  401. X      TOPIC is accepted as an alias for SEND. For example, the following 
  402. X      two commands are equivalent: 
  403. X
  404. X            REQUEST foo; TOPIC bar
  405. X            SEND foo/bar
  406. X
  407. X      NOTE:  The names of the <item>s are case sentive!
  408. X
  409. X      If the mail server has been configured to support it, it is 
  410. X      possible to request for a compressed file (file.Z), even if the 
  411. X      file exists in the archives in uncompressed form. The mail server 
  412. X      will compress the file automatically before transfer. 
  413. X
  414. X      Another configuration option is automatic packing of directories. 
  415. X      If you want the contents of a directory (and all its 
  416. X      subdirectories), request the directory name suffixed by '.zip', 
  417. X      '.zoo' or '.tar.Z'. See also the PACK command described below. The 
  418. X      restrictions for the PACK command also apply to the automatic 
  419. X      packing feature. 
  420. X
  421. X4.6.5 RESEND <item> <part> [<part>...] 
  422. X
  423. X      Re-send the indicated <part>s of this item. This is useful if not 
  424. X      all parts of a multi-part transmission did arrive correctly. When 
  425. X      re-transmitting, the encoding and limit used must be identical to 
  426. X      those of the original transmission. 
  427. X
  428. X4.6.6 PACK <method> 
  429. X
  430. X      Subsequent SEND requests must select directories. 
  431. X
  432. X      This directory will be packed into a file using the indicated 
  433. X      method, and transferred. <method> may be "tar", "zoo" or "zip". If 
  434. X      <method> is "off", subsequent request are treated normally. 
  435. X      <method> "tar" means "compressed tar". 
  436. X
  437. X      The PACK command is only available if the mail server software has 
  438. X      been configured to support it. The same restriction applies to the 
  439. X      packing methods. 
  440. X
  441. X      NOTE:  A limit (usually 2Mb) is imposed on the total size of the
  442. X             files in the directories.
  443. X
  444. X4.7   Implicit FTP commands 
  445. X
  446. X      If the mail server has been configured to support FTP, the 
  447. X      following extensions to the standard commands are available. 
  448. X
  449. X      Note that intelligent lookup of archive entries, using directory 
  450. X      search and index files, are *NOT* available when accessing 
  451. X      archives via FTP. 
  452. X
  453. X      As an configuration option, the mail server can restrict FTP 
  454. X      commands to requests that are going to be delivered via UUCP only. 
  455. X
  456. X4.7.1 SEND <host>:<file> [<file>...] 
  457. X
  458. X      A connection to the indicated <host> is established, the named 
  459. X      <file>s are retrieved and queued for transfer. 
  460. X
  461. X4.7.2 RESEND <host>:<file> <parts> 
  462. X
  463. X      A connection to the indicated <host> is established, the named 
  464. X      <file> is retrieved, and the selected parts are queued for 
  465. X      transfer. 
  466. X
  467. X4.7.3 DIR <host>:<dir> 
  468. X
  469. X      A list of files in the named <dir> is retrieved from <host>. 
  470. X      Depending on the amount of information, the list is shown or 
  471. X      queued for transfer. 
  472. X
  473. X4.8   Explicit FTP commands 
  474. X
  475. X      If the mail server has been configured to support FTP, the 
  476. X      following additional commands are available. 
  477. X
  478. X      As an configuration option, the mail server can restrict FTP 
  479. X      commands to requests that are going to be delivered via UUCP only. 
  480. X
  481. X4.8.1 FTP OPEN <host> 
  482. X
  483. X      Subsequent requests will be executed on the named <host>. If 
  484. X      already connected to a system, this connection will be closed, 
  485. X      unless it is the same system, in which case nothing will be done. 
  486. X
  487. X      If no login information has been supplied, the mail server will 
  488. X      attempt anonymous FTP. 
  489. X
  490. X      If an FTP connection is active, all subsequent SEND, RESEND, CWD 
  491. X      and DIR commands apply to this system. 
  492. X
  493. X      NOTE:  Some FTP servers enforce additional restrictions if the
  494. X             password supplied is not a recognized email address. In
  495. X             case of doubt, specify your correct address in a REPLY
  496. X             command first.
  497. X
  498. X4.8.2 FTP CLOSE 
  499. X
  500. X      Close the current connection. 
  501. X
  502. X4.8.3 FTP USER <user> <password> 
  503. X
  504. X      Supply FTP login information. This command must be executed before 
  505. X      opening the connection to the desired system. 
  506. X
  507. X      If it is needed to change login information for the current host, 
  508. X      issue an explicit "FTP CLOSE" before re-opening the connection. 
  509. X
  510. X4.9   Mixing FTP and non-FTP commands 
  511. X
  512. X      It is allowed to mix implicit FTP, explicit FTP and non-FTP 
  513. X      commands, e.g.: 
  514. X
  515. X            [1]  FTP USER anonymous me@somewhere.com
  516. X            [2]  SEND foo
  517. X            [3]  SEND bar:blech
  518. X            [4]  FTP export.lcs.mit.edu
  519. X            [5]  SEND zup
  520. X
  521. X      This will [1] set FTP login information, [2] transfer file 'foo' 
  522. X      from the local archives, [3] open an FTP connection to system 
  523. X      'bar' using the login information from [1] and transfer file 
  524. X      'blech', [4] open a connection to system 'export.lcs.mit.edu' 
  525. X      using the login information from [1], and finally [5] retrieve 
  526. X      file 'zup' from 'export.lcs.mit.edu'. 
  527. X
  528. X4.10  ARCHIE commands 
  529. X
  530. X      If the mail server has been configured to support access to the 
  531. X      popular 'archie' service, the following command is available. 
  532. X
  533. X4.10.1 ARCHIE PROG <request> 
  534. X
  535. X      This will connect to the archie server, and lookup <request>. 
  536. X      <request> must be a valid (Unix) regular expression pattern. 
  537. X
  538. X4.11  Miscellaneous commands 
  539. X
  540. X4.11.1 HELP 
  541. X
  542. X      This command gives a brief list of server commands. The 
  543. X      information will reflect the actual functionality of the mail 
  544. X      server. E.g. FTP commands will only be included if the server 
  545. X      supports it, defaults shown will be the actual defaults used, etc. 
  546. X
  547. X      A HELP command will be implied if errors are detected while 
  548. X      parsing the commands. 
  549. X
  550. X      Note that this is NOT the same as the "SEND HELP" command. The 
  551. X      latter command will send this document. 
  552. X
  553. X4.11.2 COMPRESS 
  554. X
  555. X      This command is only included for compatibility with some other 
  556. X      mail servers. It is ignored. 
  557. X
  558. X      If you request 'file.Z' the mail server will automatically 
  559. X      compress an uncompressed version of this file. 
  560. X
  561. X4.11.3 TEST 
  562. X
  563. X      This command is for testing. No files will be sent if you use 
  564. X      this, but a confirmation message will be sent to the return path 
  565. X      as determined from the mail headers or the REPLY command. You may 
  566. X      use this to find out if your address is valid, and to check the 
  567. X      status of your request. 
  568. X
  569. X4.11.4 BEGIN 
  570. X
  571. X      Ignore anything above this line, and start looking for commands. 
  572. X      This command can be used to discard incorrect responses, errors 
  573. X      etc. that may result from input that was not directed to the mail 
  574. X      server itself. 
  575. X
  576. X      Alias for BEGIN is RESET. 
  577. X
  578. X      The BEGIN command is ignored in interactive mode. 
  579. X
  580. X4.11.5 END 
  581. X
  582. X      The remainder of the message is ignored. This can be useful if a 
  583. X      .signature is appended to the message. 
  584. X
  585. X      For best results: always embody your commands between BEGIN and 
  586. X      END. 
  587. X
  588. X      Aliases for END are EXIT and QUIT. 
  589. X
  590. X5.    SAMPLE MAIL SERVER REPORT (EMAIL TRANSFER) 
  591. X
  592. X      Assume the following message is sent to the mail server: 
  593. X
  594. X            mail jv@mh.nl
  595. X            btoa
  596. X            index bio
  597. X            search bio
  598. X            send bio HELP
  599. X            resend zoo 2 3 4
  600. X            send foo
  601. X            dir gnu
  602. X            end
  603. X
  604. X      This will generate the following report: 
  605. X
  606. X                 From: mserv (Mail Server)
  607. X            [1]  To: jv@pasta.mh.nl
  608. X                 Subject: Request by jv
  609. X                 Date: Sun, 6 Dec 92 16:05 MET
  610. X            
  611. X                 Processing UUCP header ...
  612. X            [2a] => Default return address (UUCP): "pasta!jv"
  613. X            
  614. X                 Processing mail headers ...
  615. X            [2b] => Default return address: "jv@pasta.mh.nl"
  616. X            
  617. X                 Processing message contents...
  618. X            
  619. X                 Command: mail jv@mh.nl
  620. X            [3]  => Transfer via email to "jv@mh.nl"
  621. X            
  622. X                 Command: btoa
  623. X                 => Encoding = B (btoa)
  624. X            
  625. X                 Command: index bio
  626. X                 => Index: bio
  627. X            
  628. X                 Command: search bio
  629. X                 => Search: bio
  630. X            
  631. X                 Command: send bio HELP
  632. X                 => Send: bio
  633. X                 => Send: HELP
  634. X            
  635. X                 Command: resend zoo 2 3 4
  636. X                 => Resend: zoo, part 2,3,4
  637. X            
  638. X                 Command: send foo
  639. X                 => Send: foo
  640. X            
  641. X                 Command: dir gnu
  642. X                 => Dir: gnu
  643. X            
  644. X                 Command: end
  645. X                 => Okay
  646. X            
  647. X                 Your message has been processed.
  648. X            
  649. X            [4]  Index results:
  650. X            
  651. X                    Date     Size   Index: bio
  652. X                  --------  -----   ---------------------------------
  653. X                  91/07/10     2K   bio-2.4/Makefile
  654. X                  91/07/06     3K   bio-2.4/README
  655. X                  91/07/09    14K   bio-2.4/bio.diffs
  656. X                  91/07/09    36K   bio-2.4/bio.tar.Z
  657. X                  91/07/09    36K   bio-2.4/bio-2.4.tar.Z
  658. X                  89/12/16     4K   fastio/stubio.c
  659. X            
  660. X            [5]  Search results:
  661. X            
  662. X                    Date     Size   Search: bio
  663. X                  --------  -----   ---------------------------------
  664. X                  91/07/09    36K   bio-2.4/bio.tar.Z
  665. X                  91/07/09    36K   bio-2.4/bio-2.4.tar.Z
  666. X            
  667. X            [6]  Request "bio" is ambiguous:
  668. X            
  669. X                    Date     Size   Search: bio
  670. X                  --------  -----   ---------------------------------
  671. X                  91/07/09    36K   bio-2.4/bio.tar.Z
  672. X                  91/07/09    36K   bio-2.4/bio-2.4.tar.Z
  673. X            
  674. X            [7]  Result from Dir gnu:
  675. X                  -rw-r--r--  1 jv  935533 Feb 13  1992 bash-1.12.tar.Z
  676. X                  drwxr-xr-x  2 jv    1024 Nov  8 14:40 emacs
  677. X                  -rw-r--r--  1 jv  229551 Aug 17 15:45 find-3.7.tar.Z
  678. X                  drwxr-xr-x  3 jv     512 Dec  5 16:55 gcc
  679. X                  drwxr-xr-x  2 jv     512 Oct 28 23:49 gdb
  680. X                  drwxr-xr-x  3 jv     512 May 28  1992 uucp
  681. X            
  682. X            [8]  Request results:
  683. X            
  684. X                  Request           Size  Enc  Limit Status
  685. X                  ---------------- -----  ---  ----- -------
  686. X                  bio                                Ambiguous
  687. X                  HELP                11K  B     64K Queued
  688. X                  zoo-2.1/zoo.TZ     171K  B     64K Queued (parts 2 3 4 only)
  689. X                  foo                                Unknown
  690. X            
  691. X                 Encoding B means: encoded with btoa.
  692. X            
  693. X                 The requests with status "Queued" will be sent as soon as
  694. X                 the load of the server system permits, usually within 24 hours.
  695. X            
  696. X                 Mail Server finished.
  697. X
  698. X      As you can see, the return mail is sent to the address [1] 
  699. X      extracted from the UUCP [2a] and mail headers [2b]. A return 
  700. X      address found in the mail headers overrides the address dereived 
  701. X      from the UUCP header. A REPLY command could have been used to 
  702. X      supply a different address. 
  703. X
  704. X      The MAIL command [3] instructs the server to send the requests via 
  705. X      email to the given address. If the MAIL command had not been 
  706. X      issued, the address from the message header [2] would have been 
  707. X      used. 
  708. X
  709. X      The result from the INDEX command [4] returns info for every file 
  710. X      in the archives that have "bio" in its name or path. 
  711. X
  712. X      The result from the SEARCH command [5] returns info for every file 
  713. X      in the archives that that is likely to be a selectable archive 
  714. X      item. 
  715. X
  716. X      Since more than one file matches the request for "bio", it is 
  717. X      turned into a SEARCH command [6]. 
  718. X
  719. X      The output of the DIR commands is shown here [7]. 
  720. X
  721. X      In the list of requests [8] the size and encoding of the files are 
  722. X      shown. Note that the size is the size *before* encoding! Request 
  723. X      "foo" could not be found and is skipped. 
  724. X
  725. X      Some time later the following mails will arrive: 
  726. X
  727. X            From               Size      Subject
  728. X            --------------   ---------   ----------------------------------
  729. X            Mail Server      298/10175   "HELP (complete) ascii"
  730. X            Mail Server      829/65453   "zoo.TZ (part 2 of 4) btoa encoded"
  731. X            Mail Server      829/65453   "zoo.TZ (part 3 of 4) btoa encoded"
  732. X            Mail Server      325/25578   "zoo.TZ (part 4 of 4) btoa encoded"
  733. X
  734. X      Files which are sent in parts have all pieces clearly marked as 
  735. X      such: 
  736. X
  737. X            ------ begin of zoo.TZ -- btoa encoded -- part 2 of 4 ------
  738. X            #(_0M#C)R-&3BEIu9#I[oEFn;50r5kb6%CJq%=NMgE3in`tMpnX0rOEYPWNM...
  739. X            =69S\PiSodA"*lArTZ.-(g6DL2A6_5>DMuFV/&S7H/]XEgLe(l@e;-Rqr:iZ...
  740. X            ...
  741. X            ...
  742. X            $`eP&iGea"a#e[F!oeo1r@U/FP;::i"V)j_EW+.(U*&IrTJ+u'9=$MY7s*CC...
  743. X            uI=a5*Wj^#1LD,&>MZKY@H1_a9QE$$4[+?[ePhh"h2Ub"/a,(ES*ZH"nK"6d...
  744. X            ------ end of zoo.TZ -- btoa encoded -- part 2 of 4 ------
  745. X
  746. X      You have to cut the information between the 'begin' and 'end' 
  747. X      lines, glue them together in the right order, and feed it to the 
  748. X      appropriate decoding program. 
  749. X
  750. X      The program 'unpack.pl', available from the mail server, can be 
  751. X      used to unpack multi-part transfers. 
  752. X
  753. X6.    SAMPLE MAIL SERVER REPORT (UUCP TRANSFER) 
  754. X
  755. X      Assume the following message is sent to the mail server: 
  756. X
  757. X            uucp pasta!~uucp/receive/jv jv
  758. X            limit 64K
  759. X            send bio-2.4
  760. X            resend zoo 2 3 4
  761. X            end
  762. X
  763. X      This will generate the following report: 
  764. X
  765. X                 From: mserv (Mail Server)
  766. X            [1]  To: jv@pasta.mh.nl
  767. X                 Subject: Request by jv
  768. X                 Date: Sun, 6 Dec 92 16:15 MET
  769. X            
  770. X                 Processing UUCP header ...
  771. X            [2a] => Default return address (UUCP): "pasta!jv"
  772. X            
  773. X                 Processing mail headers ...
  774. X            [2b] => Default return address: "jv@pasta.mh.nl"
  775. X            
  776. X                 Processing message contents...
  777. X            
  778. X                 Command: uucp pasta!~uucp/receive/jv jv
  779. X            [3]  => Transfer via UUCP to "pasta!~uucp/receive/jv"
  780. X                 => (UUCP notification to: "jv")
  781. X            
  782. X                 Command: limit 64K
  783. X                 => Limit = 64K
  784. X            
  785. X                 Command: send bio-2.4
  786. X                 => Send: bio-2.4
  787. X            
  788. X                 Command: resend zoo 2 3 4
  789. X                 => Resend: zoo, part 2,3,4
  790. X            
  791. X                 Command: end
  792. X                 => Okay
  793. X            
  794. X                 Your message has been processed.
  795. X            
  796. X            [4]  Request results:
  797. X            
  798. X                  Request                 Size Enc Limit Remarks
  799. X                  ---------------------- ----- --- ----- -------
  800. X                  bio-2.4/bio-2.4.tar.Z    36K       64K Queued
  801. X                  zoo-2.1/zoo.TZ          171K       64K Queued (parts 2 3 4 only)
  802. X            
  803. X                 The requests with status "Queued" will be sent as soon as
  804. X                 the load of the server system permits, usually within 24 hours.
  805. X            
  806. X                 Mail Server finished.
  807. X
  808. X      As you can see, the return mail is sent to the address [1] 
  809. X      extracted from the mail headers [2b], overriding the address found 
  810. X      in the UUCP header [2a]. A REPLY command could have been used to 
  811. X      supply a different address. 
  812. X
  813. X      The UUCP command [3] instructs the server to send the requests via 
  814. X      UUCP to the given system. 
  815. X
  816. X      In the list of requests [4] the size of the files is shown. 
  817. X
  818. X      Some time later the following files will be copied to the system: 
  819. X
  820. X            /usr/spool/uucppublic/receive/jv/bio-2.4/bio-2.4.tar.Z
  821. X            /usr/spool/uucppublic/receive/jv/zoo-2.1/zoo.TZ/part2of4
  822. X            /usr/spool/uucppublic/receive/jv/zoo-2.1/zoo.TZ/part3of4
  823. X            /usr/spool/uucppublic/receive/jv/zoo-2.1/zoo.TZ/part4of4
  824. X
  825. X      Multi-part transfers must be concatenated to yield the requested 
  826. X      files. 
  827. X
  828. X      NOTE:  Information that results from other sources than files
  829. X             (e.g. DIR commands) will be sent using temporary
  830. X             filenames like "ft2351.ab". Usually, this information is
  831. X             compressed before being transferred.
  832. X
  833. X7.    SAMPLE MAIL SERVER REPORT (WITH ANONYMOUS FTP) 
  834. X
  835. X      Assume the following message is sent to the mail server: 
  836. X
  837. X            uucp pasta!~uucp/receive/jv jv
  838. X            dir ftp.foo.org:pub
  839. X            send ftp.foo.org:pub/mail-server.tar.Z
  840. X            end
  841. X
  842. X      This will generate the following report: 
  843. X
  844. X                 From: mserv (Mail Server)
  845. X            [1]  To: jv@pasta.mh.nl
  846. X                 Subject: Request by jv
  847. X                 Date: Sun, 6 Dec 92 16:25 MET
  848. X            
  849. X                 Processing UUCP header ...
  850. X            [2a] => Default return address (UUCP): "pasta!jv"
  851. X            
  852. X                 Processing mail headers ...
  853. X            [2b] => Default return address: "jv@pasta.mh.nl"
  854. X            
  855. X                 Processing message contents...
  856. X            
  857. X            [3]  Command: uucp pasta!~uucp/receive/jv jv
  858. X                 => Transfer via UUCP to "pasta!~uucp/receive/jv"
  859. X                 => (UUCP notification to "jv")
  860. X            
  861. X            [4]  Command: dir ftp.foo.org:pub
  862. X                 => FTP Connect to "ftp.foo.org"
  863. X                 => Dir: pub
  864. X            
  865. X            [5]  Command: send ftp.foo.org:pub/mail-server.tar.Z
  866. X                 => FTP Connect to "ftp.foo.org"
  867. X                 => Send: pub/mail-server.tar.Z
  868. X            
  869. X                 Command:  end
  870. X                 => Okay
  871. X                 Your message has been processed.
  872. X            
  873. X            [6]  FTP Command execution:
  874. X                     OPEN ftp.foo.org
  875. X                     Connecting to ftp.foo.org
  876. X                     220 Squirrel.foo.org FTP server (Version 4.1) ready.
  877. X                     ---> USER anonymous
  878. X                     331 Guest login ok, send ident as password.
  879. X                     ---> PASS jv@pasta.mh.nl
  880. X                     230 Guest login ok, access restrictions apply.
  881. X            
  882. X            [7]  FTP Command execution:
  883. X                     DIR pub
  884. X                     ---> TYPE A
  885. X                     200 Type set to A.
  886. X                     ---> PORT 127,0,0,1,4,1
  887. X                     200 PORT command successful.
  888. X                     ---> LIST pub
  889. X                     150 Opening data connection.
  890. X                     226 Transfer complete.
  891. X                     -r--r--r--  2 mserv   18640 Dec  6 15:49 HELP
  892. X                     -r--r--r--  2 mserv   18640 Dec  6 15:49 help
  893. X                     -rw-r--r--  1 mserv   64051 May 31  1992 mail-server.tar.Z
  894. X                     -r--r--r--  1 mserv    4170 Dec  6 15:49 unpack.pl
  895. X            
  896. X            [8]  FTP Command execution:
  897. X                     GET pub/mail-server.tar.Z
  898. X                     ---> PORT 127,0,0,1,4,3
  899. X                     200 PORT command successful.
  900. X                     ---> LIST pub/mail-server.tar.Z
  901. X                     150 Opening data connection.
  902. X                     226 Transfer complete.
  903. X                     -rw-r--r--  1 mserv   64051 May 31  1992 pub/mail-server.tar.Z
  904. X            
  905. X            [8b]     ---> TYPE I
  906. X                     200 Type set to I.
  907. X                     ---> PORT 127,0,0,1,4,4
  908. X                     200 PORT command successful.
  909. X                     ---> RETR pub/mail-server.tar.Z
  910. X                     150 Opening data connection.
  911. X                     Got 64051 bytes (64051 bytes/sec)
  912. X                     226 Transfer complete.
  913. X            
  914. X            [9]  FTP Command execution:
  915. X                     CLOSE ftp.foo.org
  916. X                     ---> QUIT
  917. X                     221 Goodbye.
  918. X            
  919. X            [10] Request results:
  920. X            
  921. X                  Request                            Size Enc Limit Status
  922. X                  --------------------------------- ----- --- ----- ------
  923. X                  ftp.foo.org:pub/mail-server.tar.Z   63K      256K Queued
  924. X            
  925. X                 The requests with status "Queued" will be sent as soon as
  926. X                 the load of the server system permits, usually within 24 hours.
  927. X            
  928. X                 Mail Server finished.
  929. X
  930. X      The return mail is sent to the address [1] extracted from the 
  931. X      message headers [2a and 2b]. A REPLY command could have been used 
  932. X      to supply a different address. 
  933. X
  934. X      The UUCP command [3] instructs the server to send the requests via 
  935. X      UUCP to the given system. 
  936. X
  937. X      The DIR command [4] is used to get a directory listing from the 
  938. X      FTP server. 
  939. X
  940. X      The SEND command [5] requests a file from the FTP server. 
  941. X
  942. X      [6] through [9] show the execution of the FTP commands. First, the 
  943. X      connection with the FTP server is established [6]. Then the output 
  944. X      of the DIR command follows [7]. 
  945. X
  946. X      Step [8] deserves detailed explanation. Before retrieving a file 
  947. X      from the FTP server, the mail server requests directory info for 
  948. X      the desired file. Using this info, the mail server tries to find 
  949. X      the file in a special local archive, the ftp cache. If the file is 
  950. X      found locally, the local file is queued for transfer. If not 
  951. X      found, it is retrieved from the FTP server [8b], stored in the ftp 
  952. X      cache, and queued for transfer. 
  953. X
  954. X      Finally the connection with the FTP server is closed [9], and the 
  955. X      list of requests is shown [10]. 
  956. X
  957. X      Some time later the requested file will be copied to the system: 
  958. X
  959. X            org/foo/ftp/mail-server.tar.Z
  960. X
  961. X      Note that the FTP host name has been transformed into a directory 
  962. X      name by reversing the elements of the host name. The (usually 
  963. X      dummy) directory "pub" has been stripped. 
  964. X
  965. X8.    SAMPLE INTERACTIVE MAIL SERVER USE 
  966. X
  967. X      The Mail Server software can also be used interactively, e.g. from 
  968. X      a terminal, or via TELNET. 
  969. X
  970. X      When the mail server is started interactively, it reads its 
  971. X      commands from standard input and processes them immediately. 
  972. X      Errors are not fatal. Moreover, multiple MAIL and UUCP commands 
  973. X      can be entered. 
  974. X
  975. X            % telnet squirrel 2000
  976. X            Connected to squirrel.
  977. X            Escape character is '^]'.
  978. X            Multihouse Mail Server (Squirrel Mail Server Software V3.1) ready.
  979. X            Local time is Wed Dec 23 23:40:55 1992.
  980. X            Enter HELP for a list of commands.
  981. X            
  982. X            Command> mail jv
  983. X            Command: mail jv
  984. X            => Transfer via email to "jv"
  985. X            
  986. X            Command> send HELP.Z
  987. X            Command: send HELP.Z
  988. X            => Send: HELP.Z
  989. X            Request results:
  990. X            
  991. X              Request        Size  Enc  Limit  Status
  992. X              ------------  -----  ---  -----  ------
  993. X              HELP            36K   BZ    64K  Queued
  994. X            
  995. X            Encoding BZ means: compressed first, then encoded with btoa.
  996. X            
  997. X            The requests with status "Queued" will be sent as soon as the load of
  998. X            the server system permits, usually within 24 hours.
  999. X            
  1000. X            Command> end
  1001. X            Command: end
  1002. X            => Okay
  1003. X            
  1004. X            Mail Server finished.
  1005. X            Connection closed by foreign host.
  1006. X
  1007. X9.    HISTORY 
  1008. X
  1009. X      The Squirrel Mail Server has been developed by Johan Vromans. It 
  1010. X      is all written in Perl, except for one small C (wrapper) program. 
  1011. X
  1012. X      This software is Copyright 1988, 1992, 1993 by Johan Vromans, and 
  1013. X      may be distributed according to the GNU Public Licence. 
  1014. X
  1015. X      Version 1 was released in 1988 and has helped to develop Perl-2. 
  1016. X      It has been in full production at a number of sites ever since. 
  1017. X      Version 2 has never been released to the public. 
  1018. X
  1019. X      This is version 3, completely reworked, and requires Perl 4.035 or 
  1020. X      later. 
  1021. X
  1022. X      Parts of the mail server software are derieved from the works of 
  1023. X      others: the FTP core services and date conversions are from Lee 
  1024. X      McLoughlin's 'mirror' package. The low level 'chat' package is 
  1025. X      written by Randal Schwartz (just another perl hacker). Directory 
  1026. X      packing (the PACK command) is based on an implementation by Piet 
  1027. X      van Oostrum. 
  1028. X
  1029. X      For questions, information and remarks: 
  1030. X
  1031. X                    Johan Vromans
  1032. X            --
  1033. X            Johan Vromans                                  jv@mh.nl via internet backbones
  1034. X            Multihouse Automatisering bv                   uucp:..!{uunet,sun4nl}!mh.nl!jv
  1035. X            Doesburgweg 7, 2803 PL Gouda, The Netherlands  phone/fax: +31 1820 62944/62500
  1036. X            ------------------------ "Arms are made for hugging" -------------------------
  1037. X
  1038. X10.   HINTS ON USING THE SQUIRREL MAIL SERVER 
  1039. X
  1040. X      Although the mail server tries its best to satisfy every request, 
  1041. X      sometimes it is not possible to honour a request due to system 
  1042. X      limits, archive structure etc.. 
  1043. X
  1044. X      *  Do not send messages from system accounts (e.g. 'root', 'news', 
  1045. X         'daemon' etc). These messages are usually rejected. 
  1046. X
  1047. X      *  Always embed your requests between a BEGIN / END pair. 
  1048. X
  1049. X      *  Keep in mind that filenames are case sensitive! "SEND index" 
  1050. X         and "send INDEX" are not identical. 
  1051. X
  1052. X      *  Do not reply to the messages the mail server sends. This is 
  1053. X         usually a dummy address and mail directed to this address will 
  1054. X         be discarded. 
  1055. X
  1056. X10.1  Frequently Asked Questions ... or frequently made mistakes. 
  1057. X
  1058. X      Q: What does this warning mean:
  1059. X
  1060. X            Warning: Unusable UUCP header:
  1061. X            From anywhere.com!me ...
  1062. X
  1063. X         This means that "anywhere.com" is not a known UUCP host to
  1064. X         the mail server system. Email sent to this address will
  1065. X         generally get through, but it is not possible to deliver
  1066. X         files via UUCP.
  1067. END_OF_FILE
  1068.   if test 40399 -ne `wc -c <'mserv-3.1/HELP'`; then
  1069.     echo shar: \"'mserv-3.1/HELP'\" unpacked with wrong size!
  1070.   fi
  1071.   # end of 'mserv-3.1/HELP'
  1072. fi
  1073. if test -f 'mserv-3.1/MANIFEST' -a "${1}" != "-c" ; then 
  1074.   echo shar: Will not clobber existing file \"'mserv-3.1/MANIFEST'\"
  1075. else
  1076.   echo shar: Extracting \"'mserv-3.1/MANIFEST'\" \(471 characters\)
  1077.   sed "s/^X//" >'mserv-3.1/MANIFEST' <<'END_OF_FILE'
  1078. XREADME
  1079. XINSTALL
  1080. XMANIFEST
  1081. XCRONTAB.sample
  1082. XChangeLog
  1083. XHELP
  1084. XMakefile
  1085. Xchat2.pl
  1086. Xchkconfig.pl
  1087. Xdateconv.pl
  1088. Xdo_report.pl
  1089. Xdo_runq.sh
  1090. Xdorequest.pl
  1091. Xdr_mail.pl
  1092. Xdr_pack.pl
  1093. Xdr_uucp.pl
  1094. Xftp.pl
  1095. Xixlookup.patch
  1096. Xmakeindex.pl
  1097. Xmlistener.pl
  1098. Xms_common.pl
  1099. Xms_config.pl
  1100. Xms_lock.pl
  1101. Xmserv.hints
  1102. Xmserv.notes
  1103. Xmserv.notesi
  1104. Xpatchlevel.h
  1105. Xpr_doindex.pl
  1106. Xpr_dowork.pl
  1107. Xpr_dsearch.pl
  1108. Xpr_ftp.pl
  1109. Xpr_help.pl
  1110. Xpr_isearch.pl
  1111. Xpr_parse.pl
  1112. Xprocess.pl
  1113. Xreport.pl
  1114. Xrfc822.pl
  1115. Xtestlock.pl
  1116. Xunpack.pl
  1117. Xud_sample1.pl
  1118. Xud_sample2.pl
  1119. END_OF_FILE
  1120.   if test 471 -ne `wc -c <'mserv-3.1/MANIFEST'`; then
  1121.     echo shar: \"'mserv-3.1/MANIFEST'\" unpacked with wrong size!
  1122.   fi
  1123.   # end of 'mserv-3.1/MANIFEST'
  1124. fi
  1125. if test -f 'mserv-3.1/pr_dowork.pl' -a "${1}" != "-c" ; then 
  1126.   echo shar: Will not clobber existing file \"'mserv-3.1/pr_dowork.pl'\"
  1127. else
  1128.   echo shar: Extracting \"'mserv-3.1/pr_dowork.pl'\" \(15153 characters\)
  1129.   sed "s/^X//" >'mserv-3.1/pr_dowork.pl' <<'END_OF_FILE'
  1130. X# pr_dowork.pl -- execute work loop
  1131. X# SCCS Status     : @(#)@ pr_dowork.pl    3.24
  1132. X# Author          : Johan Vromans
  1133. X# Created On      : Thu Jun  4 22:14:50 1992
  1134. X# Last Modified By: Johan Vromans
  1135. X# Last Modified On: Sat Jan  2 15:11:05 1993
  1136. X# Update Count    : 221
  1137. X# Status          : OK
  1138. X
  1139. X# Format of work queue entries.
  1140. X# Fields are separated by \0 characters.
  1141. X# Field 1 is the command, fields 2 .. are arguments.
  1142. X# 
  1143. X# Command  Arguments (* denotes optional arguments)
  1144. X#  ---  -------------------------------------------
  1145. X#   M   1: Recipient for feedback messages.
  1146. X#   U   1: hostname!pathname for UUCP transfers.
  1147. X#       2: Notify user on target host.
  1148. X#   L   1: Limit for transfers, in Kbytes.
  1149. X#   S   1: Filename to send.
  1150. X#       2* List of comma-separated parts to (re)send.
  1151. X#   P   1* Packing code for subsequent directories
  1152. X#          Values: "zoo", "zip", "tar".
  1153. X#          If omitted: no more packing.
  1154. X#   E   1: Encoding to use:
  1155. X#       A: none
  1156. X#          B: btoa
  1157. X#          D: Dumas uuencode
  1158. X#          X: xxencode
  1159. X#          U: uuencode
  1160. X#   D   1: directory
  1161. X#   G   1: FTP subcommand
  1162. X#       O: open connection
  1163. X#          2: system name
  1164. X#       T: transfer type (not implemented)
  1165. X#          2: A: ascii, I: image
  1166. X#       G: get file
  1167. X#          2: file name
  1168. X#       C: close
  1169. X#       D: directory
  1170. X#          2: directory
  1171. X#       U: login info
  1172. X#          2: user name
  1173. X#          3: password
  1174. X#   A   1: Archie request
  1175. X#       P: prog
  1176. X#          2: search arch (regexp)
  1177. X
  1178. X# These are the standards commands.
  1179. X# See 'userdefs.pl' how to add your own commands here.
  1180. X$exe_tbl{'L'} = 'exe_setlimit';
  1181. X$exe_tbl{'E'} = 'exe_setencoding';
  1182. X$exe_tbl{'M'} = 'exe_setdestination';
  1183. X$exe_tbl{'P'} = 'exe_setpacking';
  1184. X$exe_tbl{'U'} = 'exe_setuucpdest';
  1185. X$exe_tbl{'S'} = 'exe_send';
  1186. X$exe_tbl{'D'} = 'exe_dir';
  1187. X$exe_tbl{'G'} = 'exe_ftp';
  1188. X$exe_tbl{'A'} = 'exe_archie';
  1189. X
  1190. Xsub work_loop {
  1191. X
  1192. X    local ($entries);
  1193. X    local (@work);
  1194. X    local ($type);
  1195. X    local (@queueq) = ();
  1196. X    local ($proc);
  1197. X    local ($result);
  1198. X
  1199. X    # Local variables that retain their values between calls.
  1200. X    local (*encoding) = *work_loop'encoding;    #';
  1201. X    local (*packing)  = *work_loop'packing;    #';
  1202. X    local (*limit)    = *work_loop'limit;    #';
  1203. X    local (*uupath)   = *work_loop'uupath;    #';
  1204. X    local (*uunote)   = *work_loop'uunote;    #';
  1205. X    local (*ftphost)  = *work_loop'ftphost;    #';
  1206. X
  1207. X    $encoding = $default_encoding unless defined $encoding;
  1208. X    $limit = $limits[1] .'K' unless defined $limit;
  1209. X    $ftpuser = "anonymous" unless defined $ftpuser;
  1210. X
  1211. X    if ( $opt_debug || $opt_trace ) {
  1212. X    print STDOUT ("=> Work queue:\n");
  1213. X    local ($tally) = 0;
  1214. X    foreach $i ( @workq ) {
  1215. X        $tally++;
  1216. X        printf STDOUT ("  %3d: %s\n", $tally, join(" ", &zu ($i)));
  1217. X    }
  1218. X    print STDOUT ("\n");
  1219. X    }
  1220. X
  1221. X    $entries = 0;
  1222. X
  1223. X    # Process the work queue.
  1224. X    # This will probably result in some files to be transferred. 
  1225. X
  1226. X    foreach $work ( @workq ) {
  1227. X
  1228. X    ($type, @work) = &zu ($work);
  1229. X    last unless defined $type;
  1230. X
  1231. X    if ( defined ( $proc = $exe_tbl{$type} ) &&
  1232. X        ( $result = &$proc ) != 0 ) {
  1233. X        last if $result < 0;
  1234. X    }
  1235. X    else {
  1236. X        # Should not happen.
  1237. X        print STDOUT ("*** Mail Server internal error: ",
  1238. X              "Request type \"$type\" in work queue ***\n");
  1239. X    }
  1240. X    }
  1241. X    @workq = ();
  1242. X
  1243. X    # Close any pending FTP connection.
  1244. X    if ( $ftphost && !$interactive ) {
  1245. X    print STDOUT ("FTP Command execution:\n    CLOSE $ftphost\n");
  1246. X    &ftp'close;        #';
  1247. X    $ftphost = '';
  1248. X    print STDOUT ("\n");
  1249. X    }
  1250. X
  1251. X    # Okay, let's see if we have something to transfer.
  1252. X
  1253. X    if ( @queueq > 0 ) {
  1254. X    print STDOUT ("Request results:\n");
  1255. X    select (STDOUT);
  1256. X    $~ = "request_header";
  1257. X    write;
  1258. X    $~ = "request_list";
  1259. X    $: = " /.]";
  1260. X    $= = 99999;
  1261. X    local (%enc);
  1262. X
  1263. X    foreach $entry ( @queueq ) {
  1264. X        local ($name, $size, $coding, $limit, $remarks) = &zu ($entry);
  1265. X        if ( $method eq 'U' ) {
  1266. X        if ( $coding =~ /Z$/ ) {
  1267. X            $coding = 'Z';
  1268. X            $enc{'Z'} = 1;
  1269. X        }
  1270. X        else {
  1271. X            $coding = '';
  1272. X        }
  1273. X        }
  1274. X        else {
  1275. X        $enc{$coding} = 1 if $coding;
  1276. X        }
  1277. X        write;
  1278. X    }
  1279. X
  1280. X    print STDOUT ("\n") if %enc;
  1281. X    foreach $enc ( sort keys (%enc) ) {
  1282. X        print STDOUT ("Encoding $enc means: ");
  1283. X        if ( $enc =~ /^[AP]/ ) {
  1284. X        print STDOUT ("not encoded (plain file).\n");
  1285. X        next;
  1286. X        }
  1287. X        print STDOUT ("data will be compressed before transfer.\n")
  1288. X        if $enc eq 'Z';
  1289. X        print STDOUT ("compressed first, then ") if $enc =~ /.Z$/;
  1290. X        print STDOUT ("encoded with ") if $enc ne 'Z';
  1291. X        print STDOUT ("uuencode.\n") if $enc =~ /^U/;
  1292. X        print STDOUT ("btoa.\n") if $enc =~ /^B/;
  1293. X        print STDOUT ("xxencode.\n") if $enc =~ /^X/;
  1294. X        print STDOUT ("Dumas' uue.\n") if $enc =~ /^D/;
  1295. X    }
  1296. X
  1297. X    if ( $entries > 0 ) {
  1298. X        print STDOUT ("\nThe requests with status \"Queued\"",
  1299. X              " will be sent as soon as the load of\n",
  1300. X              "the server system permits, ",
  1301. X              "usually within 24 hours.\n");
  1302. X    }
  1303. X    else {
  1304. X        print STDOUT ("\nNo requests remain to be sent.\n")
  1305. X        unless $interactive;
  1306. X    }
  1307. X    }
  1308. X    else {
  1309. X    print STDOUT ("\nNo requests remain to be sent.\n")
  1310. X        unless $interactive;
  1311. X    }
  1312. X}
  1313. X
  1314. X################ Execute routines ################
  1315. X
  1316. Xsub exe_setlimit {
  1317. X    $limit = $work[0] . 'K';
  1318. X    1;
  1319. X}
  1320. X
  1321. Xsub exe_setencoding {
  1322. X    $encoding = $work[0];
  1323. X    1;
  1324. X}
  1325. X
  1326. Xsub exe_setdestination {
  1327. X    $destination = $work[0];
  1328. X    1;
  1329. X}
  1330. X
  1331. Xsub exe_setpacking {
  1332. X    $packing = $work[0];
  1333. X    1;
  1334. X}
  1335. X
  1336. Xsub exe_setuucpdest {
  1337. X    ($uupath, $uunote) = @work;
  1338. X    1;
  1339. X}
  1340. X
  1341. Xsub exe_send {
  1342. X
  1343. X    local (@found);        # return from search
  1344. X    local ($name, $size, $date, $lib, $subdir); # elements of @found
  1345. X    local ($request, $plist) = @work;
  1346. X    local ($remarks) = "";
  1347. X    local ($coding) = $encoding;
  1348. X    local ($docompress) = 0;
  1349. X
  1350. X    if ( $packing ) {
  1351. X    @found = ();
  1352. X    foreach $lib ( @libdirs ) {
  1353. X        print STDOUT ("Trying dir $lib/$request...\n")
  1354. X        if $opt_debug;
  1355. X        push (@found, $lib)
  1356. X        if -d "$lib/$request" && -r _;
  1357. X    }
  1358. X    if ( @found == 1 ) {
  1359. X        local ($lib) = $found[0];
  1360. X        print STDOUT ("Sizing dir $lib/$request... ")
  1361. X        if $opt_debug;
  1362. X        $size = `$du -s $lib/$request` + 0;
  1363. X        print STDOUT ($size, " blocks.\n")
  1364. X        if $opt_debug;
  1365. X        if ($size > $packing_limit) {
  1366. X        push (@queueq, 
  1367. X              &zp ($request . "/ (" . $packing . ")",
  1368. X               "", "", "", "Request too big"));
  1369. X        }
  1370. X        else {
  1371. X
  1372. X        # Put the request in the batch queue.
  1373. X        if ( $opt_noqueue ) {
  1374. X            $remarks = "Tested OK";
  1375. X            $entries++;
  1376. X        }
  1377. X        elsif ( $method eq "M" ) {
  1378. X            $remarks =
  1379. X            &enqueue ("MP", $recipient, $destination, '',
  1380. X                  $request, "$lib/$request",
  1381. X                  $coding, $limit, $packing,
  1382. X                  $plist);
  1383. X        }
  1384. X        elsif ( $method eq "U" ) {
  1385. X            $remarks =
  1386. X            &enqueue ("UP", $recipient, $uupath, $uunote, 
  1387. X                  $request, "$lib/$request",
  1388. X                  $coding, $limit, $packing,
  1389. X                  $plist);
  1390. X        }
  1391. X        push (@queueq,
  1392. X              &zp ($request . "/ (" . $packing . ")",
  1393. X               int(($size+1) / 2) . "K",
  1394. X               $coding, $limit, $remarks));
  1395. X        }
  1396. X    }
  1397. X    elsif ( $icall_packing ) {
  1398. X        # Internal call.
  1399. X        return 0;
  1400. X    }
  1401. X    elsif ( @found == 0 ) {
  1402. X        push (@queueq, 
  1403. X          &zp ($request . "/ (" . $packing . ")",
  1404. X               "", "", "", "Not found"));
  1405. X    }
  1406. X    else {
  1407. X        # Ambiguous.
  1408. X        print STDOUT ("Directory \"$request\" is not unique in the archives.\n",
  1409. X              "This request has been skipped.\n\n");
  1410. X        push (@queueq, 
  1411. X          &zp ($request . "/ (" . $packing . ")",
  1412. X               "", "", "", "Ambiguous"));
  1413. X    }
  1414. X    return 1;
  1415. X    }
  1416. X
  1417. X    # Locate them.
  1418. X    @found = &search ($request, 0);
  1419. X
  1420. X    # If we are not successfull, try automatic packing.
  1421. X    if ( @found != 1 && $auto_packing && $request =~ /\.(zoo|zip|tar|tar\.Z)$/ ) {
  1422. X    local ($request) = $`;
  1423. X    local ($packing) = $1;
  1424. X    $packing = "tar" if $packing eq 'tar.Z';
  1425. X    if ( ($packing eq "tar" && (-x $tar || -x $pdtar)) ||
  1426. X         ($packing eq "zip" && -x $zip) ||
  1427. X         ($packing eq "zoo" && -x $zoo) ) {
  1428. X
  1429. X        # Build @work, retain $work[1]
  1430. X        local (@work) = @work;
  1431. X        $work[0] = $request;
  1432. X
  1433. X        # Recursive call...
  1434. X        local ($icall_packing) = 1;
  1435. X        return 1 if &exe_send;
  1436. X    }
  1437. X    }
  1438. X
  1439. X    # If we are not successfull, try $request w/o .Z extension.
  1440. X    if ( @found != 1 && $auto_compress && $request =~ /\.Z$/ ) {
  1441. X    local ($req) = substr ($request, 0, length ($request)-2);
  1442. X
  1443. X    # Maybe 'foo.Z' may result in 'foo.shar.Z'...
  1444. X    local ($extpat, @exts) if $auto_compress > 1;
  1445. X
  1446. X    local (@cfound) = &search ($req, 0);
  1447. X    if ( @cfound == 1 ) {
  1448. X        # We found a unique hit -- override earlier results.
  1449. X        @found = @cfound;
  1450. X        $docompress = 1;
  1451. X    }
  1452. X    else {
  1453. X        # Failed. Add to the list of possibilities.
  1454. X        push (@found, @cfound);
  1455. X    }
  1456. X    }
  1457. X
  1458. X
  1459. X    if ( @found > 1 ) {
  1460. X    print STDOUT ("Request \"$request\" is ambiguous:\n");
  1461. X    &dolist ("Search", $request, *found);
  1462. X    print STDOUT ("\n");
  1463. X    push (@queueq, 
  1464. X          &zp ($request, "", "", "", "Ambiguous"));
  1465. X    return 1;
  1466. X    }
  1467. X
  1468. X    ($name, $size, $date, $lib, $subdir) = &zu ($found[0]);
  1469. X
  1470. X    # Make sure that we have one single file.
  1471. X    if ( @found == 0 || ! -f $lib.$subdir.$name ) {
  1472. X    push (@queueq,
  1473. X          &zp ($request, "", "", "", "Not found"));
  1474. X    return 1;
  1475. X    }
  1476. X
  1477. X    if ( $docompress ) {
  1478. X    $coding .= 'Z';
  1479. X    }
  1480. X    else {
  1481. X    # Send some files in plain (ascii) format.
  1482. X    $coding = "A" if ($name !~ /$extpat$/ || $+ eq ".shar")
  1483. X        && -T $lib.$subdir.$name ;
  1484. X    }
  1485. X
  1486. X    $size = int(($size+1023)/1024) . "K" unless $size =~ /K$/;
  1487. X
  1488. X    # Put the request in the batch queue.
  1489. X    if ( $opt_noqueue ) {
  1490. X    $remarks = "Tested OK";
  1491. X    $entries++;
  1492. X    }
  1493. X    elsif ( $method eq "M" ) {
  1494. X    $remarks =
  1495. X        &enqueue ("M", $recipient, $destination, '',
  1496. X              $subdir.$name, $lib.$subdir.$name,
  1497. X              $coding, $limit, $plist);
  1498. X    }
  1499. X    elsif ( $method eq "U" ) {
  1500. X    $remarks =
  1501. X        &enqueue ("U", $recipient, $uupath, $uunote, 
  1502. X              $subdir.$name, $lib.$subdir.$name,
  1503. X              $coding, $limit, $plist);
  1504. X    }
  1505. X
  1506. X    push (@queueq,
  1507. X      &zp ($subdir.$name, $size, $coding, $limit, $remarks));
  1508. X    1;
  1509. X}
  1510. X
  1511. Xsub exe_dir {
  1512. X
  1513. X    local ($thefile) = &fttemp;
  1514. X    local ($dir) = shift (@work);
  1515. X
  1516. X    open (DIR, '>' . $thefile) && close (DIR);
  1517. X    foreach $lib ( @libdirs ) {
  1518. X    local ($here) = $lib . '/' . $dir;
  1519. X    next unless -d $here;
  1520. X    &do_system ("$dircmd '$here' >> $thefile 2>&1");
  1521. X    }
  1522. X
  1523. X    $size = -s $thefile;
  1524. X
  1525. X    if ( $fb_limit == 0 || $size < ($fb_limit * 1024)) {
  1526. X    print STDOUT ("Result from Dir $dir:\n");
  1527. X    open (DIR, $thefile);
  1528. X    while ( <DIR> ) {
  1529. X        next if /^total/i;
  1530. X        print STDOUT ("    $_");
  1531. X    }
  1532. X    close (DIR);
  1533. X    unlink ($thefile);
  1534. X    print STDOUT ("\n");
  1535. X    }
  1536. X    else {
  1537. X    # Put the request in the batch queue.
  1538. X    &ftqueue ("dir $dir", $thefile, 
  1539. X          'A', $limit, '', "dir $dir", 1);
  1540. X    }
  1541. X    1;
  1542. X}
  1543. X
  1544. Xsub exe_ftp {
  1545. X
  1546. X    require 'pr_ftp.pl';
  1547. X
  1548. X    $type = shift (@work);
  1549. X    if ( $type eq 'O' ) {
  1550. X    return 1 if $ftphost eq $work[0];
  1551. X    $ftppass = $recipient if $ftppass eq '';
  1552. X    $ftppass = $uunote if $ftppass eq '?';
  1553. X    &ftp_connect (shift (@work), $ftpuser, $ftppass);
  1554. X    print STDOUT ("\n");
  1555. X    return 1;
  1556. X    }
  1557. X    if ( $type eq 'C' ) {
  1558. X    return 1 unless $ftphost;
  1559. X    print STDOUT ("FTP Command execution:\n",
  1560. X              "    CLOSE $work[0]\n");
  1561. X    &ftp'close;                #';
  1562. X    $ftphost = '';
  1563. X    print STDOUT ("\n");
  1564. X    return 1;
  1565. X    }
  1566. X    if ( $type eq 'U' ) {
  1567. X    ($ftpuser, $ftppass) = @work;
  1568. X    return 1;
  1569. X    }
  1570. X    if ( $ftphost eq '' ) {
  1571. X    print STDOUT ('*** Mail Server internal error: ',
  1572. X              'No FTP host specified for ',
  1573. X              $type, " command\n");
  1574. X    return 1;
  1575. X    }
  1576. X
  1577. X    if ( $type eq 'D' ) {
  1578. X    local ($thefile) = &fttemp;
  1579. X    local ($dir) = shift (@work);
  1580. X    &ftp_dir ($dir, $thefile);
  1581. X    local ($size) = -s $thefile;
  1582. X    if ( $fb_limit == 0 || $size < ($fb_limit * 1024)) {
  1583. X        open (DIR, $thefile);
  1584. X        while ( <DIR> ) {
  1585. X        next if /^total/i;
  1586. X        print STDOUT ("    $_");
  1587. X        }
  1588. X        close (DIR);
  1589. X        unlink ($thefile);
  1590. X    }
  1591. X    else {
  1592. X        # Put the request in the batch queue.
  1593. X        &ftqueue ("dir $ftphost:$dir", $thefile, 'A',
  1594. X              $limit, '', "dir $ftphost:$dir", 1);
  1595. X    }
  1596. X    print STDOUT ("\n");
  1597. X    return 1;
  1598. X    }
  1599. X    if ( $type eq 'G' ) {
  1600. X    local ($thefile) = &ftp_get ($work[0]);
  1601. X    &ftqueue ($ftphost . ':' .$work[0],
  1602. X          $thefile, $encoding, 
  1603. X          $limit, $work[1],
  1604. X          $ftphost . ':' .$work[0]);
  1605. X    print STDOUT ("\n");
  1606. X    return 1;
  1607. X    }
  1608. X
  1609. X    print STDOUT ('*** Mail Server internal error: FTP command ',
  1610. X          $type, " not yet implemented\n");
  1611. X    1;
  1612. X}
  1613. X
  1614. X
  1615. Xsub exe_archie {
  1616. X
  1617. X    $type = shift (@work);
  1618. X    if ( $type eq 'P' ) {
  1619. X    local ($arg) = @work;
  1620. X    &do_unix ("$archie -r '$arg'", "$archie -r '$arg'");
  1621. X    return 1;
  1622. X    }
  1623. X
  1624. X    print STDOUT ('*** Mail Server internal error: Archie command ',
  1625. X          $type, " not yet implemented\n");
  1626. X    1;
  1627. X}
  1628. X
  1629. X################ Support Routines ################
  1630. X
  1631. X# Perform a command, and show the result.
  1632. Xsub do_unix {
  1633. X    local ($cmd, $desc) = @_;
  1634. X    local ($thefile) = &fttemp;
  1635. X
  1636. X    &do_system ("$cmd > $thefile 2>&1");
  1637. X    local ($size) = -s $thefile;
  1638. X    if ( $fb_limit == 0 || $size < ($fb_limit * 1024)) {
  1639. X    print STDOUT ("Local command execution:\n    ", $cmd, "\n");
  1640. X    local (*F);
  1641. X    open (F, $thefile);
  1642. X    while ( <F> ) {
  1643. X        print STDOUT ("    ", $_);
  1644. X    }
  1645. X    close (F);
  1646. X    unlink ($thefile);
  1647. X    }
  1648. X    else {
  1649. X    # Put the request in the batch queue.
  1650. X    $desc = "$cmd (cmd)" unless $desc;
  1651. X    &ftqueue ($cmd, $thefile, $default_encoding,
  1652. X          $limit, '', $desc, 1);
  1653. X    }
  1654. X    print STDOUT ("\n");
  1655. X
  1656. X}
  1657. X
  1658. Xsub do_system {
  1659. X    local ($cmd) = @_;
  1660. X    print STDOUT ("+ $cmd\n") if $opt_trace;
  1661. X    system ($cmd);
  1662. X}
  1663. X
  1664. X# Enter a file to be sent into the queue, if it exists.
  1665. Xsub ftqueue {
  1666. X    local ($get, $got, $coding, $limit, $plist, $desc, $try_compress) = (@_);
  1667. X#   global ($remarks);
  1668. X
  1669. X    local ($temp) = (index ($got, $tmpdir) == $[);
  1670. X    local ($size) = -s $got;
  1671. X
  1672. X    $desc = $got unless $desc;
  1673. X
  1674. X    if ( $size <= 0 ) {
  1675. X    push (@queueq, 
  1676. X          &zp ($desc, "", "", "", "Not found"));
  1677. X    unlink $got if $temp;
  1678. X    return;
  1679. X    }
  1680. X
  1681. X    if ( $try_compress ) {
  1682. X    $coding = $default_encoding . 'Z';
  1683. X    }
  1684. X
  1685. X    # Put the request in the batch queue.
  1686. X    if ( $opt_noqueue ) {
  1687. X    $remarks = "Tested " . ($temp ? "Ok" : "OK");
  1688. X    $entries++;
  1689. X    }
  1690. X    elsif ( $method eq "M" ) {
  1691. X    $remarks =
  1692. X        &enqueue ($temp ? "m" : "M", 
  1693. X              $recipient, $destination, '', $get, $got,
  1694. X              $coding, $limit, $plist);
  1695. X    }
  1696. X    elsif ( $method eq "U" ) {
  1697. X    $remarks =
  1698. X        &enqueue ($temp ? "u" : "U",
  1699. X              $recipient, $uupath, $uunote, $get, $got,
  1700. X              $coding, $limit, $plist);
  1701. X    }
  1702. X    $size = int (($size + 1023) / 1024) . 'K' unless $size =~ /K$/;
  1703. X    push (@queueq, &zp ($desc, $size, $coding, $limit, $remarks));
  1704. X}
  1705. X
  1706. Xsub enqueue {
  1707. X
  1708. X    # Add a request to the queue.
  1709. X
  1710. X    local (@work) = @_;
  1711. X
  1712. X    if ( grep (/\t/, @work) ) {
  1713. X    return "Refused";
  1714. X    }
  1715. X
  1716. X    if (open (BATCH, ">>$queue")) {
  1717. X    if ( &locking (*BATCH, 1) == 1 ) {
  1718. X        seek (BATCH, 0, 2);
  1719. X        print BATCH (join ("\t", @work), "\n");
  1720. X        close (BATCH);
  1721. X        $entries++;
  1722. X        if ( defined $plist && $plist =~ /\S/ ) {
  1723. X        local ($remarks) = "Queued (part";
  1724. X        $remarks .= "s" if $plist =~ /,/;
  1725. X        $remarks .= " ${plist} only)";
  1726. X        return $remarks;
  1727. X        }
  1728. X        else {
  1729. X        "Queued";
  1730. X        }
  1731. X
  1732. X    }
  1733. X    else {
  1734. X        "Queue error";
  1735. X    }
  1736. X    }
  1737. X    else {
  1738. X    "Cannot queue";
  1739. X    }
  1740. X}
  1741. X
  1742. Xformat request_header =
  1743. X
  1744. X  Request                                        Size  Enc  Limit  Status
  1745. X  --------------------------------------------  -----  ---  -----  ------
  1746. X.
  1747. Xformat request_list =
  1748. X  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@>>>>>>  @||  @>>>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<
  1749. X$name, $size, $coding, $limit, $remarks
  1750. X~~  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  1751. X$name
  1752. X.
  1753. X
  1754. X1;
  1755. END_OF_FILE
  1756.   if test 15153 -ne `wc -c <'mserv-3.1/pr_dowork.pl'`; then
  1757.     echo shar: \"'mserv-3.1/pr_dowork.pl'\" unpacked with wrong size!
  1758.   fi
  1759.   # end of 'mserv-3.1/pr_dowork.pl'
  1760. fi
  1761. echo shar: End of archive 2 \(of 6\).
  1762. cp /dev/null ark2isdone
  1763. MISSING=""
  1764. for I in 1 2 3 4 5 6 ; do
  1765.     if test ! -f ark${I}isdone ; then
  1766.     MISSING="${MISSING} ${I}"
  1767.     fi
  1768. done
  1769. if test "${MISSING}" = "" ; then
  1770.     echo You have unpacked all 6 archives.
  1771.     rm -f ark[1-9]isdone
  1772. else
  1773.     echo You still must unpack the following archives:
  1774.     echo "        " ${MISSING}
  1775. fi
  1776. exit 0
  1777. exit 0 # Just in case...
  1778.