Help with Sendmail


Tue, 03 Jun 97 17:07:16 +0000

Dear all,

Sorry to bother you, I don't know if this qualifies to be posted to
this list so I'm trying. If you find it offensive please ignore and
pardon me.

My problem is that I have set up ifmail on a Linux box (Red hat 4.01)
but can't get ifmail to redirect mail to my points. All mail to
recipients at the points are sent back to sender. I think the
problem is with my sendmail configuration which is listed below.
Those sendmail gurus among you, could you run a comb through it an
tell me where the louse is?

Note I not connected to the Internet (no IP address) so I have
disabled DNS and all SMTP references.

It's a plain standalone node.

------- Cut ---

##### @(#)Hnet-field.m4 1.0 960512 #####
DDhealthnet.org

##### @(#)nodns.m4 8.1 (Berkeley) 8/6/93 #####

# level 6 config file format
V6/Berkeley

##################
# local info #
##################

Cwlocalhost

# my official domain name
# ... define this only if sendmail cannot automatically determine
your domain
Djf0.n5788.z222.healthnet.org

CP.

# BITNET relay host
DBinterbit.cren.net.
CPBITNET

# "Smart" relay host (may be null)
DSFido-int:f99.n1200.z222

# place to which unknown users should be forwarded
#Kuser user -m -a<>
#DLname_of_luser_relay

# operators that cannot be in local usernames (i.e., network
indicators)
CO @ %

# a class with just dot (for identifying canonical names)
C..

# Mailer table (overriding domains)
#Kmailertable dbm /etc/mailertable

# Domain table (adding domains)
#Kdomaintable dbm /etc/domaintable

# who I send unqualified names to (null means deliver locally)
DR

# who gets all local email traffic ($R has precedence for unqualified
names)
DH

# class L: names that should be delivered locally, even if we have a
relay
# class E: names that should be exposed as from this host, even if we
masquerade
# class M: domains that should be masqueraded (also everything in
$=w)
#CL root
CE root
CEadm auth cron daemon lp news ris root tcb uucp

# dequoting map
Kdequote dequote

# who I masquerade as (null for no masquerading)
DM

# my name for error messages
DnMAILER-DAEMON

# Configuration version number
DZ8.7

###############
# Options #
###############

# strip message body to 7 bits on input?
O SevenBitInput=False

# 8-bit data handling
O EightBitMode=pass8

# wait for alias file rebuild (default units: minutes)
O AliasWait=10

# location of alias file
O AliasFile=/etc/aliases

# minimum number of free blocks on filesystem
O MinFreeBlocks=10

# maximum message size
#O MaxMessageSize=1000000

# substitution for space (blank) characters
O BlankSub=.

# avoid connecting to "expensive" mailers on initial submission?
O HoldExpensive=False

# checkpoint queue runs after every N successful deliveries
#O CheckpointInterval=10

# default delivery mode
O DeliveryMode=background

# automatically rebuild the alias database?
#O AutoRebuildAliases

# error message header/file
#O ErrorHeader=/etc/sendmail.oE

# error mode
#O ErrorMode=print

# save Unix-style "From_" lines at top of header?
#O SaveFromLine

# temporary file mode
O TempFileMode=0600

# match recipients against GECOS field?
#O MatchGECOS

# maximum hop count
#O MaxHopCount=17

# location of help file
O HelpFile=/usr/lib/sendmail.hf

# ignore dots as terminators in incoming messages?
#O IgnoreDots

# name resolver options
#O ResolverOptions=+AAONLY

# deliver MIME-encapsulated error messages?
O SendMimeErrors=False

# Forward file search path
O ForwardPath=$z/.forward.$w:$z/.forward

# open connection cache size
O ConnectionCacheSize=2

# open connection cache timeout
O ConnectionCacheTimeout=5m

# use Errors-To: header?
O UseErrorsTo=False

# log level
O LogLevel=9

# send to me too, even in an alias expansion?
O MeToo=True

# verify RHS in newaliases?
O CheckAliases=False

# default messages to old style headers if no special punctuation?
O OldStyleHeaders=True

# SMTP daemon options
#O DaemonPortOptions=Port=esmtp

# privacy flags
O PrivacyOptions=authwarnings

