home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / sendmail / sendmail-5.65c+IDA-1.4.4.1 / ida / doc / part2.ms < prev    next >
Encoding:
Text File  |  1987-06-06  |  42.0 KB  |  1,529 lines

  1. .NH
  2. MANAGING GENERIC MAIL ADDRESSES
  3. .LP
  4. While sending mail to people by specifying a mailbox on a named computer
  5. may fulfill the technical requirements of an electronic mail system, it
  6. may not always be very convenient.  With people having accounts on many
  7. different hosts and often moving between them, it is hard to keep track
  8. of where a person presently will read his or her mail.  For external
  9. senders, remembering strange host names for lots of people is even
  10. worse.  Just knowing that Person A, working in the same group as Person
  11. B, has a mailbox on Computer C does not mean that B also can be reached
  12. on that machine.  It may very well be that Computer C is A's personal
  13. workstation with no other accounts than A's.
  14. .PP
  15. Simply setting up as many forwarding addresses as possible on all sorts
  16. of machines does not solve the problem.  First of all, there might be
  17. reasons for a user to want to actually receive mail on any of these
  18. machines\*-e.g. because this may be the easiest way of copying files
  19. between remote machines.  Also, there is still no visible connection
  20. between the person and his group, which makes it hard to remember his
  21. address.
  22. .PP
  23. Another solution would be to have a special machine for mail forwarding,
  24. preferably with a name corresponding to the local organization.  Since
  25. all mail has to go through this node in order to reach its recipients,
  26. it may prove to be an expensive solution if this means that the extra
  27. load will restrain users from doing other useful work on the machine.
  28. Also, if this node goes down, no mail will be delivered until it comes
  29. up again.
  30. .PP
  31. Our proposed solution to the problem is to extend
  32. .I sendmail 's
  33. notion of aliases to include forwarding of non-local addresses as well
  34. as those specific to the local host.  This way, several hosts may share
  35. the non-local part of a aliases table and any of them can do the
  36. forwarding.  Users may change their preferred mailbox and computers may
  37. be renamed at any time with no change in the way their inbound addresses
  38. look like.  As an option, users'
  39. .DQ From:
  40. line addresses may be rewritten to correspond to the organizational
  41. address by using the same database.  For example, this author's mail
  42. address:
  43. .QQ
  44. lel@ida.liu.se  (\fIaka\fP lel@liuida.\s-1UUCP\s+1)
  45. .LP
  46. is implemented by an entry in the aliases files on set of Sun systems
  47. and a Gould.  All of them will forward messages for that address to my
  48. preferred mailbox on a
  49. .UC DEC system-20.
  50. Any message sent from either the Suns, the Gould, or the
  51. .UC DEC system-20
  52. will have 
  53. .DQ lel@ida.liu.se
  54. as the
  55. .DQ From:
  56. line return address.  The envelope sender, however, will at all times
  57. point to the actual user and host that originated the message.
  58. .PP
  59. This is implemented using an
  60. .I aliases
  61. file with extended syntax, called
  62. .I xaliases .
  63. Entries in this file are marked for either inbound or outbound aliasing.
  64. Inbound is the normal function, and may be used for non-local addresses
  65. as well as local ones.  Outbound aliasing is done on header sender lines
  66. by rewriting them to the LHS value in the
  67. .I xaliases
  68. entry.  The syntax for entries in this file is:
  69. .QQ
  70. alias, alias, \|.\|.\|.\|: prefix address, prefix address, \|.\|.\|.\|
  71. .LP
  72. where the first
  73. .I alias
  74. is the generic address that should be substituted for those in the
  75. header sender lines matching the RHS outbound
  76. .I addresses .
  77. All LHS
  78. .I aliases
  79. are mailboxes that should be forwarded to the RHS
  80. .I addresses
  81. marked inbound.  The
  82. .I prefix
  83. before each RHS
  84. .I address
  85. marks it as either inbound, outbound or both according to the following
  86. table:
  87. .QQ
  88. .TS
  89. l l .
  90. (\fIno mark\fP)    Inbound
  91. <    Outbound
  92. >    Inbound
  93. <>    Both Inbound and Outbound
  94. .TE
  95. .LP
  96. The
  97. .I xaliases
  98. file is then parsed by the
  99. .I xalparse (8)
  100. program, producing a normal
  101. .I aliases (5)
  102. file as output together with a
  103. .I dbm (1)
  104. input file, consisting of the outbound aliases.  An example would
  105. be:
  106. .QQ
  107. Fooey.Barbaz@dept, bar@dept, foo: <> fooey@besthost, < fobar@otherhost
  108. .LP
  109. which means that mails to either
  110. .DQ Fooey.Barbaz@dept,
  111. .DQ bar@dept,
  112. or
  113. .DQ foo@localhost
  114. will be forwarded to
  115. .DQ fooey@besthost
  116. and that mail from either
  117. .DQ fooey@besthost
  118. or
  119. .DQ fobar@otherhost
  120. will have their header sender lines substituted for
  121. .DQ Fooey.Barbaz@dept.
  122. See the supplied
  123. .I xaliases
  124. file for more examples.
  125. .PP
  126. An
  127. .I aliases
  128. file with non-local aliases should be processed by running
  129. .I sendmail
  130. with a configuration file having the
  131. .UC NEWALIASES
  132. identifier defined.  This makes it parse all addresses as local and
  133. return them to the
  134. .UC LOCAL
  135. mailer when building the dbm alias tables.  A delivering
  136. .I sendmail
  137. will then lookup all addresses in the
  138. .I aliases
  139. file and return any found to the
  140. .UC LOCAL
  141. mailer [ruleset 26].  The normal aliasing mechanisms of
  142. .I sendmail
  143. are then used to distribute the messages further.
  144. .PP
  145. The substitution of
  146. .DQ physical
  147. senders with
  148. .DQ generic
  149. addresses, is as previously mentinioned done in the header/sender
  150. specific ruleset 5 by lookup in the
  151. .UC GENERICFROM
  152. database.
  153. .NH
  154. SENDMAIL SOURCE MODIFICATIONS
  155. .LP
  156. .I Sendmail
  157. gives a lot of flexibility to the maintainer and developer of electronic
  158. mail.  Still, it lacks certain functionality for which it was determined
  159. that our project's goals could not be fulfilled without.  Just [sic]
  160. developing a new configuration file was not adequate, but changes to the
  161. source code itself had to be done.  Still, we did this with the
  162. philosophy that it is best to avoid source code modifications whenever
  163. it is possible to obtain the same results by merely changing parameters
  164. in the configuration file.
  165. .LP
  166. The following features have been implemented in our current version of
  167. .I sendmail (5.51++):
  168. .NH 2
  169. Nameserver Default Argument
  170. .LP
  171. Previously, there was no way of knowing whether a nameserver lookup
  172. was successful or not, thus making that feature of limited value.
  173. This version will allow you to add a
  174. .I default
  175. argument to the nameserver lookup function, which will be returned if
  176. the match fails.  A typical usage for this is to determine if a host is
  177. accessible using the
  178. .UC TCP/IP
  179. protocol family.
  180. The extended syntax is as follows:
  181. .QQ
  182. .B $[
  183. hostname
  184. .B $:
  185. default
  186. .B $]
  187. .LP
  188. where the 
  189. .B $: \fIdefault\fP
  190. part is optional.
  191. .NH 2
  192. Direct Access to Dbm(3) Files
  193. .LP
  194. The configuration file syntax has been expanded to include the
  195. declaration and usage of general
  196. .I ndbm (3)
  197. databases.  The option
  198. .SQ K
  199. (for
  200. .I "Keyed database" )
  201. has been added.  It takes two arguments, a one character internal name
  202. for the database and the corresponding
  203. .I dbm (3)
  204. file(s), as in:
  205. .QQ
  206. OKP/usr/lib/mail/pathtable
  207. .LP
  208. which defines the internal database
  209. .SQ P
  210. to be associated with the dbm files /usr/lib/mail/pathtable.dir and
  211. pathtable.pag (or pathtable.map and pathtable.dat if you are using
  212. Maryland's
  213. .I mdbm (3)
  214. package).
  215. .PP
  216. The
  217. .SQ P
  218. database may now be used to lookup arbitrary strings in the RHS of
  219. rewriting rules.  The syntax is as follows:
  220. .QQ
  221. \fB$(\fPx key \fB$@\fP arg \fB$:\fP default \fB$)\fP
  222. .LP
  223. where
  224. .I x
  225. is corresponds to a previously declared database,
  226. .I key
  227. is the string that should be searched for in the database.
  228. The
  229. .I arg
  230. and
  231. .I default
  232. arguments are optional.  The 
  233. .I default
  234. string is returned is if the
  235. .I key
  236. could not be found in the database.  If neither
  237. .I default
  238. string, nor a matching
  239. .I key
  240. is to be found, the whole expression expands to the value of
  241. .I key .
  242. However, if a result is found, it is used as the format string of a
  243. .I sprintf (3)
  244. expression, with the
  245. .I arg
  246. as extra argument.  Thus, database values with
  247. .DQ %s
  248. strings embedded in them can be useful when rewriting expressions.  This
  249. could typically be used in cooperation with the
  250. .I pathalias (1)
  251. program to expand routes without leaving
  252. .I sendmail .
  253. .PP
  254. The
  255. .I aliases (5)
  256. file is automatically available using the
  257. .SQ @
  258. database and should
  259. .B not
  260. be declared with a option
  261. .SQ K
  262. statement.
  263. .NH 2
  264. Batched
  265. .UC SMTP
  266. Support
  267. .LP
  268. .I Sendmail
  269. already speaks
  270. .UC SMTP
  271. over interactive channels, but because it both will drop errors occurring
  272. when acting as server as well as hang indefinitely when talking to a
  273. non-responding channel as client, this is not sufficient to process or
  274. produce
  275. .UC SMTP
  276. batches.
  277. Still, since the
  278. .UC SMTP
  279. code already is there,
  280. it was considered easier to add batching support internally in
  281. .I sendmail
  282. than to write new front-end programs.
  283. .PP
  284. The new code defines a new
  285. .UC MD_BSMTP
  286. mode, which is activated by the
  287. .B \-bb
  288. option or by making a link to 
  289. .I sendmail
  290. named
  291. .I bsmtp .
  292. The normal way of digesting
  293. .UC SMTP
  294. batches is to execute
  295. .I bsmtp
  296. with no arguments.
  297. .PP
  298. To produce
  299. .UC SMTP
  300. scripts, the 
  301. .UC M_BSMTP
  302. (\fBB\fP) mailer flag 
  303. has been added.  It is used as in the following example:
  304. .QQ -1
  305. MUUCP-B, P=/usr/bin/uux, F=BDFMSXhmpu, S=0,  R=15/0,  A=uux \- \-z \-r 
  306. $h!bsmtp
  307. .LP
  308. This defines the
  309. .UC UUCP-B
  310. mailer to send
  311. .UC SMTP
  312. scripts on the standard input to the
  313. .I uux (1)
  314. program.
  315. .NH 2
  316. Separate Envelope/Header Rewriting Rulesets
  317. .LP
  318. Envelope and header addresses does not always look the same.  For
  319. example, it
  320. is often desirable to have envelope return addresses formed using
  321. .UC RFC 822
  322. route syntax, while this format more rarely is understood by users'
  323. front-end mail programs.  Another case is when the envelope recipient
  324. address is expanded to a system route, while the header recipient
  325. should be kept simple.
  326. .PP
  327. With this package, the mail system administrator has the option of
  328. separating rewriting control for envelope/recipient addresses.
  329. Normally, all sender/recipient addresses are passed through rulesets 1
  330. and 2, but if the \fISplitRewriting\fP option
  331. .SQ /
  332. is set, only envelope addresses are handled that way; header addresses
  333. are given to rulesets 5 and 6, which should be properly defined.
  334. .PP
  335. Mailer dependant rewriting may also be controlled in an envelope/header
  336. specific way.  This is accomplished by extending the syntax for the 
  337. .SQ R
  338. and
  339. .SQ S
  340. attributes of the mailer definition statement:
  341. .QQ
  342. R=re/rh, S=se/sh
  343. .LP
  344. with the envelope and header rulesets divided by a slash.  If no slash
  345. is found, it functions as before by using the same ruleset for both
  346. types of rewriting.  A zero or missing ruleset indicates that no
  347. rewriting should be done.  In the previous example of the
  348. .I "Batched \s-1SMTP\s+1 Support" ,
  349. no mailer dependant sender rewriting is done, recipient envelope
  350. addresses are rewritten using ruleset 15, but recipient header addresses
  351. are left untouched.
  352. .NH 2
  353. Separate Local
  354. .UC UUCP
  355. Host Name
  356. .LP
  357. With the extensive, structured world of domains on one side and the
  358. flatspaced, shortnamed
  359. .UC UUCP
  360. world on the other, it may be desirable for a node to have a
  361. .UC UUCP
  362. node name separate from its normal host name.  For this purpose, the
  363. .B $k
  364. macro has been introduced to hold the local node's specific
  365. .UC UUCP
  366. host name.  It defaults to the node's
  367. .DQ normal
  368. host name (as returned by
  369. .I gethostname (3)),
  370. if not explicitly defined in the
  371. configuration file.  It is used when rewriting headers in the
  372. .I "\s-1UUCP\s+1 Relativization Routines"
  373. as well as when producing
  374. .UC UUCP
  375. .DQ From_
  376. lines with the
  377. .UC M_FROMPATH
  378. (\fBp\fP) turned on.
  379. .NH 2
  380. Return Path for
  381. .UC UUCP
  382. Mailers
  383. .LP
  384. The
  385. .UC M_FROMPATH
  386. (\fBp\fP) mailer flag is used by the
  387. .UC SMTP
  388. routines to add the local
  389. host to the envelope sender in the
  390. .UC "MAIL FROM:"
  391. command.  This is a useful option for producing trustworthy routes
  392. back to the sender for receipts and error messages.  This capability
  393. has now been added the the code that produces
  394. .UC UUCP
  395. .DQ From_
  396. lines.  The sender's address is simply prefixed using the local host's
  397. .UC UUCP
  398. name and an exclamation mark\*-the canonical way of constructing
  399. paths in the
  400. .UC UUCP
  401. world.  (For mailers with the
  402. .UC M_UGLYUUCP
  403. flag (\fBU\fP) set, the local host's name is added after the
  404. .DQ "remote from"
  405. string.)
  406. .NH 2
  407. .UC UUCP
  408. Header Address Relativization
  409. .LP
  410. A new
  411. .UC M_RELATIVIZE
  412. (\fBV\fP) mailer flag has been added, which relativizes header lines
  413. with respect to the immediate recipient host.  This means that
  414. .I paths
  415. through the remote host will have the remote node's name removed (local
  416. recipients at the remote host are untouched) and that other addresses
  417. are rewritten to have paths through the local host.
  418. .PP
  419. Specifically,
  420. .DQ \fB$h\fP!\|.\|.\|.\|!user
  421. addresses are stripped down to the
  422. .DQ \|.\|.\|.\|!user
  423. part,
  424. .DQ \fB$h\fP!user
  425. are left untouched, and
  426. .DQ "others"
  427. rewritten into
  428. .DQ \fB$k\fP!others
  429. (the initial value of \fB$w\fP is used if \fB$k\fP is undefined).
  430. .NH 2
  431. Support for Multi-Token Class Matches
  432. .LP
  433. When
  434. .I sendmail
  435. tried to match a LHS \fB$=\fPX class expression, it used to be the case
  436. that it only looked for matches with one token.  If the period is a
  437. delimiter and if
  438. .DQ foo.\s-1EDU\s+1
  439. is a member of the
  440. .SQ X
  441. class, it would not find the string
  442. .DQ foo.\s-1EDU\s+1
  443. in the class since it contained three tokens
  444. .DQ foo "" (
  445. .DQ .
  446. and
  447. .UQ EDU ).
  448. This was considered such a great inconvenience that the expression
  449. matching code was rewritten to allow multi-token class matches on the
  450. expense of being somewhat slower.  With the above example, the current
  451. version will first try to find a match for
  452. .DQ foo
  453. then
  454. .DQ foo.
  455. then
  456. .DQ foo.\s-1EDU\s+1
  457. and so on, each time incorporating the next successive token of the
  458. expression in the class match.
  459. .NH 2
  460. Support for Embedded Subruleset Calls
  461. .LP
  462. Being a
  463. .UC LISP
  464. hacker of heart, the author couldn't refrain from making
  465. .I sendmail
  466. handle embedded ruleset calls.  The previous version had the very
  467. annoying restriction of only allowing one ruleset call per rule and only
  468. allowing the
  469. .B $@
  470. and
  471. .B $:
  472. macros to appear on its left side.  The current version handles both
  473. embedded ruleset calls of the form
  474. .DQ "$>4$>10$>6 $1@.$2"
  475. as well as arbitrarily positioned calls within the RHS expression
  476. (although the latter has not been fully tested).
  477. .NH 2
  478. Elaborate Matching Algorithm for Unknown Local Recipients
  479. .LP
  480. Based on the idea that it always is a bad idea to throw mail back
  481. with a
  482. .DQ "User Unknown"
  483. error message if a human operator might be able to guess the actual
  484. recipients identity, we have added a more elaborate search algorithm
  485. that matches unknown recipients with the personal name field of the
  486. /etc/passwd file.  The previous version of
  487. .I sendmail
  488. offered a similar functionality, but would only find strings that were
  489. exact copies of that field.  This version uses an algorithm that will
  490. return a number corresponding to the degree of similarity between the
  491. two strings.  Strings are considered match best if as many mutual
  492. substrings as possible are found in sequence.  Substrings are delimited
  493. by any non-alphabetic character and completely equal substrings are
  494. better matches than just prefixes.
  495. .PP
  496. The best match of such a search through the /etc/passwd file is returned
  497. as the local recipient, provided that only one such match exists.  If no
  498. best match is found (i.e., if more than one
  499. .I passwd
  500. entry have the same highest matching degree), the search fails and the
  501. mail is returned with an error message.
  502. .NH 2
  503. Support for Maryland's Mdbm Package
  504. .LP
  505. Sites that do not yet have the new
  506. .I ndbm (3)
  507. functions of
  508. .UC BSD
  509. 4.3 may still use the
  510. .I "Database Access Functions"
  511. described above using the University of Maryland's public domain
  512. multi-dbm routines, which are available from your nearest
  513. comp.sources.unix archive.  Note that these use different extensions of
  514. their database files (.map and \&.dat instead of \&.dir and \&.pag) as
  515. well as a different internal format than
  516. .I dbm (3),
  517. so it is still recommended to use
  518. .I ndbm (3)
  519. whenever possible.
  520. .NH 2
  521. Improved Test Mode Output
  522. .LP
  523. It is hard to remember what all these
  524. .DQ ^X s
  525. and
  526. .DQ ^V s
  527. stand for when debugging sendmail rewriting rules, using its address
  528. rewriting test mode.  The changes in this version will make macros print
  529. in their symbolic form, i.e.
  530. .DQ "\fB$:\fP"
  531. for
  532. .DQ "^X,"
  533. etc.
  534. .PP
  535. In addition, at least this
  536. .I sendmail.cf
  537. developer often wanted to send addresses directly into a specific
  538. ruleset without having them automatically rewritten by ruleset 3.
  539. Thus, the initial call to ruleset 3 has been 
  540. .B deleted
  541. in this version.  You will have to send your addresses manually through
  542. ruleset 3 henceforth if you adopt this change.
  543. .PP
  544. Finally, the ruleset rewriting output often became too wide to be easily
  545. read due to the excess of quotation marks around the tokens.  These have
  546. now been removed from the test output, leaving just a space between each
  547. token.  The author thinks this is much more convenient and hopes that
  548. you agree.
  549. .NH 2
  550. Better To: and Cc: Headers of Returned Messages
  551. .LP
  552. The original code would produce multiple To: header lines in returned
  553. messages if the message was sent to more than one recipient.  A typical
  554. reason for this to happen was if you used the PostMasterCopy option in
  555. your
  556. .I sendmail.cf
  557. file.  This version will put the PostMasterCopy on a separate Cc: line
  558. and all others together in a comma-separated list on the To: line.
  559. .NH 2
  560. Queue Bug Fixed
  561. .LP
  562. A nasty little queue bug bit us hard several times last year.  It
  563. occurred when, for whatever reason, the queue daemon ended up processing
  564. a locked queue entry as its last.  It immediately discovered that it was
  565. locked and left it alone, but then exited and while doing general
  566. cleanup in
  567. .I finis ,
  568. removed the locked queue file as well.  That way, we frequently started
  569. ending up with broken queue files and lost messages as a consequence.
  570. The fix is to explicitly set the current envelope's id to
  571. .UC NULL
  572. before leaving the current queue pass, since it should not exist
  573. anyway.
  574. .NH 2
  575. Shared Input
  576. .UC SMTP
  577. Bug Tentatively Fixed
  578. .LP
  579. The
  580. .UC SMTP
  581. server routines read delivery requests from stdin.  Each message is
  582. handled by a different process by forking after the
  583. .UC "MAIL FROM:"
  584. command is read.  The parent then sleeps while the child delivers the
  585. message and continues to process more
  586. .UC SMTP
  587. commands thereafter.  Now, both parent and child read from stdin and
  588. share the same file descriptor.  However, they do not share the same
  589. .I _iobuf
  590. that represents the stream, so when the parent starts reading
  591. after the child has died, it reads the very same input that the child
  592. has processed.\**
  593. .FS
  594. Unless stdin is connected to a terminal.
  595. .FE
  596. .PP
  597. There are only two ways out of this.  Either, the parent process don't
  598. fork and delivers all messages itself, or they all read unbuffered.  The
  599. former solution (or a variant thereof) is probably better, but the
  600. latter was easier to implement, so that is what presently have been
  601. done.  Since this causes unnecessary overhead as each character has to
  602. be read with a system call, someone ought to make a better fix for this
  603. eventually.
  604. .NH 2
  605. Optional
  606. .UC BSD
  607. 2.9 and 4.2 Compatibility Code
  608. .LP
  609. The Kit includes a set of changes that optionally may be added to make
  610. the 5.51 version of
  611. .I sendmail
  612. run under the Berkeley 4.2 or 2.9 release of
  613. .UX .
  614. The changes neccesary to make it run under 4.2 are very minor and mostly
  615. deal with adding undefined symbols.  The 2.9 changes are fewer than you
  616. would expect, although it still is necessary to drastically trim down
  617. the size of
  618. .I sendmail 's
  619. buffers if you intend to run it on a
  620. .UC PDP -11.
  621. The 2.9 changes are all enclosed under the
  622. .UC BSD 29
  623. define.
  624. .PP
  625. .NH 2
  626. Miscellaneous Changes
  627. .LP
  628. In addition to what already has been mentioned, a set of changes has
  629. been included that only add minor functionality or deal with less
  630. important bugs in the original source.  They are further described in
  631. .I "Appendix A: List of Affected Files" .
  632. .NH
  633. CONCLUSION
  634. .LP
  635. The development of the IDA Sendmail Enhancment Kit has been going on
  636. more or less continuously for over two years.  Many were the interim
  637. versions and many were the nights spent testing the newly configured
  638. system.  Still, it is our feeling that the current version is complete
  639. enough to be considered generally useful, and it is our sincere hope
  640. that you have found your time spent reading this document worthwhile.
  641. .PP
  642. The problems with complex hybrid addresses are parts of the growing
  643. pains of a rapidly expanding world of interconnecting computer networks.
  644. It is this author's opinion that it ultimately will be necessary to
  645. agree on some common way of identifying message originators and
  646. recipients.  In the mean time, we will have to face the world as it is
  647. and try to relieve users' pains as much as possible by letting the MTAs
  648. worry about routing and foreign addressing format issues.
  649. .PP
  650. An excellent source for further reading is John Quarterman's and Hosiah
  651. Hoskins' article
  652. .I "Notable Computer Networks"
  653. \&
  654. .[[
  655. %A John Quarterman
  656. %A Hosiah Hoskins
  657. %T Notable Computer Networks
  658. %J Communications of the ACM
  659. %V 29
  660. %N 10
  661. %D 1986
  662. .]],
  663. which gives a thorough overview of existing major computer networks and
  664. supplied services around the world, with an emphasis on electronic mail.
  665. Their survey has been an invaluable source of information for this
  666. author among others.
  667. .PP
  668. Electronic mail is truly an interesting medium.  It combines the speed
  669. of the telephone with the asychronacity of the written letter.  In
  670. addition, it gives possibilities for developing all sorts of interesting
  671. computerized communication services, such as electronic conferencing
  672. systems and database or expert systems consultation services.  But above
  673. all, it communicates across all boundaries with no respect to operating
  674. systems or computer brands.  It may not always be painless, but that can
  675. be improved.  As long as we communicate, everything can be improved.
  676. .QQ
  677. .ad r
  678. .I
  679. The Mail Connectivity Conspiracy Continues\|.\|.\|.\|\c
  680. .R
  681. \&
  682. .[[
  683. %A Mark Crispin
  684. %T (Private Communication)
  685. %D 1986
  686. .]]
  687. .br
  688. .ad b
  689. .AP A
  690. LIST OF AFFECTED FILES
  691. .LP
  692. This is description of all changes made to the
  693. .I sendmail
  694. source files.
  695. .SH
  696. .UL "Nameserver Default Argument"
  697. .JB daemon.c
  698. Changed to return
  699. .UC TRUE
  700. if
  701. .I gethostbyname (3)
  702. succeeds and
  703. .UC FALSE
  704. if not.
  705. .JB parseaddr.c
  706. Changed to interpret the
  707. .B $:
  708. .I default
  709. argument and to take care of the returned value of
  710. .I maphostname .
  711. .SH
  712. .UL "Direct Access to Dbm(3) Files"
  713. .JB alias.c
  714. Changed to allow access using the
  715. .SQ @
  716. database.
  717. .JB conf.c
  718. Changed to initialize all databases to
  719. .UC DB_NOTYETOPEN .
  720. .JB daemon.c
  721. The lookup function
  722. .I mapkey
  723. goes here.  It takes four arguments:
  724. .I db ,
  725. the character denoting the database,
  726. .I key ,
  727. the lookup string and buffer in which a result is returned,
  728. .I keysiz ,
  729. the maximum size of the key buffer, and
  730. .I arg ,
  731. which either should be a character string or
  732. .UC NULL .
  733. The function returns
  734. .UC TRUE
  735. if a match could be found and
  736. .UC FALSE
  737. otherwise. The debugging flag 60 may be used to trace database lookups.
  738. .JB main.c
  739. Added mappings of
  740. .B $(
  741. and
  742. .B $)
  743. to
  744. .UC KEYBEGIN
  745. and
  746. .UC KEYEND .
  747. .JB parseaddr.c
  748. Added code to interpret \fB$(\fP\|.\|.\|.\|\fB$)\fP
  749. constructs.
  750. .JB readcf.c
  751. Added understanding of the
  752. .SQ K
  753. option.
  754. .JB sendmail.h
  755. Added definitions for the macro characters 
  756. .UC KEYBEGIN
  757. and 
  758. .UC KEYEND .
  759. Added the declaration of the global database file table DbmTab.
  760. .SH
  761. .UL "Batched \s-1SMTP\s+1 Support"
  762. .JB main.c
  763. Added the
  764. .UC MD_BSMTP
  765. option and the usage of
  766. .I bsmtp
  767. as an alternate name of
  768. .I sendmail
  769. that automatically will turn on the
  770. .UC MD_BSMTP
  771. mode.
  772. .JB sendmail.h
  773. Added the
  774. .UC MD_BSMTP
  775. define.
  776. .JB srvrsmtp.c
  777. Added the
  778. .I batched
  779. argument (boolean) to the
  780. .I smtp 
  781. function and changes that will make it mail
  782. back errors is
  783. .I batched
  784. is set.
  785. .JB usersmtp.c
  786. Changed the code to automatically generate internal
  787. .UC SMTPGOODREPLY
  788. (\fB250\fP)
  789. reply codes to all
  790. .UC SMTP
  791. commands if the
  792. .UC M_BSMTP
  793. mailer flag is set.
  794. .SH
  795. .UL "Separate Envelope/Header Rewriting Rulesets"
  796. .JB headers.c
  797. Changed to propagate a flag telling if this is an envelope or header
  798. address for
  799. .I remotename
  800. to rewrite.
  801. .JB main.c
  802. Trace statement changed to display mailers' envelope and header specific
  803. rulesets.
  804. .JB parseaddr.c
  805. Added a boolean
  806. .I headeraddress
  807. argument to
  808. .I remotename
  809. and code to distinguish between envelope and header rewriting.
  810. .JB queue.c
  811. Set both envelope and header rewriting rulesets to -1 in
  812. .I nullmailer .
  813. .JB readcf.c
  814. Made it parse the
  815. .SQ /
  816. option and the extended mailer ruleset specification syntax.
  817. .JB sendmail.h
  818. Extended the mailer declaration to include both envelope and header
  819. specific rulesets.
  820. .SH
  821. .UL "Separate Local \s-1UUCP\s+1 Host Name"
  822. .JB deliver.c
  823. Used when producing
  824. .DQ From_
  825. lines.
  826. .JB main.c
  827. Added the definition of
  828. .B $k
  829. to the initial value of
  830. .B $w .
  831. .JB parseaddr.c
  832. Used when making addresses
  833. .UC UUCP
  834. relative.
  835. .SH
  836. .UL "Return Path for \s-1UUCP\s+1 Mailers"
  837. .JB deliver.c
  838. Changed to look for the mailer flag
  839. .UC M_FROMPATH
  840. when producing the
  841. .UC UUCP
  842. .DQ From_
  843. lines.
  844. .SH
  845. .UL "\s-1UUCP\s+1 Header Address Relativization"
  846. .JB parseaddr.c
  847. Changed to
  848. .I uurelativize
  849. addresses after ruleset 4 has been applied if the
  850. .U M_RELATIVIZE
  851. mailer flag is set.  The actual
  852. .I uurelativize
  853. is here too.
  854. .JB sendmail.h
  855. Defined the
  856. .UC M_RELATIVIZE
  857. flag to be 'V'.
  858. .SH
  859. .UL "Support for Multi-Token Class Matches"
  860. .JB parseaddr.c
  861. Crude code added to enable multi-token class matches.
  862. .SH
  863. .UL "Support for Embedded Subruleset Calls"
  864. .JB parseaddr.c
  865. Wrote a separate
  866. .I callsubr
  867. function to take care of subruleset calls.
  868. .SH
  869. .UL "Elaborate Matching Algorithm for Unknown Local Recipients"
  870. .JB recipient.c
  871. Added the 
  872. .I partialstring
  873. matching routine and code that calls it for unknown local recipients.
  874. .SH
  875. .UL "Support for Maryland's mdbm Package"
  876. .JB alias.c
  877. Changed to be independent on which package is being used.
  878. .JB conf.h
  879. Added the
  880. .UC MDBM
  881. define, to be used if the mdbm routines should be used instead of the
  882. ndbm. 
  883. Note that
  884. .UC NDBM
  885. still should be defined.
  886. .JB mdbm_compat.h
  887. A mdbm compatibility file, used to define macros which map ndbm
  888. functions to their mdbm equivalents.
  889. .JB sendmail.h
  890. Added mdbm compatibility macros and generalized the dbm code in general.
  891. .SH
  892. .UL "Improved Test Mode Output"
  893. .JB main.c
  894. Changed it to export the macros' symbolic names.
  895. .JB parseaddr.c
  896. Changed it to call
  897. .I printcav
  898. instead of
  899. .I printav
  900. when tracing the rewriting rules.
  901. .JB sendmail.h
  902. Included main.c's macro table among the global variables.
  903. .JB util.h
  904. Changed it to print macros using their symbolic names.  Added the
  905. .I printcav
  906. function, which prints argument vectors without enclosing quotation
  907. marks.
  908. .SH
  909. .UL "Better To: and Cc: Headers of Returned Messages"
  910. .JB savemail.c
  911. Changed the code to produce the above result.
  912. .SH
  913. .UL "Queue Bug Fixed"
  914. .JB queue.c
  915. Set the current envelope's id to
  916. .UC NULL
  917. before exiting.
  918. .SH
  919. .UL "Shared Input \s-1SMTP\s+1 Bug Tentatively Fixed"
  920. .JB main.c
  921. Turned off buffering from standard input before the call to
  922. .I smtp .
  923. .SH
  924. .UL "Optional \s-1BSD\s+1\&4.2 Compatibility Code"
  925. .JB conf.h
  926. Added the definition of
  927. .I sigmask
  928. if left undefined by <signal.h>.
  929. Added mock definitions for
  930. .UC LOG_MAIL ,
  931. .UC TRY_AGAIN ,
  932. and
  933. .I h_errno .
  934. .SH
  935. .UL "Optional \s-1BSD\s+1\&2.9 Compatibility Code"
  936. .JB conf.h
  937. Added the definition of 
  938. .UC EPROCLIM
  939. (not really applicable under
  940. .UC BSD
  941. 2.9) and the inclusion of ../lib/libndir/dir.h.
  942. .JB conf.c
  943. Changed to include <a.out.h> instead of <nlist.h>, and to search /unix
  944. instead of /vmunix for kernel symbols.
  945. .JB daemon.c
  946. Changed to use
  947. .I gethostname (3)
  948. instead of <whoami.h> to find out its local host name.
  949. .JB deliver.h
  950. Changed not to include <netdb.h>
  951. .JB err.c
  952. Changed not to include <netdb.h>
  953. .SH
  954. .UL "Miscellaneous Changes"
  955. .JB deliver.c
  956. An array of verbose mailer error messages has been added together with
  957. code that prints out the error in text instead of just giving the code
  958. in numeric form.  [Incorporated from
  959. .UC USENET ]
  960. .JB main.c
  961. A new
  962. .B \-Z
  963. command line option has been added, which defines the name of the frozen
  964. configuration file in analogy with
  965. .B \-C .
  966. .JB parseaddr.c
  967. Has been changed to compare aliased users with
  968. .I sameword
  969. instead of
  970. .I strcmp
  971. to make up for differencing case.
  972. .JB sendmail.h
  973. The reference to <sys/syslog.h> has been replaced by <syslog.h> unless
  974. sendmail is compiling on a
  975. .UC VAX .
  976. I'm not sure that this is correct, but neither our Suns, nor the Gould
  977. had syslog.h in that directory.  Also,
  978. .I s_host ,
  979. has been forced undefined if compiling on a Sun.  This is because it is
  980. defined in one of the Sun's include files as well.
  981. .JB srvrsmtp.c
  982. The
  983. .B $s
  984. macro was set to be the name of the remote host, but then cleared before
  985. it could be used.  It is now being set
  986. .I after
  987. the relevant cleanup routines have been run.  An unnecessary additional
  988. rewriting of envelope recipient addresses in the
  989. .UC SMTP
  990. routines has been removed.  It could even be harmful if it was to be
  991. left alone.
  992. .JB ../doc/op.me
  993. Added text to describe our new, wonderful features.
  994. .AP C
  995. CUSTOMIZATION PARAMETERS
  996. .LP
  997. The following is a list of all
  998. .I m4
  999. identifiers used in the configuration file.
  1000. All of them are optional.
  1001. .JS ALIASES
  1002. Name of the aliases file, defaults to sendmail's default.
  1003. .JS BSD29
  1004. .br
  1005. Activates various hacks for usage on
  1006. .UC BSD
  1007. 2.9 systems.
  1008. .JS BANGIMPLIESUUCP
  1009. .br
  1010. If defined, will inhibit domaintable lookups for unqualified nodes first
  1011. in
  1012. .SQ ! -paths
  1013. and always interpreting them to reside in the
  1014. .UC UUCP
  1015. pseudo-domain.
  1016. .JS DECNETNODES
  1017. A file containing
  1018. .UC DEC net
  1019. host names.  Used in combination with
  1020. .UC DECNETXTABLE
  1021. to determine delivery through the
  1022. .UC DEC net
  1023. mailer and when to expand flatspaced
  1024. .UC DEC net
  1025. host names into domains.
  1026. .JS DECNETXTABLE
  1027. The
  1028. .UC DEC net
  1029. translation table.  Returns a node's
  1030. .UC DEC net
  1031. host name if given its domain name. 
  1032. .I Dbm "" (
  1033. file, see ruleset 24 for more info).
  1034. .JS DEFAULT_HOST
  1035. Explicit host name, replaces automatic definition of
  1036. .B $w .
  1037. [Not normally used]
  1038. .JS DEFAULT_DOMAIN
  1039. The string that (+ 
  1040. .SQ "." )
  1041. will be attached to
  1042. .B $w
  1043. to form
  1044. .B $j ,
  1045. this node's official domain name.  Should only be left undefined when
  1046. your hostname (\fB$w\fP) already contains its domain.
  1047. .JS DOMAINTABLE
  1048. .I Dbm
  1049. database used for hostname canonicalization, i.e.  to find the official
  1050. domain name for local or otherwise unqualified hosts.
  1051. .JS GENERICFROM
  1052. A database mapping actual user names to generic user names.  Used
  1053. instead of
  1054. .UC HIDDENNET
  1055. in a heterogeneous environment.
  1056. .JS HIDDENNET
  1057. Points to a file containing a list of host names, one per line.  Mail
  1058. from users on any of these hosts will have their host names substituted
  1059. for our host,
  1060. .B $w .
  1061. .JS LIBDIR    
  1062. .br
  1063. The directory that will hold most data files, including
  1064. sendmail.{hf,st}; defaults to /usr/lib/mail.
  1065. .JS PATHTABLE
  1066. The heart & soul of this sendmail configuration\*-the pathalias routing
  1067. table in
  1068. .I dbm (3)
  1069. format, as produced by the
  1070. .I pathalias (1)
  1071. program.  If you want some kind of routing capabilities, you either
  1072. define this or rely on
  1073. .UC RELAYHOST/RELAYMAILER .
  1074. .JS MAILERTABLE
  1075. A
  1076. .I dbm
  1077. table mapping node names to
  1078. .DQ "mailer:host"
  1079. pairs.  It is used for special cases when the resolving heuristics of
  1080. ruleset 26 aren't enough.
  1081. .JS NEWALIASES
  1082. If defined, will make ruleset 26 return all addresses as local.  This
  1083. should be used by the newaliases program only when parsing the aliases
  1084. file if you want to handle non-local aliases as well as local.
  1085. .JS PSEUDONYMS
  1086. Additional names that we are known under (in addition to the nicknames
  1087. returned by
  1088. .I gethostbyname (3)).
  1089. .JS "RELAY_HOST & RELAY_MAILER"
  1090. Name of the host and mailer to ship unknown recipient addresses to.  Not
  1091. necessary to define if you have a complete
  1092. .UC PATHTABLE .
  1093. .JS RSH_SERVER
  1094. If defined, do local deliveries by 
  1095. .I rsh (1)'ing
  1096. /bin/mail on the 
  1097. .UC RSH_SERVER
  1098. host.
  1099. .JS SPOOLDIR
  1100. Directory for sendmail queue files; defaults to /usr/spool/mqueue.
  1101. .JS UUCPNAME
  1102. This node's
  1103. .UC UUCP
  1104. host name, if different from
  1105. .B $w .
  1106. .JS UUCPNODES
  1107. A file containing names of directly connectable 
  1108. .UC UUCP
  1109. nodes, normally /usr/lib/uucp/L.sys.
  1110. .JS UUCPPRECEDENCE
  1111. If defined, will change the interpretation of mixed
  1112. .SQ ! -
  1113. /
  1114. .SQ @ -addresses
  1115. to use heuristics instead of always preferring
  1116. .UC RFC 822
  1117. style.\**
  1118. .FS
  1119. Not fully tested.
  1120. .FE
  1121. .JS UUCPRELAYS
  1122. Name of file containing names of known 
  1123. .UC UUCP ) (
  1124. relays.  Header addresses containing paths through any of these will be
  1125. shortened by having the path to the relay removed.  (It is assumed that
  1126. paths to each of these are known to everybody)
  1127. .JS UUCPXTABLE
  1128. A table mapping domain node names to 
  1129. .UC UUCP
  1130. node names. Used in envelope addresses sent using  
  1131. .UC UUCP /rmail.
  1132. .AP D
  1133. LIST OF DOMAINS
  1134. .LP
  1135. The following is a list of all top-level domains officially registered
  1136. with the SRI Network Information Center as of May 13, 1987:
  1137. .QQ
  1138. .SH
  1139. Organizational Domains
  1140. .LP
  1141. .TS
  1142. box;
  1143. lI lI
  1144. lp-1 l .
  1145. Domain    Organizations
  1146. _
  1147. COM    Commercial
  1148. EDU    Educational
  1149. GOV    Government
  1150. MIL    Military
  1151. NET    Network Administrations
  1152. ORG    Other Organizations
  1153. .TE
  1154. .SH
  1155. National Domains
  1156. .LP
  1157. .TS
  1158. box;
  1159. lI lI
  1160. lp-1 l .
  1161. Domain    Country
  1162. _
  1163. AU    Australia
  1164. DE    Germany
  1165. FI    Finland
  1166. FR    France
  1167. IL    Israel
  1168. JP    Japan
  1169. KR    Korea
  1170. NO    Norway
  1171. NL    The Netherlands
  1172. NZ    New Zealand
  1173. SE    Sweden
  1174. UK    The United Kingdom
  1175. US    The United States of America
  1176. .TE
  1177. .SH
  1178. Network Domains
  1179. .LP
  1180. .TS
  1181. box;
  1182. lI lI
  1183. lp-1 l .
  1184. Domain    Network
  1185. _
  1186. ARPA    The Advanced Research Projects Agency Network
  1187. .TE
  1188. which is the only officially registered network domain, but others more
  1189. or less widely recognized are:
  1190. .TS
  1191. box;
  1192. lp-1 l .
  1193. BITNET    IBM Network, includes \s-1NETNORTH\s+1 and \s-1EARN\s+1
  1194. CSNET    The Computer Science Network
  1195. JUNET    The Japanese University Network
  1196. MAILNET    A now deceased(?) networking project centered around \s-1MIT-MULTICS\s+1
  1197. OZ    The Australian Computer Science Network (ACSnet)
  1198. SUNET    The Swedish University Network
  1199. UNINETT    The Norwegian University Network
  1200. UUCP    The \s-1UNIX\s+1-to-\s-1UNIX\s+1-Copy Network
  1201. .TE
  1202. .AP F
  1203. LIST OF DATA FILES
  1204. .LP
  1205. The following is a list of all data files used by the
  1206. .I sendmail
  1207. program in conjunction with the supplied configuration file.  Not all of
  1208. them are used in the sample setup.  Not all of them will probably be
  1209. needed by your setup either.
  1210. .JB aliases
  1211. \&.\|.\|.is better described in
  1212. .I aliases (5).
  1213. .JB domaintable
  1214. \&.\|.\|.is domain name table used when finding a node's canonical name.
  1215. It is written in
  1216. .I dbm (1)
  1217. .B parse
  1218. format.
  1219. .JB generics
  1220. \&.\|.\|.is automatically produced by the
  1221. .I xalparse (8)
  1222. program from the xaliases file.  It contains entries mapping sending
  1223. user's real addresses to generic ones.
  1224. .JB hiddennet
  1225. \&.\|.\|.may contain a list of node (domain) names that should be hidden
  1226. by the local host's name on header sender addresses.
  1227. .JB mailertable
  1228. \&.\|.\|.defines the mapping from node (domain) names to
  1229. .I "Special Mailers" .
  1230. It is written in
  1231. .I dbm (1)
  1232. .B parse
  1233. format, with each value being a
  1234. .DQ mailer:host
  1235. tuple.
  1236. .JB newaliases.cf
  1237. \&.\|.\|.is a configuration file produced by having defined the
  1238. .UC NEWALIASES
  1239. identifier in the master file.  This should only be used when producing
  1240. a new
  1241. .I aliases (5)
  1242. dbm table, because it returns all addresses to the
  1243. .UC LOCAL
  1244. mailer in order to accept non-local aliases.
  1245. .JB pathtable
  1246. \&.\|.\|.is the basis for all explicit routing decisions.  It is written
  1247. in
  1248. .I pathalias (1)
  1249. format and describes how systems connect to each other and where to
  1250. forward according to (parent) domains.
  1251. .JB xaliases
  1252. \&.\|.\|.is the extended aliases file that is used to produce the
  1253. .I aliases (5)
  1254. file together with the
  1255. .I generics
  1256. file.  It is further described in the section about
  1257. .I "Managing Generic Mail Addresses" .
  1258. .JB \\\\\\\\k:\fInetwork\fB/nodes\\\\\\\\h'|\\\\\\\\n:u'\\\\\\\\v'+1'\fInetwork\fB/xtable\fR\\\\\\\\v'-1'
  1259. .\".JB \fInetwork\fB/nodes\fR
  1260. .\"\&.\|.\|.and.\|.\|.
  1261. .\".br
  1262. .\".ti -\n(I\n(IRu
  1263. .\".B \fInetwork\fB/xtable\fR\t\c
  1264. \&.\|.\|.are used when translating node names from one network to
  1265. another.  The
  1266. .B nodes
  1267. file contain all internally known node names for the network and
  1268. .B xtable
  1269. is a translation table that maps official domain names to the network's
  1270. internal node names.
  1271. .JB uucp/relays
  1272. \&.\|.\|.contains node names of well-known
  1273. .UC UUCP
  1274. relays.  It is used when compressing header paths in the header
  1275. rewriting rulesets.
  1276. .AP I
  1277. INSTALLATION INSTRUCTIONS
  1278. .LP
  1279. These instructions will tell you step-by-step how to install and bring
  1280. the Kit's
  1281. .I sendmail
  1282. system up.  The source code modifications are given as context
  1283. .I diff (1)'s,
  1284. based on the
  1285. .UC BSD
  1286. 4.3 release of
  1287. .I sendmail
  1288. (version 5.11), ready to be installed using Larry Wall's eminent
  1289. .I patch
  1290. program.  You will also need Maryland's
  1291. .I mdbm
  1292. library if you intend to use this instead of
  1293. .I ndbm .
  1294. Finally, in order to automatically produce routing tables, you will need
  1295. Peter Honeyman's
  1296. .I pathalias
  1297. program.  All of these are available from your nearest
  1298. .UC USENET
  1299. .B comp.sources.unix
  1300. archive.
  1301. .PP
  1302. Now, assuming that you have read this far and made up your mind to try
  1303. it all for yourself, do the following:
  1304. .II 1
  1305. Unpack the Kit in the
  1306. .B sendmail
  1307. directory (preferably).  This should give you a new
  1308. .B ida
  1309. subdirectory with all the Kit's files.
  1310. .II
  1311. Goto
  1312. .B sendmail/ida
  1313. and check that you agree with the Makefile's definitions.  If you change
  1314. anything, do a
  1315. .DQ "make configure"
  1316. to propagate those changes to the subdirectories' Makefiles.
  1317. .II
  1318. Goto
  1319. .B sendmail/ida/doc .
  1320. Doing
  1321. .DQ "make doc"
  1322. will print out this paper but since you already are reading it, this
  1323. might be unneccesary.  Anyway, do
  1324. .DQ "make man"
  1325. to print the manual pages.  Do
  1326. .DQ "make install"
  1327. to install them in your manuals directory.
  1328. .II
  1329. Goto
  1330. .B sendmail/ida/patches
  1331. and do
  1332. .DQ "make backup."
  1333. This will create a backup copy of
  1334. .B sendmail/src/*.[hc]
  1335. and
  1336. .B sendmail/doc/op.me
  1337. in
  1338. .B Backup.tar .
  1339. You can restore them if necessary by performing
  1340. .DQ "make restore,"
  1341. still in the patches directory.
  1342. .II
  1343. Do one of
  1344. .DQ "make bsd43,"
  1345. .DQ "make bsd42,"
  1346. or
  1347. .DQ "make bsd29"
  1348. to patch the
  1349. .I sendmail
  1350. source to the required compatibility level.  You will need
  1351. .I patch (1),
  1352. for this or else edit the files by hand.  Look out for rejected patches.
  1353. .II
  1354. Goto
  1355. .B sendmail/src
  1356. and recompile
  1357. .I sendmail .
  1358. See that it still works.  Your old configuration file
  1359. .I should
  1360. still work unless you depend on some obscure side effects.  Note that a
  1361. .UC BSD
  1362. 4.2 configuration file might not work with
  1363. .I sendmail
  1364. 5.11.
  1365. .II
  1366. Goto
  1367. .B sendmail/ida/aux
  1368. and do
  1369. .DQ "make"
  1370. to compile the auxiliary programs.  Try them out, guided with the newly
  1371. printed manual pages.
  1372. .II
  1373. Do
  1374. .DQ "make install"
  1375. to install the programs in
  1376. .UC BINDIR
  1377. (\fB/usr/local/bin\fP by default; but another choice would be
  1378. .B /usr/lib/mail
  1379. if you only intend to use them with this kit).  It's also about time to
  1380. (manually) do a (symbolic) link from
  1381. .B /usr/ucb/bsmtp
  1382. to
  1383. .B /usr/lib/sendmail
  1384. if you intend to receive batched
  1385. .UC SMTP
  1386. mail.
  1387. .II
  1388. Goto
  1389. .B sendmail/ida/cf
  1390. and inspect the supplied
  1391. .I m4 (1)
  1392. configuration definitions.  Send
  1393. .B Sendmail.mc
  1394. to your line printer and study it.  Do
  1395. .DQ "make"
  1396. to see how the sample configurations look expanded.
  1397. .II
  1398. Goto
  1399. .B sendmail/ida/lib
  1400. and inspect the supplied sample data files.  Try applying the
  1401. .I xalparse
  1402. program on the
  1403. .I xaliases
  1404. file if you feel like it.
  1405. .II
  1406. Determine your site's routing capabilities and create your corresponding
  1407. data files in
  1408. .UC LIBDIR .
  1409. Go back to
  1410. .B sendmail/ida/cf
  1411. and create your own
  1412. .I m4 (1)
  1413. configuration file using the samples as templates.  Produce an actual,
  1414. personal
  1415. .B sendmail.cf
  1416. file.
  1417. .II
  1418. Try out your new
  1419. .I sendmail
  1420. system.
  1421. .br
  1422. Good Luck!
  1423. .FS [\\n+(II]
  1424. Mail problems or comments to lel@ida.liu.se.
  1425. .FE
  1426. .AP P
  1427. LIST OF AUXILIARY PROGRAMS
  1428. .LP
  1429. All programs but
  1430. .I scanf
  1431. are further described by their manual pages.  What you find here is only
  1432. a short overview of their functionality.
  1433. .JB dbm
  1434. A general
  1435. .I dbm (3)
  1436. database management tool.  Clears, loads, and dumps complete databases.
  1437. Stores, fetches, and deletes individual keys.  Also includes a special
  1438. parser that produces key/value pairs from a compressed but easily
  1439. readable format.
  1440. .JB mkdomext
  1441. Make the extended set of domain names.  This program acts as a filter
  1442. that, when supplied with fully qualified domain names on stdin, will
  1443. generate all legal abbreviations of these on stdout with respect to the
  1444. parent domains given on the command line.  It is used to be able to
  1445. recognize unqualified local subdomains and sibling domains from one or
  1446. more positions in the domain hierarchy.  See
  1447. .UC RFC 822,
  1448. section 6.2.2 for a rationale.
  1449. .JB rmail
  1450. Yet another implementation of the remote mail receiving program.  This
  1451. time with raw header line logging together with
  1452. .I dbm
  1453. lookup of remote node names and a more liberal parsing of
  1454. .DQ "From_"
  1455. lines.  Needs to run
  1456. .DQ "seteuid root"
  1457. to be able to use the macro setting options of
  1458. .I sendmail .
  1459. No new manual supplied, your old one will have to do.  Actually, your
  1460. old rmail itself will probably do too.
  1461. .JB scanf
  1462. Quick hack to scan and extract substrings from input lines using the
  1463. .I scanf (3)
  1464. function.  No manual page, the source code is self documenting.
  1465. .JB xalparse
  1466. A program that parses an extended aliases file and produceces an ordinary
  1467. aliases file together with a file with generic address translations.
  1468. It's all described in the manual page and in the section about
  1469. .I "Managing Generic Mail Addresses" .
  1470. Quod vide.
  1471. .AP R
  1472. REFERENCES
  1473. .LP
  1474. .[
  1475. $LIST$
  1476. .]
  1477. .AP T
  1478. TABLE OF CONTENTS
  1479. .SH
  1480. Sections
  1481. .LP
  1482. .X1 "\(sc 1" "INTRODUCTION"
  1483. .X1 "\(sc 2" "NAMES, ADDRESSES, AND ROUTES"
  1484. .X1 "\(sc 3" "MAIL ADDRESS FORMATS"
  1485. .X2 "\(sc 3.1" "Relative Addresses"
  1486. .X2 "\(sc 3.2" "Absolute Addresses"
  1487. .X2 "\(sc 3.3" "Attribute Addresses"
  1488. .X2 "\(sc 3.4" "Hybrid Addresses"
  1489. .X1 "\(sc 4" "A SHORT ANATOMY OF THE ELECTRONIC MESSAGE"
  1490. .X2 "\(sc 4.1" "The Envelope"
  1491. .X2 "\(sc 4.2" "The Headers"
  1492. .X1 "\(sc 5" "ADDRESS REWRITING STRATEGIES"
  1493. .X2 "\(sc 5.1" "Sneak-In Preview"
  1494. .X2 "\(sc 5.2" "The Configuration File"
  1495. .X2 "\(sc 5.3" "Canonicalizing the Address"
  1496. .X2 "\(sc 5.4" "Finding Route and Mailer"
  1497. .X2 "\(sc 5.5" "Externalizing the Address"
  1498. .X1 "\(sc 6" "MANAGING GENERIC MAIL ADDRESSES"
  1499. .X1 "\(sc 7" "SENDMAIL SOURCE MODIFICATIONS"
  1500. .X2 "\(sc 7.1" "Nameserver Default Argument"
  1501. .X2 "\(sc 7.2" "Direct Access to Dbm(3) Files"
  1502. .X2 "\(sc 7.3" "Batched \s-1SMTP\s+1 Support"
  1503. .X2 "\(sc 7.4" "Separate Envelope/Header Rewriting Rulesets"
  1504. .X2 "\(sc 7.5" "Separate Local \s-1UUCP\s+1 Host Name"
  1505. .X2 "\(sc 7.6" "Return Path for \s-1UUCP\s+1 Mailers"
  1506. .X2 "\(sc 7.7" "\s-1UUCP\s+1 Header Address Relativization"
  1507. .X2 "\(sc 7.8" "Support for Multi-Token Matches"
  1508. .X2 "\(sc 7.9" "Support for Embedded Subruleset Calls"
  1509. .X2 "\(sc 7.10" "Elaborate Matching Algorithm for Unknown Local Recipients"
  1510. .X2 "\(sc 7.11" "Support for Maryland's Mdbm Package"
  1511. .X2 "\(sc 7.12" "Improved Test Mode Output"
  1512. .X2 "\(sc 7.13" "Better To: and Cc: Headers of Returned Messages"
  1513. .X2 "\(sc 7.14" "Queue Bug Fixed"
  1514. .X2 "\(sc 7.15" "Shared Input \s-1SMTP\s+1 Bug Tentatively Fixed"
  1515. .X2 "\(sc 7.16" "Optional \s-1BSD\s+1 2.9 and 4.2 Compatibility Code"
  1516. .X2 "\(sc 7.17" "Miscellaneous Changes"
  1517. .X1 "\(sc 8" "CONCLUSION"
  1518. .SH
  1519. Appendices
  1520. .LP
  1521. .X1 "Appendix A" "LIST OF AFFECTED FILES" "Appendix M"
  1522. .X1 "Appendix C" "CUSTOMIZATION PARAMETERS" "Appendix M"
  1523. .X1 "Appendix D" "LIST OF DOMAIN NAMES" "Appendix M"
  1524. .X1 "Appendix F" "LIST OF DATA FILES" "Appendix M"
  1525. .X1 "Appendix I" "INSTALLATION INSTRUCTIONS" "Appendix M"
  1526. .X1 "Appendix P" "LIST OF AUXILIARY PROGRAMS" "Appendix M"
  1527. .X1 "Appendix R" "REFERENCES" "Appendix M"
  1528. .X1 "Appendix T" "TABLE OF CONTENTS" "Appendix M"
  1529.