From: per@erix.ericsson.se (Per Hedeland)
Subject: Re: OR (remote mode)?
Organization: Ellemtel Telecom Systems Labs, Stockholm, Sweden
Date: Tue, 28 Jul 1992 20:53:39 GMT

In article <1992Jul28.155421.20972@newsgate.sps.mot.com>
embry@iam.unibe.ch (Mike Embry) writes:
>>  Many people consider 'OR' a bad idea, and comment out that line.
>
>Could you elucidate or otherwise illuminate the reasons why?

Guess it's time for this list again... Btw, I personally think the
*idea* is bad mainly because it violates the layering principles of
sendmail - a normal sendmail doesn't know or care where the local mailer
puts the mail - but some mechanism to find out if (e.g.)
/var/spool/mail is NFS-mounted and if so from where might be a useful
thing... Like, say, if 'OR/var/spool/mail' had the effect of putting the
name of the exporting host, if any, into $R, to be used in normal .cf
rules. However, the *implementation* of OR is utter disaster! Anyway,
here goes...

Here is a list of the bugs/problems with Sun's braindead OR sendmail.cf
option that I've found to date:

1. If the connection between client and server sendmail is broken during
   the DATA phase (i.e when the actual letter is transferred), the letter
   is lost, without any information to user or Postmaster, the only trace
   is a "SYSERR: net hang reading from..." type of message in syslog.

2. Anyone can fake sender addresses with sendmail -f.

3. Sendmail -t forgets to remove temp file (fixed post-4.0.3, I believe).

4. Sendmail -t called from emacs (actually whenever it can't do a
   getlogin()) with a local recipient address will put the *recipient*
   address in the From: line.

5. If a sendmail deamon is run (e.g. if you want to be kind enough to handle
   the occasional mail mis-addressed to user@client rather than having it
   sit in some queue for several days before being bounced), it will ignore
   the OR option, and happily do local delivery causing /bin/mail to write
   /var/spool/mail via NFS, or send directly to hosts in the YP map while
   setting the sender address to user@client. In addition, the local
   delivery is somehow half-baked, ignoring e.g. .forward files.

6. Since (in the normal non-deamon case) the sendmail.cf apart from OR is
   essentially ignored, it isn't possible to do *any* host-specific
   handling, e.g. splitting up mail to root depending on which client
   generated it.

7. If the mailhost isn't reachable, each letter sent will cause the
   corresponding sendmail process to sit in a loop doing repeated attempts
   - apart from the load, this means that if the client is shut down or
   rebooted before successful delivery, the mail is lost.

8. It doesn't work at all if /var/spool/mail is auto-mounted.

9. Sendmail -t will remove one empty line between header and body, with
   the effect that initial body lines that have leading whitespace, or
   that start with <word>:, are moved to the header.

10. Sendmail -t where the destination is a local alias will generate a
   "User unknown" error message (although the letter will be delivered
   correctly) - if PostmasterCopy is in effect, there will (of course)
   be an additional "User unknown" for Postmaster.

11. If a letter without a terminating newline is sent (except when using
   sendmail -t), it will not be transferred to the server, instead the
   connection will time out, and the net result will be as for 1 above
   (this is presumably the major case where those symptoms are observed).

I realize that 6 and 7 are consequences of intentional design decisions, and
that 5 might be considered operator error; I still consider them deficiencies.

I definitely recommend using one of the minimalist sendmail.cf's for this
purpose that has been floating around the net instead of the OR option. The
only inconveniences with this are that you have to actually spell out the
name of the mailhost, and that you have to make sure the client's queue is
checked - if you don't want to run a deamon (which I think is the best
solution - the load from this should be neglible), you can have sendmail -q
run from crontab e.g. hourly. On the other hand, you can use the same
sendmail.cf on non-Sun mail clients.

I have done just this, using essentially the version that Rich Salz sent out
on comp.mail.sendmail a while back (the smallest one I've seen so far:-),
and all of the problems went away.

--Per Hedeland
per@erix.ericsson.se  or
per%erix.ericsson.se@sunic.sunet.se  or
...uunet!erix.ericsson.se!per