# who (if anyone) should get extra copies of error messages
#O PostMasterCopy=Postmaster

# slope of queue-only function
#O QueueFactor=600000

# queue directory
O QueueDirectory=/var/spool/mqueue

# timeouts (many of these)
#O Timeout.initial=5m
#O Timeout.helo=5m
#O Timeout.mail=10m
#O Timeout.rcpt=1h
#O Timeout.datainit=5m
#O Timeout.datablock=1h
#O Timeout.datafinal=1h
#O Timeout.rset=5m
#O Timeout.quit=2m
#O Timeout.misc=2m
#O Timeout.command=1h
#O Timeout.ident=30s
#O Timeout.fileopen=60s
O Timeout.queuereturn=5d
#O Timeout.queuereturn.normal=5d
#O Timeout.queuereturn.urgent=2d
#O Timeout.queuereturn.non-urgent=7d
O Timeout.queuewarn=6d
#O Timeout.queuewarn.normal=4h
#O Timeout.queuewarn.urgent=1h
#O Timeout.queuewarn.non-urgent=12h

# should we not prune routes in route-addr syntax addresses?
#O DontPruneRoutes

# queue up everything before forking?
O SuperSafe=True

# status file
O StatusFile=/etc/sendmail.st

# time zone handling:
# if undefined, use system default
# if defined but null, use TZ envariable passed in
# if defined and non-null, use that info
#O TimeZoneSpec=

# default UID (can be username or userid:groupid)
O DefaultUser=1:1

# list of locations of user database file (null means no lookup)
#O UserDatabaseSpec=/etc/userdb

# fallback MX host
#O FallbackMXhost=fall.back.host.net

# if we are the best MX host for a site, try it directly instead of
config err
O TryNullMXList=True

# load average at which we just queue messages
#O QueueLA=8

# load average at which we refuse connections
#O RefuseLA=12

# work recipient factor
#O RecipientFactor=30000

# deliver each queued job in a separate process?
#O ForkEachJob

# work class factor
#O ClassFactor=1800

# work time factor
#O RetryFactor=90000

# shall we sort the queue by hostname first?
#O QueueSortOrder=priority

# minimum time in queue before retry
#O MinQueueAge=30m

# default character set
#O DefaultCharSet=iso-8859-1

# service switch file (ignored on Solaris, Ultrix, OSF/1, others)
#O ServiceSwitchFile=/etc/service.switch

# dialup line delay on connection failure
#O DialDelay=10s

# action to take if there are no recipients in the message
#O NoRecipientAction=add-to-undisclosed

# chrooted environment for writing to files
#O SafeFileEnvironment=/arch

# are colons OK in addresses?
#O ColonOkInAddr

# how many jobs can you process in the queue?
#O MaxQueueRunSize=10000

# shall I avoid expanding CNAMEs (violates protocols)?
#O DontExpandCnames

# SMTP initial login message (old $e macro)
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b

# UNIX initial From header format (old $l macro)
O UnixFromLine=From $g $d

# delimiter (operator) characters (old $o macro)
O OperatorChars=.:%@!^/[]+

# shall I avoid calling initgroups(3) because of high NIS costs?
#O DontInitGroups

###########################
# Message precedences #
###########################

Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100

#####################
# Trusted users #
#####################

# this is equivalent to setting class "t"
#Ft/etc/sendmail.ct
Troot
Tdaemon
Tuucp

#########################
# Format of headers #
#########################

H?P?Return-Path: $g
HReceived: $?sfrom $s $.$?_($?s$|from $.$_) $.by $j ($v/$Z)$?r with
$r$. id $i$?u for $u$.; $b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
HSubject:
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
#

######################################################################

######################################################################
#####
##### REWRITING RULES
#####

######################################################################

######################################################################

##########################################
### Ruleset 2 -- Recipient Rewriting ###
##########################################

S2

### Rulset 3 -- Name Canonicalization ###
###########################################
S3

# handle null input (translate to <@> special case)
R$@ $@ <@>

# strip group: syntax (not inside angle brackets!) and trailing
semicolon
R$* $: $1 <@> mark addresses
R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr>
R$* :: $* <@> $: $1 :: $2 unmark node::addr
R:include: $* <@> $: :include: $1 unmark :include:...
R$* : $* <@> $: $2 strip colon if marked
R$* <@> $: $1 unmark
R$* ; $: $1 strip trailing semi

