*** KNOWNBUGS.OLD Sun Nov 7 10:28:55 1993
--- KNOWNBUGS Wed Jan 12 06:00:44 1994
***************
*** 1,7 ****
K N O W N B U G S I N S E N D M A I L
! (for 8.6.3)
The following are bugs or deficiencies in sendmail that I am aware of
--- 1,7 ----
K N O W N B U G S I N S E N D M A I L
! (for 8.6.5)
The following are bugs or deficiencies in sendmail that I am aware of
***************
*** 9,23 ****
want to get the most up to date version of this from FTP.CS.Berkeley.EDU
in /ucb/sendmail/KNOWNBUGS.
! * "SYSERR: openmailer(local): fd 1 not open" message
- File descriptor 1 (standard output) should not be closed during normal
- processing. This is checked periodically, and sometimes this condition
- is found and this message is produced. Sendmail repairs the problem,
- and the mail is still delivered, but I still don't know why it happens.
- (There was a bug that was fixed in 8.6.beta.13 that might be related,
- but I think this bug still exists.)
* Null bytes are not handled properly.
Sendmail should handle full binary data. As it stands, it handles
--- 9,25 ----
want to get the most up to date version of this from FTP.CS.Berkeley.EDU
in /ucb/sendmail/KNOWNBUGS.
! This list is not guaranteed to be complete, especially for fixed bugs.
! Many bugs are reported and fixed without ever making it as far as this
! file. See the file RELEASE_NOTES (in the root directory of the sendmail
! distribution) for more details.
+ +----------------------------------------------+
+ | THE FOLLOWING PROBLEMS ARE STILL OUTSTANDING |
+ +----------------------------------------------+
+
+
* Null bytes are not handled properly.
Sendmail should handle full binary data. As it stands, it handles
***************
*** 26,37 ****
restructuring of the code -- for example, almost no C library support
could be used to handle strings.
- * Route-addrs missing angle brackets.
-
- There are cases where route-addrs do not get angle brackets around them,
- such as in the "-r" flag on mailers or in the From_ line created when
- mailing to files.
-
* Duplicate error messages.
Sometimes identical, duplicate error messages can be generated. As
--- 28,33 ----
***************
*** 56,59 ****
this address. It's not clear what the right behaviour is in this
circumstance.
! (Version 8.9, last updated 10/31/93)
--- 52,171 ----
this address. It's not clear what the right behaviour is in this
circumstance.
! * REDIRECT aliases don't work with `n' option.
!
! If you have option `n' set when you use newaliases and have
! REDIRECT addresses in your aliases file, you'll get the error
! messages during the newaliases instead of when email is sent to
! the address in question. The workaround is to turn off the `n'
! option.
!
! * MX records that point at non-existent hosts work strangly.
!
! Consider the DNS records:
!
! hostH MX 1 hostA
! MX 2 hostB
! hostA A 128.32.8.9
!
! (note that there is no A record for hostB). If hostA is down,
! an attempt to send to hostH gives "host unknown" -- that is, it
! reflects out the status on the last host it tries, which in this
! case is hostB, which is unknown. It probably ought to eliminate
! hostB early in processing.
!
! * NAME environment variables with commas break.
!
! If you define your NAME environment variable to have a comma
! (e.g., ``Lastname, Firstname''), and you are using the $q definition
! that uses ``name
'' format, sendmail treats the first and
! last names as two addresses, thus producing a bogus From line. You
! can work around this by changing the $q definition to use
! ``address (name)''.
!
! * \231 considered harmful.
!
! Header addresses that have the \231 character (and possibly others
! in the range \201 - \237) behave in odd and usually unexpected ways.
!
! * DEC Alphas (OSF/1 1.3) sometimes time out on sending mail.
!
! I have one report that DEC Alphas acting as SMTP clients sometimes
! will apparently not see the "250 OK" message in response to the
! dot that indicates the end of the message. This only happens if
! the message is run from the queue -- if it gets through on first
! try, everything is fine. I have been unable to reproduce this
! problem at Berkeley.
!
! * accept() problem on SVR4.
!
! Apparently, the sendmail daemon loop (doing accept()s on the network)
! can get into a wierd state on SVR4; it starts logging ``SYSERR:
! getrequests: accept: Protocol Error''. The workaround is to kill
! and restart the sendmail daemon. We don't have an SVR4 system at
! Berkeley that carries more than token mail load, so I can't validate
! this. It is likely to be a glitch in the sockets emulation, since
! "Protocol Error" is not possible error code with Berkeley TCP/IP.
!
! I've also had someone report the message ``sendmail: accept:
! SIOCGPGRP failed errno 22'' on an SVR4 system. This message is
! not in the sendmail source code, so I assume it is also a bug
! in the sockets emulation. (Errno 22 is EINVAL "Invalid Argument"
! on all the systems I have available, including Solaris 2.x.)
!
! * Sending user deletion not done properly in :include: lists.
!
! If you don't have the "m" (me too) option set, then a person
! sending to a list that contains themselves should not get a copy
! of the message. However, if that list points to a :include: file
! that has one address per line, this will break, and the sender
! will always get a copy of their own message, just as though the
! "m" option were set.
!
! You can eliminate this by adding commas at the end of each line
! of the :include: file.
!
!
! +-------------------------------------------+
! | THE FOLLOWING PROBLEMS ARE FIXED IN 8.6.5 |
! +-------------------------------------------+
!
! * Route-addrs missing angle brackets.
!
! There are cases where route-addrs do not get angle brackets around them,
! such as in the "-r" flag on mailers or in the From_ line created when
! mailing to files.
!
! * No "exposed users" in "nullrelay" configuration.
!
! The "nullrelay" configuration hides all addresses behind the mail
! hub name. Some sites might prefer to expose some names such as
! root. This information is always available in Received: lines.
!
! * owner-* alias that uses :include: broken.
!
! If you have aliases set up as:
!
! owner-listname: :include:/some/file
!
! sendmail will break because it considers this a "sender address",
! which is not permitted to use the :include: syntax. The easiest
! workaround is to change this to:
!
! owner-listname: :include:/some/file,
!
! (note the trailing comma); a somewhat cleaner solution is to use:
!
! owner-listname: listname-request
! listname-request: :include:/some/file
!
! * "SYSERR: openmailer(local): fd 1 not open" message
!
! File descriptor 1 (standard output) should not be closed during normal
! processing. This is checked periodically, and sometimes this condition
! is found and this message is produced. Sendmail repairs the problem,
! and the mail is still delivered, but I still don't know why it happens.
! (There was a bug that was fixed in 8.6.beta.13 that might be related,
! but I think this bug still exists.)
!
! (Version 8.15, last updated 1/12/94)
*** READ_ME.OLD Thu Nov 25 07:55:57 1993
--- READ_ME Tue Jan 4 07:52:09 1994
***************
*** 1,5 ****
/*-
! * @(#)READ_ME 8.5 (Berkeley) 9/28/93
*/
SENDMAIL RELEASE 8
--- 1,5 ----
/*-
! * @(#)READ_ME 8.8 (Berkeley) 1/4/94
*/
SENDMAIL RELEASE 8
***************
*** 41,46 ****
--- 41,83 ----
macro set that is compatible with these macros.
+ +-----------------------+
+ | RELATED DOCUMENTATION |
+ +-----------------------+
+
+ There are other files you should read. Rooted in this directory are:
+
+ CHANGES-R5-R8
+ Describes changes between Release 5 and Release 8 of sendmail.
+ There are some things that may behave somewhat differently.
+ For example, the rules governing when :include: files will
+ be read have been tightened up for security reasons.
+ FAQ
+ Answers to Frequently Asked Questions.
+ KNOWNBUGS
+ Known bugs in the current release. I try to keep this up
+ to date -- get the latest version from FTP.CS.Berkeley.EDU
+ in /ucb/sendmail/KNOWNBUGS.
+ RELEASE_NOTES
+ A detailed description of the changes in each version. This
+ is quite long, but informative.
+ src/READ_ME
+ Details on compiling and installing sendmail.
+ cf/README
+ Details on configuring sendmail.
+ doc/op/op.me
+ The sendmail Installation & Operations Guide. Be warned: if
+ you are running this off on SunOS or some other system with an
+ old version of -me, you need to add the following macro to the
+ macros:
+
+ .de sm
+ \s-1\\$1\\s0\\$2
+ ..
+
+ This sets a word in a smaller pointsize.
+
+
+--------------+
| RELATED RFCS |
+--------------+
***************
*** 96,101 ****
--- 133,169 ----
faster, and the interface is nicer to animals and plants. You will
also probably find that you have to add -I/where/you/put/db/include
to the sendmail makefile to get db.h to work properly.
+
+
+ +-------------+
+ | USE WITH MH |
+ +-------------+
+
+ This version of sendmail notices and reports certain kinds of SMTP
+ protocol violations that were ignored by older versions. If you
+ are running MH you may wish to install the patch in contrib/mh.patch
+ that will prevent these warning reports. This patch also works
+ with the old version of sendmail, so it's safe to go ahead and
+ install it.
+
+
+ +-----------+
+ | MAKEFILES |
+ +-----------+
+
+ The Makefiles in this release use the new Berkeley "make" that is
+ available in BSD Net/2 and 4.4BSD. If you are using this version
+ of make, you may notice one or two places where the Makefile includes
+ "../../Makefile.inc". This file is not included with the sendmail
+ distribution because it's not part of sendmail. However, it is,
+ in toto:
+
+ # @(#)Makefile.inc 8.1 (Berkeley) 6/6/93
+
+ BINDIR?= /usr/sbin
+
+ The other directories should all have Makefile.dist files that work
+ on the old make. For more details, see src/READ_ME.
+---------------------+
*** RELEASE_NOTES.OLD Sun Nov 7 10:29:11 1993
--- RELEASE_NOTES Thu Jan 13 06:45:11 1994
***************
*** 1,3 ****
--- 1,287 ----
+ 8.6.5/8.6.5 94/01/13
+ Security fix: /.forward could be owned by anyone (the test
+ to allow root to own any file was backwards). From
+ Bob Campbell at U.C. Berkeley.
+ Security fix: group ids were not completely set when programs
+ were invoked. This caused programs to have group
+ permissions they should not have had (usually group
+ daemon instead of their own group). In particular,
+ Perl scripts would refuse to run.
+ Security: check to make sure files that are written are not
+ symbolic links (at least under some circumstances).
+ Although this does not respond to a specific known
+ attack, it's just a good idea. Suggested by
+ Christian Wettergren.
+ Security fix: if a user had an NFS mounted home directory on
+ a system with a restricted shell listed in their
+ /etc/passwd entry, they could still execute any
+ program by putting that in their .forward file.
+ This fix prevents that by insisting that their shell
+ appear in /etc/shells before allowing a .forward to
+ execute a program or write a file. You can disable
+ this by putting "*" in /etc/shells. It also won't
+ permit world-writable :include: files to reference
+ programs or files (there's no way to disable this).
+ These behaviours are only one level deep -- for
+ example, it is legal for a world-writable :include:
+ file to reference an alias that writes a file, on
+ the assumption that the alias file is well controlled.
+ Security fix: root was not treated suspiciously enough when
+ looking into subdirectories. This would potentially
+ allow a cracker to examine files that were publically
+ readable but in a non-publically searchable directory.
+ Fix a problem that causes an error on QUIT on a cached
+ connection to create problems on the current job.
+ These are typically unrelated, so errors occur in
+ the wrong place.
+ Reset CurrentLA in sendall() -- this makes sendmail queue
+ runs more responsive to load average, and fixes a
+ problem that ignored the load average in locally
+ generated mail. From Eric Wassenaar.
+ Fix possible core dump on aliases with null LHS. From
+ John Orthoefer of BB&N.
+ Revert to using flock() whenever possible -- there are just
+ too many bugs in fcntl() locking, particularly over
+ NFS, that cause sendmail to fail in perverse ways.
+ Fix a bug that causes the connection cache to get confused
+ when sending error messages. This resulted in
+ "unexpected close" messages. It should fix itself
+ on the following queue run. Problem noted by
+ Liudvikas Bukys of Rochester University.
+ Include $k in $=k as documented in the Install & Op Guide.
+ This seems odd, but it was documented.... From
+ Michael Corrigan of UCSD.
+ Fix problem that caused :include:s from alias files to be
+ forced to be owned by root instead of daemon
+ (actually DefUid). From Tim Irvin.
+ Diagnose unrecognized I option values -- from Mortin Forssen
+ of the Chalmers University of Technology.
+ Make "error" mailer work consistently when there is no error
+ code associated with it -- previously it returned OK
+ even though there was a real problem. Now it assumes
+ EX_UNAVAILABLE.
+ Fix bug that caused the last header line of messages that had
+ no body and which were terminated with EOF instead of
+ "." to be discarded. Problem noted by Liudvikas Bukys.
+ Fix core dump on SMTP mail to programs that failed -- it tried
+ to go to a "next MX host" when none existed, causing
+ a core dump. From der Mouse at McGill University.
+ Change IDENTPROTO from a defined/not defined to a 0/1 switch;
+ this makes it easier to turn it off (using
+ -DIDENTPROTO=0 in the Makefile). From der Mouse.
+ Fix YP_MASTER_NAME store to use the unupdated result of
+ gethostname() (instead of myhostname(), which tries
+ to fully qualify the name) to be consistent with
+ SunOS. If your hostname is unqualified, this fixes
+ transfers to slave servers. Bug noted by Keith
+ McMillan of Ameritech Services, Inc.
+ Fix Ultrix problem: gethostbyname() can return a very large
+ (> 500) h_length field, which causes the sockaddr
+ to be trashed. Use the size of the sockaddr instead.
+ Fix from Bob Manson of Ohio State.
+ Don't assume "-a." on host lookups if NAMED_BIND is not
+ defined -- this confuses gethostbyname on hosts
+ file lookups, which doesn't understand the trailing
+ dot convention.
+ Log SMTP server subprocesses that die with a signal instead
+ of from a clean exit.
+ If you don't have option "I" set, don't assume that a DNS
+ "host unknown" message is authoritative -- it
+ might still be found in /etc/hosts.
+ Fix a problem that would cause Deferred: messages to be sent
+ as the subject of an error message, even though the
+ actual cause of a message was more severe than that.
+ Problem noted by Chris Seabrook of OSSI.
+ Fix race condition in DBM alias file locking. From Kyle
+ Jones of UUNET.
+ Limit delivery syslog line length to avoid bugs in some
+ versions of syslog(3). This adds a new compile time
+ variable SYSLOG_BUFSIZE. From Jay Plett of Princeton
+ University, which is in turn derived from IDA.
+ Fix quotes inside of comments in addresses -- previously
+ it insisted that they be balanced, but the 822 spec
+ says that they should be ignored.
+ Dump open file state to syslog upon receiving SIGUSR1 (for
+ debugging). This also evaluates ruleset 89, if set
+ (with the null input), and logs the result. This
+ should be used sparingly, since the rewrite process
+ is not reentrant.
+ Change -qI, -qR, and -qS flags to be case-insensitive as
+ documented in the Bat Book.
+ If the mailer returned EX_IOERR or EX_OSERR, sendmail did not
+ return an error message and did not requeue the message.
+ Fix based on code from Roland Dirlewanger of
+ Reseau Regional Aquarel, Bordeaux, France.
+ Fix a problem that caused a seg fault if you got a 421 error
+ code during some parts of connection initialization.
+ I've only seen this when talking to buggy mailers on
+ the other end, but it shouldn't give a seg fault in
+ any case. From Amir Plivatsky.
+ Fix core dump caused by a ruleset call that returns null.
+ Fix from Bryan Costales of ICSI.
+ Full-Name: field was being ignored. Fix from Motonori Nakamura
+ of Kyoto University.
+ Fix a possible problem with very long input lines in setproctitle.
+ From P{r Emanuelsson.
+ Avoid putting "This is a warning message" out on return receipts.
+ Suggested by Douglas Anderson.
+ Detect loops caused by recursive ruleset calls. Suggested by
+ Bryan Costales.
+ Initialize non-alias maps during alias rebuilds -- they may be
+ needed for parsing. Problem noted by Douglas Anderson.
+ Log sender address even if no message was collected in SMTP
+ (e.g., if all RCPTs failed). Suggested by Motonori
+ Nakamura.
+ Don't reflect the owner-list contents into the envelope sender
+ address if the value contains ", :, /, or | (to avoid
+ illegal addresses appearing there).
+ Efficiency hack for toktype macro -- from Craig Partridge of
+ BB&N.
+ Clean up DNS error printing so that a host name is always
+ included.
+ Remember to set $i during queue runs. Reported by Stephen
+ Campbell of Dartmouth University.
+ If ${HOSTALIASES} is set, use it during canonification so that
+ headers are properly mapped. Reported by Anne Bennett
+ of Concordia University.
+ Avoid printing misleading error message if SMTP mailer (not
+ using [IPC]) should die on a core dump.
+ Avoid incorrect diagnosis of "file 1 closed" when it is caused
+ by the other end closing the connection. From
+ Dave Morrison of Oracle.
+ Improve several of the error messages printed by "mailq"
+ to include a host name or other useful information.
+ Add preliminary NetInfo support for NeXT systems. From Vince
+ DeMarco.
+ Fix a glitch that sometimes caused :include:s that pointed to
+ NFS filesystems that were down to give an "aliasing/
+ forwarding loop broken" message instead of queueing
+ the message for retry. Noted by William C Fenner of
+ the NRL Connection Machine Facility.
+ Fix a problem that could cause a core dump if the input sequence
+ had (or somehow acquired) a \231 character.
+ Make sure that route-addrs always have around
+ them in non-SMTP envelopes (SMTP envelopes already do
+ this properly).
+ Avoid wierd headers on unbalanced punctuation of the form:
+ ``Joe User ; this
+ has uucp-dom semantics but old UUCP syntax. This
+ also permits "uucp-old" as an alias for "uucp" and
+ "uucp-new" as a synonym for "suucp" for consistency.
+ CONFIG: add POP mailer support (from Kimmo Suominen
+ ).
+ CONFIG: drop CSNET_RELAY support -- CSNET is long gone.
+ CONFIG: fix bug caused with domain literal addresses (e.g.,
+ ``[128.32.131.12]'') when FEATURE(allmasquerade)
+ was set; it would get an additional @masquerade.host
+ added to the address. Problem noted by Peter Wan
+ of Georgia Tech.
+ CONFIG: make sure that the local UUCP name is in $=w. From
+ Jim Murray of Stratus.
+ CONFIG: changes to UUCP rewriting to simulate IDA-style "V"
+ mailer flag. Briefly, if you are sending to host
+ "foo", then it rewrites "foo!...!baz" to "...!baz",
+ "foo!baz" remains "foo!baz", and anything else has
+ the local name prepended.
+ CONFIG: portability fixes for HP-UX.
+ DOC: several minor problems fixed in the Install & Op Guide.
+ MAKEMAP: fix core dump problem on lines that are too long or
+ which lack newline. From Mark Delany.
+ MAILSTATS: print sums of columns (total messages & kbytes
+ in and out of the system). From Tom Ferrin of UC
+ San Francisco Computer Graphics Lab.
+ SIGNIFICANT USER- OR SYSAD-VISIBLE CHANGES:
+ On HP-UX, /etc/sendmail.cf has been moved to
+ /usr/lib/sendmail.cf to match HP sendmail.
+ Permissions have been tightened up on world-writable
+ :include: files and accounts that have shells
+ that are not listed in /etc/shells. This may
+ cause some .forward files that have worked
+ before to start failing.
+ SIGUSR1 dumps some state to the log.
+ NEW FILES:
+ src/Makefile.DGUX
+ src/Makefile.Dynix
+ src/Makefile.FreeBSD
+ src/Makefile.Mach386
+ src/Makefile.NetBSD
+ src/Makefile.RISCos
+ src/Makefile.SCO
+ src/Makefile.SVR4
+ src/Makefile.Titan
+ cf/mailer/pop.m4
+ cf/ostype/bsdi1.0.m4
+ cf/ostype/dgux.m4
+ cf/ostype/dynix3.2.m4
+ cf/ostype/sco3.2.m4
+ makemap/Makefile.dist
+ praliases/Makefile.dist
+
8.6.4/8.6.4 93/10/31
Repair core-dump problem (write to read-only memory segment)
if you fall back to the return-to-Postmaster case in
*** cf/README.OLD Mon Nov 8 13:14:32 1993
--- cf/README Wed Jan 12 06:19:02 1994
***************
*** 4,10 ****
Eric Allman
! @(#)README 8.15 (Berkeley) 10/31/93
This document describes the sendmail configuration files being used
--- 4,10 ----
Eric Allman
! @(#)README 8.21 (Berkeley) 1/12/94
This document describes the sendmail configuration files being used
***************
*** 31,40 ****
This package requires a post-V7 version of m4; if you are running the
4.2bsd, SysV.2, or 7th Edition version, I suggest finding a friend with
a newer version. You can m4-expand on their system, then run locally.
! SunOS's /usr/5bin/m4 or BSD-Net/2's m4 both work. GNU m4 (which is a
! language unto itself) also works, but I don't intend to work so hard
! to keep this up in the future. [Note to GNU folks: the construct
! "define(`FOO')" should work without my having to add a null value.]
IF YOU DON'T HAVE A BERKELEY MAKE, don't despair! Just run
"m4 foo.mc > foo.cf" -- that should be all you need. There is also
--- 31,39 ----
This package requires a post-V7 version of m4; if you are running the
4.2bsd, SysV.2, or 7th Edition version, I suggest finding a friend with
a newer version. You can m4-expand on their system, then run locally.
! SunOS's /usr/5bin/m4 or BSD-Net/2's m4 both work. GNU m4 version 1.1
! also works. Unfortunately, I'm told that the M4 on BSDI 1.0 doesn't
! work -- you'll have to use a Net/2 or GNU version.
IF YOU DON'T HAVE A BERKELEY MAKE, don't despair! Just run
"m4 foo.mc > foo.cf" -- that should be all you need. There is also
***************
*** 52,58 ****
--- 51,64 ----
configuration files can do; clever people can probably tweak them
to great effect. But it should get you started.
+ *******************************************************************
+ *** BE SURE YOU CUSTOMIZE THESE FILES! They have some ***
+ *** Berkeley-specific assumptions built in, such as the name ***
+ *** of our UUCP-relay. You'll want to create your own domain ***
+ *** description, and use that in place of domain/Berkeley.m4. ***
+ *******************************************************************
+
+--------------------------+
| INTRODUCTION AND EXAMPLE |
+--------------------------+
***************
*** 186,193 ****
connected.
BITNET_RELAY The host that will forward BITNET-addressed email.
If not defined, the .BITNET pseudo-domain won't work.
- CSNET_RELAY The host that will forward CSNET-addressed email.
- If not defined, the .CSNET pseudo-domain won't work.
LOCAL_RELAY The site that will handle unqualified names -- that
is, names with out an @domain extension. If not set,
they are assumed to belong on this machine. This
--- 192,197 ----
***************
*** 241,252 ****
is for when you know that the UUCP mailer at the other
end can handle multiple recipients in one transfer.
When you invoke this, sendmail looks for all names in
! the $=U class and sends them to the uucp mailer; all
! names in the $=Y class are sent to suucp. Note that
this is a function of what version of rmail runs on
the receiving end, and hence may be out of your control.
! If smtp is defined, it also defines a "uucp-dom" mailer
! that uses domain-style rewriting.
usenet Usenet (network news) delivery. If this is specified,
an extra rule is added to ruleset 0 that forwards all
--- 245,259 ----
is for when you know that the UUCP mailer at the other
end can handle multiple recipients in one transfer.
When you invoke this, sendmail looks for all names in
! the $=U class and sends them to the uucp-old mailer; all
! names in the $=Y class are sent to uucp-new; and all
! names in the $=Z class are sent to uucp-uudom. Note that
this is a function of what version of rmail runs on
the receiving end, and hence may be out of your control.
! If smtp is defined, it also defines "uucp-dom" and
! "uucp-uudom" mailers that use domain-style rewriting.
! See the section below describing UUCP mailers in more
! detail.
usenet Usenet (network news) delivery. If this is specified,
an extra rule is added to ruleset 0 that forwards all
***************
*** 258,264 ****
--- 265,273 ----
on Sam Leffler's FlexFAX software. For more information,
see below.
+ pop Post Office Protocol.
+
+----------+
| FEATURES |
+----------+
***************
*** 433,438 ****
--- 442,533 ----
least in the same company).
+ +--------------------+
+ | USING UUCP MAILERS |
+ +--------------------+
+
+ It's hard to get UUCP mailers right because of the extremely ad hoc
+ nature of UUCP addressing. These config files are really designed
+ for domain-based addressing, even for UUCP sites.
+
+ There are four UUCP mailers available. The choice of which one to
+ use is partly a matter of local preferences and what is running at
+ the other end of your UUCP connection. Unlike good protocols that
+ define what will go over the wire, UUCP uses the policy that you
+ should do what is right for the other end; if they change, you have
+ to change. This makes it hard to do the right thing, and discourages
+ people from updating their software. In general, if you can avoid
+ UUCP, please do.
+
+ The major choice is whether to go for a domainized scheme or a
+ non-domainized scheme. This depends entirely on what the other
+ end will recognize. If at all possible, you should encourage the
+ other end to go to a domain-based system -- non-domainized addresses
+ don't work entirely properly.
+
+ The four mailers are:
+
+ uucp-old (obsolete name: "uucp")
+ This is the oldest, the worst (but the closest to UUCP) way of
+ sending messages accros UUCP connections. It does bangify
+ everything and prepends $U (your UUCP name) to the sender's
+ address (which can already be a bang path itself). It can
+ only send to one address at a time, so it spends a lot of
+ time copying duplicates of messages. Avoid this if at all
+ possible.
+
+ uucp-new (obsolete name: "suucp")
+ The same as above, except that it assumes that in one rmail
+ command you can specify several recipients. It still has a
+ lot of other problems.
+
+ uucp-dom
+ This UUCP mailer keeps everything as domain addresses.
+ Basically, it uses the SMTP mailer rewriting rules.
+
+ Unfortunately, a lot of UUCP mailer transport agents require
+ bangified addresses in the envelope, although you can use
+ domain-based addresses in the message header. (The envelope
+ shows up as the From_ line on UNIX mail.) So....
+
+ uucp-uudom
+ This is a cross between uucp-new (for the envelope addresses)
+ and uucp-dom (for the header addresses). It bangifies the
+ envelope sender (From_ line in messages) without adding the
+ local hostname, unless there is no host name on the address
+ at all (e.g., "wolf") or the host component is a UUCP host name
+ instead of a domain name ("somehost!wolf" instead of
+ "some.dom.ain!wolf").
+
+ Examples:
+
+ We are on host grasp.insa-lyon.fr (UUCP host name "grasp"). The
+ following summarizes the sender rewriting for various mailers.
+
+ Mailer sender rewriting in the envelope
+ ------ ------ -------------------------
+ uucp-{old,new} wolf grasp!wolf
+ uucp-dom wolf wolf@grasp.insa-lyon.fr
+ uucp-uudom wolf grasp.insa-lyon.fr!wolf
+
+ uucp-{old,new} wolf@fr.net grasp!fr.net!wolf
+ uucp-dom wolf@fr.net wolf@fr.net
+ uucp-uudom wolf@fr.net fr.net!wolf
+
+ uucp-{old,new} somehost!wolf grasp!somehost!wolf
+ uucp-dom somehost!wolf somehost!wolf@grasp.insa-lyon.fr
+ uucp-uudom somehost!wolf grasp.insa-lyon.fr!somehost!wolf
+
+ If you are using one of the domainized UUCP mailers, you really want
+ to convert all UUCP addresses to domain format -- otherwise, it will
+ do it for you (and probably not the way you expected). For example,
+ if you have the address foo!bar!baz (and you are not sending to foo),
+ the heuristics will add the @uucp.relay.name or @local.host.name to
+ this address. However, if you map foo to foo.host.name first, it
+ will not add the local hostname. You can do this using the uucpdomain
+ feature.
+
+
+-------------------+
| TWEAKING RULESETS |
+-------------------+
***************
*** 826,832 ****
--- 921,934 ----
the option is only included to provide back-compatibility. These are
marked with "*".
+ Remember that these options are M4 variables, and hence may need to
+ be quoted. In particular, arguments with commas will usually have to
+ be ``double quoted, like this phrase'' to avoid having the comma
+ confuse things. This is common for alias file definitions and for
+ the read timeout.
+
M4 Variable Name Default Mac/Opt Description
+ ================ ======= ======= ===========
confMAILER_NAME MAILER-DAEMON Dn The sender name used for
internally generated
outgoing messages.
***************
*** 846,853 ****
SMTP mail.
confBLANK_SUB . OB Blank (space) substitution
character.
! confCON_EXPENSIVE False Oc Connect immediately to
! mailers marked expensive?
confCHECKPOINT_INTERVAL 10 OC Checkpoint queue files
every N recipients.
confDELIVERY_MODE background Od Default delivery mode.
--- 948,955 ----
SMTP mail.
confBLANK_SUB . OB Blank (space) substitution
character.
! confCON_EXPENSIVE False Oc Avoid connecting immediately
! to mailers marked expensive?
confCHECKPOINT_INTERVAL 10 OC Checkpoint queue files
every N recipients.
confDELIVERY_MODE background Od Default delivery mode.
***************
*** 1019,1026 ****
MAILERS
0 local, prog local and program mailers
! 1 smtp SMTP channel
! 2 uucp UNIX-to-UNIX Copy Program
3 netnews Network News delivery
4 fax Sam Leffler's FlexFAX software
--- 1121,1128 ----
MAILERS
0 local, prog local and program mailers
! 1 [e]smtp, relay SMTP channel
! 2 uucp-* UNIX-to-UNIX Copy Program
3 netnews Network News delivery
4 fax Sam Leffler's FlexFAX software
***************
*** 1029,1035 ****
A
B Bitnet Relay
! C CSNET Relay
D The local domain -- usually not needed
E
F FAX Relay
--- 1131,1137 ----
A
B Bitnet Relay
! C
D The local domain -- usually not needed
E
F FAX Relay
*** cf/cf/Makefile.OLD Wed Dec 1 11:54:48 1993
--- cf/cf/Makefile Wed Dec 1 11:55:31 1993
***************
*** 1,4 ****
! # @(#)Makefile 8.4 (Berkeley) 10/15/93
M4= m4
#M4= /usr/src/usr.bin/m4/obj/m4
--- 1,4 ----
! # @(#)Makefile 8.5 (Berkeley) 12/1/93
M4= m4
#M4= /usr/src/usr.bin/m4/obj/m4
***************
*** 15,20 ****
--- 15,21 ----
ALL= cs-hidden.cf cs-exposed.cf \
hpux-cs-exposed.cf hpux-cs-hidden.cf \
+ riscos-cs-exposed.cf \
sunos3.5-cs-exposed.cf sunos3.5-cs-hidden.cf \
sunos4.1-cs-exposed.cf sunos4.1-cs-hidden.cf \
ultrix4.1-cs-exposed.cf ultrix4.1-cs-hidden.cf \
*** cf/domain/Berkeley.m4.OLD Tue Oct 5 13:28:20 1993
--- cf/domain/Berkeley.m4 Mon Dec 20 10:49:11 1993
***************
*** 33,42 ****
# SUCH DAMAGE.
#
divert(0)
! VERSIONID(`@(#)Berkeley.m4 8.3 (Berkeley) 10/5/93')
define(`UUCP_RELAY', `ucbvax.Berkeley.EDU')dnl
define(`BITNET_RELAY', `jade.Berkeley.EDU')dnl
- define(`CSNET_RELAY', `Relay.CV.COM')dnl
define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward')dnl
define(`confCW_FILE', `-o /etc/sendmail.cw')dnl
FEATURE(redirect)dnl
--- 33,41 ----
# SUCH DAMAGE.
#
divert(0)
! VERSIONID(`@(#)Berkeley.m4 8.4 (Berkeley) 12/20/93')
define(`UUCP_RELAY', `ucbvax.Berkeley.EDU')dnl
define(`BITNET_RELAY', `jade.Berkeley.EDU')dnl
define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward')dnl
define(`confCW_FILE', `-o /etc/sendmail.cw')dnl
FEATURE(redirect)dnl
*** cf/feature/bitdomain.m4.OLD Tue Nov 30 08:58:24 1993
--- cf/feature/bitdomain.m4 Tue Nov 30 09:01:07 1993
***************
*** 34,40 ****
#
divert(0)
! VERSIONID(`@(#)bitdomain.m4 8.3 (Berkeley) 8/7/93')
divert(-1)
--- 34,40 ----
#
divert(0)
! VERSIONID(`@(#)bitdomain.m4 8.4 (Berkeley) 11/30/93')
divert(-1)
***************
*** 45,49 ****
PUSHDIVERT(8)
# handle BITNET mapping
! R$* < @ $+ .BITNET > $* $: $1 < @ $(bitdomain $2 $: $2.BITNET $) > $3
POPDIVERT
--- 45,49 ----
PUSHDIVERT(8)
# handle BITNET mapping
! R$* < @ $+ .BITNET. > $* $: $1 < @ $(bitdomain $2 $: $2.BITNET. $) > $3
POPDIVERT
*** cf/feature/redirect.m4.OLD Mon Jun 7 10:10:46 1993
--- cf/feature/redirect.m4 Mon Dec 27 14:48:46 1993
***************
*** 34,46 ****
#
divert(0)
! VERSIONID(`@(#)redirect.m4 8.1 (Berkeley) 6/7/93')
divert(-1)
PUSHDIVERT(3)
# addresses sent to foo@host.REDIRECT will give a 551 error code
! R$* < @ $+ .REDIRECT > $# error $@ NOUSER $: "551 User not local; please try " <$1@$2>
POPDIVERT
PUSHDIVERT(6)
--- 34,46 ----
#
divert(0)
! VERSIONID(`@(#)redirect.m4 8.2 (Berkeley) 12/27/93')
divert(-1)
PUSHDIVERT(3)
# addresses sent to foo@host.REDIRECT will give a 551 error code
! R$* < @ $+ .REDIRECT. > $# error $@ NOUSER $: "551 User not local; please try " <$1@$2>
POPDIVERT
PUSHDIVERT(6)
*** cf/feature/uucpdomain.m4.OLD Tue Nov 30 07:18:13 1993
--- cf/feature/uucpdomain.m4 Tue Nov 30 09:01:08 1993
***************
*** 34,40 ****
#
divert(0)
! VERSIONID(`@(#)uucpdomain.m4 8.3 (Berkeley) 8/7/93')
divert(-1)
--- 34,40 ----
#
divert(0)
! VERSIONID(`@(#)uucpdomain.m4 8.4 (Berkeley) 11/30/93')
divert(-1)
***************
*** 45,49 ****
PUSHDIVERT(8)
# handle UUCP mapping
! R$* < @ $+ .UUCP > $* $: $1 < @ $(uudomain $2 $: $2.UUCP $) > $3
POPDIVERT
--- 45,49 ----
PUSHDIVERT(8)
# handle UUCP mapping
! R$* < @ $+ .UUCP. > $* $: $1 < @ $(uudomain $2 $: $2.UUCP. $) > $3
POPDIVERT
*** cf/m4/cf.m4.OLD Sun Jul 18 10:58:54 1993
--- cf/m4/cf.m4 Fri Dec 24 06:34:40 1993
***************
*** 51,56 ****
--- 51,57 ----
changecom()
undefine(`format')
+ undefine(`hpux')
ifdef(`pushdef', `',
`errprint(`You need a newer version of M4, at least as new as
System V or GNU')
***************
*** 92,98 ****
define(`SITECONFIG',
`CONCAT(D, $3, $2)
define(`_CLASS_$3_', `')dnl
! ifelse($3, U, Cw$2, `dnl')
define(`SITE', `ifelse(CONCAT($'2`, $3), SU,
CONCAT(CY, $'1`),
CONCAT(C, $3, $'1`))')
--- 93,99 ----
define(`SITECONFIG',
`CONCAT(D, $3, $2)
define(`_CLASS_$3_', `')dnl
! ifelse($3, U, Cw$2 $2.UUCP, `dnl')
define(`SITE', `ifelse(CONCAT($'2`, $3), SU,
CONCAT(CY, $'1`),
CONCAT(C, $3, $'1`))')
***************
*** 145,148 ****
define(`confTRY_NULL_MX_LIST', `False')
divert(0)dnl
! VERSIONID(`@(#)cf.m4 8.2 (Berkeley) 7/18/93')
--- 146,149 ----
define(`confTRY_NULL_MX_LIST', `False')
divert(0)dnl
! VERSIONID(`@(#)cf.m4 8.4 (Berkeley) 12/24/93')
*** cf/m4/proto.m4.OLD Tue Nov 23 09:55:51 1993
--- cf/m4/proto.m4 Thu Jan 13 06:40:24 1994
***************
*** 34,40 ****
#
divert(0)
! VERSIONID(`@(#)proto.m4 8.20 (Berkeley) 10/31/93')
MAILER(local)dnl
--- 34,40 ----
#
divert(0)
! VERSIONID(`@(#)proto.m4 8.30 (Berkeley) 1/12/94')
MAILER(local)dnl
***************
*** 93,104 ****
CPBITNET
')dnl
- ifdef(`CSNET_RELAY',
- `# CSNET relay host
- DC`'CSNET_RELAY
- CPCSNET
-
- ')dnl
ifdef(`FAX_RELAY',
`# FAX relay host
DF`'FAX_RELAY
--- 93,98 ----
***************
*** 185,191 ****
# substitution for space (blank) characters
OB`'confBLANK_SUB
! # connect to "expensive" mailers on initial submission?
Oc`'confCON_EXPENSIVE
# checkpoint queue runs after every N successful deliveries
--- 179,185 ----
# substitution for space (blank) characters
OB`'confBLANK_SUB
! # avoid connecting to "expensive" mailers on initial submission?
Oc`'confCON_EXPENSIVE
# checkpoint queue runs after every N successful deliveries
***************
*** 420,425 ****
--- 414,422 ----
R$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze right
R$+ < @ $+ > $@ $>_SET_96_ $1 < @ $2 > already canonical
+ # do some sanity checking
+ R$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in addrs
+
ifdef(`_NO_UUCP_', `dnl',
`# convert old-style addresses to a domain-based address
R$- ! $+ $@ $>_SET_96_ $2 < @ $1 .UUCP > resolve uucp names
***************
*** 458,488 ****
ifdef(`_NO_UUCP_', `dnl',
`ifdef(`UUCP_RELAY',
`# pass UUCP addresses straight through
! R$* < @ $+ . UUCP > $* $@ $1 < @ $2 . UUCP > $3',
`# if really UUCP, handle it immediately
ifdef(`_CLASS_U_',
! `R$* < @ $=U . UUCP > $* $@ $1 < @ $2 . UUCP > $3', `dnl')
ifdef(`_CLASS_V_',
! `R$* < @ $=V . UUCP > $* $@ $1 < @ $2 . UUCP > $3', `dnl')
ifdef(`_CLASS_W_',
! `R$* < @ $=W . UUCP > $* $@ $1 < @ $2 . UUCP > $3', `dnl')
ifdef(`_CLASS_X_',
! `R$* < @ $=X . UUCP > $* $@ $1 < @ $2 . UUCP > $3', `dnl')
ifdef(`_CLASS_Y_',
! `R$* < @ $=Y . UUCP > $* $@ $1 < @ $2 . UUCP > $3', `dnl')
# try UUCP traffic as a local address
! R$* < @ $+ . UUCP > $* $: $1 < @ $[ $2 $] . UUCP > $3
ifdef(`_OLD_SENDMAIL_',
! `R$* < @ $+ . $+ . UUCP > $* $@ $1 < @ $2 . $3 . > $4',
! `R$* < @ $+ . . UUCP > $* $@ $1 < @ $2 . > $3')')
')
! ifdef(`_NO_CANONIFY_',
! `# make sure local host names appear canonical
! R$* < @ $=w > $* $: $1 < @ $2 . > $3',
`# pass to name server to make hostname canonical
R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4')
undivert(8)dnl
# if this is the local hostname, make sure we treat is as canonical
--- 455,488 ----
ifdef(`_NO_UUCP_', `dnl',
`ifdef(`UUCP_RELAY',
`# pass UUCP addresses straight through
! R$* < @ $+ . UUCP > $* $@ $1 < @ $2 . UUCP . > $3',
`# if really UUCP, handle it immediately
ifdef(`_CLASS_U_',
! `R$* < @ $=U . UUCP > $* $@ $1 < @ $2 . UUCP . > $3', `dnl')
ifdef(`_CLASS_V_',
! `R$* < @ $=V . UUCP > $* $@ $1 < @ $2 . UUCP . > $3', `dnl')
ifdef(`_CLASS_W_',
! `R$* < @ $=W . UUCP > $* $@ $1 < @ $2 . UUCP . > $3', `dnl')
ifdef(`_CLASS_X_',
! `R$* < @ $=X . UUCP > $* $@ $1 < @ $2 . UUCP . > $3', `dnl')
ifdef(`_CLASS_Y_',
! `R$* < @ $=Y . UUCP > $* $@ $1 < @ $2 . UUCP . > $3', `dnl')
# try UUCP traffic as a local address
! R$* < @ $+ . UUCP > $* $: $1 < @ $[ $2 $] . UUCP . > $3
ifdef(`_OLD_SENDMAIL_',
! `R$* < @ $+ . $+ . UUCP . > $* $@ $1 < @ $2 . $3 . > $4',
! `R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3')')
')
! ifdef(`_NO_CANONIFY_', `dnl',
`# pass to name server to make hostname canonical
R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4')
+ # local host aliases and pseudo-domains are always canonical
+ R$* < @ $=w > $* $: $1 < @ $2 . > $3
+ R$* < @ $* $=P > $* $: $1 < @ $2 $3 . > $4
+ R$* < @ $* . . > $* $1 < @ $2 . > $3
+
undivert(8)dnl
# if this is the local hostname, make sure we treat is as canonical
***************
*** 534,539 ****
--- 534,540 ----
R<@> $#_LOCAL_ $: <> special case error msgs
R$*:;<@> $#error $@ USAGE $: "list:; syntax illegal for recipient addresses"
+ R<@ $+> $#error $@ USAGE $: "user address required"
ifdef(`_MAILER_smtp_',
`# handle numeric address spec
***************
*** 540,546 ****
ifdef(`_NO_CANONIFY_', `dnl',
`R$* < @ [ $+ ] > $* $: $1 < @ $[ [$2] $] > $3 numeric internet addr')
R$* < @ [ $+ ] > $* $: $>_SET_98_ $1 < @ [ $2 ] > $3 numeric internet spec
! R$* < @ [ $+ ] > $* $#_SMTP_ $@ [$2] $: $1 @ [$2] $3 still numeric: send',
`dnl')
# now delete the local info -- note $=O to find characters that cause forwarding
--- 541,547 ----
ifdef(`_NO_CANONIFY_', `dnl',
`R$* < @ [ $+ ] > $* $: $1 < @ $[ [$2] $] > $3 numeric internet addr')
R$* < @ [ $+ ] > $* $: $>_SET_98_ $1 < @ [ $2 ] > $3 numeric internet spec
! R$* < @ [ $+ ] > $* $#_SMTP_ $@ [$2] $: $1 < @ [$2] > $3 still numeric: send',
`dnl')
# now delete the local info -- note $=O to find characters that cause forwarding
***************
*** 564,570 ****
ifdef(`_LOCAL_NOT_STICKY_',
`R$=L < @ $=w . > $#_LOCAL_ $: @ $1 special local names
R$+ < @ $=w . > $#_LOCAL_ $: $1 dispose directly',
! `R$+ < @ $=w . > $: $1 < @ $2 @ $H > first try hub
ifdef(`_OLD_SENDMAIL_',
`R$+ < $+ @ $-:$+ > $# $3 $@ $4 $: $1 < $2 > yep ....
R$+ < $+ @ $+ > $#relay $@ $3 $: $1 < $2 > yep ....
--- 565,571 ----
ifdef(`_LOCAL_NOT_STICKY_',
`R$=L < @ $=w . > $#_LOCAL_ $: @ $1 special local names
R$+ < @ $=w . > $#_LOCAL_ $: $1 dispose directly',
! `R$+ < @ $=w . > $: $1 < @ $2 . @ $H > first try hub
ifdef(`_OLD_SENDMAIL_',
`R$+ < $+ @ $-:$+ > $# $3 $@ $4 $: $1 < $2 > yep ....
R$+ < $+ @ $+ > $#relay $@ $3 $: $1 < $2 > yep ....
***************
*** 576,614 ****
ifdef(`_NO_UUCP_', `dnl',
`# resolve remotely connected UUCP links (if any)
ifdef(`_CLASS_V_',
! `R$* < @ $=V . UUCP > $* $: $>_SET_95_ < $V > $1 <@$2.UUCP> $3',
`dnl')
ifdef(`_CLASS_W_',
! `R$* < @ $=W . UUCP > $* $: $>_SET_95_ < $W > $1 <@$2.UUCP> $3',
`dnl')
ifdef(`_CLASS_X_',
! `R$* < @ $=X . UUCP > $* $: $>_SET_95_ < $X > $1 <@$2.UUCP> $3',
`dnl')')
# resolve fake top level domains by forwarding to other hosts
ifdef(`BITNET_RELAY',
! `R$*<@$+.BITNET>$* $: $>_SET_95_ < $B > $1 <@$2.BITNET> $3 user@host.BITNET',
`dnl')
! ifdef(`CSNET_RELAY',
! `R$*<@$+.CSNET>$* $: $>_SET_95_ < $C > $1 <@$2.CSNET> $3 user@host.CSNET',
`dnl')
ifdef(`_MAILER_fax_',
! `R$+ < @ $+ .FAX > $#fax $@ $2 $: $1 user@host.FAX',
`ifdef(`FAX_RELAY',
! `R$*<@$+.FAX>$* $: $>_SET_95_ < $F > $1 <@$2.FAX> $3 user@host.FAX',
`dnl')')
ifdef(`UUCP_RELAY',
`# forward non-local UUCP traffic to our UUCP relay
! R$*<@$*.UUCP>$* $: $>_SET_95_ < $Y > $1 @ <$2.UUCP> $3 uucp mail',
`ifdef(`_MAILER_uucp_',
`# forward other UUCP traffic straight to UUCP
! R< @ $+ .UUCP > : $+ $#uucp $@ $1 $: $2 @host.UUCP:...
! R$+ < @ $+ .UUCP > $#uucp $@ $2 $: $1 user@host.UUCP',
`dnl')')
ifdef(`_MAILER_usenet_', `
# addresses sent to net.group.USENET will get forwarded to a newsgroup
! R$+ . USENET $#usenet $: $1',
`dnl')
ifdef(`_LOCAL_RULES_',
--- 577,614 ----
ifdef(`_NO_UUCP_', `dnl',
`# resolve remotely connected UUCP links (if any)
ifdef(`_CLASS_V_',
! `R$* < @ $=V . UUCP . > $* $: $>_SET_95_ < $V > $1 <@$2.UUCP.> $3',
`dnl')
ifdef(`_CLASS_W_',
! `R$* < @ $=W . UUCP . > $* $: $>_SET_95_ < $W > $1 <@$2.UUCP.> $3',
`dnl')
ifdef(`_CLASS_X_',
! `R$* < @ $=X . UUCP . > $* $: $>_SET_95_ < $X > $1 <@$2.UUCP.> $3',
`dnl')')
# resolve fake top level domains by forwarding to other hosts
ifdef(`BITNET_RELAY',
! `R$*<@$+.BITNET.>$* $: $>_SET_95_ < $B > $1 <@$2.BITNET.> $3 user@host.BITNET',
`dnl')
! ifdef(`_MAILER_pop_',
! `R$+ < @ POP. > $#pop $: $1 user@POP',
`dnl')
ifdef(`_MAILER_fax_',
! `R$+ < @ $+ .FAX. > $#fax $@ $2 $: $1 user@host.FAX',
`ifdef(`FAX_RELAY',
! `R$*<@$+.FAX.>$* $: $>_SET_95_ < $F > $1 <@$2.FAX.> $3 user@host.FAX',
`dnl')')
ifdef(`UUCP_RELAY',
`# forward non-local UUCP traffic to our UUCP relay
! R$*<@$*.UUCP.>$* $: $>_SET_95_ < $Y > $1 <@$2.UUCP.> $3 uucp mail',
`ifdef(`_MAILER_uucp_',
`# forward other UUCP traffic straight to UUCP
! R$* < @ $+ .UUCP. > $* $#uucp $@ $2 $: $1 < @ $2 .UUCP. > $3 user@host.UUCP',
`dnl')')
ifdef(`_MAILER_usenet_', `
# addresses sent to net.group.USENET will get forwarded to a newsgroup
! R$+ . USENET. $#usenet $: $1',
`dnl')
ifdef(`_LOCAL_RULES_',
*** cf/m4/version.m4.OLD Tue Nov 30 08:59:13 1993
--- cf/m4/version.m4 Thu Jan 13 06:42:08 1994
***************
*** 32,39 ****
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
! VERSIONID(`@(#)version.m4 8.6.1.4 (Berkeley) 10/31/93')
#
divert(0)
# Configuration version number
! DZ8.6.4
--- 32,39 ----
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
! VERSIONID(`@(#)version.m4 8.6.1.5 (Berkeley) 1/13/94')
#
divert(0)
# Configuration version number
! DZ8.6.5
*** cf/mailer/pop.m4.OLD Tue Dec 14 14:29:44 1993
--- cf/mailer/pop.m4 Wed Dec 15 06:36:42 1993
***************
*** 0 ****
--- 1,54 ----
+ PUSHDIVERT(-1)
+ #
+ # Copyright (c) 1983 Eric P. Allman
+ # Copyright (c) 1988, 1993
+ # The Regents of the University of California. All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met:
+ # 1. Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ # 2. Redistributions in binary form must reproduce the above copyright
+ # notice, this list of conditions and the following disclaimer in the
+ # documentation and/or other materials provided with the distribution.
+ # 3. All advertising materials mentioning features or use of this software
+ # must display the following acknowledgement:
+ # This product includes software developed by the University of
+ # California, Berkeley and its contributors.
+ # 4. Neither the name of the University nor the names of its contributors
+ # may be used to endorse or promote products derived from this software
+ # without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ #
+
+ ifdef(`POP_MAILER_PATH',, `define(`POP_MAILER_PATH', /usr/lib/mh/spop)')
+ ifdef(`POP_MAILER_FLAGS',, `define(`POP_MAILER_FLAGS', `eu')')
+ ifdef(`POP_MAILER_ARGS',, `define(`POP_MAILER_ARGS', `pop $u')')
+
+ POPDIVERT
+
+ LOCAL_CONFIG
+ # POP mailer is a pseudo-domain
+ CPPOP
+ POPDIVERT
+
+ ####################################
+ ### POP Mailer specification ###
+ ####################################
+
+ VERSIONID(`@(#)pop.m4 8.1 (Berkeley) 12/15/93')
+
+ Mpop, P=POP_MAILER_PATH, F=CONCAT(`lsDFM', POP_MAILER_FLAGS), S=10, R=20/40,
+ A=POP_MAILER_ARGS
*** cf/mailer/smtp.m4.OLD Wed Nov 10 07:02:30 1993
--- cf/mailer/smtp.m4 Mon Dec 27 14:49:22 1993
***************
*** 40,52 ****
### SMTP Mailer specification ###
#####################################
! VERSIONID(`@(#)smtp.m4 8.7 (Berkeley) 10/31/93')
Msmtp, P=[IPC], F=CONCAT(mDFMuX, SMTP_MAILER_FLAGS), S=11/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), E=\r\n,
ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
Mesmtp, P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), S=11/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), E=\r\n,
ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
! Mrelay, P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), S=11/31, R=51, E=\r\n,
ifdef(`_OLD_SENDMAIL_',, `L=2040, ')A=IPC $h
#
--- 40,52 ----
### SMTP Mailer specification ###
#####################################
! VERSIONID(`@(#)smtp.m4 8.13 (Berkeley) 12/27/93')
Msmtp, P=[IPC], F=CONCAT(mDFMuX, SMTP_MAILER_FLAGS), S=11/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), E=\r\n,
ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
Mesmtp, P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), S=11/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), E=\r\n,
ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
! Mrelay, P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), S=11/31, R=61, E=\r\n,
ifdef(`_OLD_SENDMAIL_',, `L=2040, ')A=IPC $h
#
***************
*** 55,66 ****
S11
R$+ $: $>51 $1 sender/recipient common
R$* :; <@> $@ $1 :; list:; special case
- # handle unqualified names
- R$* < @ $* > $* $@ $1 < @ $2 > $3 already qualified
- R$* $@ $>61 $1
-
#
# header recipient rewriting if not masquerading recipients
#
--- 55,63 ----
S11
R$+ $: $>51 $1 sender/recipient common
R$* :; <@> $@ $1 :; list:; special case
+ R$* $@ $>61 $1 qualify unqual'ed names
#
# header recipient rewriting if not masquerading recipients
#
***************
*** 87,100 ****
R$=E < @ $=w . > $@ $1 < @ $2 > exposed user as is
R$* < @ $=w . > $: $1 < @ $M > masquerade as domain
R$* < @ > $: $1 < @ $j > in case $M undefined
- # handle unqualified names
- R$* < @ $* > $* $@ $1 < @ $2 > $3 already qualified
- R$* $@ $>61 $1
-
#
! # common rewriting for all SMTP addresses
#
S51
--- 84,94 ----
R$=E < @ $=w . > $@ $1 < @ $2 > exposed user as is
R$* < @ $=w . > $: $1 < @ $M > masquerade as domain
R$* < @ > $: $1 < @ $j > in case $M undefined
+ R$* $@ $>61 $1 qualify unqual'ed names
#
! # convert pseudo-domain addresses to real domain addresses
#
S51
***************
*** 103,124 ****
# output fake domains as user%fake@relay
ifdef(`BITNET_RELAY',
! `R$+ <@ $+ . BITNET > $: $1 % $2 .BITNET < @ $B > user@host.BITNET
R$+.BITNET <@ $+:$+ > $: $1 .BITNET < @ $3 > strip mailer: part',
`dnl')
! ifdef(`CSNET_RELAY',
! `R$+ <@ $+ . CSNET > $: $1 % $2 .CSNET < @ $C > user@host.CSNET
! R$+.CSNET <@ $+:$+ > $: $1 .CSNET < @ $3 > strip mailer: part',
! `dnl')
! ifdef(`_NO_UUCP_', `dnl',
! `R$+ <@ $+ . UUCP > $: $2 ! $1 < @ $j > user@host.UUCP')
#
# common sender and masquerading recipient rewriting
#
S61
R$=E $@ $1 < @ $j> show exposed names
R$+ $: $1 < @ $M > user w/o host
R$+ <@> $: $1 < @ $j > in case $M undefined
--- 97,125 ----
# output fake domains as user%fake@relay
ifdef(`BITNET_RELAY',
! `R$+ <@ $+ .BITNET. > $: $1 % $2 .BITNET < @ $B > user@host.BITNET
R$+.BITNET <@ $+:$+ > $: $1 .BITNET < @ $3 > strip mailer: part',
`dnl')
! ifdef(`_NO_UUCP_', `dnl', `
! # do UUCP heuristics; note that these are shared with UUCP mailers
! R$+ < @ $+ .UUCP. > $: < $2 ! > $1 convert to UUCP form
! R$+ < @ $* > $* $@ $1 < @ $2 > $3 not UUCP form
+ # leave these in .UUCP form to avoid further tampering
+ R< $&h ! > $- ! $+ $@ $2 < @ $1 .UUCP. >
+ R< $&h ! > $-.$+ ! $+ $@ $3 < @ $1.$2 >
+ R< $&h ! > $+ $@ $1 < @ $&h .UUCP. >
+ R< $+ ! > $+ $: $1 ! $2 < @ $Y >
+ R$+ < @ > $: $1 < @ $j > in case $Y undefined
+ R$+ < @ $+ : $+ > $: $1 < @ $3 > strip mailer: part')
+
#
# common sender and masquerading recipient rewriting
#
S61
+ R$* < @ $* > $* $@ $1 < @ $2 > $3 already qualified
R$=E $@ $1 < @ $j> show exposed names
R$+ $: $1 < @ $M > user w/o host
R$+ <@> $: $1 < @ $j > in case $M undefined
*** cf/mailer/uucp.m4.OLD Thu Nov 11 06:21:23 1993
--- cf/mailer/uucp.m4 Mon Jan 10 08:01:11 1994
***************
*** 42,60 ****
### UUCP Mailer specification ###
#####################################
! VERSIONID(`@(#)uucp.m4 8.6 (Berkeley) 10/31/93')
! # old UUCP mailer
Muucp, P=UUCP_MAILER_PATH, F=CONCAT(DFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
A=UUCP_MAILER_ARGS
! # smart UUCP mailer (handles multiple addresses)
Msuucp, P=UUCP_MAILER_PATH, F=CONCAT(mDFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
A=UUCP_MAILER_ARGS
ifdef(`_MAILER_smtp_',
`# domain-ized UUCP mailer
Muucp-dom, P=UUCP_MAILER_PATH, F=CONCAT(mDFMhu, UUCP_MAILER_FLAGS), S=52/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), M=UUCP_MAX_SIZE,
A=UUCP_MAILER_ARGS')
--- 42,73 ----
### UUCP Mailer specification ###
#####################################
! VERSIONID(`@(#)uucp.m4 8.13 (Berkeley) 1/10/94')
! #
! # There are innumerable variations on the UUCP mailer. It really
! # is rather absurd.
! #
!
! # old UUCP mailer (two names)
Muucp, P=UUCP_MAILER_PATH, F=CONCAT(DFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
A=UUCP_MAILER_ARGS
+ Muucp-old, P=UUCP_MAILER_PATH, F=CONCAT(DFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
+ A=UUCP_MAILER_ARGS
! # smart UUCP mailer (handles multiple addresses) (two names)
Msuucp, P=UUCP_MAILER_PATH, F=CONCAT(mDFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
A=UUCP_MAILER_ARGS
+ Muucp-new, P=UUCP_MAILER_PATH, F=CONCAT(mDFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
+ A=UUCP_MAILER_ARGS
ifdef(`_MAILER_smtp_',
`# domain-ized UUCP mailer
Muucp-dom, P=UUCP_MAILER_PATH, F=CONCAT(mDFMhu, UUCP_MAILER_FLAGS), S=52/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), M=UUCP_MAX_SIZE,
+ A=UUCP_MAILER_ARGS
+
+ # domain-ized UUCP mailer with UUCP-style sender envelope
+ Muucp-uudom, P=UUCP_MAILER_PATH, F=CONCAT(mDFMhu, UUCP_MAILER_FLAGS), S=72/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), M=UUCP_MAX_SIZE,
A=UUCP_MAILER_ARGS')
***************
*** 70,79 ****
R$* :; <@> $@ $1 :;
R$* < @ $* . > $1 < @ $2 > strip trailing dots
! R$* < @ $j > $1 strip local name
R$* < @ $- . UUCP > $2 ! $1 convert to UUCP format
R$* < @ $+ > $2 ! $1 convert to UUCP format
R$+ $: $U ! $1 prepend our name
#
# envelope and header recipient rewriting
--- 83,97 ----
R$* :; <@> $@ $1 :;
R$* < @ $* . > $1 < @ $2 > strip trailing dots
! R$* < @ $=w > $1 strip local name
! R<@ $- . UUCP > : $+ $1 ! $2 convert to UUCP format
! R<@ $+ > : $+ $1 ! $2 convert to UUCP format
R$* < @ $- . UUCP > $2 ! $1 convert to UUCP format
R$* < @ $+ > $2 ! $1 convert to UUCP format
+ R$&h ! $+ ! $+ $@ $1 ! $2 $h!...!user => ...!user
+ R$&h ! $+ $@ $&h ! $1 $h!user => $h!user
R$+ $: $U ! $1 prepend our name
+ R! $+ $: $k ! $1 in case $U undefined
#
# envelope and header recipient rewriting
***************
*** 81,95 ****
S22
# don't touch list:; syntax
! R$* :; <@> $@ $1 ;:
R$* < @ $* . > $1 < @ $2 > strip trailing dots
R$* < @ $j > $1 strip local name
R$* < @ $- . UUCP > $2 ! $1 convert to UUCP format
R$* < @ $+ > $2 ! $1 convert to UUCP format
! #
# envelope sender rewriting for uucp-dom mailer
#
S52
--- 99,120 ----
S22
# don't touch list:; syntax
! R$* :; <@> $@ $1 :;
R$* < @ $* . > $1 < @ $2 > strip trailing dots
R$* < @ $j > $1 strip local name
+ R<@ $- . UUCP > : $+ $1 ! $2 convert to UUCP format
+ R<@ $+ > : $+ $1 ! $2 convert to UUCP format
R$* < @ $- . UUCP > $2 ! $1 convert to UUCP format
R$* < @ $+ > $2 ! $1 convert to UUCP format
+ R$&h ! $+ ! $+ $@ $1 ! $2 $h!...!user => ...!user
+ R$&h ! $+ $@ $&h ! $1 $h!user => $h!user
+ R$+ $: $U ! $1 prepend our name
+ R! $+ $: $k ! $1 in case $U undefined
! ifdef(`_MAILER_smtp_',
! `#
# envelope sender rewriting for uucp-dom mailer
#
S52
***************
*** 100,112 ****
# pass everything to standard SMTP mailer rewriting
R$* $@ $>11 $1
PUSHDIVERT(4)
# resolve locally connected UUCP links
! R< @ $=Z . UUCP > : $+ $#uucp-dom $@ $1 $: $2 @host.UUCP: ...
! R$+ < @ $=Z . UUCP > $#uucp-dom $@ $2 $: $1 user@host.UUCP
! R< @ $=Y . UUCP > : $+ $#suucp $@ $1 $: $2 @host.UUCP: ...
! R$+ < @ $=Y . UUCP > $#suucp $@ $2 $: $1 user@host.UUCP
! R< @ $=U . UUCP > : $+ $#uucp $@ $1 $: $2 @host.UUCP: ...
! R$+ < @ $=U . UUCP > $#uucp $@ $2 $: $1 user@host.UUCP
POPDIVERT
--- 125,157 ----
# pass everything to standard SMTP mailer rewriting
R$* $@ $>11 $1
+ #
+ # envelope sender rewriting for uucp-uudom mailer
+ #
+ S72
+ # handle error address as a special case
+ R<@> $n errors to mailer-daemon
+
+ # do not qualify list:; syntax
+ R$* :; <@> $@ $1 :;
+
+ R$* < @ $* . > $1 < @ $2 > strip trailing dots
+ R$* < @ $=w > $1 strip local name
+ R<@ $- . UUCP > : $+ $1 ! $2 convert to UUCP format
+ R<@ $+ > : $+ $1 ! $2 convert to UUCP format
+ R$* < @ $- . UUCP > $2 ! $1 convert to UUCP format
+ R$* < @ $+ > $@ $2 ! $1 convert to UUCP format
+
+ R$&h ! $+ ! $+ $@ $1 ! $2 $h!...!user => ...!user
+ R$&h ! $+ $@ $&h ! $1 $h!user => $h!user
+ R$+ $: $M ! $1 prepend masquerade name
+ R! $+ $: $j ! $1 in case $M undefined')
+
+
PUSHDIVERT(4)
# resolve locally connected UUCP links
! R$* < @ $=Z . UUCP. > $* $#uucp-uudom $@ $1 $: $1 < @ $2 .UUCP. > $3 @host.UUCP: ...
! R$* < @ $=Y . UUCP. > $* $#uucp-new $@ $2 $: $1 < @ $2 .UUCP. > $3
! R$* < @ $=U . UUCP. > $* $#uucp-old $@ $2 $: $1 < @ $2 .UUCP. > $3
POPDIVERT
*** cf/ostype/bsdi1.0.m4.OLD Sat Dec 11 13:05:45 1993
--- cf/ostype/bsdi1.0.m4 Sat Dec 11 13:05:41 1993
***************
*** 0 ****
--- 1,38 ----
+ divert(-1)
+ #
+ # Copyright (c) 1983 Eric P. Allman
+ # Copyright (c) 1988, 1993
+ # The Regents of the University of California. All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met:
+ # 1. Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ # 2. Redistributions in binary form must reproduce the above copyright
+ # notice, this list of conditions and the following disclaimer in the
+ # documentation and/or other materials provided with the distribution.
+ # 3. All advertising materials mentioning features or use of this software
+ # must display the following acknowledgement:
+ # This product includes software developed by the University of
+ # California, Berkeley and its contributors.
+ # 4. Neither the name of the University nor the names of its contributors
+ # may be used to endorse or promote products derived from this software
+ # without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ #
+
+ divert(0)
+ VERSIONID(`@(#)bsdi1.0.m4 8.1 (Berkeley) 12/11/93')dnl
+ OSTYPE(bsd4.4)
*** cf/ostype/dgux.m4.OLD Sat Nov 27 09:28:04 1993
--- cf/ostype/dgux.m4 Sat Nov 27 09:25:45 1993
***************
*** 0 ****
--- 1,39 ----
+ divert(-1)
+ #
+ # Copyright (c) 1983 Eric P. Allman
+ # Copyright (c) 1988, 1993
+ # The Regents of the University of California. All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met:
+ # 1. Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ # 2. Redistributions in binary form must reproduce the above copyright
+ # notice, this list of conditions and the following disclaimer in the
+ # documentation and/or other materials provided with the distribution.
+ # 3. All advertising materials mentioning features or use of this software
+ # must display the following acknowledgement:
+ # This product includes software developed by the University of
+ # California, Berkeley and its contributors.
+ # 4. Neither the name of the University nor the names of its contributors
+ # may be used to endorse or promote products derived from this software
+ # without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ #
+
+ divert(0)
+ VERSIONID(`@(#)dgux.m4 8.1 (Berkeley) 11/27/93')
+ define(`LOCAL_MAILER_FLAGS', m)dnl
+ define(`confTIME_ZONE', `USE_TZ')dnl
*** cf/ostype/dynix3.2.m4.OLD Sat Nov 27 14:28:30 1993
--- cf/ostype/dynix3.2.m4 Sat Nov 27 14:28:24 1993
***************
*** 0 ****
--- 1,39 ----
+ divert(-1)
+ #
+ # Copyright (c) 1983 Eric P. Allman
+ # Copyright (c) 1988, 1993
+ # The Regents of the University of California. All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met:
+ # 1. Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ # 2. Redistributions in binary form must reproduce the above copyright
+ # notice, this list of conditions and the following disclaimer in the
+ # documentation and/or other materials provided with the distribution.
+ # 3. All advertising materials mentioning features or use of this software
+ # must display the following acknowledgement:
+ # This product includes software developed by the University of
+ # California, Berkeley and its contributors.
+ # 4. Neither the name of the University nor the names of its contributors
+ # may be used to endorse or promote products derived from this software
+ # without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ #
+
+ divert(0)
+ VERSIONID(`@(#)dynix3.2.m4 8.1 (Berkeley) 11/27/93')
+ define(`ALIAS_FILE', /usr/lib/aliases)dnl
+ define(`QUEUE_DIR', /usr/spool/mqueue)dnl
*** cf/ostype/hpux.m4.OLD Tue Aug 24 20:31:55 1993
--- cf/ostype/hpux.m4 Sun Jan 9 09:50:51 1994
***************
*** 34,43 ****
#
divert(0)
! VERSIONID(`@(#)hpux.m4 8.4 (Berkeley) 8/24/93')
define(`QUEUE_DIR', /usr/spool/mqueue)dnl
define(`ALIAS_FILE', /usr/lib/aliases)dnl
define(`STATUS_FILE', /usr/lib/sendmail.st)dnl
define(`LOCAL_MAILER_FLAGS', `m')dnl
define(`confTIME_ZONE', `USE_TZ')dnl
--- 34,44 ----
#
divert(0)
! VERSIONID(`@(#)hpux.m4 8.5 (Berkeley) 1/9/94')
define(`QUEUE_DIR', /usr/spool/mqueue)dnl
define(`ALIAS_FILE', /usr/lib/aliases)dnl
define(`STATUS_FILE', /usr/lib/sendmail.st)dnl
define(`LOCAL_MAILER_FLAGS', `m')dnl
+ define(`UUCP_MAILER_ARGS', `uux - -r -a$f -gC $h!rmail ($u)')dnl
define(`confTIME_ZONE', `USE_TZ')dnl
*** cf/ostype/irix.m4.OLD Sat Nov 27 09:28:44 1993
--- cf/ostype/irix.m4 Sat Nov 27 09:29:26 1993
***************
*** 34,38 ****
#
divert(0)
! VERSIONID(`@(#)irix.m4 8.2 (Berkeley) 8/8/93')
define(`LOCAL_MAILER_FLAGS', Ehmu)dnl
--- 34,41 ----
#
divert(0)
! VERSIONID(`@(#)irix.m4 8.3 (Berkeley) 11/27/93')
define(`LOCAL_MAILER_FLAGS', Ehmu)dnl
+ define(`QUEUE_DIR', /usr/spool/mqueue)dnl
+ define(`ALIAS_FILE', /usr/lib/aliases)dnl
+ define(`STATUS_FILE', /usr/lib/sendmail.st)dnl
*** cf/ostype/nextstep.m4.OLD Wed Nov 10 17:07:58 1993
--- cf/ostype/nextstep.m4 Tue Nov 30 09:01:49 1993
***************
*** 34,42 ****
#
divert(0)
! VERSIONID(`@(#)nextstep.m4 8.3 (Berkeley) 8/13/93')
define(`ALIAS_FILE', /etc/sendmail/aliases)dnl
define(`HELP_FILE', /usr/lib/sendmail.hf)dnl
define(`STATUS_FILE', /etc/sendmail/sendmail.st)dnl
define(`UUCP_MAILER_PATH', /usr/bin/uux)dnl
define(`QUEUE_DIR', /usr/spool/mqueue)dnl
--- 34,44 ----
#
divert(0)
! VERSIONID(`@(#)nextstep.m4 8.4 (Berkeley) 11/30/93')
define(`ALIAS_FILE', /etc/sendmail/aliases)dnl
define(`HELP_FILE', /usr/lib/sendmail.hf)dnl
define(`STATUS_FILE', /etc/sendmail/sendmail.st)dnl
define(`UUCP_MAILER_PATH', /usr/bin/uux)dnl
define(`QUEUE_DIR', /usr/spool/mqueue)dnl
+ define(`LOCAL_MAILER_FLAGS', `rmnP')dnl
+ define(`LOCAL_SHELL_FLAGS', `euP')dnl
*** cf/ostype/riscos4.5.m4.OLD Wed Dec 1 07:54:37 1993
--- cf/ostype/riscos4.5.m4 Wed Dec 1 08:44:17 1993
***************
*** 34,37 ****
#
divert(0)
! VERSIONID(`@(#)riscos4.5.m4 8.1 (Berkeley) 6/7/93')
--- 34,42 ----
#
divert(0)
! VERSIONID(`@(#)riscos4.5.m4 8.2 (Berkeley) 12/1/93')
!
! define(`LOCAL_MAILER_ARGS', `rmail -d $u')dnl
! define(`ALIAS_FILE', `/usr/lib/aliases')dnl
! define(`QUEUE_DIR', `/usr/spool/mqueue')dnl
! define(`HELP_FILE', `/usr/lib/sendmail.hf')dnl
*** cf/ostype/sco3.2.m4.OLD Sat Nov 27 10:29:19 1993
--- cf/ostype/sco3.2.m4 Sat Nov 27 10:29:10 1993
***************
*** 0 ****
--- 1,45 ----
+ divert(-1)
+ #
+ # Copyright (c) 1983 Eric P. Allman
+ # Copyright (c) 1988, 1993
+ # The Regents of the University of California. All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met:
+ # 1. Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ # 2. Redistributions in binary form must reproduce the above copyright
+ # notice, this list of conditions and the following disclaimer in the
+ # documentation and/or other materials provided with the distribution.
+ # 3. All advertising materials mentioning features or use of this software
+ # must display the following acknowledgement:
+ # This product includes software developed by the University of
+ # California, Berkeley and its contributors.
+ # 4. Neither the name of the University nor the names of its contributors
+ # may be used to endorse or promote products derived from this software
+ # without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ #
+
+ divert(0)
+ VERSIONID(`@(#)sco32.m4 8.1 (Berkeley) 11/27/93')
+ define(`ALIAS_FILE', /usr/lib/mail/aliases)dnl
+ define(`QUEUE_DIR', /usr/spool/mqueue)dnl
+ define(`STATUS_FILE', /usr/lib/sendmail.st)dnl
+ define(`UUCP_MAILER_PATH', /usr/bin/uux)dnl
+ define(`LOCAL_MAILER_PATH', /usr/bin/lmail)dnl
+ define(`LOCAL_MAILER_FLAGS', PuhCE)dnl
+ define(`LOCAL_MAILER_ARGS', `lmail $u')dnl
+ define(`LOCAL_SHELL_FLAGS', Peu)dnl
*** doc/op/op.me.OLD Fri Nov 12 09:44:20 1993
--- doc/op/op.me Wed Jan 12 06:52:00 1994
***************
*** 30,36 ****
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
! .\" @(#)op.me 8.26 (Berkeley) 10/14/93
.\"
.\" eqn op.me | pic | troff -me
.eh 'SMM:08-%''Sendmail Installation and Operation Guide'
--- 30,36 ----
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
! .\" @(#)op.me 8.32 (Berkeley) 1/12/94
.\"
.\" eqn op.me | pic | troff -me
.eh 'SMM:08-%''Sendmail Installation and Operation Guide'
***************
*** 69,75 ****
Mammoth Project
eric@CS.Berkeley.EDU
.sp
! Version 8.26
.sp
For Sendmail Version 8.6
.)l
--- 69,75 ----
Mammoth Project
eric@CS.Berkeley.EDU
.sp
! Version 8.32
.sp
For Sendmail Version 8.6
.)l
***************
*** 185,191 ****
on 4.4BSD.
.pp
If you are loading this off the tape,
! continue with the next session.
If you have a running binary already on your system,
you should probably skip to section 1.2.
.sh 2 "Compiling Sendmail"
--- 185,191 ----
on 4.4BSD.
.pp
If you are loading this off the tape,
! continue with the next section.
If you have a running binary already on your system,
you should probably skip to section 1.2.
.sh 2 "Compiling Sendmail"
***************
*** 576,590 ****
of this document.
.sh 3 "/usr/\*(SB/newaliases"
.pp
! If you are running delivermail,
! it is critical that the
.i newaliases
! command be replaced.
! This can just be a link to
.i sendmail :
.(b
rm \-f /usr/\*(SB/newaliases
! ln /usr/\*(SD/sendmail /usr/\*(SB/newaliases
.)b
This can be installed in whatever search path you prefer
for your system.
--- 576,588 ----
of this document.
.sh 3 "/usr/\*(SB/newaliases"
.pp
! The
.i newaliases
! command should just be a link to
.i sendmail :
.(b
rm \-f /usr/\*(SB/newaliases
! ln \-s /usr/\*(SD/sendmail /usr/\*(SB/newaliases
.)b
This can be installed in whatever search path you prefer
for your system.
***************
*** 808,813 ****
--- 806,816 ----
The system log is supported by the
.i syslogd \|(8)
program.
+ All messages from
+ .i sendmail
+ are logged under the
+ .sm LOG_MAIL
+ facility.
.sh 3 "Format"
.pp
Each line in the system log
***************
*** 994,999 ****
--- 997,1012 ----
.q mail.aliases
in
.q my.nis.domain .
+ Warning: if you build your own
+ .sm NIS -based
+ alias files,
+ be sure to provide the
+ .b \-l
+ flag to
+ .i makedbm (8)
+ to map upper case letters in the keys to lower case;
+ otherwise, aliases with upper case letters in their names
+ won't match incoming addresses.
.pp
Additional flags can be added after the colon
exactly like a
***************
*** 1074,1084 ****
.q a
option is required in the configuration
for this action to occur.
! This should normally be specified
! unless you are running
! .i delivermail
! in parallel with
! .i sendmail.
.)f
.sh 3 "List owners"
.pp
--- 1087,1093 ----
.q a
option is required in the configuration
for this action to occur.
! This should normally be specified.
.)f
.sh 3 "List owners"
.pp
***************
*** 1438,1443 ****
--- 1447,1464 ----
.i sendmail ,
including the incoming SMTP traffic,
will be logged in this file.
+ .sh 2 "Dumping State"
+ .pp
+ You can ask
+ .i sendmail
+ to log a dump of the open files
+ and the connection cache
+ by sending it a
+ .sm SIGUSR1
+ signal.
+ The results are logged at
+ .sm LOG_DEBUG
+ priority.
.sh 1 "TUNING"
.pp
There are a number of configuration parameters
***************
*** 2381,2387 ****
.b $)
syntax is a more general form of lookup;
it uses a named map instead of an implicit map.
! If no lookup is found, the indicted
.i default
is inserted;
if no default is specified and no lookup matches,
--- 2402,2408 ----
.b $)
syntax is a more general form of lookup;
it uses a named map instead of an implicit map.
! If no lookup is found, the indicated
.i default
is inserted;
if no default is specified and no lookup matches,
***************
*** 2444,2455 ****
may be a colon-separated list of hosts
that are searched in order for the first working address
(exactly like MX records).
.pp
A RHS may also be preceded by a
.b $@
or a
.b $:
! to control evaluation.
A
.b $@
prefix causes the ruleset to return with the remainder of the RHS
--- 2465,2485 ----
may be a colon-separated list of hosts
that are searched in order for the first working address
(exactly like MX records).
+ The
+ .i user
+ is later rewritten by the mailer-specific envelope rewriting set
+ and assigned to the
+ .b $u
+ macro.
.pp
+ Normally, a ruleset that matches is retried,
+ that is,
+ the ruleset loops until it fails.
A RHS may also be preceded by a
.b $@
or a
.b $:
! to change this behavior.
A
.b $@
prefix causes the ruleset to return with the remainder of the RHS
***************
*** 2794,2800 ****
Defaults to
.q MAILER-DAEMON .
.ip $o\(dg
! .b "The set of "operators" in addresses."
A list of characters
which will be considered tokens
and which will separate tokens
--- 2824,2830 ----
Defaults to
.q MAILER-DAEMON .
.ip $o\(dg
! .b "The set of \*(lqoperators\*(rq in addresses."
A list of characters
which will be considered tokens
and which will separate tokens
***************
*** 3109,3114 ****
--- 3139,3165 ----
is set to be the same as
.b $k ,
that is, the UUCP node name.
+ .pp
+ The class
+ .b $=m
+ is set to the set of domains by which this host is known,
+ initially just
+ .b $m .
+ .pp
+ .i Sendmail
+ can be compiled to allow a
+ .i scanf (3)
+ string on the
+ .b F
+ line.
+ This lets you do simplistic parsing of text files.
+ For example, to read all the user names in your system
+ .i /etc/passwd
+ file into a class, use
+ .(b
+ FL/etc/passwd %[^:]
+ .)b
+ which reads every line up to the first colon.
.sh 3 "M \*- define mailer"
.pp
Programs and interfaces to mailers
***************
*** 3698,3704 ****
.ip k\fIN\fP
The maximum number of open connections that will be cached at a time.
The default is one.
! This delays closing the the current connection until
either this invocation of
.i sendmail
needs to connect to another host
--- 3749,3755 ----
.ip k\fIN\fP
The maximum number of open connections that will be cached at a time.
The default is one.
! This delays closing the current connection until
either this invocation of
.i sendmail
needs to connect to another host
***************
*** 3794,3799 ****
--- 3845,3851 ----
restrictmailq Restrict mailq command
restrictqrun Restrict \-q command line flag
goaway Disallow essentially all SMTP status queries
+ authwarnings Put X-Authentication-Warning: headers in messages
.)b
The
.q goaway
***************
*** 3807,3812 ****
--- 3859,3867 ----
If queue runs are restricted,
only root and the owner of the queue directory
can run the queue.
+ Authentication Warnings add warnings about various conditions
+ that may indicate attempts to spoof the mail system,
+ such as using an non-standard queue directory.
.ip P\fIpostmaster\fP
If set,
copies of error messages will be sent to the named
***************
*** 3893,3899 ****
even if you are going to attempt immediate delivery.
.i Sendmail
always instantiates the queue file
! before returning control the the client
under any circumstances.
.ip S\fIfile\fP
Log statistics in the named
--- 3948,3954 ----
even if you are going to attempt immediate delivery.
.i Sendmail
always instantiates the queue file
! before returning control the client
under any circumstances.
.ip S\fIfile\fP
Log statistics in the named
***************
*** 4165,4170 ****
--- 4220,4240 ----
change the default definition of
.b $w
to be just the first component of the hostname.
+ .pp
+ The
+ .b V
+ line may have an optional
+ .b / \c
+ .i vendor
+ to indicate that this configuration file uses modifications
+ specific to a particular vendor\**.
+ .(f
+ \**And of course, vendors are encouraged to add themselves
+ to the list of recognized vendors by editing the routine
+ .i setvendor
+ in
+ .i conf.c .
+ .)f
.sh 3 "K \*- key file declaration"
.pp
Special maps can be defined using the line:
***************
*** 4265,4271 ****
and the third requires that
.i sendmail
be compiled with NIS support.
! All four accept as arguments the some optional flags
and a filename
(or a mapname for NIS;
the filename is the root of the database path,
--- 4335,4341 ----
and the third requires that
.i sendmail
be compiled with NIS support.
! All four accept as arguments the same optional flags
and a filename
(or a mapname for NIS;
the filename is the root of the database path,
***************
*** 4616,4622 ****
know exactly where each network connection is,
possibly including the names of each host on that network.
As long as the site remains small
! and the the configuration remains relatively static,
the update problem will probably not be too great.
.sh 4 "Single host"
.pp
--- 4686,4692 ----
know exactly where each network connection is,
possibly including the names of each host on that network.
As long as the site remains small
! and the configuration remains relatively static,
the update problem will probably not be too great.
.sh 4 "Single host"
.pp
***************
*** 4944,4951 ****
.i "if and only if"
the
.q C
! flag is defined in the mailer corresponding to
! .q eric@vangogh.CS.Berkeley.EDU.
.pp
Other flags are described
in Appendix C.
--- 5014,5023 ----
.i "if and only if"
the
.q C
! flag is defined in the mailer resolved to
! by running
! .q eric@vangogh.CS.Berkeley.EDU
! through rulesets 3 and 0.
.pp
Other flags are described
in Appendix C.
***************
*** 4998,5004 ****
may be used.
.pp
Finally,
! an argv template is given as the E field.
It may have embedded spaces.
If there is no argv with a
.b $u
--- 5070,5076 ----
may be used.
.pp
Finally,
! an argv template is given as the A field.
It may have embedded spaces.
If there is no argv with a
.b $u
***************
*** 5175,5181 ****
.q maildrop
is found for the user,
but no corresponding
! .q maildrop
record exists,
the record
.q :default:mailname
--- 5247,5253 ----
.q maildrop
is found for the user,
but no corresponding
! .q mailname
record exists,
the record
.q :default:mailname
***************
*** 5310,5316 ****
The load average type.
Details are described below.
.lp
! The are four built-in ways of computing the load average.
.i Sendmail
tries to auto-configure them based on imperfect guesses;
you can select one using the
--- 5382,5388 ----
The load average type.
Details are described below.
.lp
! The are several built-in ways of computing the load average.
.i Sendmail
tries to auto-configure them based on imperfect guesses;
you can select one using the
***************
*** 5332,5337 ****
--- 5404,5411 ----
.ip LA_FLOAT
The kernel stores the load average in the kernel as an array of
double precision floats.
+ .ip LA_MACH
+ Use MACH-style load averages.
.ip LA_SUBR
Call the
.i getloadavg
***************
*** 6009,6015 ****
However, for compatibility with RFC 822,
you can set option `7' to get seven bit stripping.
.pp
! Individual mailers can still produce seven bit out put using the
`7' mailer flag.
.sh 2 "User Database"
.pp
--- 6083,6089 ----
However, for compatibility with RFC 822,
you can set option `7' to get seven bit stripping.
.pp
! Individual mailers can still produce seven bit output using the
`7' mailer flag.
.sh 2 "User Database"
.pp
***************
*** 6517,6525 ****
This produces a lot of data very quickly and should be used sparingly.
.pp
There are a number of options that may be specified as
! primitive flags
! (provided for compatibility with
! .i delivermail ).
These are the e, i, m, and v options.
Also,
the f option
--- 6591,6597 ----
This produces a lot of data very quickly and should be used sparingly.
.pp
There are a number of options that may be specified as
! primitive flags.
These are the e, i, m, and v options.
Also,
the f option
***************
*** 6803,6809 ****
.\"Eric Allman
.\"Britton-Lee, Inc.
.\".sp
! .\"Version 8.26
.\".ce 0
.bp 2
.rs
--- 6875,6881 ----
.\"Eric Allman
.\"Britton-Lee, Inc.
.\".sp
! .\"Version 8.32
.\".ce 0
.bp 2
.rs
*** mailstats/mailstats.c.OLD Tue Jul 27 10:38:56 1993
--- mailstats/mailstats.c Mon Dec 27 17:07:17 1993
***************
*** 40,46 ****
#endif /* not lint */
#ifndef lint
! static char sccsid[] = "@(#)mailstats.c 8.2 (Berkeley) 7/27/93";
#endif /* not lint */
#include
--- 40,46 ----
#endif /* not lint */
#ifndef lint
! static char sccsid[] = "@(#)mailstats.c 8.3 (Berkeley) 12/27/93";
#endif /* not lint */
#include
***************
*** 63,68 ****
--- 63,69 ----
char *cfile;
FILE *cfp;
bool mnames;
+ long frmsgs = 0, frbytes = 0, tomsgs = 0, tobytes = 0;
char mtable[MAXMAILERS][MNAMELEN+1];
char sfilebuf[100];
char buf[MAXLINE];
***************
*** 195,201 ****
--- 196,209 ----
if (mnames)
printf(" %s", mtable[i]);
printf("\n");
+ frmsgs += stat.stat_nf[i];
+ frbytes += stat.stat_bf[i];
+ tomsgs += stat.stat_nt[i];
+ tobytes += stat.stat_bt[i];
}
}
+ printf("========================================\n");
+ printf(" T %6ld %10ldK %6ld %10ldK\n",
+ frmsgs, frbytes, tomsgs, tobytes);
exit(EX_OK);
}
*** makemap/Makefile.dist.OLD Wed Dec 1 09:17:58 1993
--- makemap/Makefile.dist Sat Nov 27 09:07:40 1993
***************
*** 0 ****
--- 1,81 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # @(#)Makefile.dist 8.2 (Berkeley) 11/27/93
+ #
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # location of sendmail source directory
+ SRCDIR= ../src
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # The really old (V7) DBM library is no longer supported.
+ #
+ DBMDEF= -DNDBM -DNEWDB
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF=
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=-I${SRCDIR} -I/usr/sww/include/db
+
+ # loader options
+ LDOPTS=
+
+ # library directories
+ LIBDIRS=-L/usr/sww/lib
+
+ # libraries required on your system
+ LIBS= -ldb -ldbm
+
+ # location of makemap binary (usually /usr/sbin or /usr/etc)
+ BINDIR= ${DESTDIR}/usr/sbin
+
+ # additional .o files needed
+ OBJADD=
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= makemap.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= bin
+ BINGRP= bin
+ BINMODE=555
+
+ ALL= makemap makemap.0
+
+ all: ${ALL}
+
+ makemap: ${BEFORE} ${OBJS}
+ ${CC} -o makemap ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
+
+ makemap.0: makemap.8
+ nroff -h -mandoc makemap.8 > makemap.0
+
+ install: install-makemap install-docs
+
+ install-makemap: makemap
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} makemap ${BINDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: makemap.0
+
+ clean:
+ rm -f ${OBJS} makemap makemap.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: ${SRCDIR}/conf.h
*** makemap/makemap.c.OLD Mon Nov 22 11:26:28 1993
--- makemap/makemap.c Mon Nov 22 11:44:10 1993
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)makemap.c 8.5 (Berkeley) 9/22/93";
#endif /* not lint */
#include
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)makemap.c 8.6 (Berkeley) 11/22/93";
#endif /* not lint */
#include
***************
*** 262,269 ****
*/
p = strchr(ibuf, '\n');
! if (*p != '\0')
*p = '\0';
if (ibuf[0] == '\0' || ibuf[0] == '#')
continue;
if (isspace(ibuf[0]))
--- 262,276 ----
*/
p = strchr(ibuf, '\n');
! if (p != NULL)
*p = '\0';
+ else if (!feof(stdin))
+ {
+ fprintf(stderr, "%s: %s: line %d: line too long (%d bytes max)\n",
+ progname, mapname, lineno, sizeof ibuf);
+ continue;
+ }
+
if (ibuf[0] == '\0' || ibuf[0] == '#')
continue;
if (isspace(ibuf[0]))
*** praliases/Makefile.dist.OLD Wed Dec 1 09:18:02 1993
--- praliases/Makefile.dist Sat Nov 27 09:07:26 1993
***************
*** 0 ****
--- 1,81 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # @(#)Makefile.dist 8.1 (Berkeley) 11/27/93
+ #
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # location of sendmail source directory
+ SRCDIR= ../src
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # The really old (V7) DBM library is no longer supported.
+ #
+ DBMDEF= -DNDBM -DNEWDB
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF=
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=-I${SRCDIR} -I/usr/sww/include/db
+
+ # loader options
+ LDOPTS=
+
+ # library directories
+ LIBDIRS=-L/usr/sww/lib
+
+ # libraries required on your system
+ LIBS= -ldb -ldbm
+
+ # location of praliases binary (usually /usr/sbin or /usr/etc)
+ BINDIR= ${DESTDIR}/usr/sbin
+
+ # additional .o files needed
+ OBJADD=
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= praliases.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= bin
+ BINGRP= bin
+ BINMODE=555
+
+ ALL= praliases praliases.0
+
+ all: ${ALL}
+
+ praliases: ${BEFORE} ${OBJS}
+ ${CC} -o praliases ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
+
+ praliases.0: praliases.8
+ nroff -h -mandoc praliases.8 > praliases.0
+
+ install: install-praliases install-docs
+
+ install-praliases: praliases
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} praliases ${BINDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: praliases.0
+
+ clean:
+ rm -f ${OBJS} praliases praliases.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: ${SRCDIR}/conf.h
*** src/Makefile.OLD Sun Aug 15 06:43:09 1993
--- src/Makefile Mon Dec 20 10:52:10 1993
***************
*** 1,4 ****
! # @(#)Makefile 8.2 (Berkeley) 8/15/93
PROG= sendmail
--- 1,4 ----
! # @(#)Makefile 8.3 (Berkeley) 12/20/93
PROG= sendmail
***************
*** 34,40 ****
beforeinstall:
# install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
# ${DESTDIR}/etc/sendmail.fc
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${DESTDIR}/var/log/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
${DESTDIR}/usr/share/misc
--- 34,40 ----
beforeinstall:
# install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
# ${DESTDIR}/etc/sendmail.fc
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${DESTDIR}/var/log/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
${DESTDIR}/usr/share/misc
*** src/Makefile.386BSD.OLD Sat Dec 18 11:20:32 1993
--- src/Makefile.386BSD Sat Dec 18 11:21:07 1993
***************
*** 34,40 ****
beforeinstall:
# install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
# ${DESTDIR}/etc/sendmail.fc
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${DESTDIR}/var/log/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
${DESTDIR}/usr/share/misc
--- 34,40 ----
beforeinstall:
# install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
# ${DESTDIR}/etc/sendmail.fc
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${DESTDIR}/var/log/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
${DESTDIR}/usr/share/misc
*** src/Makefile.AIX.OLD Wed Dec 1 19:08:02 1993
--- src/Makefile.AIX Mon Jan 3 07:06:46 1994
***************
*** 5,11 ****
# old make program (I recommend that you get and port the new make if you
# are going to be doing any signficant work on sendmail).
#
! # This has been tested on AIX 3.1.5.
#
# use O=-O (usual) or O=-g (debugging)
--- 5,11 ----
# old make program (I recommend that you get and port the new make if you
# are going to be doing any signficant work on sendmail).
#
! # This has been tested on AIX 3.1.5 and 3.2.3e.
#
# use O=-O (usual) or O=-g (debugging)
***************
*** 19,24 ****
--- 19,27 ----
# See READ_ME for a description of how these flags interact.
#
DBMDEF= -DNDBM -DNEWDB
+ #
+ # If you did not install the NEWDB on your AIX platform, use:
+ #DBMDEF=-DNDBM
# environment definitions (e.g., -D_AIX3)
ENVDEF= -D_AIX3
***************
*** 33,38 ****
--- 36,44 ----
# libraries required on your system
LIBS= -ldbm -ldb
+ #
+ # If you did not install the NEWDB on your AIX platform, use:
+ #LIBS= -ldbm
# location of sendmail binary (usually /usr/sbin or /usr/lib)
BINDIR= ${DESTDIR}/usr/sbin
***************
*** 41,51 ****
STDIR= ${DESTDIR}/var/log
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
! HFDIR= ${DESTDIR}/usr/share/misc
# additional .o files needed
OBJADD=
################### end of user configuration flags ######################
CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
--- 47,59 ----
STDIR= ${DESTDIR}/var/log
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
! HFDIR= ${DESTDIR}/usr/lib
# additional .o files needed
OBJADD=
+ INSTALL=/usr/ucb/install
+
################### end of user configuration flags ######################
CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
***************
*** 80,90 ****
install: install-sendmail install-docs
install-sendmail: sendmail
! install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
! install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
# doesn't actually install them -- you may want to install pre-nroff versions
install-docs: aliases.0 newaliases.0 sendmail.0
--- 88,98 ----
install: install-sendmail install-docs
install-sendmail: sendmail
! ${INSTALL} -O ${BINOWN} -G ${BINGRP} -M ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! ${INSTALL} -c -O ${BINOWN} -G ${BINGRP} -M 644 /dev/null \
${STDIR}/sendmail.st
! ${INSTALL} -c -O ${BINOWN} -G ${BINGRP} -M 444 sendmail.hf ${HFDIR}
# doesn't actually install them -- you may want to install pre-nroff versions
install-docs: aliases.0 newaliases.0 sendmail.0
*** src/Makefile.AUX.OLD Sat Dec 18 11:20:32 1993
--- src/Makefile.AUX Sat Dec 18 11:21:12 1993
***************
*** 85,91 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do ; rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 85,91 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do ; rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.BSD43.OLD Fri Nov 12 06:21:16 1993
--- src/Makefile.BSD43 Sat Dec 18 11:21:16 1993
***************
*** 33,39 ****
#LIBDIRS=-L/usr/sww/lib
# libraries required on your system
! LIBS= -ldbm -lresolv
# location of sendmail binary (usually /usr/sbin or /usr/lib)
BINDIR= ${DESTDIR}/usr/lib
--- 33,39 ----
#LIBDIRS=-L/usr/sww/lib
# libraries required on your system
! LIBS= -ldbm -lresolv -ll
# location of sendmail binary (usually /usr/sbin or /usr/lib)
BINDIR= ${DESTDIR}/usr/lib
***************
*** 48,54 ****
OBJADD=
# additional pseudo-sources needed
! BEFORE= unistd.h stddef.h stdlib.h
################### end of user configuration flags ######################
--- 48,54 ----
OBJADD=
# additional pseudo-sources needed
! BEFORE= unistd.h stddef.h stdlib.h dirent.h sys/time.h
################### end of user configuration flags ######################
***************
*** 72,80 ****
sendmail: ${BEFORE} ${OBJS}
${CC} -o sendmail ${OBJS} ${LIBDIRS} ${LIBS}
! unistd.h stddef.h stdlib.h:
cp /dev/null $@
aliases.0: aliases.5
nroff -h -mandoc aliases.5 > aliases.0
--- 72,89 ----
sendmail: ${BEFORE} ${OBJS}
${CC} -o sendmail ${OBJS} ${LIBDIRS} ${LIBS}
! unistd.h stddef.h stdlib.h sys/time.h:
cp /dev/null $@
+ sys/time.h: sys
+
+ sys:
+ mkdir sys
+
+ dirent.h:
+ echo "#include " > dirent.h
+ echo "#define dirent direct" >> dirent.h
+
aliases.0: aliases.5
nroff -h -mandoc aliases.5 > aliases.0
***************
*** 89,95 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 98,104 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.BSDI.OLD Sat Dec 18 11:20:32 1993
--- src/Makefile.BSDI Sat Dec 18 11:21:18 1993
***************
*** 82,88 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do (rm -f $$i; ln -s ${BINDIR}/sendmail $$i); done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 82,88 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do (rm -f $$i; ln -s ${BINDIR}/sendmail $$i); done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.ConvexOS.OLD Sat Dec 18 11:20:32 1993
--- src/Makefile.ConvexOS Sat Dec 18 11:21:21 1993
***************
*** 83,89 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 83,89 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.DGUX.OLD Sat Nov 27 09:28:17 1993
--- src/Makefile.DGUX Sat Dec 18 11:21:23 1993
***************
*** 0 ****
--- 1,94 ----
+ #
+ # Tested on DG/UX 5.4.2 by A. Bryan Curnutt .
+ #
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF= -DNDBM -DNIS
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF=-DDGUX
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=-I/usr/sww/include/db
+
+ # loader options
+ LDOPTS=
+
+ # library directories
+ LIBDIRS=-L/usr/sww/lib
+
+ # libraries required on your system
+ LIBS= -ldbm
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/bin
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/etc
+
+ # additional .o files needed
+ OBJADD=
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= bin
+ BINMODE=6555
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.Dell.OLD Sat Dec 18 05:08:30 1993
--- src/Makefile.Dell Wed Dec 22 04:39:02 1993
***************
*** 10,20 ****
# work on other SVR4 ports.
#
# use O=-O (usual) or O=-g (debugging)
! O= -O
CC= gcc
! DESTDIR=/usr/local/sendmail
# define the database mechanism used for alias lookups:
# -DNDBM -- use new DBM
--- 10,23 ----
# work on other SVR4 ports.
#
+ # make sure the shell constructs below use the right shell
+ SHELL= /bin/sh
+
# use O=-O (usual) or O=-g (debugging)
! O= -O2
CC= gcc
! #DESTDIR=/usr/local/sendmail
# define the database mechanism used for alias lookups:
# -DNDBM -- use new DBM
***************
*** 26,32 ****
DBMDEF= -DNEWDB -DNDBM
# environment definitions (e.g., -D_AIX3)
! ENVDEF= -DDELL_SVR4
# see also conf.h for additional compilation flags
--- 29,35 ----
DBMDEF= -DNEWDB -DNDBM
# environment definitions (e.g., -D_AIX3)
! ENVDEF= -D__svr4__
# see also conf.h for additional compilation flags
***************
*** 40,52 ****
LIBS= -ldb -ldbm -lresolv -lsocket -lnsl -lelf
# location of sendmail binary (usually /usr/sbin or /usr/lib)
! BINDIR= ${DESTDIR}/bin
# location of sendmail.st file (usually /var/log or /usr/lib)
! STDIR= ${DESTDIR}/etc
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
! HFDIR= ${DESTDIR}/etc
# additional .o files needed
OBJADD=
--- 43,55 ----
LIBS= -ldb -ldbm -lresolv -lsocket -lnsl -lelf
# location of sendmail binary (usually /usr/sbin or /usr/lib)
! BINDIR= ${DESTDIR}/usr/ucblib
# location of sendmail.st file (usually /var/log or /usr/lib)
! STDIR= ${DESTDIR}/usr/ucblib
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
! HFDIR= ${DESTDIR}/usr/ucblib
# additional .o files needed
OBJADD=
***************
*** 63,69 ****
LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
BINOWN= root
! BINGRP= sys
BINMODE=6555
INSTALL=/usr/ucb/install
--- 66,72 ----
LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
BINOWN= root
! BINGRP= mail
BINMODE=6555
INSTALL=/usr/ucb/install
***************
*** 88,94 ****
install-sendmail: sendmail
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 91,97 ----
install-sendmail: sendmail
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.Dynix.OLD Sat Nov 27 14:23:38 1993
--- src/Makefile.Dynix Sat Dec 18 11:21:27 1993
***************
*** 0 ****
--- 1,106 ----
+ #
+ # Tested on Dynix 3.2.0.
+ #
+ # From Jim Davis .
+ #
+ # ``There is no strtol in libc (well there is in the 'att universe'
+ # libc, but I couldn't figure out how to link that in), so I
+ # got the Chris Torek strtol.c from bsd-sources on uunet and
+ # compiled that. There is no native ndbm either; I couldn't
+ # get db 1.72 to pass it's regression test, so I used gdbm-1.7
+ # instead. I compiled it with gcc 1.40a. The -lseq is to pick
+ # up getopt.''
+ #
+
+ CC= gcc
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O -g
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF= -DNDBM
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF=
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=
+
+ # loader options
+ LDOPTS=
+
+ # library directories
+ LIBDIRS=
+
+ # libraries required on your system
+ LIBS= -lseq -lgdbm
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/usr/lib
+
+ # additional .o files needed
+ OBJADD=strtol.o
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= staff # no kmem group,
+ BINMODE=4555 # so not setgid
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.FreeBSD.OLD Wed Dec 1 09:21:27 1993
--- src/Makefile.FreeBSD Sat Dec 18 11:21:31 1993
***************
*** 0 ****
--- 1,49 ----
+ #
+ # Makefile for FreeBSD
+ #
+ # @(#)Makefile 8.2 (Berkeley) 8/15/93
+
+ PROG= sendmail
+
+ # define the database format to use for aliases et al. Can be -DNEWDB (for
+ # the new BSD database package -- this is preferred) or -DNDBM for the NDBM
+ # database package. The old putrescent V7 DBM package is no longer
+ # supported.
+ # You can define both NEWDB and NDBM during a transition period; old
+ # databases are read, but the new format will be used on any rebuilds. On
+ # really gnarly systems, you can set this to null; it will crawl like a high
+ # spiral snail, but it will work.
+ DBMDEF= -DNEWDB
+
+ # FreeBSD 1.0 RELEASE has uname(2) now. Use -DUSEUNAME in order to use it.
+ CFLAGS+=-I${.CURDIR} ${DBMDEF} -DMIME -DUSEUNAME
+
+ SRCS= alias.c arpadate.c clock.c collect.c conf.c convtime.c daemon.c \
+ deliver.c domain.c envelope.c err.c headers.c macro.c main.c map.c \
+ mci.c parseaddr.c queue.c readcf.c recipient.c savemail.c srvrsmtp.c \
+ stab.c stats.c sysexits.c trace.c udb.c usersmtp.c \
+ util.c version.c
+ DPADD=
+ LDADD= $(LIBUTIL)
+ #
+ # FreeBSD 1.0 RELEASE has GNU man and doesn't need preformatted man pages anymore
+ #
+ MAN1= newaliases.1
+ MAN5= aliases.5
+ MAN8= sendmail.8
+ LINKS= /usr/sbin/sendmail /usr/bin/newaliases \
+ /usr/sbin/sendmail /usr/bin/mailq
+ BINDIR= /usr/sbin
+ BINOWN= root
+ BINGRP= kmem
+ BINMODE=6555
+
+ beforeinstall:
+ # install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ # ${DESTDIR}/etc/sendmail.fc
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${DESTDIR}/var/log/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
+ ${DESTDIR}/usr/share/misc
+
+ .include
*** src/Makefile.HP-UX.OLD Sat Dec 18 11:20:33 1993
--- src/Makefile.HP-UX Tue Jan 4 08:00:44 1994
***************
*** 39,45 ****
BINDIR= ${DESTDIR}/usr/lib
# location of sendmail.st file (usually /var/log or /usr/lib)
! STDIR= ${DESTDIR}/var/log
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
HFDIR= ${DESTDIR}/usr/lib
--- 39,45 ----
BINDIR= ${DESTDIR}/usr/lib
# location of sendmail.st file (usually /var/log or /usr/lib)
! STDIR= ${DESTDIR}/usr/lib
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
HFDIR= ${DESTDIR}/usr/lib
***************
*** 58,66 ****
savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
! LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
BINOWN= root
! BINGRP= sys
BINMODE=6555
ALL= sendmail aliases.0 newaliases.0 sendmail.0
--- 58,66 ----
savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
! LINKS= ${DESTDIR}/usr/bin/newaliases ${DESTDIR}/usr/bin/mailq
BINOWN= root
! BINGRP= mail
BINMODE=6555
ALL= sendmail aliases.0 newaliases.0 sendmail.0
***************
*** 82,92 ****
install: install-sendmail install-docs
install-sendmail: sendmail
! install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
! ${STDIR}/sendmail.st
! install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
# doesn't actually install them -- you may want to install pre-nroff versions
install-docs: aliases.0 newaliases.0 sendmail.0
--- 82,91 ----
install: install-sendmail install-docs
install-sendmail: sendmail
! cpset sendmail ${BINDIR} ${BINMODE} ${BINOWN} ${BINGRP}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! cpset /dev/null ${STDIR}/sendmail.st 644 ${BINOWN} ${BINGRP}
! cpset sendmail.hf ${HFDIR} 444 ${BINOWN} ${BINGRP}
# doesn't actually install them -- you may want to install pre-nroff versions
install-docs: aliases.0 newaliases.0 sendmail.0
*** src/Makefile.IRIX.OLD Sat Dec 18 11:20:33 1993
--- src/Makefile.IRIX Sat Dec 18 11:21:35 1993
***************
*** 83,89 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 83,89 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.Linux.OLD Thu Dec 9 13:44:34 1993
--- src/Makefile.Linux Mon Dec 20 05:53:18 1993
***************
*** 21,27 ****
DBMDEF= -DNDBM
# environment definitions (e.g., -D_AIX3)
! ENVDEF= -D__USE_BSD -U__USE_POSIX2
# see also conf.h for additional compilation flags
--- 21,27 ----
DBMDEF= -DNDBM
# environment definitions (e.g., -D_AIX3)
! ENVDEF= -D__USE_BSD
# see also conf.h for additional compilation flags
***************
*** 47,53 ****
OBJADD=
# additional pseudo-sources needed
! BEFORE=
################### end of user configuration flags ######################
--- 47,53 ----
OBJADD=
# additional pseudo-sources needed
! BEFORE= features.h
################### end of user configuration flags ######################
***************
*** 59,65 ****
savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
! LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
BINOWN= root
BINGRP= kmem
BINMODE=6555
--- 59,65 ----
savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
! LINKS= ${DESTDIR}/usr/bin/newaliases ${DESTDIR}/usr/bin/mailq
BINOWN= root
BINGRP= kmem
BINMODE=6555
***************
*** 78,83 ****
--- 78,86 ----
echo "#include " > dirent.h
echo "#define dirent direct" >> dirent.h
+ features.h:
+ ln features.linux.h $@
+
NROFF= nroff
aliases.0: aliases.5
***************
*** 94,100 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 97,103 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.Mach386.OLD Wed Dec 1 09:21:19 1993
--- src/Makefile.Mach386 Sat Dec 18 11:21:41 1993
***************
*** 0 ****
--- 1,102 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # @(#)Makefile.dist 8.7 (Berkeley) 9/3/93
+ #
+
+ CC= gcc
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF= -DNDBM
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF=
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=
+
+ # loader options
+ LDOPTS=
+
+ # library directories
+ LIBDIRS=
+
+ # libraries required on your system
+ LIBS= -ldbm
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/usr/lib
+
+ # additional .o files needed
+ OBJADD=
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= kmem
+ BINMODE=6555
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.NeXT.OLD Sat Dec 18 11:20:33 1993
--- src/Makefile.NeXT Sun Dec 26 07:56:13 1993
***************
*** 21,27 ****
DBMDEF= -DNDBM
# environment definitions (e.g., -D_AIX3)
! ENVDEF= -DNeXT
# see also conf.h for additional compilation flags
--- 21,27 ----
DBMDEF= -DNDBM
# environment definitions (e.g., -D_AIX3)
! ENVDEF= -DNeXT -DNETINFO
# see also conf.h for additional compilation flags
***************
*** 92,98 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 92,98 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.NetBSD.OLD Fri Dec 10 06:25:31 1993
--- src/Makefile.NetBSD Mon Jan 10 07:29:03 1994
***************
*** 0 ****
--- 1,48 ----
+ #
+ # NetBSD Makefile
+ #
+
+ # @(#)Makefile 8.2 (Berkeley) 8/15/93
+
+ PROG= sendmail
+
+ # define the database format to use for aliases et al. Can be -DNEWDB (for
+ # the new BSD database package -- this is preferred) or -DNDBM for the NDBM
+ # database package. The old putrescent V7 DBM package is no longer
+ # supported.
+ # You can define both NEWDB and NDBM during a transition period; old
+ # databases are read, but the new format will be used on any rebuilds. On
+ # really gnarly systems, you can set this to null; it will crawl like a high
+ # spiral snail, but it will work.
+ DBMDEF= -DNEWDB -DNDBM
+
+ #nasty warning about gcc 2.4.x caused bugs
+ CFLAGS=-I${.CURDIR} ${DBMDEF} -DNETISO
+ #CFLAGS+=-I${.CURDIR} ${DBMDEF} -DNETISO
+
+ SRCS= alias.c arpadate.c clock.c collect.c conf.c convtime.c daemon.c \
+ deliver.c domain.c envelope.c err.c headers.c macro.c main.c map.c \
+ mci.c parseaddr.c queue.c readcf.c recipient.c savemail.c srvrsmtp.c \
+ stab.c stats.c sysexits.c trace.c udb.c usersmtp.c \
+ util.c version.c
+ DPADD= $(LIBUTIL)
+ LDADD= -lutil
+ MAN1= newaliases.0
+ MAN5= aliases.0
+ MAN8= sendmail.0
+ LINKS= /usr/sbin/sendmail /usr/bin/newaliases \
+ /usr/sbin/sendmail /usr/bin/mailq
+ BINDIR= /usr/sbin
+ BINOWN= root
+ BINGRP= kmem
+ BINMODE=6555
+
+ beforeinstall:
+ # install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ # ${DESTDIR}/etc/sendmail.fc
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${DESTDIR}/var/log/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
+ ${DESTDIR}/usr/share/misc
+
+ .include
*** src/Makefile.OSF1.OLD Sun Nov 7 10:38:01 1993
--- src/Makefile.OSF1 Sat Dec 18 11:22:23 1993
***************
*** 29,35 ****
INCDIRS=-I/usr/sww/include/db
# library directories
! LIBDIRS=-L/usr/sww/lib
# libraries required on your system
LIBS= -ldbm
--- 29,35 ----
INCDIRS=-I/usr/sww/include/db
# library directories
! LIBDIRS=-L/usr/sww/lib -L/usr/shlib -L/usr/lib
# libraries required on your system
LIBS= -ldbm
***************
*** 47,53 ****
OBJADD=
# additional link flags
! LDADD= -non_shared
################### end of user configuration flags ######################
--- 47,53 ----
OBJADD=
# additional link flags
! #LDADD= -non_shared
################### end of user configuration flags ######################
***************
*** 69,75 ****
all: ${ALL}
sendmail: ${BEFORE} ${OBJS}
! ${CC} -o sendmail ${LDFLAGS} ${OBJS} ${LIBDIRS} ${LIBS}
aliases.0: aliases.5
nroff -h -mandoc aliases.5 > aliases.0
--- 69,75 ----
all: ${ALL}
sendmail: ${BEFORE} ${OBJS}
! ${CC} -o sendmail ${LDADD} ${OBJS} ${LIBDIRS} ${LIBS}
aliases.0: aliases.5
nroff -h -mandoc aliases.5 > aliases.0
***************
*** 86,93 ****
installbsd -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
cp /dev/null ${STDIR}/sendmail.st
! chmod ${BINMOD} ${STDIR}/sendmail.st
! chown ${BINGRP}.${BINGRP} ${STDIR}/sendmail.st
installbsd -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
rm -f /usr/sbin/smtpd
--- 86,93 ----
installbsd -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
cp /dev/null ${STDIR}/sendmail.st
! chmod 644 ${STDIR}/sendmail.st
! chown ${BINOWN}.${BINGRP} ${STDIR}/sendmail.st
installbsd -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
rm -f /usr/sbin/smtpd
*** src/Makefile.RISCos.OLD Wed Dec 1 09:08:32 1993
--- src/Makefile.RISCos Sat Dec 18 11:22:27 1993
***************
*** 0 ****
--- 1,110 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # For Mips RISC/os 4.52.
+ #
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # be sure we are compiling in BSD mode
+ CC= cc -systype bsd43
+
+ # define the database mechanism used for alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF= -DNDBM
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF= -DRISCOS -Olimit 800
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ #INCDIRS=-I/usr/sww/include/db
+
+ # library directories
+ #LIBDIRS=-L/usr/sww/lib
+
+ # libraries required on your system
+ LIBS= -lmld
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/etc
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/usr/lib
+
+ # additional .o files needed
+ OBJADD=
+
+ # additional pseudo-sources needed
+ BEFORE= stdlib.h dirent.h
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= kmem
+ BINMODE=6555
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${OBJS} ${LIBDIRS} ${LIBS}
+
+ stdlib.h:
+ cp /dev/null $@
+
+ dirent.h:
+ echo "#include " > dirent.h
+ echo "#define dirent direct" >> dirent.h
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.SCO.OLD Sun Dec 12 20:33:12 1993
--- src/Makefile.SCO Sat Dec 18 11:22:31 1993
***************
*** 0 ****
--- 1,97 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # This has been tested on SCO.
+ #
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF=
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF= -D_SCO_unix_
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=
+
+ # library directories
+ LIBDIRS=
+
+ # libraries required on your system
+ LIBS= -lsocket
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/usr/lib
+
+ # additional .o files needed
+ OBJADD= fsync.o
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= kmem
+ BINMODE=6555
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${OBJS} ${LIBDIRS} ${LIBS}
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.SVR4.OLD Tue Dec 21 06:18:28 1993
--- src/Makefile.SVR4 Wed Dec 22 04:39:09 1993
***************
*** 0 ****
--- 1,106 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # Based on a Makefile for Dell SVR4 Issue 2.2 from Kimmo Suominen
+ # -- I haven't tested this myself. It may
+ # work on other SVR4 ports.
+ #
+
+ # make sure the shell constructs below use the right shell
+ SHELL= /bin/sh
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ CC= gcc
+ #DESTDIR=/usr/local/sendmail
+
+ # define the database mechanism used for alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF= -DNEWDB -DNDBM
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF= -D__svr4__
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=
+
+ # library directories
+ LIBDIRS=
+
+ # libraries required on your system
+ LIBS= -ldb -ldbm -lresolv -lsocket -lnsl -lelf
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/ucblib
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/usr/ucblib
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/usr/ucblib
+
+ # additional .o files needed
+ OBJADD=
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= mail
+ BINMODE=6555
+ INSTALL=/usr/ucb/install
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${OBJS} ${LIBDIRS} ${LIBS}
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.Solaris.OLD Sun Nov 14 07:47:59 1993
--- src/Makefile.Solaris Tue Dec 28 18:07:03 1993
***************
*** 9,17 ****
#
# use O=-O (usual) or O=-g (debugging)
! O= -O
! CC= gcc -V2.3.3
# define the database mechanism used for alias lookups:
# -DNDBM -- use new DBM
--- 9,18 ----
#
# use O=-O (usual) or O=-g (debugging)
! # warning: do not use -O with gcc
! O=
! CC= gcc
# define the database mechanism used for alias lookups:
# -DNDBM -- use new DBM
***************
*** 20,49 ****
# The really old (V7) DBM library is no longer supported.
# See READ_ME for a description of how these flags interact.
#
! DBMDEF= -DNDBM
# environment definitions (e.g., -D_AIX3)
ENVDEF= -DSOLARIS
# see also conf.h for additional compilation flags
# include directories
! INCDIRS=-I/usr/sww/include/db
# library directories
! LIBDIRS=-L/usr/sww/lib -L/usr/ucblib
# libraries required on your system
LIBS= -lresolv -lsocket -lnsl -lelf
# location of sendmail binary (usually /usr/sbin or /usr/lib)
! BINDIR= ${DESTDIR}/usr/sbin
# location of sendmail.st file (usually /var/log or /usr/lib)
STDIR= ${DESTDIR}/var/log
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
! HFDIR= ${DESTDIR}/usr/share/misc
# additional .o files needed
OBJADD=
--- 21,51 ----
# The really old (V7) DBM library is no longer supported.
# See READ_ME for a description of how these flags interact.
#
! DBMDEF= -DNDBM -DNIS
# environment definitions (e.g., -D_AIX3)
+ # include -DSOLARIS_2_3 for version 2.3 and higher
ENVDEF= -DSOLARIS
# see also conf.h for additional compilation flags
# include directories
! INCDIRS=-I/usr/sww/include/db -I.
# library directories
! LIBDIRS=-L/usr/sww/lib
# libraries required on your system
LIBS= -lresolv -lsocket -lnsl -lelf
# location of sendmail binary (usually /usr/sbin or /usr/lib)
! BINDIR= ${DESTDIR}/usr/lib
# location of sendmail.st file (usually /var/log or /usr/lib)
STDIR= ${DESTDIR}/var/log
# location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
! HFDIR= ${DESTDIR}/etc/mail
# additional .o files needed
OBJADD=
***************
*** 85,91 ****
install-sendmail: sendmail
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 87,93 ----
install-sendmail: sendmail
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.SunOS.OLD Sat Dec 18 11:20:33 1993
--- src/Makefile.SunOS Sat Dec 18 11:22:35 1993
***************
*** 89,95 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 89,95 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.Titan.OLD Wed Dec 1 09:18:46 1993
--- src/Makefile.Titan Sat Dec 18 11:22:38 1993
***************
*** 0 ****
--- 1,109 ----
+ #
+ # This Makefile is designed to work on the old "make" program. It does
+ # not use the obj subdirectory. It also does not install documentation
+ # automatically -- think of it as a quick start for sites that have the
+ # old make program (I recommend that you get and port the new make if you
+ # are going to be doing any signficant work on sendmail).
+ #
+ # @(#)Makefile.dist 8.7 (Berkeley) 9/3/93
+ #
+
+ # put the compiler in BSD mode
+ CC= cc -43
+
+ # use O=-O (usual) or O=-g (debugging)
+ O= -O
+
+ # define the database mechanisms available for map & alias lookups:
+ # -DNDBM -- use new DBM
+ # -DNEWDB -- use new Berkeley DB
+ # -DNIS -- include NIS support
+ # The really old (V7) DBM library is no longer supported.
+ # See READ_ME for a description of how these flags interact.
+ #
+ DBMDEF= -DNDBM
+
+ # environment definitions (e.g., -D_AIX3)
+ ENVDEF=
+
+ # see also conf.h for additional compilation flags
+
+ # include directories
+ INCDIRS=
+
+ # loader options
+ LDOPTS=
+
+ # library directories
+ LIBDIRS=
+
+ # libraries required on your system
+ LIBS= -ldbm
+
+ # location of sendmail binary (usually /usr/sbin or /usr/lib)
+ BINDIR= ${DESTDIR}/usr/lib
+
+ # location of sendmail.st file (usually /var/log or /usr/lib)
+ STDIR= ${DESTDIR}/var/log
+
+ # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
+ HFDIR= ${DESTDIR}/usr/share/misc
+
+ # additional .o files needed
+ OBJADD=
+
+ # additional pseudo-sources needed
+ BEFORE= stddef.h stdlib.h
+
+ ################### end of user configuration flags ######################
+
+ CFLAGS= -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
+
+ OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
+ deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
+ map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
+ savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
+ trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
+
+ LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
+ BINOWN= root
+ BINGRP= kmem
+ BINMODE=6555
+
+ ALL= sendmail aliases.0 newaliases.0 sendmail.0
+
+ all: ${ALL}
+
+ sendmail: ${BEFORE} ${OBJS}
+ ${CC} -o sendmail ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
+
+ stddef.h stdlib.h:
+ cp /dev/null $@
+
+ aliases.0: aliases.5
+ nroff -h -mandoc aliases.5 > aliases.0
+
+ newaliases.0: newaliases.1
+ nroff -h -mandoc newaliases.1 > newaliases.0
+
+ sendmail.0: sendmail.8
+ nroff -h -mandoc sendmail.8 > sendmail.0
+
+ install: install-sendmail install-docs
+
+ install-sendmail: sendmail
+ install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
+ for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+ install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
+ ${STDIR}/sendmail.st
+ install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
+
+ # doesn't actually install them -- you may want to install pre-nroff versions
+ install-docs: aliases.0 newaliases.0 sendmail.0
+
+ clean:
+ rm -f ${OBJS} sendmail aliases.0 newaliases.0 sendmail.0
+
+ # dependencies
+ # gross overkill, and yet still not quite enough....
+ ${OBJS}: sendmail.h conf.h
*** src/Makefile.ULTRIX.OLD Sat Dec 18 11:20:33 1993
--- src/Makefile.ULTRIX Sat Dec 18 11:22:41 1993
***************
*** 85,91 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 85,91 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.UMAX.OLD Sat Dec 18 11:20:34 1993
--- src/Makefile.UMAX Sat Dec 18 11:22:44 1993
***************
*** 92,98 ****
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
--- 92,98 ----
install-sendmail: sendmail
install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
*** src/Makefile.Utah.OLD Sat Dec 18 11:20:34 1993
--- src/Makefile.Utah Sat Dec 18 11:23:01 1993
***************
*** 31,39 ****
BINMODE=6555
beforeinstall:
! # install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
! # ${DESTDIR}/etc/sendmail.fc
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${DESTDIR}/var/log/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
${DESTDIR}/usr/share/misc
--- 31,37 ----
BINMODE=6555
beforeinstall:
! install -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${DESTDIR}/var/log/sendmail.st
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/sendmail.hf \
${DESTDIR}/usr/share/misc
*** src/Makefile.dist.OLD Wed Dec 1 19:09:34 1993
--- src/Makefile.dist Mon Dec 20 10:52:10 1993
***************
*** 5,11 ****
# old make program (I recommend that you get and port the new make if you
# are going to be doing any signficant work on sendmail).
#
! # @(#)Makefile.dist 8.7 (Berkeley) 9/3/93
#
# use O=-O (usual) or O=-g (debugging)
--- 5,11 ----
# old make program (I recommend that you get and port the new make if you
# are going to be doing any signficant work on sendmail).
#
! # @(#)Makefile.dist 8.9 (Berkeley) 12/20/93
#
# use O=-O (usual) or O=-g (debugging)
***************
*** 80,93 ****
sendmail.0: sendmail.8
nroff -h -mandoc sendmail.8 > sendmail.0
install: install-sendmail install-docs
install-sendmail: sendmail
! install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
${STDIR}/sendmail.st
! install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
# doesn't actually install them -- you may want to install pre-nroff versions
install-docs: aliases.0 newaliases.0 sendmail.0
--- 80,95 ----
sendmail.0: sendmail.8
nroff -h -mandoc sendmail.8 > sendmail.0
+ INSTALL=install
+
install: install-sendmail install-docs
install-sendmail: sendmail
! ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
! ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \
${STDIR}/sendmail.st
! ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
# doesn't actually install them -- you may want to install pre-nroff versions
install-docs: aliases.0 newaliases.0 sendmail.0
*** src/READ_ME.OLD Sun Nov 7 13:11:29 1993
--- src/READ_ME Wed Jan 12 06:00:15 1994
***************
*** 30,36 ****
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
! # @(#)READ_ME 8.31 (Berkeley) 10/31/93
#
This directory contains the source files for sendmail.
--- 30,36 ----
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
! # @(#)READ_ME 8.47 (Berkeley) 1/12/94
#
This directory contains the source files for sendmail.
***************
*** 39,49 ****
eqn ../doc/op.me | pic | ditroff -me
! The Makefile is for the new (4.4BSD) Berkeley make, available from
! ftp.uu.net in the directory /systems/unix/bsd-sources/usr.bin/make.
! (Paul Southworth published a description of porting
! this make in comp.unix.bsd.) This Makefile has assumptions about the
! 4.4 file system layout built in.
There is also a Makefile.dist which is much less clever, but works on
the old traditional make. You can use this using:
--- 39,48 ----
eqn ../doc/op.me | pic | ditroff -me
! The Makefile is for the new (4.4BSD) Berkeley make and uses syntax
! that is not recognized by older makes. It also has assumptions
! about the 4.4 file system layout built in. See below for details
! about other Makefiles.
There is also a Makefile.dist which is much less clever, but works on
the old traditional make. You can use this using:
***************
*** 50,75 ****
make -f Makefile.dist
! There are a bunch of other Makefiles for other systems -- these are
! the ones that I use, they have "Berkeley quirks" in them, and I don't
! guarantee that they will work unmodified in your environment. However,
! they are all designed for the old make and can be used to help you get
! started. They have names like "Makefile.HPUX". Many of them include
! -I/usr/sww/include/db and -L/usr/sww/lib -- this is Berkeley's
! location for the new database libraries, described below.
There is also a shell script (makesendmail) that tries to be clever
about using object subdirectories. It's pretty straightforward, and
may help if you share a source tree among different architectures.
! IMPORTANT: DO NOT USE OPTIMIZATION (``-O'') IF YOU ARE RUNNING GCC
! 2.4.x. THERE IS A BUG IN THE GCC OPTIMIZER THAT CAUSES SENDMAIL TO
! FAIL MISERABLY.
! IMPORTANT: Read the appropriate paragraphs in the section on
! ``Operating System and Compile Quirks''.
+----------------------+
| DATABASE DEFINITIONS |
+----------------------+
--- 49,126 ----
make -f Makefile.dist
! **************************************************
! ** Read below for more details of Makefiles. **
! **************************************************
There is also a shell script (makesendmail) that tries to be clever
about using object subdirectories. It's pretty straightforward, and
may help if you share a source tree among different architectures.
! **************************************************************************
! ** IMPORTANT: DO NOT USE OPTIMIZATION (``-O'') IF YOU ARE RUNNING **
! ** GCC 2.4.x or 2.5.x. THERE IS A BUG IN THE GCC OPTIMIZER THAT **
! ** CAUSES SENDMAIL COMPILES TO FAIL MISERABLY. **
! **************************************************************************
! Jim Wilson of Cygnus believes he has found the problem -- it will
! probably be fixed in GCC 2.5.6 -- but until this is verified, be
! very suspicious of gcc -O.
+ **************************************************************************
+ ** IMPORTANT: Read the appropriate paragraphs in the section on **
+ ** ``Operating System and Compile Quirks''. **
+ **************************************************************************
+
+ +-----------+
+ | MAKEFILES |
+ +-----------+
+
+ The "Makefile"s in these directories are from 4.4 BSD, and hence
+ really only work properly if you are on a 4.4 system. In particular,
+ they use new syntax that will not be recognized on old make programs,
+ and some of them do things like ``.include ../../Makefile.inc'' to
+ pick up some system defines. If you are getting sendmail separately,
+ these files won't be included in the distribution, as they are
+ outside of the sendmail tree.
+
+ Instead, you should use one of the other Makefiles, such as
+ Makefile.SunOS for a SunOS system, and so forth. These should
+ work with the version of make that is appropriate for that
+ system.
+
+ There are a bunch of other Makefiles for other systems with names
+ like Makefile.HPUX for an HP-UX system. They use the version of
+ make that is native for that system. These are the Makefiles that
+ I use, and they have "Berkeley quirks" in them. I can't guarantee
+ that they will work unmodified in your environment. Many of them
+ include -I/usr/sww/include/db and -L/usr/sww/lib -- this is Berkeley's
+ location (the ``Software Warehouse'') for the new database libraries,
+ described below. You don't have to remove these definitions if you
+ don't have these directories.
+
+ Please look for an appropriate Makefile before you start trying to
+ compile with Makefile or Makefile.dist.
+
+ If you want to port the new Berkeley make, you can get it from
+ ftp.uu.net in the directory /systems/unix/bsd-sources/usr.bin/make.
+ Diffs and instructions for building this version of make under
+ SunOS 4.1.x are available on ftp.css.itd.umich.edu in
+ /pub/systems/sun/Net2-make.sun4.diff.Z. Diffs and instructions
+ for building this version of make under IBM AIX 3.2.4 are available
+ on ftp.uni-stuttgart.de in /sw/src/patches/bsd-make-rus-patches.
+ Paul Southworth published a description of porting
+ this make in comp.unix.bsd.
+
+ The complete text of the Makefile.inc that is in the parent of the
+ sendmail directory is:
+
+ # @(#)Makefile.inc 8.1 (Berkeley) 6/6/93
+
+ BINDIR?= /usr/sbin
+
+
+----------------------+
| DATABASE DEFINITIONS |
+----------------------+
***************
*** 83,89 ****
longer supported), and NIS (Network Information Services). Used alone
these just include the support they indicate. [If you are using NEWDB,
get the latest version from FTP.CS.Berkeley.EDU in /ucb/4bsd. DO NOT
! use the version from the Net2 distribution!]
If NEWDB and NDBM are defined (but not NIS), then sendmail will read
NDBM format alias files, but the next time a newaliases is run the
--- 134,142 ----
longer supported), and NIS (Network Information Services). Used alone
these just include the support they indicate. [If you are using NEWDB,
get the latest version from FTP.CS.Berkeley.EDU in /ucb/4bsd. DO NOT
! use the version from the Net2 distribution! However, if you are on
! BSD/386 or 386BSD-based systems, use the one that already exists
! on your system. You may need to define OLD_NEWDB to do this.]
If NEWDB and NDBM are defined (but not NIS), then sendmail will read
NDBM format alias files, but the next time a newaliases is run the
***************
*** 119,124 ****
--- 172,179 ----
Makefile:
SOLARIS Define this if you are running Solaris 2.0 or higher.
+ SOLARIS_2_3 Define this if you are running Solaris 2.3 or higher.
+ SUNOS403 Define this if you are running SunOS 4.0.3.
NeXT Define this if you are on a NeXT box. (This one may
be pre-defined for you.) There are other hacks you
have to make -- see below.
***************
*** 125,130 ****
--- 180,186 ----
_AIX3 Define this if you are IBM AIX 3.x.
RISCOS Define this if you are running RISC/os from MIPS.
_SCO_unix_ Define this if you are on SCO UNIX.
+ _SCO_unix_4_2 Define this if you are on SCO Open Server 3.2v4.
If you are a system that sendmail has already been ported to, you
probably won't have to touch these. But if you are porting, you may
***************
*** 131,137 ****
have to tweak the following compilation flags in conf.h in order to
get it to compile and link properly:
! SYSTEM5 Adjust for System V.
SYS5SIGNALS Use System V signal semantics -- the signal handler
is automatically dropped when the signal is caught.
If this is not set, use POSIX/BSD semantics, where the
--- 187,193 ----
have to tweak the following compilation flags in conf.h in order to
get it to compile and link properly:
! SYSTEM5 Adjust for System V (not necessarily Release 4).
SYS5SIGNALS Use System V signal semantics -- the signal handler
is automatically dropped when the signal is caught.
If this is not set, use POSIX/BSD semantics, where the
***************
*** 166,177 ****
your system has setresuid(2), (for example, on HP-UX) in
which case you will also have to #define setreuid(r, e)
to be the appropriate call. Some systems (such as Solaris)
! have a compatibility routine that doesn't work properly.
The important thing is that you have a call that will set
! the effective uid independently of the real or saved uid.
! Setting this improves the security somewhat, since
! sendmail doesn't have to read .forward and :include: files
! as root.
GIDSET_T The type of entries in a gidset passed as the second
argument to getgroups(2). Historically this has been an
int, so this is the default, but some systems (such as
--- 222,261 ----
your system has setresuid(2), (for example, on HP-UX) in
which case you will also have to #define setreuid(r, e)
to be the appropriate call. Some systems (such as Solaris)
! have a compatibility routine that doesn't work properly,
! but may have "saved user ids" properly implemented so you
! can ``#define setreuid(r, e) seteuid(e)'' and have it work.
The important thing is that you have a call that will set
! the effective uid independently of the real or saved uid
! and be able to set the effective uid back again when done.
! There's a test program in ../test/t_setreuid.c that will
! try things on your system. Setting this improves the
! security, since sendmail doesn't have to read .forward
! and :include: files as root. There are certain attacks
! that may be unpreventable without this call.
! HASLSTAT Define this if you have symbolic links (and thus the
! lstat(2) system call). This improves security. Unlike
! most other options, this one is on by default, so you
! need to #undef it in conf.h if you don't have symbolic
! links (these days everyone does).
! NEEDGETOPT Define this if you need a reimplementation of getopt(3).
! On some systems, getopt does very odd things if called
! to scan the arguments twice. This flag will ask sendmail
! to compile in a local version of getopt that works
! properly.
! NEEDSTRTOL Define this if your standard C library does not define
! strtol(3). This will compile in a local version.
! NEEDVPRINTF Define this if your standard C library does not define
! vprintf(3). Note that the resulting fake implementation
! is not very elegant and may not even work on some
! architectures.
! HASGETUSERSHELL Define this to 1 if you have getusershell(3) in your
! standard C library. If this is not defined, or is defined
! to be 0, sendmail will scan the /etc/shells file (no
! NIS-style support, defaults to /bin/sh and /bin/csh if
! that file does not exist) to get a list of unrestricted
! user shells. This is used to determine whether users
! are allowed to forward their mail to a program or a file.
GIDSET_T The type of entries in a gidset passed as the second
argument to getgroups(2). Historically this has been an
int, so this is the default, but some systems (such as
***************
*** 206,211 ****
--- 290,306 ----
WAITUNION The wait(2) routine takes a "union wait" argument instead
of an integer argument. This is for compatibility with
old versions of BSD.
+ SCANF You can set this to extend the F command to accept a
+ scanf string -- this gives you a primitive parser for
+ class definitions -- BUT it can make you vulnerable to
+ core dumps if the target file is poorly formed.
+ SYSLOG_BUFSIZE You can define this to be the size of the buffer that
+ syslog accepts. If it is not defined, it assumes a
+ 1024-byte buffer. If the buffer is very small (under
+ 256 bytes) the log message format changes -- each
+ e-mail message will log many more messages, since it
+ will log each piece of information as a separate line
+ in syslog.
+-----------------------+
***************
*** 226,235 ****
Normally defined in the Makefile.
USERDB Include support for the User Information Database. Implied
by NEWDB in conf.h.
! IDENTPROTO Define this to get IDENT (RFC 1413) protocol support.
This is assumed unless you are running on Ultrix or
HP-UX, both of which have a problem in the UDP
! implementation.
MIME Include support for MIME-encapsulated error messages.
LOG Set this to get syslog(3) support. Defined by default
in conf.h. You want this if at all possible.
--- 321,331 ----
Normally defined in the Makefile.
USERDB Include support for the User Information Database. Implied
by NEWDB in conf.h.
! IDENTPROTO Define this as 1 to get IDENT (RFC 1413) protocol support.
This is assumed unless you are running on Ultrix or
HP-UX, both of which have a problem in the UDP
! implementation. You can define it to be 0 to explicitly
! turn off IDENT protocol support.
MIME Include support for MIME-encapsulated error messages.
LOG Set this to get syslog(3) support. Defined by default
in conf.h. You want this if at all possible.
***************
*** 256,265 ****
default in conf.h.
! +-------------------------------------+
| OPERATING SYSTEM AND COMPILE QUIRKS |
+-------------------------------------+
SunOS 4.x (Solaris 1.x)
You may have to use -lresolv on SunOS. However, beware that
this links in a new version of gethostbyname that does not
--- 352,420 ----
default in conf.h.
! +---------------------+
! | DNS/RESOLVER ISSUES |
! +---------------------+
!
! Many systems have old versions of the resolver library. At a minimum,
! you should be running BIND 4.8.3; older versions may compile, but they
! have known bugs that should give you pause.
!
! Common problems in old versions include "undefined" errors for
! dn_skipname.
!
! Some people have had a problem with BIND 4.9; it uses some routines
! that it expects to be externally defined such as strerror(). It may
! help to link with "-l44bsd" to solve this problem.
!
! !PLEASE! be sure to link with the same version of the resolver as
! the header files you used -- some people have used the 4.9 headers
! and linked with BIND 4.8 or vice versa, and it doesn't work.
! Unfortunately, it doesn't fail in an obvious way -- things just
! subtlely don't work.
!
!
! +-------------------------------------+
| OPERATING SYSTEM AND COMPILE QUIRKS |
+-------------------------------------+
+ GCC 2.5.x problems *** IMPORTANT ***
+ Date: Mon, 29 Nov 93 19:08:44 PST
+ From: wilson@cygnus.com (Jim Wilson)
+ Message-Id: <9311300308.AA04608@cygnus.com>
+ To: kenner@vlsi1.ultra.nyu.edu
+ Subject: [cattelan@thebarn.com: gcc 2.5.4-2.5.5 -O bug]
+ Cc: cattelan@thebarn.com, rms@gnu.ai.mit.edu, sendmail@cs.berkeley.edu
+
+ This fixes a problem that occurs when gcc 2.5.5 is used to compile
+ sendmail 8.6.4 with optimization on a sparc.
+
+ Mon Nov 29 19:00:14 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * reload.c (find_reloads_toplev): Replace obsolete reference to
+ BYTE_LOADS_*_EXTEND with LOAD_EXTEND_OP.
+
+ *** clean-ss-931128/reload.c Sun Nov 14 16:20:01 1993
+ --- ss-931128/reload.c Mon Nov 29 18:52:55 1993
+ *************** find_reloads_toplev (x, opnum, type, ind
+ *** 3888,3894 ****
+ force a reload in that case. So we should not do anything here. */
+
+ else if (regno >= FIRST_PSEUDO_REGISTER
+ ! #if defined(BYTE_LOADS_ZERO_EXTEND) || defined(BYTE_LOADS_SIGN_EXTEND)
+ && (GET_MODE_SIZE (GET_MODE (x))
+ <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
+ #endif
+ --- 3888,3894 ----
+ force a reload in that case. So we should not do anything here. */
+
+ else if (regno >= FIRST_PSEUDO_REGISTER
+ ! #ifdef LOAD_EXTEND_OP
+ && (GET_MODE_SIZE (GET_MODE (x))
+ <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
+ #endif
+
+
SunOS 4.x (Solaris 1.x)
You may have to use -lresolv on SunOS. However, beware that
this links in a new version of gethostbyname that does not
***************
*** 268,274 ****
Some people have reported problems with the SunOS version of
-lresolv and/or in.named, and suggest that you get a newer
version. The symptoms are delays when you connect to the
! SMTP server on a SunOS machine. There is a version of BIND
version 4.9 on gatekeeper.DEC.COM in pub/BSD/bind/4.9.
There is substantial disagreement about whether you can make
--- 423,430 ----
Some people have reported problems with the SunOS version of
-lresolv and/or in.named, and suggest that you get a newer
version. The symptoms are delays when you connect to the
! SMTP server on a SunOS machine or having your domain added to
! addresses inappropriately. There is a version of BIND
version 4.9 on gatekeeper.DEC.COM in pub/BSD/bind/4.9.
There is substantial disagreement about whether you can make
***************
*** 299,313 ****
The Solaris "syslog" function is apparently limited to something
about 90 characters because of a kernel limitation. If you have
! source code, you can probably up this number. Bill Wisner
! was able to get an unofficial, unsupported
! patch.
OSF/1
! If you are compiling on OSF/1 (DEC Alpha), you must use -lmld
! and -non_shared (otherwise it core dumps on startup). Also,
! the enclosed makefile removed /usr/sbin/smtpd; if you need it,
! just create the link to the sendmail binary.
NeXT
If you are compiling on NeXT, you will have to create an empty
--- 455,475 ----
The Solaris "syslog" function is apparently limited to something
about 90 characters because of a kernel limitation. If you have
! source code, you can probably up this number. The syslogd patch
! is included in kernel jumbo patch for Solaris 2.2 as of revision
! -39 or so. At least one person is running with patch 100999-45
! and their long lost sendmail logging is finally showing up. At
! least one other person is running with patch 101318 installed
! under Solaris 2.3 with success.
OSF/1
! If you are compiling on OSF/1 (DEC Alpha), you must use
! -L/usr/shlib (otherwise it core dumps on startup). You may also
! need -mld to get the nlist() function, although some versions
! apparently don't need this.
!
! Also, the enclosed makefile removed /usr/sbin/smtpd; if you need
! it, just create the link to the sendmail binary.
NeXT
If you are compiling on NeXT, you will have to create an empty
***************
*** 329,338 ****
You may have to use -DNeXT.
! BSDI (BSD/386)
! I have reports that the "m4" from BSDI won't handle the config
! files properly. I haven't had a chance to test this myself.
4.3BSD
If you are running a "virgin" version of 4.3BSD, you'll have
a very old resolver and be missing some header files. The
--- 491,522 ----
You may have to use -DNeXT.
! BSDI (BSD/386) 1.0, NetBSD 0.9, FreeBSD 1.0
! The "m4" from BSDI won't handle the config files properly.
! I haven't had a chance to test this myself.
+ The M4 shipped in FreeBSD and NetBSD 0.9 don't handle the config
+ files properly. One must use either GNU m4 1.1 or the PD-M4
+ recently posted in comp.os.386bsd.bugs (and maybe others).
+ NetBSD-current includes the PD-M4 (as stated in the NetBSD file
+ CHANGES).
+
+ FreeBSD 1.0 RELEASE has uname(2) now. Use -DUSEUNAME in order to
+ use it (look into Makefile.FreeBSD). NetBSD-current may have
+ it too but it has not been verified.
+
+ You cannot port the latest version of the Berkeley db library
+ and use it with sendmail without recompiling the world. This
+ is because C library routines use the older version which have
+ incompatible header files -- the result is that it can't read
+ other system files, such as /etc/passwd, unless you use the
+ new db format throughout your system. You should normally just
+ use the version of db supplied in your release. You may need
+ to use -DOLD_NEWDB to make this work -- this turns off some
+ new interface calls (for file locking) that are not in older
+ versions of db. You'll get compile errors if you need this
+ flag and don't have it set.
+
4.3BSD
If you are running a "virgin" version of 4.3BSD, you'll have
a very old resolver and be missing some header files. The
***************
*** 346,376 ****
copy ../contrib/oldbind.compat.c into src and add
oldbind.compat.o to OBJADD in the Makefile.
- Linux
- From: Karl London
- Subject: Little bit to add to a readme for Linux for 8.6
- Date: Fri, 10 Sep 1993 20:16:05 +0100 (BST)
-
- Below is a copy of a section of the /usr/include/unistd.h from
- linux libc-4.4.1 which needs changing because of a bug in the
- header files. Should be fixed for future releases..
-
- Karl
-
- The #if 0 and #endif are new!!
-
- -------
-
- If OPTS begins with `--', then non-option arguments
- are treated as arguments to the option '\0'.
- This behavior is specific to the GNU `getopt'. */
- #if 0
- extern int getopt __P ((int __argc, char *__const * __argv,
- __const char *__opts));
- #endif
- extern int opterr;
- extern int optind;
-
A/UX
Date: Tue, 12 Oct 1993 18:28:28 -0400 (EDT)
From: "Eric C. Hagberg"
--- 530,535 ----
***************
*** 401,406 ****
--- 560,623 ----
DG/UX -- the person who has this working, Douglas Anderson
, used procmail instead.
+ System V Release 4 Based Systems
+ There is a single Makefile that is intended for all SVR4-based
+ systems (called Makefile.SVR4). It defines __svr4__, which is
+ predefined by some compilers. If your compiler already defines
+ this compile variable, you can delete the definition from the
+ Makefile.
+
+ It's been tested on Dell Issue 2.2.
+
+ DELL SVR4
+ Date: Mon, 06 Dec 1993 10:42:29 EST
+ From: "Kimmo Suominen"
+ Message-ID: <2d0352f9.lento29@lento29.UUCP>
+ To: eric@cs.berkeley.edu
+ Cc: sendmail@cs.berkeley.edu
+ Subject: Notes for DELL SVR4
+
+ Eric,
+
+ Here are some notes for compiling Sendmail 8.6.4 on DELL SVR4. I ran
+ across these things when helping out some people who contacted me by
+ e-mail.
+
+ 1) Use gcc 2.4.5 (or later?). Dell distributes gcc 2.1 with their
+ Issue 2.2 Unix. It is too old, and gives you problems with
+ clock.c, because sigset_t won't get defined in .
+ This is due to a problematic protection rule in there, and is
+ fixed with gcc 2.4.5.
+
+ 2) If you don't use the new Berkeley DB (-DNEWDB), then you need
+ to add "-lc -lucb" to the libraries to link with. This is because
+ the -ldbm distributed by Dell needs the bcopy, bcmp and bzero
+ functions. It is important that you specify both libraries in
+ the given order to be sure you only get the BSTRING functions
+ from the UCB library (and not the signal routines etc.).
+
+ 3) Don't leave out "-lelf" even if compiling with "-lc -lucb".
+ The UCB library also has another copy of the nlist routines,
+ but we do want the ones from "-lelf".
+
+ If anyone needs a compiled gcc 2.4.5 and/or a ported DB library, they
+ can use anonymous ftp to fetch them from lut.fi in the /kim directory.
+ They are copies of what I use on grendel.lut.fi, and offering them
+ does not imply that I would also support them. I have sent the DB
+ port for SVR4 back to Keith Bostic for inclusion in the official
+ distribution, but I haven't heard anything from him as of today.
+
+ - gcc-2.4.5-svr4.tar.gz (gcc 2.4.5 and the corresponding libg++)
+ - db-1.72.tar.gz (with source, objects and a installed copy)
+
+ Cheers
+ + Kim
+ --
+ * Kimmo.Suominen@lut.fi * SysVr4 enthusiast at GRENDEL.LUT.FI *
+ * KIM@FINFILES.BITNET * Postmaster and Hostmaster at LUT.FI *
+ * + 358 200 865 718 * Unix area moderator at NIC.FUNET.FI *
+
+
Non-DNS based sites
This version of sendmail always tries to connect to the Domain
Name System (DNS) to resolve names, regardless of the setting
***************
*** 426,431 ****
--- 643,684 ----
by the double call. Use the version in conf.c instead.
+ +--------------+
+ | MANUAL PAGES |
+ +--------------+
+
+ The manual pages have been written against the -mandoc macros
+ instead of the -man macros. The latest version of groff has them
+ included. You can also get a copy from FTP.UU.NET in directory
+ /systems/unix/bsd-sources/share/tmac.
+
+
+ +-----------------+
+ | DEBUGGING HOOKS |
+ +-----------------+
+
+ As of 8.6.5, sendmail daemons will catch a SIGUSR1 signal and log
+ some debugging output (logged at LOG_DEBUG severity). The
+ information dumped is:
+
+ * The value of the $j macro.
+ * A warning if $j is not in the set $=w.
+ * A list of the open file descriptors.
+ * The contents of the connection cache.
+ * If ruleset 89 is defined, it is evaluated and the results printed.
+
+ This allows you to get information regarding the runtime state of the
+ daemon on the fly. This should not be done too frequently, since
+ the process of rewriting may lose memory which will not be recovered.
+ Also, ruleset 89 may call non-reentrant routines, so there is a small
+ non-zero probability that this will cause other problems. It is
+ really only for debugging serious problems.
+
+ A typical formulation of ruleset 89 would be:
+
+ R$* $@ $>0 some test address
+
+
+-----------------------------+
| DESCRIPTION OF SOURCE FILES |
+-----------------------------+
***************
*** 489,492 ****
Eric Allman
! (Version 8.31, last update 10/31/93 11:32:52)
--- 742,745 ----
Eric Allman
! (Version 8.47, last update 1/12/94 05:59:56)
*** src/alias.c.OLD Thu Nov 11 06:14:30 1993
--- src/alias.c Sat Dec 11 14:21:35 1993
***************
*** 36,42 ****
# include
#ifndef lint
! static char sccsid[] = "@(#)alias.c 8.19 (Berkeley) 10/31/93";
#endif /* not lint */
--- 36,42 ----
# include
#ifndef lint
! static char sccsid[] = "@(#)alias.c 8.21 (Berkeley) 12/11/93";
#endif /* not lint */
***************
*** 144,150 ****
owner = aliaslookup(obuf, e);
if (owner != NULL)
{
! if (strchr(owner, ',') != NULL)
owner = obuf;
a->q_owner = newstr(owner);
}
--- 144,150 ----
owner = aliaslookup(obuf, e);
if (owner != NULL)
{
! if (strpbrk(owner, ",:/|\"") != NULL)
owner = obuf;
a->q_owner = newstr(owner);
}
***************
*** 570,576 ****
}
if (parseaddr(line, &al, RF_COPYALL, ':', NULL, CurEnv) == NULL)
{
! syserr("554 %s... illegal alias name", al.q_paddr);
continue;
}
--- 570,576 ----
}
if (parseaddr(line, &al, RF_COPYALL, ':', NULL, CurEnv) == NULL)
{
! syserr("554 %.40s... illegal alias name", line);
continue;
}
*** src/cdefs.h.OLD Tue Jan 4 09:53:56 1994
--- src/cdefs.h Fri Jan 7 17:20:58 1994
***************
*** 2,7 ****
--- 2,10 ----
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
+ * This code is derived from software contributed to Berkeley by
+ * Berkeley Software Design, Inc.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
***************
*** 30,36 ****
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
! * @(#)cdefs.h 8.2 (Berkeley) 10/4/93
*/
#ifndef _CDEFS_H_
--- 33,39 ----
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
! * @(#)cdefs.h 8.5 (Berkeley) 1/4/94
*/
#ifndef _CDEFS_H_
***************
*** 56,64 ****
#define __CONCAT(x,y) x ## y
#define __STRING(x) #x
! #if !defined(__GNUC__) && !defined(__cplusplus)
! #define inline
! #endif
#else /* !(__STDC__ || __cplusplus) */
#define __P(protos) () /* traditional C preprocessor */
--- 59,74 ----
#define __CONCAT(x,y) x ## y
#define __STRING(x) #x
! #define __const const /* define reserved names to standard */
! #define __signed signed
! #define __volatile volatile
! #if defined(__cplusplus)
! #define __inline inline /* convert to C++ keyword */
! #else
! #ifndef __GNUC__
! #define __inline /* delete GCC keyword */
! #endif /* !__GNUC__ */
! #endif /* !__cplusplus */
#else /* !(__STDC__ || __cplusplus) */
#define __P(protos) () /* traditional C preprocessor */
***************
*** 65,98 ****
#define __CONCAT(x,y) x/**/y
#define __STRING(x) "x"
! #ifdef __GNUC__
! #define const __const /* GCC: ANSI C with -traditional */
! #define inline __inline
! #define signed __signed
! #define volatile __volatile
!
! #else /* !__GNUC__ */
#define const /* delete ANSI C keywords */
#define inline
#define signed
#define volatile
#endif /* !__GNUC__ */
#endif /* !(__STDC__ || __cplusplus) */
/*
! * GCC has extensions for declaring functions as `pure' (always returns
! * the same value given the same inputs, i.e., has no external state and
! * no side effects) and `dead' (nonreturning). These mainly affect
! * optimization and warnings. Unfortunately, GCC complains if these are
! * used under strict ANSI mode (`gcc -ansi -pedantic'), hence we need to
! * define them only if compiling without this.
*/
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
! #define __dead __volatile
! #define __pure __const
! #else
! #define __dead
! #define __pure
#endif
#endif /* !_CDEFS_H_ */
--- 75,122 ----
#define __CONCAT(x,y) x/**/y
#define __STRING(x) "x"
! #ifndef __GNUC__
! #define __const /* delete pseudo-ANSI C keywords */
! #define __inline
! #define __signed
! #define __volatile
! /*
! * In non-ANSI C environments, new programs will want ANSI-only C keywords
! * deleted from the program and old programs will want them left alone.
! * When using a compiler other than gcc, programs using the ANSI C keywords
! * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
! * When using "gcc -traditional", we assume that this is the intent; if
! * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
! */
! #ifndef NO_ANSI_KEYWORDS
#define const /* delete ANSI C keywords */
#define inline
#define signed
#define volatile
+ #endif
#endif /* !__GNUC__ */
#endif /* !(__STDC__ || __cplusplus) */
/*
! * GCC1 and some versions of GCC2 declare dead (non-returning) and
! * pure (no side effects) functions using "volatile" and "const";
! * unfortunately, these then cause warnings under "-ansi -pedantic".
! * GCC2 uses a new, peculiar __attribute__((attrs)) style. All of
! * these work for GNU C++ (modulo a slight glitch in the C++ grammar
! * in the distribution version of 2.5.5).
*/
+ #if !defined(__GNUC__) || __GNUC__ < 2 || __GNUC_MINOR__ < 5
+ #define __attribute__(x) /* delete __attribute__ if non-gcc or gcc1 */
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
! #define __dead __volatile
! #define __pure __const
! #endif
! #endif
!
! /* Delete pseudo-keywords wherever they are not available or needed. */
! #ifndef __dead
! #define __dead
! #define __pure
#endif
#endif /* !_CDEFS_H_ */
*** src/clock.c.OLD Sun Oct 24 13:47:32 1993
--- src/clock.c Wed Jan 12 06:00:02 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)clock.c 8.7 (Berkeley) 10/21/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)clock.c 8.8 (Berkeley) 1/12/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 60,66 ****
** none.
*/
! static void tick();
EVENT *
setevent(intvl, func, arg)
--- 60,66 ----
** none.
*/
! static void tick __P((int));
EVENT *
setevent(intvl, func, arg)
***************
*** 101,107 ****
printf("setevent: intvl=%ld, for=%ld, func=%x, arg=%d, ev=%x\n",
intvl, now + intvl, func, arg, ev);
! tick();
return (ev);
}
/*
--- 101,107 ----
printf("setevent: intvl=%ld, for=%ld, func=%x, arg=%d, ev=%x\n",
intvl, now + intvl, func, arg, ev);
! tick(0);
return (ev);
}
/*
***************
*** 143,149 ****
}
/* restore clocks and pick up anything spare */
! tick();
}
/*
** TICK -- take a clock tick
--- 143,149 ----
}
/* restore clocks and pick up anything spare */
! tick(0);
}
/*
** TICK -- take a clock tick
***************
*** 151,157 ****
** Called by the alarm clock. This routine runs events as needed.
**
** Parameters:
! ** none.
**
** Returns:
** none.
--- 151,157 ----
** Called by the alarm clock. This routine runs events as needed.
**
** Parameters:
! ** One that is ignored; for compatibility with signal handlers.
**
** Returns:
** none.
***************
*** 161,167 ****
*/
static void
! tick()
{
register time_t now;
register EVENT *ev;
--- 161,168 ----
*/
static void
! tick(arg)
! int arg;
{
register time_t now;
register EVENT *ev;
*** src/collect.c.OLD Wed Nov 17 16:29:54 1993
--- src/collect.c Sat Jan 8 17:29:31 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)collect.c 8.6 (Berkeley) 10/27/93";
#endif /* not lint */
# include
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)collect.c 8.8 (Berkeley) 1/8/94";
#endif /* not lint */
# include
***************
*** 160,166 ****
if (sfgets(freebuf, MAXLINE, InChannel,
TimeOuts.to_datablock,
"message header read") == NULL)
! goto readerr;
/* is this a continuation line? */
if (*freebuf != ' ' && *freebuf != '\t')
--- 160,169 ----
if (sfgets(freebuf, MAXLINE, InChannel,
TimeOuts.to_datablock,
"message header read") == NULL)
! {
! freebuf[0] = '\0';
! break;
! }
/* is this a continuation line? */
if (*freebuf != ' ' && *freebuf != '\t')
***************
*** 257,263 ****
break;
/* check for transparent dot */
! if (OpMode == MD_SMTP && bp[0] == '.' && bp[1] == '.')
bp++;
/*
--- 260,267 ----
break;
/* check for transparent dot */
! if ((OpMode == MD_SMTP || OpMode == MD_DAEMON) &&
! bp[0] == '.' && bp[1] == '.')
bp++;
/*
***************
*** 278,283 ****
--- 282,289 ----
if (feof(InChannel) || ferror(InChannel))
{
readerr:
+ if (tTd(30, 1))
+ printf("collect: read error\n");
inputerr = TRUE;
}
***************
*** 290,296 ****
}
/* An EOF when running SMTP is an error */
! if (inputerr && OpMode == MD_SMTP)
{
char *host;
char *problem;
--- 296,302 ----
}
/* An EOF when running SMTP is an error */
! if (inputerr && (OpMode == MD_SMTP || OpMode == MD_DAEMON))
{
char *host;
char *problem;
*** src/conf.c.OLD Sun Nov 7 14:05:27 1993
--- src/conf.c Tue Jan 11 07:04:01 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)conf.c 8.42 (Berkeley) 10/21/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)conf.c 8.62 (Berkeley) 1/9/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 40,45 ****
--- 40,46 ----
# include "pathnames.h"
# include
# include
+ # include
# include
/*
***************
*** 597,603 ****
# include
#endif
! init_md()
{
#ifdef _AUX_SOURCE
setcompat(getcompat() | COMPAT_BSDPROT);
--- 598,606 ----
# include
#endif
! init_md(argc, argv)
! int argc;
! char **argv;
{
#ifdef _AUX_SOURCE
setcompat(getcompat() | COMPAT_BSDPROT);
***************
*** 792,801 ****
#if LA_TYPE == LA_MACH
/*
! ** This has been tested on NeXT release 2.1.
*/
! #include
getla()
{
--- 795,808 ----
#if LA_TYPE == LA_MACH
/*
! ** This has been tested on NEXTSTEP release 2.1/3.X.
*/
! #if defined(NX_CURRENT_COMPILER_RELEASE) && NX_CURRENT_COMPILER_RELEASE > NX_COMPILER_RELEASE_3_0
! # include
! #else
! # include
! #endif
getla()
{
***************
*** 910,915 ****
--- 917,923 ----
# include
# ifdef __bsdi__
# undef PS_STRINGS /* BSDI 1.0 doesn't do PS_STRINGS as we expect */
+ # define PROCTITLEPAD '\0'
# endif
# ifdef PS_STRINGS
# define SETPROC_STATIC static
***************
*** 920,925 ****
--- 928,937 ----
# endif
#endif
+ #ifndef PROCTITLEPAD
+ # define PROCTITLEPAD ' '
+ #endif
+
/*VARARGS1*/
#ifdef __STDC__
setproctitle(char *fmt, ...)
***************
*** 969,975 ****
(void) strcpy(Argv[0], buf);
p = &Argv[0][i];
while (p < LastArgv)
! *p++ = ' ';
# endif
# endif
# endif /* SETPROCTITLE */
--- 981,987 ----
(void) strcpy(Argv[0], buf);
p = &Argv[0][i];
while (p < LastArgv)
! *p++ = PROCTITLEPAD;
# endif
# endif
# endif /* SETPROCTITLE */
***************
*** 1258,1266 ****
/*
* get option letter from argument vector
*/
! int opterr = 1, /* if error message should be printed */
! optind = 1, /* index into parent argv vector */
! optopt; /* character checked for validity */
char *optarg; /* argument associated with option */
#define BADCH (int)'?'
--- 1270,1282 ----
/*
* get option letter from argument vector
*/
! #ifdef _CONVEX_SOURCE
! extern int optind, opterr;
! #else
! int opterr = 1; /* if error message should be printed */
! int optind = 1; /* index into parent argv vector */
! #endif
! int optopt; /* character checked for validity */
char *optarg; /* argument associated with option */
#define BADCH (int)'?'
***************
*** 1269,1277 ****
fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
getopt(nargc,nargv,ostr)
! int nargc;
! char **nargv,
! *ostr;
{
static char *place = EMSG; /* option letter processing */
static char atend = 0;
--- 1285,1293 ----
fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
getopt(nargc,nargv,ostr)
! int nargc;
! char *const *nargv;
! const char *ostr;
{
static char *place = EMSG; /* option letter processing */
static char atend = 0;
***************
*** 1356,1361 ****
--- 1372,1468 ----
#endif
/*
+ ** USERSHELLOK -- tell if a user's shell is ok for unrestricted use
+ **
+ ** Parameters:
+ ** shell -- the user's shell from /etc/passwd
+ **
+ ** Returns:
+ ** TRUE -- if it is ok to use this for unrestricted access.
+ ** FALSE -- if the shell is restricted.
+ */
+
+ #if !HASGETUSERSHELL
+
+ # ifndef _PATH_SHELLS
+ # define _PATH_SHELLS "/etc/shells"
+ # endif
+
+ char *DefaultUserShells[] =
+ {
+ "/bin/sh",
+ "/usr/bin/sh",
+ "/bin/csh",
+ "/usr/bin/csh",
+ #ifdef __hpux
+ "/bin/rsh",
+ "/bin/ksh",
+ "/bin/rksh",
+ "/bin/pam",
+ "/usr/bin/keysh",
+ "/bin/posix/sh",
+ #endif
+ NULL
+ };
+
+ #endif
+
+ bool
+ usershellok(shell)
+ char *shell;
+ {
+ #if HASGETUSERSHELL
+ register char *p;
+ extern char *getusershell();
+
+ setusershell();
+ while ((p = getusershell()) != NULL)
+ if (strcmp(p, shell) == 0 || strcmp(p, "*") == 0)
+ break;
+ endusershell();
+ return p != NULL;
+ #else
+ register FILE *shellf;
+ char buf[MAXLINE];
+
+ shellf = fopen(_PATH_SHELLS, "r");
+ if (shellf == NULL)
+ {
+ /* no /etc/shells; see if it is one of the std shells */
+ char **d;
+
+ for (d = DefaultUserShells; *d != NULL; d++)
+ {
+ if (strcmp(shell, *d) == 0)
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ while (fgets(buf, sizeof buf, shellf) != NULL)
+ {
+ register char *p, *q;
+
+ p = buf;
+ while (*p != '\0' && *p != '#' && *p != '/')
+ p++;
+ if (*p == '#' || *p == '\0')
+ continue;
+ q = p;
+ while (*p != '\0' && *p != '#' && !isspace(*p))
+ p++;
+ *p = '\0';
+ if (strcmp(shell, q) == 0 || strcmp("*", q) == 0)
+ {
+ fclose(shellf);
+ return TRUE;
+ }
+ }
+ fclose(shellf);
+ return FALSE;
+ #endif
+ }
+ /*
** FREESPACE -- see how much free space is on the queue filesystem
**
** Only implemented if you have statfs.
***************
*** 1382,1391 ****
#endif
#ifdef HASSTATFS
! # if defined(IRIX) || defined(apollo) || defined(_SCO_unix_) || defined(UMAXV) || defined(DGUX)
# include
# else
! # if (defined(sun) && !defined(BSD)) || defined(__hpux) || defined(_CONVEX_SOURCE) || defined(NeXT) || defined(_AUX_SOURCE)
# include
# else
# include
--- 1489,1498 ----
#endif
#ifdef HASSTATFS
! # if defined(IRIX) || defined(apollo) || defined(_SCO_unix_) || defined(UMAXV) || defined(DGUX) || defined(_AIX3)
# include
# else
! # if (defined(sun) && !defined(BSD)) || defined(__hpux) || defined(_CONVEX_SOURCE) || defined(NeXT) || defined(_AUX_SOURCE) || defined(MACH386)
# include
# else
# include
***************
*** 1726,1731 ****
--- 1833,1848 ----
{
if (ConfFile != NULL)
return ConfFile;
+ #ifdef NETINFO
+ {
+ extern char *ni_propval();
+ char *cflocation;
+
+ cflocation = ni_propval("/locations/sendmail", "sendmail.cf");
+ if (cflocation != NULL)
+ return cflocation;
+ }
+ #endif
return _PATH_SENDMAILCF;
}
/*
***************
*** 1737,1742 ****
--- 1854,1865 ----
** Returns:
** TRUE -- if ok.
** FALSE -- if vendor code could not be processed.
+ **
+ ** Side Effects:
+ ** It is reasonable to set mode flags here to tweak
+ ** processing in other parts of the code if necessary.
+ ** For example, if you are a vendor that uses $%y to
+ ** indicate YP lookups, you could enable that here.
*/
bool
***************
*** 1743,1747 ****
setvendor(vendor)
char *vendor;
{
! return (strcasecmp(vendor, "Berkeley") == 0);
}
--- 1866,2115 ----
setvendor(vendor)
char *vendor;
{
! if (strcasecmp(vendor, "Berkeley") == 0)
! return TRUE;
!
! /* add vendor extensions here */
!
! return FALSE;
}
+ /*
+ ** STRTOL -- convert string to long integer
+ **
+ ** For systems that don't have it in the C library.
+ */
+
+ #ifdef NEEDSTRTOL
+
+ long
+ strtol(p, ep, b)
+ char *p;
+ char **ep;
+ int b;
+ {
+ long l = 0;
+ char c;
+ char maxd;
+ int neg = 1;
+
+ maxd = (b > 10) ? '9' : b + '0';
+
+ if (p && *p == '-') {
+ neg = -1;
+ p++;
+ }
+ while (p && (c = *p)) {
+ if (c >= '0' && c <= maxd) {
+ l = l*b + *p++ - '0';
+ continue;
+ }
+ if (c >= 'A' && c <= 'Z')
+ c -= 'A' + 'a';
+ c = c - 'a' + 10;
+ if (b > c) {
+ l = l*b + c;
+ p++;
+ continue;
+ }
+ break;
+ }
+ l *= neg;
+ if (ep)
+ *ep = p;
+ return l;
+ }
+
+ #endif
+ /*
+ ** SOLARIS_GETHOSTBY{NAME,ADDR} -- compatibility routines for gethostbyXXX
+ **
+ ** Solaris versions prior through 2.3 don't properly deliver a
+ ** canonical h_name field. This tries to work around it.
+ */
+
+ #ifdef SOLARIS
+
+ struct hostent *
+ solaris_gethostbyname(name)
+ const char *name;
+ {
+ # ifdef SOLARIS_2_3
+ static struct hostent hp;
+ static char buf[1000];
+ extern struct hostent *_switch_gethostbyname_r();
+
+ return _switch_gethostbyname_r(name, &hp, buf, sizeof(buf), &h_errno);
+ # else
+ extern struct hostent *__switch_gethostbyname();
+
+ return __switch_gethostbyname(name);
+ # endif
+ }
+
+ struct hostent *
+ solaris_gethostbyaddr(addr, len, type)
+ const char *addr;
+ int len;
+ int type;
+ {
+ # ifdef SOLARIS_2_3
+ static struct hostent hp;
+ static char buf[1000];
+ extern struct hostent *_switch_gethostbyaddr_r();
+
+ return _switch_gethostbyaddr_r(addr, len, type, &hp, buf, sizeof(buf), &h_errno);
+ # else
+ extern struct hostent *__switch_gethostbyaddr();
+
+ return __switch_gethostbyaddr(addr, len, type);
+ # endif
+ }
+
+ #endif
+ /*
+ ** NI_PROPVAL -- netinfo property value lookup routine
+ **
+ ** Parameters:
+ ** directory -- the Netinfo directory name.
+ ** propname -- the Netinfo property name.
+ **
+ ** Returns:
+ ** NULL -- if:
+ ** 1. the directory is not found
+ ** 2. the property name is not found
+ ** 3. the property contains multiple values
+ ** 4. some error occured
+ ** else -- the location of the config file.
+ **
+ ** Notes:
+ ** Caller should free the return value of ni_proval
+ */
+
+ #ifdef NETINFO
+
+ # include
+
+ # define LOCAL_NETINFO_DOMAIN "."
+ # define PARENT_NETINFO_DOMAIN ".."
+ # define MAX_NI_LEVELS 256
+
+ char *
+ ni_propval(directory, propname)
+ char *directory;
+ char *propname;
+ {
+ char *propval;
+ int i;
+ void *ni = NULL;
+ void *lastni = NULL;
+ ni_status nis;
+ ni_id nid;
+ ni_namelist ninl;
+
+ /*
+ ** If the passed directory and property name are found
+ ** in one of netinfo domains we need to search (starting
+ ** from the local domain moving all the way back to the
+ ** root domain) set propval to the property's value
+ ** and return it.
+ */
+
+ for (i = 0; i < MAX_NI_LEVELS; ++i)
+ {
+ if (i == 0)
+ {
+ nis = ni_open(NULL, LOCAL_NETINFO_DOMAIN, &ni);
+ }
+ else
+ {
+ if (lastni != NULL)
+ ni_free(lastni);
+ lastni = ni;
+ nis = ni_open(lastni, PARENT_NETINFO_DOMAIN, &ni);
+ }
+
+ /*
+ ** Don't bother if we didn't get a handle on a
+ ** proper domain. This is not necessarily an error.
+ ** We would get a positive ni_status if, for instance
+ ** we never found the directory or property and tried
+ ** to open the parent of the root domain!
+ */
+
+ if (nis != 0)
+ break;
+
+ /*
+ ** Find the path to the server information.
+ */
+
+ if (ni_pathsearch(ni, &nid, directory) != 0)
+ continue;
+
+ /*
+ ** Find "host" information.
+ */
+
+ if (ni_lookupprop(ni, &nid, propname, &ninl) != 0)
+ continue;
+
+ /*
+ ** If there's only one name in
+ ** the list, assume we've got
+ ** what we want.
+ */
+
+ if (ninl.ni_namelist_len == 1)
+ {
+ propval = ni_name_dup(ninl.ni_namelist_val[0]);
+ break;
+ }
+ }
+
+ /*
+ ** Clean up.
+ */
+
+ if (ni != NULL)
+ ni_free(ni);
+ if (lastni != NULL && ni != lastni)
+ ni_free(lastni);
+
+ return propval;
+ }
+
+ #endif /* NETINFO */
+ /*
+ ** HARD_SYSLOG -- call syslog repeatedly until it works
+ **
+ ** Needed on HP-UX, which apparently doesn't guarantee that
+ ** syslog succeeds during interrupt handlers.
+ */
+
+ #ifdef __hpux
+
+ # define MAXSYSLOGTRIES 100
+ # undef syslog
+
+ # ifdef __STDC__
+ hard_syslog(int pri, char *msg, ...)
+ # else
+ hard_syslog(pri, msg, va_alist)
+ int pri;
+ char *msg;
+ va_dcl
+ # endif
+ {
+ int i;
+ char buf[SYSLOG_BUFSIZE * 2];
+ VA_LOCAL_DECL;
+
+ VA_START(msg);
+ vsprintf(buf, msg, ap);
+ VA_END;
+
+ for (i = MAXSYSLOGTRIES; --i >= 0 && syslog(pri, "%s", buf) < 0; )
+ continue;
+ }
+
+ #endif
*** src/conf.h.OLD Sun Nov 7 10:37:02 1993
--- src/conf.h Sat Jan 8 17:53:13 1994
***************
*** 31,37 ****
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
! * @(#)conf.h 8.44 (Berkeley) 10/29/93
*/
/*
--- 31,37 ----
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
! * @(#)conf.h 8.75 (Berkeley) 1/8/94
*/
/*
***************
*** 64,70 ****
# define MEMCHUNKSIZE 1024 /* chunk size for memory allocation */
# define MAXUSERENVIRON 100 /* max envars saved, must be >= 3 */
# define MAXALIASDB 12 /* max # of alias databases */
- # define PSBUFSIZE (MAXLINE + MAXATOM) /* size of prescan buffer */
# ifndef QUEUESIZE
# define QUEUESIZE 1000 /* max # of jobs per queue run */
--- 64,69 ----
***************
*** 78,83 ****
--- 77,83 ----
# define LOG 1 /* enable logging */
# define UGLYUUCP 1 /* output ugly UUCP From lines */
+ # define NETUNIX 1 /* include unix domain support */
# define NETINET 1 /* include internet support */
# define SETPROCTITLE 1 /* munge argv to display current status */
# define NAMED_BIND 1 /* use Berkeley Internet Domain Server */
***************
*** 89,106 ****
# endif
/*
! ** Due to a "feature" in some operating systems such as Ultrix 4.3 and
! ** HPUX 8.0, if you receive a "No route to host" message (ICMP message
! ** ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
! ** are closed. Some firewalls return this error if you try to connect
! ** to the IDENT port (113), so you can't receive email from these hosts
! ** on these systems. The firewall really should use a more specific
! ** message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB. This
! ** will get #undefed below as needed.
*/
! # define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */
/**********************************************************************
** Operating system configuration.
**
--- 89,115 ----
# endif
/*
! ** Most systems have symbolic links today, so default them on. You
! ** can turn them off by #undef'ing this below.
*/
! # define HASLSTAT 1 /* has lstat(2) call */
+ /*
+ ** General "standard C" defines.
+ **
+ ** These may be undone later, to cope with systems that claim to
+ ** be Standard C but aren't. Gcc is the biggest offender -- it
+ ** doesn't realize that the library is part of the language.
+ **
+ ** Life would be much easier if we could get rid of this sort
+ ** of bozo problems.
+ */
+
+ #ifdef __STDC__
+ # define HASSETVBUF 1 /* we have setvbuf(3) in libc */
+ #endif
+
/**********************************************************************
** Operating system configuration.
**
***************
*** 114,120 ****
/*
! ** HP-UX -- tested for 8.07
*/
# ifdef __hpux
--- 123,129 ----
/*
! ** HP-UX -- tested for 8.07, 9.00, and 9.01.
*/
# ifdef __hpux
***************
*** 126,134 ****
# define HASSETREUID 1 /* has setreuid(2) call */
# define setreuid(r, e) setresuid(r, e, -1)
# define LA_TYPE LA_FLOAT
# define _PATH_UNIX "/hp-ux"
! # undef IDENTPROTO /* TCP/IP implementation is broken */
# endif
/*
--- 135,156 ----
# define HASSETREUID 1 /* has setreuid(2) call */
# define setreuid(r, e) setresuid(r, e, -1)
# define LA_TYPE LA_FLOAT
+ # define GIDSET_T gid_t
# define _PATH_UNIX "/hp-ux"
! # ifndef _PATH_SENDMAILCF
! # define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# endif
+ # ifndef IDENTPROTO
+ # define IDENTPROTO 0 /* TCP/IP implementation is broken */
+ # endif
+ # ifndef HASGETUSERSHELL
+ # define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */
+ # endif
+ # define syslog hard_syslog
+ # ifdef __STDC__
+ extern int syslog(int, char *, ...);
+ # endif
+ # endif
/*
***************
*** 137,142 ****
--- 159,167 ----
# ifdef _AIX3
# define HASINITGROUPS 1 /* has initgroups(3) call */
+ # define HASSTATFS 1 /* has the statfs(2) syscall */
+ # define HASUNAME 1 /* use System V uname(2) system call */
+ # define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define FORK fork /* no vfork primitive available */
# undef SETPROCTITLE /* setproctitle confuses AIX */
# endif
***************
*** 153,158 ****
--- 178,184 ----
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
+ # define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define FORK fork /* no vfork primitive available */
# define WAITUNION 1 /* use "union wait" as wait argument type */
# define setpgid BSDsetpgrp
***************
*** 161,184 ****
/*
! ** SunOS
*/
#if defined(sun) && !defined(BSD)
# define LA_TYPE LA_INT
- # define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# ifdef SOLARIS
/* Solaris 2.x (a.k.a. SunOS 5.x) */
! # define SYSTEM5 1 /* use System V definitions */
! # define setreuid(r, e) seteuid(e)
! # include
# include
! # define gethostbyname __switch_gethostbyname /* get working version */
! # define gethostbyaddr __switch_gethostbyaddr /* get working version */
! # define _PATH_UNIX "/kernel/unix"
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/etc/mail/sendmail.cf"
# endif
--- 187,221 ----
/*
! ** SunOS and Solaris
! **
! ** Tested on SunOS 4.1.x (a.k.a. Solaris 1.1.x) and
! ** Solaris 2.2 (a.k.a. SunOS 5.2).
*/
#if defined(sun) && !defined(BSD)
# define LA_TYPE LA_INT
# define HASINITGROUPS 1 /* has initgroups(3) call */
+ # define HASUNAME 1 /* use System V uname(2) system call */
+ # define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */
+ # ifdef SOLARIS_2_3
+ # define SOLARIS
+ # endif
+
# ifdef SOLARIS
/* Solaris 2.x (a.k.a. SunOS 5.x) */
! # ifndef __svr4__
! # define __svr4__ /* use all System V Releae 4 defines below */
! # endif
# include
! # define gethostbyname solaris_gethostbyname /* get working version */
! # define gethostbyaddr solaris_gethostbyaddr /* get working version */
! # define GIDSET_T gid_t
! # ifndef _PATH_UNIX
! # define _PATH_UNIX "/kernel/unix"
! # endif
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/etc/mail/sendmail.cf"
# endif
***************
*** 187,202 ****
# endif
# else
! /* SunOS 4.1.x */
# define HASSTATFS 1 /* has the statfs(2) syscall */
! /* # define HASFLOCK 1 /* has flock(2) call */
# include
# endif
#endif
/*
! ** DG/UX 5.4.2
*/
#ifdef DGUX
--- 224,255 ----
# endif
# else
! /* SunOS 4.0.3 or 4.1.x */
! # define HASSETREUID 1 /* has setreuid(2) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
! # define HASFLOCK 1 /* has flock(2) call */
# include
+ # ifdef SUNOS403
+ /* special tweaking for SunOS 4.0.3 */
+ # include
+ # define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
+ # define WAITUNION 1 /* use "union wait" as wait argument type */
+ # undef WIFEXITED
+ # undef WEXITSTATUS
+ # undef HASUNAME
+ # define setpgid setpgrp
+ typedef int pid_t;
+ extern char *getenv();
+
+ # endif
# endif
#endif
/*
! ** DG/UX
! **
! ** Tested on 5.4.2
*/
#ifdef DGUX
***************
*** 207,215 ****
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
! # define HASSETVBUF 1 /* we have setvbuf(3) in libc */
! # undef IDENTPROTO /* TCP/IP implementation is broken */
# undef SETPROCTITLE
# define inet_addr dgux_inet_addr
extern long dgux_inet_addr();
#endif
--- 260,274 ----
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
! # ifndef IDENTPROTO
! # define IDENTPROTO 0 /* TCP/IP implementation is broken */
! # endif
# undef SETPROCTITLE
+
+ /* these include files must be included early on DG/UX */
+ # include
+ # include
+
# define inet_addr dgux_inet_addr
extern long dgux_inet_addr();
#endif
***************
*** 229,237 ****
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASFLOCK 1 /* has flock(2) call */
! # define LA_TYPE LA_INT
! # define LA_AVENRUN "avenrun"
! # undef IDENTPROTO /* TCP/IP implementation is broken */
#endif
--- 288,303 ----
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASFLOCK 1 /* has flock(2) call */
! # define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
! # ifdef vax
! # define LA_TYPE LA_FLOAT
! # else
! # define LA_TYPE LA_INT
! # define LA_AVENRUN "avenrun"
! # endif
! # ifndef IDENTPROTO
! # define IDENTPROTO 0 /* TCP/IP implementation is broken */
! # endif
#endif
***************
*** 244,251 ****
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
! /* # define HASFLOCK 1 /* has flock(2) call */
# define LA_TYPE LA_INT
#endif
--- 310,320 ----
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
! # define HASFLOCK 1 /* has flock(2) call */
# define LA_TYPE LA_INT
+ # ifndef _PATH_SENDMAILPID
+ # define _PATH_SENDMAILPID "/var/run/sendmail.pid"
+ # endif
#endif
***************
*** 280,285 ****
--- 349,356 ----
/*
** 4.4 BSD
+ **
+ ** See also BSD defines.
*/
#ifdef BSD4_4
***************
*** 294,305 ****
/*
! ** 386BSD / FreeBSD 1.0E (works) / NetBSD (not tested)
**
** 4.3BSD clone, closer to 4.4BSD
*/
! #ifdef __386BSD__
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define HASSTATFS 1 /* has the statfs(2) syscall */
--- 365,378 ----
/*
! ** 386BSD / FreeBSD 1.0E / NetBSD (all architectures, all versions)
**
** 4.3BSD clone, closer to 4.4BSD
+ **
+ ** See also BSD defines.
*/
! #if defined(__386BSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define HASSTATFS 1 /* has the statfs(2) syscall */
***************
*** 312,317 ****
--- 385,420 ----
/*
+ ** Mach386
+ **
+ ** For mt Xinu's Mach386 system.
+ */
+
+ #if defined(MACH) && defined(i386)
+ # define MACH386 1
+ # define HASUNSETENV 1 /* has unsetenv(3) call */
+ # define HASINITGROUPS 1 /* has initgroups(3) call */
+ # define HASFLOCK 1 /* has flock(2) call */
+ # define HASSTATFS 1 /* has the statfs(2) syscall */
+ # define NEEDGETOPT 1 /* need a replacement for getopt(3) */
+ # define NEEDSTRTOL 1 /* need the strtol() function */
+ # define setpgid setpgrp
+ # ifndef LA_TYPE
+ # define LA_TYPE LA_FLOAT
+ # endif
+ # undef HASSETVBUF /* don't actually have setvbuf(3) */
+ # undef WEXITSTATUS
+ # undef WIFEXITED
+ # ifndef _PATH_SENDMAILCF
+ # define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
+ # endif
+ # ifndef _PATH_SENDMAILPID
+ # define _PATH_SENDMAILPID "/etc/sendmail.pid"
+ # endif
+ #endif
+
+
+ /*
** 4.3 BSD -- this is for very old systems
**
** You'll also have to install a new resolver library.
***************
*** 329,349 ****
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# endif
! # undef IDENTPROTO /* TCP/IP implementation is broken */
#endif
/*
** SCO Unix
*/
#ifdef _SCO_unix_
# define SYSTEM5 1 /* include all the System V defines */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define FORK fork
# define MAXPATHLEN PATHSIZE
# define LA_TYPE LA_SHORT
#endif
--- 432,476 ----
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# endif
! # ifndef IDENTPROTO
! # define IDENTPROTO 0 /* TCP/IP implementation is broken */
! # endif
! # undef WEXITSTATUS
! # undef WIFEXITED
! typedef short pid_t;
! extern int errno;
#endif
/*
** SCO Unix
+ **
+ ** This includes two parts -- the first is for SCO Open Server 3.2v4
+ ** (contributed by Philippe Brand ).
+ ** The second is, I believe, for an older version.
*/
+ #ifdef _SCO_unix_4_2
+ # define _SCO_unix_
+ # define HASSETREUID 1 /* has setreuid(2) call */
+ # define _PATH_UNIX "/unix"
+ # ifndef _PATH_SENDMAILCF
+ # define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
+ # endif
+ # ifndef _PATH_SENDMAILPID
+ # define _PATH_SENDMAILPID "/etc/sendmail.pid"
+ # endif
+ #endif
+
#ifdef _SCO_unix_
# define SYSTEM5 1 /* include all the System V defines */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define HASSTATFS 1 /* has the statfs(2) syscall */
+ # define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define FORK fork
# define MAXPATHLEN PATHSIZE
# define LA_TYPE LA_SHORT
+ # undef NETUNIX /* no unix domain socket support */
#endif
***************
*** 358,379 ****
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define NEEDGETOPT 1 /* need replacement for getopt(3) */
# define LA_TYPE LA_FLOAT
! # undef IDENTPROTO
#endif
/*
! ** RISC/os 4.51
**
! ** Untested...
*/
#ifdef RISCOS
# define HASUNSETENV 1 /* has unsetenv(3) call */
! /* # define HASFLOCK 1 /* has flock(2) call */
# define LA_TYPE LA_INT
# define LA_AVENRUN "avenrun"
# define _PATH_UNIX "/unix"
#endif
--- 485,522 ----
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define NEEDGETOPT 1 /* need replacement for getopt(3) */
# define LA_TYPE LA_FLOAT
! # ifndef IDENTPROTO
! # define IDENTPROTO 0 /* TCP/IP implementation is broken */
! # endif
#endif
/*
! ** RISC/os 4.52
**
! ** Gives a ton of warning messages, but otherwise compiles.
*/
#ifdef RISCOS
+
# define HASUNSETENV 1 /* has unsetenv(3) call */
! # define HASFLOCK 1 /* has flock(2) call */
! # define WAITUNION 1 /* use "union wait" as wait argument type */
! # define NEEDGETOPT 1 /* need a replacement for getopt(3) */
# define LA_TYPE LA_INT
# define LA_AVENRUN "avenrun"
# define _PATH_UNIX "/unix"
+ # undef WIFEXITED
+
+ # define setpgid setpgrp
+
+ extern int errno;
+ typedef int pid_t;
+ #define SIGFUNC_DEFINED
+ typedef int (*sigfunc_t)();
+ extern char *getenv();
+ extern void *malloc();
+
#endif
***************
*** 391,396 ****
--- 534,540 ----
# define LA_TYPE LA_FLOAT
# endif
# include
+ # define GIDSET_T gid_t
#endif
***************
*** 400,418 ****
**
** It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
** defined, and the definitions conflict.
*/
#ifdef DELL_SVR4
! # define SYSTEM5 1
! /* # define setreuid(r, e) seteuid(e) */
! /* # include */
! # define _PATH_UNIX "/unix"
! # ifndef _PATH_SENDMAILCF
! # define _PATH_SENDMAILCF "/usr/ucblib/sendmail.cf"
! # endif
! # ifndef _PATH_SENDMAILPID
! # define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
! # endif
#endif
--- 544,558 ----
**
** It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
** defined, and the definitions conflict.
+ **
+ ** Peter Wemm claims that the setreuid
+ ** trick works on DELL 2.2 (SVR4.0/386 version 4.0) and ESIX 4.0.3A
+ ** (SVR4.0/386 version 3.0).
*/
#ifdef DELL_SVR4
! /* no changes necessary */
! /* see general __svr4__ defines below */
#endif
***************
*** 428,434 ****
# define HASUSTAT 1 /* use System V ustat(2) syscall */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# define SIGFUNC_DEFINED /* sigfunc_t already defined */
! # undef IDENTPROTO /* TCP/IP implementation is broken */
# define FORK fork
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
--- 568,576 ----
# define HASUSTAT 1 /* use System V ustat(2) syscall */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# define SIGFUNC_DEFINED /* sigfunc_t already defined */
! # ifndef IDENTPROTO
! # define IDENTPROTO 0 /* TCP/IP implementation is broken */
! # endif
# define FORK fork
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
***************
*** 453,458 ****
--- 595,601 ----
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# define HASINITGROUPS 1 /* has initgroups(3) call */
+ # define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
# define FORK fork /* no vfork(2) primitive available */
***************
*** 464,470 ****
--- 607,668 ----
#endif
+ /*
+ ** Stardent Titan 3000 running TitanOS 4.2.
+ **
+ ** Must be compiled in "cc -43" mode.
+ **
+ ** From Kate Hedstrom .
+ **
+ ** Note the tweaking below after the BSD defines are set.
+ */
+ #ifdef titan
+ # define setpgid setpgrp
+ typedef int pid_t;
+ # undef WIFEXITED
+ # undef WEXITSTATUS
+ #endif
+
+
+ /*
+ ** Sequent DYNIX 3.2.0
+ **
+ ** From Jim Davis .
+ */
+
+ #ifdef sequent
+ # define BSD 1
+ # define HASUNSETENV 1
+ # define BSD4_3 1 /* to get signal() in conf.c */
+ # define WAITUNION 1
+ # define LA_TYPE LA_FLOAT
+ # ifdef _POSIX_VERSION
+ # undef _POSIX_VERSION /* set in */
+ # endif
+ # undef HASSETVBUF /* don't actually have setvbuf(3) */
+ # define setpgid setpgrp
+
+ /* Have to redefine WIFEXITED to take an int, to work with waitfor() */
+ # undef WIFEXITED
+ # define WIFEXITED(s) (((union wait*)&(s))->w_stopval != WSTOPPED && \
+ ((union wait*)&(s))->w_termsig == 0)
+ # define WEXITSTATUS(s) (((union wait*)&(s))->w_retcode)
+ typedef int pid_t;
+ # define isgraph(c) (isprint(c) && (c != ' '))
+
+ # ifndef _PATH_UNIX
+ # define _PATH_UNIX "/dynix"
+ # endif
+ # ifndef _PATH_SENDMAILCF
+ # define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
+ # endif
+
+ #endif
+
+
+
+
/**********************************************************************
** End of Per-Operating System defines
**********************************************************************/
***************
*** 481,491 ****
--- 679,714 ----
# define HASFLOCK 1 /* has flock(2) call */
#endif
+ /* general System V Release 4 defines */
+ #ifdef __svr4__
+ # define SYSTEM5 1
+ # define HASSETREUID 1 /* has seteuid(2) call & working saved uids */
+ # ifndef HASGETUSERSHELL
+ # define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
+ # endif
+ # define setreuid(r, e) seteuid(e)
+
+ # ifndef _PATH_UNIX
+ # define _PATH_UNIX "/unix"
+ # endif
+ # ifndef _PATH_SENDMAILCF
+ # define _PATH_SENDMAILCF "/usr/ucblib/sendmail.cf"
+ # endif
+ # ifndef _PATH_SENDMAILPID
+ # define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
+ # endif
+ # ifndef SYSLOG_BUFSIZE
+ # define SYSLOG_BUFSIZE 128
+ # endif
+ #endif
+
/* general System V defines */
# ifdef SYSTEM5
+ # include
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASUSTAT 1 /* use System V ustat(2) syscall */
# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
+ # define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# ifndef LA_TYPE
# define LA_TYPE LA_INT
# endif
***************
*** 494,504 ****
# define bcmp(s, d, l) (memcmp((s), (d), (l)))
# endif
- /* general "standard C" defines */
- #if defined(__STDC__) || defined(SYSTEM5)
- # define HASSETVBUF 1 /* we have setvbuf(3) in libc */
- #endif
-
/* general POSIX defines */
#ifdef _POSIX_VERSION
# define HASSETSID 1 /* has Posix setsid(2) call */
--- 717,722 ----
***************
*** 515,521 ****
--- 733,767 ----
# define GIDSET_T int
#endif
+ /*
+ ** Tweaking for systems that (for example) claim to be BSD but
+ ** don't have all the standard BSD routines (boo hiss).
+ */
+ #ifdef titan
+ # undef HASINITGROUPS /* doesn't have initgroups(3) call */
+ #endif
+
+ /*
+ ** Due to a "feature" in some operating systems such as Ultrix 4.3 and
+ ** HPUX 8.0, if you receive a "No route to host" message (ICMP message
+ ** ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
+ ** are closed. Some firewalls return this error if you try to connect
+ ** to the IDENT port (113), so you can't receive email from these hosts
+ ** on these systems. The firewall really should use a more specific
+ ** message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB. If
+ ** not explicitly set to zero above, default it on.
+ */
+
+ #ifndef IDENTPROTO
+ # define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */
+ #endif
+
+ #ifndef HASGETUSERSHELL
+ # define HASGETUSERSHELL 1 /* libc has getusershell(3) call */
+ #endif
+
+
/**********************************************************************
** Remaining definitions should never have to be changed. They are
** primarily to provide back compatibility for older systems -- for
***************
*** 524,531 ****
/* System 5 compatibility */
#ifndef S_ISREG
! #define S_ISREG(foo) ((foo & S_IFREG) == S_IFREG)
#endif
#ifndef S_IWGRP
#define S_IWGRP 020
#endif
--- 770,780 ----
/* System 5 compatibility */
#ifndef S_ISREG
! # define S_ISREG(foo) ((foo & S_IFMT) == S_IFREG)
#endif
+ #if !defined(S_ISLNK) && defined(S_IFLNK)
+ # define S_ISLNK(foo) ((foo & S_IFMT) == S_IFLNK)
+ #endif
#ifndef S_IWGRP
#define S_IWGRP 020
#endif
***************
*** 656,661 ****
--- 905,915 ----
typedef void (*sigfunc_t) __P((int));
#endif
+ /* size of syslog buffer */
+ #ifndef SYSLOG_BUFSIZE
+ # define SYSLOG_BUFSIZE 1024
+ #endif
+
/*
** Size of tobuf (deliver.c)
** Tweak this to match your syslog implementation. It will have to
***************
*** 663,671 ****
*/
#ifndef TOBUFSIZE
! # define TOBUFSIZE (1024 - 256)
#endif
/* fork routine -- set above using #ifdef _osname_ or in Makefile */
# ifndef FORK
# define FORK vfork /* function to call to fork mailer */
--- 917,936 ----
*/
#ifndef TOBUFSIZE
! # if (SYSLOG_BUFSIZE) > 512
! # define TOBUFSIZE (SYSLOG_BUFSIZE - 256)
! # else
! # define TOBUFSIZE 256
! # endif
#endif
+ /*
+ ** Size of prescan buffer.
+ ** Despite comments in the _sendmail_ book, this probably should
+ ** not be changed; there are some hard-to-define dependencies.
+ */
+
+ # define PSBUFSIZE (MAXNAME + MAXATOM) /* size of prescan buffer */
/* fork routine -- set above using #ifdef _osname_ or in Makefile */
# ifndef FORK
# define FORK vfork /* function to call to fork mailer */
*** src/daemon.c.OLD Sun Nov 7 10:37:39 1993
--- src/daemon.c Sat Jan 8 17:29:32 1994
***************
*** 37,45 ****
#ifndef lint
#ifdef DAEMON
! static char sccsid[] = "@(#)daemon.c 8.21 (Berkeley) 10/31/93 (with daemon mode)";
#else
! static char sccsid[] = "@(#)daemon.c 8.21 (Berkeley) 10/31/93 (without daemon mode)";
#endif
#endif /* not lint */
--- 37,45 ----
#ifndef lint
#ifdef DAEMON
! static char sccsid[] = "@(#)daemon.c 8.30 (Berkeley) 1/8/94 (with daemon mode)";
#else
! static char sccsid[] = "@(#)daemon.c 8.30 (Berkeley) 1/8/94 (without daemon mode)";
#endif
#endif /* not lint */
***************
*** 110,119 ****
getrequests()
{
int t;
- register struct servent *sp;
int on = 1;
bool refusingconnections = TRUE;
FILE *pidf;
extern void reapchild();
/*
--- 110,119 ----
getrequests()
{
int t;
int on = 1;
bool refusingconnections = TRUE;
FILE *pidf;
+ int socksize;
extern void reapchild();
/*
***************
*** 126,138 ****
DaemonAddr.sin.sin_addr.s_addr = INADDR_ANY;
if (DaemonAddr.sin.sin_port == 0)
{
sp = getservbyname("smtp", "tcp");
if (sp == NULL)
{
syserr("554 service \"smtp\" unknown");
! goto severe;
}
! DaemonAddr.sin.sin_port = sp->s_port;
}
/*
--- 126,141 ----
DaemonAddr.sin.sin_addr.s_addr = INADDR_ANY;
if (DaemonAddr.sin.sin_port == 0)
{
+ register struct servent *sp;
+
sp = getservbyname("smtp", "tcp");
if (sp == NULL)
{
syserr("554 service \"smtp\" unknown");
! DaemonAddr.sin.sin_port = htons(25);
}
! else
! DaemonAddr.sin.sin_port = sp->s_port;
}
/*
***************
*** 177,198 ****
{
# ifdef NETINET
case AF_INET:
! t = sizeof DaemonAddr.sin;
break;
# endif
# ifdef NETISO
case AF_ISO:
! t = sizeof DaemonAddr.siso;
break;
# endif
default:
! t = sizeof DaemonAddr;
break;
}
! if (bind(DaemonSocket, &DaemonAddr.sa, t) < 0)
{
syserr("getrequests: cannot bind");
(void) close(DaemonSocket);
--- 180,201 ----
{
# ifdef NETINET
case AF_INET:
! socksize = sizeof DaemonAddr.sin;
break;
# endif
# ifdef NETISO
case AF_ISO:
! socksize = sizeof DaemonAddr.siso;
break;
# endif
default:
! socksize = sizeof DaemonAddr;
break;
}
! if (bind(DaemonSocket, &DaemonAddr.sa, socksize) < 0)
{
syserr("getrequests: cannot bind");
(void) close(DaemonSocket);
***************
*** 260,266 ****
do
{
errno = 0;
! lotherend = sizeof RealHostAddr;
t = accept(DaemonSocket,
(struct sockaddr *)&RealHostAddr, &lotherend);
} while (t < 0 && errno == EINTR);
--- 263,269 ----
do
{
errno = 0;
! lotherend = socksize;
t = accept(DaemonSocket,
(struct sockaddr *)&RealHostAddr, &lotherend);
} while (t < 0 && errno == EINTR);
***************
*** 299,305 ****
*/
(void) setsignal(SIGCHLD, SIG_DFL);
- OpMode = MD_SMTP;
/* determine host name */
p = hostnamebyanyaddr(&RealHostAddr);
--- 302,307 ----
***************
*** 613,619 ****
case AF_INET:
bcopy(hp->h_addr,
&addr.sin.sin_addr,
! hp->h_length);
break;
#endif
--- 615,621 ----
case AF_INET:
bcopy(hp->h_addr,
&addr.sin.sin_addr,
! sizeof addr.sin.sin_addr);
break;
#endif
***************
*** 639,647 ****
if (sp == NULL)
{
syserr("554 makeconnection: service \"smtp\" unknown");
! return (EX_OSERR);
}
! port = sp->s_port;
}
switch (addr.sa.sa_family)
--- 641,650 ----
if (sp == NULL)
{
syserr("554 makeconnection: service \"smtp\" unknown");
! port = htons(25);
}
! else
! port = sp->s_port;
}
switch (addr.sa.sa_family)
***************
*** 742,748 ****
case AF_INET:
bcopy(hp->h_addr_list[i++],
&addr.sin.sin_addr,
! hp->h_length);
break;
#endif
--- 745,751 ----
case AF_INET:
bcopy(hp->h_addr_list[i++],
&addr.sin.sin_addr,
! sizeof addr.sin.sin_addr);
break;
#endif
***************
*** 846,852 ****
** Sets RealHostName to the name of the host at the other end.
*/
! #ifdef IDENTPROTO
static jmp_buf CtxAuthTimeout;
--- 849,855 ----
** Sets RealHostName to the name of the host at the other end.
*/
! #if IDENTPROTO
static jmp_buf CtxAuthTimeout;
***************
*** 865,871 ****
SOCKADDR fa;
int falen;
register char *p;
! #ifdef IDENTPROTO
SOCKADDR la;
int lalen;
register struct servent *sp;
--- 868,874 ----
SOCKADDR fa;
int falen;
register char *p;
! #if IDENTPROTO
SOCKADDR la;
int lalen;
register struct servent *sp;
***************
*** 878,884 ****
extern char RealUserName[]; /* main.c */
falen = sizeof fa;
! if (getpeername(fd, &fa.sa, &falen) < 0 || falen <= 0)
{
RealHostName = "localhost";
(void) sprintf(hbuf, "%s@localhost", RealUserName);
--- 881,888 ----
extern char RealUserName[]; /* main.c */
falen = sizeof fa;
! if (getpeername(fd, &fa.sa, &falen) < 0 || falen <= 0 ||
! fa.sa.sa_family == 0)
{
RealHostName = "localhost";
(void) sprintf(hbuf, "%s@localhost", RealUserName);
***************
*** 891,897 ****
RealHostName = newstr(p);
RealHostAddr = fa;
! #ifdef IDENTPROTO
lalen = sizeof la;
if (fa.sa.sa_family != AF_INET ||
getsockname(fd, &la.sa, &lalen) < 0 || lalen <= 0 ||
--- 895,901 ----
RealHostName = newstr(p);
RealHostAddr = fa;
! #if IDENTPROTO
lalen = sizeof la;
if (fa.sa.sa_family != AF_INET ||
getsockname(fd, &la.sa, &lalen) < 0 || lalen <= 0 ||
***************
*** 1049,1055 ****
char *cp;
int i;
register STAB *s;
- char *timeoutmsg = "Recipient domain nameserver timed out";
char hbuf[MAXNAME];
extern struct hostent *gethostbyaddr();
extern int h_errno;
--- 1053,1058 ----
***************
*** 1069,1075 ****
h_errno = s->s_namecanon.nc_herrno;
*statp = s->s_namecanon.nc_stat;
if (CurEnv->e_message == NULL && *statp == EX_TEMPFAIL)
! CurEnv->e_message = newstr(timeoutmsg);
return s->s_namecanon.nc_cname;
}
--- 1072,1082 ----
h_errno = s->s_namecanon.nc_herrno;
*statp = s->s_namecanon.nc_stat;
if (CurEnv->e_message == NULL && *statp == EX_TEMPFAIL)
! {
! sprintf(hbuf, "%s: Name server timeout",
! shortenstring(name, 33));
! CurEnv->e_message = newstr(hbuf);
! }
return s->s_namecanon.nc_cname;
}
***************
*** 1109,1117 ****
case TRY_AGAIN:
if (UseNameServer)
{
! message(timeoutmsg);
if (CurEnv->e_message == NULL)
! CurEnv->e_message = newstr(timeoutmsg);
}
*statp = EX_TEMPFAIL;
break;
--- 1116,1126 ----
case TRY_AGAIN:
if (UseNameServer)
{
! sprintf(hbuf, "%s: Name server timeout",
! shortenstring(name, 33));
! message("%s", hbuf);
if (CurEnv->e_message == NULL)
! CurEnv->e_message = newstr(hbuf);
}
*statp = EX_TEMPFAIL;
break;
***************
*** 1200,1205 ****
--- 1209,1215 ----
switch (sap->sa.sa_family)
{
#ifdef MAYBENEXTRELEASE /*** UNTESTED *** UNTESTED *** UNTESTED ***/
+ #ifdef NETUNIX
case AF_UNIX:
if (sap->sunix.sun_path[0] != '\0')
sprintf(buf, "[UNIX: %.64s]", sap->sunix.sun_path);
***************
*** 1206,1211 ****
--- 1216,1222 ----
else
sprintf(buf, "[UNIX: localhost]");
return buf;
+ #endif
#endif
#ifdef NETINET
*** src/deliver.c.OLD Thu Nov 4 06:54:43 1993
--- src/deliver.c Wed Jan 12 12:38:48 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)deliver.c 8.37 (Berkeley) 10/29/93";
#endif /* not lint */
#include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)deliver.c 8.62 (Berkeley) 1/12/94";
#endif /* not lint */
#include "sendmail.h"
***************
*** 46,51 ****
--- 46,53 ----
extern int h_errno;
#endif
+ extern char SmtpError[];
+
/*
** SENDALL -- actually send all the messages.
**
***************
*** 82,88 ****
** addresses to be sent.
*/
! if (bitset(EF_FATALERRS, e->e_flags) && OpMode == MD_SMTP)
{
e->e_flags |= EF_CLRQUEUE;
return;
--- 84,91 ----
** addresses to be sent.
*/
! if (bitset(EF_FATALERRS, e->e_flags) &&
! (OpMode == MD_SMTP || OpMode == MD_DAEMON))
{
e->e_flags |= EF_CLRQUEUE;
return;
***************
*** 89,94 ****
--- 92,98 ----
}
/* determine actual delivery mode */
+ CurrentLA = getla();
if (mode == SM_DEFAULT)
{
mode = e->e_sendmode;
***************
*** 333,339 ****
** addresses to be sent.
*/
! if (bitset(EF_FATALERRS, e->e_flags) && OpMode == MD_SMTP)
{
e->e_flags |= EF_CLRQUEUE;
return;
--- 337,344 ----
** addresses to be sent.
*/
! if (bitset(EF_FATALERRS, e->e_flags) &&
! (OpMode == MD_SMTP || OpMode == MD_DAEMON))
{
e->e_flags |= EF_CLRQUEUE;
return;
***************
*** 447,456 ****
e->e_to = q->q_paddr;
if (!bitset(QDONTSEND|QBADADDR, q->q_flags))
{
! message("deliverable: mailer %s, host %s, user %s",
! q->q_mailer->m_name,
! q->q_host,
! q->q_user);
}
}
else if (!bitset(QDONTSEND|QBADADDR, q->q_flags))
--- 452,466 ----
e->e_to = q->q_paddr;
if (!bitset(QDONTSEND|QBADADDR, q->q_flags))
{
! if (q->q_host != NULL && q->q_host[0] != '\0')
! message("deliverable: mailer %s, host %s, user %s",
! q->q_mailer->m_name,
! q->q_host,
! q->q_user);
! else
! message("deliverable: mailer %s, user %s",
! q->q_mailer->m_name,
! q->q_user);
}
}
else if (!bitset(QDONTSEND|QBADADDR, q->q_flags))
***************
*** 589,595 ****
char buf[MAXNAME];
char rpathbuf[MAXNAME]; /* translated return path */
extern int checkcompat();
- extern char SmtpError[];
errno = 0;
if (bitset(QDONTSEND|QBADADDR|QQUEUEUP, to->q_flags))
--- 599,604 ----
***************
*** 597,603 ****
#ifdef NAMED_BIND
/* unless interactive, try twice, over a minute */
! if (OpMode == MD_DAEMON || OpMode == MD_SMTP) {
_res.retrans = 30;
_res.retry = 2;
}
--- 606,613 ----
#ifdef NAMED_BIND
/* unless interactive, try twice, over a minute */
! if (OpMode == MD_DAEMON || OpMode == MD_SMTP)
! {
_res.retrans = 30;
_res.retry = 2;
}
***************
*** 759,765 ****
}
/* compute effective uid/gid when sending */
! if (to->q_mailer == ProgMailer)
ctladdr = getctladdr(to);
user = to->q_user;
--- 769,777 ----
}
/* compute effective uid/gid when sending */
! /* XXX perhaps this should be to->q_mailer != LocalMailer ?? */
! /* XXX perhaps it should be a mailer flag? */
! if (to->q_mailer == ProgMailer || to->q_mailer == FileMailer)
ctladdr = getctladdr(to);
user = to->q_user;
***************
*** 831,840 ****
if (m == FileMailer)
{
! ADDRESS *caddr = getctladdr(to);
!
! rcode = mailfile(user, caddr, e);
! giveresponse(rcode, m, NULL, caddr, e);
if (rcode == EX_OK)
to->q_flags |= QSENT;
continue;
--- 843,850 ----
if (m == FileMailer)
{
! rcode = mailfile(user, ctladdr, e);
! giveresponse(rcode, m, NULL, ctladdr, e);
if (rcode == EX_OK)
to->q_flags |= QSENT;
continue;
***************
*** 905,912 ****
** If we are running SMTP, we just need to clean up.
*/
! if (ctladdr == NULL && m != ProgMailer)
ctladdr = &e->e_from;
#ifdef NAMED_BIND
if (ConfigLevel < 2)
_res.options &= ~(RES_DEFNAMES | RES_DNSRCH); /* XXX */
--- 915,924 ----
** If we are running SMTP, we just need to clean up.
*/
! /*XXX this seems a bit wierd */
! if (ctladdr == NULL && bitset(QGOODUID, e->e_from.q_flags))
ctladdr = &e->e_from;
+
#ifdef NAMED_BIND
if (ConfigLevel < 2)
_res.options &= ~(RES_DEFNAMES | RES_DNSRCH); /* XXX */
***************
*** 961,972 ****
register int i;
register u_short port;
CurHostName = pv[1];
curhost = hostsignature(m, pv[1], e);
if (curhost == NULL || curhost[0] == '\0')
{
! syserr("null signature");
rcode = EX_OSERR;
goto give_up;
}
--- 973,991 ----
register int i;
register u_short port;
+ if (pv[0] == NULL || pv[1] == NULL || pv[1][0] == '\0')
+ {
+ syserr("null host name for %s mailer", m->m_mailer);
+ rcode = EX_CONFIG;
+ goto give_up;
+ }
+
CurHostName = pv[1];
curhost = hostsignature(m, pv[1], e);
if (curhost == NULL || curhost[0] == '\0')
{
! syserr("null host signature for %s", pv[1]);
rcode = EX_OSERR;
goto give_up;
}
***************
*** 1153,1158 ****
--- 1172,1178 ----
if (ctladdr == NULL || ctladdr->q_uid == 0)
{
(void) initgroups(DefUser, DefGid);
+ (void) setgid(DefGid);
(void) setuid(DefUid);
}
else
***************
*** 1160,1165 ****
--- 1180,1186 ----
(void) initgroups(ctladdr->q_ruser?
ctladdr->q_ruser: ctladdr->q_user,
ctladdr->q_gid);
+ (void) setgid(ctladdr->q_gid);
(void) setuid(ctladdr->q_uid);
}
}
***************
*** 1202,1208 ****
}
(void) close(rpvect[1]);
}
! else if (OpMode == MD_SMTP || HoldErrs)
{
/* put mailer output in transcript */
if (dup2(fileno(e->e_xfp), STDOUT_FILENO) < 0)
--- 1223,1229 ----
}
(void) close(rpvect[1]);
}
! else if (OpMode == MD_SMTP || OpMode == MD_DAEMON || HoldErrs)
{
/* put mailer output in transcript */
if (dup2(fileno(e->e_xfp), STDOUT_FILENO) < 0)
***************
*** 1333,1339 ****
rcode, mci->mci_state, firstsig);
rcode = EX_SOFTWARE;
}
! else if (rcode == EX_TEMPFAIL && *curhost != '\0')
{
/* try next MX site */
goto tryhost;
--- 1354,1360 ----
rcode, mci->mci_state, firstsig);
rcode = EX_SOFTWARE;
}
! else if (rcode == EX_TEMPFAIL && curhost != NULL && *curhost != '\0')
{
/* try next MX site */
goto tryhost;
***************
*** 1403,1409 ****
if (!bitset(MCIF_CACHED, mci->mci_flags))
smtpquit(m, mci, e);
}
! if (rcode != EX_OK && *curhost != '\0')
{
/* try next MX site */
goto tryhost;
--- 1424,1430 ----
if (!bitset(MCIF_CACHED, mci->mci_flags))
smtpquit(m, mci, e);
}
! if (rcode != EX_OK && curhost != NULL && *curhost != '\0')
{
/* try next MX site */
goto tryhost;
***************
*** 1500,1511 ****
{
char buf[MAXLINE];
! if (rcode == EX_OK)
! return;
! else if (rcode == EX_TEMPFAIL)
q->q_flags |= QQUEUEUP;
! else if (rcode != EX_IOERR && rcode != EX_OSERR)
q->q_flags |= QBADADDR;
}
/*
** ENDMAILER -- Wait for mailer to terminate.
--- 1521,1541 ----
{
char buf[MAXLINE];
! switch (rcode)
! {
! case EX_OK:
! break;
!
! case EX_TEMPFAIL:
! case EX_IOERR:
! case EX_OSERR:
q->q_flags |= QQUEUEUP;
! break;
!
! default:
q->q_flags |= QBADADDR;
+ break;
+ }
}
/*
** ENDMAILER -- Wait for mailer to terminate.
***************
*** 1537,1545 ****
/* close any connections */
if (mci->mci_in != NULL)
! (void) xfclose(mci->mci_in, pv[0], "mci_in");
if (mci->mci_out != NULL)
! (void) xfclose(mci->mci_out, pv[0], "mci_out");
mci->mci_in = mci->mci_out = NULL;
mci->mci_state = MCIS_CLOSED;
--- 1567,1575 ----
/* close any connections */
if (mci->mci_in != NULL)
! (void) xfclose(mci->mci_in, mci->mci_mailer->m_name, "mci_in");
if (mci->mci_out != NULL)
! (void) xfclose(mci->mci_out, mci->mci_mailer->m_name, "mci_out");
mci->mci_in = mci->mci_out = NULL;
mci->mci_state = MCIS_CLOSED;
***************
*** 1562,1571 ****
}
/* it died a horrid death */
! syserr("mailer %s died with signal %o", pv[0], st);
/* log the arguments */
! if (e->e_xfp != NULL)
{
register char **av;
--- 1592,1602 ----
}
/* it died a horrid death */
! syserr("451 mailer %s died with signal %o",
! mci->mci_mailer->m_name, st);
/* log the arguments */
! if (pv != NULL && e->e_xfp != NULL)
{
register char **av;
***************
*** 1647,1654 ****
else
{
#ifdef SMTP
- extern char SmtpError[];
-
statmsg = SmtpError;
#else /* SMTP */
statmsg = NULL;
--- 1678,1683 ----
***************
*** 1710,1716 ****
if (stat != EX_TEMPFAIL)
setstat(stat);
! if (stat != EX_OK)
{
if (e->e_message != NULL)
free(e->e_message);
--- 1739,1745 ----
if (stat != EX_TEMPFAIL)
setstat(stat);
! if (stat != EX_OK && (stat != EX_TEMPFAIL || e->e_message == NULL))
{
if (e->e_message != NULL)
free(e->e_message);
***************
*** 1724,1729 ****
--- 1753,1762 ----
/*
** LOGDELIVERY -- log the delivery in the system log
**
+ ** Care is taken to avoid logging lines that are too long, because
+ ** some versions of syslog have an unfortunate proclivity for core
+ ** dumping. This is a hack, to be sure, that is at best empirical.
+ **
** Parameters:
** m -- the mailer info. Can be NULL for initial queue.
** mci -- the mailer connection info -- can be NULL if the
***************
*** 1748,1760 ****
{
# ifdef LOG
register char *bp;
char buf[512];
bp = buf;
if (ctladdr != NULL)
{
strcpy(bp, ", ctladdr=");
! strcat(bp, ctladdr->q_paddr);
bp += strlen(bp);
if (bitset(QGOODUID, ctladdr->q_flags))
{
--- 1781,1796 ----
{
# ifdef LOG
register char *bp;
+ register char *p;
+ int l;
char buf[512];
+ # if (SYSLOG_BUFSIZE) >= 256
bp = buf;
if (ctladdr != NULL)
{
strcpy(bp, ", ctladdr=");
! strcat(bp, shortenstring(ctladdr->q_paddr, 83));
bp += strlen(bp);
if (bitset(QGOODUID, ctladdr->q_flags))
{
***************
*** 1799,1807 ****
(void) strcat(bp, p);
}
}
! syslog(LOG_INFO, "%s: to=%s%s, stat=%s",
! e->e_id, e->e_to, buf, stat);
# endif /* LOG */
}
/*
--- 1835,1945 ----
(void) strcat(bp, p);
}
}
+ bp += strlen(bp);
+
+ #define STATLEN (((SYSLOG_BUFSIZE) - 100) / 4)
+ #if (STATLEN) < 63
+ # undef STATLEN
+ # define STATLEN 63
+ #endif
+ #if (STATLEN) > 203
+ # undef STATLEN
+ # define STATLEN 203
+ #endif
+
+ if ((bp - buf) > (sizeof buf - ((STATLEN) + 20)))
+ {
+ /* desperation move -- truncate data */
+ bp = buf + sizeof buf - ((STATLEN) + 17);
+ strcpy(bp, "...");
+ bp += 3;
+ }
+
+ (void) strcpy(bp, ", stat=");
+ bp += strlen(bp);
+
+ (void) strcpy(bp, shortenstring(stat, (STATLEN)));
! l = SYSLOG_BUFSIZE - 100 - strlen(buf);
! p = e->e_to;
! while (strlen(p) >= l)
! {
! register char *q = strchr(p + l, ',');
!
! if (q == NULL)
! break;
! syslog(LOG_INFO, "%s: to=%.*s [more]%s",
! e->e_id, ++q - p, p, buf);
! p = q;
! }
! syslog(LOG_INFO, "%s: to=%s%s", e->e_id, p, buf);
!
! # else /* we have a very short log buffer size */
!
! l = SYSLOG_BUFSIZE - 80;
! p = e->e_to;
! while (strlen(p) >= l)
! {
! register char *q = strchr(p + l, ',');
!
! if (q == NULL)
! break;
! syslog(LOG_INFO, "%s: to=%.*s [more]",
! e->e_id, ++q - p, p);
! p = q;
! }
! syslog(LOG_INFO, "%s: to=%s", e->e_id, p);
!
! if (ctladdr != NULL)
! {
! bp = buf;
! strcpy(buf, "ctladdr=");
! bp += strlen(buf);
! strcpy(bp, shortenstring(ctladdr->q_paddr, 83));
! bp += strlen(buf);
! if (bitset(QGOODUID, ctladdr->q_flags))
! {
! (void) sprintf(bp, " (%d/%d)",
! ctladdr->q_uid, ctladdr->q_gid);
! bp += strlen(bp);
! }
! syslog(LOG_INFO, "%s: %s", e->e_id, buf);
! }
! bp = buf;
! sprintf(bp, "delay=%s", pintvl(curtime() - e->e_ctime, TRUE));
! bp += strlen(bp);
!
! if (m != NULL)
! {
! sprintf(bp, ", mailer=%s", m->m_name);
! bp += strlen(bp);
! }
!
! if (mci != NULL && mci->mci_host != NULL)
! {
! # ifdef DAEMON
! extern SOCKADDR CurHostAddr;
! # endif
!
! sprintf(bp, ", relay=%s", mci->mci_host);
!
! # ifdef DAEMON
! (void) strcat(bp, " (");
! (void) strcat(bp, anynet_ntoa(&CurHostAddr));
! (void) strcat(bp, ")");
! # endif
! }
! else
! {
! char *p = macvalue('h', e);
!
! if (p != NULL && p[0] != '\0')
! sprintf(bp, ", relay=%s", p);
! }
! syslog(LOG_INFO, "%s: %s", e->e_id, buf);
!
! syslog(LOG_INFO, "%s: stat=%s", e->e_id, shortenstring(stat, 63));
! # endif /* short log buffer */
# endif /* LOG */
}
/*
***************
*** 2013,2021 ****
if (bitset(0111, stb.st_mode))
exit(EX_CANTCREAT);
! if (ctladdr == NULL)
! ctladdr = &e->e_from;
! else
{
/* ignore setuid and setgid bits */
mode &= ~(S_ISGID|S_ISUID);
--- 2151,2157 ----
if (bitset(0111, stb.st_mode))
exit(EX_CANTCREAT);
! if (ctladdr != NULL)
{
/* ignore setuid and setgid bits */
mode &= ~(S_ISGID|S_ISUID);
***************
*** 2034,2040 ****
if (!bitset(S_ISGID, mode) || setgid(stb.st_gid) < 0)
{
! if (ctladdr->q_uid == 0)
{
(void) initgroups(DefUser, DefGid);
}
--- 2170,2176 ----
if (!bitset(S_ISGID, mode) || setgid(stb.st_gid) < 0)
{
! if (ctladdr == NULL || ctladdr->q_uid == 0)
{
(void) initgroups(DefUser, DefGid);
}
***************
*** 2047,2053 ****
}
if (!bitset(S_ISUID, mode) || setuid(stb.st_uid) < 0)
{
! if (ctladdr->q_uid == 0)
(void) setuid(DefUid);
else
(void) setuid(ctladdr->q_uid);
--- 2183,2189 ----
}
if (!bitset(S_ISUID, mode) || setuid(stb.st_uid) < 0)
{
! if (ctladdr == NULL || ctladdr->q_uid == 0)
(void) setuid(DefUid);
else
(void) setuid(ctladdr->q_uid);
***************
*** 2174,2180 ****
if (nmx <= 0)
{
register MCI *mci;
- extern int errno;
/* update the connection info for this host */
mci = mci_get(hp, m);
--- 2310,2315 ----
*** src/domain.c.OLD Fri Nov 26 17:49:18 1993
--- src/domain.c Tue Dec 21 14:52:18 1993
***************
*** 36,44 ****
#ifndef lint
#ifdef NAMED_BIND
! static char sccsid[] = "@(#)domain.c 8.8 (Berkeley) 9/29/93 (with name server)";
#else
! static char sccsid[] = "@(#)domain.c 8.8 (Berkeley) 9/29/93 (without name server)";
#endif
#endif /* not lint */
--- 36,44 ----
#ifndef lint
#ifdef NAMED_BIND
! static char sccsid[] = "@(#)domain.c 8.10 (Berkeley) 12/21/93 (with name server)";
#else
! static char sccsid[] = "@(#)domain.c 8.10 (Berkeley) 12/21/93 (without name server)";
#endif
#endif /* not lint */
***************
*** 158,163 ****
--- 158,169 ----
case HOST_NOT_FOUND:
/* the host just doesn't exist */
*rcode = EX_NOHOST;
+
+ if (!UseNameServer)
+ {
+ /* might exist in /etc/hosts */
+ goto punt;
+ }
break;
case TRY_AGAIN:
***************
*** 419,426 ****
--- 425,434 ----
bool gotmx;
int qtype;
int loopcnt;
+ char *xp;
char nbuf[MAX(PACKETSZ, MAXDNAME*2+2)];
char *searchlist[MAXDNSRCH+2];
+ extern char *gethostalias();
if (tTd(8, 2))
printf("getcanonname(%s)\n", host);
***************
*** 444,449 ****
--- 452,471 ----
if (*cp == '.')
n++;
+ if (n == 0 && (xp = gethostalias(host)) != NULL)
+ {
+ if (loopcnt++ > MAXCNAMEDEPTH)
+ {
+ syserr("loop in ${HOSTALIASES} file");
+ }
+ else
+ {
+ strncpy(host, xp, hbsize);
+ host[hbsize - 1] = '\0';
+ goto cnameloop;
+ }
+ }
+
dp = searchlist;
if (n > 0)
*dp++ = "";
***************
*** 636,641 ****
--- 658,711 ----
host[hbsize - 1] = '\0';
return TRUE;
}
+
+
+ char *
+ gethostalias(host)
+ char *host;
+ {
+ char *fname;
+ FILE *fp;
+ register char *p;
+ char buf[MAXLINE];
+ static char hbuf[MAXDNAME];
+
+ fname = getenv("HOSTALIASES");
+ if (fname == NULL || (fp = fopen(fname, "r")) == NULL)
+ return NULL;
+ while (fgets(buf, sizeof buf, fp) != NULL)
+ {
+ for (p = buf; p != '\0' && !(isascii(*p) && isspace(*p)); p++)
+ continue;
+ if (*p == 0)
+ {
+ /* syntax error */
+ continue;
+ }
+ *p++ = '\0';
+ if (strcasecmp(buf, host) == 0)
+ break;
+ }
+
+ if (feof(fp))
+ {
+ /* no match */
+ fclose(fp);
+ return NULL;
+ }
+
+ /* got a match; extract the equivalent name */
+ while (*p != '\0' && isascii(*p) && isspace(*p))
+ p++;
+ host = p;
+ while (*p != '\0' && !(isascii(*p) && isspace(*p)))
+ p++;
+ *p = '\0';
+ strncpy(hbuf, host, sizeof hbuf - 1);
+ hbuf[sizeof hbuf - 1] = '\0';
+ return hbuf;
+ }
+
#else /* not NAMED_BIND */
*** src/envelope.c.OLD Tue Nov 9 14:38:25 1993
--- src/envelope.c Sun Jan 9 09:22:39 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)envelope.c 8.17 (Berkeley) 10/31/93";
#endif /* not lint */
#include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)envelope.c 8.28 (Berkeley) 1/9/94";
#endif /* not lint */
#include "sendmail.h"
***************
*** 110,116 ****
{
printf("dropenvelope %x: id=", e);
xputs(e->e_id);
! printf(", flags=%o\n", e->e_flags);
if (tTd(50, 10))
{
printf("sendq=");
--- 110,116 ----
{
printf("dropenvelope %x: id=", e);
xputs(e->e_id);
! printf(", flags=0x%x\n", e->e_flags);
if (tTd(50, 10))
{
printf("sendq=");
***************
*** 123,132 ****
return;
#ifdef LOG
if (LogLevel > 84)
! syslog(LOG_DEBUG, "dropenvelope, id=%s, flags=%o, pid=%d",
id, e->e_flags, getpid());
#endif /* LOG */
/* post statistics */
poststats(StatFile);
--- 123,135 ----
return;
#ifdef LOG
+ if (LogLevel > 4 && bitset(EF_LOGSENDER, e->e_flags))
+ logsender(e, NULL);
if (LogLevel > 84)
! syslog(LOG_DEBUG, "dropenvelope, id=%s, flags=0x%x, pid=%d",
id, e->e_flags, getpid());
#endif /* LOG */
+ e->e_flags &= ~EF_LOGSENDER;
/* post statistics */
poststats(StatFile);
***************
*** 214,219 ****
--- 217,223 ----
(void) sendtolist(e->e_receiptto, NULLADDR, &rlist, e);
(void) returntosender("Return receipt", rlist, FALSE, e);
+ e->e_flags &= ~EF_SENDRECEIPT;
}
/*
***************
*** 272,280 ****
(void) xfclose(e->e_dfp, "dropenvelope", e->e_df);
e->e_dfp = NULL;
e->e_id = e->e_df = NULL;
- #ifdef XDEBUG
- checkfd012("dropenvelope");
- #endif
}
/*
** CLEARENVELOPE -- clear an envelope without unlocking
--- 276,281 ----
***************
*** 583,589 ****
** Username can return errno != 0 on non-errors.
*/
! if (bitset(EF_QUEUERUN, e->e_flags) || OpMode == MD_SMTP)
realname = from;
if (realname == NULL || realname[0] == '\0')
realname = username();
--- 584,591 ----
** Username can return errno != 0 on non-errors.
*/
! if (bitset(EF_QUEUERUN, e->e_flags) || OpMode == MD_SMTP ||
! OpMode == MD_DAEMON)
realname = from;
if (realname == NULL || realname[0] == '\0')
realname = username();
***************
*** 619,625 ****
}
syslog(LOG_NOTICE,
"setsender: %s: invalid or unparseable, received from %s",
! from, p);
}
# endif /* LOG */
if (from != NULL)
--- 621,627 ----
}
syslog(LOG_NOTICE,
"setsender: %s: invalid or unparseable, received from %s",
! shortenstring(from, 83), p);
}
# endif /* LOG */
if (from != NULL)
***************
*** 681,687 ****
** We have an alternate address for the sender
*/
! pvp = prescan(p, '\0', pvpbuf, NULL);
}
# endif /* USERDB */
}
--- 683,689 ----
** We have an alternate address for the sender
*/
! pvp = prescan(p, '\0', pvpbuf, sizeof pvpbuf, NULL);
}
# endif /* USERDB */
}
***************
*** 700,705 ****
--- 702,708 ----
/* extract user and group id */
e->e_from.q_uid = pw->pw_uid;
e->e_from.q_gid = pw->pw_gid;
+ e->e_from.q_flags |= QGOODUID;
/* extract full name from passwd file */
if (FullName == NULL && pw->pw_gecos != NULL &&
***************
*** 714,725 ****
if (FullName != NULL && !internal)
define('x', FullName, e);
}
! else if (!internal)
{
if (e->e_from.q_home == NULL)
e->e_from.q_home = getenv("HOME");
e->e_from.q_uid = RealUid;
e->e_from.q_gid = RealGid;
}
/*
--- 717,729 ----
if (FullName != NULL && !internal)
define('x', FullName, e);
}
! else if (!internal && OpMode != MD_DAEMON)
{
if (e->e_from.q_home == NULL)
e->e_from.q_home = getenv("HOME");
e->e_from.q_uid = RealUid;
e->e_from.q_gid = RealGid;
+ e->e_from.q_flags |= QGOODUID;
}
/*
***************
*** 728,734 ****
*/
if (pvp == NULL)
! pvp = prescan(from, '\0', pvpbuf, NULL);
if (pvp == NULL)
{
/* don't need to give error -- prescan did that already */
--- 732,738 ----
*/
if (pvp == NULL)
! pvp = prescan(from, delimchar, pvpbuf, sizeof pvpbuf, NULL);
if (pvp == NULL)
{
/* don't need to give error -- prescan did that already */
***************
*** 738,746 ****
# endif
finis();
}
! (void) rewrite(pvp, 3, e);
! (void) rewrite(pvp, 1, e);
! (void) rewrite(pvp, 4, e);
bp = buf + 1;
cataddr(pvp, NULL, bp, sizeof buf - 2, '\0');
if (*bp == '@')
--- 742,750 ----
# endif
finis();
}
! (void) rewrite(pvp, 3, 0, e);
! (void) rewrite(pvp, 1, 0, e);
! (void) rewrite(pvp, 4, 0, e);
bp = buf + 1;
cataddr(pvp, NULL, bp, sizeof buf - 2, '\0');
if (*bp == '@')
***************
*** 753,759 ****
define('f', e->e_sender, e);
/* save the domain spec if this mailer wants it */
! if (!internal && e->e_from.q_mailer != NULL &&
bitnset(M_CANONICAL, e->e_from.q_mailer->m_flags))
{
extern char **copyplist();
--- 757,763 ----
define('f', e->e_sender, e);
/* save the domain spec if this mailer wants it */
! if (e->e_from.q_mailer != NULL &&
bitnset(M_CANONICAL, e->e_from.q_mailer->m_flags))
{
extern char **copyplist();
*** src/err.c.OLD Sun Nov 7 12:03:39 1993
--- src/err.c Sat Jan 8 17:29:31 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)err.c 8.14 (Berkeley) 10/29/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)err.c 8.19 (Berkeley) 1/8/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 159,166 ****
#endif
{
VA_LOCAL_DECL
- extern char SuprErrs;
- extern int errno;
if (SuprErrs)
return;
--- 159,164 ----
***************
*** 287,299 ****
msg[0] = '5';
(void) fflush(stdout);
! if (OpMode == MD_SMTP)
fprintf(OutChannel, "%s\r\n", msg);
else
fprintf(OutChannel, "%s\n", &msg[4]);
if (TrafficLogFile != NULL)
fprintf(TrafficLogFile, "%05d >>> %s\n", getpid(),
! OpMode == MD_SMTP ? msg : &msg[4]);
if (msg[3] == ' ')
(void) fflush(OutChannel);
if (!ferror(OutChannel))
--- 285,297 ----
msg[0] = '5';
(void) fflush(stdout);
! if (OpMode == MD_SMTP || OpMode == MD_DAEMON)
fprintf(OutChannel, "%s\r\n", msg);
else
fprintf(OutChannel, "%s\n", &msg[4]);
if (TrafficLogFile != NULL)
fprintf(TrafficLogFile, "%05d >>> %s\n", getpid(),
! (OpMode == MD_SMTP || OpMode == MD_DAEMON) ? msg : &msg[4]);
if (msg[3] == ' ')
(void) fflush(OutChannel);
if (!ferror(OutChannel))
***************
*** 449,454 ****
--- 447,453 ----
errstring(errno)
int errno;
{
+ char *dnsmsg;
static char buf[MAXLINE];
# ifndef ERRLIST_PREDEFINED
extern char *sys_errlist[];
***************
*** 458,465 ****
extern char *SmtpPhase;
# endif /* SMTP */
- # ifdef DAEMON
- # ifdef ETIMEDOUT
/*
** Handle special network error codes.
**
--- 457,462 ----
***************
*** 466,473 ****
--- 463,472 ----
** These are 4.2/4.3bsd specific; they should be in daemon.c.
*/
+ dnsmsg = NULL;
switch (errno)
{
+ # if defined(DAEMON) && defined(ETIMEDOUT)
case ETIMEDOUT:
case ECONNRESET:
(void) strcpy(buf, sys_errlist[errno]);
***************
*** 494,499 ****
--- 493,499 ----
break;
(void) sprintf(buf, "Connection refused by %s", CurHostName);
return (buf);
+ # endif
case EOPENTIMEOUT:
return "Timeout on file open";
***************
*** 500,519 ****
# ifdef NAMED_BIND
case HOST_NOT_FOUND + E_DNSBASE:
! return ("Name server: host not found");
case TRY_AGAIN + E_DNSBASE:
! return ("Name server: host name lookup failure");
case NO_RECOVERY + E_DNSBASE:
! return ("Name server: non-recoverable error");
case NO_DATA + E_DNSBASE:
! return ("Name server: no data known for name");
# endif
}
! # endif
! # endif
if (errno > 0 && errno < sys_nerr)
return (sys_errlist[errno]);
--- 500,537 ----
# ifdef NAMED_BIND
case HOST_NOT_FOUND + E_DNSBASE:
! dnsmsg = "host not found";
! break;
case TRY_AGAIN + E_DNSBASE:
! dnsmsg = "host name lookup failure";
! break;
case NO_RECOVERY + E_DNSBASE:
! dnsmsg = "non-recoverable error";
! break;
case NO_DATA + E_DNSBASE:
! dnsmsg = "no data known";
! break;
# endif
+
+ case EPERM:
+ /* SunOS gives "Not owner" -- this is the POSIX message */
+ return "Operation not permitted";
}
!
! if (dnsmsg != NULL)
! {
! (void) strcpy(buf, "Name server: ");
! if (CurHostName != NULL)
! {
! (void) strcat(buf, CurHostName);
! (void) strcat(buf, ": ");
! }
! (void) strcat(buf, dnsmsg);
! return buf;
! }
if (errno > 0 && errno < sys_nerr)
return (sys_errlist[errno]);
*** src/features.linux.h.OLD Thu Dec 16 16:02:45 1993
--- src/features.linux.h Thu Dec 9 13:43:51 1993
***************
*** 0 ****
--- 1,14 ----
+ /*
+ ** This should be renamed features.h on Linux. DO NOT USE IT
+ ** on any other system.
+ */
+
+ #include_next
+ #undef __USE_POSIX2
+
+ #ifndef __USE_POSIX
+ #define __USE_POSIX
+ #endif
+ #ifndef __USE_BSD
+ #define __USE_BSD
+ #endif
*** src/headers.c.OLD Thu Dec 9 13:50:15 1993
--- src/headers.c Wed Jan 12 12:38:49 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)headers.c 8.13 (Berkeley) 10/24/93";
#endif /* not lint */
# include
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)headers.c 8.22 (Berkeley) 1/13/94";
#endif /* not lint */
# include
***************
*** 371,376 ****
--- 371,381 ----
else
define('u', NULL, e);
+ /* full name of from person */
+ p = hvalue("full-name", e);
+ if (p != NULL)
+ define('x', p, e);
+
if (tTd(32, 1))
printf("----- collected header -----\n");
msgid = "";
***************
*** 395,401 ****
}
if (tTd(32, 1))
! printf("%s: %s\n", h->h_field, h->h_value);
/* count the number of times it has been processed */
if (bitset(H_TRACE, h->h_flags))
--- 400,410 ----
}
if (tTd(32, 1))
! {
! printf("%s: ", h->h_field);
! xputs(h->h_value);
! printf("\n");
! }
/* count the number of times it has been processed */
if (bitset(H_TRACE, h->h_flags))
***************
*** 453,463 ****
- e->e_class * WkClassFact
+ e->e_nrcpts * WkRecipFact;
- /* full name of from person */
- p = hvalue("full-name", e);
- if (p != NULL)
- define('x', p, e);
-
/* date message originated */
p = hvalue("posted-date", e);
if (p == NULL)
--- 462,467 ----
***************
*** 471,518 ****
# ifdef LOG
if (full && LogLevel > 4)
! {
! char *name;
! register char *sbp;
! char hbuf[MAXNAME];
! char sbuf[MAXLINE];
! if (bitset(EF_RESPONSE, e->e_flags))
! name = "[RESPONSE]";
! else if ((name = macvalue('_', e)) != NULL)
! ;
! else if (RealHostName[0] == '[')
! name = RealHostName;
! else
{
! name = hbuf;
! (void) sprintf(hbuf, "%.80s", RealHostName);
! if (RealHostAddr.sa.sa_family != 0)
! {
! p = &hbuf[strlen(hbuf)];
! (void) sprintf(p, " (%s)",
! anynet_ntoa(&RealHostAddr));
! }
}
! /* some versions of syslog only take 5 printf args */
! sbp = sbuf;
! sprintf(sbp, "from=%.200s, size=%ld, class=%d, pri=%ld, nrcpts=%d, msgid=%.100s",
! e->e_from.q_paddr, e->e_msgsize, e->e_class,
! e->e_msgpriority, e->e_nrcpts, msgid);
sbp += strlen(sbp);
- if (e->e_bodytype != NULL)
- {
- (void) sprintf(sbp, ", bodytype=%.20s", e->e_bodytype);
- sbp += strlen(sbp);
- }
- p = macvalue('r', e);
- if (p != NULL)
- (void) sprintf(sbp, ", proto=%.20s", p);
- syslog(LOG_INFO, "%s: %s, relay=%s",
- e->e_id, sbuf, name);
}
! # endif /* LOG */
}
/*
** PRIENCODE -- encode external priority names into internal values.
--- 475,571 ----
# ifdef LOG
if (full && LogLevel > 4)
! logsender(e, msgid);
! # endif /* LOG */
! e->e_flags &= ~EF_LOGSENDER;
! }
! /*
! ** LOGSENDER -- log sender information
! **
! ** Parameters:
! ** e -- the envelope to log
! ** msgid -- the message id
! **
! ** Returns:
! ** none
! */
! logsender(e, msgid)
! register ENVELOPE *e;
! char *msgid;
! {
! char *name;
! register char *sbp;
! register char *p;
! char hbuf[MAXNAME];
! char sbuf[MAXLINE];
!
! if (bitset(EF_RESPONSE, e->e_flags))
! name = "[RESPONSE]";
! else if ((name = macvalue('_', e)) != NULL)
! ;
! else if (RealHostName[0] == '[')
! name = RealHostName;
! else
! {
! name = hbuf;
! (void) sprintf(hbuf, "%.80s", RealHostName);
! if (RealHostAddr.sa.sa_family != 0)
{
! p = &hbuf[strlen(hbuf)];
! (void) sprintf(p, " (%s)",
! anynet_ntoa(&RealHostAddr));
}
+ }
! /* some versions of syslog only take 5 printf args */
! # if (SYSLOG_BUFSIZE) >= 256
! sbp = sbuf;
! sprintf(sbp, "from=%.200s, size=%ld, class=%d, pri=%ld, nrcpts=%d",
! e->e_from.q_paddr, e->e_msgsize, e->e_class,
! e->e_msgpriority, e->e_nrcpts);
! sbp += strlen(sbp);
! if (msgid != NULL)
! {
! sprintf(sbp, ", msgid=%.100s", msgid);
sbp += strlen(sbp);
}
! if (e->e_bodytype != NULL)
! {
! (void) sprintf(sbp, ", bodytype=%.20s", e->e_bodytype);
! sbp += strlen(sbp);
! }
! p = macvalue('r', e);
! if (p != NULL)
! (void) sprintf(sbp, ", proto=%.20s", p);
! syslog(LOG_INFO, "%s: %s, relay=%s",
! e->e_id, sbuf, name);
!
! # else /* short syslog buffer */
!
! syslog(LOG_INFO, "%s: from=%s",
! e->e_id, shortenstring(e->e_from.q_paddr, 83));
! syslog(LOG_INFO, "%s: size=%ld, class=%ld, pri=%ld, nrcpts=%d",
! e->e_id, e->e_msgsize, e->e_class,
! e->e_msgpriority, e->e_nrcpts);
! if (msgid != NULL)
! syslog(LOG_INFO, "%s: msgid=%s", e->e_id, msgid);
! sbp = sbuf;
! sprintf(sbp, "%s:", e->e_id);
! sbp += strlen(sbp);
! if (e->e_bodytype != NULL)
! {
! sprintf(sbp, " bodytype=%s,", e->e_bodytype);
! sbp += strlen(sbp);
! }
! p = macvalue('r', e);
! if (p != NULL)
! {
! sprintf(sbp, " proto=%s,", p);
! sbp += strlen(sbp);
! }
! syslog(LOG_INFO, "%s relay=%s", sbuf, name);
! # endif
}
/*
** PRIENCODE -- encode external priority names into internal values.
***************
*** 639,645 ****
}
/* check for quoted strings */
! if (c == '"')
{
qmode = !qmode;
if (copylev > 0 && !skipping)
--- 692,698 ----
}
/* check for quoted strings */
! if (c == '"' && cmtlev <= 0)
{
qmode = !qmode;
if (copylev > 0 && !skipping)
***************
*** 683,693 ****
else if (c == ')')
{
/* syntax error: unmatched ) */
! if (!skipping)
bp--;
}
-
/* check for characters that may have to be quoted */
if (strchr(".'@,;:\\()[]", c) != NULL)
{
--- 736,745 ----
else if (c == ')')
{
/* syntax error: unmatched ) */
! if (copylev > 0 && !skipping)
bp--;
}
/* check for characters that may have to be quoted */
if (strchr(".'@,;:\\()[]", c) != NULL)
{
***************
*** 864,882 ****
printf(" (skipped (resent))\n");
continue;
}
- if (tTd(34, 11))
- printf("\n");
p = h->h_value;
if (bitset(H_DEFAULT, h->h_flags))
{
- /* macro expand value if generated internally */
expand(p, buf, &buf[sizeof buf], e);
p = buf;
if (p == NULL || *p == '\0')
continue;
}
if (bitset(H_FROM|H_RCPT, h->h_flags))
{
/* address field */
--- 916,939 ----
printf(" (skipped (resent))\n");
continue;
}
+ /* macro expand value if generated internally */
p = h->h_value;
if (bitset(H_DEFAULT, h->h_flags))
{
expand(p, buf, &buf[sizeof buf], e);
p = buf;
if (p == NULL || *p == '\0')
+ {
+ if (tTd(34, 11))
+ printf(" (skipped -- null value)\n");
continue;
+ }
}
+ if (tTd(34, 11))
+ printf("\n");
+
if (bitset(H_FROM|H_RCPT, h->h_flags))
{
/* address field */
***************
*** 980,986 ****
auto char *oldp;
char pvpbuf[PSBUFSIZE];
! (void) prescan(p, oldstyle ? ' ' : ',', pvpbuf, &oldp);
p = oldp;
/* look to see if we have an at sign */
--- 1037,1044 ----
auto char *oldp;
char pvpbuf[PSBUFSIZE];
! (void) prescan(p, oldstyle ? ' ' : ',', pvpbuf,
! sizeof pvpbuf, &oldp);
p = oldp;
/* look to see if we have an at sign */
*** src/main.c.OLD Sun Nov 7 16:45:33 1993
--- src/main.c Sun Jan 9 11:09:20 1994
***************
*** 39,45 ****
#endif /* not lint */
#ifndef lint
! static char sccsid[] = "@(#)main.c 8.33 (Berkeley) 10/24/93";
#endif /* not lint */
#define _DEFINE
--- 39,45 ----
#endif /* not lint */
#ifndef lint
! static char sccsid[] = "@(#)main.c 8.46 (Berkeley) 1/9/94";
#endif /* not lint */
#define _DEFINE
***************
*** 155,160 ****
--- 155,161 ----
extern char *getcfname();
extern char *optarg;
extern char **environ;
+ extern void dumpstate();
/*
** Check to see if we reentered.
***************
*** 170,177 ****
reenter = TRUE;
/* do machine-dependent initializations */
! init_md();
/* in 4.4BSD, the table can be huge; impose a reasonable limit */
DtableSize = getdtsize();
if (DtableSize > 256)
--- 171,183 ----
reenter = TRUE;
/* do machine-dependent initializations */
! init_md(argc, argv);
+ /* arrange to dump state on signal */
+ #ifdef SIGUSR1
+ setsignal(SIGUSR1, dumpstate);
+ #endif
+
/* in 4.4BSD, the table can be huge; impose a reasonable limit */
DtableSize = getdtsize();
if (DtableSize > 256)
***************
*** 253,265 ****
#if defined(__osf__) || defined(_AIX3)
# define OPTIONS "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:x"
- #else
- # if defined(ultrix)
- # define OPTIONS "B:b:C:cd:e:F:f:h:IiM:mno:p:q:r:sTtvX:"
- # else
- # define OPTIONS "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:"
- # endif
#endif
while ((j = getopt(argc, argv, OPTIONS)) != EOF)
{
switch (j)
--- 259,274 ----
#if defined(__osf__) || defined(_AIX3)
# define OPTIONS "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:x"
#endif
+ #if defined(ultrix)
+ # define OPTIONS "B:b:C:cd:e:F:f:h:IiM:mno:p:q:r:sTtvX:"
+ #endif
+ #if defined(NeXT)
+ # define OPTIONS "B:b:C:cd:e:F:f:h:IimnOo:p:q:r:sTtvX:"
+ #endif
+ #ifndef OPTIONS
+ # define OPTIONS "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:"
+ #endif
while ((j = getopt(argc, argv, OPTIONS)) != EOF)
{
switch (j)
***************
*** 334,343 ****
if (tTd(0, 4))
printf("canonical name: %s\n", jbuf);
- p = newstr(jbuf);
define('w', newstr(jbuf), CurEnv); /* must be new string */
! define('j', p, CurEnv);
! setclass('w', p);
p = strchr(jbuf, '.');
if (p != NULL)
--- 343,351 ----
if (tTd(0, 4))
printf("canonical name: %s\n", jbuf);
define('w', newstr(jbuf), CurEnv); /* must be new string */
! define('j', newstr(jbuf), CurEnv);
! setclass('w', jbuf);
p = strchr(jbuf, '.');
if (p != NULL)
***************
*** 360,365 ****
--- 368,375 ----
p = utsname.nodename;
else
{
+ if (tTd(0, 22))
+ printf("uname failed (%s)\n", errstring(errno));
makelower(jbuf);
p = jbuf;
}
***************
*** 367,372 ****
--- 377,383 ----
printf("UUCP nodename: %s\n", p);
p = newstr(p);
define('k', p, CurEnv);
+ setclass('k', p);
setclass('w', p);
}
while (av != NULL && *av != NULL)
***************
*** 586,591 ****
--- 597,606 ----
case 'x': /* random flag that OSF/1 & AIX mailx passes */
break;
# endif
+ # if defined(NeXT)
+ case 'O': /* random flag that NeXT Mail.app passes */
+ break;
+ # endif
default:
ExitStat = EX_USAGE;
***************
*** 601,606 ****
--- 616,624 ----
** Extract special fields for local use.
*/
+ #ifdef XDEBUG
+ checkfd012("before readcf");
+ #endif
readcf(getcfname(), safecf, CurEnv);
if (tTd(0, 1))
***************
*** 761,766 ****
--- 779,788 ----
exit(ExitStat);
}
+ #ifdef XDEBUG
+ checkfd012("before main() initmaps");
+ #endif
+
/*
** Do operation-mode-dependent initialization.
*/
***************
*** 899,905 ****
{
char pvpbuf[PSBUFSIZE];
! pvp = prescan(++p, ',', pvpbuf, &delimptr);
if (pvp == NULL)
continue;
p = q;
--- 921,928 ----
{
char pvpbuf[PSBUFSIZE];
! pvp = prescan(++p, ',', pvpbuf, sizeof pvpbuf,
! &delimptr);
if (pvp == NULL)
continue;
p = q;
***************
*** 907,913 ****
{
int stat;
! stat = rewrite(pvp, atoi(p), CurEnv);
if (stat != EX_OK)
printf("== Ruleset %s status %d\n",
p, stat);
--- 930,936 ----
{
int stat;
! stat = rewrite(pvp, atoi(p), 0, CurEnv);
if (stat != EX_OK)
printf("== Ruleset %s status %d\n",
p, stat);
***************
*** 1005,1011 ****
** commands. This will never return.
*/
! if (OpMode == MD_SMTP)
smtp(CurEnv);
# endif /* SMTP */
--- 1028,1034 ----
** commands. This will never return.
*/
! if (OpMode == MD_SMTP || OpMode == MD_DAEMON)
smtp(CurEnv);
# endif /* SMTP */
***************
*** 1325,1331 ****
obsolete(argv)
char *argv[];
{
! char *ap;
while ((ap = *++argv) != NULL)
{
--- 1348,1355 ----
obsolete(argv)
char *argv[];
{
! register char *ap;
! register char *op;
while ((ap = *++argv) != NULL)
{
***************
*** 1333,1342 ****
if (ap[0] != '-' || ap[1] == '-')
return;
/* If -C doesn't have an argument, use sendmail.cf. */
#define __DEFPATH "sendmail.cf"
! if (ap[1] == 'C' && ap[2] == '\0' &&
! (argv[1] == NULL || argv[1][0] == '-'))
{
*argv = xalloc(sizeof(__DEFPATH) + 2);
argv[0][0] = '-';
--- 1357,1374 ----
if (ap[0] != '-' || ap[1] == '-')
return;
+ /* skip over options that do have a value */
+ op = strchr(OPTIONS, ap[1]);
+ if (op != NULL && *++op == ':' && ap[2] == '\0' &&
+ argv[1] != NULL && argv[1][0] != '-')
+ {
+ argv++;
+ continue;
+ }
+
/* If -C doesn't have an argument, use sendmail.cf. */
#define __DEFPATH "sendmail.cf"
! if (ap[1] == 'C' && ap[2] == '\0')
{
*argv = xalloc(sizeof(__DEFPATH) + 2);
argv[0][0] = '-';
***************
*** 1345,1357 ****
}
/* If -q doesn't have an argument, run it once. */
! if (ap[1] == 'q' && ap[2] == '\0' &&
! (argv[1] == NULL || argv[1][0] == '-'))
*argv = "-q0";
/* if -d doesn't have an argument, use 0-99.1 */
! if (ap[1] == 'd' && ap[2] == '\0' &&
! (argv[1] == NULL || !isdigit(argv[1][0])))
*argv = "-d0-99.1";
}
}
--- 1377,1387 ----
}
/* If -q doesn't have an argument, run it once. */
! if (ap[1] == 'q' && ap[2] == '\0')
*argv = "-q0";
/* if -d doesn't have an argument, use 0-99.1 */
! if (ap[1] == 'd' && ap[2] == '\0')
*argv = "-d0-99.1";
}
}
***************
*** 1396,1399 ****
--- 1426,1466 ----
VA_END;
addheader("X-Authentication-Warning", buf, e);
}
+ }
+ /*
+ ** DUMPSTATE -- dump state on user signal
+ **
+ ** For debugging.
+ */
+
+ void
+ dumpstate()
+ {
+ #ifdef LOG
+ register char *j = macvalue('j', CurEnv);
+ register STAB *s;
+
+ syslog(LOG_DEBUG, "--- dumping state on user signal: $j = %s ---", j);
+ s = stab(j, ST_CLASS, ST_FIND);
+ if (s == NULL || !bitnset('w', s->s_class))
+ syslog(LOG_DEBUG, "*** $j not in $=w ***");
+ syslog(LOG_DEBUG, "--- open file descriptors: ---");
+ printopenfds(TRUE);
+ syslog(LOG_DEBUG, "--- connection cache: ---");
+ mci_dump_all(TRUE);
+ if (RewriteRules[89] != NULL)
+ {
+ int stat;
+ register char **pvp;
+ char *pv[MAXATOM + 1];
+
+ pv[0] = NULL;
+ stat = rewrite(pv, 89, 0, CurEnv);
+ syslog(LOG_DEBUG, "--- ruleset 89 returns stat %d, pv: ---",
+ stat);
+ for (pvp = pv; *pvp != NULL; pvp++)
+ syslog(LOG_DEBUG, "%s", *pvp);
+ }
+ syslog(LOG_DEBUG, "--- end of state dump ---");
+ #endif
}
*** src/map.c.OLD Thu Nov 25 08:16:17 1993
--- src/map.c Sat Dec 11 08:26:17 1993
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)map.c 8.17 (Berkeley) 10/15/93";
#endif /* not lint */
#include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)map.c 8.20 (Berkeley) 12/11/93";
#endif /* not lint */
#include "sendmail.h"
***************
*** 336,342 ****
checkfd012("entering initmaps");
#endif
CurEnv = e;
! stabapply(map_init, rebuild);
#ifdef XDEBUG
checkfd012("exiting initmaps");
#endif
--- 336,350 ----
checkfd012("entering initmaps");
#endif
CurEnv = e;
! if (rebuild)
! {
! stabapply(map_init, 1);
! stabapply(map_init, 2);
! }
! else
! {
! stabapply(map_init, 0);
! }
#ifdef XDEBUG
checkfd012("exiting initmaps");
#endif
***************
*** 358,368 ****
return;
if (tTd(38, 2))
! printf("map_init(%s:%s)\n",
map->map_class->map_cname == NULL ? "NULL" :
map->map_class->map_cname,
! map->map_file == NULL ? "NULL" : map->map_file);
/* if already open, close it (for nested open) */
if (bitset(MF_OPEN, map->map_mflags))
{
--- 366,385 ----
return;
if (tTd(38, 2))
! printf("map_init(%s:%s, %d)\n",
map->map_class->map_cname == NULL ? "NULL" :
map->map_class->map_cname,
! map->map_file == NULL ? "NULL" : map->map_file,
! rebuild);
+ if (rebuild == (bitset(MF_ALIAS, map->map_mflags) &&
+ bitset(MCF_REBUILDABLE, map->map_class->map_cflags) ? 1 : 2))
+ {
+ if (tTd(38, 3))
+ printf("\twrong pass\n");
+ return;
+ }
+
/* if already open, close it (for nested open) */
if (bitset(MF_OPEN, map->map_mflags))
{
***************
*** 370,380 ****
map->map_mflags &= ~(MF_OPEN|MF_WRITABLE);
}
! if (rebuild)
{
! if (bitset(MF_ALIAS, map->map_mflags) &&
! bitset(MCF_REBUILDABLE, map->map_class->map_cflags))
! rebuildaliases(map, FALSE);
}
else
{
--- 387,395 ----
map->map_mflags &= ~(MF_OPEN|MF_WRITABLE);
}
! if (rebuild == 2)
{
! rebuildaliases(map, FALSE);
}
else
{
***************
*** 381,387 ****
if (map->map_class->map_open(map, O_RDONLY))
{
if (tTd(38, 4))
! printf("%s:%s: valid\n",
map->map_class->map_cname == NULL ? "NULL" :
map->map_class->map_cname,
map->map_file == NULL ? "NULL" :
--- 396,402 ----
if (map->map_class->map_open(map, O_RDONLY))
{
if (tTd(38, 4))
! printf("\t%s:%s: valid\n",
map->map_class->map_cname == NULL ? "NULL" :
map->map_class->map_cname,
map->map_file == NULL ? "NULL" :
***************
*** 389,395 ****
map->map_mflags |= MF_OPEN;
}
else if (tTd(38, 4))
! printf("%s:%s: invalid: %s\n",
map->map_class->map_cname == NULL ? "NULL" :
map->map_class->map_cname,
map->map_file == NULL ? "NULL" :
--- 404,410 ----
map->map_mflags |= MF_OPEN;
}
else if (tTd(38, 4))
! printf("\t%s:%s: invalid: %s\n",
map->map_class->map_cname == NULL ? "NULL" :
map->map_class->map_cname,
map->map_file == NULL ? "NULL" :
***************
*** 434,442 ****
return FALSE;
}
map->map_db1 = (void *) dbm;
! if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
! if (!aliaswait(map, ".pag", TRUE))
return FALSE;
if (fstat(dbm_dirfno((DBM *) map->map_db1), &st) >= 0)
map->map_mtime = st.st_mtime;
return TRUE;
--- 449,470 ----
return FALSE;
}
map->map_db1 = (void *) dbm;
! if (mode == O_RDONLY)
! {
! if (bitset(MF_ALIAS, map->map_mflags) &&
! !aliaswait(map, ".pag", TRUE))
return FALSE;
+ }
+ else
+ {
+ int fd;
+
+ /* exclusive lock for duration of rebuild */
+ fd = dbm_dirfno((DBM *) map->map_db1);
+ if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags) &&
+ lockfile(fd, map->map_file, ".dir", LOCK_EX))
+ map->map_mflags |= MF_LOCKED;
+ }
if (fstat(dbm_dirfno((DBM *) map->map_db1), &st) >= 0)
map->map_mtime = st.st_mtime;
return TRUE;
***************
*** 559,565 ****
(void) sprintf(buf, "%010ld", curtime());
ndbm_map_store(map, "YP_LAST_MODIFIED", buf);
! (void) myhostname(buf, sizeof buf);
ndbm_map_store(map, "YP_MASTER_NAME", buf);
if (inclnull)
--- 587,593 ----
(void) sprintf(buf, "%010ld", curtime());
ndbm_map_store(map, "YP_LAST_MODIFIED", buf);
! (void) gethostname(buf, sizeof buf);
ndbm_map_store(map, "YP_MASTER_NAME", buf);
if (inclnull)
***************
*** 1237,1242 ****
--- 1265,1273 ----
#if defined(NEWDB) || defined(NDBM)
if (Verbose)
message("WARNING: cannot open alias database %s", map->map_file);
+ #else
+ if (mode != O_RDONLY)
+ usrerr("Cannot rebuild aliases: no database format defined");
#endif
return stab_map_open(map, mode);
*** src/mci.c.OLD Sun Nov 7 15:01:11 1993
--- src/mci.c Wed Dec 1 14:01:45 1993
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)mci.c 8.6 (Berkeley) 10/23/93";
#endif /* not lint */
#include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)mci.c 8.9 (Berkeley) 12/1/93";
#endif /* not lint */
#include "sendmail.h"
***************
*** 275,280 ****
--- 275,282 ----
bzero(&CurHostAddr, sizeof CurHostAddr);
#endif
+ if (m->m_mno < 0)
+ syserr("negative mno %d (%s)", m->m_mno, m->m_name);
s = stab(host, ST_MCI + m->m_mno, ST_ENTER);
mci = &s->s_mci;
mci->mci_host = s->s_name;
***************
*** 348,354 ****
ctime(&mci->mci_lastuse));
printit:
if (logit)
! syslog(LOG_INFO, "%s", buf);
else
printf("%s\n", buf);
}
--- 350,356 ----
ctime(&mci->mci_lastuse));
printit:
if (logit)
! syslog(LOG_DEBUG, "%s", buf);
else
printf("%s\n", buf);
}
***************
*** 367,372 ****
--- 369,377 ----
bool logit;
{
register int i;
+
+ if (MciCache == NULL)
+ return;
for (i = 0; i < MaxMciCache; i++)
mci_dump(MciCache[i], logit);
*** src/parseaddr.c.OLD Sun Nov 14 10:30:10 1993
--- src/parseaddr.c Wed Jan 5 09:20:14 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)parseaddr.c 8.17 (Berkeley) 10/31/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)parseaddr.c 8.29 (Berkeley) 1/5/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 103,109 ****
if (delimptr == NULL)
delimptr = &delimptrbuf;
! pvp = prescan(addr, delim, pvpbuf, delimptr);
if (pvp == NULL)
{
if (tTd(20, 1))
--- 103,109 ----
if (delimptr == NULL)
delimptr = &delimptrbuf;
! pvp = prescan(addr, delim, pvpbuf, sizeof pvpbuf, delimptr);
if (pvp == NULL)
{
if (tTd(20, 1))
***************
*** 143,151 ****
*/
queueup = FALSE;
! if (rewrite(pvp, 3, e) == EX_TEMPFAIL)
queueup = TRUE;
! if (rewrite(pvp, 0, e) == EX_TEMPFAIL)
queueup = TRUE;
--- 143,151 ----
*/
queueup = FALSE;
! if (rewrite(pvp, 3, 0, e) == EX_TEMPFAIL)
queueup = TRUE;
! if (rewrite(pvp, 0, 0, e) == EX_TEMPFAIL)
queueup = TRUE;
***************
*** 308,313 ****
--- 308,314 ----
** If '\t' then we are reading the .cf file.
** pvpbuf -- place to put the saved text -- note that
** the pointers are static.
+ ** pvpbsize -- size of pvpbuf.
** delimptr -- if non-NULL, set to the location of the
** terminating delimiter.
**
***************
*** 341,350 ****
/*ONE*/ OPR, OPR, OPR, OPR, OPR,
};
# define NOCHAR -1 /* signal nothing in lookahead token */
char **
! prescan(addr, delim, pvpbuf, delimptr)
char *addr;
char delim;
char pvpbuf[];
--- 342,375 ----
/*ONE*/ OPR, OPR, OPR, OPR, OPR,
};
+ /* token type table -- it gets modified with $o characters */
+ static TokTypeTab[256] =
+ {
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,SPC,SPC,SPC,SPC,SPC,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ SPC,ATM,QST,ATM,ATM,ATM,ATM,ATM,ATM,SPC,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ OPR,OPR,ONE,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,
+ OPR,OPR,OPR,ONE,ONE,ONE,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,OPR,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,ATM,
+ };
+
+ #define toktype(c) ((int) TokTypeTab[(c) & 0xff])
+
+
# define NOCHAR -1 /* signal nothing in lookahead token */
char **
! prescan(addr, delim, pvpbuf, pvpbsize, delimptr)
char *addr;
char delim;
char pvpbuf[];
***************
*** 362,369 ****
--- 387,410 ----
int newstate;
char *saveto = CurEnv->e_to;
static char *av[MAXATOM+1];
+ static char firsttime = TRUE;
extern int errno;
+ if (firsttime)
+ {
+ /* initialize the token type table */
+ char obuf[50];
+
+ firsttime = FALSE;
+ expand("\201o", obuf, &obuf[sizeof obuf - sizeof DELIMCHARS], CurEnv);
+ strcat(obuf, DELIMCHARS);
+ for (p = obuf; *p != '\0'; p++)
+ {
+ if (TokTypeTab[*p & 0xff] == ATM)
+ TokTypeTab[*p & 0xff] = OPR;
+ }
+ }
+
/* make sure error messages don't have garbage on them */
errno = 0;
***************
*** 393,401 ****
if (c != NOCHAR && !bslashmode)
{
/* see if there is room */
! if (q >= &pvpbuf[PSBUFSIZE - 5])
{
usrerr("553 Address too long");
if (delimptr != NULL)
*delimptr = p;
CurEnv->e_to = saveto;
--- 434,443 ----
if (c != NOCHAR && !bslashmode)
{
/* see if there is room */
! if (q >= &pvpbuf[pvpbsize - 5])
{
usrerr("553 Address too long");
+ returnnull:
if (delimptr != NULL)
*delimptr = p;
CurEnv->e_to = saveto;
***************
*** 527,537 ****
if (avp >= &av[MAXATOM])
{
syserr("553 prescan: too many tokens");
! if (delimptr != NULL)
! *delimptr = p;
! CurEnv->e_to = saveto;
! return (NULL);
}
*avp++ = tok;
}
} while (c != '\0' && (c != delim || anglecnt > 0));
--- 569,581 ----
if (avp >= &av[MAXATOM])
{
syserr("553 prescan: too many tokens");
! goto returnnull;
}
+ if (q - tok > MAXNAME)
+ {
+ syserr("553 prescan: token too long");
+ goto returnnull;
+ }
*avp++ = tok;
}
} while (c != '\0' && (c != delim || anglecnt > 0));
***************
*** 546,597 ****
}
CurEnv->e_to = saveto;
if (av[0] == NULL)
return (NULL);
return (av);
}
/*
- ** TOKTYPE -- return token type
- **
- ** Parameters:
- ** c -- the character in question.
- **
- ** Returns:
- ** Its type.
- **
- ** Side Effects:
- ** none.
- */
-
- toktype(c)
- register int c;
- {
- static char buf[50];
- static bool firstime = TRUE;
-
- if (firstime)
- {
- firstime = FALSE;
- expand("\201o", buf, &buf[sizeof buf - 1], CurEnv);
- (void) strcat(buf, DELIMCHARS);
- }
- c &= 0377;
- if (c == MATCHCLASS || c == MATCHREPL || c == MATCHNCLASS)
- return (ONE);
- if (c == MACRODEXPAND)
- return (ONE);
- if (c == '"')
- return (QST);
- if ((c & 0340) == 0200)
- return (OPR);
- if (!isascii(c))
- return (ATM);
- if (isspace(c) || c == ')')
- return (SPC);
- if (strchr(buf, c) != NULL)
- return (OPR);
- return (ATM);
- }
- /*
** REWRITE -- apply rewrite rules to token vector.
**
** This routine is an ordered production system. Each rewrite
--- 590,603 ----
}
CurEnv->e_to = saveto;
if (av[0] == NULL)
+ {
+ if (tTd(22, 1))
+ printf("prescan: null leading token\n");
return (NULL);
+ }
return (av);
}
/*
** REWRITE -- apply rewrite rules to token vector.
**
** This routine is an ordered production system. Each rewrite
***************
*** 616,621 ****
--- 622,628 ----
** Parameters:
** pvp -- pointer to token vector.
** ruleset -- the ruleset to use for rewriting.
+ ** reclevel -- recursion level (to catch loops).
** e -- the current envelope.
**
** Returns:
***************
*** 635,645 ****
# define MAXMATCH 9 /* max params per rewrite */
int
! rewrite(pvp, ruleset, e)
char **pvp;
int ruleset;
register ENVELOPE *e;
{
register char *ap; /* address pointer */
--- 642,657 ----
# define MAXMATCH 9 /* max params per rewrite */
+ # ifndef MAXRULERECURSION
+ # define MAXRULERECURSION 50 /* max recursion depth */
+ # endif
+
int
! rewrite(pvp, ruleset, reclevel, e)
char **pvp;
int ruleset;
+ int reclevel;
register ENVELOPE *e;
{
register char *ap; /* address pointer */
***************
*** 664,669 ****
--- 676,686 ----
syserr("554 rewrite: illegal ruleset number %d", ruleset);
return EX_CONFIG;
}
+ if (reclevel++ > MAXRULERECURSION)
+ {
+ syserr("rewrite: infinite recursion, ruleset %d", ruleset);
+ return EX_CONFIG;
+ }
if (pvp == NULL)
return EX_USAGE;
***************
*** 1124,1130 ****
else
{
/* scan the new replacement */
! xpvp = prescan(replac, '\0', pvpbuf, NULL);
if (xpvp == NULL)
{
/* prescan already printed error */
--- 1141,1148 ----
else
{
/* scan the new replacement */
! xpvp = prescan(replac, '\0', pvpbuf,
! sizeof pvpbuf, NULL);
if (xpvp == NULL)
{
/* prescan already printed error */
***************
*** 1156,1170 ****
{
int stat;
! bcopy((char *) &npvp[2], (char *) pvp,
! (int) (avp - npvp - 2) * sizeof *avp);
! if (tTd(21, 3))
! printf("-----callsubr %s\n", npvp[1]);
! stat = rewrite(pvp, atoi(npvp[1]), e);
! if (rstat == EX_OK || stat == EX_TEMPFAIL)
! rstat = stat;
! if ((**pvp & 0377) == CANONNET)
rwr = NULL;
}
else
{
--- 1174,1197 ----
{
int stat;
! if (npvp[1] == NULL)
! {
! syserr("parseaddr: NULL subroutine call in ruleset %d, rule %d",
! ruleset, ruleno);
! *pvp = NULL;
! }
! else
! {
! bcopy((char *) &npvp[2], (char *) pvp,
! (int) (avp - npvp - 2) * sizeof *avp);
! if (tTd(21, 3))
! printf("-----callsubr %s\n", npvp[1]);
! stat = rewrite(pvp, atoi(npvp[1]), reclevel, e);
! if (rstat == EX_OK || stat == EX_TEMPFAIL)
! rstat = stat;
! if (*pvp != NULL && (**pvp & 0377) == CANONNET)
rwr = NULL;
+ }
}
else
{
***************
*** 1285,1290 ****
--- 1312,1319 ----
}
tv++;
}
+ else
+ setstat(EX_UNAVAILABLE);
if ((**tv & 0377) != CANONUSER)
syserr("554 buildaddr: error: no user");
cataddr(++tv, NULL, buf, sizeof buf, ' ');
***************
*** 1402,1412 ****
if (!bitset(RF_SENDERADDR|RF_HEADERADDR, flags))
{
/* sender addresses done later */
! (void) rewrite(tv, 2, e);
if (m->m_re_rwset > 0)
! (void) rewrite(tv, m->m_re_rwset, e);
}
! (void) rewrite(tv, 4, e);
/* save the result for the command line/RCPT argument */
cataddr(tv, NULL, buf, sizeof buf, '\0');
--- 1431,1441 ----
if (!bitset(RF_SENDERADDR|RF_HEADERADDR, flags))
{
/* sender addresses done later */
! (void) rewrite(tv, 2, 0, e);
if (m->m_re_rwset > 0)
! (void) rewrite(tv, m->m_re_rwset, 0, e);
}
! (void) rewrite(tv, 4, 0, e);
/* save the result for the command line/RCPT argument */
cataddr(tv, NULL, buf, sizeof buf, '\0');
***************
*** 1500,1505 ****
--- 1529,1536 ----
register ADDRESS *a;
register ADDRESS *b;
{
+ register ADDRESS *ca, *cb;
+
/* if they don't have the same mailer, forget it */
if (a->q_mailer != b->q_mailer)
return (FALSE);
***************
*** 1508,1516 ****
if (strcmp(a->q_user, b->q_user) != 0)
return (FALSE);
! /* if we have good uids for both but the differ, these are different */
! if (bitset(QGOODUID, a->q_flags & b->q_flags) && a->q_uid != b->q_uid)
! return (FALSE);
/* otherwise compare hosts (but be careful for NULL ptrs) */
if (a->q_host == b->q_host)
--- 1539,1554 ----
if (strcmp(a->q_user, b->q_user) != 0)
return (FALSE);
! /* if we have good uids for both but they differ, these are different */
! if (a->q_mailer == ProgMailer)
! {
! ca = getctladdr(a);
! cb = getctladdr(b);
! if (ca != NULL && cb != NULL &&
! bitset(QGOODUID, ca->q_flags & cb->q_flags) &&
! ca->q_uid != cb->q_uid)
! return (FALSE);
! }
/* otherwise compare hosts (but be careful for NULL ptrs) */
if (a->q_host == b->q_host)
***************
*** 1655,1664 ****
** domain will be appended.
*/
! pvp = prescan(name, '\0', pvpbuf, NULL);
if (pvp == NULL)
return (name);
! if (rewrite(pvp, 3, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
if (bitset(RF_ADDDOMAIN, flags) && e->e_fromdomain != NULL)
{
--- 1693,1702 ----
** domain will be appended.
*/
! pvp = prescan(name, '\0', pvpbuf, sizeof pvpbuf, NULL);
if (pvp == NULL)
return (name);
! if (rewrite(pvp, 3, 0, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
if (bitset(RF_ADDDOMAIN, flags) && e->e_fromdomain != NULL)
{
***************
*** 1675,1681 ****
while ((*pxp++ = *qxq++) != NULL)
continue;
! if (rewrite(pvp, 3, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
}
--- 1713,1719 ----
while ((*pxp++ = *qxq++) != NULL)
continue;
! if (rewrite(pvp, 3, 0, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
}
***************
*** 1689,1705 ****
if (bitset(RF_SENDERADDR, flags))
{
! if (rewrite(pvp, 1, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
else
{
! if (rewrite(pvp, 2, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
if (rwset > 0)
{
! if (rewrite(pvp, rwset, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
--- 1727,1743 ----
if (bitset(RF_SENDERADDR, flags))
{
! if (rewrite(pvp, 1, 0, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
else
{
! if (rewrite(pvp, 2, 0, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
if (rwset > 0)
{
! if (rewrite(pvp, rwset, 0, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
}
***************
*** 1710,1716 ****
** may be used as a default to the above rules.
*/
! if (rewrite(pvp, 4, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
/*
--- 1748,1754 ----
** may be used as a default to the above rules.
*/
! if (rewrite(pvp, 4, 0, e) == EX_TEMPFAIL)
*pstat = EX_TEMPFAIL;
/*
***************
*** 1719,1725 ****
cataddr(pvp, NULL, lbuf, sizeof lbuf, '\0');
define('g', lbuf, e);
! expand(fancy, buf, &buf[sizeof buf - 1], e);
define('g', oldg, e);
if (tTd(12, 1))
--- 1757,1769 ----
cataddr(pvp, NULL, lbuf, sizeof lbuf, '\0');
define('g', lbuf, e);
!
! /* need to make sure route-addrs have */
! if (bitset(RF_CANONICAL, flags) && lbuf[0] == '@')
! expand("<\201g>", buf, &buf[sizeof buf - 1], e);
! else
! expand(fancy, buf, &buf[sizeof buf - 1], e);
!
define('g', oldg, e);
if (tTd(12, 1))
***************
*** 1753,1763 ****
printf("maplocaluser: ");
printaddr(a, FALSE);
}
! pvp = prescan(a->q_user, '\0', pvpbuf, &delimptr);
if (pvp == NULL)
return;
! (void) rewrite(pvp, 5, e);
if (pvp[0] == NULL || (pvp[0][0] & 0377) != CANONNET)
return;
--- 1797,1807 ----
printf("maplocaluser: ");
printaddr(a, FALSE);
}
! pvp = prescan(a->q_user, '\0', pvpbuf, sizeof pvpbuf, &delimptr);
if (pvp == NULL)
return;
! (void) rewrite(pvp, 5, 0, e);
if (pvp[0] == NULL || (pvp[0][0] & 0377) != CANONNET)
return;
*** src/queue.c.OLD Thu Nov 11 17:58:27 1993
--- src/queue.c Sun Jan 9 09:22:40 1994
***************
*** 36,44 ****
#ifndef lint
#ifdef QUEUE
! static char sccsid[] = "@(#)queue.c 8.27 (Berkeley) 10/29/93 (with queueing)";
#else
! static char sccsid[] = "@(#)queue.c 8.27 (Berkeley) 10/29/93 (without queueing)";
#endif
#endif /* not lint */
--- 36,44 ----
#ifndef lint
#ifdef QUEUE
! static char sccsid[] = "@(#)queue.c 8.36 (Berkeley) 1/9/94 (with queueing)";
#else
! static char sccsid[] = "@(#)queue.c 8.36 (Berkeley) 1/9/94 (without queueing)";
#endif
#endif /* not lint */
***************
*** 121,142 ****
break;
#ifdef LOG
if (LogLevel > 0 && (i % 32) == 0)
! syslog(LOG_ALERT, "queueup: cannot create %s: %s",
! tf, errstring(errno));
#endif
- continue;
}
!
! if (lockfile(fd, tf, NULL, LOCK_EX|LOCK_NB))
! break;
#ifdef LOG
! else if (LogLevel > 0 && (i % 32) == 0)
! syslog(LOG_ALERT, "queueup: cannot lock %s: %s",
! tf, errstring(errno));
#endif
- close(fd);
-
if ((i % 32) == 31)
{
/* save the old temp file away */
--- 121,142 ----
break;
#ifdef LOG
if (LogLevel > 0 && (i % 32) == 0)
! syslog(LOG_ALERT, "queueup: cannot create %s, uid=%d: %s",
! tf, geteuid(), errstring(errno));
#endif
}
! else
! {
! if (lockfile(fd, tf, NULL, LOCK_EX|LOCK_NB))
! break;
#ifdef LOG
! else if (LogLevel > 0 && (i % 32) == 0)
! syslog(LOG_ALERT, "queueup: cannot lock %s: %s",
! tf, errstring(errno));
#endif
+ close(fd);
+ }
if ((i % 32) == 31)
{
/* save the old temp file away */
***************
*** 146,152 ****
sleep(i % 32);
}
if (fd < 0 || (tfp = fdopen(fd, "w")) == NULL)
! syserr("!queueup: cannot create queue temp file %s", tf);
}
if (tTd(40, 1))
--- 146,156 ----
sleep(i % 32);
}
if (fd < 0 || (tfp = fdopen(fd, "w")) == NULL)
! {
! printopenfds(TRUE);
! syserr("!queueup: cannot create queue temp file %s, uid=%d",
! tf, geteuid());
! }
}
if (tTd(40, 1))
***************
*** 176,183 ****
e->e_df = newstr(e->e_df);
fd = open(e->e_df, O_WRONLY|O_CREAT, FileMode);
if (fd < 0 || (dfp = fdopen(fd, "w")) == NULL)
! syserr("!queueup: cannot create data temp file %s",
! e->e_df);
(*e->e_putbody)(dfp, FileMailer, e, NULL);
(void) xfclose(dfp, "queueup dfp", e->e_id);
e->e_putbody = putbody;
--- 180,187 ----
e->e_df = newstr(e->e_df);
fd = open(e->e_df, O_WRONLY|O_CREAT, FileMode);
if (fd < 0 || (dfp = fdopen(fd, "w")) == NULL)
! syserr("!queueup: cannot create data temp file %s, uid=%d",
! e->e_df, geteuid());
(*e->e_putbody)(dfp, FileMailer, e, NULL);
(void) xfclose(dfp, "queueup dfp", e->e_id);
e->e_putbody = putbody;
***************
*** 272,278 ****
bzero((char *) &nullmailer, sizeof nullmailer);
nullmailer.m_re_rwset = nullmailer.m_rh_rwset =
! nullmailer.m_se_rwset = nullmailer.m_sh_rwset = 0;
nullmailer.m_eol = "\n";
define('g', "\201f", e);
--- 276,282 ----
bzero((char *) &nullmailer, sizeof nullmailer);
nullmailer.m_re_rwset = nullmailer.m_rh_rwset =
! nullmailer.m_se_rwset = nullmailer.m_sh_rwset = -1;
nullmailer.m_eol = "\n";
define('g', "\201f", e);
***************
*** 288,293 ****
--- 292,305 ----
if (bitset(H_RESENT, h->h_flags) && !bitset(EF_RESENT, e->e_flags))
continue;
+ /* expand macros; if null, don't output header at all */
+ if (bitset(H_DEFAULT, h->h_flags))
+ {
+ (void) expand(h->h_value, buf, &buf[sizeof buf], e);
+ if (buf[0] == '\0')
+ continue;
+ }
+
/* output this header */
fprintf(tfp, "H");
***************
*** 306,312 ****
/* output the header: expand macros, convert addresses */
if (bitset(H_DEFAULT, h->h_flags))
{
- (void) expand(h->h_value, buf, &buf[sizeof buf], e);
fprintf(tfp, "%s: %s\n", h->h_field, buf);
}
else if (bitset(H_FROM|H_RCPT, h->h_flags))
--- 318,323 ----
***************
*** 345,351 ****
/* rename (locked) tf to be (locked) qf */
qf = queuename(e, 'q');
if (rename(tf, qf) < 0)
! syserr("cannot rename(%s, %s), df=%s", tf, qf, e->e_df);
/* close and unlock old (locked) qf */
if (e->e_lockfp != NULL)
--- 356,363 ----
/* rename (locked) tf to be (locked) qf */
qf = queuename(e, 'q');
if (rename(tf, qf) < 0)
! syserr("cannot rename(%s, %s), df=%s, uid=%d",
! tf, qf, e->e_df, geteuid());
/* close and unlock old (locked) qf */
if (e->e_lockfp != NULL)
***************
*** 461,477 ****
if (forkflag)
{
int pid;
pid = dofork();
if (pid != 0)
{
- extern void reapchild();
-
/* parent -- pick up intermediate zombie */
#ifndef SIGCHLD
(void) waitfor(pid);
- #else /* SIGCHLD */
- (void) setsignal(SIGCHLD, reapchild);
#endif /* SIGCHLD */
if (QueueIntvl != 0)
(void) setevent(QueueIntvl, runqueue, TRUE);
--- 473,490 ----
if (forkflag)
{
int pid;
+ #ifdef SIGCHLD
+ extern void reapchild();
+ (void) setsignal(SIGCHLD, reapchild);
+ #endif
+
pid = dofork();
if (pid != 0)
{
/* parent -- pick up intermediate zombie */
#ifndef SIGCHLD
(void) waitfor(pid);
#endif /* SIGCHLD */
if (QueueIntvl != 0)
(void) setevent(QueueIntvl, runqueue, TRUE);
***************
*** 850,855 ****
--- 863,873 ----
syserr("dowork: cannot fork");
return 0;
}
+ else if (pid > 0)
+ {
+ /* parent -- clean out connection cache */
+ mci_flush(FALSE, NULL);
+ }
}
else
{
***************
*** 888,894 ****
e->e_header = NULL;
/* read the queue control file -- return if locked */
! if (!readqf(e, !requeueflag))
{
if (tTd(40, 4))
printf("readqf(%s) failed\n", e->e_id);
--- 906,912 ----
e->e_header = NULL;
/* read the queue control file -- return if locked */
! if (!readqf(e))
{
if (tTd(40, 4))
printf("readqf(%s) failed\n", e->e_id);
***************
*** 921,928 ****
**
** Parameters:
** e -- the envelope of the job to run.
- ** announcefile -- if set, announce the name of the queue
- ** file in error messages.
**
** Returns:
** TRUE if it successfully read the queue file.
--- 939,944 ----
***************
*** 933,941 ****
*/
bool
! readqf(e, announcefile)
register ENVELOPE *e;
- bool announcefile;
{
register FILE *qfp;
ADDRESS *ctladdr;
--- 949,956 ----
*/
bool
! readqf(e)
register ENVELOPE *e;
{
register FILE *qfp;
ADDRESS *ctladdr;
***************
*** 1031,1039 ****
/* do basic system initialization */
initsys(e);
- if (announcefile)
- FileName = qf;
LineNumber = 0;
e->e_flags |= EF_GLOBALERRS;
OpMode = MD_DELIVER;
--- 1046,1053 ----
/* do basic system initialization */
initsys(e);
+ define('i', e->e_id, e);
LineNumber = 0;
e->e_flags |= EF_GLOBALERRS;
OpMode = MD_DELIVER;
***************
*** 1121,1128 ****
break;
default:
! syserr("readqf: bad line \"%s\"", e->e_id,
! LineNumber, bp);
fclose(qfp);
rename(qf, queuename(e, 'Q'));
return FALSE;
--- 1135,1142 ----
break;
default:
! syserr("readqf: %s: line %s: bad line \"%s\"",
! qf, LineNumber, bp);
fclose(qfp);
rename(qf, queuename(e, 'Q'));
return FALSE;
***************
*** 1131,1138 ****
if (bp != buf)
free(bp);
}
-
- FileName = NULL;
/*
** If we haven't read any lines, this queue file is empty.
--- 1145,1150 ----
*** src/readcf.c.OLD Sun Nov 14 10:16:20 1993
--- src/readcf.c Sun Jan 9 09:00:09 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)readcf.c 8.14 (Berkeley) 10/31/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)readcf.c 8.18 (Berkeley) 1/9/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 109,115 ****
extern char **copyplist();
struct stat statb;
char exbuf[MAXLINE];
! char pvpbuf[PSBUFSIZE];
extern char *munchstring();
extern void makemapentry();
--- 109,115 ----
extern char **copyplist();
struct stat statb;
char exbuf[MAXLINE];
! char pvpbuf[MAXLINE + MAXATOM];
extern char *munchstring();
extern void makemapentry();
***************
*** 241,247 ****
/* expand and save the LHS */
*p = '\0';
expand(&bp[1], exbuf, &exbuf[sizeof exbuf], e);
! rwp->r_lhs = prescan(exbuf, '\t', pvpbuf, NULL);
nfuzzy = 0;
if (rwp->r_lhs != NULL)
{
--- 241,248 ----
/* expand and save the LHS */
*p = '\0';
expand(&bp[1], exbuf, &exbuf[sizeof exbuf], e);
! rwp->r_lhs = prescan(exbuf, '\t', pvpbuf,
! sizeof pvpbuf, NULL);
nfuzzy = 0;
if (rwp->r_lhs != NULL)
{
***************
*** 325,331 ****
p++;
*p = '\0';
expand(q, exbuf, &exbuf[sizeof exbuf], e);
! rwp->r_rhs = prescan(exbuf, '\t', pvpbuf, NULL);
if (rwp->r_rhs != NULL)
{
register char **ap;
--- 326,333 ----
p++;
*p = '\0';
expand(q, exbuf, &exbuf[sizeof exbuf], e);
! rwp->r_rhs = prescan(exbuf, '\t', pvpbuf,
! sizeof pvpbuf, NULL);
if (rwp->r_rhs != NULL)
{
register char **ap;
***************
*** 540,547 ****
--- 542,551 ----
{
/* user didn't initialize: set up host map */
strcpy(buf, "host host");
+ #ifdef NAMED_BIND
if (ConfigLevel >= 2)
strcat(buf, " -a.");
+ #endif
makemapentry(buf);
}
}
***************
*** 1020,1025 ****
--- 1024,1030 ----
"defnames", RES_DEFNAMES,
"stayopen", RES_STAYOPEN,
"dnsrch", RES_DNSRCH,
+ "true", 0, /* to avoid error on old syntax */
NULL, 0
};
***************
*** 1239,1245 ****
if (strcasecmp(q, rfp->rf_name) == 0)
break;
}
! if (clearmode)
_res.options &= ~rfp->rf_bits;
else
_res.options |= rfp->rf_bits;
--- 1244,1252 ----
if (strcasecmp(q, rfp->rf_name) == 0)
break;
}
! if (rfp->rf_name == NULL)
! syserr("readcf: I option value %s unrecognized", q);
! else if (clearmode)
_res.options &= ~rfp->rf_bits;
else
_res.options |= rfp->rf_bits;
*** src/recipient.c.OLD Thu Nov 4 06:57:11 1993
--- src/recipient.c Mon Jan 10 08:57:26 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)recipient.c 8.21 (Berkeley) 10/29/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)recipient.c 8.39 (Berkeley) 1/10/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 222,231 ****
stripquotes(buf);
/* check for direct mailing to restricted mailers */
! if (a->q_alias == NULL && m == ProgMailer)
{
! a->q_flags |= QBADADDR;
! usrerr("550 Cannot mail directly to programs");
}
/*
--- 222,246 ----
stripquotes(buf);
/* check for direct mailing to restricted mailers */
! if (m == ProgMailer)
{
! if (a->q_alias == NULL)
! {
! a->q_flags |= QBADADDR;
! usrerr("550 Cannot mail directly to programs");
! }
! else if (bitset(QBOGUSSHELL, a->q_alias->q_flags))
! {
! a->q_flags |= QBADADDR;
! usrerr("550 User %s@%s doesn't have a valid shell for mailing to programs",
! a->q_alias->q_ruser, MyHostName);
! }
! else if (bitset(QUNSAFEADDR, a->q_alias->q_flags))
! {
! a->q_flags |= QBADADDR;
! usrerr("550 Address %s is unsafe for mailing to programs",
! a->q_alias->q_paddr);
! }
}
/*
***************
*** 252,257 ****
--- 267,274 ----
message("duplicate suppressed");
q->q_flags |= a->q_flags;
}
+ else if (bitset(QSELFREF, q->q_flags))
+ q->q_flags |= a->q_flags & ~QDONTSEND;
a = q;
goto testselfdestruct;
}
***************
*** 294,299 ****
--- 311,317 ----
e->e_id, a->q_user, errstring(ret));
#endif
a->q_flags |= QQUEUEUP;
+ a->q_flags &= ~QDONTSEND;
usrerr("451 Cannot open %s: %s",
a->q_user, errstring(ret));
}
***************
*** 307,316 ****
}
else if (m == FileMailer)
{
- struct stat stb;
extern bool writable();
- p = strrchr(buf, '/');
/* check if writable or creatable */
if (a->q_alias == NULL)
{
--- 325,332 ----
***************
*** 317,326 ****
a->q_flags |= QBADADDR;
usrerr("550 Cannot mail directly to files");
}
! else if ((stat(buf, &stb) >= 0) ? (!writable(&stb)) :
! (*p = '\0', safefile(buf, RealUid, RealGid, NULL, TRUE, S_IWRITE|S_IEXEC) != 0))
{
a->q_flags |= QBADADDR;
giveresponse(EX_CANTCREAT, m, NULL, a->q_alias, e);
}
}
--- 333,353 ----
a->q_flags |= QBADADDR;
usrerr("550 Cannot mail directly to files");
}
! else if (bitset(QBOGUSSHELL, a->q_alias->q_flags))
{
a->q_flags |= QBADADDR;
+ usrerr("550 User %s@%s doesn't have a valid shell for mailing to files",
+ a->q_alias->q_ruser, MyHostName);
+ }
+ else if (bitset(QUNSAFEADDR, a->q_alias->q_flags))
+ {
+ a->q_flags |= QBADADDR;
+ usrerr("550 Address %s is unsafe for mailing to files",
+ a->q_alias->q_paddr);
+ }
+ else if (!writable(buf, getctladdr(a), SFF_ANYFILE))
+ {
+ a->q_flags |= QBADADDR;
giveresponse(EX_CANTCREAT, m, NULL, a->q_alias, e);
}
}
***************
*** 340,346 ****
if (!bitset(QDONTSEND|QNOTREMOTE|QVERIFIED, a->q_flags))
{
extern int udbexpand();
- extern int errno;
if (udbexpand(a, sendq, e) == EX_TEMPFAIL)
{
--- 367,372 ----
***************
*** 429,434 ****
--- 455,465 ----
buildfname(pw->pw_gecos, pw->pw_name, nbuf);
if (nbuf[0] != '\0')
a->q_fullname = newstr(nbuf);
+ if (pw->pw_shell != NULL && pw->pw_shell[0] != '\0' &&
+ !usershellok(pw->pw_shell))
+ {
+ a->q_flags |= QBOGUSSHELL;
+ }
if (!quoted)
forward(a, sendq, e);
}
***************
*** 563,569 ****
** not writable. This is also enforced by mailfile.
**
** Parameters:
! ** s -- pointer to a stat struct for the file.
**
** Returns:
** TRUE -- if we will be able to write this file.
--- 594,602 ----
** not writable. This is also enforced by mailfile.
**
** Parameters:
! ** filename -- the file name to check.
! ** ctladdr -- the controlling address for this file.
! ** flags -- SFF_* flags to control the function.
**
** Returns:
** TRUE -- if we will be able to write this file.
***************
*** 574,608 ****
*/
bool
! writable(s)
! register struct stat *s;
{
uid_t euid;
gid_t egid;
int bits;
! if (bitset(0111, s->st_mode))
! return (FALSE);
! euid = RealUid;
! egid = RealGid;
! if (geteuid() == 0)
{
! if (bitset(S_ISUID, s->st_mode))
! euid = s->st_uid;
! if (bitset(S_ISGID, s->st_mode))
! egid = s->st_gid;
}
if (euid == 0)
- return (TRUE);
- bits = S_IWRITE;
- if (euid != s->st_uid)
{
! bits >>= 3;
! if (egid != s->st_gid)
! bits >>= 3;
}
! return ((s->st_mode & bits) != 0);
}
/*
** INCLUDE -- handle :include: specification.
--- 607,704 ----
*/
bool
! writable(filename, ctladdr, flags)
! char *filename;
! ADDRESS *ctladdr;
! int flags;
{
uid_t euid;
gid_t egid;
int bits;
+ register char *p;
+ char *uname;
+ struct stat stb;
+ extern char RealUserName[];
! if (tTd(29, 5))
! printf("writable(%s, %x)\n", filename, flags);
!
! #ifdef HASLSTAT
! if ((bitset(SFF_NOSLINK, flags) ? lstat(filename, &stb)
! : stat(filename, &stb)) < 0)
! #else
! if (stat(filename, &stb) < 0)
! #endif
{
! /* file does not exist -- see if directory is safe */
! p = strrchr(filename, '/');
! if (p == NULL)
! {
! errno = ENOTDIR;
! return FALSE;
! }
! *p = '\0';
! errno = safefile(filename, RealUid, RealGid, RealUserName,
! SFF_MUSTOWN, S_IWRITE|S_IEXEC);
! *p = '/';
! return errno == 0;
}
+ #ifdef SUID_ROOT_FILES_OK
+ /* really ought to be passed down -- and not a good idea */
+ flags |= SFF_ROOTOK;
+ #endif
+
+ /*
+ ** File does exist -- check that it is writable.
+ */
+
+ if (bitset(0111, stb.st_mode))
+ {
+ if (tTd(29, 5))
+ printf("failed (mode %o: x bits)\n", stb.st_mode);
+ errno = EPERM;
+ return (FALSE);
+ }
+
+ if (ctladdr != NULL && geteuid() == 0)
+ {
+ euid = ctladdr->q_uid;
+ egid = ctladdr->q_gid;
+ uname = ctladdr->q_user;
+ }
+ else
+ {
+ euid = RealUid;
+ egid = RealGid;
+ uname = RealUserName;
+ }
if (euid == 0)
{
! euid = DefUid;
! uname = DefUser;
}
! if (egid == 0)
! egid = DefGid;
! if (geteuid() == 0)
! {
! if (bitset(S_ISUID, stb.st_mode) &&
! (stb.st_uid != 0 || bitset(SFF_ROOTOK, flags)))
! {
! euid = stb.st_uid;
! uname = NULL;
! }
! if (bitset(S_ISGID, stb.st_mode) &&
! (stb.st_gid != 0 || bitset(SFF_ROOTOK, flags)))
! egid = stb.st_gid;
! }
!
! if (tTd(29, 5))
! printf("\teu/gid=%d/%d, st_u/gid=%d/%d\n",
! euid, egid, stb.st_uid, stb.st_gid);
!
! errno = safefile(filename, euid, egid, uname, flags, S_IWRITE);
! return errno == 0;
}
/*
** INCLUDE -- handle :include: specification.
***************
*** 628,633 ****
--- 724,733 ----
static jmp_buf CtxIncludeTimeout;
static int includetimeout();
+ #ifndef S_IWOTH
+ # define S_IWOTH (S_IWRITE >> 6)
+ #endif
+
int
include(fname, forwarding, ctladdr, sendq, e)
char *fname;
***************
*** 647,652 ****
--- 747,754 ----
gid_t savedgid, gid;
char *uname;
int rval = 0;
+ int sfflags = forwarding ? SFF_MUSTOWN : SFF_ANYFILE;
+ struct stat st;
char buf[MAXLINE];
if (tTd(27, 2))
***************
*** 665,673 ****
ca = getctladdr(ctladdr);
if (ca == NULL)
{
! uid = 0;
! gid = 0;
! uname = NULL;
saveduid = -1;
}
else
--- 767,775 ----
ca = getctladdr(ctladdr);
if (ca == NULL)
{
! uid = DefUid;
! gid = DefGid;
! uname = DefUser;
saveduid = -1;
}
else
***************
*** 699,705 ****
{
ctladdr->q_flags |= QQUEUEUP;
errno = 0;
- usrerr("451 open timeout on %s", fname);
/* return pseudo-error code */
rval = EOPENTIMEOUT;
--- 801,806 ----
***************
*** 708,748 ****
ev = setevent((time_t) 60, includetimeout, 0);
/* the input file must be marked safe */
! rval = safefile(fname, uid, gid, uname, forwarding, S_IREAD);
if (rval != 0)
{
/* don't use this :include: file */
- clrevent(ev);
if (tTd(27, 4))
printf("include: not safe (uid=%d): %s\n",
uid, errstring(rval));
- goto resetuid;
}
!
! fp = fopen(fname, "r");
! if (fp == NULL)
{
! rval = errno;
! if (tTd(27, 4))
! printf("include: open: %s\n", errstring(rval));
! }
! else if (ca == NULL)
! {
! struct stat st;
!
! if (fstat(fileno(fp), &st) < 0)
{
rval = errno;
! syserr("Cannot fstat %s!", fname);
}
- else
- {
- ctladdr->q_uid = st.st_uid;
- ctladdr->q_gid = st.st_gid;
- ctladdr->q_flags |= QGOODUID;
- }
}
-
clrevent(ev);
resetuid:
--- 809,832 ----
ev = setevent((time_t) 60, includetimeout, 0);
/* the input file must be marked safe */
! rval = safefile(fname, uid, gid, uname, sfflags, S_IREAD);
if (rval != 0)
{
/* don't use this :include: file */
if (tTd(27, 4))
printf("include: not safe (uid=%d): %s\n",
uid, errstring(rval));
}
! else
{
! fp = fopen(fname, "r");
! if (fp == NULL)
{
rval = errno;
! if (tTd(27, 4))
! printf("include: open: %s\n", errstring(rval));
}
}
clrevent(ev);
resetuid:
***************
*** 761,769 ****
--- 845,887 ----
if (tTd(27, 9))
printf("include: reset uid = %d/%d\n", getuid(), geteuid());
+ if (rval == EOPENTIMEOUT)
+ usrerr("451 open timeout on %s", fname);
+
if (fp == NULL)
return rval;
+ if (fstat(fileno(fp), &st) < 0)
+ {
+ rval = errno;
+ syserr("Cannot fstat %s!", fname);
+ return rval;
+ }
+
+ if (ca == NULL)
+ {
+ ctladdr->q_uid = st.st_uid;
+ ctladdr->q_gid = st.st_gid;
+ ctladdr->q_flags |= QGOODUID;
+ }
+ if (ca != NULL && ca->q_uid == st.st_uid)
+ {
+ /* optimization -- avoid getpwuid if we already have info */
+ ctladdr->q_flags |= ca->q_flags & QBOGUSSHELL;
+ ctladdr->q_ruser = ca->q_ruser;
+ }
+ else
+ {
+ register struct passwd *pw;
+
+ pw = getpwuid(st.st_uid);
+ if (pw == NULL || !usershellok(pw->pw_shell))
+ {
+ ctladdr->q_ruser = newstr(pw->pw_name);
+ ctladdr->q_flags |= QBOGUSSHELL;
+ }
+ }
+
if (bitset(EF_VRFYONLY, e->e_flags))
{
/* don't do any more now */
***************
*** 772,777 ****
--- 890,908 ----
xfclose(fp, "include", fname);
return rval;
}
+
+ /*
+ ** Check to see if some bad guy can write this file
+ **
+ ** This should really do something clever with group
+ ** permissions; currently we just view world writable
+ ** as unsafe. Also, we don't check for writable
+ ** directories in the path. We've got to leave
+ ** something for the local sysad to do.
+ */
+
+ if (bitset(S_IWOTH, st.st_mode))
+ ctladdr->q_flags |= QUNSAFEADDR;
/* read the file -- each line is a comma-separated list. */
FileName = fname;
*** src/savemail.c.OLD Mon Nov 22 11:50:07 1993
--- src/savemail.c Sat Dec 18 06:25:06 1993
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)savemail.c 8.17 (Berkeley) 10/31/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)savemail.c 8.24 (Berkeley) 12/18/93";
#endif /* not lint */
# include "sendmail.h"
***************
*** 69,75 ****
--- 69,79 ----
# define ESM_PANIC 6 /* leave the locked queue/transcript files */
# define ESM_DONE 7 /* the message is successfully delivered */
+ # ifndef _PATH_VARTMP
+ # define _PATH_VARTMP "/usr/tmp/"
+ # endif
+
savemail(e)
register ENVELOPE *e;
{
***************
*** 82,87 ****
--- 86,92 ----
register char *p;
extern char *ttypath();
typedef int (*fnptr)();
+ extern bool writable();
if (tTd(6, 1))
{
***************
*** 374,381 ****
break;
}
! fp = dfopen("/usr/tmp/dead.letter",
! O_WRONLY|O_CREAT|O_APPEND, FileMode);
if (fp == NULL)
{
state = ESM_PANIC;
--- 379,392 ----
break;
}
! strcpy(buf, _PATH_VARTMP);
! strcat(buf, "dead.letter");
! if (!writable(buf, NULLADDR, SFF_NOSLINK))
! {
! state = ESM_PANIC;
! break;
! }
! fp = dfopen(buf, O_WRONLY|O_CREAT|O_APPEND, FileMode);
if (fp == NULL)
{
state = ESM_PANIC;
***************
*** 399,406 ****
case ESM_PANIC:
/* leave the locked queue & transcript files around */
! syserr("554 savemail: cannot save rejected email anywhere");
! exit(EX_SOFTWARE);
}
}
}
--- 410,416 ----
case ESM_PANIC:
/* leave the locked queue & transcript files around */
! syserr("!554 savemail: cannot save rejected email anywhere");
}
}
}
***************
*** 466,471 ****
--- 476,482 ----
SendBody = sendbody;
define('g', e->e_from.q_paddr, e);
+ define('u', NULL, e);
ee = newenvelope(&errenvelope, e);
define('a', "\201b", ee);
define('r', "internal", ee);
***************
*** 602,608 ****
for (q = e->e_parent->e_sendqueue; q != NULL; q = q->q_next)
if (bitset(QBADADDR, q->q_flags))
break;
! if (q == NULL && !bitset(EF_FATALERRS, e->e_parent->e_flags))
{
putline(" **********************************************",
fp, m);
--- 613,620 ----
for (q = e->e_parent->e_sendqueue; q != NULL; q = q->q_next)
if (bitset(QBADADDR, q->q_flags))
break;
! if (q == NULL &&
! !bitset(EF_FATALERRS|EF_SENDRECEIPT, e->e_parent->e_flags))
{
putline(" **********************************************",
fp, m);
*** src/sendmail.h.OLD Sun Nov 7 10:37:14 1993
--- src/sendmail.h Wed Jan 5 08:34:35 1994
***************
*** 31,37 ****
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
! * @(#)sendmail.h 8.26 (Berkeley) 10/31/93
*/
/*
--- 31,37 ----
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
! * @(#)sendmail.h 8.38 (Berkeley) 1/5/94
*/
/*
***************
*** 41,47 ****
# ifdef _DEFINE
# define EXTERN
# ifndef lint
! static char SmailSccsId[] = "@(#)sendmail.h 8.26 10/31/93";
# endif
# else /* _DEFINE */
# define EXTERN extern
--- 41,47 ----
# ifdef _DEFINE
# define EXTERN
# ifndef lint
! static char SmailSccsId[] = "@(#)sendmail.h 8.38 1/5/94";
# endif
# else /* _DEFINE */
# define EXTERN extern
***************
*** 57,63 ****
# include
# include
# include
- # include
# include "conf.h"
# include "useful.h"
--- 57,62 ----
***************
*** 69,74 ****
--- 68,76 ----
# ifdef DAEMON
# include
# endif
+ # ifdef NETUNIX
+ # include
+ # endif
# ifdef NETINET
# include
# endif
***************
*** 148,153 ****
--- 150,157 ----
# define QSELFREF 000200 /* this address references itself */
# define QVERIFIED 000400 /* verified, but not expanded */
# define QREPORT 001000 /* report this address in return message */
+ # define QBOGUSSHELL 002000 /* this entry has an invalid shell listed */
+ # define QUNSAFEADDR 004000 /* address aquired through an unsafe path */
# define NULLADDR ((ADDRESS *) NULL)
/*
***************
*** 287,295 ****
ADDRESS *e_sendqueue; /* list of message recipients */
ADDRESS *e_errorqueue; /* the queue for error responses */
long e_msgsize; /* size of the message in bytes */
int e_nrcpts; /* number of recipients */
short e_class; /* msg class (priority, junk, etc.) */
- short e_flags; /* flags, see below */
short e_hopcount; /* number of times processed */
short e_nsent; /* number of sends since checkpoint */
short e_sendmode; /* message send mode */
--- 291,299 ----
ADDRESS *e_sendqueue; /* list of message recipients */
ADDRESS *e_errorqueue; /* the queue for error responses */
long e_msgsize; /* size of the message in bytes */
+ long e_flags; /* flags, see below */
int e_nrcpts; /* number of recipients */
short e_class; /* msg class (priority, junk, etc.) */
short e_hopcount; /* number of times processed */
short e_nsent; /* number of sends since checkpoint */
short e_sendmode; /* message send mode */
***************
*** 314,333 ****
};
/* values for e_flags */
! #define EF_OLDSTYLE 000001 /* use spaces (not commas) in hdrs */
! #define EF_INQUEUE 000002 /* this message is fully queued */
! #define EF_CLRQUEUE 000010 /* disk copy is no longer needed */
! #define EF_SENDRECEIPT 000020 /* send a return receipt */
! #define EF_FATALERRS 000040 /* fatal errors occured */
! #define EF_KEEPQUEUE 000100 /* keep queue files always */
! #define EF_RESPONSE 000200 /* this is an error or return receipt */
! #define EF_RESENT 000400 /* this message is being forwarded */
! #define EF_VRFYONLY 001000 /* verify only (don't expand aliases) */
! #define EF_WARNING 002000 /* warning message has been sent */
! #define EF_QUEUERUN 004000 /* this envelope is from queue */
! #define EF_GLOBALERRS 010000 /* treat errors as global */
! #define EF_PM_NOTIFY 020000 /* send return mail to postmaster */
! #define EF_METOO 040000 /* send to me too */
EXTERN ENVELOPE *CurEnv; /* envelope currently being processed */
/*
--- 318,338 ----
};
/* values for e_flags */
! #define EF_OLDSTYLE 0x0000001 /* use spaces (not commas) in hdrs */
! #define EF_INQUEUE 0x0000002 /* this message is fully queued */
! #define EF_CLRQUEUE 0x0000008 /* disk copy is no longer needed */
! #define EF_SENDRECEIPT 0x0000010 /* send a return receipt */
! #define EF_FATALERRS 0x0000020 /* fatal errors occured */
! #define EF_KEEPQUEUE 0x0000040 /* keep queue files always */
! #define EF_RESPONSE 0x0000080 /* this is an error or return receipt */
! #define EF_RESENT 0x0000100 /* this message is being forwarded */
! #define EF_VRFYONLY 0x0000200 /* verify only (don't expand aliases) */
! #define EF_WARNING 0x0000400 /* warning message has been sent */
! #define EF_QUEUERUN 0x0000800 /* this envelope is from queue */
! #define EF_GLOBALERRS 0x0001000 /* treat errors as global */
! #define EF_PM_NOTIFY 0x0002000 /* send return mail to postmaster */
! #define EF_METOO 0x0004000 /* send to me too */
! #define EF_LOGSENDER 0x0008000 /* need to log the sender */
EXTERN ENVELOPE *CurEnv; /* envelope currently being processed */
/*
***************
*** 722,728 ****
--- 727,744 ----
#define RF_COPYALL (RF_COPYPARSE|RF_COPYPADDR)
#define RF_COPYNONE 0
+
/*
+ ** Flags passed to safefile.
+ */
+
+ #define SFF_ANYFILE 0 /* no special restrictions */
+ #define SFF_MUSTOWN 0x0001 /* user must own this file */
+ #define SFF_NOSLINK 0x0002 /* file cannot be a symbolic link */
+ #define SFF_ROOTOK 0x0004 /* ok for root to own this file */
+
+
+ /*
** Regular UNIX sockaddrs are too small to handle ISO addresses, so
** we are forced to declare a supertype here.
*/
***************
*** 730,736 ****
--- 746,754 ----
union bigsockaddr
{
struct sockaddr sa; /* general version */
+ #ifdef NETUNIX
struct sockaddr_un sunix; /* UNIX family */
+ #endif
#ifdef NETINET
struct sockaddr_in sin; /* INET family */
#endif
***************
*** 804,810 ****
EXTERN bool MatchGecos; /* look for user names in gecos field */
EXTERN bool UseErrorsTo; /* use Errors-To: header (back compat) */
EXTERN bool TryNullMXList; /* if we are the best MX, try host directly */
! EXTERN bool CheckLoopBack; /* check for loopback on HELO packet */
EXTERN bool InChild; /* true if running in an SMTP subprocess */
EXTERN char SpaceSub; /* substitution for */
EXTERN int PrivacyFlags; /* privacy flags */
--- 822,828 ----
EXTERN bool MatchGecos; /* look for user names in gecos field */
EXTERN bool UseErrorsTo; /* use Errors-To: header (back compat) */
EXTERN bool TryNullMXList; /* if we are the best MX, try host directly */
! extern bool CheckLoopBack; /* check for loopback on HELO packet */
EXTERN bool InChild; /* true if running in an SMTP subprocess */
EXTERN char SpaceSub; /* substitution for */
EXTERN int PrivacyFlags; /* privacy flags */
***************
*** 825,831 ****
EXTERN char *PostMasterCopy; /* address to get errs cc's */
EXTERN int CheckpointInterval; /* queue file checkpoint interval */
EXTERN bool DontPruneRoutes; /* don't prune source routes */
! EXTERN bool BrokenSmtpPeers; /* peers can't handle 2-line greeting */
EXTERN int MaxMciCache; /* maximum entries in MCI cache */
EXTERN time_t MciCacheTimeout; /* maximum idle time on connections */
EXTERN char *QueueLimitRecipient; /* limit queue runs to this recipient */
--- 843,849 ----
EXTERN char *PostMasterCopy; /* address to get errs cc's */
EXTERN int CheckpointInterval; /* queue file checkpoint interval */
EXTERN bool DontPruneRoutes; /* don't prune source routes */
! extern bool BrokenSmtpPeers; /* peers can't handle 2-line greeting */
EXTERN int MaxMciCache; /* maximum entries in MCI cache */
EXTERN time_t MciCacheTimeout; /* maximum idle time on connections */
EXTERN char *QueueLimitRecipient; /* limit queue runs to this recipient */
***************
*** 832,837 ****
--- 850,856 ----
EXTERN char *QueueLimitSender; /* limit queue runs to this sender */
EXTERN char *QueueLimitId; /* limit queue runs to this id */
EXTERN FILE *TrafficLogFile; /* file in which to log all traffic */
+ extern int errno;
/*
***************
*** 909,915 ****
extern void expand __P((char *, char *, char *, ENVELOPE *));
extern void define __P((int, char *, ENVELOPE *));
extern char *macvalue __P((int, ENVELOPE *));
! extern char **prescan __P((char *, int, char[], char **));
extern char *fgetfolded __P((char *, int, FILE *));
extern ADDRESS *recipient __P((ADDRESS *, ADDRESS **, ENVELOPE *));
extern ENVELOPE *newenvelope __P((ENVELOPE *, ENVELOPE *));
--- 928,935 ----
extern void expand __P((char *, char *, char *, ENVELOPE *));
extern void define __P((int, char *, ENVELOPE *));
extern char *macvalue __P((int, ENVELOPE *));
! extern char **prescan __P((char *, int, char[], int, char **));
! extern int rewrite __P((char **, int, int, ENVELOPE *));
extern char *fgetfolded __P((char *, int, FILE *));
extern ADDRESS *recipient __P((ADDRESS *, ADDRESS **, ENVELOPE *));
extern ENVELOPE *newenvelope __P((ENVELOPE *, ENVELOPE *));
***************
*** 928,933 ****
--- 948,955 ----
extern void openxscript __P((ENVELOPE *));
extern void closexscript __P((ENVELOPE *));
extern sigfunc_t setsignal __P((int, sigfunc_t));
+ extern char *shortenstring __P((char *, int));
+ extern bool usershellok __P((char *));
/* ellipsis is a different case though */
#ifdef __STDC__
*** src/srvrsmtp.c.OLD Fri Nov 26 17:21:59 1993
--- src/srvrsmtp.c Wed Dec 22 05:07:01 1993
***************
*** 36,44 ****
#ifndef lint
#ifdef SMTP
! static char sccsid[] = "@(#)srvrsmtp.c 8.18 (Berkeley) 10/28/93 (with SMTP)";
#else
! static char sccsid[] = "@(#)srvrsmtp.c 8.18 (Berkeley) 10/28/93 (without SMTP)";
#endif
#endif /* not lint */
--- 36,44 ----
#ifndef lint
#ifdef SMTP
! static char sccsid[] = "@(#)srvrsmtp.c 8.23 (Berkeley) 12/21/93 (with SMTP)";
#else
! static char sccsid[] = "@(#)srvrsmtp.c 8.23 (Berkeley) 12/21/93 (without SMTP)";
#endif
#endif /* not lint */
***************
*** 114,119 ****
--- 114,120 ----
};
bool OneXact = FALSE; /* one xaction only this run */
+ char *CurSmtpClient; /* who's at the other end of channel */
static char *skipword();
***************
*** 147,153 ****
}
settime(e);
CurHostName = RealHostName;
! setproctitle("server %s startup", CurHostName);
expand("\201e", inp, &inp[sizeof inp], e);
if (BrokenSmtpPeers)
{
--- 148,158 ----
}
settime(e);
CurHostName = RealHostName;
! CurSmtpClient = macvalue('_', e);
! if (CurSmtpClient == NULL)
! CurSmtpClient = RealHostName;
!
! setproctitle("server %s startup", CurSmtpClient);
expand("\201e", inp, &inp[sizeof inp], e);
if (BrokenSmtpPeers)
{
***************
*** 192,202 ****
{
/* end of file, just die */
message("421 %s Lost input channel from %s",
! MyHostName, CurHostName);
#ifdef LOG
if (LogLevel > (gotmail ? 1 : 19))
syslog(LOG_NOTICE, "lost input channel from %s",
! CurHostName);
#endif
if (InChild)
ExitStat = EX_QUIT;
--- 197,207 ----
{
/* end of file, just die */
message("421 %s Lost input channel from %s",
! MyHostName, CurSmtpClient);
#ifdef LOG
if (LogLevel > (gotmail ? 1 : 19))
syslog(LOG_NOTICE, "lost input channel from %s",
! CurSmtpClient);
#endif
if (InChild)
ExitStat = EX_QUIT;
***************
*** 211,219 ****
fprintf(e->e_xfp, "<<< %s\n", inp);
if (e->e_id == NULL)
! setproctitle("%s: %s", CurHostName, inp);
else
! setproctitle("%s %s: %s", e->e_id, CurHostName, inp);
/* break off command */
for (p = inp; isascii(*p) && isspace(*p); p++)
--- 216,224 ----
fprintf(e->e_xfp, "<<< %s\n", inp);
if (e->e_id == NULL)
! setproctitle("%s: %.80s", CurSmtpClient, inp);
else
! setproctitle("%s %s: %.80s", e->e_id, CurSmtpClient, inp);
/* break off command */
for (p = inp; isascii(*p) && isspace(*p); p++)
***************
*** 262,270 ****
auth_warning(e, "Host %s claimed to be %s",
RealHostName, p);
}
- p = macvalue('_', e);
- if (p == NULL)
- p = RealHostName;
gothello = TRUE;
if (c->cmdcode != CMDEHLO)
--- 267,272 ----
***************
*** 271,277 ****
{
/* print old message and be done with it */
message("250 %s Hello %s, pleased to meet you",
! MyHostName, p);
break;
}
--- 273,279 ----
{
/* print old message and be done with it */
message("250 %s Hello %s, pleased to meet you",
! MyHostName, CurSmtpClient);
break;
}
***************
*** 332,338 ****
define('s', sendinghost, e);
initsys(e);
nrcpts = 0;
! setproctitle("%s %s: %s", e->e_id, CurHostName, inp);
/* child -- go do the processing */
p = skipword(p, "from");
--- 334,341 ----
define('s', sendinghost, e);
initsys(e);
nrcpts = 0;
! e->e_flags |= EF_LOGSENDER;
! setproctitle("%s %s: %.80s", e->e_id, CurSmtpClient, inp);
/* child -- go do the processing */
p = skipword(p, "from");
***************
*** 626,632 ****
if (vrfy)
message("252 Who's to say?");
else
! message("502 That's none of your business");
break;
}
else if (!gothello &&
--- 629,640 ----
if (vrfy)
message("252 Who's to say?");
else
! message("502 Sorry, we do not allow this operation");
! #ifdef LOG
! if (LogLevel > 5)
! syslog(LOG_INFO, "%s: %s [rejected]",
! CurSmtpClient, inp);
! #endif
break;
}
else if (!gothello &&
***************
*** 640,646 ****
break;
#ifdef LOG
if (LogLevel > 5)
! syslog(LOG_INFO, "%s: %s", CurHostName, inp);
#endif
vrfyqueue = NULL;
QuickAbort = TRUE;
--- 648,654 ----
break;
#ifdef LOG
if (LogLevel > 5)
! syslog(LOG_INFO, "%s: %s", CurSmtpClient, inp);
#endif
vrfyqueue = NULL;
QuickAbort = TRUE;
***************
*** 942,947 ****
--- 950,958 ----
st = waitfor(childpid);
if (st == -1)
syserr("%s: lost child", label);
+ else if (!WIFEXITED(st))
+ syserr("%s: died on signal %d",
+ label, st & 0177);
/* if we exited on a QUIT command, complete the process */
if (st == (EX_QUIT << 8))
*** src/udb.c.OLD Thu Nov 25 08:54:38 1993
--- src/udb.c Thu Nov 25 11:23:27 1993
***************
*** 36,44 ****
#ifndef lint
#ifdef USERDB
! static char sccsid [] = "@(#)udb.c 8.3 (Berkeley) 8/25/93 (with USERDB)";
#else
! static char sccsid [] = "@(#)udb.c 8.3 (Berkeley) 8/25/93 (without USERDB)";
#endif
#endif
--- 36,44 ----
#ifndef lint
#ifdef USERDB
! static char sccsid [] = "@(#)udb.c 8.4 (Berkeley) 11/25/93 (with USERDB)";
#else
! static char sccsid [] = "@(#)udb.c 8.4 (Berkeley) 11/25/93 (without USERDB)";
#endif
#endif
***************
*** 603,609 ****
up->udb_addr.sin_family = h->h_addrtype;
bcopy(h->h_addr_list[0],
(char *) &up->udb_addr.sin_addr,
! h->h_length);
up->udb_addr.sin_port = UdbPort;
up->udb_timeout = UdbTimeout;
up++;
--- 603,609 ----
up->udb_addr.sin_family = h->h_addrtype;
bcopy(h->h_addr_list[0],
(char *) &up->udb_addr.sin_addr,
! sizeof up->udb_addr.sin_addr);
up->udb_addr.sin_port = UdbPort;
up->udb_timeout = UdbTimeout;
up++;
*** src/usersmtp.c.OLD Sun Nov 7 15:33:58 1993
--- src/usersmtp.c Wed Jan 5 09:20:15 1994
***************
*** 36,44 ****
#ifndef lint
#ifdef SMTP
! static char sccsid[] = "@(#)usersmtp.c 8.13 (Berkeley) 10/24/93 (with SMTP)";
#else
! static char sccsid[] = "@(#)usersmtp.c 8.13 (Berkeley) 10/24/93 (without SMTP)";
#endif
#endif /* not lint */
--- 36,44 ----
#ifndef lint
#ifdef SMTP
! static char sccsid[] = "@(#)usersmtp.c 8.17 (Berkeley) 1/5/94 (with SMTP)";
#else
! static char sccsid[] = "@(#)usersmtp.c 8.17 (Berkeley) 1/5/94 (without SMTP)";
#endif
#endif /* not lint */
***************
*** 218,226 ****
goto tempfail2;
}
! mci->mci_state = MCIS_OPEN;
! return;
tempfail1:
tempfail2:
mci->mci_exitstat = EX_TEMPFAIL;
--- 218,231 ----
goto tempfail2;
}
! if (mci->mci_state != MCIS_CLOSED)
! {
! mci->mci_state = MCIS_OPEN;
! return;
! }
+ /* got a 421 error code during startup */
+
tempfail1:
tempfail2:
mci->mci_exitstat = EX_TEMPFAIL;
***************
*** 317,322 ****
--- 322,328 ----
ENVELOPE *e;
{
int r;
+ char *bufp;
char buf[MAXNAME];
char optbuf[MAXLINE];
***************
*** 341,355 ****
(void) strcpy(buf, "");
else
expand("\201g", buf, &buf[sizeof buf - 1], e);
if (e->e_from.q_mailer == LocalMailer ||
!bitnset(M_FROMPATH, m->m_flags))
{
! smtpmessage("MAIL From:<%s>%s", m, mci, buf, optbuf);
}
else
{
smtpmessage("MAIL From:<@%s%c%s>%s", m, mci, MyHostName,
! buf[0] == '@' ? ',' : ':', buf, optbuf);
}
SmtpPhase = mci->mci_phase = "client MAIL";
setproctitle("%s %s: %s", e->e_id, CurHostName, mci->mci_phase);
--- 347,371 ----
(void) strcpy(buf, "");
else
expand("\201g", buf, &buf[sizeof buf - 1], e);
+ if (buf[0] == '<')
+ {
+ /* strip off (put back on below) */
+ bufp = &buf[strlen(buf) - 1];
+ if (*bufp == '>')
+ *bufp = '\0';
+ bufp = &buf[1];
+ }
+ else
+ bufp = buf;
if (e->e_from.q_mailer == LocalMailer ||
!bitnset(M_FROMPATH, m->m_flags))
{
! smtpmessage("MAIL From:<%s>%s", m, mci, bufp, optbuf);
}
else
{
smtpmessage("MAIL From:<@%s%c%s>%s", m, mci, MyHostName,
! *bufp == '@' ? ',' : ':', bufp, optbuf);
}
SmtpPhase = mci->mci_phase = "client MAIL";
setproctitle("%s %s: %s", e->e_id, CurHostName, mci->mci_phase);
***************
*** 594,601 ****
register MCI *mci;
ENVELOPE *e;
{
! int i;
/* send the quit message if we haven't gotten I/O error */
if (mci->mci_state != MCIS_ERROR)
{
--- 610,626 ----
register MCI *mci;
ENVELOPE *e;
{
! bool oldSuprErrs = SuprErrs;
+ /*
+ ** Suppress errors here -- we may be processing a different
+ ** job when we do the quit connection, and we don't want the
+ ** new job to be penalized for something that isn't it's
+ ** problem.
+ */
+
+ SuprErrs = TRUE;
+
/* send the quit message if we haven't gotten I/O error */
if (mci->mci_state != MCIS_ERROR)
{
***************
*** 602,615 ****
SmtpPhase = "client QUIT";
smtpmessage("QUIT", m, mci);
(void) reply(m, mci, e, TimeOuts.to_quit, NULL);
if (mci->mci_state == MCIS_CLOSED)
return;
}
/* now actually close the connection and pick up the zombie */
! i = endmailer(mci, e, m->m_argv);
! if (i != EX_OK)
! syserr("451 smtpquit %s: stat %d", m->m_argv[0], i);
}
/*
** SMTPRSET -- send a RSET (reset) command
--- 627,644 ----
SmtpPhase = "client QUIT";
smtpmessage("QUIT", m, mci);
(void) reply(m, mci, e, TimeOuts.to_quit, NULL);
+ SuprErrs = oldSuprErrs;
if (mci->mci_state == MCIS_CLOSED)
+ {
+ SuprErrs = oldSuprErrs;
return;
+ }
}
/* now actually close the connection and pick up the zombie */
! (void) endmailer(mci, e, NULL);
!
! SuprErrs = oldSuprErrs;
}
/*
** SMTPRSET -- send a RSET (reset) command
*** src/util.c.OLD Sun Nov 7 11:14:47 1993
--- src/util.c Tue Jan 4 06:40:38 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)util.c 8.15 (Berkeley) 10/31/93";
#endif /* not lint */
# include "sendmail.h"
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)util.c 8.28 (Berkeley) 1/4/94";
#endif /* not lint */
# include "sendmail.h"
***************
*** 407,413 ****
** gid -- group id to compare against.
** uname -- user name to compare against (used for group
** sets).
! ** mustown -- to be safe, this uid must own the file.
** mode -- mode bits that must match.
**
** Returns:
--- 407,415 ----
** gid -- group id to compare against.
** uname -- user name to compare against (used for group
** sets).
! ** flags -- modifiers:
! ** SFF_MUSTOWN -- "uid" must own this file.
! ** SFF_NOSLINK -- file cannot be a symbolic link.
** mode -- mode bits that must match.
**
** Returns:
***************
*** 433,444 ****
#endif
int
! safefile(fn, uid, gid, uname, mustown, mode)
char *fn;
uid_t uid;
gid_t gid;
char *uname;
! bool mustown;
int mode;
{
register char *p;
--- 435,446 ----
#endif
int
! safefile(fn, uid, gid, uname, flags, mode)
char *fn;
uid_t uid;
gid_t gid;
char *uname;
! int flags;
int mode;
{
register char *p;
***************
*** 446,453 ****
struct stat stbuf;
if (tTd(54, 4))
! printf("safefile(%s, uid=%d, gid=%d, mustown=%d, mode=%o):\n",
! fn, uid, gid, mustown, mode);
errno = 0;
for (p = fn; (p = strchr(++p, '/')) != NULL; *p = '/')
--- 448,455 ----
struct stat stbuf;
if (tTd(54, 4))
! printf("safefile(%s, uid=%d, gid=%d, flags=%x, mode=%o):\n",
! fn, uid, gid, flags, mode);
errno = 0;
for (p = fn; (p = strchr(++p, '/')) != NULL; *p = '/')
***************
*** 455,460 ****
--- 457,468 ----
*p = '\0';
if (stat(fn, &stbuf) < 0)
break;
+ if (uid == 0 && !bitset(SFF_ROOTOK, flags))
+ {
+ if (bitset(S_IXOTH, stbuf.st_mode))
+ continue;
+ break;
+ }
if (stbuf.st_uid == uid && bitset(S_IXUSR, stbuf.st_mode))
continue;
if (stbuf.st_gid == gid && bitset(S_IXGRP, stbuf.st_mode))
***************
*** 488,494 ****
--- 496,507 ----
return ret;
}
+ #ifdef HASLSTAT
+ if ((bitset(SFF_NOSLINK, flags) ? lstat(fn, &stbuf)
+ : stat(fn, &stbuf)) < 0)
+ #else
if (stat(fn, &stbuf) < 0)
+ #endif
{
int ret = errno;
***************
*** 498,504 ****
errno = 0;
return ret;
}
! if (uid == 0)
mode >>= 6;
else if (stbuf.st_uid != uid)
{
--- 511,527 ----
errno = 0;
return ret;
}
!
! #ifdef S_ISLNK
! if (bitset(SFF_NOSLINK, flags) && S_ISLNK(stbuf.st_mode))
! {
! if (tTd(54, 4))
! printf("\t[slink mode %o]\tEPERM\n", stbuf.st_mode);
! return EPERM;
! }
! #endif
!
! if (uid == 0 && !bitset(SFF_ROOTOK, flags))
mode >>= 6;
else if (stbuf.st_uid != uid)
{
***************
*** 525,531 ****
if (tTd(54, 4))
printf("\t[uid %d, stat %o, mode %o] ",
stbuf.st_uid, stbuf.st_mode, mode);
! if ((stbuf.st_uid == uid || uid == 0 || !mustown) &&
(stbuf.st_mode & mode) == mode)
{
if (tTd(54, 4))
--- 548,555 ----
if (tTd(54, 4))
printf("\t[uid %d, stat %o, mode %o] ",
stbuf.st_uid, stbuf.st_mode, mode);
! if ((stbuf.st_uid == uid || stbuf.st_uid == 0 ||
! !bitset(SFF_MUSTOWN, flags)) &&
(stbuf.st_mode & mode) == mode)
{
if (tTd(54, 4))
***************
*** 836,847 ****
/* try to read */
p = NULL;
! while (p == NULL && !feof(fp) && !ferror(fp))
{
errno = 0;
p = fgets(buf, siz, fp);
! if (errno == EINTR)
! clearerr(fp);
}
/* clear the event if it has not sprung */
--- 860,872 ----
/* try to read */
p = NULL;
! while (!feof(fp) && !ferror(fp))
{
errno = 0;
p = fgets(buf, siz, fp);
! if (p != NULL || errno != EINTR)
! break;
! clearerr(fp);
}
/* clear the event if it has not sprung */
***************
*** 1120,1137 ****
register char *a;
register char *b;
{
! int l;
! l = strlen(a);
! for (;;)
{
! b = strchr(b, a[0]);
! if (b == NULL)
! return FALSE;
! if (strncmp(a, b, l) == 0)
return TRUE;
- b++;
}
}
/*
** CHECKFD012 -- check low numbered file descriptors
--- 1145,1167 ----
register char *a;
register char *b;
{
! int la;
! int lb;
! int c;
! la = strlen(a);
! lb = strlen(b);
! c = *a;
! if (isascii(c) && isupper(c))
! c = tolower(c);
! for (; lb-- >= la; b++)
{
! if (*b != c && isascii(*b) && isupper(*b) && tolower(*b) != c)
! continue;
! if (strncasecmp(a, b, la) == 0)
return TRUE;
}
+ return FALSE;
}
/*
** CHECKFD012 -- check low numbered file descriptors
***************
*** 1279,1284 ****
--- 1309,1335 ----
p += strlen(p);
goto defprint;
+ #ifdef S_IFIFO
+ case S_IFIFO:
+ sprintf(p, "FIFO: ");
+ p += strlen(p);
+ goto defprint;
+ #endif
+
+ #ifdef S_IFDIR
+ case S_IFDIR:
+ sprintf(p, "DIR: ");
+ p += strlen(p);
+ goto defprint;
+ #endif
+
+ #ifdef S_IFLNK
+ case S_IFLNK:
+ sprintf(p, "LNK: ");
+ p += strlen(p);
+ goto defprint;
+ #endif
+
default:
defprint:
sprintf(p, "dev=%d/%d, ino=%d, nlink=%d, u/gid=%d/%d, size=%ld",
***************
*** 1289,1295 ****
printit:
if (logit)
! syslog(LOG_INFO, "%s", buf);
else
printf("%s\n", buf);
}
--- 1340,1395 ----
printit:
if (logit)
! syslog(LOG_DEBUG, "%s", buf);
else
printf("%s\n", buf);
+ }
+ /*
+ ** SHORTENSTRING -- return short version of a string
+ **
+ ** If the string is already short, just return it. If it is too
+ ** long, return the head and tail of the string.
+ **
+ ** Parameters:
+ ** s -- the string to shorten.
+ ** m -- the max length of the string.
+ **
+ ** Returns:
+ ** Either s or a short version of s.
+ */
+
+ #ifndef MAXSHORTSTR
+ # define MAXSHORTSTR 203
+ #endif
+
+ char *
+ shortenstring(s, m)
+ register char *s;
+ int m;
+ {
+ int l;
+ static char buf[MAXSHORTSTR + 1];
+
+ l = strlen(s);
+ if (l < m)
+ return s;
+ if (m > MAXSHORTSTR)
+ m = MAXSHORTSTR;
+ else if (m < 10)
+ {
+ if (m < 5)
+ {
+ strncpy(buf, s, m);
+ buf[m] = '\0';
+ return buf;
+ }
+ strncpy(buf, s, m - 3);
+ strcpy(buf + m - 3, "...");
+ return buf;
+ }
+ m = (m - 3) / 2;
+ strncpy(buf, s, m);
+ strcpy(buf + m, "...");
+ strcpy(buf + m + 3, s + l - m);
+ return buf;
}
*** src/version.c.OLD Tue Nov 30 08:59:46 1993
--- src/version.c Thu Jan 13 06:41:44 1994
***************
*** 33,39 ****
*/
#ifndef lint
! static char sccsid[] = "@(#)version.c 8.6.1.4 (Berkeley) 10/31/93";
#endif /* not lint */
! char Version[] = "8.6.4";
--- 33,39 ----
*/
#ifndef lint
! static char sccsid[] = "@(#)version.c 8.6.1.5 (Berkeley) 1/13/94";
#endif /* not lint */
! char Version[] = "8.6.5";