|
|
1.1 root 1: .if n .ls 2
2: .he 'Sendmail Installation and Operation Guide''%'
3: .fo 'Version 4.2''Last Mod 7/28/83'
4: .nr si 3n
5: .de $0
6: .(x
7: .in \\$3u*3n
8: .ti -3n
9: \\$2. \\$1
10: .)x
11: ..
12: .de $C
13: .(x
14: .in 0
15: \\$1 \\$2. \\$3
16: .)x
17: ..
18: .+c
19: .(l C
20: .sz 16
21: .b SENDMAIL
22: .sz 12
23: .sp
24: .b "INSTALLATION AND OPERATION GUIDE"
25: .sz 10
26: .sp
27: .r
28: Eric Allman
29: Britton-Lee, Inc.
30: .sp
31: Version 4.2
32: .)l
33: .sp 2
34: .pp
35: .i Sendmail
36: implements a general purpose internetwork mail routing facility
37: under the UNIX*
38: .(f
39: *UNIX is a trademark of Bell Laboratories.
40: .)f
41: operating system.
42: It is not tied to any one transport protocol \*-
43: its function may be likened to a crossbar switch,
44: relaying messages from one domain into another.
45: In the process,
46: it can do a limited amount of message header editing
47: to put the message into a format that is appropriate
48: for the receiving domain.
49: All of this is done under the control of a configuration file.
50: .pp
51: Due to the requirements of flexibility
52: for
53: .i sendmail ,
54: the configuration file can seem somewhat unapproachable.
55: However, there are only a few basic configurations
56: for most sites,
57: for which standard configuration files have been supplied.
58: Most other configurations
59: can be built by adjusting an existing configuration files
60: incrementally.
61: .pp
62: Although
63: .i sendmail
64: is intended to run
65: without the need for monitoring,
66: it has a number of features
67: that may be used to monitor or adjust the operation
68: under unusual circumstances.
69: These features are described.
70: .pp
71: Section one describes how to do a basic
72: .i sendmail
73: installation.
74: Section two
75: explains the day-to-day information you should know
76: to maintain your mail system.
77: If you have a relatively normal site,
78: these two sections should contain sufficient information
79: for you to install
80: .i sendmail
81: and keep it happy.
82: Section three
83: describes some parameters that may be safely tweaked.
84: Section four
85: has information regarding the command line arguments.
86: Section five
87: contains the nitty-gritty information about the configuration
88: file.
89: This section is for masochists
90: and people who must write their own configuration file.
91: The appendixes give a brief
92: but detailed explanation of a number of features
93: not described in the rest of the paper.
94: .pp
95: The references in this paper are actually found
96: in the companion paper
97: .ul
98: Sendmail \- An Internetwork Mail Router.
99: This other paper should be read before this manual
100: to gain a basic understanding
101: of how the pieces fit together.
102: .sh 1 "BASIC INSTALLATION"
103: .pp
104: There are two basic steps to installing sendmail.
105: The hard part is to build the configuration table.
106: This is a file that sendmail reads when it starts up
107: that describes the mailers it knows about,
108: how to parse addresses,
109: how to rewrite the message header,
110: and the settings of various options.
111: Although the configuration table is quite complex,
112: a configuration can usually be built
113: by adjusting an existing off-the-shelf configuration.
114: The second part is actually doing the installation,
115: i.e., creating the necessary files, etc.
116: .pp
117: The remainder of this section will describe the installation of sendmail
118: assuming you can use one of the existing configurations
119: and that the standard installation parameters are acceptable.
120: All pathnames and examples
121: are given from the root of the
122: .i sendmail
123: subtree.
124: .sh 2 "Off-The-Shelf Configurations"
125: .pp
126: The configuration files
127: are all in the subdirectory
128: .i cf
129: of the sendmail directory.
130: The ones used at Berkeley are in
131: .i m4 \|(1)
132: format;
133: files with names ending
134: .q .m4
135: are
136: .i m4
137: include files,
138: while files with names ending
139: .q .mc
140: are the master files.
141: Files with names ending
142: .q .cf
143: are the
144: .i m4
145: processed versions of the corresponding
146: .q .mc
147: file.
148: .pp
149: Two off the shelf configuration files are supplied
150: to handle the basic cases:
151: .i cf/arpaproto.cf
152: for Arpanet (TCP) sites
153: and
154: .i cf/uucpproto.cf
155: for UUCP sites.
156: These are
157: .i not
158: in
159: .i m4
160: format.
161: The file you need should be copied to a file with the same name
162: as your system,
163: e.g.,
164: .(b
165: cp uucpproto.cf ucsfcgl.cf
166: .)b
167: This file
168: is now ready for installation as
169: .i /usr/lib/sendmail.cf .
170: .sh 2 "Installation Using the Makefile"
171: .pp
172: A makefile exists in the root of the
173: .i sendmail
174: directory that will do all of these steps
175: for a 4.2bsd system.
176: It may have to be slightly tailored
177: for use on other systems.
178: .pp
179: Before using this makefile,
180: you should already have created your configuration file
181: and left it in the file
182: .q cf/\fIsystem\fP.cf
183: where
184: .i system
185: is the name of your system
186: (i.e., what is returned by
187: .i hostname \|(1)).
188: If you do not have
189: .i hostname
190: you can use the declaration
191: .q HOST=\fIsystem\fP
192: on the
193: .i make \|(1)
194: command line.
195: You should also examine the file
196: .i md/config.m4
197: and change the
198: .i m4
199: macros there to reflect any libraries and compilation flags
200: you may need.
201: .pp
202: The basic installation procedure is to type:
203: .(b
204: make
205: make install
206: .)b
207: in the root directory of the
208: .i sendmail
209: distribution.
210: This will make all binaries
211: and install them in the standard places.
212: The second
213: .i make
214: command must be executed as the superuser (root).
215: .sh 2 "Installation by Hand"
216: .pp
217: Along with building a configuration file,
218: you will have to install the
219: .i sendmail
220: startup into your UNIX system.
221: If you are doing this installation
222: in conjunction with a regular Berkeley UNIX install,
223: these steps will already be complete.
224: Many of these steps will have to be executed as the superuser (root).
225: .sh 3 "lib/libsys.a"
226: .pp
227: The library in lib/libsys.a
228: contains some routines that should in some sense
229: be part of the system library.
230: These are the system logging routines
231: and the new directory access routines
232: (if required).
233: If you are not running the new 4.2bsd directory code
234: and do not have the compatibility routines installed in your system library,
235: you should execute the commands:
236: .(b
237: cd lib
238: make ndir
239: .)b
240: This will compile and install the 4.2 compatibility routines
241: in the library.
242: You should then type:
243: .(b
244: cd lib # if required
245: make
246: .)b
247: This will recompile and fill the library.
248: .sh 3 "/usr/lib/sendmail"
249: .pp
250: The binary for sendmail is located in /usr/lib.
251: There is a version available in the source directory
252: that is probably inadequate for your system.
253: You should plan on recompiling and installing the entire system:
254: .(b
255: cd src
256: rm \-f *.o
257: make
258: cp sendmail /usr/lib
259: .)b
260: .sh 3 "/usr/lib/sendmail.cf"
261: .pp
262: The configuration file
263: that you created earlier
264: should be installed in /usr/lib/sendmail.cf:
265: .(b
266: cp cf/\fIsystem\fP.cf /usr/lib/sendmail.cf
267: .)b
268: .sh 3 "/usr/ucb/newaliases"
269: .pp
270: If you are running delivermail,
271: it is critical that the
272: .i newaliases
273: command be replaced.
274: This can just be a link to
275: .i sendmail :
276: .(b
277: rm \-f /usr/ucb/newaliases
278: ln /usr/lib/sendmail /usr/ucb/newaliases
279: .)b
280: .sh 3 "/usr/lib/sendmail.cf"
281: .pp
282: The configuration file must be installed in /usr/lib.
283: This is described above.
284: .sh 3 "/usr/spool/mqueue"
285: .pp
286: The directory
287: .i /usr/spool/mqueue
288: should be created to hold the mail queue.
289: This directory should be mode 777
290: unless
291: .i sendmail
292: is run setuid,
293: when
294: .i mqueue
295: should be owned by the sendmail owner
296: and mode 755.
297: .sh 3 "/usr/lib/aliases*"
298: .pp
299: The system aliases are held in three files.
300: The file
301: .q /usr/lib/aliases
302: is the master copy.
303: A sample is given in
304: .q lib/aliases
305: which includes some aliases which
306: .i must
307: be defined:
308: .(b
309: cp lib/aliases /usr/lib/aliases
310: .)b
311: You should extend this file with any aliases that are apropos to your system.
312: .pp
313: Normally
314: .i sendmail
315: looks at a version of these files maintained by the
316: .i dbm \|(3)
317: routines.
318: These are stored in
319: .q /usr/lib/aliases.dir
320: and
321: .q /usr/lib/aliases.pag.
322: These can initially be created as empty files,
323: but they will have to be initialized promptly.
324: These should be mode 666 if you are running a reasonably relaxed system:
325: .(b
326: cp /dev/null /usr/lib/aliases.dir
327: cp /dev/null /usr/lib/aliases.pag
328: chmod 666 /usr/lib/aliases.*
329: newaliases
330: .)b
331: .sh 3 "/usr/lib/sendmail.fc"
332: .pp
333: If you intend to install the frozen version of the configuration file
334: (for quick startup)
335: you should create the file /usr/lib/sendmail.fc
336: and initialize it.
337: This step may be safely skipped.
338: .(b
339: cp /dev/null /usr/lib/sendmail.fc
340: /usr/lib/sendmail \-bz
341: .)b
342: .sh 3 "/etc/rc"
343: .pp
344: It will be necessary to start up the sendmail daemon when your system reboots.
345: This daemon performs two functions:
346: it listens on the SMTP socket for connections
347: (to receive mail from a remote system)
348: and it processes the queue periodically
349: to insure that mail gets delivered when hosts come up.
350: .pp
351: Add the following lines to
352: .q /etc/rc
353: (or
354: .q /etc/rc.local
355: as appropriate)
356: in the area where it is starting up the daemons:
357: .(b
358: if [ \-f /usr/lib/sendmail ]; then
359: (cd /usr/spool/mqueue; rm \-f [lnx]f*)
360: /usr/lib/sendmail \-bd \-q30m &
361: echo \-n ' sendmail' >/dev/console
362: fi
363: .)b
364: The
365: .q cd
366: and
367: .q rm
368: commands insure that all lock files have been removed;
369: extraneous lock files may be left around
370: if the system goes down in the middle of processing a message.
371: The line that actually invokes
372: .i sendmail
373: has two flags:
374: .q \-bd
375: causes it to listen on the SMTP port,
376: and
377: .q \-q30m
378: causes it to run the queue every half hour.
379: .pp
380: If you are not running a version of UNIX
381: that supports Berkeley TCP/IP,
382: do not include the
383: .b \-bd
384: flag.
385: .sh 3 "/usr/lib/sendmail.hf"
386: .pp
387: This is the help file used by the SMTP
388: .b HELP
389: command.
390: It should be copied from
391: .q lib/sendmail.hf :
392: .(b
393: cp lib/sendmail.hf /usr/lib
394: .)b
395: .sh 3 "/usr/lib/sendmail.st"
396: .pp
397: If you wish to collect statistics
398: about your mail traffic,
399: you should create the file
400: .q /usr/lib/sendmail.st :
401: .(b
402: cp /dev/null /usr/lib/sendmail.st
403: chmod 666 /usr/lib/sendmail.st
404: .)b
405: This file does not grow.
406: It is printed with the program
407: .q aux/mailstats.
408: .sh 3 "/etc/syslog"
409: .pp
410: You may want to run the
411: .i syslog
412: program
413: (to collect log information about sendmail).
414: This program normally resides in
415: .i /etc/syslog,
416: with support files
417: .i /etc/syslog.conf
418: and
419: .i /etc/syslog.pid .
420: The program is located in the
421: .i aux
422: subdirectory of the
423: .i sendmail
424: distribution.
425: The file
426: .i /etc/syslog.conf
427: describes the file(s) that sendmail will log in.
428: For a complete description of syslog,
429: see the manual page for
430: .i syslog \|(8)
431: (located in
432: .i sendmail/doc
433: on the distribution).
434: .sh 3 "/usr/ucb/newaliases"
435: .pp
436: If
437: .i sendmail
438: is invoked as
439: .q newaliases,
440: it will simulate the
441: .b \-bi
442: flag
443: (i.e., will rebuild the alias database;
444: see below).
445: This should be a link to /usr/lib/sendmail.
446: .sh 3 "/usr/ucb/mailq"
447: .pp
448: If
449: .i sendmail
450: is invoked as
451: .q mailq,
452: it will simulate the
453: .b \-bp
454: flag
455: (i.e.,
456: .i sendmail
457: will print the contents of the mail queue;
458: see below).
459: This should be a link to /usr/lib/sendmail.
460: .sh 1 "NORMAL OPERATIONS"
461: .sh 2 "Quick Configuration Startup"
462: .pp
463: A fast version of the configuration file
464: may be set up by using the
465: .b \-bz
466: flag:
467: .(b
468: /usr/lib/sendmail \-bz
469: .)b
470: This creates the file
471: .i /usr/lib/sendmail.fc
472: (\c
473: .q "frozen configuration" ).
474: This file is an image of
475: .i sendmail 's
476: data space after reading in the configuration file.
477: If this file exists,
478: it is used instead of
479: .i /usr/lib/sendmail.cf
480: .i sendmail.fc
481: must be rebuilt manually every time
482: .i sendmail.cf
483: is changed.
484: .pp
485: The frozen configuration file will be ignored
486: if a
487: .b \-C
488: flag is specified
489: or if sendmail detects that it is out of date.
490: However, the heuristics are not strong
491: so this should not be trusted.
492: .sh 2 "The System Log"
493: .pp
494: The system log is supported by the
495: .i syslog \|(8)
496: program.
497: .sh 3 "Format"
498: .pp
499: Each line in the system log
500: consists of a timestamp,
501: the name of the machine that generated it
502: (for logging from several machines
503: over the ethernet),
504: the word
505: .q sendmail: ,
506: and a message.
507: .sh 3 "Levels"
508: .pp
509: If you have
510: .i syslog \|(8)
511: or an equivalent installed,
512: you will be able to do logging.
513: There is a large amount of information that can be logged.
514: The log is arranged as a succession of levels.
515: At the lowest level
516: only extremely strange situations are logged.
517: At the highest level,
518: even the most mundane and uninteresting events
519: are recorded for posterity.
520: As a convention,
521: log levels under ten
522: are considered
523: .q useful;
524: log levels above ten
525: are usually for debugging purposes.
526: .pp
527: A complete description of the log levels
528: is given in section 4.3.
529: .sh 2 "The Mail Queue"
530: .pp
531: The mail queue should be processed transparently.
532: However, you may find that manual intervention is sometimes necessary.
533: For example,
534: if a major host is down for a period of time
535: the queue may become clogged.
536: Although sendmail ought to recover gracefully when the host comes up,
537: you may find performance unacceptably bad in the meantime.
538: .sh 3 "Printing the queue"
539: .pp
540: The contents of the queue can be printed
541: using the
542: .i mailq
543: command
544: (or by specifying the
545: .b \-bp
546: flag to sendmail):
547: .(b
548: mailq
549: .)b
550: This will produce a listing of the queue id's,
551: the size of the message,
552: the date the message entered the queue,
553: and the sender and recipients.
554: .sh 3 "Format of queue files"
555: .pp
556: All queue files have the form
557: \fIx\fP\|\fBf\fP\fIAA99999\fP
558: where
559: .i AA99999
560: is the
561: .i id
562: for this file
563: and the
564: .i x
565: is a type.
566: The types are:
567: .ip d
568: The data file.
569: The message body (excluding the header) is kept in this file.
570: .ip l
571: The lock file.
572: If this file exists,
573: the job is currently being processed,
574: and a queue run will not process the file.
575: For that reason,
576: an extraneous
577: .b lf
578: file can cause a job to apparently disappear
579: (it will not even time out!).
580: .ip n
581: This file is created when an id is being created.
582: It is a separate file to insure that no mail can ever be destroyed
583: due to a race condition.
584: It should exist for no more than a few milliseconds
585: at any given time.
586: .ip q
587: The queue control file.
588: This file contains the information necessary to process the job.
589: .ip t
590: A temporary file.
591: These are an image of the
592: .b qf
593: file when it is being rebuilt.
594: It should be renamed to a
595: .b qf
596: file very quickly.
597: .ip x
598: A transcript file,
599: existing during the life of a session
600: showing everything that happens
601: during that session.
602: .pp
603: The
604: .b qf
605: file is structured as a series of lines
606: each beginning with a code letter.
607: The lines are as follows:
608: .ip D
609: The name of the data file.
610: There may only be one of these lines.
611: .ip H
612: A header definition.
613: There may be any number of these lines.
614: The order is important:
615: they represent the order in the final message.
616: These use the same syntax
617: as header definitions in the configuration file.
618: .ip R
619: A recipient address.
620: This will normally be completely aliased,
621: but is actually realiased when the job is processed.
622: There will be one line
623: for each recipient.
624: .ip S
625: The sender address.
626: There may only be one of these lines.
627: .ip T
628: The job creation time.
629: This is used to compute when to time out the job.
630: .ip P
631: The current message priority.
632: This is used to order the queue.
633: Higher numbers mean lower priorities.
634: The priority increases
635: as the message sits in the queue.
636: The initial priority depends on the message class
637: and the size of the message.
638: .ip M
639: A message.
640: This line is printed by the
641: .i mailq
642: command,
643: and is generally used to store status information.
644: It can contain any text.
645: .pp
646: As an example,
647: the following is a queue file sent to
648: .q mckusick@calder
649: and
650: .q wnj :
651: .(b
652: DdfA13557
653: Seric
654: T404261372
655: P132
656: Rmckusick@calder
657: Rwnj
658: H?D?date: 23-Oct-82 15:49:32-PDT (Sat)
659: H?F?from: eric (Eric Allman)
660: H?x?full-name: Eric Allman
661: Hsubject: this is an example message
662: Hmessage-id: <[email protected]>
663: Hreceived: by UCBARPA.BERKELEY.ARPA (3.227 [10/22/82])
664: id A13557; 23-Oct-82 15:49:32-PDT (Sat)
665: Hphone: (415) 548-3211
666: HTo: mckusick@calder, wnj
667: .)b
668: This shows the name of the data file,
669: the person who sent the message,
670: the submission time
671: (in seconds since January 1, 1970),
672: the message priority,
673: the message class,
674: the recipients,
675: and the headers for the message.
676: .sh 3 "Forcing the queue"
677: .pp
678: .i Sendmail
679: should run the queue automatically
680: at intervals.
681: The algorithm is to read and sort the queue,
682: and then to attempt to process all jobs in order.
683: When it attempts to run the job,
684: .i sendmail
685: first checks to see if the job is locked.
686: If so, it ignores the job.
687: .pp
688: There is no attempt to insure that only one queue processor
689: exists at any time,
690: since there is no guarantee that a job cannot take forever
691: to process.
692: Due to the locking algorithm,
693: it is impossible for one job to freeze the queue.
694: However,
695: an uncooperative recipient host
696: or a program recipient
697: that never returns
698: can accumulate many processes in your system.
699: Unfortunately,
700: there is no way to resolve this
701: without violating the protocol.
702: .pp
703: In some cases,
704: you may find that a major host going down
705: for a couple of days
706: may create a prohibitively large queue.
707: This will result in
708: .i sendmail
709: spending an inordinate amount of time
710: sorting the queue.
711: This situation can be fixed by moving the queue to a temporary place
712: and creating a new queue.
713: The old queue can be run later when the offending host returns to service.
714: .pp
715: To do this,
716: it is acceptable to move the entire queue directory:
717: .(b
718: cd /usr/spool
719: mv mqueue omqueue; mkdir mqueue; chmod 777 mqueue
720: .)b
721: You should then kill the existing daemon
722: (since it will still be processing in the old queue directory)
723: and create a new daemon.
724: .pp
725: To run the old mail queue,
726: run the following command:
727: .(b
728: /usr/lib/sendmail \-oQ/usr/spool/omqueue \-q
729: .)b
730: The
731: .b \-oQ
732: flag specifies an alternate queue directory
733: and the
734: .b \-q
735: flag says to just run every job in the queue.
736: If you have a tendency toward voyeurism,
737: you can use the
738: .b \-v
739: flag to watch what is going on.
740: .pp
741: When the queue is finally emptied,
742: you can remove the directory:
743: .(b
744: rmdir /usr/spool/omqueue
745: .)b
746: .sh 2 "The Alias Database"
747: .pp
748: The alias database exists in two forms.
749: One is a text form,
750: maintained in the file
751: .i /usr/lib/aliases.
752: The aliases are of the form
753: .(b
754: name: name1, name2, ...
755: .)b
756: Only local names may be aliased;
757: e.g.,
758: .(b
759: eric@mit-xx: eric@berkeley
760: .)b
761: will not have the desired effect.
762: Aliases may be continued by starting any continuation lines
763: with a space or a tab.
764: Blank lines and lines beginning with a sharp sign
765: (\c
766: .q # )
767: are comments.
768: .pp
769: The second form is processed by the
770: .i dbm \|(3)
771: library.
772: This form is in the files
773: .i /usr/lib/aliases.dir
774: and
775: .i /usr/lib/aliases.pag.
776: This is the form that
777: .i sendmail
778: actually uses to resolve aliases.
779: This technique is used to improve performance.
780: .sh 3 "Rebuilding the alias database"
781: .pp
782: The DBM version of the database
783: may be rebuilt explicitly by executing the command
784: .(b
785: newaliases
786: .)b
787: This is equivalent to giving
788: .i sendmail
789: the
790: .b \-bi
791: flag:
792: .(b
793: /usr/lib/sendmail \-bi
794: .)b
795: .pp
796: If the
797: .q D
798: option is specified in the configuration,
799: .i sendmail
800: will rebuild the alias database automatically
801: if possible
802: when it is out of date.
803: The conditions under which it will do this are:
804: .np
805: The DBM version of the database is mode 666. -or-
806: .np
807: .i Sendmail
808: is running setuid to root.
809: .lp
810: Auto-rebuild can be dangerous
811: on heavily loaded machines
812: with large alias files;
813: if it might take more than five minutes
814: to rebuild the database,
815: there is a chance that several processes will start the rebuild process
816: simultaneously.
817: .sh 3 "Potential problems"
818: .pp
819: There are a number of problems that can occur
820: with the alias database.
821: They all result from a
822: .i sendmail
823: process accessing the DBM version
824: while it is only partially built.
825: This can happen under two circumstances:
826: One process accesses the database
827: while another process is rebuilding it,
828: or the process rebuilding the database dies
829: (due to being killed or a system crash)
830: before completing the rebuild.
831: .pp
832: Sendmail has two techniques to try to relieve these problems.
833: First, it ignores interrupts while rebuilding the database;
834: this avoids the problem of someone aborting the process
835: leaving a partially rebuilt database.
836: Second,
837: at the end of the rebuild
838: it adds an alias of the form
839: .(b
840: @: @
841: .)b
842: (which is not normally legal).
843: Before sendmail will access the database,
844: it checks to insure that this entry exists\**.
845: .(f
846: \**The
847: .q a
848: option is required in the configuration
849: for this action to occur.
850: This should normally be specified
851: unless you are running
852: .i delivermail
853: in parallel with
854: .i sendmail.
855: .)f
856: It will wait up to five minutes
857: for this entry to appear,
858: at which point it will force a rebuild itself\**.
859: .(f
860: \**Note:
861: the
862: .q D
863: option must be specified in the configuration file
864: for this operation to occur.
865: .)f
866: .sh 3 "List owners"
867: .pp
868: If an error occurs on sending to a certain address,
869: say
870: .q \fIx\fP ,
871: .i sendmail
872: will look for an alias
873: of the form
874: .q owner-\fIx\fP
875: to receive the errors.
876: This is typically useful
877: for a mailing list
878: where the submitter of the list
879: has no control over the maintanence of the list itself;
880: in this case the list maintainer would be the owner of the list.
881: For example:
882: .(b
883: unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser,
884: sam@matisse
885: owner-unix-wizards: eric@ucbarpa
886: .)b
887: would cause
888: .q eric@ucbarpa
889: to get the error that will occur
890: when someone sends to
891: unix-wizards
892: due to the inclusion of
893: .q nosuchuser
894: on the list.
895: .sh 2 "Per-User Forwarding (.forward Files)"
896: .pp
897: As an alternative to the alias database,
898: any user may put a file with the name
899: .q .forward
900: in his or her home directory.
901: If this file exists,
902: .i sendmail
903: redirects mail for that user
904: to the list of addresses listed in the .forward file.
905: For example, if the home directory for user
906: .q mckusick
907: has a .forward file with contents:
908: .(b
909: mckusick@ernie
910: kirk@calder
911: .)b
912: then any mail arriving for
913: .q mckusick
914: will be redirected to the specified accounts.
915: .sh 2 "Special Header Lines"
916: .pp
917: Several header lines have special interpretations
918: defined by the configuration file.
919: Others have interpretations built into
920: .i sendmail
921: that cannot be changed without changing the code.
922: These builtins are described here.
923: .sh 3 "Return-Receipt-To:"
924: .pp
925: If this header is sent,
926: a message will be sent to any specified addresses
927: when the final delivery is complete.
928: if the mailer has the
929: .b l
930: flag (local delivery) set in the mailer descriptor.
931: .sh 3 "Errors-To:"
932: .pp
933: If errors occur anywhere during processing,
934: this header will cause error messages to go to
935: the listed addresses
936: rather than to the sender.
937: This is intended for mailing lists.
938: .sh 3 "Apparently-To:"
939: .pp
940: If a message comes in with no recipients listed in the message
941: (in a To:, Cc:, or Bcc: line)
942: then
943: .i sendmail
944: will add an
945: .q "Apparently-To:"
946: header line for any recipients it is aware of.
947: This is not put in as a standard recipient line
948: to warn any recipients that the list is not complete.
949: .pp
950: At least one recipient line is required under RFC 822.
951: .sh 1 "ARGUMENTS"
952: .pp
953: The complete list of arguments to
954: .i sendmail
955: is described in detail in Appendix A.
956: Some important arguments are described here.
957: .sh 2 "Queue Interval"
958: .pp
959: The amount of time between forking a process
960: to run through the queue
961: is defined by the
962: .b \-q
963: flag.
964: If you run in mode
965: .b f
966: or
967: .b a
968: this can be relatively large,
969: since it will only be relevant
970: when a host that was down comes back up.
971: If you run in
972: .b q
973: mode
974: it should be relatively short,
975: since it defines the maximum amount of time that a message
976: may sit in the queue.
977: .sh 2 "Daemon Mode"
978: .pp
979: If you allow incoming mail over an IPC connection,
980: you should have a daemon running.
981: This should be set by your
982: .i /etc/rc
983: file using the
984: .b \-bd
985: flag.
986: The
987: .b \-bd
988: flag and the
989: .b \-q
990: flag may be combined in one call:
991: .(b
992: /usr/lib/sendmail \-bd \-q30m
993: .)b
994: .sh 2 "Forcing the Queue"
995: .pp
996: In some cases you may find that the queue has gotten clogged for some reason.
997: You can force a queue run
998: using the
999: .b \-q
1000: flag (with no value).
1001: It is entertaining to use the
1002: .b \-v
1003: flag (verbose)
1004: when this is done to watch what happens:
1005: .(b
1006: /usr/lib/sendmail \-q \-v
1007: .)b
1008: .sh 2 "Debugging"
1009: .pp
1010: There are a fairly large number of debug flags
1011: built into
1012: .i sendmail .
1013: Each debug flag has a number and a level,
1014: where higher levels means to print out more information.
1015: The convention is that levels greater than nine are
1016: .q absurd,
1017: i.e.,
1018: they print out so much information that you wouldn't normally
1019: want to see them except for debugging that particular piece of code.
1020: Debug flags are set using the
1021: .b \-d
1022: option;
1023: the syntax is:
1024: .(b
1025: .ta \w'debug-option 'u
1026: debug-flag: \fB\-d\fP debug-list
1027: debug-list: debug-option [ , debug-option ]
1028: debug-option: debug-range [ . debug-level ]
1029: debug-range: integer | integer \- integer
1030: debug-level: integer
1031: .)b
1032: where spaces are for reading ease only.
1033: For example,
1034: .(b
1035: \-d12 Set flag 12 to level 1
1036: \-d12.3 Set flag 12 to level 3
1037: \-d3-17 Set flags 3 through 17 to level 1
1038: \-d3-17.4 Set flags 3 through 17 to level 4
1039: .)b
1040: For a complete list of the available debug flags
1041: you will have to look at the code
1042: (they are too dynamic to keep this documentation up to date).
1043: .sh 2 "Trying a Different Configuration File"
1044: .pp
1045: An alternative configuration file
1046: can be specified using the
1047: .b \-C
1048: flag; for example,
1049: .(b
1050: /usr/lib/sendmail \-Ctest.cf
1051: .)b
1052: uses the configuration file
1053: .i test.cf
1054: instead of the default
1055: .i /usr/lib/sendmail.cf.
1056: If the
1057: .b \-C
1058: flag has no value
1059: it defaults to
1060: .i sendmail.cf
1061: in the current directory.
1062: .sh 2 "Changing the Values of Options"
1063: .pp
1064: Options can be overridden using the
1065: .b \-o
1066: flag.
1067: For example,
1068: .(b
1069: /usr/lib/sendmail \-oT2m
1070: .)b
1071: sets the
1072: .b T
1073: (timeout) option to two minutes
1074: for this run only.
1075: .sh 1 "TUNING"
1076: .pp
1077: There are a number of configuration parameters
1078: you may want to change,
1079: depending on the requirements of your site.
1080: Most of these are set
1081: using an option in the configuration file.
1082: For example,
1083: the line
1084: .q OT3d
1085: sets option
1086: .q T
1087: to the value
1088: .q 3d
1089: (three days).
1090: .sh 2 "Timeouts"
1091: .pp
1092: All time intervals are set
1093: using a scaled syntax.
1094: For example,
1095: .q 10m
1096: represents ten minutes, whereas
1097: .q 2h30m
1098: represents two and a half hours.
1099: The full set of scales is:
1100: .(b
1101: .ta 4n
1102: s seconds
1103: m minutes
1104: h hours
1105: d days
1106: w weeks
1107: .)b
1108: .sh 3 "Queue interval"
1109: .pp
1110: The argument to the
1111: .b \-q
1112: flag
1113: specifies how often a subdaemon will run the queue.
1114: This is typically set to between five minutes
1115: and one half hour.
1116: .sh 3 "Read timeouts"
1117: .pp
1118: It is possible to time out when reading the standard input
1119: or when reading from a remote SMTP server.
1120: Technically,
1121: this is not acceptable within the published protocols.
1122: However,
1123: it might be appropriate to set it to something large
1124: in certain environments
1125: (such as an hour).
1126: This will reduce the chance of large numbers of idle daemons
1127: piling up on your system.
1128: This timeout is set using the
1129: .b r
1130: option in the configuration file.
1131: .sh 3 "Message timeouts"
1132: .pp
1133: After sitting in the queue for a few days,
1134: a message will time out.
1135: This is to insure that at least the sender is aware
1136: of the inability to send a message.
1137: The timeout is typically set to three days.
1138: This timeout is set using the
1139: .b T
1140: option in the configuration file.
1141: .pp
1142: The time of submission is set in the queue,
1143: rather than the amount of time left until timeout.
1144: As a result, you can flush messages that have been hanging
1145: for a short period
1146: by running the queue
1147: with a short message timeout.
1148: For example,
1149: .(b
1150: /usr/lib/sendmail \-oT1d \-q
1151: .)b
1152: will run the queue
1153: and flush anything that is one day old.
1154: .sh 2 "Delivery Mode"
1155: .pp
1156: There are a number of delivery modes that
1157: .i sendmail
1158: can operate in,
1159: set by the
1160: .q d
1161: configuration option.
1162: These modes
1163: specify how quickly mail will be delivered.
1164: Legal modes are:
1165: .(b
1166: .ta 4n
1167: i deliver interactively (synchronously)
1168: b deliver in background (asynchronously)
1169: q queue only (don't deliver)
1170: .)b
1171: There are tradeoffs.
1172: Mode
1173: .q i
1174: passes the maximum amount of information to the sender,
1175: but is hardly ever necessary.
1176: Mode
1177: .q q
1178: puts the minimum load on your machine,
1179: but means that delivery may be delayed for up to the queue interval.
1180: Mode
1181: .q b
1182: is probably a good compromise.
1183: However, this mode can cause large numbers of processes
1184: if you have a mailer that takes a long time to deliver a message.
1185: .sh 2 "Log Level"
1186: .pp
1187: The level of logging can be set for sendmail.
1188: The default using a standard configuration table is level 9.
1189: The levels are as follows:
1190: .ip 0
1191: No logging.
1192: .ip 1
1193: Major problems only.
1194: .ip 2
1195: Message collections and failed deliveries.
1196: .ip 3
1197: Successful deliveries.
1198: .ip 4
1199: Messages being defered
1200: (due to a host being down, etc.).
1201: .ip 5
1202: Normal message queueups.
1203: .ip 6
1204: Unusual but benign incidents,
1205: e.g.,
1206: trying to process a locked queue file.
1207: .ip 9
1208: Log internal queue id to external message id mappings.
1209: This can be useful for tracing a message
1210: as it travels between several hosts.
1211: .ip 12
1212: Several messages that are basically only of interest
1213: when debugging.
1214: .ip 16
1215: Verbose information regarding the queue.
1216: .sh 2 "File Modes"
1217: .pp
1218: There are a number of files
1219: that may have a number of modes.
1220: The modes depend on what functionality you want
1221: and the level of security you require.
1222: .sh 3 "To suid or not to suid?"
1223: .pp
1224: .i Sendmail
1225: can safely be made
1226: setuid to root.
1227: At the point where it is about to
1228: .i exec \|(2)
1229: a mailer,
1230: it checks to see if the userid is zero;
1231: if so,
1232: it resets the userid and groupid to a default
1233: (set by the
1234: .b u
1235: and
1236: .b g
1237: options).
1238: (This can be overridden
1239: by setting the
1240: .b S
1241: flag to the mailer
1242: for mailers that are trusted
1243: and must be called as root.)
1244: However,
1245: this will cause mail processing
1246: to be accounted
1247: (using
1248: .i sa \|(8))
1249: to root
1250: rather than to the user sending the mail.
1251: .sh 3 "Temporary file modes"
1252: .pp
1253: The mode of all temporary files that
1254: .i sendmail
1255: creates is determined by the
1256: .q F
1257: option.
1258: Reasonable values for this option are
1259: 0600
1260: and
1261: 0644.
1262: If the more permissive mode is selected,
1263: it will not be necessary to run
1264: .i sendmail
1265: as root at all
1266: (even when running the queue).
1267: .sh 3 "Should my alias database be writable?"
1268: .pp
1269: At Berkeley
1270: we have the alias database
1271: (/usr/lib/aliases*)
1272: mode 666.
1273: There are some dangers inherent in this approach:
1274: any user can add him-/her-self
1275: to any list,
1276: or can
1277: .q steal
1278: any other user's mail.
1279: However,
1280: we have found users to be basically trustworthy,
1281: and the cost of having a read-only database
1282: greater than the expense of finding and eradicating
1283: the rare nasty person.
1284: .pp
1285: The database that
1286: .i sendmail
1287: actually used
1288: is represented by the two files
1289: .i aliases.dir
1290: and
1291: .i aliases.pag
1292: (both in /usr/lib).
1293: The mode on these files should match the mode
1294: on /usr/lib/aliases.
1295: If
1296: .i aliases
1297: is writable
1298: and the
1299: DBM
1300: files
1301: (\c
1302: .i aliases.dir
1303: and
1304: .i aliases.pag )
1305: are not,
1306: users will be unable to reflect their desired changes
1307: through to the actual database.
1308: However,
1309: if
1310: .i aliases
1311: is read-only
1312: and the DBM files are writable,
1313: a slightly sophisticated user
1314: can arrange to steal mail anyway.
1315: .pp
1316: If your DBM files are not writable by the world
1317: or you do not have auto-rebuild enabled
1318: (with the
1319: .q D
1320: option),
1321: then you must be careful to reconstruct the alias database
1322: each time you change the text version:
1323: .(b
1324: newaliases
1325: .)b
1326: If this step is ignored or forgotten
1327: any intended changes will also be ignored or forgotten.
1328: .sh 1 "THE WHOLE SCOOP ON THE CONFIGURATION FILE"
1329: .pp
1330: This section describes the configuration file
1331: in detail,
1332: including hints on how to write one of your own
1333: if you have to.
1334: .pp
1335: There is one point that should be made clear immediately:
1336: the syntax of the configuration file
1337: is designed to be reasonably easy to parse,
1338: since this is done every time
1339: .i sendmail
1340: starts up,
1341: rather than easy for a human to read or write.
1342: On the
1343: .q "future project"
1344: list is a
1345: configuration-file compiler.
1346: .pp
1347: An overview of the configuration file
1348: is given first,
1349: followed by details of the semantics.
1350: .sh 2 "The Syntax"
1351: .pp
1352: The configuration file is organized as a series of lines,
1353: each of which begins with a single character
1354: defining the semantics for the rest of the line.
1355: Lines beginning with a space or a tab
1356: are continuation lines
1357: (although the semantics are not well defined in many places).
1358: Blank lines and lines beginning with a sharp symbol
1359: (`#')
1360: are comments.
1361: .sh 3 "R and S \*- rewriting rules"
1362: .pp
1363: The core of address parsing
1364: are the rewriting rules.
1365: These are an ordered production system.
1366: .i Sendmail
1367: scans through the set of rewriting rules
1368: looking for a match on the left hand side
1369: (LHS)
1370: of the rule.
1371: When a rule matches,
1372: the address is replaced by the right hand side
1373: (RHS)
1374: of the rule.
1375: .pp
1376: There are several sets of rewriting rules.
1377: Some of the rewriting sets are used internally
1378: and must have specific semantics.
1379: Other rewriting sets
1380: do not have specifically assigned semantics,
1381: and may be referenced by the mailer definitions
1382: or by other rewriting sets.
1383: .pp
1384: The syntax of these two commands are:
1385: .(b F
1386: .b S \c
1387: .i n
1388: .)b
1389: Sets the current ruleset being collected to
1390: .i n .
1391: If you begin a ruleset more than once
1392: it deletes the old definition.
1393: .(b F
1394: .b R \c
1395: .i lhs
1396: .i rhs
1397: .i comments
1398: .)b
1399: The
1400: fields must be separated
1401: by at least one tab character;
1402: there may be embedded spaces
1403: in the fields.
1404: The
1405: .i lhs
1406: is a pattern that is applied to the input.
1407: If it matches,
1408: the input is rewritten to the
1409: .i rhs .
1410: The
1411: .i comments
1412: are ignored.
1413: .sh 3 "D \*- define macro"
1414: .pp
1415: Macros are named with a single character.
1416: These may be selected from the entire ASCII set,
1417: but user-defined macros
1418: should be selected from the set of upper case letters only.
1419: Lower case letters
1420: and special symbols
1421: are used internally.
1422: .pp
1423: The syntax for macro definitions is:
1424: .(b F
1425: .b D \c
1426: .i x\|val
1427: .)b
1428: where
1429: .i x
1430: is the name of the macro
1431: and
1432: .i val
1433: is the value it should have.
1434: Macros can be interpolated in most places using the escape sequence
1435: .b $ \c
1436: .i x .
1437: .sh 3 "C and F \*- define classes"
1438: .pp
1439: Classes of words may be defined
1440: to match on the left hand side of rewriting rules.
1441: For example
1442: a class of all local names for this site
1443: might be created
1444: so that attempts to send to oneself
1445: can be eliminated.
1446: These can either be defined directly in the configuration file
1447: or read in from another file.
1448: Classes may be given names
1449: from the set of upper case letters.
1450: Lower case letters and special characters
1451: are reserved for system use.
1452: .pp
1453: The syntax is:
1454: .(b F
1455: .b C \c
1456: .i c\|word1
1457: .i word2...
1458: .br
1459: .b F \c
1460: .i c\|file
1461: [
1462: .i format
1463: ]
1464: .)b
1465: The first form defines the class
1466: .i c
1467: to match any of the named words.
1468: It is permissible to split them among multiple lines;
1469: for example, the two forms:
1470: .(b
1471: CHmonet ucbmonet
1472: .)b
1473: and
1474: .(b
1475: CHmonet
1476: CHucbmonet
1477: .)b
1478: are equivalent.
1479: The second form
1480: reads the elements of the class
1481: .i c
1482: from the named
1483: .i file ;
1484: the
1485: .i format
1486: is a
1487: .i scanf \|(3)
1488: pattern
1489: that should produce a single string.
1490: .sh 3 "M \*- define mailer"
1491: .pp
1492: Programs and interfaces to mailers
1493: are defined in this line.
1494: The format is:
1495: .(b F
1496: .b M \c
1497: .i name ,
1498: {\c
1499: .i field =\c
1500: .i value \|}*
1501: .)b
1502: where
1503: .i name
1504: is the name of the mailer
1505: (used internally only)
1506: and the
1507: .q field=name
1508: pairs define attributes of the mailer.
1509: Fields are:
1510: .(b
1511: .ta 1i
1512: Path The pathname of the mailer
1513: Flags Special flags for this mailer
1514: Sender A rewriting set for sender addresses
1515: Recipient A rewriting set for recipient addresses
1516: Argv An argument vector to pass to this mailer
1517: Eol The end-of-line string for this mailer
1518: Maxsize The maximum message length to this mailer
1519: .)b
1520: Only the first character of the field name is checked.
1521: .sh 3 "H \*- define header"
1522: .pp
1523: The format of the header lines that sendmail inserts into the message
1524: are defined by the
1525: .b H
1526: line.
1527: The syntax of this line is:
1528: .(b F
1529: .b H [\c
1530: .b ? \c
1531: .i mflags \c
1532: .b ? ]\c
1533: .i hname \c
1534: .b :
1535: .i htemplate
1536: .)b
1537: Continuation lines in this spec
1538: are reflected directly into the outgoing message.
1539: The
1540: .i htemplate
1541: is macro expanded before insertion into the message.
1542: If the
1543: .i mflags
1544: (surrounded by question marks)
1545: are specified,
1546: at least one of the specified flags
1547: must be stated in the mailer definition
1548: for this header to be automatically output.
1549: If one of these headers is in the input
1550: it is reflected to the output
1551: regardless of these flags.
1552: .pp
1553: Some headers have special semantics
1554: that will be described below.
1555: .sh 3 "O \*- set option"
1556: .pp
1557: There are a number of
1558: .q random
1559: options that
1560: can be set from a configuration file.
1561: Options are represented by single characters.
1562: The syntax of this line is:
1563: .(b F
1564: .b O \c
1565: .i o\|value
1566: .)b
1567: This sets option
1568: .i o
1569: to be
1570: .i value .
1571: Depending on the option,
1572: .i value
1573: may be a string, an integer,
1574: a boolean
1575: (with legal values
1576: .q t ,
1577: .q T ,
1578: .q f ,
1579: or
1580: .q F ;
1581: the default is TRUE),
1582: or
1583: a time interval.
1584: .sh 3 "T \*- define trusted users"
1585: .pp
1586: Trusted users
1587: are those users who are permitted
1588: to override the sender address
1589: using the
1590: .b \-f
1591: flag.
1592: These typically are
1593: .q root,
1594: .q uucp,
1595: and
1596: .q network,
1597: but on some users it may be convenient
1598: to extend this list to include other users,
1599: perhaps to support
1600: a separate
1601: UUCP
1602: login for each host.
1603: The syntax of this line is:
1604: .(b F
1605: .b T \c
1606: .i user1
1607: .i user2 ...
1608: .)b
1609: There may be more than one of these lines.
1610: .sh 3 "P \*- precedence definitions"
1611: .pp
1612: Values for the
1613: .q "Precedence:"
1614: field may be defined using the
1615: .b P
1616: control line.
1617: The syntax of this field is:
1618: .(b
1619: \fBP\fP\fIname\fP\fB=\fP\fInum\fP
1620: .)b
1621: When the
1622: .i name
1623: is found in a
1624: .q Precedence:
1625: field,
1626: the message class is set to
1627: .i num .
1628: Higher numbers mean higher precedence.
1629: Numbers less than zero
1630: have the special property
1631: that error messages will not be returned.
1632: The default precedence is zero.
1633: For example,
1634: our list of precedences is:
1635: .(b
1636: Pfirst-class=0
1637: Pspecial-delivery=100
1638: Pjunk=\-100
1639: .)b
1640: .sh 2 "The Semantics"
1641: .pp
1642: This section describes the semantics of the configuration file.
1643: .sh 3 "Special macros, conditionals"
1644: .pp
1645: Macros are interpolated
1646: using the construct
1647: .b $ \c
1648: .i x ,
1649: where
1650: .i x
1651: is the name of the macro to be interpolated.
1652: In particular,
1653: lower case letters are reserved to have
1654: special semantics,
1655: used to pass information in or out of sendmail,
1656: and some special characters are reserved to
1657: provide conditionals, etc.
1658: .pp
1659: The following macros
1660: .i must
1661: be defined to transmit information into
1662: .i sendmail:
1663: .(b
1664: .ta 4n
1665: e The SMTP entry message
1666: j The \*(lqofficial\*(rq domain name for this site
1667: l The format of the UNIX from line
1668: n The name of the daemon (for error messages)
1669: o The set of "operators" in addresses
1670: q default format of sender address
1671: .)b
1672: The
1673: .b $e
1674: macro is printed out when SMTP starts up.
1675: The first word must be the
1676: .b $j
1677: macro.
1678: The
1679: .b $j
1680: macro
1681: should be in RFC821 format.
1682: The
1683: .b $l
1684: and
1685: .b $n
1686: macros can be considered constants
1687: except under terribly unusual circumstances.
1688: The
1689: .b $o
1690: macro consists of a list of characters
1691: which will be considered tokens
1692: and which will separate tokens
1693: when doing parsing.
1694: For example, if
1695: .q r
1696: were in the
1697: .b $o
1698: macro, then the input
1699: .q address
1700: would be scanned as three tokens:
1701: .q add,
1702: .q r,
1703: and
1704: .q ess.
1705: Finally, the
1706: .b $q
1707: macro specifies how an address should appear in a message
1708: when it is defaulted.
1709: For example, on our system these definitions are:
1710: .(b
1711: De$j Sendmail $v ready at $b
1712: DnMAILER-DAEMON
1713: DlFrom $g $d
1714: Do.:%@!^=/
1715: Dq$g$?x ($x)$.
1716: Dj$H.$D
1717: .)b
1718: An acceptable alternative for the
1719: .b $q
1720: macro is
1721: .q "$?x$x $.<$g>" .
1722: These correspond to the following two formats:
1723: .(b
1724: eric@Berkeley (Eric Allman)
1725: Eric Allman <eric@Berkeley>
1726: .)b
1727: .pp
1728: Some macros are defined by
1729: .i sendmail
1730: for interpolation into argv's for mailers
1731: or for other contexts.
1732: These macros are:
1733: .(b
1734: a The origination date in Arpanet format
1735: b The current date in Arpanet format
1736: c The hop count
1737: d The date in UNIX (ctime) format
1738: f The sender (from) address
1739: g The sender address relative to the recipient
1740: h The recipient host
1741: i The queue id
1742: p Sendmail's pid
1743: r Protocol used
1744: s Sender's host name
1745: t A numeric representation of the current time
1746: u The recipient user
1747: v The version number of sendmail
1748: w The hostname of this site
1749: x The full name of the sender
1750: y The id of the sender's tty
1751: z The home directory of the recipient
1752: .)b
1753: .pp
1754: There are three types of dates that can be used.
1755: The
1756: .b $a
1757: and
1758: .b $b
1759: macros are in Arpanet format;
1760: .b $a
1761: is the time as extracted from the
1762: .q Date:
1763: line of the message
1764: (if there was one),
1765: and
1766: .b $b
1767: is the current date and time
1768: (used for postmarks).
1769: If no
1770: .q Date:
1771: line is found in the incoming message,
1772: .b $a
1773: is set to the current time also.
1774: The
1775: .b $d
1776: macro is equivalent to the
1777: .b $a
1778: macro in UNIX
1779: (ctime)
1780: format.
1781: .pp
1782: The
1783: .b $f
1784: macro is the id of the sender
1785: as originally determined;
1786: when mailing to a specific host
1787: the
1788: .b $g
1789: macro is set to the address of the sender
1790: .ul
1791: relative to the recipient.
1792: For example,
1793: if I send to
1794: .q bollard@matisse
1795: from the machine
1796: .q ucbarpa
1797: the
1798: .b $f
1799: macro will be
1800: .q eric
1801: and the
1802: .b $g
1803: macro will be
1804: .q eric@ucbarpa.
1805: .pp
1806: The
1807: .b $x
1808: macro is set to the full name of the sender.
1809: This can be determined in several ways.
1810: It can be passed as flag to
1811: .i sendmail.
1812: The second choice is the value of the
1813: .q Full-name:
1814: line in the header if it exists,
1815: and the third choice is the comment field
1816: of a
1817: .q From:
1818: line.
1819: If all of these fail,
1820: and if the message is being originated locally,
1821: the full name is looked up in the
1822: .i /etc/passwd
1823: file.
1824: .pp
1825: When sending,
1826: the
1827: .b $h ,
1828: .b $u ,
1829: and
1830: .b $z
1831: macros get set to the host, user, and home directory
1832: (if local)
1833: of the recipient.
1834: The first two are set from the
1835: .b $@
1836: and
1837: .b $:
1838: part of the rewriting rules, respectively.
1839: .pp
1840: The
1841: .b $p
1842: and
1843: .b $t
1844: macros are used to create unique strings
1845: (e.g., for the
1846: .q Message-Id:
1847: field).
1848: The
1849: .b $i
1850: macro is set to the queue id on this host;
1851: if put into the timestamp line
1852: it can be extremely useful for tracking messages.
1853: The
1854: .b $y
1855: macro is set to the id of the terminal of the sender
1856: (if known);
1857: some systems like to put this
1858: in the Unix
1859: .q From
1860: line.
1861: The
1862: .b $v
1863: macro is set to be the version number of
1864: .i sendmail ;
1865: this is normally put in timestamps
1866: and has been proven extremely useful for debugging.
1867: The
1868: .b $w
1869: macro is set to the name of this host
1870: if it can be determined.
1871: The
1872: .b $c
1873: field is set to the
1874: .q "hop count,"
1875: i.e., the number of times this message has been processed.
1876: This can be determined
1877: by the
1878: .b \-h
1879: flag on the command line
1880: or by counting the timestamps in the message.
1881: .pp
1882: The
1883: .b $r
1884: and
1885: .b $s
1886: fields are set to the protocol used to communicate with sendmail
1887: and the sending hostname;
1888: these are not supported in the current version.
1889: .pp
1890: Conditionals can be specified using the syntax:
1891: .(b
1892: $?x text1 $| text2 $.
1893: .)b
1894: This interpolates
1895: .i text1
1896: if the macro
1897: .b $x
1898: is set,
1899: and
1900: .i text2
1901: otherwise.
1902: The
1903: .q else
1904: (\c
1905: .b $| )
1906: clause may be omitted.
1907: .sh 3 "Special classes"
1908: .pp
1909: The class
1910: .b $=w
1911: is set to be the set of all names
1912: this host is known by.
1913: This can be used to delete local hostnames.
1914: .sh 3 "The left hand side"
1915: .pp
1916: The left hand side of rewriting rules contains a pattern.
1917: Normal words are simply matched directly.
1918: Metasyntax is introduced using a dollar sign.
1919: The metasymbols are:
1920: .(b
1921: .ta \w'\fB$=\fP\fIx\fP 'u
1922: \fB$*\fP Match zero or more tokens
1923: \fB$+\fP Match one or more tokens
1924: \fB$\-\fP Match exactly one token
1925: \fB$=\fP\fIx\fP Match any token in class \fIx\fP
1926: \fB$~\fP\fIx\fP Match any token not in class \fIx\fP
1927: .)b
1928: If any of these match,
1929: they are assigned to the symbol
1930: .b $ \c
1931: .i n
1932: for replacement on the right hand side,
1933: where
1934: .i n
1935: is the index in the LHS.
1936: For example,
1937: if the LHS:
1938: .(b
1939: $\-:$+
1940: .)b
1941: is applied to the input:
1942: .(b
1943: UCBARPA:eric
1944: .)b
1945: the rule will match, and the values passed to the RHS will be:
1946: .(b
1947: .ta 4n
1948: $1 UCBARPA
1949: $2 eric
1950: .)b
1951: .sh 3 "The right hand side"
1952: .pp
1953: When the right hand side of a rewriting rule matches,
1954: the input is deleted and replaced by the right hand side.
1955: Tokens are copied directly from the RHS
1956: unless they are begin with a dollar sign.
1957: Metasymbols are:
1958: .(b
1959: .ta \w'$#mailer 'u
1960: \fB$\fP\fIn\fP Substitute indefinite token \fIn\fP from LHS
1961: \fB$>\fP\fIn\fP \*(lqCall\*(rq ruleset \fIn\fP
1962: \fB$#\fP\fImailer\fP Resolve to \fImailer\fP
1963: \fB$@\fP\fIhost\fP Specify \fIhost\fP
1964: \fB$:\fP\fIuser\fP Specify \fIuser\fP
1965: .)b
1966: .pp
1967: The
1968: .b $ \c
1969: .i n
1970: syntax substitutes the corresponding value from a
1971: .b $+ ,
1972: .b $\- ,
1973: .b $* ,
1974: .b $= ,
1975: or
1976: .b $~
1977: match on the LHS.
1978: It may be used anywhere.
1979: .pp
1980: The
1981: .b $> \c
1982: .i n
1983: syntax
1984: causes the remainder of the line to be substituted as usual
1985: and then passed as the argument to ruleset
1986: .i n .
1987: The final value of ruleset
1988: .i n
1989: then becomes
1990: the substitution for this rule.
1991: .pp
1992: The
1993: .b $#
1994: syntax should
1995: .i only
1996: be used in ruleset zero.
1997: It causes evaluation of the ruleset to terminate immediately,
1998: and signals to sendmail that the address has completely resolved.
1999: The complete syntax is:
2000: .(b
2001: \fB$#\fP\fImailer\fP\fB$@\fP\fIhost\fP\fB$:\fP\fIuser\fP
2002: .)b
2003: This specifies the
2004: {mailer, host, user}
2005: 3-tuple necessary to direct the mailer.
2006: If the mailer is local
2007: the host part may be omitted.
2008: The
2009: .i mailer
2010: and
2011: .i host
2012: must be a single word,
2013: but the
2014: .i user
2015: may be multi-part.
2016: .pp
2017: A RHS may also be preceeded by a
2018: .b $@
2019: or a
2020: .b $:
2021: to control evaluation.
2022: A
2023: .b $@
2024: prefix causes the ruleset to return with the remainder of the RHS
2025: as the value.
2026: A
2027: .b $:
2028: prefix causes the rule to terminate immediately,
2029: but the ruleset to continue;
2030: this can be used to avoid continued application of a rule.
2031: The prefix is stripped before continuing.
2032: .pp
2033: The
2034: .b $@
2035: and
2036: .b $:
2037: prefixes may preceed a
2038: .b $>
2039: spec;
2040: for example:
2041: .(b
2042: .ta 8n
2043: R$+ $:$>7$1
2044: .)b
2045: matches anything,
2046: passes that to ruleset seven,
2047: and continues;
2048: the
2049: .b $:
2050: is necessary to avoid an infinite loop.
2051: .sh 3 "Semantics of rewriting rule sets"
2052: .pp
2053: There are five rewriting sets
2054: that have specific semantics.
2055: These are related as depicted by figure 2.
2056: .(z
2057: .hl
2058: .ie t .sp 2i
2059: .el \{\
2060: .(c
2061: +---+
2062: -->| 0 |-->resolved address
2063: / +---+
2064: / +---+ +---+
2065: / ---->| 1 |-->| S |--
2066: +---+ / +---+ / +---+ +---+ \e +---+
2067: addr-->| 3 |-->| D |-- --->| 4 |-->msg
2068: +---+ +---+ \e +---+ +---+ / +---+
2069: --->| 2 |-->| R |--
2070: +---+ +---+
2071: .)c
2072:
2073: .ce
2074: Figure 2 \*- Rewriting set semantics
2075: .(c
2076: D \*- sender domain addition
2077: S \*- mailer-specific sender rewriting
2078: R \*- mailer-specific recipient rewriting
2079: .)c
2080: .\}
2081: .hl
2082: .)z
2083: .pp
2084: Ruleset three
2085: should turn the address into
2086: .q "canonical form."
2087: This form should have the basic syntax:
2088: .(b
2089: local-part@host-domain-spec
2090: .)b
2091: If no
2092: .q @
2093: sign is specified,
2094: then the
2095: host-domain-spec
2096: .i may
2097: be appended from the
2098: sender address
2099: (if the
2100: .b C
2101: flag is set in the mailer definition
2102: corresponding to the
2103: .i sending
2104: mailer).
2105: Ruleset three
2106: is applied by sendmail
2107: before doing anything with any address.
2108: .pp
2109: Ruleset zero
2110: is applied after ruleset three
2111: to addresses that are going to actually specify recipients.
2112: It must resolve to a
2113: .i "{mailer, host, user}"
2114: triple.
2115: The
2116: .i mailer
2117: must be defined in the mailer definitions
2118: from the configuration file.
2119: The
2120: .i host
2121: is defined into the
2122: .b $h
2123: macro
2124: for use in the argv expansion of the specified mailer.
2125: .pp
2126: Rulesets one and two
2127: are applied to all sender and recipient addresses respectively.
2128: They are applied before any specification
2129: in the mailer definition.
2130: They must never resolve.
2131: .pp
2132: Ruleset four is applied to all addresses
2133: in the message.
2134: It is typically used
2135: to translate internal to external form.
2136: .sh 3 "Mailer flags etc."
2137: .pp
2138: There are a number of flags that may be associated with each mailer,
2139: each identified by a letter of the alphabet.
2140: Many of them are assigned semantics internally.
2141: These are detailed in Appendix C.
2142: Any other flags may be used freely
2143: to conditionally assign headers to messages
2144: destined for particular mailers.
2145: .sh 3 "The \*(lqerror\*(rq mailer"
2146: .pp
2147: The mailer with the special name
2148: .q error
2149: can be used to generate a user error.
2150: The (optional) host field is a numeric exit status to be returned,
2151: and the user field is a message to be printed.
2152: For example, the entry:
2153: .(b
2154: $#error$:Host unknown in this domain
2155: .)b
2156: on the RHS of a rule
2157: will cause the specified error to be generated
2158: if the LHS matches.
2159: This mailer is only functional in ruleset zero.
2160: .sh 2 "Building a Configuration File From Scratch"
2161: .pp
2162: Building a configuration table from scratch is an extremely difficult job.
2163: Fortunately,
2164: it is almost never necessary to do so;
2165: nearly every situation that may come up
2166: may be resolved by changing an existing table.
2167: In any case,
2168: it is critical that you understand what it is that you are trying to do
2169: and come up with a philosophy for the configuration table.
2170: This section is intended to explain what the real purpose
2171: of a configuration table is
2172: and to give you some ideas
2173: for what your philosophy might be.
2174: .sh 3 "What you are trying to do"
2175: .pp
2176: The configuration table has three major purposes.
2177: The first and simplest
2178: is to set up the environment for
2179: .i sendmail .
2180: This involves setting the options,
2181: defining a few critical macros,
2182: etc.
2183: Since these are described in other places,
2184: we will not go into more detail here.
2185: .pp
2186: The second purpose is to rewrite addresses in the message.
2187: This should typically be done in two phases.
2188: The first phase maps addresses in any format
2189: into a canonical form.
2190: This should be done in ruleset three.
2191: The second phase maps this canonical form
2192: into the syntax appropriate for the receiving mailer.
2193: .i Sendmail
2194: does this in three subphases.
2195: Rulesets one and two
2196: are applied to all sender and recipient addresses respectively.
2197: After this,
2198: you may specify per-mailer rulesets
2199: for both sender and recipient addresses;
2200: this allows mailer-specific customization.
2201: Finally,
2202: ruleset four is applied to do any default conversion
2203: to external form.
2204: .pp
2205: The third purpose
2206: is to map addresses into the actual set of instructions
2207: necessary to get the message delivered.
2208: Ruleset zero must resolve to the internal form,
2209: which is in turn used as a pointer to a mailer descriptor.
2210: The mailer descriptor describes the interface requirements
2211: of the mailer.
2212: .sh 3 "Philosophy"
2213: .pp
2214: The particular philosophy you choose will depend heavily
2215: on the size and structure of your organization.
2216: I will present a few possible philosophies here.
2217: .pp
2218: One general point applies to all of these philosophies:
2219: it is almost always a mistake
2220: to try to do full name resolution.
2221: For example,
2222: if you are trying to get names of the form
2223: .q user@host
2224: to the Arpanet,
2225: it does not pay to route them to
2226: .q xyzvax!decvax!ucbvax!c70:user@host
2227: since you then depend on several links not under your control.
2228: The best approach to this problem
2229: is to simply forward to
2230: .q xyzvax!user@host
2231: and let xyzvax
2232: worry about it from there.
2233: In summary,
2234: just get the message closer to the destination,
2235: rather than determining the full path.
2236: .sh 4 "Large site, many hosts \*- minimum information"
2237: .pp
2238: Berkeley is an example of a large site,
2239: i.e., more than two or three hosts.
2240: We have decided that the only reasonable philosophy
2241: in our environment
2242: is to designate one host as the guru for our site.
2243: It must be able to resolve any piece of mail it receives.
2244: The other sites should have the minimum amount of information
2245: they can get away with.
2246: In addition,
2247: any information they do have
2248: should be hints rather than solid information.
2249: .pp
2250: For example,
2251: a typical site on our local ether network is
2252: .q monet.
2253: Monet has a list of known ethernet hosts;
2254: if it receives mail for any of them,
2255: it can do direct delivery.
2256: If it receives mail for any unknown host,
2257: it just passes it directly to
2258: .q ucbvax,
2259: our master host.
2260: Ucbvax may determine that the host name is illegal
2261: and reject the message,
2262: or may be able to do delivery.
2263: However, it is important to note that when a new ethernet host is added,
2264: the only host that
2265: .i must
2266: have its tables updated
2267: is ucbvax;
2268: the others
2269: .i may
2270: be updated as convenient,
2271: but this is not critical.
2272: .pp
2273: This picture is slightly muddied
2274: due to network connections that are not actually located
2275: on ucbvax.
2276: For example,
2277: our TCP connection is currently on
2278: .q ucbarpa.
2279: However,
2280: monet
2281: .i "does not"
2282: know about this;
2283: the information is hidden totally between ucbvax and ucbarpa.
2284: Mail going from monet to a TCP host
2285: is transfered via the ethernet
2286: from monet to ucbvax,
2287: then via the ethernet from ucbvax to ucbarpa,
2288: and then is submitted to the Arpanet.
2289: Although this involves some extra hops,
2290: we feel this is an acceptable tradeoff.
2291: .pp
2292: An interesting point is that it would be possible
2293: to update monet
2294: to send TCP mail directly to ucbarpa
2295: if the load got too high;
2296: if monet failed to note a host as a TCP host
2297: it would go via ucbvax as before,
2298: and if monet incorrectly sent a message to ucbarpa
2299: it would still be sent by ucbarpa
2300: to ucbvax as before.
2301: The only problem that can occur is loops,
2302: as if ucbarpa thought that ucbvax had the TCP connection
2303: and vice versa.
2304: For this reason,
2305: updates should
2306: .i always
2307: happen to the master host first.
2308: .pp
2309: This philosophy results as much from the need
2310: to have a single source for the configuration files
2311: (typically built using
2312: .i m4 \|(1)
2313: or some similar tool)
2314: as any logical need.
2315: Maintaining more than three separate tables by hand
2316: is essentially an impossible job.
2317: .sh 4 "Small site \*- complete information"
2318: .pp
2319: A small site
2320: (two or three hosts)
2321: may find it more reasonable to have complete information
2322: at each host.
2323: This would require that each host
2324: know exactly where each network connection is,
2325: possibly including the names of each host on that network.
2326: As long as the site remains small
2327: and the the configuration remains relatively static,
2328: the update problem will probably not be too great.
2329: .sh 4 "Single host"
2330: .pp
2331: This is in some sense the trivial case.
2332: The only major issue is trying to insure that you don't
2333: have to know too much about your environment.
2334: For example,
2335: if you have a UUCP connection
2336: you might find it useful to know about the names of hosts
2337: connected directly to you,
2338: but this is really not necessary
2339: since this may be determined from the syntax.
2340: .sh 3 "Relevant issues"
2341: .pp
2342: The canonical form you use
2343: should almost certainly be as specified in
2344: the Arpanet protocols
2345: RFC819 and RFC822.
2346: Copies of these RFC's are included on the
2347: .i sendmail
2348: tape
2349: as
2350: .i doc/rfc819.lpr
2351: and
2352: .i doc/rfc822.lpr .
2353: .pp
2354: RFC822
2355: describes the format of the mail message itself.
2356: .i Sendmail
2357: follows this RFC closely,
2358: to the extent that many of the standards described in this document
2359: can not be changed without changing the code.
2360: In particular,
2361: the following characters have special interpretations:
2362: .(b
2363: < > ( ) " \e
2364: .)b
2365: Any attempt to use these characters for other than their RFC822
2366: purpose in addresses is probably doomed to disaster.
2367: .pp
2368: RFC819
2369: describes the specifics of the domain-based addressing.
2370: This is touched on in RFC822 as well.
2371: Essentially each host is given a name
2372: which is a right-to-left dot qualified pseudo-path
2373: from a distinguished root.
2374: The elements of the path need not be physical hosts;
2375: the domain is logical rather than physical.
2376: For example,
2377: at Berkeley
2378: one legal host is
2379: .q a.cc.berkeley.arpa ;
2380: reading from right to left,
2381: .q arpa
2382: is a top level domain
2383: (related to, but not limited to, the physical Arpanet),
2384: .q berkeley
2385: is both an Arpanet host and a logical domain
2386: which is actually interpreted by
2387: a host called ucbvax
2388: (which is actually just the
2389: .q "major"
2390: host for this domain),
2391: .q cc
2392: represents the Computer Center,
2393: (in this case a strictly logical entity),
2394: and
2395: .q a
2396: is a host in the Computer Center;
2397: this particular host happens to be connected
2398: via berknet,
2399: but other hosts might be connected via one of two ethernets
2400: or some other network.
2401: .pp
2402: Beware when reading RFC819
2403: that there are a number of errors in it.
2404: .sh 3 "How to proceed"
2405: .pp
2406: Once you have decided on a philosophy,
2407: it is worth examining the available configuration tables
2408: to decide if any of them are close enough
2409: to steal major parts of.
2410: Even under the worst of conditions,
2411: there is a fair amount of boiler plate that can be collected safely.
2412: .pp
2413: The next step is to build ruleset three.
2414: This will be the hardest part of the job.
2415: Beware of doing too much to the address in this ruleset,
2416: since anything you do will reflect through
2417: to the message.
2418: In particular,
2419: stripping of local domains is best deferred,
2420: since this can leave you with addresses with no domain spec at all.
2421: Since
2422: .i sendmail
2423: likes to append the sending domain to addresses with no domain,
2424: this can change the semantics of addresses.
2425: Also try to avoid
2426: fully qualifying domains in this ruleset.
2427: Although technically legal,
2428: this can lead to unpleasantly and unnecessarily long addresses
2429: reflected into messages.
2430: The Berkeley configuration files
2431: define ruleset nine
2432: to qualify domain names and strip local domains.
2433: This is called from ruleset zero
2434: to get all addresses into a cleaner form.
2435: .pp
2436: Once you have ruleset three finished,
2437: the other rulesets should be relatively trivial.
2438: If you need hints,
2439: examine the supplied configuration tables.
2440: .sh 3 "Testing the rewriting rules \*- the \-bt flag"
2441: .pp
2442: When you build a configuration table,
2443: you can do a certain amount of testing
2444: using the
2445: .q "test mode"
2446: of
2447: .i sendmail .
2448: For example,
2449: you could invoke
2450: .i sendmail
2451: as:
2452: .(b
2453: sendmail \-bt \-Ctest.cf
2454: .)b
2455: which would read the configuration file
2456: .q test.cf
2457: and enter test mode.
2458: In this mode,
2459: you enter lines of the form:
2460: .(b
2461: rwset address
2462: .)b
2463: where
2464: .i rwset
2465: is the rewriting set you want to use
2466: and
2467: .i address
2468: is an address to apply the set to.
2469: Test mode shows you the steps it takes
2470: as it proceeds,
2471: finally showing you the address it ends up with.
2472: You may use a comma separated list of rwsets
2473: for sequential application of rules to an input;
2474: ruleset three is always applied first.
2475: For example:
2476: .(b
2477: 1,21,4 monet:bollard
2478: .)b
2479: first applies ruleset three to the input
2480: .q monet:bollard.
2481: Ruleset one is then applied to the output of ruleset three,
2482: followed similarly by rulesets twenty-one and four.
2483: .pp
2484: If you need more detail,
2485: you can also use the
2486: .q \-d21
2487: flag to turn on more debugging.
2488: For example,
2489: .(b
2490: sendmail \-bt \-d21.99
2491: .)b
2492: turns on an incredible amount of information;
2493: a single word address
2494: is probably going to print out several pages worth of information.
2495: .sh 3 "Building mailer descriptions"
2496: .pp
2497: To add an outgoing mailer to your mail system,
2498: you will have to define the characteristics of the mailer.
2499: .pp
2500: Each mailer must have an internal name.
2501: This can be arbitrary,
2502: except that the names
2503: .q local
2504: and
2505: .q prog
2506: must be defined.
2507: .pp
2508: The pathname of the mailer must be given in the P field.
2509: If this mailer should be accessed via an IPC connection,
2510: use the string
2511: .q [IPC]
2512: instead.
2513: .pp
2514: The F field defines the mailer flags.
2515: You should specify an
2516: .q f
2517: or
2518: .q r
2519: flag to pass the name of the sender as a
2520: .b \-f
2521: or
2522: .b \-r
2523: flag respectively.
2524: These flags are only passed if they were passed to
2525: .i sendmail,
2526: so that mailers that give errors under some circumstances
2527: can be placated.
2528: If the mailer is not picky
2529: you can just specify
2530: .q "\-f $g"
2531: in the argv template.
2532: If the mailer must be called as
2533: .b root
2534: the
2535: .q S
2536: flag should be given;
2537: this will not reset the userid
2538: before calling the mailer\**.
2539: .(f
2540: \**\c
2541: .i Sendmail
2542: must be running setuid to root
2543: for this to work.
2544: .)f
2545: If this mailer is local
2546: (i.e., will perform final delivery
2547: rather than another network hop)
2548: the
2549: .q l
2550: flag should be given.
2551: Quote characters
2552: (backslashes and " marks)
2553: can be stripped from addresses if the
2554: .q s
2555: flag is specified;
2556: if this is not given
2557: they are passed through.
2558: If the mailer is capable of sending to more than one user
2559: on the same host
2560: in a single transaction
2561: the
2562: .q m
2563: flag should be stated.
2564: If this flag is on,
2565: then the argv template containing
2566: .b $u
2567: will be repeated for each unique user
2568: on a given host.
2569: The
2570: .q e
2571: flag will mark the mailer as being
2572: .q expensive,
2573: which will cause
2574: .i sendmail
2575: to defer connection
2576: until a queue run\**.
2577: .(f
2578: \**The
2579: .q c
2580: configuration option must be given
2581: for this to be effective.
2582: .)f
2583: .pp
2584: An unusual case is the
2585: .q C
2586: flag.
2587: This flag applies to the mailer that the message is received from,
2588: rather than the mailer being sent to;
2589: if set,
2590: the domain spec of the sender
2591: (i.e., the
2592: .q @host.domain
2593: part)
2594: is saved
2595: and is appended to any addresses in the message
2596: that do not already contain a domain spec.
2597: For example,
2598: a message of the form:
2599: .(b
2600: From: eric@ucbarpa
2601: To: wnj@monet, mckusick
2602: .)b
2603: will be modified to:
2604: .(b
2605: From: eric@ucbarpa
2606: To: wnj@monet, mckusick@ucbarpa
2607: .)b
2608: .i "if and only if"
2609: the
2610: .q C
2611: flag is defined in the mailer corresponding to
2612: .q eric@ucbarpa.
2613: .pp
2614: Other flags are described
2615: in Appendix C.
2616: .pp
2617: The S and R fields in the mailer description
2618: are per-mailer rewriting sets
2619: to be applied to sender and recipient addresses
2620: respectively.
2621: These are applied after the sending domain is appended
2622: and the general rewriting sets
2623: (numbers one and two)
2624: are applied,
2625: but before the output rewrite
2626: (ruleset four)
2627: is applied.
2628: A typical use is to append the current domain
2629: to addresses that do not already have a domain.
2630: For example,
2631: a header of the form:
2632: .(b
2633: From: eric
2634: .)b
2635: might be changed to be:
2636: .(b
2637: From: eric@ucbarpa
2638: .)b
2639: or
2640: .(b
2641: From: ucbvax!eric
2642: .)b
2643: depending on the domain it is being shipped into.
2644: These sets can also be used
2645: to do special purpose output rewriting
2646: in cooperation with ruleset four.
2647: .pp
2648: The E field defines the string to use
2649: as an end-of-line indication.
2650: A string containing only newline is the default.
2651: The usual backslash escapes
2652: (\er, \en, \ef, \eb)
2653: may be used.
2654: .pp
2655: Finally,
2656: an argv template is given as the E field.
2657: It may have embedded spaces.
2658: If there is no argv with a
2659: .b $u
2660: macro in it,
2661: .i sendmail
2662: will speak SMTP
2663: to the mailer.
2664: If the pathname for this mailer is
2665: .q [IPC],
2666: the argv should be
2667: .(b
2668: IPC $h [ \fIport\fP ]
2669: .)b
2670: where
2671: .i port
2672: is the optional port number
2673: to connect to.
2674: .pp
2675: For example,
2676: the specifications:
2677: .(b
2678: .ta \w'Mlocal, 'u +\w'P=/bin/mail, 'u +\w'F=rlsm, 'u +\w'S=10, 'u +\w'R=20, 'u
2679: Mlocal, P=/bin/mail, F=rlsm S=10, R=20, A=mail \-d $u
2680: Mether, P=[IPC], F=meC, S=11, R=21, A=IPC $h, M=100000
2681: .)b
2682: specifies a mailer to do local delivery
2683: and a mailer for ethernet delivery.
2684: The first is called
2685: .q local,
2686: is located in the file
2687: .q /bin/mail,
2688: takes a picky
2689: .b \-r
2690: flag,
2691: does local delivery,
2692: quotes should be stripped from addresses,
2693: and multiple users can be delivered at once;
2694: ruleset ten
2695: should be applied to sender addresses in the message
2696: and ruleset twenty
2697: should be applied to recipient addresses;
2698: the argv to send to a message will be the word
2699: .q mail,
2700: the word
2701: .q \-d,
2702: and words containing the name of the receiving user.
2703: If a
2704: .b \-r
2705: flag is inserted
2706: it will be between the words
2707: .q mail
2708: and
2709: .q \-d.
2710: The second mailer is called
2711: .q ether,
2712: it should be connected to via an IPC connection,
2713: it can handle multiple users at once,
2714: connections should be deferred,
2715: and any domain from the sender address
2716: should be appended to any receiver name
2717: without a domain;
2718: sender addresses should be processed by ruleset eleven
2719: and recipient addresses by ruleset twenty-one.
2720: There is a 100,000 byte limit on messages passed through this mailer.
2721: .++ A
2722: .+c "COMMAND LINE FLAGS"
2723: .ba 0
2724: .nr ii 1i
2725: .pp
2726: Arguments must be presented with flags before addresses.
2727: The flags are:
2728: .ip "\-f\ \fIaddr\fP"
2729: The sender's machine address is
2730: .i addr .
2731: This flag is ignored unless the real user
2732: is listed as a
2733: .q "trusted user"
2734: or if
2735: .i addr
2736: contains an exclamation point
2737: (because of certain restrictions in UUCP).
2738: .ip "\-r\ \fIaddr\fP"
2739: An obsolete form of
2740: .b \-f .
2741: .ip "\-h\ \fIcnt\fP"
2742: Sets the
2743: .q "hop count"
2744: to
2745: .i cnt .
2746: This represents the number of times this message has been processed
2747: by
2748: .i sendmail
2749: (to the extent that it is supported by the underlying networks).
2750: .i Cnt
2751: is incremented during processing,
2752: and if it reaches
2753: MAXHOP
2754: (currently 30)
2755: .i sendmail
2756: throws away the message with an error.
2757: .ip \-F\fIname\fP
2758: Sets the full name of this user to
2759: .i name .
2760: .ip \-n
2761: Don't do aliasing or forwarding.
2762: .ip \-t
2763: Read the header for
2764: .q To: ,
2765: .q Cc: ,
2766: and
2767: .q Bcc:
2768: lines, and send to everyone listed in those lists.
2769: The
2770: .q Bcc:
2771: line will be deleted before sending.
2772: Any addresses in the argument vector will be deleted
2773: from the send list.
2774: .ip \-b\fIx\fP
2775: Set operation mode to
2776: .i x .
2777: Operation modes are:
2778: .(b
2779: .ta 4n
2780: m Deliver mail (default)
2781: a Run in arpanet mode (see below)
2782: s Speak SMTP on input side
2783: d Run as a daemon
2784: t Run in test mode
2785: v Just verify addresses, don't collect or deliver
2786: i Initialize the alias database
2787: p Print the mail queue
2788: z Freeze the configuration file
2789: .)b
2790: The special processing for the
2791: ARPANET
2792: includes reading the
2793: .q "From:"
2794: line from the header to find the sender,
2795: printing
2796: ARPANET
2797: style messages
2798: (preceded by three digit reply codes for compatibility with
2799: the FTP protocol
2800: [Neigus73, Postel74, Postel77]),
2801: and ending lines of error messages with <CRLF>.
2802: .ip \-q\fItime\fP
2803: Try to process the queued up mail.
2804: If the time is given,
2805: a sendmail will run through the queue at the specified interval
2806: to deliver queued mail;
2807: otherwise, it only runs once.
2808: .ip \-C\fIfile\fP
2809: Use a different configuration file.
2810: .ip \-d\fIlevel\fP
2811: Set debugging level.
2812: .ip \-o\fIx\|value\fP
2813: Set option
2814: .i x
2815: to the specified
2816: .i value .
2817: These options are described in Appendix B.
2818: .pp
2819: There are a number of options that may be specified as
2820: primitive flags
2821: (provided for compatibility with
2822: .i delivermail ).
2823: These are the e, i, m, and v options.
2824: Also,
2825: the f option
2826: may be specified as the
2827: .b \-s
2828: flag.
2829: .+c "CONFIGURATION OPTIONS"
2830: .pp
2831: The following options may be set using the
2832: .b \-o
2833: flag on the command line
2834: or the
2835: .b O
2836: line in the configuration file:
2837: .nr ii 1i
2838: .ip A\fIfile\fP
2839: Use the named
2840: .i file
2841: as the alias file.
2842: If no file is specified,
2843: use
2844: .i aliases
2845: in the current directory.
2846: .ip a
2847: If set,
2848: wait for an
2849: .q @:@
2850: entry to exist in the alias database
2851: before starting up.
2852: If it does not appear in five minutes,
2853: rebuild the database.
2854: .ip c
2855: If an outgoing mailer is marked as being expensive,
2856: don't connect immediately.
2857: This requires that queueing be compiled in,
2858: since it will depend on a queue run process to
2859: actually send the mail.
2860: .ip d\fIx\fP
2861: Deliver in mode
2862: .i x .
2863: Legal modes are:
2864: .(b
2865: .ta 4n
2866: i Deliver interactively (synchronously)
2867: b Deliver in background (asynchronously)
2868: q Just queue the message (deliver during queue run)
2869: .)b
2870: .ip D
2871: If set,
2872: rebuild the alias database if necessary and possible.
2873: If this option is not set,
2874: .i sendmail
2875: will never rebuild the alias database
2876: unless explicitly requested
2877: using
2878: .b \-bi .
2879: .ip e\fIx\fP
2880: Dispose of errors using mode
2881: .i x .
2882: The values for
2883: .i x
2884: are:
2885: .(b
2886: p Print error messages (default)
2887: q No messages, just give exit status
2888: m Mail back errors
2889: w Write back errors (mail if user not logged in)
2890: e Mail back errors and give zero exit stat always
2891: .)b
2892: .ip F\fIn\fP
2893: The temporary file mode,
2894: in octal.
2895: 644 and 600 are good choices.
2896: .ip f
2897: Save
2898: Unix-style
2899: .q From
2900: lines at the front of headers.
2901: Normally they are assumed redundant
2902: and discarded.
2903: .ip g\fIn\fP
2904: Set the default group id
2905: for mailers to run in
2906: to
2907: .i n .
2908: .ip H\fIfile\fP
2909: Specify the help file
2910: for SMTP.
2911: .ip i
2912: Ignore dots in incoming messages.
2913: .ip L\fIn\fP
2914: Set the default log level to
2915: .i n .
2916: .ip M\fIx\|value\fP
2917: Set the macro
2918: .i x
2919: to
2920: .i value .
2921: This is intended only for use from the command line.
2922: .ip m
2923: Send to me too,
2924: even if I am in an alias expansion.
2925: .ip o
2926: Assume that the headers may be in old format,
2927: i.e.,
2928: spaces delimit names.
2929: This actually turns on
2930: an adaptive algorithm:
2931: if any recipient address contains a comma, parenthesis,
2932: or angle bracket,
2933: it will be assumed that commas already exist.
2934: If this flag is not on,
2935: only commas delimit names.
2936: Headers are always output with commas between the names.
2937: .ip Q\fIdir\fP
2938: Use the named
2939: .i dir
2940: as the queue directory.
2941: .ip r\fItime\fP
2942: Timeout reads after
2943: .i time
2944: interval.
2945: .ip S\fIfile\fP
2946: Log statistics in the named
2947: .i file .
2948: .ip s
2949: Be super-safe when running things,
2950: i.e.,
2951: always instantiate the queue file,
2952: even if you are going to attempt immediate delivery.
2953: .i Sendmail
2954: always instantiates the queue file
2955: before returning control the the client
2956: under any circumstances.
2957: .ip T\fItime\fP
2958: Set the queue timeout to
2959: .i time .
2960: After this interval,
2961: messages that have not been successfully sent
2962: will be returned to the sender.
2963: .ip t\fIS,D\fP
2964: Set the local timezone name to
2965: .i S
2966: for standard time and
2967: .i D
2968: for daylight time;
2969: this is only used under version six.
2970: .ip u\fIn\fP
2971: Set the default userid for mailers to
2972: .i n .
2973: Mailers without the
2974: .i S
2975: flag in the mailer definition
2976: will run as this user.
2977: .ip v
2978: Run in verbose mode.
2979: .+c "MAILER FLAGS"
2980: The following flags may be set in the mailer description.
2981: .nr ii 4n
2982: .ip f
2983: The mailer wants a
2984: .b \-f
2985: .i from
2986: flag,
2987: but only if this is a network forward operation
2988: (i.e.,
2989: the mailer will give an error
2990: if the executing user
2991: does not have special permissions).
2992: .ip r
2993: Same as
2994: .b f ,
2995: but sends a
2996: .b \-r
2997: flag.
2998: .ip S
2999: Don't reset the userid
3000: before calling the mailer.
3001: This would be used in a secure environment
3002: where
3003: .i sendmail
3004: ran as root.
3005: This could be used to avoid forged addresses.
3006: This flag is suppressed if given from an
3007: .q unsafe
3008: environment
3009: (e.g, a user's mail.cf file).
3010: .ip n
3011: Do not insert a UNIX-style
3012: .q From
3013: line on the front of the message.
3014: .ip l
3015: This mailer is local
3016: (i.e.,
3017: final delivery will be performed).
3018: .ip s
3019: Strip quote characters off of the address
3020: before calling the mailer.
3021: .ip m
3022: This mailer can send to multiple users
3023: on the same host
3024: in one transaction.
3025: When a
3026: .b $u
3027: macro occurs in the
3028: .i argv
3029: part of the mailer definition,
3030: that field will be repeated as necessary
3031: for all qualifying users.
3032: .ip F
3033: This mailer wants a
3034: .q From:
3035: header line.
3036: .ip D
3037: This mailer wants a
3038: .q Date:
3039: header line.
3040: .ip M
3041: This mailer wants a
3042: .q Message-Id:
3043: header line.
3044: .ip x
3045: This mailer wants a
3046: .q Full-Name:
3047: header line.
3048: .ip P
3049: This mailer wants a
3050: .q Return-Path:
3051: line.
3052: .ip u
3053: Upper case should be preserved in user names
3054: for this mailer.
3055: .ip h
3056: Upper case should be preserved in host names
3057: for this mailer.
3058: .ip A
3059: This is an Arpanet-compatible mailer,
3060: and all appropriate modes should be set.
3061: .ip U
3062: This mailer wants Unix-style
3063: .q From
3064: lines with the ugly UUCP-style
3065: .q "remote from <host>"
3066: on the end.
3067: .ip e
3068: This mailer is expensive to connect to,
3069: so try to avoid connecting normally;
3070: any necessary connection will occur during a queue run.
3071: .ip X
3072: This mailer want to use the hidden dot algorithm
3073: as specified in RFC821;
3074: basically,
3075: any line beginning with a dot
3076: will have an extra dot prepended
3077: (to be stripped at the other end).
3078: This insures that lines in the message containing a dot
3079: will not terminate the message prematurely.
3080: .ip L
3081: Limit the line lengths as specified in RFC821.
3082: .ip P
3083: Use the return-path in the SMTP
3084: .q "MAIL FROM:"
3085: command
3086: rather than just the return address;
3087: although this is required in RFC821,
3088: many hosts do not process return paths properly.
3089: .ip I
3090: This mailer will be speaking SMTP
3091: to another
3092: .i sendmail
3093: \*-
3094: as such it can use special protocol features.
3095: This option is not required
3096: (i.e.,
3097: if this option is omitted the transmission will still operate successfully,
3098: although perhaps not as efficiently as possible).
3099: .ip C
3100: If mail is
3101: .i received
3102: from a mailer with this flag set,
3103: any addresses in the header that do not have an at sign
3104: (\c
3105: .q @ )
3106: after being rewritten by ruleset three
3107: will have the
3108: .q @domain
3109: clause from the sender
3110: tacked on.
3111: This allows mail with headers of the form:
3112: .(b
3113: From: usera@hosta
3114: To: userb@hostb, userc
3115: .)b
3116: to be rewritten as:
3117: .(b
3118: From: usera@hosta
3119: To: userb@hostb, userc@hosta
3120: .)b
3121: automatically.
3122: .+c "OTHER CONFIGURATION"
3123: .rm $0
3124: .nr ii 1i
3125: .pp
3126: There are some configuration changes that can be made by
3127: recompiling
3128: .i sendmail .
3129: These are located in three places:
3130: .ip md/config.m4
3131: These contain operating-system dependent descriptions.
3132: They are interpolated into the Makefiles in the
3133: .i src
3134: and
3135: .i aux
3136: directories.
3137: This includes information about what version of UNIX
3138: you are running,
3139: what libraries you have to include, etc.
3140: .ip src/conf.h
3141: Configuration parameters that may be tweaked by the installer
3142: are included in conf.h.
3143: .ip src/conf.c
3144: Some special routines and a few variables
3145: may be defined in conf.c.
3146: For the most part these are selected from the settings
3147: in conf.h.
3148: .uh "Parameters in md/config.m4"
3149: .pp
3150: The following compilation flags may be defined in the
3151: .i m4CONFIG
3152: macro in
3153: .i md/config.m4
3154: to define the environment in which you are operating.
3155: .ip V6
3156: If set,
3157: this will compile a version 6 system,
3158: with 8-bit user id's,
3159: single character tty id's,
3160: etc.
3161: .ip VMUNIX
3162: If set,
3163: you will be assumed to have a Berkeley 4BSD or 4.1BSD,
3164: including the
3165: .i vfork \|(2)
3166: system call,
3167: special types defined in <sys/types.h>
3168: (e.g, u_char),
3169: etc.
3170: .lp
3171: If none of these flags are set,
3172: a version 7 system is assumed.
3173: .pp
3174: You will also have to specify what libraries to link with
3175: .i sendmail
3176: in the
3177: .i m4LIBS
3178: macro.
3179: Most notably, you will have to include
3180: .B \-ljobs
3181: if you are running a 4.1BSD system.
3182: .uh "Parameters in src/conf.h"
3183: .pp
3184: Parameters and compilation options
3185: are defined in conf.h.
3186: Most of these need not normally be tweaked;
3187: common parameters are all in sendmail.cf.
3188: However, the sizes of certain primitive vectors, etc.,
3189: are included in this file.
3190: The numbers following the parameters
3191: are their default value.
3192: .nr ii 1.2i
3193: .ip "MAXLINE [256]"
3194: The maximum line length of any input line.
3195: If message lines exceed this length
3196: they will still be processed correctly;
3197: however, header lines,
3198: configuration file lines,
3199: alias lines,
3200: etc.,
3201: must fit within this limit.
3202: .ip "MAXNAME [128]"
3203: The maximum length of any name,
3204: such as a host or a user name.
3205: .ip "MAXFIELD [2500]"
3206: The maximum total length of any header field,
3207: including continuation lines.
3208: .ip "MAXPV [40]"
3209: The maximum number of parameters to any mailer.
3210: This limits the number of recipients that may be passed in one transaction.
3211: .ip "MAXHOP [30]"
3212: When a message has been processed more than this number of times,
3213: sendmail rejects the message
3214: on the assumption that there has been an aliasing loop.
3215: This can be determined from the
3216: .b \-h
3217: flag
3218: or by counting the number of trace fields
3219: (i.e,
3220: .q Received:
3221: lines)
3222: in the message header.
3223: .ip "MAXATOM [100]"
3224: The maximum number of atoms
3225: (tokens)
3226: in a single address.
3227: For example,
3228: the address
3229: .q "eric@Berkeley"
3230: is three atoms.
3231: .ip "MAXMAILERS [25]"
3232: The maximum number of mailers that may be defined
3233: in the configuration file.
3234: .ip "MAXRWSETS [30]"
3235: The maximum number of rewriting sets
3236: that may be defined.
3237: .ip "MAXPRIORITIES [25]"
3238: The maximum number of values for the
3239: .q Precedence:
3240: field that may be defined
3241: (using the
3242: .b P
3243: line in sendmail.cf).
3244: .ip "MAXTRUST [30]"
3245: The maximum number of trusted users that may be defined
3246: (using the
3247: .b T
3248: line in sendmail.cf).
3249: .lp
3250: A number of other compilation options exist.
3251: These specify whether or not specific code should be compiled in.
3252: .nr ii 1i
3253: .ip DBM
3254: If set,
3255: the
3256: .q DBM
3257: package in UNIX is used
3258: (see DBM(3X) in [UNIX80]).
3259: If not set,
3260: a much less efficient algorithm for processing aliases is used.
3261: .ip DEBUG
3262: If set, debugging information is compiled in.
3263: To actually get the debugging output,
3264: the
3265: .b \-d
3266: flag must be used.
3267: .ip LOG
3268: If set,
3269: the
3270: .i syslog
3271: routine in use at some sites is used.
3272: This makes an informational log record
3273: for each message processed,
3274: and makes a higher priority log record
3275: for internal system errors.
3276: .ip QUEUE
3277: This flag should be set to compile in the queueing code.
3278: If this is not set,
3279: mailers must accept the mail immediately
3280: or it will be returned to the sender.
3281: .ip SMTP
3282: If set,
3283: the code to handle user and server SMTP will be compiled in.
3284: This is only necessary if your machine has some mailer
3285: that speaks SMTP.
3286: .ip DAEMON
3287: If set,
3288: code to run a daemon is compiled in.
3289: This code is for 4.2BSD
3290: if the
3291: NVMUNIX
3292: flag is specified;
3293: otherwise,
3294: 4.1a BSD code is used.
3295: Beware however
3296: that there are bugs in the 4.1a code
3297: that make it impossible for
3298: .b sendmail
3299: to work correctly
3300: under heavy load.
3301: .ip UGLYUUCP
3302: If you have a UUCP host adjacent to you which is not running
3303: a reasonable version of
3304: .i rmail ,
3305: you will have to set this flag to include the
3306: .q "remote from sysname"
3307: info on the from line.
3308: Otherwise, UUCP gets confused about where the mail came from.
3309: .ip NOTUNIX
3310: If you are using a non-UNIX mail format,
3311: you can set this flag to turn off special processing
3312: of UNIX-style
3313: .q "From "
3314: lines.
3315: .uh "Configuration in src/conf.c"
3316: .pp
3317: Not all header semantics are defined in the configuration file.
3318: Header lines that should only be included by certain mailers
3319: (as well as other more obscure semantics)
3320: must be specified in the
3321: .i HdrInfo
3322: table in
3323: .i conf.c .
3324: This table contains the header name
3325: (which should be in all lower case)
3326: and a set of header control flags (described below),
3327: The flags are:
3328: .ip H_ACHECK
3329: Normally when the check is made to see if a header line is compatible
3330: with a mailer,
3331: .i sendmail
3332: will not delete an existing line.
3333: If this flag is set,
3334: .i sendmail
3335: will delete
3336: even existing header lines.
3337: That is,
3338: if this bit is set and the mailer does not have flag bits set
3339: that intersect with the required mailer flags
3340: in the header definition in
3341: sendmail.cf,
3342: the header line is
3343: .i always
3344: deleted.
3345: .ip H_EOH
3346: If this header field is set,
3347: treat it like a blank line,
3348: i.e.,
3349: it will signal the end of the header
3350: and the beginning of the message text.
3351: .ip H_FORCE
3352: Add this header entry
3353: even if one existed in the message before.
3354: If a header entry does not have this bit set,
3355: .i sendmail
3356: will not add another header line if a header line
3357: of this name already existed.
3358: This would normally be used to stamp the message
3359: by everyone who handled it.
3360: .ip H_TRACE
3361: If set,
3362: this is a timestamp
3363: (trace)
3364: field.
3365: If the number of trace fields in a message
3366: exceeds a preset amount
3367: the message is returned
3368: on the assumption that it has an aliasing loop.
3369: .ip H_RCPT
3370: If set,
3371: this field contains recipient addresses.
3372: This is used by the
3373: .b \-t
3374: flag to determine who to send to
3375: when it is collecting recipients from the message.
3376: .ip H_FROM
3377: This flag indicates that this field
3378: specifies a sender.
3379: The order of these fields in the
3380: .i HdrInfo
3381: table specifies
3382: .i sendmail's
3383: preference
3384: for which field to return error messages to.
3385: .nr ii 5n
3386: .lp
3387: Let's look at a sample
3388: .i HdrInfo
3389: specification:
3390: .(b
3391: .ta 4n +\w'"return-receipt-to", 'u
3392: struct hdrinfo HdrInfo[] =
3393: {
3394: /* originator fields, most to least significant */
3395: "resent-sender", H_FROM,
3396: "resent-from", H_FROM,
3397: "sender", H_FROM,
3398: "from", H_FROM,
3399: "full-name", H_ACHECK,
3400: /* destination fields */
3401: "to", H_RCPT,
3402: "resent-to", H_RCPT,
3403: "cc", H_RCPT,
3404: /* message identification and control */
3405: "message", H_EOH,
3406: "text", H_EOH,
3407: /* trace fields */
3408: "received", H_TRACE|H_FORCE,
3409:
3410: NULL, 0,
3411: };
3412: .)b
3413: This structure indicates that the
3414: .q To: ,
3415: .q Resent-To: ,
3416: and
3417: .q Cc:
3418: fields
3419: all specify recipient addresses.
3420: Any
3421: .q Full-Name:
3422: field will be deleted unless the required mailer flag
3423: (indicated in the configuration file)
3424: is specified.
3425: The
3426: .q Message:
3427: and
3428: .q Text:
3429: fields will terminate the header;
3430: these are specified in new protocols
3431: [NBS80]
3432: or used by random dissenters around the network world.
3433: The
3434: .q Received:
3435: field will always be added,
3436: and can be used to trace messages.
3437: .pp
3438: There are a number of important points here.
3439: First,
3440: header fields are not added automatically just because they are in the
3441: .i HdrInfo
3442: structure;
3443: they must be specified in the configuration file
3444: in order to be added to the message.
3445: Any header fields mentioned in the configuration file but not
3446: mentioned in the
3447: .i HdrInfo
3448: structure have default processing performed;
3449: that is,
3450: they are added unless they were in the message already.
3451: Second,
3452: the
3453: .i HdrInfo
3454: structure only specifies cliched processing;
3455: certain headers are processed specially by ad hoc code
3456: regardless of the status specified in
3457: .i HdrInfo .
3458: For example,
3459: the
3460: .q Sender:
3461: and
3462: .q From:
3463: fields are always scanned on ARPANET mail
3464: to determine the sender;
3465: this is used to perform the
3466: .q "return to sender"
3467: function.
3468: The
3469: .q "From:"
3470: and
3471: .q "Full-Name:"
3472: fields are used to determine the full name of the sender
3473: if possible;
3474: this is stored in the macro
3475: .b $x
3476: and used in a number of ways.
3477: .pp
3478: The file
3479: .i conf.c
3480: also contains the specification of ARPANET reply codes.
3481: There are four classifications these fall into:
3482: .(b
3483: .sz -1
3484: .ta \w'char 'u +\w'Arpa_TUsrerr[] = 'u +\w'"888"; 'u
3485: char Arpa_Info[] = "050"; /* arbitrary info */
3486: char Arpa_TSyserr[] = "455"; /* some (transient) system error */
3487: char Arpa_PSyserr[] = "554"; /* some (transient) system error */
3488: char Arpa_Usrerr[] = "554"; /* some (fatal) user error */
3489: .sz
3490: .)b
3491: The class
3492: .i Arpa_Info
3493: is for any information that is not required by the protocol,
3494: such as forwarding information.
3495: .i Arpa_TSyserr
3496: and
3497: .i Arpa_PSyserr
3498: is printed by the
3499: .i syserr
3500: routine.
3501: TSyserr
3502: is printed out for transient errors,
3503: whereas PSyserr
3504: is printed for permanent errors;
3505: the distinction is made based on the value of
3506: .i errno .
3507: Finally,
3508: .i Arpa_Usrerr
3509: is the result of a user error
3510: and is generated by the
3511: .i usrerr
3512: routine;
3513: these are generated when the user has specified something wrong,
3514: and hence the error is permanent,
3515: i.e.,
3516: it will not work simply by resubmitting the request.
3517: .pp
3518: If it is necessary to restrict mail through a relay,
3519: the
3520: .i checkcompat
3521: routine can be modified.
3522: This routine is called for every recipient address.
3523: It can return
3524: .b TRUE
3525: to indicate that the address is acceptable
3526: and mail processing will continue,
3527: or it can return
3528: .b FALSE
3529: to reject the recipient.
3530: If it returns false,
3531: it is up to
3532: .i checkcompat
3533: to print an error message
3534: (using
3535: .i usrerr )
3536: saying why the message is rejected.
3537: For example,
3538: .i checkcompat
3539: could read:
3540: .(b
3541: .re
3542: .sz -1
3543: .ta 4n +4n +4n +4n +4n +4n +4n
3544: bool
3545: checkcompat(to)
3546: register ADDRESS *to;
3547: {
3548: if (MsgSize > 50000 && to->q_mailer != LocalMailer)
3549: {
3550: usrerr("Message too large for non-local delivery");
3551: NoReturn = TRUE;
3552: return (FALSE);
3553: }
3554: return (TRUE);
3555: }
3556: .sz
3557: .)b
3558: This would reject messages greater than 50000 bytes
3559: unless they were local.
3560: The
3561: .i NoReturn
3562: flag can be sent to supress the return of the actual body
3563: of the message in the error return.
3564: The actual use of this routine is highly dependent on the
3565: implementation,
3566: and use should be limited.
3567: .+c "SUMMARY OF SUPPORT FILES"
3568: .pp
3569: This is a summary of the support files
3570: that
3571: .i sendmail
3572: creates or generates.
3573: .nr ii 1i
3574: .ip "/usr/lib/sendmail"
3575: The binary of
3576: .i sendmail .
3577: .ip /usr/bin/newaliases
3578: A link to /usr/lib/sendmail;
3579: causes the alias database to be rebuilt.
3580: Running this program is completely equivalent to giving
3581: .i sendmail
3582: the
3583: .b \-bi
3584: flag.
3585: .ip /usr/bin/mailq
3586: Prints a listing of the mail queue.
3587: This program is equivalent to using the
3588: .b \-bp
3589: flag to
3590: .i sendmail .
3591: .ip /usr/lib/sendmail.cf
3592: The configuration file,
3593: in textual form.
3594: .ip /usr/lib/sendmail.fc
3595: The configuration file
3596: represented as a memory image.
3597: .ip /usr/lib/sendmail.hf
3598: The SMTP help file.
3599: .ip /usr/lib/sendmail.st
3600: A statistics file; need not be present.
3601: .ip /usr/lib/aliases
3602: The textual version of the alias file.
3603: .ip /usr/lib/aliases.{pag,dir}
3604: The alias file in
3605: .i dbm \|(3)
3606: format.
3607: .ip /etc/syslog
3608: The program to do logging.
3609: .ip /etc/syslog.conf
3610: The configuration file for syslog.
3611: .ip /etc/syslog.pid
3612: Contains the process id of the currently running syslog.
3613: .ip /usr/spool/mqueue
3614: The directory in which the mail queue
3615: and temporary files reside.
3616: .ip /usr/spool/mqueue/qf*
3617: Control (queue) files for messages.
3618: .ip /usr/spool/mqueue/df*
3619: Data files.
3620: .ip /usr/spool/mqueue/lf*
3621: Lock files
3622: .ip /usr/spool/mqueue/tf*
3623: Temporary versions of the qf files,
3624: used during queue file rebuild.
3625: .ip /usr/spool/mqueue/nf*
3626: A file used when creating a unique id.
3627: .ip /usr/spool/mqueue/xf*
3628: A transcript of the current session.
3629: .ro
3630: .ls 1
3631: .tp
3632: .sp 2i
3633: .in 0
3634: .ce 100
3635: .sz 24
3636: .b SENDMAIL
3637: .sz 14
3638: .sp
3639: INSTALLATION AND OPERATION GUIDE
3640: .sp
3641: .sz 10
3642: Eric Allman
3643: Britton-Lee, Inc.
3644: .sp
3645: Version 4.2
3646: .ce 0
3647: .bp 1
3648: .ce
3649: .sz 12
3650: TABLE OF CONTENTS
3651: .sz 10
3652: .sp 2
3653: .\" remove some things to avoid "out of temp file space" problem
3654: .rm sh
3655: .rm (x
3656: .rm )x
3657: .rm ip
3658: .rm pp
3659: .rm lp
3660: .rm he
3661: .rm fo
3662: .rm eh
3663: .rm oh
3664: .rm ef
3665: .rm of
3666: .xp
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.