# null input now results from list:; syntax
R$@ $@ :; <@>

# strip angle brackets -- note RFC733 heuristic to get innermost item
R$* $: < $1 > housekeeping <>
R$+ < $* > < $2 > strip excess on left
R< $* > $+ < $1 > strip excess on right
R<> $@ < @ > MAIL FROM:<> case
R< $+ > $: $1 remove housekeeping <>

# make sure <@a,@b,@c:user@d> syntax is easy to parse -- undone later
R@ $+ , $+ @ $1 : $2 change all "," to ":"

# localize and dispose of route-based addresses
R@ $+ : $+ $@ $>96 < @$1 > : $2 handle <route-addr>

# find focus for list syntax
R $+ : $* ; @ $+ $@ $>96 $1 : $2 ; < @ $3 > list syntax
R $+ : $* ; $@ $1 : $2; list syntax

# find focus for @ syntax addresses
R$+ @ $+ $: $1 < @ $2 > focus on domain
R$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze right
R$+ < @ $+ > $@ $>96 $1 < @ $2 > already canonical

# do some sanity checking
R$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in addrs

# if we have % signs, take the rightmost one
R$* % $* $1 @ $2 First make them all @s.
R$* @ $* @ $* $1 % $2 @ $3 Undo all but the last.
R$* @ $* $@ $>96 $1 < @ $2 > Insert < > and finish

# else we must be a local name
R$* $@ $>96 $1

################################################
### Ruleset 96 -- bottom half of ruleset 3 ###
################################################

S96

# handle special cases for local names
R$* < @ localhost > $* $: $1 < @ $j . > $2 no domain at all
R$* < @ localhost . $m > $* $: $1 < @ $j . > $2 local domain
R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d]
R$* < @@ $=w > $* $: $1 < @ $j . > $3 self-literal
R$* < @@ $+ > $* $@ $1 < @ $2 > $3 canon IP addr

# 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

# if this is the local hostname, make sure we treat is as canonical
R$* < @ $j > $* $: $1 < @ $j . > $2

##################################################
### Ruleset 4 -- Final Output Post-rewriting ###
##################################################
S4

R$* <@> $@ handle <> and list:;

# strip trailing dot off possibly canonical name
R$* < @ $+ . > $* $1 < @ $2 > $3

# externalize local domain info
R$* < $+ > $* $1 $2 $3 defocus
R@ $+ : @ $+ : $+ @ $1 , @ $2 : $3 <route-addr> canonical
R@ $* $@ @ $1 ... and exit

# delete duplicate local names
R$+ % $=w @ $=w $1 @ $j u%host@host => u@host

##############################################################
### Ruleset 97 -- recanonicalize and call ruleset zero ###
### (used for recursive calls) ###
##############################################################

S97
R$* $: $>3 $1
R$* $@ $>0 $1

######################################
### Ruleset 0 -- Parse Address ###
######################################

S0

R$* < @ $*.f0.n5788.z222.healthnet.org> $#fido $@ f0.n5788.z222.healthnet.org
$: $1 <@$2.f0.n5788.z222.healthnet.org>
R<@> $#local $: <@> special case error msgs
R$* : $* ; <@> $#error $@ 5.1.3 $: "list:; syntax illegal for
recipient addresses"
R<@ $+> $#error $@ 5.1.1 $: "user address required"
R$* <$* : $* > $* $#error $@ 5.1.1 $: "colon illegal in host name
part"
R$* < @ . > $* $#error $@ 5.1.2 $: "invalid host name"

# handle numeric address spec
R$* < @ [ $+ ] > $* $: $>98 $1 < @ [ $2 ] > $3 numeric internet spec
R$* < @ [ $+ ] > $* $#smtp $@ [$2] $: $1 < @ [$2] > $3 still numeric:
send

# now delete the local info -- note $=O to find characters that cause
forwarding
R$* < @ > $* $@ $>97 $1 user@ => user
R< @ $=w . > : $* $@ $>97 $2 @here:... -> ...
R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here
R$* $=O $* < @ $=w . > $@ $>97 $1 $2 $3 ...@here -> ...

