xref: /freebsd/contrib/sendmail/cf/cf/submit.cf (revision d39bd2c1)
140266059SGregory Neil Shapiro#
25dd76dd0SGregory Neil Shapiro# Copyright (c) 1998-2004, 2009, 2010 Proofpoint, Inc. and its suppliers.
340266059SGregory Neil Shapiro#	All rights reserved.
440266059SGregory Neil Shapiro# Copyright (c) 1983, 1995 Eric P. Allman.  All rights reserved.
540266059SGregory Neil Shapiro# Copyright (c) 1988, 1993
640266059SGregory Neil Shapiro#	The Regents of the University of California.  All rights reserved.
740266059SGregory Neil Shapiro#
840266059SGregory Neil Shapiro# By using this file, you agree to the terms and conditions set
940266059SGregory Neil Shapiro# forth in the LICENSE file which can be found at the top level of
1040266059SGregory Neil Shapiro# the sendmail distribution.
1140266059SGregory Neil Shapiro#
1240266059SGregory Neil Shapiro#
1340266059SGregory Neil Shapiro
1440266059SGregory Neil Shapiro######################################################################
1540266059SGregory Neil Shapiro######################################################################
1640266059SGregory Neil Shapiro#####
1740266059SGregory Neil Shapiro#####		SENDMAIL CONFIGURATION FILE
1840266059SGregory Neil Shapiro#####
19d39bd2c1SGregory Neil Shapiro##### built by xbuild@xenon14.us.proofpoint.com on Tue Jan 30 22:39:25 PST 2024
20d39bd2c1SGregory Neil Shapiro##### in /export/jenkins/jenkins3/workspace/pps-sendmail/OpenSource/sendmail-8.18.1/cf/cf
21e92d3f3fSGregory Neil Shapiro##### using ../ as configuration include directory
2240266059SGregory Neil Shapiro#####
2340266059SGregory Neil Shapiro######################################################################
2440266059SGregory Neil Shapiro#####
2540266059SGregory Neil Shapiro#####	DO NOT EDIT THIS FILE!  Only edit the source .mc file.
2640266059SGregory Neil Shapiro#####
2740266059SGregory Neil Shapiro######################################################################
2840266059SGregory Neil Shapiro######################################################################
2940266059SGregory Neil Shapiro
304313cc83SGregory Neil Shapiro#####  $Id: cfhead.m4,v 8.122 2013-11-22 20:51:13 ca Exp $  #####
314313cc83SGregory Neil Shapiro#####  $Id: cf.m4,v 8.33 2013-11-22 20:51:13 ca Exp $  #####
324313cc83SGregory Neil Shapiro#####  $Id: submit.mc,v 8.15 2013-11-22 20:51:08 ca Exp $  #####
334313cc83SGregory Neil Shapiro#####  $Id: msp.m4,v 1.34 2013-11-22 20:51:11 ca Exp $  #####
3440266059SGregory Neil Shapiro
354313cc83SGregory Neil Shapiro#####  $Id: no_default_msa.m4,v 8.3 2013-11-22 20:51:11 ca Exp $  #####
3640266059SGregory Neil Shapiro
3740266059SGregory Neil Shapiro
384313cc83SGregory Neil Shapiro#####  $Id: proto.m4,v 8.762 2013-11-22 20:51:13 ca Exp $  #####
3940266059SGregory Neil Shapiro
4040266059SGregory Neil Shapiro# level 10 config file format
4140266059SGregory Neil ShapiroV10/Berkeley
4240266059SGregory Neil Shapiro
4340266059SGregory Neil Shapiro# override file safeties - setting this option compromises system security,
4440266059SGregory Neil Shapiro# addressing the actual file configuration problem is preferred
4540266059SGregory Neil Shapiro# need to set this before any file actions are encountered in the cf file
4640266059SGregory Neil Shapiro#O DontBlameSendmail=safe
4740266059SGregory Neil Shapiro
4840266059SGregory Neil Shapiro# default LDAP map specification
4940266059SGregory Neil Shapiro# need to set this now before any LDAP maps are defined
5040266059SGregory Neil Shapiro#O LDAPDefaultSpec=-h localhost
5140266059SGregory Neil Shapiro
5240266059SGregory Neil Shapiro##################
5340266059SGregory Neil Shapiro#   local info   #
5440266059SGregory Neil Shapiro##################
5540266059SGregory Neil Shapiro
5640266059SGregory Neil Shapiro# my LDAP cluster
5740266059SGregory Neil Shapiro# need to set this before any LDAP lookups are done (including classes)
5840266059SGregory Neil Shapiro#D{sendmailMTACluster}$m
5940266059SGregory Neil Shapiro
6040266059SGregory Neil ShapiroCwlocalhost
6140266059SGregory Neil Shapiro
6240266059SGregory Neil Shapiro# my official domain name
6340266059SGregory Neil Shapiro# ... define this only if sendmail cannot automatically determine your domain
6440266059SGregory Neil Shapiro#Dj$w.Foo.COM
6540266059SGregory Neil Shapiro
66323f6dcbSGregory Neil Shapiro# host/domain names ending with a token in class P are canonical
6740266059SGregory Neil ShapiroCP.
6840266059SGregory Neil Shapiro
6940266059SGregory Neil Shapiro# "Smart" relay host (may be null)
7040266059SGregory Neil ShapiroDS
7140266059SGregory Neil Shapiro
7240266059SGregory Neil Shapiro
7340266059SGregory Neil Shapiro# operators that cannot be in local usernames (i.e., network indicators)
7440266059SGregory Neil ShapiroCO @ % !
7540266059SGregory Neil Shapiro
7640266059SGregory Neil Shapiro# a class with just dot (for identifying canonical names)
7740266059SGregory Neil ShapiroC..
7840266059SGregory Neil Shapiro
7940266059SGregory Neil Shapiro# a class with just a left bracket (for identifying domain literals)
8040266059SGregory Neil ShapiroC[[
8140266059SGregory Neil Shapiro
8240266059SGregory Neil Shapiro
8340266059SGregory Neil Shapiro# Resolve map (to check if a host exists in check_mail)
8440266059SGregory Neil ShapiroKresolve host -a<OKR> -T<TEMP>
8540266059SGregory Neil ShapiroC{ResOk}OKR
8640266059SGregory Neil Shapiro
8740266059SGregory Neil Shapiro
8840266059SGregory Neil Shapiro# Hosts for which relaying is permitted ($=R)
8940266059SGregory Neil ShapiroFR-o /etc/mail/relay-domains
9040266059SGregory Neil Shapiro
912fb4f839SGregory Neil Shapiro
9240266059SGregory Neil Shapiro# arithmetic map
9340266059SGregory Neil ShapiroKarith arith
9440266059SGregory Neil Shapiro
9540266059SGregory Neil Shapiro
9640266059SGregory Neil Shapiro
9740266059SGregory Neil Shapiro
9840266059SGregory Neil Shapiro
9940266059SGregory Neil Shapiro# dequoting map
10040266059SGregory Neil ShapiroKdequote dequote
10140266059SGregory Neil Shapiro
10240266059SGregory Neil Shapiro# class E: names that should be exposed as from this host, even if we masquerade
10340266059SGregory Neil Shapiro# class L: names that should be delivered locally, even if we have a relay
10440266059SGregory Neil Shapiro# class M: domains that should be converted to $M
10540266059SGregory Neil Shapiro# class N: domains that should not be converted to $M
10640266059SGregory Neil Shapiro#CL root
10740266059SGregory Neil Shapiro
10840266059SGregory Neil Shapiro
10940266059SGregory Neil Shapiro
11040266059SGregory Neil Shapiro# my name for error messages
11140266059SGregory Neil ShapiroDnMAILER-DAEMON
11240266059SGregory Neil Shapiro
11340266059SGregory Neil Shapiro
114d39bd2c1SGregory Neil Shapiro
11513bd1963SGregory Neil ShapiroD{MTAHost}[127.0.0.1]
11640266059SGregory Neil Shapiro
117d39bd2c1SGregory Neil ShapiroEOPENSSL_CONF=/etc/mail/sendmail.ossl
11840266059SGregory Neil Shapiro
11940266059SGregory Neil Shapiro# Configuration version number
120d39bd2c1SGregory Neil ShapiroDZ8.18.1/Submit
12140266059SGregory Neil Shapiro
12240266059SGregory Neil Shapiro
12340266059SGregory Neil Shapiro###############
12440266059SGregory Neil Shapiro#   Options   #
12540266059SGregory Neil Shapiro###############
12640266059SGregory Neil Shapiro
12740266059SGregory Neil Shapiro# strip message body to 7 bits on input?
12840266059SGregory Neil ShapiroO SevenBitInput=False
12940266059SGregory Neil Shapiro
13040266059SGregory Neil Shapiro# 8-bit data handling
13140266059SGregory Neil Shapiro#O EightBitMode=pass8
13240266059SGregory Neil Shapiro
13340266059SGregory Neil Shapiro# wait for alias file rebuild (default units: minutes)
13440266059SGregory Neil ShapiroO AliasWait=10
13540266059SGregory Neil Shapiro
13640266059SGregory Neil Shapiro# location of alias file
137605302a5SGregory Neil Shapiro#O AliasFile=/etc/mail/aliases
13840266059SGregory Neil Shapiro
13940266059SGregory Neil Shapiro# minimum number of free blocks on filesystem
14040266059SGregory Neil ShapiroO MinFreeBlocks=100
14140266059SGregory Neil Shapiro
14240266059SGregory Neil Shapiro# maximum message size
143e92d3f3fSGregory Neil Shapiro#O MaxMessageSize=0
14440266059SGregory Neil Shapiro
14540266059SGregory Neil Shapiro# substitution for space (blank) characters
14640266059SGregory Neil ShapiroO BlankSub=.
14740266059SGregory Neil Shapiro
14840266059SGregory Neil Shapiro# avoid connecting to "expensive" mailers on initial submission?
14940266059SGregory Neil ShapiroO HoldExpensive=False
15040266059SGregory Neil Shapiro
15140266059SGregory Neil Shapiro# checkpoint queue runs after every N successful deliveries
15240266059SGregory Neil Shapiro#O CheckpointInterval=10
15340266059SGregory Neil Shapiro
15440266059SGregory Neil Shapiro# default delivery mode
15540266059SGregory Neil ShapiroO DeliveryMode=i
15640266059SGregory Neil Shapiro
15740266059SGregory Neil Shapiro# error message header/file
15840266059SGregory Neil Shapiro#O ErrorHeader=/etc/mail/error-header
15940266059SGregory Neil Shapiro
16040266059SGregory Neil Shapiro# error mode
16140266059SGregory Neil Shapiro#O ErrorMode=print
16240266059SGregory Neil Shapiro
16340266059SGregory Neil Shapiro# save Unix-style "From_" lines at top of header?
16440266059SGregory Neil Shapiro#O SaveFromLine=False
16540266059SGregory Neil Shapiro
16640266059SGregory Neil Shapiro# queue file mode (qf files)
16740266059SGregory Neil ShapiroO QueueFileMode=0660
16840266059SGregory Neil Shapiro
16940266059SGregory Neil Shapiro# temporary file mode
17040266059SGregory Neil ShapiroO TempFileMode=0600
17140266059SGregory Neil Shapiro
17240266059SGregory Neil Shapiro# match recipients against GECOS field?
17340266059SGregory Neil Shapiro#O MatchGECOS=False
17440266059SGregory Neil Shapiro
17540266059SGregory Neil Shapiro# maximum hop count
17640266059SGregory Neil Shapiro#O MaxHopCount=25
17740266059SGregory Neil Shapiro
17840266059SGregory Neil Shapiro# location of help file
17940266059SGregory Neil ShapiroO HelpFile=/etc/mail/helpfile
18040266059SGregory Neil Shapiro
18140266059SGregory Neil Shapiro# ignore dots as terminators in incoming messages?
18240266059SGregory Neil Shapiro#O IgnoreDots=False
18340266059SGregory Neil Shapiro
18440266059SGregory Neil Shapiro# name resolver options
18540266059SGregory Neil Shapiro#O ResolverOptions=+AAONLY
18640266059SGregory Neil Shapiro
18740266059SGregory Neil Shapiro# deliver MIME-encapsulated error messages?
18840266059SGregory Neil ShapiroO SendMimeErrors=True
18940266059SGregory Neil Shapiro
19040266059SGregory Neil Shapiro# Forward file search path
19140266059SGregory Neil ShapiroO ForwardPath
19240266059SGregory Neil Shapiro
19340266059SGregory Neil Shapiro# open connection cache size
19440266059SGregory Neil ShapiroO ConnectionCacheSize=2
19540266059SGregory Neil Shapiro
19640266059SGregory Neil Shapiro# open connection cache timeout
19740266059SGregory Neil ShapiroO ConnectionCacheTimeout=5m
19840266059SGregory Neil Shapiro
19940266059SGregory Neil Shapiro# persistent host status directory
20040266059SGregory Neil Shapiro#O HostStatusDirectory=.hoststat
20140266059SGregory Neil Shapiro
20240266059SGregory Neil Shapiro# single thread deliveries (requires HostStatusDirectory)?
20340266059SGregory Neil Shapiro#O SingleThreadDelivery=False
20440266059SGregory Neil Shapiro
20540266059SGregory Neil Shapiro# use Errors-To: header?
20640266059SGregory Neil ShapiroO UseErrorsTo=False
20740266059SGregory Neil Shapiro
208da7d7b9cSGregory Neil Shapiro# use compressed IPv6 address format?
209da7d7b9cSGregory Neil Shapiro#O UseCompressedIPv6Addresses
210da7d7b9cSGregory Neil Shapiro
21140266059SGregory Neil Shapiro# log level
21240266059SGregory Neil ShapiroO LogLevel=9
21340266059SGregory Neil Shapiro
21440266059SGregory Neil Shapiro# send to me too, even in an alias expansion?
21540266059SGregory Neil Shapiro#O MeToo=True
21640266059SGregory Neil Shapiro
21740266059SGregory Neil Shapiro# verify RHS in newaliases?
21840266059SGregory Neil ShapiroO CheckAliases=False
21940266059SGregory Neil Shapiro
22040266059SGregory Neil Shapiro# default messages to old style headers if no special punctuation?
22140266059SGregory Neil ShapiroO OldStyleHeaders=True
22240266059SGregory Neil Shapiro
22340266059SGregory Neil Shapiro# SMTP daemon options
22440266059SGregory Neil Shapiro
22540266059SGregory Neil ShapiroO DaemonPortOptions=Name=NoMTA, Addr=127.0.0.1, M=E
22640266059SGregory Neil Shapiro
22740266059SGregory Neil Shapiro# SMTP client options
22840266059SGregory Neil Shapiro#O ClientPortOptions=Family=inet, Address=0.0.0.0
22940266059SGregory Neil Shapiro
23040266059SGregory Neil Shapiro# Modifiers to define {daemon_flags} for direct submissions
23140266059SGregory Neil Shapiro#O DirectSubmissionModifiers
23240266059SGregory Neil Shapiro
23340266059SGregory Neil Shapiro# Use as mail submission program? See sendmail/SECURITY
23440266059SGregory Neil ShapiroO UseMSP=True
23540266059SGregory Neil Shapiro
23640266059SGregory Neil Shapiro# privacy flags
23740266059SGregory Neil ShapiroO PrivacyOptions=goaway,noetrn,restrictqrun
23840266059SGregory Neil Shapiro
23940266059SGregory Neil Shapiro# who (if anyone) should get extra copies of error messages
24040266059SGregory Neil Shapiro#O PostmasterCopy=Postmaster
24140266059SGregory Neil Shapiro
24240266059SGregory Neil Shapiro# slope of queue-only function
24340266059SGregory Neil Shapiro#O QueueFactor=600000
24440266059SGregory Neil Shapiro
24540266059SGregory Neil Shapiro# limit on number of concurrent queue runners
24640266059SGregory Neil Shapiro#O MaxQueueChildren
24740266059SGregory Neil Shapiro
24840266059SGregory Neil Shapiro# maximum number of queue-runners per queue-grouping with multiple queues
24940266059SGregory Neil Shapiro#O MaxRunnersPerQueue=1
25040266059SGregory Neil Shapiro
25140266059SGregory Neil Shapiro# priority of queue runners (nice(3))
25240266059SGregory Neil Shapiro#O NiceQueueRun
25340266059SGregory Neil Shapiro
25440266059SGregory Neil Shapiro# shall we sort the queue by hostname first?
25540266059SGregory Neil Shapiro#O QueueSortOrder=priority
25640266059SGregory Neil Shapiro
25740266059SGregory Neil Shapiro# minimum time in queue before retry
25840266059SGregory Neil Shapiro#O MinQueueAge=30m
25940266059SGregory Neil Shapiro
260da7d7b9cSGregory Neil Shapiro# maximum time in queue before retry (if > 0; only for exponential delay)
261da7d7b9cSGregory Neil Shapiro#O MaxQueueAge
262da7d7b9cSGregory Neil Shapiro
26340266059SGregory Neil Shapiro# how many jobs can you process in the queue?
2644e4196cbSGregory Neil Shapiro#O MaxQueueRunSize=0
26540266059SGregory Neil Shapiro
26640266059SGregory Neil Shapiro# perform initial split of envelope without checking MX records
26740266059SGregory Neil Shapiro#O FastSplit=1
26840266059SGregory Neil Shapiro
26940266059SGregory Neil Shapiro# queue directory
27040266059SGregory Neil ShapiroO QueueDirectory=/var/spool/clientmqueue
27140266059SGregory Neil Shapiro
272d0cef73dSGregory Neil Shapiro# key for shared memory; 0 to turn off, -1 to auto-select
27340266059SGregory Neil Shapiro#O SharedMemoryKey=0
27440266059SGregory Neil Shapiro
275d0cef73dSGregory Neil Shapiro# file to store auto-selected key for shared memory (SharedMemoryKey = -1)
276d0cef73dSGregory Neil Shapiro#O SharedMemoryKeyFile
277605302a5SGregory Neil Shapiro
27840266059SGregory Neil Shapiro# timeouts (many of these)
27940266059SGregory Neil Shapiro#O Timeout.initial=5m
28040266059SGregory Neil Shapiro#O Timeout.connect=5m
28140266059SGregory Neil Shapiro#O Timeout.aconnect=0s
28240266059SGregory Neil Shapiro#O Timeout.iconnect=5m
28340266059SGregory Neil Shapiro#O Timeout.helo=5m
28440266059SGregory Neil Shapiro#O Timeout.mail=10m
28540266059SGregory Neil Shapiro#O Timeout.rcpt=1h
28640266059SGregory Neil Shapiro#O Timeout.datainit=5m
28740266059SGregory Neil Shapiro#O Timeout.datablock=1h
28840266059SGregory Neil Shapiro#O Timeout.datafinal=1h
28940266059SGregory Neil Shapiro#O Timeout.rset=5m
29040266059SGregory Neil Shapiro#O Timeout.quit=2m
29140266059SGregory Neil Shapiro#O Timeout.misc=2m
29240266059SGregory Neil Shapiro#O Timeout.command=1h
293e92d3f3fSGregory Neil Shapiro#O Timeout.ident=5s
29440266059SGregory Neil Shapiro#O Timeout.fileopen=60s
29540266059SGregory Neil Shapiro#O Timeout.control=2m
29640266059SGregory Neil ShapiroO Timeout.queuereturn=5d
29740266059SGregory Neil Shapiro#O Timeout.queuereturn.normal=5d
29840266059SGregory Neil Shapiro#O Timeout.queuereturn.urgent=2d
29940266059SGregory Neil Shapiro#O Timeout.queuereturn.non-urgent=7d
300e92d3f3fSGregory Neil Shapiro#O Timeout.queuereturn.dsn=5d
30140266059SGregory Neil ShapiroO Timeout.queuewarn=4h
30240266059SGregory Neil Shapiro#O Timeout.queuewarn.normal=4h
30340266059SGregory Neil Shapiro#O Timeout.queuewarn.urgent=1h
30440266059SGregory Neil Shapiro#O Timeout.queuewarn.non-urgent=12h
305e92d3f3fSGregory Neil Shapiro#O Timeout.queuewarn.dsn=4h
30640266059SGregory Neil Shapiro#O Timeout.hoststatus=30m
30740266059SGregory Neil Shapiro#O Timeout.resolver.retrans=5s
30840266059SGregory Neil Shapiro#O Timeout.resolver.retrans.first=5s
30940266059SGregory Neil Shapiro#O Timeout.resolver.retrans.normal=5s
31040266059SGregory Neil Shapiro#O Timeout.resolver.retry=4
31140266059SGregory Neil Shapiro#O Timeout.resolver.retry.first=4
31240266059SGregory Neil Shapiro#O Timeout.resolver.retry.normal=4
31340266059SGregory Neil Shapiro#O Timeout.lhlo=2m
31440266059SGregory Neil Shapiro#O Timeout.auth=10m
31540266059SGregory Neil Shapiro#O Timeout.starttls=1h
31640266059SGregory Neil Shapiro
31740266059SGregory Neil Shapiro# time for DeliverBy; extension disabled if less than 0
31840266059SGregory Neil Shapiro#O DeliverByMin=0
31940266059SGregory Neil Shapiro
32040266059SGregory Neil Shapiro# should we not prune routes in route-addr syntax addresses?
32140266059SGregory Neil Shapiro#O DontPruneRoutes=False
32240266059SGregory Neil Shapiro
32340266059SGregory Neil Shapiro# queue up everything before forking?
32440266059SGregory Neil ShapiroO SuperSafe=True
32540266059SGregory Neil Shapiro
32640266059SGregory Neil Shapiro# status file
32740266059SGregory Neil ShapiroO StatusFile=/var/spool/clientmqueue/sm-client.st
32840266059SGregory Neil Shapiro
32940266059SGregory Neil Shapiro# time zone handling:
33040266059SGregory Neil Shapiro#  if undefined, use system default
33140266059SGregory Neil Shapiro#  if defined but null, use TZ envariable passed in
33240266059SGregory Neil Shapiro#  if defined and non-null, use that info
333605302a5SGregory Neil ShapiroO TimeZoneSpec=
33440266059SGregory Neil Shapiro
33540266059SGregory Neil Shapiro# default UID (can be username or userid:groupid)
33640266059SGregory Neil Shapiro#O DefaultUser=mailnull
33740266059SGregory Neil Shapiro
33840266059SGregory Neil Shapiro# list of locations of user database file (null means no lookup)
33940266059SGregory Neil Shapiro#O UserDatabaseSpec=/etc/mail/userdb
34040266059SGregory Neil Shapiro
34140266059SGregory Neil Shapiro# fallback MX host
34240266059SGregory Neil Shapiro#O FallbackMXhost=fall.back.host.net
34340266059SGregory Neil Shapiro
344e92d3f3fSGregory Neil Shapiro# fallback smart host
345e92d3f3fSGregory Neil Shapiro#O FallbackSmartHost=fall.back.host.net
346e92d3f3fSGregory Neil Shapiro
34740266059SGregory Neil Shapiro# if we are the best MX host for a site, try it directly instead of config err
34840266059SGregory Neil Shapiro#O TryNullMXList=False
34940266059SGregory Neil Shapiro
35040266059SGregory Neil Shapiro# load average at which we just queue messages
35140266059SGregory Neil Shapiro#O QueueLA=8
35240266059SGregory Neil Shapiro
35340266059SGregory Neil Shapiro# load average at which we refuse connections
35440266059SGregory Neil Shapiro#O RefuseLA=12
35540266059SGregory Neil Shapiro
356e92d3f3fSGregory Neil Shapiro# log interval when refusing connections for this long
357e92d3f3fSGregory Neil Shapiro#O RejectLogInterval=3h
358e92d3f3fSGregory Neil Shapiro
35940266059SGregory Neil Shapiro# load average at which we delay connections; 0 means no limit
36040266059SGregory Neil Shapiro#O DelayLA=0
36140266059SGregory Neil Shapiro
36240266059SGregory Neil Shapiro# maximum number of children we allow at one time
363739ac4d4SGregory Neil Shapiro#O MaxDaemonChildren=0
36440266059SGregory Neil Shapiro
36540266059SGregory Neil Shapiro# maximum number of new connections per second
36640266059SGregory Neil Shapiro#O ConnectionRateThrottle=0
36740266059SGregory Neil Shapiro
368e92d3f3fSGregory Neil Shapiro# Width of the window
369e92d3f3fSGregory Neil Shapiro#O ConnectionRateWindowSize=60s
370e92d3f3fSGregory Neil Shapiro
37140266059SGregory Neil Shapiro# work recipient factor
37240266059SGregory Neil Shapiro#O RecipientFactor=30000
37340266059SGregory Neil Shapiro
37440266059SGregory Neil Shapiro# deliver each queued job in a separate process?
37540266059SGregory Neil Shapiro#O ForkEachJob=False
37640266059SGregory Neil Shapiro
37740266059SGregory Neil Shapiro# work class factor
37840266059SGregory Neil Shapiro#O ClassFactor=1800
37940266059SGregory Neil Shapiro
38040266059SGregory Neil Shapiro# work time factor
38140266059SGregory Neil Shapiro#O RetryFactor=90000
38240266059SGregory Neil Shapiro
38340266059SGregory Neil Shapiro# default character set
384b6bacd31SGregory Neil Shapiro#O DefaultCharSet=unknown-8bit
38540266059SGregory Neil Shapiro
38640266059SGregory Neil Shapiro# service switch file (name hardwired on Solaris, Ultrix, OSF/1, others)
38740266059SGregory Neil Shapiro#O ServiceSwitchFile=/etc/mail/service.switch
38840266059SGregory Neil Shapiro
38940266059SGregory Neil Shapiro# hosts file (normally /etc/hosts)
39040266059SGregory Neil Shapiro#O HostsFile=/etc/hosts
39140266059SGregory Neil Shapiro
39240266059SGregory Neil Shapiro# dialup line delay on connection failure
3934e4196cbSGregory Neil Shapiro#O DialDelay=0s
39440266059SGregory Neil Shapiro
39540266059SGregory Neil Shapiro# action to take if there are no recipients in the message
3964e4196cbSGregory Neil Shapiro#O NoRecipientAction=none
39740266059SGregory Neil Shapiro
39840266059SGregory Neil Shapiro# chrooted environment for writing to files
3994e4196cbSGregory Neil Shapiro#O SafeFileEnvironment
40040266059SGregory Neil Shapiro
40140266059SGregory Neil Shapiro# are colons OK in addresses?
40240266059SGregory Neil Shapiro#O ColonOkInAddr=True
40340266059SGregory Neil Shapiro
40440266059SGregory Neil Shapiro# shall I avoid expanding CNAMEs (violates protocols)?
40540266059SGregory Neil Shapiro#O DontExpandCnames=False
40640266059SGregory Neil Shapiro
40740266059SGregory Neil Shapiro# SMTP initial login message (old $e macro)
40840266059SGregory Neil ShapiroO SmtpGreetingMessage=$j Sendmail $v/$Z; $b
40940266059SGregory Neil Shapiro
41040266059SGregory Neil Shapiro# UNIX initial From header format (old $l macro)
41140266059SGregory Neil ShapiroO UnixFromLine=From $g $d
41240266059SGregory Neil Shapiro
41340266059SGregory Neil Shapiro# From: lines that have embedded newlines are unwrapped onto one line
41440266059SGregory Neil Shapiro#O SingleLineFromHeader=False
41540266059SGregory Neil Shapiro
41640266059SGregory Neil Shapiro# Allow HELO SMTP command that does not include a host name
41740266059SGregory Neil Shapiro#O AllowBogusHELO=False
41840266059SGregory Neil Shapiro
41940266059SGregory Neil Shapiro# Characters to be quoted in a full name phrase (@,;:\()[] are automatic)
42040266059SGregory Neil Shapiro#O MustQuoteChars=.
42140266059SGregory Neil Shapiro
42240266059SGregory Neil Shapiro# delimiter (operator) characters (old $o macro)
42340266059SGregory Neil ShapiroO OperatorChars=.:%@!^/[]+
42440266059SGregory Neil Shapiro
42540266059SGregory Neil Shapiro# shall I avoid calling initgroups(3) because of high NIS costs?
42613bd1963SGregory Neil ShapiroO DontInitGroups=True
42740266059SGregory Neil Shapiro
42840266059SGregory Neil Shapiro# are group-writable :include: and .forward files (un)trustworthy?
42940266059SGregory Neil Shapiro# True (the default) means they are not trustworthy.
43040266059SGregory Neil Shapiro#O UnsafeGroupWrites=True
43140266059SGregory Neil Shapiro
43240266059SGregory Neil Shapiro
43340266059SGregory Neil Shapiro# where do errors that occur when sending errors get sent?
43440266059SGregory Neil Shapiro#O DoubleBounceAddress=postmaster
43540266059SGregory Neil Shapiro
436d0cef73dSGregory Neil Shapiro# issue temporary errors (4xy) instead of permanent errors (5xy)?
437d0cef73dSGregory Neil Shapiro#O SoftBounce=False
438d0cef73dSGregory Neil Shapiro
43940266059SGregory Neil Shapiro# where to save bounces if all else fails
44040266059SGregory Neil Shapiro#O DeadLetterDrop=/var/tmp/dead.letter
44140266059SGregory Neil Shapiro
44240266059SGregory Neil Shapiro# what user id do we assume for the majority of the processing?
44340266059SGregory Neil ShapiroO RunAsUser=smmsp
44440266059SGregory Neil Shapiro
44540266059SGregory Neil Shapiro# maximum number of recipients per SMTP envelope
446e92d3f3fSGregory Neil Shapiro#O MaxRecipientsPerMessage=0
44740266059SGregory Neil Shapiro
44840266059SGregory Neil Shapiro# limit the rate recipients per SMTP envelope are accepted
44940266059SGregory Neil Shapiro# once the threshold number of recipients have been rejected
450e92d3f3fSGregory Neil Shapiro#O BadRcptThrottle=0
45140266059SGregory Neil Shapiro
4529bd497b8SGregory Neil Shapiro
45340266059SGregory Neil Shapiro# shall we get local names from our installed interfaces?
45440266059SGregory Neil ShapiroO DontProbeInterfaces=True
45540266059SGregory Neil Shapiro
45640266059SGregory Neil Shapiro# Return-Receipt-To: header implies DSN request
45740266059SGregory Neil Shapiro#O RrtImpliesDsn=False
45840266059SGregory Neil Shapiro
45940266059SGregory Neil Shapiro# override connection address (for testing)
46040266059SGregory Neil Shapiro#O ConnectOnlyTo=0.0.0.0
46140266059SGregory Neil Shapiro
46240266059SGregory Neil Shapiro# Trusted user for file ownership and starting the daemon
46340266059SGregory Neil ShapiroO TrustedUser=smmsp
46440266059SGregory Neil Shapiro
46540266059SGregory Neil Shapiro# Control socket for daemon management
46640266059SGregory Neil Shapiro#O ControlSocketName=/var/spool/mqueue/.control
46740266059SGregory Neil Shapiro
46840266059SGregory Neil Shapiro# Maximum MIME header length to protect MUAs
469e92d3f3fSGregory Neil Shapiro#O MaxMimeHeaderLength=0/0
47040266059SGregory Neil Shapiro
47140266059SGregory Neil Shapiro# Maximum length of the sum of all headers
47240266059SGregory Neil Shapiro#O MaxHeadersLength=32768
47340266059SGregory Neil Shapiro
47440266059SGregory Neil Shapiro# Maximum depth of alias recursion
47540266059SGregory Neil Shapiro#O MaxAliasRecursion=10
47640266059SGregory Neil Shapiro
47740266059SGregory Neil Shapiro# location of pid file
47840266059SGregory Neil ShapiroO PidFile=/var/spool/clientmqueue/sm-client.pid
47940266059SGregory Neil Shapiro
48040266059SGregory Neil Shapiro# Prefix string for the process title shown on 'ps' listings
48140266059SGregory Neil Shapiro#O ProcessTitlePrefix=prefix
48240266059SGregory Neil Shapiro
48340266059SGregory Neil Shapiro# Data file (df) memory-buffer file maximum size
48440266059SGregory Neil Shapiro#O DataFileBufferSize=4096
48540266059SGregory Neil Shapiro
48640266059SGregory Neil Shapiro# Transcript file (xf) memory-buffer file maximum size
48740266059SGregory Neil Shapiro#O XscriptFileBufferSize=4096
48840266059SGregory Neil Shapiro
48940266059SGregory Neil Shapiro# lookup type to find information about local mailboxes
49040266059SGregory Neil Shapiro#O MailboxDatabase=pw
49140266059SGregory Neil Shapiro
492e92d3f3fSGregory Neil Shapiro# override compile time flag REQUIRES_DIR_FSYNC
493e92d3f3fSGregory Neil Shapiro#O RequiresDirfsync=true
494e92d3f3fSGregory Neil Shapiro
49540266059SGregory Neil Shapiro# list of authentication mechanisms
49640266059SGregory Neil Shapiro#O AuthMechanisms=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
49740266059SGregory Neil Shapiro
498e92d3f3fSGregory Neil Shapiro# Authentication realm
499e92d3f3fSGregory Neil Shapiro#O AuthRealm
500e92d3f3fSGregory Neil Shapiro
50140266059SGregory Neil Shapiro# default authentication information for outgoing connections
50240266059SGregory Neil Shapiro#O DefaultAuthInfo=/etc/mail/default-auth-info
50340266059SGregory Neil Shapiro
50440266059SGregory Neil Shapiro# SMTP AUTH flags
50540266059SGregory Neil Shapiro#O AuthOptions
50640266059SGregory Neil Shapiro
50740266059SGregory Neil Shapiro# SMTP AUTH maximum encryption strength
50840266059SGregory Neil Shapiro#O AuthMaxBits
50940266059SGregory Neil Shapiro
51040266059SGregory Neil Shapiro# SMTP STARTTLS server options
51140266059SGregory Neil Shapiro#O TLSSrvOptions
51240266059SGregory Neil Shapiro
513da7d7b9cSGregory Neil Shapiro# SSL cipherlist
514da7d7b9cSGregory Neil Shapiro#O CipherList
515da7d7b9cSGregory Neil Shapiro# server side SSL options
516da7d7b9cSGregory Neil Shapiro#O ServerSSLOptions
517da7d7b9cSGregory Neil Shapiro# client side SSL options
518da7d7b9cSGregory Neil Shapiro#O ClientSSLOptions
5195b0945b5SGregory Neil Shapiro# SSL Engine
5205b0945b5SGregory Neil Shapiro#O SSLEngine
5215b0945b5SGregory Neil Shapiro# Path to dynamic library for SSLEngine
5225b0945b5SGregory Neil Shapiro#O SSLEnginePath
5235b0945b5SGregory Neil Shapiro# TLS: fall back to clear text after handshake failure?
5245b0945b5SGregory Neil Shapiro#O TLSFallbacktoClear
5259bd497b8SGregory Neil Shapiro
52640266059SGregory Neil Shapiro# Input mail filters
52740266059SGregory Neil Shapiro#O InputMailFilters
52840266059SGregory Neil Shapiro
52940266059SGregory Neil Shapiro
53040266059SGregory Neil Shapiro# CA directory
53113bd1963SGregory Neil Shapiro#O CACertPath
53240266059SGregory Neil Shapiro# CA file
53313bd1963SGregory Neil Shapiro#O CACertFile
53440266059SGregory Neil Shapiro# Server Cert
53540266059SGregory Neil Shapiro#O ServerCertFile
53640266059SGregory Neil Shapiro# Server private key
53740266059SGregory Neil Shapiro#O ServerKeyFile
53840266059SGregory Neil Shapiro# Client Cert
53940266059SGregory Neil Shapiro#O ClientCertFile
54040266059SGregory Neil Shapiro# Client private key
54140266059SGregory Neil Shapiro#O ClientKeyFile
542e92d3f3fSGregory Neil Shapiro# File containing certificate revocation lists
543e92d3f3fSGregory Neil Shapiro#O CRLFile
5445b0945b5SGregory Neil Shapiro# Directory containing hashes pointing to certificate revocation status files
5455b0945b5SGregory Neil Shapiro#O CRLPath
54640266059SGregory Neil Shapiro# DHParameters (only required if DSA/DH is used)
54740266059SGregory Neil Shapiro#O DHParameters
54840266059SGregory Neil Shapiro# Random data source (required for systems without /dev/urandom under OpenSSL)
54940266059SGregory Neil Shapiro#O RandFile
550da7d7b9cSGregory Neil Shapiro# fingerprint algorithm (digest) to use for the presented cert
551da7d7b9cSGregory Neil Shapiro#O CertFingerprintAlgorithm
5525b0945b5SGregory Neil Shapiro# enable DANE?
5535b0945b5SGregory Neil Shapiro#O DANE=false
55440266059SGregory Neil Shapiro
555d0cef73dSGregory Neil Shapiro# Maximum number of "useless" commands before slowing down
556d0cef73dSGregory Neil Shapiro#O MaxNOOPCommands=20
557d0cef73dSGregory Neil Shapiro
558d0cef73dSGregory Neil Shapiro# Name to use for EHLO (defaults to $j)
559d0cef73dSGregory Neil Shapiro#O HeloName
560d0cef73dSGregory Neil Shapiro
561da7d7b9cSGregory Neil Shapiro
562da7d7b9cSGregory Neil Shapiro
56340266059SGregory Neil Shapiro############################
56440266059SGregory Neil Shapiro# QUEUE GROUP DEFINITIONS  #
56540266059SGregory Neil Shapiro############################
56640266059SGregory Neil Shapiro
56740266059SGregory Neil Shapiro
56840266059SGregory Neil Shapiro###########################
56940266059SGregory Neil Shapiro#   Message precedences   #
57040266059SGregory Neil Shapiro###########################
57140266059SGregory Neil Shapiro
57240266059SGregory Neil ShapiroPfirst-class=0
57340266059SGregory Neil ShapiroPspecial-delivery=100
57440266059SGregory Neil ShapiroPlist=-30
57540266059SGregory Neil ShapiroPbulk=-60
57640266059SGregory Neil ShapiroPjunk=-100
57740266059SGregory Neil Shapiro
57840266059SGregory Neil Shapiro#####################
57940266059SGregory Neil Shapiro#   Trusted users   #
58040266059SGregory Neil Shapiro#####################
58140266059SGregory Neil Shapiro
58240266059SGregory Neil Shapiro# this is equivalent to setting class "t"
58340266059SGregory Neil Shapiro#Ft/etc/mail/trusted-users
58440266059SGregory Neil ShapiroTroot
58540266059SGregory Neil ShapiroTdaemon
58640266059SGregory Neil ShapiroTuucp
58740266059SGregory Neil Shapiro
58840266059SGregory Neil Shapiro#########################
58940266059SGregory Neil Shapiro#   Format of headers   #
59040266059SGregory Neil Shapiro#########################
59140266059SGregory Neil Shapiro
59240266059SGregory Neil ShapiroH?P?Return-Path: <$g>
59340266059SGregory Neil ShapiroHReceived: $?sfrom $s $.$?_($?s$|from $.$_)
59440266059SGregory Neil Shapiro	$.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.)
59540266059SGregory Neil Shapiro	$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
59640266059SGregory Neil Shapiro	(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u
59740266059SGregory Neil Shapiro	for $u; $|;
59840266059SGregory Neil Shapiro	$.$b
59940266059SGregory Neil ShapiroH?D?Resent-Date: $a
60040266059SGregory Neil ShapiroH?D?Date: $a
60140266059SGregory Neil ShapiroH?F?Resent-From: $?x$x <$g>$|$g$.
60240266059SGregory Neil ShapiroH?F?From: $?x$x <$g>$|$g$.
60340266059SGregory Neil ShapiroH?x?Full-Name: $x
60440266059SGregory Neil Shapiro# HPosted-Date: $a
60540266059SGregory Neil Shapiro# H?l?Received-Date: $b
60640266059SGregory Neil ShapiroH?M?Resent-Message-Id: <$t.$i@$j>
60740266059SGregory Neil ShapiroH?M?Message-Id: <$t.$i@$j>
60840266059SGregory Neil Shapiro
60940266059SGregory Neil Shapiro#
61040266059SGregory Neil Shapiro######################################################################
61140266059SGregory Neil Shapiro######################################################################
61240266059SGregory Neil Shapiro#####
61340266059SGregory Neil Shapiro#####			REWRITING RULES
61440266059SGregory Neil Shapiro#####
61540266059SGregory Neil Shapiro######################################################################
61640266059SGregory Neil Shapiro######################################################################
61740266059SGregory Neil Shapiro
61840266059SGregory Neil Shapiro############################################
61940266059SGregory Neil Shapiro###  Ruleset 3 -- Name Canonicalization  ###
62040266059SGregory Neil Shapiro############################################
62140266059SGregory Neil ShapiroScanonify=3
62240266059SGregory Neil Shapiro
62340266059SGregory Neil Shapiro# handle null input (translate to <@> special case)
62440266059SGregory Neil ShapiroR$@			$@ <@>
62540266059SGregory Neil Shapiro
62640266059SGregory Neil Shapiro# strip group: syntax (not inside angle brackets!) and trailing semicolon
62740266059SGregory Neil ShapiroR$*			$: $1 <@>			mark addresses
62840266059SGregory Neil ShapiroR$* < $* > $* <@>	$: $1 < $2 > $3			unmark <addr>
62940266059SGregory Neil ShapiroR@ $* <@>		$: @ $1				unmark @host:...
63040266059SGregory Neil ShapiroR$* [ IPv6 : $+ ] <@>	$: $1 [ IPv6 : $2 ]		unmark IPv6 addr
63140266059SGregory Neil ShapiroR$* :: $* <@>		$: $1 :: $2			unmark node::addr
63240266059SGregory Neil ShapiroR:include: $* <@>	$: :include: $1			unmark :include:...
63340266059SGregory Neil ShapiroR$* : $* [ $* ]		$: $1 : $2 [ $3 ] <@>		remark if leading colon
63440266059SGregory Neil ShapiroR$* : $* <@>		$: $2				strip colon if marked
63540266059SGregory Neil ShapiroR$* <@>			$: $1				unmark
63640266059SGregory Neil ShapiroR$* ;			   $1				strip trailing semi
63740266059SGregory Neil ShapiroR$* < $+ :; > $*	$@ $2 :; <@>			catch <list:;>
63840266059SGregory Neil ShapiroR$* < $* ; >		   $1 < $2 >			bogus bracketed semi
63940266059SGregory Neil Shapiro
64040266059SGregory Neil Shapiro# null input now results from list:; syntax
64140266059SGregory Neil ShapiroR$@			$@ :; <@>
64240266059SGregory Neil Shapiro
64340266059SGregory Neil Shapiro# strip angle brackets -- note RFC733 heuristic to get innermost item
64440266059SGregory Neil ShapiroR$*			$: < $1 >			housekeeping <>
64540266059SGregory Neil ShapiroR$+ < $* >		   < $2 >			strip excess on left
64640266059SGregory Neil ShapiroR< $* > $+		   < $1 >			strip excess on right
64740266059SGregory Neil ShapiroR<>			$@ < @ >			MAIL FROM:<> case
64840266059SGregory Neil ShapiroR< $+ >			$: $1				remove housekeeping <>
64940266059SGregory Neil Shapiro
65040266059SGregory Neil Shapiro# strip route address <@a,@b,@c:user@d> -> <user@d>
65140266059SGregory Neil ShapiroR@ $+ , $+		$2
65240266059SGregory Neil ShapiroR@ [ $* ] : $+		$2
65340266059SGregory Neil ShapiroR@ $+ : $+		$2
65440266059SGregory Neil Shapiro
65540266059SGregory Neil Shapiro# find focus for list syntax
65640266059SGregory Neil ShapiroR $+ : $* ; @ $+	$@ $>Canonify2 $1 : $2 ; < @ $3 >	list syntax
65740266059SGregory Neil ShapiroR $+ : $* ;		$@ $1 : $2;			list syntax
65840266059SGregory Neil Shapiro
65940266059SGregory Neil Shapiro# find focus for @ syntax addresses
66040266059SGregory Neil ShapiroR$+ @ $+		$: $1 < @ $2 >			focus on domain
66140266059SGregory Neil ShapiroR$+ < $+ @ $+ >		$1 $2 < @ $3 >			move gaze right
66240266059SGregory Neil ShapiroR$+ < @ $+ >		$@ $>Canonify2 $1 < @ $2 >	already canonical
66340266059SGregory Neil Shapiro
66440266059SGregory Neil Shapiro
66540266059SGregory Neil Shapiro# convert old-style addresses to a domain-based address
66640266059SGregory Neil ShapiroR$- ! $+		$@ $>Canonify2 $2 < @ $1 .UUCP >	resolve uucp names
66740266059SGregory Neil ShapiroR$+ . $- ! $+		$@ $>Canonify2 $3 < @ $1 . $2 >		domain uucps
66840266059SGregory Neil ShapiroR$+ ! $+		$@ $>Canonify2 $2 < @ $1 .UUCP >	uucp subdomains
66940266059SGregory Neil Shapiro
67040266059SGregory Neil Shapiro# convert node::user addresses into a domain-based address
67140266059SGregory Neil ShapiroR$- :: $+		$@ $>Canonify2 $2 < @ $1 .DECNET >	resolve DECnet names
67240266059SGregory Neil ShapiroR$- . $- :: $+		$@ $>Canonify2 $3 < @ $1.$2 .DECNET >	numeric DECnet addr
67340266059SGregory Neil Shapiro
67440266059SGregory Neil Shapiro# if we have % signs, take the rightmost one
67540266059SGregory Neil ShapiroR$* % $*		$1 @ $2				First make them all @s.
67640266059SGregory Neil ShapiroR$* @ $* @ $*		$1 % $2 @ $3			Undo all but the last.
677da7d7b9cSGregory Neil Shapiro
67840266059SGregory Neil ShapiroR$* @ $*		$@ $>Canonify2 $1 < @ $2 >	Insert < > and finish
67940266059SGregory Neil Shapiro
68040266059SGregory Neil Shapiro# else we must be a local name
68140266059SGregory Neil ShapiroR$*			$@ $>Canonify2 $1
68240266059SGregory Neil Shapiro
68340266059SGregory Neil Shapiro
68440266059SGregory Neil Shapiro################################################
68540266059SGregory Neil Shapiro###  Ruleset 96 -- bottom half of ruleset 3  ###
68640266059SGregory Neil Shapiro################################################
68740266059SGregory Neil Shapiro
68840266059SGregory Neil ShapiroSCanonify2=96
68940266059SGregory Neil Shapiro
69040266059SGregory Neil Shapiro# handle special cases for local names
69140266059SGregory Neil ShapiroR$* < @ localhost > $*		$: $1 < @ $j . > $2		no domain at all
69240266059SGregory Neil ShapiroR$* < @ localhost . $m > $*	$: $1 < @ $j . > $2		local domain
69340266059SGregory Neil ShapiroR$* < @ localhost . UUCP > $*	$: $1 < @ $j . > $2		.UUCP domain
69440266059SGregory Neil Shapiro
69540266059SGregory Neil Shapiro# check for IPv4/IPv6 domain literal
69640266059SGregory Neil ShapiroR$* < @ [ $+ ] > $*		$: $1 < @@ [ $2 ] > $3		mark [addr]
69740266059SGregory Neil ShapiroR$* < @@ $=w > $*		$: $1 < @ $j . > $3		self-literal
69840266059SGregory Neil ShapiroR$* < @@ $+ > $*		$@ $1 < @ $2 > $3		canon IP addr
69940266059SGregory Neil Shapiro
70040266059SGregory Neil Shapiro
70140266059SGregory Neil Shapiro
70240266059SGregory Neil Shapiro
70340266059SGregory Neil Shapiro
70440266059SGregory Neil Shapiro# if really UUCP, handle it immediately
70540266059SGregory Neil Shapiro
70640266059SGregory Neil Shapiro# try UUCP traffic as a local address
70740266059SGregory Neil ShapiroR$* < @ $+ . UUCP > $*		$: $1 < @ $[ $2 $] . UUCP . > $3
70840266059SGregory Neil ShapiroR$* < @ $+ . . UUCP . > $*	$@ $1 < @ $2 . > $3
70940266059SGregory Neil Shapiro
71040266059SGregory Neil Shapiro# hostnames ending in class P are always canonical
71140266059SGregory Neil ShapiroR$* < @ $* $=P > $*		$: $1 < @ $2 $3 . > $4
71240266059SGregory Neil ShapiroR$* < @ $* $~P > $*		$: $&{daemon_flags} $| $1 < @ $2 $3 > $4
71340266059SGregory Neil ShapiroR$* CC $* $| $* < @ $+.$+ > $*	$: $3 < @ $4.$5 . > $6
71440266059SGregory Neil ShapiroR$* CC $* $| $*			$: $3
71540266059SGregory Neil Shapiro# pass to name server to make hostname canonical
71640266059SGregory Neil ShapiroR$* $| $* < @ $* > $*		$: $2 < @ $[ $3 $] > $4
71740266059SGregory Neil ShapiroR$* $| $*			$: $2
71840266059SGregory Neil Shapiro
71940266059SGregory Neil Shapiro# local host aliases and pseudo-domains are always canonical
72040266059SGregory Neil ShapiroR$* < @ $=w > $*		$: $1 < @ $2 . > $3
72140266059SGregory Neil ShapiroR$* < @ $=M > $*		$: $1 < @ $2 . > $3
72240266059SGregory Neil ShapiroR$* < @ $* . . > $*		$1 < @ $2 . > $3
72340266059SGregory Neil Shapiro
72440266059SGregory Neil Shapiro
72540266059SGregory Neil Shapiro##################################################
72640266059SGregory Neil Shapiro###  Ruleset 4 -- Final Output Post-rewriting  ###
72740266059SGregory Neil Shapiro##################################################
72840266059SGregory Neil ShapiroSfinal=4
72940266059SGregory Neil Shapiro
73040266059SGregory Neil ShapiroR$+ :; <@>		$@ $1 :				handle <list:;>
73140266059SGregory Neil ShapiroR$* <@>			$@				handle <> and list:;
73240266059SGregory Neil Shapiro
73340266059SGregory Neil Shapiro# strip trailing dot off possibly canonical name
73440266059SGregory Neil ShapiroR$* < @ $+ . > $*	$1 < @ $2 > $3
73540266059SGregory Neil Shapiro
73640266059SGregory Neil Shapiro# eliminate internal code
73740266059SGregory Neil ShapiroR$* < @ *LOCAL* > $*	$1 < @ $j > $2
73840266059SGregory Neil Shapiro
73940266059SGregory Neil Shapiro# externalize local domain info
74040266059SGregory Neil ShapiroR$* < $+ > $*		$1 $2 $3			defocus
74140266059SGregory Neil ShapiroR@ $+ : @ $+ : $+	@ $1 , @ $2 : $3		<route-addr> canonical
74240266059SGregory Neil ShapiroR@ $*			$@ @ $1				... and exit
74340266059SGregory Neil Shapiro
74440266059SGregory Neil Shapiro# UUCP must always be presented in old form
74540266059SGregory Neil ShapiroR$+ @ $- . UUCP		$2!$1				u@h.UUCP => h!u
74640266059SGregory Neil Shapiro
74740266059SGregory Neil Shapiro# put DECnet back in :: form
74840266059SGregory Neil ShapiroR$+ @ $+ . DECNET	$2 :: $1			u@h.DECNET => h::u
74940266059SGregory Neil Shapiro# delete duplicate local names
75040266059SGregory Neil ShapiroR$+ % $=w @ $=w		$1 @ $2				u%host@host => u@host
75140266059SGregory Neil Shapiro
75240266059SGregory Neil Shapiro
75340266059SGregory Neil Shapiro
75440266059SGregory Neil Shapiro##############################################################
75540266059SGregory Neil Shapiro###   Ruleset 97 -- recanonicalize and call ruleset zero   ###
75640266059SGregory Neil Shapiro###		   (used for recursive calls)		   ###
75740266059SGregory Neil Shapiro##############################################################
75840266059SGregory Neil Shapiro
75940266059SGregory Neil ShapiroSRecurse=97
76040266059SGregory Neil ShapiroR$*			$: $>canonify $1
76140266059SGregory Neil ShapiroR$*			$@ $>parse $1
76240266059SGregory Neil Shapiro
76340266059SGregory Neil Shapiro
76440266059SGregory Neil Shapiro######################################
76540266059SGregory Neil Shapiro###   Ruleset 0 -- Parse Address   ###
76640266059SGregory Neil Shapiro######################################
76740266059SGregory Neil Shapiro
76840266059SGregory Neil ShapiroSparse=0
76940266059SGregory Neil Shapiro
77040266059SGregory Neil ShapiroR$*			$: $>Parse0 $1		initial parsing
77140266059SGregory Neil ShapiroR<@>			$#local $: <@>		special case error msgs
77240266059SGregory Neil ShapiroR$*			$: $>ParseLocal $1	handle local hacks
77340266059SGregory Neil ShapiroR$*			$: $>Parse1 $1		final parsing
77440266059SGregory Neil Shapiro
77540266059SGregory Neil Shapiro#
77640266059SGregory Neil Shapiro#  Parse0 -- do initial syntax checking and eliminate local addresses.
77740266059SGregory Neil Shapiro#	This should either return with the (possibly modified) input
77840266059SGregory Neil Shapiro#	or return with a #error mailer.  It should not return with a
77940266059SGregory Neil Shapiro#	#mailer other than the #error mailer.
78040266059SGregory Neil Shapiro#
78140266059SGregory Neil Shapiro
78240266059SGregory Neil ShapiroSParse0
78340266059SGregory Neil ShapiroR<@>			$@ <@>			special case error msgs
78440266059SGregory Neil ShapiroR$* : $* ; <@>		$#error $@ 5.1.3 $: "553 List:; syntax illegal for recipient addresses"
78540266059SGregory Neil ShapiroR@ <@ $* >		< @ $1 >		catch "@@host" bogosity
78640266059SGregory Neil ShapiroR<@ $+>			$#error $@ 5.1.3 $: "553 User address required"
78740266059SGregory Neil ShapiroR$+ <@>			$#error $@ 5.1.3 $: "553 Hostname required"
78840266059SGregory Neil ShapiroR$*			$: <> $1
78940266059SGregory Neil ShapiroR<> $* < @ [ $* ] : $+ > $*	$1 < @ [ $2 ] : $3 > $4
79040266059SGregory Neil ShapiroR<> $* < @ [ $* ] , $+ > $*	$1 < @ [ $2 ] , $3 > $4
79140266059SGregory Neil ShapiroR<> $* < @ [ $* ] $+ > $*	$#error $@ 5.1.2 $: "553 Invalid address"
79240266059SGregory Neil ShapiroR<> $* < @ [ $+ ] > $*		$1 < @ [ $2 ] > $3
79340266059SGregory Neil ShapiroR<> $* <$* : $* > $*	$#error $@ 5.1.3 $: "553 Colon illegal in host name part"
79440266059SGregory Neil ShapiroR<> $*			$1
79540266059SGregory Neil ShapiroR$* < @ . $* > $*	$#error $@ 5.1.2 $: "553 Invalid host name"
79640266059SGregory Neil ShapiroR$* < @ $* .. $* > $*	$#error $@ 5.1.2 $: "553 Invalid host name"
79740266059SGregory Neil ShapiroR$* < @ $* @ > $*	$#error $@ 5.1.2 $: "553 Invalid route address"
79840266059SGregory Neil ShapiroR$* @ $* < @ $* > $*	$#error $@ 5.1.3 $: "553 Invalid route address"
79940266059SGregory Neil ShapiroR$* , $~O $*		$#error $@ 5.1.3 $: "553 Invalid route address"
80040266059SGregory Neil Shapiro
80140266059SGregory Neil Shapiro
80240266059SGregory Neil Shapiro# now delete the local info -- note $=O to find characters that cause forwarding
80340266059SGregory Neil ShapiroR$* < @ > $*		$@ $>Parse0 $>canonify $1	user@ => user
80440266059SGregory Neil ShapiroR< @ $=w . > : $*	$@ $>Parse0 $>canonify $2	@here:... -> ...
80540266059SGregory Neil ShapiroR$- < @ $=w . >		$: $(dequote $1 $) < @ $2 . >	dequote "foo"@here
80640266059SGregory Neil ShapiroR< @ $+ >		$#error $@ 5.1.3 $: "553 User address required"
80740266059SGregory Neil ShapiroR$* $=O $* < @ $=w . >	$@ $>Parse0 $>canonify $1 $2 $3	...@here -> ...
80840266059SGregory Neil ShapiroR$-			$: $(dequote $1 $) < @ *LOCAL* >	dequote "foo"
80940266059SGregory Neil ShapiroR< @ *LOCAL* >		$#error $@ 5.1.3 $: "553 User address required"
81040266059SGregory Neil ShapiroR$* $=O $* < @ *LOCAL* >
81140266059SGregory Neil Shapiro			$@ $>Parse0 $>canonify $1 $2 $3	...@*LOCAL* -> ...
81240266059SGregory Neil ShapiroR$* < @ *LOCAL* >	$: $1
81340266059SGregory Neil Shapiro
814da7d7b9cSGregory Neil Shapiro
81540266059SGregory Neil Shapiro#
81640266059SGregory Neil Shapiro#  Parse1 -- the bottom half of ruleset 0.
81740266059SGregory Neil Shapiro#
81840266059SGregory Neil Shapiro
81940266059SGregory Neil ShapiroSParse1
82040266059SGregory Neil Shapiro
82140266059SGregory Neil Shapiro# handle numeric address spec
82240266059SGregory Neil ShapiroR$* < @ [ $+ ] > $*	$: $>ParseLocal $1 < @ [ $2 ] > $3	numeric internet spec
8235ef517c0SGregory Neil ShapiroR$* < @ [ $+ ] > $*	$: $1 < @ [ $2 ] : $S > $3	Add smart host to path
82440266059SGregory Neil ShapiroR$* < @ [ $+ ] : > $*		$#esmtp $@ [$2] $: $1 < @ [$2] > $3	no smarthost: send
82540266059SGregory Neil ShapiroR$* < @ [ $+ ] : $- : $*> $*	$#$3 $@ $4 $: $1 < @ [$2] > $5	smarthost with mailer
82640266059SGregory Neil ShapiroR$* < @ [ $+ ] : $+ > $*	$#esmtp $@ $3 $: $1 < @ [$2] > $4	smarthost without mailer
82740266059SGregory Neil Shapiro
82840266059SGregory Neil Shapiro
82940266059SGregory Neil Shapiro# short circuit local delivery so forwarded email works
83040266059SGregory Neil Shapiro
83140266059SGregory Neil Shapiro
83240266059SGregory Neil ShapiroR$=L < @ $=w . >	$#local $: @ $1			special local names
83340266059SGregory Neil ShapiroR$+ < @ $=w . >		$#local $: $1			regular local name
83440266059SGregory Neil Shapiro
83540266059SGregory Neil Shapiro
83640266059SGregory Neil Shapiro# resolve remotely connected UUCP links (if any)
83740266059SGregory Neil Shapiro
83840266059SGregory Neil Shapiro# resolve fake top level domains by forwarding to other hosts
83940266059SGregory Neil Shapiro
84040266059SGregory Neil Shapiro
84140266059SGregory Neil Shapiro
84240266059SGregory Neil Shapiro# pass names that still have a host to a smarthost (if defined)
84340266059SGregory Neil ShapiroR$* < @ $* > $*		$: $>MailerToTriple < $S > $1 < @ $2 > $3	glue on smarthost name
84440266059SGregory Neil Shapiro
84540266059SGregory Neil Shapiro# deal with other remote names
84640266059SGregory Neil ShapiroR$* < @$* > $*		$#esmtp $@ $2 $: $1 < @ $2 > $3	user@host.domain
84740266059SGregory Neil Shapiro
84840266059SGregory Neil Shapiro# handle locally delivered names
84940266059SGregory Neil ShapiroR$=L			$#local $: @ $1		special local names
85040266059SGregory Neil ShapiroR$+			$#local $: $1			regular local names
85140266059SGregory Neil Shapiro
852da7d7b9cSGregory Neil Shapiro
853da7d7b9cSGregory Neil Shapiro
85440266059SGregory Neil Shapiro###########################################################################
85540266059SGregory Neil Shapiro###   Ruleset 5 -- special rewriting after aliases have been expanded   ###
85640266059SGregory Neil Shapiro###########################################################################
85740266059SGregory Neil Shapiro
85840266059SGregory Neil ShapiroSLocal_localaddr
85940266059SGregory Neil ShapiroSlocaladdr=5
86040266059SGregory Neil ShapiroR$+			$: $1 $| $>"Local_localaddr" $1
86140266059SGregory Neil ShapiroR$+ $| $#ok		$@ $1			no change
86240266059SGregory Neil ShapiroR$+ $| $#$*		$#$2
86340266059SGregory Neil ShapiroR$+ $| $*		$: $1
86440266059SGregory Neil Shapiro
86540266059SGregory Neil Shapiro
86640266059SGregory Neil Shapiro
86740266059SGregory Neil Shapiro
86840266059SGregory Neil Shapiro# deal with plussed users so aliases work nicely
86940266059SGregory Neil ShapiroR$+ + *			$#local $@ $&h $: $1
87040266059SGregory Neil ShapiroR$+ + $*		$#local $@ + $2 $: $1 + *
87140266059SGregory Neil Shapiro
87240266059SGregory Neil Shapiro# prepend an empty "forward host" on the front
87340266059SGregory Neil ShapiroR$+			$: <> $1
87440266059SGregory Neil Shapiro
87540266059SGregory Neil Shapiro
87640266059SGregory Neil Shapiro
87740266059SGregory Neil ShapiroR< > $+			$: < > < $1 <> $&h >		nope, restore +detail
87840266059SGregory Neil Shapiro
87940266059SGregory Neil ShapiroR< > < $+ <> + $* >	$: < > < $1 + $2 >		check whether +detail
88040266059SGregory Neil ShapiroR< > < $+ <> $* >	$: < > < $1 >			else discard
88140266059SGregory Neil ShapiroR< > < $+ + $* > $*	   < > < $1 > + $2 $3		find the user part
88240266059SGregory Neil ShapiroR< > < $+ > + $*	$#local $@ $2 $: @ $1		strip the extra +
88340266059SGregory Neil ShapiroR< > < $+ >		$@ $1				no +detail
88440266059SGregory Neil ShapiroR$+			$: $1 <> $&h			add +detail back in
88540266059SGregory Neil Shapiro
88640266059SGregory Neil ShapiroR$+ <> + $*		$: $1 + $2			check whether +detail
88740266059SGregory Neil ShapiroR$+ <> $*		$: $1				else discard
88840266059SGregory Neil ShapiroR< local : $* > $*	$: $>MailerToTriple < local : $1 > $2	no host extension
88940266059SGregory Neil ShapiroR< error : $* > $*	$: $>MailerToTriple < error : $1 > $2	no host extension
89040266059SGregory Neil Shapiro
89140266059SGregory Neil ShapiroR< $~[ : $+ > $+	$: $>MailerToTriple < $1 : $2 > $3 < @ $2 >
89240266059SGregory Neil Shapiro
89340266059SGregory Neil ShapiroR< $+ > $+		$@ $>MailerToTriple < $1 > $2 < @ $1 >
89440266059SGregory Neil Shapiro
89540266059SGregory Neil Shapiro
89640266059SGregory Neil Shapiro###################################################################
89740266059SGregory Neil Shapiro###  Ruleset 95 -- canonify mailer:[user@]host syntax to triple	###
89840266059SGregory Neil Shapiro###################################################################
89940266059SGregory Neil Shapiro
90040266059SGregory Neil ShapiroSMailerToTriple=95
90140266059SGregory Neil ShapiroR< > $*				$@ $1			strip off null relay
90240266059SGregory Neil ShapiroR< error : $-.$-.$- : $+ > $*	$#error $@ $1.$2.$3 $: $4
903a7ec597cSGregory Neil ShapiroR< error : $- : $+ > $*		$#error $@ $(dequote $1 $) $: $2
904a7ec597cSGregory Neil ShapiroR< error : $+ > $*		$#error $: $1
90540266059SGregory Neil ShapiroR< local : $* > $*		$>CanonLocal < $1 > $2
90640266059SGregory Neil ShapiroR< $~[ : $+ @ $+ > $*<$*>$*	$# $1 $@ $3 $: $2<@$3>	use literal user
90740266059SGregory Neil ShapiroR< $~[ : $+ > $*		$# $1 $@ $2 $: $3	try qualified mailer
90840266059SGregory Neil ShapiroR< $=w > $*			$@ $2			delete local host
90940266059SGregory Neil ShapiroR< $+ > $*			$#relay $@ $1 $: $2	use unqualified mailer
91040266059SGregory Neil Shapiro
91140266059SGregory Neil Shapiro###################################################################
91240266059SGregory Neil Shapiro###  Ruleset CanonLocal -- canonify local: syntax		###
91340266059SGregory Neil Shapiro###################################################################
91440266059SGregory Neil Shapiro
91540266059SGregory Neil ShapiroSCanonLocal
91640266059SGregory Neil Shapiro# strip local host from routed addresses
91740266059SGregory Neil ShapiroR< $* > < @ $+ > : $+		$@ $>Recurse $3
91840266059SGregory Neil ShapiroR< $* > $+ $=O $+ < @ $+ >	$@ $>Recurse $2 $3 $4
91940266059SGregory Neil Shapiro
92040266059SGregory Neil Shapiro# strip trailing dot from any host name that may appear
92140266059SGregory Neil ShapiroR< $* > $* < @ $* . >		$: < $1 > $2 < @ $3 >
92240266059SGregory Neil Shapiro
92340266059SGregory Neil Shapiro# handle local: syntax -- use old user, either with or without host
92440266059SGregory Neil ShapiroR< > $* < @ $* > $*		$#local $@ $1@$2 $: $1
92540266059SGregory Neil ShapiroR< > $+				$#local $@ $1    $: $1
92640266059SGregory Neil Shapiro
92740266059SGregory Neil Shapiro# handle local:user@host syntax -- ignore host part
92840266059SGregory Neil ShapiroR< $+ @ $+ > $* < @ $* >	$: < $1 > $3 < @ $4 >
92940266059SGregory Neil Shapiro
93040266059SGregory Neil Shapiro# handle local:user syntax
93140266059SGregory Neil ShapiroR< $+ > $* <@ $* > $*		$#local $@ $2@$3 $: $1
93240266059SGregory Neil ShapiroR< $+ > $*			$#local $@ $2    $: $1
93340266059SGregory Neil Shapiro
93440266059SGregory Neil Shapiro###################################################################
93540266059SGregory Neil Shapiro###  Ruleset 93 -- convert header names to masqueraded form	###
93640266059SGregory Neil Shapiro###################################################################
93740266059SGregory Neil Shapiro
93840266059SGregory Neil ShapiroSMasqHdr=93
93940266059SGregory Neil Shapiro
94040266059SGregory Neil Shapiro
94140266059SGregory Neil Shapiro# do not masquerade anything in class N
94240266059SGregory Neil ShapiroR$* < @ $* $=N . >	$@ $1 < @ $2 $3 . >
94340266059SGregory Neil Shapiro
94440266059SGregory Neil ShapiroR$* < @ *LOCAL* >	$@ $1 < @ $j . >
94540266059SGregory Neil Shapiro
94640266059SGregory Neil Shapiro###################################################################
94740266059SGregory Neil Shapiro###  Ruleset 94 -- convert envelope names to masqueraded form	###
94840266059SGregory Neil Shapiro###################################################################
94940266059SGregory Neil Shapiro
95040266059SGregory Neil ShapiroSMasqEnv=94
95140266059SGregory Neil ShapiroR$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2
95240266059SGregory Neil Shapiro
95340266059SGregory Neil Shapiro###################################################################
95440266059SGregory Neil Shapiro###  Ruleset 98 -- local part of ruleset zero (can be null)	###
95540266059SGregory Neil Shapiro###################################################################
95640266059SGregory Neil Shapiro
95740266059SGregory Neil ShapiroSParseLocal=98
95840266059SGregory Neil Shapiro
95940266059SGregory Neil Shapiro
96040266059SGregory Neil Shapiro
96140266059SGregory Neil Shapiro
962ba00ec3dSGregory Neil Shapiro
963ba00ec3dSGregory Neil Shapiro
96440266059SGregory Neil Shapiro######################################################################
96540266059SGregory Neil Shapiro###  CanonAddr --	Convert an address into a standard form for
96640266059SGregory Neil Shapiro###			relay checking.  Route address syntax is
96740266059SGregory Neil Shapiro###			crudely converted into a %-hack address.
96840266059SGregory Neil Shapiro###
96940266059SGregory Neil Shapiro###	Parameters:
97040266059SGregory Neil Shapiro###		$1 -- full recipient address
97140266059SGregory Neil Shapiro###
97240266059SGregory Neil Shapiro###	Returns:
97340266059SGregory Neil Shapiro###		parsed address, not in source route form
97440266059SGregory Neil Shapiro######################################################################
97540266059SGregory Neil Shapiro
97640266059SGregory Neil ShapiroSCanonAddr
97740266059SGregory Neil ShapiroR$*			$: $>Parse0 $>canonify $1	make domain canonical
97840266059SGregory Neil Shapiro
97940266059SGregory Neil Shapiro
98040266059SGregory Neil Shapiro######################################################################
98140266059SGregory Neil Shapiro###  ParseRecipient --	Strip off hosts in $=R as well as possibly
98240266059SGregory Neil Shapiro###			$* $=m or the access database.
98340266059SGregory Neil Shapiro###			Check user portion for host separators.
98440266059SGregory Neil Shapiro###
98540266059SGregory Neil Shapiro###	Parameters:
98640266059SGregory Neil Shapiro###		$1 -- full recipient address
98740266059SGregory Neil Shapiro###
98840266059SGregory Neil Shapiro###	Returns:
98940266059SGregory Neil Shapiro###		parsed, non-local-relaying address
99040266059SGregory Neil Shapiro######################################################################
99140266059SGregory Neil Shapiro
99240266059SGregory Neil ShapiroSParseRecipient
99340266059SGregory Neil ShapiroR$*				$: <?> $>CanonAddr $1
99440266059SGregory Neil ShapiroR<?> $* < @ $* . >		<?> $1 < @ $2 >			strip trailing dots
99540266059SGregory Neil ShapiroR<?> $- < @ $* >		$: <?> $(dequote $1 $) < @ $2 >	dequote local part
99640266059SGregory Neil Shapiro
99740266059SGregory Neil Shapiro# if no $=O character, no host in the user portion, we are done
99840266059SGregory Neil ShapiroR<?> $* $=O $* < @ $* >		$: <NO> $1 $2 $3 < @ $4>
99940266059SGregory Neil ShapiroR<?> $*				$@ $1
100040266059SGregory Neil Shapiro
100140266059SGregory Neil Shapiro
100240266059SGregory Neil ShapiroR<NO> $* < @ $* $=R >		$: <RELAY> $1 < @ $2 $3 >
100340266059SGregory Neil Shapiro
100440266059SGregory Neil Shapiro
100540266059SGregory Neil Shapiro
100640266059SGregory Neil ShapiroR<RELAY> $* < @ $* >		$@ $>ParseRecipient $1
100740266059SGregory Neil ShapiroR<$+> $*			$@ $2
100840266059SGregory Neil Shapiro
100940266059SGregory Neil Shapiro
101040266059SGregory Neil Shapiro######################################################################
101140266059SGregory Neil Shapiro###  check_relay -- check hostname/address on SMTP startup
101240266059SGregory Neil Shapiro######################################################################
101340266059SGregory Neil Shapiro
1014e92d3f3fSGregory Neil Shapiro
1015e92d3f3fSGregory Neil Shapiro
101640266059SGregory Neil ShapiroSLocal_check_relay
101740266059SGregory Neil ShapiroScheck_relay
101840266059SGregory Neil ShapiroR$*			$: $1 $| $>"Local_check_relay" $1
101940266059SGregory Neil ShapiroR$* $| $* $| $#$*	$#$3
102040266059SGregory Neil ShapiroR$* $| $* $| $*		$@ $>"Basic_check_relay" $1 $| $2
102140266059SGregory Neil Shapiro
102240266059SGregory Neil ShapiroSBasic_check_relay
102340266059SGregory Neil Shapiro# check for deferred delivery mode
102494c01205SGregory Neil ShapiroR$*			$: < $&{deliveryMode} > $1
102540266059SGregory Neil ShapiroR< d > $*		$@ deferred
102640266059SGregory Neil ShapiroR< $* > $*		$: $2
102740266059SGregory Neil Shapiro
102840266059SGregory Neil Shapiro
102940266059SGregory Neil Shapiro
103040266059SGregory Neil Shapiro######################################################################
103140266059SGregory Neil Shapiro###  check_mail -- check SMTP `MAIL FROM:' command argument
103240266059SGregory Neil Shapiro######################################################################
103340266059SGregory Neil Shapiro
103440266059SGregory Neil ShapiroSLocal_check_mail
103540266059SGregory Neil ShapiroScheck_mail
103640266059SGregory Neil ShapiroR$*			$: $1 $| $>"Local_check_mail" $1
103740266059SGregory Neil ShapiroR$* $| $#$*		$#$2
103840266059SGregory Neil ShapiroR$* $| $*		$@ $>"Basic_check_mail" $1
103940266059SGregory Neil Shapiro
104040266059SGregory Neil ShapiroSBasic_check_mail
104140266059SGregory Neil Shapiro# check for deferred delivery mode
104294c01205SGregory Neil ShapiroR$*			$: < $&{deliveryMode} > $1
104340266059SGregory Neil ShapiroR< d > $*		$@ deferred
104440266059SGregory Neil ShapiroR< $* > $*		$: $2
104540266059SGregory Neil Shapiro
104640266059SGregory Neil Shapiro# authenticated?
104740266059SGregory Neil ShapiroR$*			$: $1 $| $>"tls_client" $&{verify} $| MAIL
104840266059SGregory Neil ShapiroR$* $| $#$+		$#$2
104940266059SGregory Neil ShapiroR$* $| $*		$: $1
105040266059SGregory Neil Shapiro
105140266059SGregory Neil ShapiroR<>			$@ <OK>			we MUST accept <> (RFC 1123)
105240266059SGregory Neil ShapiroR$+			$: <?> $1
105340266059SGregory Neil ShapiroR<?><$+>		$: <@> <$1>
105440266059SGregory Neil ShapiroR<?>$+			$: <@> <$1>
105540266059SGregory Neil ShapiroR$*			$: $&{daemon_flags} $| $1
105640266059SGregory Neil ShapiroR$* f $* $| <@> < $* @ $- >	$: < ? $&{client_name} > < $3 @ $4 >
105740266059SGregory Neil ShapiroR$* u $* $| <@> < $* >	$: <?> < $3 >
105840266059SGregory Neil ShapiroR$* $| $*		$: $2
105940266059SGregory Neil Shapiro# handle case of @localhost on address
106040266059SGregory Neil ShapiroR<@> < $* @ localhost >	$: < ? $&{client_name} > < $1 @ localhost >
106140266059SGregory Neil ShapiroR<@> < $* @ [127.0.0.1] >
106240266059SGregory Neil Shapiro			$: < ? $&{client_name} > < $1 @ [127.0.0.1] >
1063da7d7b9cSGregory Neil ShapiroR<@> < $* @ [IPv6:0:0:0:0:0:0:0:1] >
1064da7d7b9cSGregory Neil Shapiro			$: < ? $&{client_name} > < $1 @ [IPv6:0:0:0:0:0:0:0:1] >
1065da7d7b9cSGregory Neil ShapiroR<@> < $* @ [IPv6:::1] >
1066da7d7b9cSGregory Neil Shapiro			$: < ? $&{client_name} > < $1 @ [IPv6:::1] >
106740266059SGregory Neil ShapiroR<@> < $* @ localhost.$m >
106840266059SGregory Neil Shapiro			$: < ? $&{client_name} > < $1 @ localhost.$m >
106940266059SGregory Neil ShapiroR<@> < $* @ localhost.UUCP >
107040266059SGregory Neil Shapiro			$: < ? $&{client_name} > < $1 @ localhost.UUCP >
107140266059SGregory Neil ShapiroR<@> $*			$: $1			no localhost as domain
107240266059SGregory Neil ShapiroR<? $=w> $*		$: $2			local client: ok
107340266059SGregory Neil ShapiroR<? $+> <$+>		$#error $@ 5.5.4 $: "553 Real domain name required for sender address"
107440266059SGregory Neil ShapiroR<?> $*			$: $1
107540266059SGregory Neil ShapiroR$*			$: <?> $>CanonAddr $1		canonify sender address and mark it
107640266059SGregory Neil ShapiroR<?> $* < @ $+ . >	<?> $1 < @ $2 >			strip trailing dots
107740266059SGregory Neil Shapiro# handle non-DNS hostnames (*.bitnet, *.decnet, *.uucp, etc)
1078959366dcSGregory Neil ShapiroR<?> $* < @ $* $=P >	$: <OKR> $1 < @ $2 $3 >
1079959366dcSGregory Neil ShapiroR<?> $* < @ $j >	$: <OKR> $1 < @ $j >
108040266059SGregory Neil ShapiroR<?> $* < @ $+ >	$: <? $(resolve $2 $: $2 <PERM> $) > $1 < @ $2 >
108140266059SGregory Neil ShapiroR<? $* <$->> $* < @ $+ >
108240266059SGregory Neil Shapiro			$: <$2> $3 < @ $4 >
108340266059SGregory Neil Shapiro
108440266059SGregory Neil Shapiro
108540266059SGregory Neil Shapiro# handle case of no @domain on address
108640266059SGregory Neil ShapiroR<?> $*			$: $&{daemon_flags} $| <?> $1
108740266059SGregory Neil ShapiroR$* u $* $| <?> $*	$: <OKR> $3
108840266059SGregory Neil ShapiroR$* $| $*		$: $2
108913bd1963SGregory Neil ShapiroR<?> $*			$: < ? $&{client_addr} > $1
1090959366dcSGregory Neil ShapiroR<?> $*			$@ <OKR>			...local unqualed ok
109140266059SGregory Neil ShapiroR<? $+> $*		$#error $@ 5.5.4 $: "553 Domain name required for sender address " $&f
109240266059SGregory Neil Shapiro							...remote is not
109340266059SGregory Neil Shapiro# check results
109440266059SGregory Neil ShapiroR<?> $*			$: @ $1		mark address: nothing known about it
1095d0cef73dSGregory Neil ShapiroR<$={ResOk}> $*		$: @ $2		domain ok
109640266059SGregory Neil ShapiroR<TEMP> $*		$#error $@ 4.1.8 $: "451 Domain of sender address " $&f " does not resolve"
109740266059SGregory Neil ShapiroR<PERM> $*		$#error $@ 5.1.8 $: "553 Domain of sender address " $&f " does not exist"
109840266059SGregory Neil Shapiro
1099d0cef73dSGregory Neil Shapiro
1100d0cef73dSGregory Neil Shapiro
110140266059SGregory Neil Shapiro######################################################################
110240266059SGregory Neil Shapiro###  check_rcpt -- check SMTP `RCPT TO:' command argument
110340266059SGregory Neil Shapiro######################################################################
110440266059SGregory Neil Shapiro
110540266059SGregory Neil ShapiroSLocal_check_rcpt
110640266059SGregory Neil ShapiroScheck_rcpt
110740266059SGregory Neil ShapiroR$*			$: $1 $| $>"Local_check_rcpt" $1
110840266059SGregory Neil ShapiroR$* $| $#$*		$#$2
110940266059SGregory Neil ShapiroR$* $| $*		$@ $>"Basic_check_rcpt" $1
111040266059SGregory Neil Shapiro
111140266059SGregory Neil ShapiroSBasic_check_rcpt
111240266059SGregory Neil Shapiro# empty address?
111340266059SGregory Neil ShapiroR<>			$#error $@ nouser $: "553 User address required"
111440266059SGregory Neil ShapiroR$@			$#error $@ nouser $: "553 User address required"
111540266059SGregory Neil Shapiro# check for deferred delivery mode
111694c01205SGregory Neil ShapiroR$*			$: < $&{deliveryMode} > $1
111740266059SGregory Neil ShapiroR< d > $*		$@ deferred
111840266059SGregory Neil ShapiroR< $* > $*		$: $2
111940266059SGregory Neil Shapiro
112040266059SGregory Neil Shapiro
112140266059SGregory Neil Shapiro######################################################################
112240266059SGregory Neil ShapiroR$*			$: $1 $| @ $>"Rcpt_ok" $1
112340266059SGregory Neil ShapiroR$* $| @ $#TEMP $+	$: $1 $| T $2
112440266059SGregory Neil ShapiroR$* $| @ $#$*		$#$2
112540266059SGregory Neil ShapiroR$* $| @ RELAY		$@ RELAY
112640266059SGregory Neil ShapiroR$* $| @ $*		$: O $| $>"Relay_ok" $1
112740266059SGregory Neil ShapiroR$* $| T $+		$: T $2 $| $>"Relay_ok" $1
112840266059SGregory Neil ShapiroR$* $| $#TEMP $+	$#error $2
112940266059SGregory Neil ShapiroR$* $| $#$*		$#$2
113040266059SGregory Neil ShapiroR$* $| RELAY		$@ RELAY
113140266059SGregory Neil ShapiroR T $+ $| $*		$#error $1
113240266059SGregory Neil Shapiro# anything else is bogus
113340266059SGregory Neil ShapiroR$*			$#error $@ 5.7.1 $: "550 Relaying denied"
113440266059SGregory Neil Shapiro
113540266059SGregory Neil Shapiro
113640266059SGregory Neil Shapiro######################################################################
113740266059SGregory Neil Shapiro### Rcpt_ok: is the recipient ok?
113840266059SGregory Neil Shapiro######################################################################
113940266059SGregory Neil ShapiroSRcpt_ok
114040266059SGregory Neil ShapiroR$*			$: $>ParseRecipient $1		strip relayable hosts
114140266059SGregory Neil Shapiro
114240266059SGregory Neil Shapiro
114340266059SGregory Neil Shapiro
114440266059SGregory Neil Shapiro
114540266059SGregory Neil Shapiro# authenticated via TLS?
114640266059SGregory Neil ShapiroR$*			$: $1 $| $>RelayTLS	client authenticated?
114740266059SGregory Neil ShapiroR$* $| $# $+		$# $2			error/ok?
114840266059SGregory Neil ShapiroR$* $| $*		$: $1			no
114940266059SGregory Neil Shapiro
115040266059SGregory Neil ShapiroR$*			$: $1 $| $>"Local_Relay_Auth" $&{auth_type}
115140266059SGregory Neil ShapiroR$* $| $# $*		$# $2
115240266059SGregory Neil ShapiroR$* $| NO		$: $1
115340266059SGregory Neil ShapiroR$* $| $*		$: $1 $| $&{auth_type}
115440266059SGregory Neil ShapiroR$* $|			$: $1
115540266059SGregory Neil ShapiroR$* $| $={TrustAuthMech}	$# RELAY
115640266059SGregory Neil ShapiroR$* $| $*		$: $1
115740266059SGregory Neil Shapiro# anything terminating locally is ok
115840266059SGregory Neil ShapiroR$+ < @ $=w >		$@ RELAY
115940266059SGregory Neil ShapiroR$+ < @ $* $=R >	$@ RELAY
116040266059SGregory Neil Shapiro
116140266059SGregory Neil Shapiro
116240266059SGregory Neil Shapiro
1163e92d3f3fSGregory Neil Shapiro
116440266059SGregory Neil Shapiro# check for local user (i.e. unqualified address)
116540266059SGregory Neil ShapiroR$*			$: <?> $1
116640266059SGregory Neil ShapiroR<?> $* < @ $+ >	$: <REMOTE> $1 < @ $2 >
116740266059SGregory Neil Shapiro# local user is ok
116840266059SGregory Neil ShapiroR<?> $+			$@ RELAY
116940266059SGregory Neil ShapiroR<$+> $*		$: $2
117040266059SGregory Neil Shapiro
117140266059SGregory Neil Shapiro######################################################################
117240266059SGregory Neil Shapiro### Relay_ok: is the relay/sender ok?
117340266059SGregory Neil Shapiro######################################################################
117440266059SGregory Neil ShapiroSRelay_ok
117540266059SGregory Neil Shapiro# anything originating locally is ok
117640266059SGregory Neil Shapiro# check IP address
117740266059SGregory Neil ShapiroR$*			$: $&{client_addr}
117840266059SGregory Neil ShapiroR$@			$@ RELAY		originated locally
117940266059SGregory Neil ShapiroR0			$@ RELAY		originated locally
118013bd1963SGregory Neil ShapiroR127.0.0.1		$@ RELAY		originated locally
1181da7d7b9cSGregory Neil ShapiroRIPv6:0:0:0:0:0:0:0:1	$@ RELAY		originated locally
118213bd1963SGregory Neil ShapiroRIPv6:::1		$@ RELAY		originated locally
118340266059SGregory Neil ShapiroR$=R $*			$@ RELAY		relayable IP address
118440266059SGregory Neil ShapiroR$*			$: [ $1 ]		put brackets around it...
118540266059SGregory Neil ShapiroR$=w			$@ RELAY		... and see if it is local
118640266059SGregory Neil Shapiro
118740266059SGregory Neil Shapiro
118840266059SGregory Neil Shapiro# check client name: first: did it resolve?
118940266059SGregory Neil ShapiroR$*			$: < $&{client_resolve} >
1190e92d3f3fSGregory Neil ShapiroR<TEMP>			$#TEMP $@ 4.4.0 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
119140266059SGregory Neil ShapiroR<FORGED>		$#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
119240266059SGregory Neil ShapiroR<FAIL>			$#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}
119340266059SGregory Neil ShapiroR$*			$: <@> $&{client_name}
119440266059SGregory Neil Shapiro# pass to name server to make hostname canonical
119540266059SGregory Neil ShapiroR<@> $* $=P		$:<?>  $1 $2
119640266059SGregory Neil ShapiroR<@> $+			$:<?>  $[ $1 $]
119740266059SGregory Neil ShapiroR$* .			$1			strip trailing dots
119840266059SGregory Neil ShapiroR<?> $=w		$@ RELAY
119940266059SGregory Neil ShapiroR<?> $* $=R			$@ RELAY
120040266059SGregory Neil Shapiro
120140266059SGregory Neil Shapiro
120240266059SGregory Neil Shapiro
120340266059SGregory Neil Shapiro
1204d0cef73dSGregory Neil Shapiro
120540266059SGregory Neil Shapiro######################################################################
120640266059SGregory Neil Shapiro###  trust_auth: is user trusted to authenticate as someone else?
120740266059SGregory Neil Shapiro###
120840266059SGregory Neil Shapiro###	Parameters:
120940266059SGregory Neil Shapiro###		$1: AUTH= parameter from MAIL command
121040266059SGregory Neil Shapiro######################################################################
121140266059SGregory Neil Shapiro
121240266059SGregory Neil ShapiroSLocal_trust_auth
121340266059SGregory Neil ShapiroStrust_auth
121440266059SGregory Neil ShapiroR$*			$: $&{auth_type} $| $1
121540266059SGregory Neil Shapiro# required by RFC 2554 section 4.
121640266059SGregory Neil ShapiroR$@ $| $*		$#error $@ 5.7.1 $: "550 not authenticated"
121740266059SGregory Neil ShapiroR$* $| $&{auth_authen}		$@ identical
121840266059SGregory Neil ShapiroR$* $| <$&{auth_authen}>	$@ identical
1219a7ec597cSGregory Neil ShapiroR$* $| $*		$: $1 $| $>"Local_trust_auth" $2
122040266059SGregory Neil ShapiroR$* $| $#$*		$#$2
122140266059SGregory Neil ShapiroR$*			$#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{auth_author}
122240266059SGregory Neil Shapiro
122340266059SGregory Neil Shapiro######################################################################
122440266059SGregory Neil Shapiro###  Relay_Auth: allow relaying based on authentication?
122540266059SGregory Neil Shapiro###
122640266059SGregory Neil Shapiro###	Parameters:
122740266059SGregory Neil Shapiro###		$1: ${auth_type}
122840266059SGregory Neil Shapiro######################################################################
122940266059SGregory Neil ShapiroSLocal_Relay_Auth
123040266059SGregory Neil Shapiro
1231e92d3f3fSGregory Neil Shapiro######################################################################
1232e92d3f3fSGregory Neil Shapiro###  srv_features: which features to offer to a client?
1233e92d3f3fSGregory Neil Shapiro###	(done in server)
1234e92d3f3fSGregory Neil Shapiro######################################################################
1235e92d3f3fSGregory Neil ShapiroSsrv_features
1236e92d3f3fSGregory Neil Shapiro
1237e92d3f3fSGregory Neil Shapiro
1238e92d3f3fSGregory Neil Shapiro######################################################################
12392fb4f839SGregory Neil Shapiro###  clt_features: which features to use with a server?
12402fb4f839SGregory Neil Shapiro###	(done in client)
12412fb4f839SGregory Neil Shapiro######################################################################
12422fb4f839SGregory Neil ShapiroSclt_features
12432fb4f839SGregory Neil Shapiro
12442fb4f839SGregory Neil Shapiro
12452fb4f839SGregory Neil Shapiro######################################################################
1246e92d3f3fSGregory Neil Shapiro###  try_tls: try to use STARTTLS?
1247e92d3f3fSGregory Neil Shapiro###	(done in client)
1248e92d3f3fSGregory Neil Shapiro######################################################################
1249e92d3f3fSGregory Neil ShapiroStry_tls
1250e92d3f3fSGregory Neil Shapiro
1251e92d3f3fSGregory Neil Shapiro
12522fb4f839SGregory Neil Shapiro
1253d39bd2c1SGregory Neil Shapiro
1254e92d3f3fSGregory Neil Shapiro######################################################################
1255e92d3f3fSGregory Neil Shapiro###  tls_rcpt: is connection with server "good" enough?
1256e92d3f3fSGregory Neil Shapiro###	(done in client, per recipient)
1257e92d3f3fSGregory Neil Shapiro###
1258e92d3f3fSGregory Neil Shapiro###	Parameters:
1259e92d3f3fSGregory Neil Shapiro###		$1: recipient
1260e92d3f3fSGregory Neil Shapiro######################################################################
1261e92d3f3fSGregory Neil ShapiroStls_rcpt
1262d39bd2c1SGregory Neil ShapiroR$*			$: $1 $| $&{verify}
1263d39bd2c1SGregory Neil ShapiroR$* $| DANE_NOTLS	$#error $@ 4.7.0 $: "454 DANE: missing STARTTLS."
1264d39bd2c1SGregory Neil ShapiroR$* $| DANE_TEMP	$#error $@ 4.7.0 $: "454 DANE check failed temporarily."
1265d39bd2c1SGregory Neil ShapiroR$* $| DANE_FAIL	$#error $@ 4.7.0 $: "454 DANE check failed."
126640266059SGregory Neil Shapiro
126740266059SGregory Neil Shapiro######################################################################
126840266059SGregory Neil Shapiro###  tls_client: is connection with client "good" enough?
126940266059SGregory Neil Shapiro###	(done in server)
127040266059SGregory Neil Shapiro###
127140266059SGregory Neil Shapiro###	Parameters:
127240266059SGregory Neil Shapiro###		${verify} $| (MAIL|STARTTLS)
127340266059SGregory Neil Shapiro######################################################################
127440266059SGregory Neil ShapiroStls_client
127540266059SGregory Neil ShapiroR$* $| $*	$@ $>"TLS_connection" $1
127640266059SGregory Neil Shapiro
127740266059SGregory Neil Shapiro######################################################################
127840266059SGregory Neil Shapiro###  tls_server: is connection with server "good" enough?
127940266059SGregory Neil Shapiro###	(done in client)
128040266059SGregory Neil Shapiro###
128140266059SGregory Neil Shapiro###	Parameter:
128240266059SGregory Neil Shapiro###		${verify}
128340266059SGregory Neil Shapiro######################################################################
128440266059SGregory Neil ShapiroStls_server
12855b0945b5SGregory Neil Shapiro
128640266059SGregory Neil ShapiroR$*		$@ $>"TLS_connection" $1
128740266059SGregory Neil Shapiro
128840266059SGregory Neil Shapiro######################################################################
128940266059SGregory Neil Shapiro###  TLS_connection: is TLS connection "good" enough?
129040266059SGregory Neil Shapiro###
129140266059SGregory Neil Shapiro###	Parameters:
129240266059SGregory Neil Shapiro###		${verify}
129340266059SGregory Neil Shapiro###		Requirement: RHS from access map, may be ? for none.
129440266059SGregory Neil Shapiro######################################################################
129540266059SGregory Neil ShapiroSTLS_connection
12962fb4f839SGregory Neil ShapiroRSOFTWARE	$#error $@ 4.7.0 $: "454 TLS handshake failed."
12972fb4f839SGregory Neil ShapiroRPROTOCOL	$#error $@ 4.7.0 $: "454 STARTTLS failed."
12982fb4f839SGregory Neil ShapiroRCONFIG		$#error $@ 4.7.0 $: "454 STARTTLS temporarily not possible."
12992fb4f839SGregory Neil Shapiro
13002fb4f839SGregory Neil Shapiro
130140266059SGregory Neil Shapiro
130240266059SGregory Neil Shapiro
1303da7d7b9cSGregory Neil Shapiro
1304da7d7b9cSGregory Neil Shapiro
130540266059SGregory Neil Shapiro######################################################################
130640266059SGregory Neil Shapiro###  RelayTLS: allow relaying based on TLS authentication
130740266059SGregory Neil Shapiro###
130840266059SGregory Neil Shapiro###	Parameters:
130940266059SGregory Neil Shapiro###		none
131040266059SGregory Neil Shapiro######################################################################
131140266059SGregory Neil ShapiroSRelayTLS
131240266059SGregory Neil Shapiro# authenticated?
131340266059SGregory Neil Shapiro
131440266059SGregory Neil Shapiro######################################################################
131540266059SGregory Neil Shapiro###  authinfo: lookup authinfo in the access map
131640266059SGregory Neil Shapiro###
131740266059SGregory Neil Shapiro###	Parameters:
131840266059SGregory Neil Shapiro###		$1: {server_name}
131940266059SGregory Neil Shapiro###		$2: {server_addr}
132040266059SGregory Neil Shapiro######################################################################
132140266059SGregory Neil ShapiroSauthinfo
132240266059SGregory Neil Shapiro
132340266059SGregory Neil Shapiro
132440266059SGregory Neil Shapiro
132540266059SGregory Neil Shapiro
1326e92d3f3fSGregory Neil Shapiro
1327e92d3f3fSGregory Neil Shapiro
1328e92d3f3fSGregory Neil Shapiro
1329e92d3f3fSGregory Neil Shapiro
133040266059SGregory Neil ShapiroSLocal_localaddr
133140266059SGregory Neil ShapiroR$+			$: $>ParseRecipient $1
133240266059SGregory Neil ShapiroR$* < @ $+ > $*		$#relay $@ ${MTAHost} $: $1 < @ $2 > $3
133340266059SGregory Neil Shapiro# DECnet
133440266059SGregory Neil ShapiroR$+ :: $+		$#relay $@ ${MTAHost} $: $1 :: $2
133540266059SGregory Neil ShapiroR$*			$#relay $@ ${MTAHost} $: $1 < @ $j >
133640266059SGregory Neil Shapiro#
133740266059SGregory Neil Shapiro######################################################################
133840266059SGregory Neil Shapiro######################################################################
133940266059SGregory Neil Shapiro#####
134040266059SGregory Neil Shapiro#####			MAIL FILTER DEFINITIONS
134140266059SGregory Neil Shapiro#####
134240266059SGregory Neil Shapiro######################################################################
134340266059SGregory Neil Shapiro######################################################################
134440266059SGregory Neil Shapiro
134540266059SGregory Neil Shapiro#
134640266059SGregory Neil Shapiro######################################################################
134740266059SGregory Neil Shapiro######################################################################
134840266059SGregory Neil Shapiro#####
134940266059SGregory Neil Shapiro#####			MAILER DEFINITIONS
135040266059SGregory Neil Shapiro#####
135140266059SGregory Neil Shapiro######################################################################
135240266059SGregory Neil Shapiro######################################################################
135340266059SGregory Neil Shapiro
135440266059SGregory Neil Shapiro
135540266059SGregory Neil Shapiro##################################################
135640266059SGregory Neil Shapiro###   Local and Program Mailer specification   ###
135740266059SGregory Neil Shapiro##################################################
135840266059SGregory Neil Shapiro
13594313cc83SGregory Neil Shapiro#####  $Id: local.m4,v 8.60 2013-11-22 20:51:14 ca Exp $  #####
136040266059SGregory Neil Shapiro
136140266059SGregory Neil Shapiro#
136240266059SGregory Neil Shapiro#  Envelope sender rewriting
136340266059SGregory Neil Shapiro#
136440266059SGregory Neil ShapiroSEnvFromL
136540266059SGregory Neil ShapiroR<@>			$n			errors to mailer-daemon
136640266059SGregory Neil ShapiroR@ <@ $*>		$n			temporarily bypass Sun bogosity
136740266059SGregory Neil ShapiroR$+			$: $>AddDomain $1	add local domain if needed
136840266059SGregory Neil ShapiroR$*			$: $>MasqEnv $1		do masquerading
136940266059SGregory Neil Shapiro
137040266059SGregory Neil Shapiro#
137140266059SGregory Neil Shapiro#  Envelope recipient rewriting
137240266059SGregory Neil Shapiro#
137340266059SGregory Neil ShapiroSEnvToL
137440266059SGregory Neil ShapiroR$+ < @ $* >		$: $1			strip host part
137540266059SGregory Neil ShapiroR$+ + $*		$: < $&{addr_type} > $1 + $2	mark with addr type
137640266059SGregory Neil ShapiroR<e s> $+ + $*		$: $1			remove +detail for sender
137740266059SGregory Neil ShapiroR< $* > $+		$: $2			else remove mark
137840266059SGregory Neil Shapiro
137940266059SGregory Neil Shapiro#
138040266059SGregory Neil Shapiro#  Header sender rewriting
138140266059SGregory Neil Shapiro#
138240266059SGregory Neil ShapiroSHdrFromL
138340266059SGregory Neil ShapiroR<@>			$n			errors to mailer-daemon
138440266059SGregory Neil ShapiroR@ <@ $*>		$n			temporarily bypass Sun bogosity
138540266059SGregory Neil ShapiroR$+			$: $>AddDomain $1	add local domain if needed
138640266059SGregory Neil ShapiroR$*			$: $>MasqHdr $1		do masquerading
138740266059SGregory Neil Shapiro
138840266059SGregory Neil Shapiro#
138940266059SGregory Neil Shapiro#  Header recipient rewriting
139040266059SGregory Neil Shapiro#
139140266059SGregory Neil ShapiroSHdrToL
139240266059SGregory Neil ShapiroR$+			$: $>AddDomain $1	add local domain if needed
139340266059SGregory Neil ShapiroR$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2
139440266059SGregory Neil Shapiro
139540266059SGregory Neil Shapiro#
139640266059SGregory Neil Shapiro#  Common code to add local domain name (only if always-add-domain)
139740266059SGregory Neil Shapiro#
139840266059SGregory Neil ShapiroSAddDomain
139940266059SGregory Neil Shapiro
140040266059SGregory Neil ShapiroMlocal,		P=[IPC], F=lmDFMuXkw5, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
140140266059SGregory Neil Shapiro		T=DNS/RFC822/SMTP,
140240266059SGregory Neil Shapiro		A=TCP $h
140340266059SGregory Neil ShapiroMprog,		P=[IPC], F=lmDFMuXk5, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,
140440266059SGregory Neil Shapiro		T=X-Unix/X-Unix/X-Unix,
140540266059SGregory Neil Shapiro		A=TCP $h
140640266059SGregory Neil Shapiro
140740266059SGregory Neil Shapiro#####################################
140840266059SGregory Neil Shapiro###   SMTP Mailer specification   ###
140940266059SGregory Neil Shapiro#####################################
141040266059SGregory Neil Shapiro
14114313cc83SGregory Neil Shapiro#####  $Id: smtp.m4,v 8.66 2013-11-22 20:51:14 ca Exp $  #####
141240266059SGregory Neil Shapiro
141340266059SGregory Neil Shapiro#
141440266059SGregory Neil Shapiro#  common sender and masquerading recipient rewriting
141540266059SGregory Neil Shapiro#
141640266059SGregory Neil ShapiroSMasqSMTP
141740266059SGregory Neil ShapiroR$* < @ $* > $*		$@ $1 < @ $2 > $3		already fully qualified
141840266059SGregory Neil ShapiroR$+			$@ $1 < @ *LOCAL* >		add local qualification
141940266059SGregory Neil Shapiro
142040266059SGregory Neil Shapiro#
142140266059SGregory Neil Shapiro#  convert pseudo-domain addresses to real domain addresses
142240266059SGregory Neil Shapiro#
142340266059SGregory Neil ShapiroSPseudoToReal
142440266059SGregory Neil Shapiro
142540266059SGregory Neil Shapiro# pass <route-addr>s through
142640266059SGregory Neil ShapiroR< @ $+ > $*		$@ < @ $1 > $2			resolve <route-addr>
142740266059SGregory Neil Shapiro
142840266059SGregory Neil Shapiro# output fake domains as user%fake@relay
142940266059SGregory Neil Shapiro
143040266059SGregory Neil Shapiro# do UUCP heuristics; note that these are shared with UUCP mailers
143140266059SGregory Neil ShapiroR$+ < @ $+ .UUCP. >	$: < $2 ! > $1			convert to UUCP form
143240266059SGregory Neil ShapiroR$+ < @ $* > $*		$@ $1 < @ $2 > $3		not UUCP form
143340266059SGregory Neil Shapiro
143440266059SGregory Neil Shapiro# leave these in .UUCP form to avoid further tampering
143540266059SGregory Neil ShapiroR< $&h ! > $- ! $+	$@ $2 < @ $1 .UUCP. >
143640266059SGregory Neil ShapiroR< $&h ! > $-.$+ ! $+	$@ $3 < @ $1.$2 >
143740266059SGregory Neil ShapiroR< $&h ! > $+		$@ $1 < @ $&h .UUCP. >
143840266059SGregory Neil ShapiroR< $+ ! > $+		$: $1 ! $2 < @ $Y >		use UUCP_RELAY
143940266059SGregory Neil ShapiroR$+ < @ $~[ $* : $+ >	$@ $1 < @ $4 >			strip mailer: part
144040266059SGregory Neil ShapiroR$+ < @ >		$: $1 < @ *LOCAL* >		if no UUCP_RELAY
144140266059SGregory Neil Shapiro
144240266059SGregory Neil Shapiro
144340266059SGregory Neil Shapiro#
144440266059SGregory Neil Shapiro#  envelope sender rewriting
144540266059SGregory Neil Shapiro#
144640266059SGregory Neil ShapiroSEnvFromSMTP
144740266059SGregory Neil ShapiroR$+			$: $>PseudoToReal $1		sender/recipient common
144840266059SGregory Neil ShapiroR$* :; <@>		$@				list:; special case
144940266059SGregory Neil ShapiroR$*			$: $>MasqSMTP $1		qualify unqual'ed names
145040266059SGregory Neil ShapiroR$+			$: $>MasqEnv $1			do masquerading
145140266059SGregory Neil Shapiro
145240266059SGregory Neil Shapiro
145340266059SGregory Neil Shapiro#
145440266059SGregory Neil Shapiro#  envelope recipient rewriting --
145540266059SGregory Neil Shapiro#  also header recipient if not masquerading recipients
145640266059SGregory Neil Shapiro#
145740266059SGregory Neil ShapiroSEnvToSMTP
145840266059SGregory Neil ShapiroR$+			$: $>PseudoToReal $1		sender/recipient common
145940266059SGregory Neil ShapiroR$+			$: $>MasqSMTP $1		qualify unqual'ed names
146040266059SGregory Neil ShapiroR$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2
146140266059SGregory Neil Shapiro
146240266059SGregory Neil Shapiro#
146340266059SGregory Neil Shapiro#  header sender and masquerading header recipient rewriting
146440266059SGregory Neil Shapiro#
146540266059SGregory Neil ShapiroSHdrFromSMTP
146640266059SGregory Neil ShapiroR$+			$: $>PseudoToReal $1		sender/recipient common
146740266059SGregory Neil ShapiroR:; <@>			$@				list:; special case
146840266059SGregory Neil Shapiro
146940266059SGregory Neil Shapiro# do special header rewriting
147040266059SGregory Neil ShapiroR$* <@> $*		$@ $1 <@> $2			pass null host through
147140266059SGregory Neil ShapiroR< @ $* > $*		$@ < @ $1 > $2			pass route-addr through
147240266059SGregory Neil ShapiroR$*			$: $>MasqSMTP $1		qualify unqual'ed names
147340266059SGregory Neil ShapiroR$+			$: $>MasqHdr $1			do masquerading
147440266059SGregory Neil Shapiro
147540266059SGregory Neil Shapiro
147640266059SGregory Neil Shapiro#
147740266059SGregory Neil Shapiro#  relay mailer header masquerading recipient rewriting
147840266059SGregory Neil Shapiro#
147940266059SGregory Neil ShapiroSMasqRelay
148040266059SGregory Neil ShapiroR$+			$: $>MasqSMTP $1
148140266059SGregory Neil ShapiroR$+			$: $>MasqHdr $1
148240266059SGregory Neil Shapiro
1483605302a5SGregory Neil ShapiroMsmtp,		P=[IPC], F=mDFMuXk5, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
148440266059SGregory Neil Shapiro		T=DNS/RFC822/SMTP,
148540266059SGregory Neil Shapiro		A=TCP $h
1486605302a5SGregory Neil ShapiroMesmtp,		P=[IPC], F=mDFMuXak5, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
148740266059SGregory Neil Shapiro		T=DNS/RFC822/SMTP,
148840266059SGregory Neil Shapiro		A=TCP $h
1489605302a5SGregory Neil ShapiroMsmtp8,		P=[IPC], F=mDFMuX8k5, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
149040266059SGregory Neil Shapiro		T=DNS/RFC822/SMTP,
149140266059SGregory Neil Shapiro		A=TCP $h
1492605302a5SGregory Neil ShapiroMdsmtp,		P=[IPC], F=mDFMuXa%k5, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
149340266059SGregory Neil Shapiro		T=DNS/RFC822/SMTP,
149440266059SGregory Neil Shapiro		A=TCP $h
1495605302a5SGregory Neil ShapiroMrelay,		P=[IPC], F=mDFMuXa8k, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2040,
149640266059SGregory Neil Shapiro		T=DNS/RFC822/SMTP,
149740266059SGregory Neil Shapiro		A=TCP $h
149840266059SGregory Neil Shapiro
14992fb4f839SGregory Neil Shapiro
1500e92d3f3fSGregory Neil Shapiro### submit.mc ###
1501e92d3f3fSGregory Neil Shapiro# divert(-1)
1502e92d3f3fSGregory Neil Shapiro# #
1503da7d7b9cSGregory Neil Shapiro# # Copyright (c) 2001-2003, 2014 Proofpoint, Inc. and its suppliers.
1504e92d3f3fSGregory Neil Shapiro# #	All rights reserved.
1505e92d3f3fSGregory Neil Shapiro# #
1506e92d3f3fSGregory Neil Shapiro# # By using this file, you agree to the terms and conditions set
1507e92d3f3fSGregory Neil Shapiro# # forth in the LICENSE file which can be found at the top level of
1508e92d3f3fSGregory Neil Shapiro# # the sendmail distribution.
1509e92d3f3fSGregory Neil Shapiro# #
1510e92d3f3fSGregory Neil Shapiro# #
1511e92d3f3fSGregory Neil Shapiro#
1512e92d3f3fSGregory Neil Shapiro# #
1513e92d3f3fSGregory Neil Shapiro# #  This is the prototype file for a set-group-ID sm-msp sendmail that
1514e92d3f3fSGregory Neil Shapiro# #  acts as a initial mail submission program.
1515e92d3f3fSGregory Neil Shapiro# #
1516e92d3f3fSGregory Neil Shapiro#
1517e92d3f3fSGregory Neil Shapiro# divert(0)dnl
15184313cc83SGregory Neil Shapiro# VERSIONID(`$Id: submit.mc,v 8.15 2013-11-22 20:51:08 ca Exp $')
1519e92d3f3fSGregory Neil Shapiro# define(`confCF_VERSION', `Submit')dnl
1520e92d3f3fSGregory Neil Shapiro# define(`__OSTYPE__',`')dnl dirty hack to keep proto.m4 from complaining
1521e92d3f3fSGregory Neil Shapiro# define(`_USE_DECNET_SYNTAX_', `1')dnl support DECnet
1522e92d3f3fSGregory Neil Shapiro# define(`confTIME_ZONE', `USE_TZ')dnl
1523e92d3f3fSGregory Neil Shapiro# define(`confDONT_INIT_GROUPS', `True')dnl
1524e92d3f3fSGregory Neil Shapiro# dnl
1525da7d7b9cSGregory Neil Shapiro# dnl If you use IPv6 only, change [127.0.0.1] to [IPv6:0:0:0:0:0:0:0:1]
1526e92d3f3fSGregory Neil Shapiro# FEATURE(`msp', `[127.0.0.1]')dnl
15272fb4f839SGregory Neil Shapiro# dnl enable this for SMTPUTF8 support
15282fb4f839SGregory Neil Shapiro# dnl LOCAL_CONFIG
15292fb4f839SGregory Neil Shapiro# dnl O SMTPUTF8=true
1530