# handle local hacks
R$* $: $>98 $1

# short circuit local delivery so forwarded email works
R$=L < @ $=w . > $#local $: @ $1 special local names
R$+ < @ $=w . > $#local $: $1 regular local name

# resolve fake top level domains by forwarding to other hosts
R$*<@$+.BITNET.>$* $: $>95 < $B > $1 <@$2.BITNET.> $3
user@host.BITNET

# pass names that still have a host to a smarthost (if defined)
R$* < @ $* > $* $: $>95 < $S > $1 < @ $2 > $3 glue on smarthost name

# deal with other remote names
R$* < @$* > $* $#smtp $@ $2 $: $1 < @ $2 > $3 user@host.domain

# if this is quoted, strip the quotes and try again
R$+ $: $(dequote $1 $) strip quotes
R$+ $=O $+ $@ $>97 $1 $2 $3 try again

# handle locally delivered names
R$=L $#local $: @ $1 special local names
R$+ $#local $: $1 regular local names

######################################
### Ruleset 15 -- Sender Rewrite ###
######################################

S15
R$* < @ $*.f0.n5788.z222.healthnet.org> $#fido $@
f0.n5788.z222.healthnet.org $: $1 <@ f0.n5788.z222.healthnet.org>

###########################################################################
### Ruleset 5 -- special rewriting after aliases have been expanded
###

###########################################################################

S5

# deal with plussed users so aliases work nicely
R$+ + * $#local $@ $&h $: $1
R$+ + $* $#local $@ $2 $: $1 + *

# prepend an empty "forward host" on the front
R$+ $: <> $1

# send unrecognized local users to a relay host
#R< > $+ + $* $: < $L . > $( user $1 $) + $2
#R< > $+ $: < $L . > $( user $1 $) look up user
#R< $* > $+ <> $* $: < > $2 $3 found; strip $L
#R< $* . > $+ $: < $1 > $2 strip extra dot

# handle plussed local names
R< > $+ + $* $#local $@ $2 $: $1

# see if we have a relay or a hub
R< > $+ $: < $H > $1 try hub
R< > $+ $: < $R > $1 try relay
R< > $+ $@ $1 nope, give up
R< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 >
R< $+ > $+ $@ $>95 < $1 > $2 < @ $1 >

###################################################################
### Ruleset 90 -- try domain part of mailertable entry ###
###################################################################

#S90
#R$* <$- . $+ > $* $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4
#R$* <$- : $+ > $* $# $2 $@ $3 $: $4 check -- resolved?
#R$* < . $+ > $* $@ $>90 $1 . <$2> $3 no -- strip & try again
#R$* < $* > $* $: < $(mailertable . $@ $1$2 $) > $3 try "."
#R<$- : $+ > $* $# $1 $@ $2 $: $3 "." found?
#R< $* > $* $@ $2 no mailertable match

###################################################################
### Ruleset 95 -- canonify mailer:host syntax to triple ###
###################################################################

S95
R< > $* $@ $1 strip off null relay
R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer
R< $=w > $* $@ $2 delete local host
R< $+ > $* $#relay $@ $1 $: $2 use unqualified mailer

###################################################################
### Ruleset 93 -- convert header names to masqueraded form ###
###################################################################

S93
R$=E < @ $* > $@ $1 < @ $2 > leave exposed
R$* < @ $=w . > $* $: $1 < @ $2 . @ $M > $3 convert local names
R$* < @ $=M . > $* $: $1 < @ $2 . @ $M > $3 in same logical domain
R$* < @ $+ @ > $* $@ $1 < @ $2 > $3 $M is null
R$* < @ $+ @ $+ > $* $@ $1 < @ $3 . > $4 $M is not null

###################################################################
### Ruleset 94 -- convert envelope names to masqueraded form ###
###################################################################

S94
#R$+ $@ $>93 $1

###################################################################
### Ruleset 98 -- local part of ruleset zero (can be null) ###
###################################################################

S98

# ifmail testing
R$+ < @ gam.healthnet.org.> $#fido $@ f0.n5788.z222.healthnet.org
$: $1
R$+ < @ f0.n5788.z222.healthnet.org > $1
R$+ < @ f0.n5788.z222> $1
#R$* <@ $*.f0.n5788.z222.healthnet.org> $#fido $@ f0.n5788.z222.healthnet.org
$: $1
#R$* <@ $*.f0.n5788.z222> $#fido $@ f0.n5788.z222.healthnet.org $: $1

#

######################################################################

######################################################################
#####
##### MAILER DEFINITIONS
#####

######################################################################

######################################################################

##################################################
### Local and Program Mailer specification ###
##################################################

##### @(#)local.m4 8.20 (Berkeley) 8/13/95 #####

Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@SMhPfn, S=10/30, R=20/40,
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u
Mprog, P=/bin/sh, F=lsDFMoeu, S=10/30, R=20/40, D=$z:/,
T=X-Unix,
A=sh -c $u

#
# Envelope sender rewriting
#
S10
R<@> $n errors to mailer-daemon
R$+ $: $>50 $1 add local domain if needed
R$* $: $>94 $1 do masquerading

#
# Envelope recipient rewriting
#
S20
R$+ < @ $* > $: $1 strip host part

#
# Header sender rewriting
#
S30
R<@> $n errors to mailer-daemon
R$+ $: $>50 $1 add local domain if needed
R$* $: $>93 $1 do masquerading

#
# Header recipient rewriting
#
S40
R$+ $: $>50 $1 add local domain if needed
#R$* $: $>93 $1 do all-masquerading

#
# Common code to add local domain name (only if always-add-domain)
#
S50
R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully qualified
R$+ $@ $1 < @ $j . > add local qualification

#####################################
### SMTP Mailer specification ###
#####################################

##### @(#)smtp.m4 8.25 (Berkeley) 8/26/95 #####

Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=IPC $h
Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=IPC $h
Msmtp8, P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=IPC $h
Mrelay, P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040,
T=DNS/RFC822/SMTP,
A=IPC $h

#
# envelope sender rewriting
#
S11
R$+ $: $>51 $1 sender/recipient common
R$* :; <@> $@ list:; special case
R$* $: $>61 $1 qualify unqual'ed names
R$+ $: $>94 $1 do masquerading

#
# envelope recipient rewriting --
# also header recipient if not masquerading recipients
#
S21

# do sender/recipient common rewriting
R$+ $: $>51 $1

# unqualified names (e.g., "eric") are qualified by local host
R$* < @ $* > $* $@ $1 < @ $2 > $3 already qualified
R$+ $: $1 < @ $j > add local domain

#
# header sender and masquerading header recipient rewriting
#
S31
R$+ $: $>51 $1 sender/recipient common
R:; <@> $@ list:; special case

# do special header rewriting
R$* <@> $* $@ $1 <@> $2 pass null host through
R< @ $* > $* $@ < @ $1 > $2 pass route-addr through
R$* $: $>61 $1 qualify unqual'ed names
R$+ $: $>93 $1 do masquerading

#
# convert pseudo-domain addresses to real domain addresses
#
S51

# pass <route-addr>s through
R< @ $+ > $* $@ < @ $1 > $2 resolve <route-addr>

# output fake domains as user%fake@relay
R$+ <@ $+ .BITNET. > $: $1 % $2 .BITNET < @ $B > user@host.BITNET
R$+.BITNET <@ $+:$+ > $: $1 .BITNET < @ $3 > strip mailer: part

# 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 < @ $j . >
R$+ < @ $+ : $+ > $: $1 < @ $3 > strip mailer: part

#
# common sender and masquerading recipient rewriting
#
S61

R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully qualified
R$+ $@ $1 < @ $j . > add local qualification

# domain-ized FIDO mailer
Mfido, P=/usr/lib/ifmail/ifmail, F=mDFMhu,
S=0, R=0,
A=ifmail -r $h $u
Mfido-int, P=/usr/lib/ifmail/ifmail, F=mDFMhu,
S=0, R=0,
M=100000,
----------------- Cut -------------------------------------

TIA

A=ifmail -r $h $u@f99.n1200.z222
-----------------------------------------------------------
Osay Osman Yuuni Tel: (00220) 495442/6
Head of Computing Fax: (00220) 495919
MRC Laboratories, Fajara email: oyuuni@gam.healthnet.org
PO Box 273, Banjul
The Gambia
------------------------------------------------------------------