All pastes #191555 Raw Edit

/etc/mail/sendmail.c

public shellscript v1 · immutable
·published 2006-10-05 02:43 UTC
rendered paste body
##   Copyright (c) 1998-2005 Richard Nelson.  All Rights Reserved.##  This file is used to configure Sendmail for use with Debian systems.### Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers.#	All rights reserved.# Copyright (c) 1983, 1995 Eric P. Allman.  All rights reserved.# Copyright (c) 1988, 1993#	The Regents of the University of California.  All rights reserved.## By using this file, you agree to the terms and conditions set# forth in the LICENSE file which can be found at the top level of# the sendmail distribution.########################################################################################################################################################		SENDMAIL CONFIGURATION FILE########## built by root@debian on Wed Oct 4 21:25:35 CDT 2006##### in /var/cache/apt/archives##### using /usr/share/sendmail/cf/ as configuration include directory#####################################################################################	DO NOT EDIT THIS FILE!  Only edit the source .mc file.######################################################################################################################################################  $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $  ##########  $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $  ##########  $Id: sendmail.mc, v 8.13.8-2 2006-09-01 05:10:48 cowboy Exp $  ##########  $Id: autoconf.m4, v 8.13.8-2 2006-09-01 05:10:48 cowboy Exp $  ##########  $Id: debian.m4, v 8.13.8-2 2006-09-01 05:10:48 cowboy Exp $  #######-------------------------------------------------------------------------## Undocumented features are available in Debian Sendmail 8.13.8-2.#	* none## _FFR_ features are available in Debian Sendmail 8.13.8-2.#	* milter#	*  -D_FFR_QUEUE_SCHED_DBG -D_FFR_SKIP_DOMAINS -D_FFR_BLOCK_PROXIES -D_FFR_GROUPREADABLEAUTHINFOFILE -D_FFR_CONTROL_MSTAT -D_FFR_DAEMON_NETUNIX -D_FFR_NO_PIPE -D_FFR_SHM_STATUS -D_FFR_RHS -D_FFR_MAIL_MACRO -D_FFR_HELONAME -D_FFR_QUEUEDELAY=1 -D_FFR_RESET_MACRO_GLOBALS -D_FFR_TLS_1 -D_FFR_DEAL_WITH_ERROR_SSL#-------------------------------------------------------------------------## These _FFR_ features are for sendmail.mc processing# #-------------------------------------------------------------------------#####  $Id: debian-mta.m4, v 8.13.8-2 2006-09-01 05:10:48 cowboy Exp $  ##########  $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $  ##########  $Id: access_db.m4,v 8.26 2004/06/24 18:10:02 ca Exp $  ##########  $Id: greet_pause.m4,v 1.4 2004/07/06 20:49:51 ca Exp $  ##########  $Id: delay_checks.m4,v 8.8 2000/12/05 18:50:45 ca Exp $  ##########  $Id: conncontrol.m4,v 1.4 2004/02/19 21:31:47 ca Exp $  ##########  $Id: ratecontrol.m4,v 1.5 2004/02/19 21:31:47 ca Exp $  ##########  $Id: always_add_domain.m4,v 8.11 2000/09/12 22:00:53 ca Exp $  ##########  $Id: allmasquerade.m4,v 8.13 2000/09/12 22:00:53 ca Exp $  ##########  $Id: masquerade_envelope.m4,v 8.9 1999/02/07 07:26:10 gshapiro Exp $  ##########  $Id: proto.m4,v 8.719 2006/03/30 20:50:13 ca Exp $  ###### level 10 config file formatV10/Berkeley# override file safeties - setting this option compromises system security,# addressing the actual file configuration problem is preferred# need to set this before any file actions are encountered in the cf fileO DontBlameSendmail=			,AssumeSafeChown,ForwardFileInGroupWritableDirPath,GroupWritableForwardFileSafe,GroupWritableIncludeFileSafe,IncludeFileInGroupWritableDirPath,DontWarnForwardFileInUnsafeDirPath,TrustStickyBit,NonRootSafeAddr,GroupWritableIncludeFile,GroupReadableaDefaultAuthInfoFile# default LDAP map specification# need to set this now before any LDAP maps are defined#O LDAPDefaultSpec=-h localhost###################   local info   #################### my LDAP cluster# need to set this before any LDAP lookups are done (including classes)#D{sendmailMTACluster}$mCwlocalhost# my official domain name# ... define this only if sendmail cannot automatically determine your domainDj;; connection timed out; no servers could be reached# host/domain names ending with a token in class P are canonicalCP.# "Smart" relay host (may be null)DS# operators that cannot be in local usernames (i.e., network indicators)CO @ % !# a class with just dot (for identifying canonical names)C..# a class with just a left bracket (for identifying domain literals)C[[# access_db acceptance classC{Accept}OK RELAY# Resolve map (to check if a host exists in check_mail)Kresolve host -a<OKR> -T<TEMP>C{ResOk}OKR# Hosts for which relaying is permitted ($=R)FR-o /etc/mail/relay-domains %[^\#]# arithmetic mapKarith arith# macro storage mapKmacro macro# possible values for TLS_connection in access mapC{Tls}VERIFY ENCR# dequoting mapKdequote dequote# class E: names that should be exposed as from this host, even if we masquerade# class L: names that should be delivered locally, even if we have a relay# class M: domains that should be converted to $M# class N: domains that should not be converted to $M#CL root# who I masquerade as (null for no masquerading) (see also $=M)DMdebian.chris1.myftp.org# my name for error messagesDnMAILER-DAEMON# Access list database (for spam stomping)Kaccess hash -T<TMPF> /etc/mail/access#------------------------------------------------------------## Dynamic host/ip updates from /etc/network/if-up.d/sendmail## NOTE: the following line *MUST* be in /etc/mail/sendmail.mc# This should *NOT* be included in submit.mc !## Make sure we accept mail as this ip (for bounces, etc)Cw192.168.1.109## Define our true hostname (from our ISP) - becomes $j## Make sure we accept mail as this name (for bounces, etc)Cw;; connection timed out; no servers could be reached## Add our hostname to class G for genericstable supportCG;; connection timed out; no servers could be reached#------------------------------------------------------------# Configuration version numberDZ8.13.8/Debian-2################   Options   ################# strip message body to 7 bits on input?O SevenBitInput=False# 8-bit data handling#O EightBitMode=pass8# wait for alias file rebuild (default units: minutes)O AliasWait=10# location of alias fileO AliasFile=/etc/mail/aliases# minimum number of free blocks on filesystemO MinFreeBlocks=100# maximum message size#O MaxMessageSize=0# substitution for space (blank) charactersO BlankSub=.# avoid connecting to "expensive" mailers on initial submission?O HoldExpensive=False# checkpoint queue runs after every N successful deliveries#O CheckpointInterval=10# default delivery modeO DeliveryMode=background# error message header/file#O ErrorHeader=/etc/mail/error-header# error mode#O ErrorMode=print# save Unix-style "From_" lines at top of header?#O SaveFromLine=False# queue file mode (qf files)O QueueFileMode=0640# temporary file modeO TempFileMode=0644# match recipients against GECOS field?#O MatchGECOS=False# maximum hop count#O MaxHopCount=25# location of help fileO HelpFile=/etc/mail/helpfile# ignore dots as terminators in incoming messages?#O IgnoreDots=False# name resolver optionsO ResolverOptions=+WorkAroundBrokenAAAA# deliver MIME-encapsulated error messages?O SendMimeErrors=True# Forward file search pathO ForwardPath=$z/.forward.$w:$z/.forward# open connection cache sizeO ConnectionCacheSize=2# open connection cache timeoutO ConnectionCacheTimeout=5m# persistent host status directory#O HostStatusDirectory=.hoststat# single thread deliveries (requires HostStatusDirectory)?#O SingleThreadDelivery=False# use Errors-To: header?O UseErrorsTo=False# log levelO LogLevel=9# send to me too, even in an alias expansion?O MeToo=True# verify RHS in newaliases?O CheckAliases=False# default messages to old style headers if no special punctuation?O OldStyleHeaders=True# SMTP daemon optionsO DaemonPortOptions=Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1O DaemonPortOptions=Family=inet,  Name=MSP-v4, Port=submission, Addr=127.0.0.1# SMTP client options#O ClientPortOptions=Family=inet, Address=0.0.0.0# Modifiers to define {daemon_flags} for direct submissions#O DirectSubmissionModifiers# Use as mail submission program? See sendmail/SECURITY#O UseMSP# privacy flagsO PrivacyOptions=needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings# who (if anyone) should get extra copies of error messages#O PostmasterCopy=Postmaster# slope of queue-only function#O QueueFactor=600000# limit on number of concurrent queue runners#O MaxQueueChildren# maximum number of queue-runners per queue-grouping with multiple queuesO MaxRunnersPerQueue=5# priority of queue runners (nice(3))#O NiceQueueRun# shall we sort the queue by hostname first?#O QueueSortOrder=priority# minimum time in queue before retry#O MinQueueAge=30m# how many jobs can you process in the queue?#O MaxQueueRunSize=0# perform initial split of envelope without checking MX records#O FastSplit=1# queue directoryO QueueDirectory=/var/spool/mqueue# key for shared memory; 0 to turn off#O SharedMemoryKey=0# timeouts (many of these)#O Timeout.initial=5m#O Timeout.connect=5m#O Timeout.aconnect=0sO Timeout.iconnect=5s#O Timeout.helo=5mO Timeout.mail=2m#O Timeout.rcpt=1hO Timeout.datainit=2m#O Timeout.datablock=1h#O Timeout.datafinal=1hO Timeout.rset=1mO Timeout.quit=2m#O Timeout.misc=2mO Timeout.command=5mO Timeout.ident=5s#O Timeout.fileopen=60s#O Timeout.control=2mO Timeout.queuereturn=5d#O Timeout.queuereturn.normal=5d#O Timeout.queuereturn.urgent=2d#O Timeout.queuereturn.non-urgent=7d#O Timeout.queuereturn.dsn=5dO Timeout.queuewarn=4h#O Timeout.queuewarn.normal=4h#O Timeout.queuewarn.urgent=1h#O Timeout.queuewarn.non-urgent=12h#O Timeout.queuewarn.dsn=4h#O Timeout.hoststatus=30m#O Timeout.resolver.retrans=5s#O Timeout.resolver.retrans.first=5s#O Timeout.resolver.retrans.normal=5s#O Timeout.resolver.retry=4#O Timeout.resolver.retry.first=4#O Timeout.resolver.retry.normal=4#O Timeout.lhlo=2m#O Timeout.auth=10m#O Timeout.starttls=1h# time for DeliverBy; extension disabled if less than 0#O DeliverByMin=0# should we not prune routes in route-addr syntax addresses?#O DontPruneRoutes=False# queue up everything before forking?O SuperSafe=True# status fileO StatusFile=/var/lib/sendmail/sendmail.st# time zone handling:#  if undefined, use system default#  if defined but null, use TZ envariable passed in#  if defined and non-null, use that info#O TimeZoneSpec=# default UID (can be username or userid:groupid)O DefaultUser=mail:mail# list of locations of user database file (null means no lookup)#O UserDatabaseSpec=/etc/mail/userdb# fallback MX host#O FallbackMXhost=fall.back.host.net# fallback smart host#O FallbackSmartHost=fall.back.host.net# if we are the best MX host for a site, try it directly instead of config err#O TryNullMXList=False# load average at which we just queue messages#O QueueLA=8# load average at which we refuse connections#O RefuseLA=12# log interval when refusing connections for this long#O RejectLogInterval=3h# load average at which we delay connections; 0 means no limit#O DelayLA=0# maximum number of children we allow at one timeO MaxDaemonChildren=0# maximum number of new connections per secondO ConnectionRateThrottle=15# Width of the window O ConnectionRateWindowSize=10m# work recipient factor#O RecipientFactor=30000# deliver each queued job in a separate process?#O ForkEachJob=False# work class factor#O ClassFactor=1800# work time factor#O RetryFactor=90000# default character set#O DefaultCharSet=unknown-8bit# service switch file (name hardwired on Solaris, Ultrix, OSF/1, others)#O ServiceSwitchFile=/etc/mail/service.switch# hosts file (normally /etc/hosts)#O HostsFile=/etc/hosts# dialup line delay on connection failure#O DialDelay=0s# action to take if there are no recipients in the messageO NoRecipientAction=add-to-undisclosed# chrooted environment for writing to filesO SafeFileEnvironment=/# are colons OK in addresses?#O ColonOkInAddr=True# shall I avoid expanding CNAMEs (violates protocols)?#O DontExpandCnames=False# SMTP initial login message (old $e macro)O SmtpGreetingMessage=$j Sendmail $v/$Z; $b; (No UCE/UBE) $?{client_addr}logging access from: ${client_name}(${client_resolve})-$_$.# UNIX initial From header format (old $l macro)O UnixFromLine=From $g $d# From: lines that have embedded newlines are unwrapped onto one line#O SingleLineFromHeader=False# Allow HELO SMTP command that does not include a host name#O AllowBogusHELO=False# Characters to be quoted in a full name phrase (@,;:\()[] are automatic)O MustQuoteChars=.'# delimiter (operator) characters (old $o macro)O OperatorChars=.:%@!^/[]+# shall I avoid calling initgroups(3) because of high NIS costs?#O DontInitGroups=False# are group-writable :include: and .forward files (un)trustworthy?# True (the default) means they are not trustworthy.#O UnsafeGroupWrites=True# where do errors that occur when sending errors get sent?#O DoubleBounceAddress=postmaster# where to save bounces if all else failsO DeadLetterDrop=/var/lib/sendmail/dead.letter# what user id do we assume for the majority of the processing?#O RunAsUser=sendmail# maximum number of recipients per SMTP envelope#O MaxRecipientsPerMessage=0# limit the rate recipients per SMTP envelope are accepted# once the threshold number of recipients have been rejectedO BadRcptThrottle=3# shall we get local names from our installed interfaces?#O DontProbeInterfaces=False# Return-Receipt-To: header implies DSN requestO RrtImpliesDsn=True# override connection address (for testing)#O ConnectOnlyTo=0.0.0.0# Trusted user for file ownership and starting the daemonO TrustedUser=smmta# Control socket for daemon managementO ControlSocketName=/var/run/sendmail/mta/smcontrol# Maximum MIME header length to protect MUAs#O MaxMimeHeaderLength=0/0# Maximum length of the sum of all headers#O MaxHeadersLength=32768# Maximum depth of alias recursion#O MaxAliasRecursion=10# location of pid fileO PidFile=/var/run/sendmail/mta/sendmail.pid# Prefix string for the process title shown on 'ps' listingsO ProcessTitlePrefix=MTA# Data file (df) memory-buffer file maximum size#O DataFileBufferSize=4096# Transcript file (xf) memory-buffer file maximum size#O XscriptFileBufferSize=4096# lookup type to find information about local mailboxes#O MailboxDatabase=pw# override compile time flag REQUIRES_DIR_FSYNC#O RequiresDirfsync=true# list of authentication mechanisms#O AuthMechanisms=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5# Authentication realm#O AuthRealm# default authentication information for outgoing connections#O DefaultAuthInfo=/etc/mail/default-auth-info# SMTP AUTH flags#O AuthOptions# SMTP AUTH maximum encryption strength#O AuthMaxBits# SMTP STARTTLS server options#O TLSSrvOptions# Input mail filters#O InputMailFilters# CA directory#O CACertPath# CA file#O CACertFile# Server Cert#O ServerCertFile# Server private key#O ServerKeyFile# Client Cert#O ClientCertFile# Client private key#O ClientKeyFile# File containing certificate revocation lists #O CRLFile# DHParameters (only required if DSA/DH is used)#O DHParameters# Random data source (required for systems without /dev/urandom under OpenSSL)#O RandFile############################# QUEUE GROUP DEFINITIONS  #########################################################   Message precedences   ############################Pfirst-class=0Pspecial-delivery=100Plist=-30Pbulk=-60Pjunk=-100######################   Trusted users   ####################### this is equivalent to setting class "t"#Ft/etc/mail/trusted-users %[^\#]TrootTdaemonTuucp##########################   Format of headers   ##########################H?P?Return-Path: <$g>HReceived: $?sfrom $s $.$?_($?s$|from $.$_)	$.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.)	$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}	(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u	for $u; $|;	$.$bH?D?Resent-Date: $aH?D?Date: $aH?F?Resent-From: $?x$x <$g>$|$g$.H?F?From: $?x$x <$g>$|$g$.H?x?Full-Name: $x# HPosted-Date: $a# H?l?Received-Date: $bH?M?Resent-Message-Id: <$t.$i@$j>H?M?Message-Id: <$t.$i@$j>#######################################################################################################################################################			REWRITING RULES################################################################################################################################################################################################  Ruleset 3 -- Name Canonicalization  ###############################################Scanonify=3# handle null input (translate to <@> special case)R$@			$@ <@># strip group: syntax (not inside angle brackets!) and trailing semicolonR$*			$: $1 <@>			mark addressesR$* < $* > $* <@>	$: $1 < $2 > $3			unmark <addr>R@ $* <@>		$: @ $1				unmark @host:...R$* [ IPv6 : $+ ] <@>	$: $1 [ IPv6 : $2 ]		unmark IPv6 addrR$* :: $* <@>		$: $1 :: $2			unmark node::addrR:include: $* <@>	$: :include: $1			unmark :include:...R$* : $* [ $* ]		$: $1 : $2 [ $3 ] <@>		remark if leading colonR$* : $* <@>		$: $2				strip colon if markedR$* <@>			$: $1				unmarkR$* ;			   $1				strip trailing semiR$* < $+ :; > $*	$@ $2 :; <@>			catch <list:;>R$* < $* ; >		   $1 < $2 >			bogus bracketed semi# null input now results from list:; syntaxR$@			$@ :; <@># strip angle brackets -- note RFC733 heuristic to get innermost itemR$*			$: < $1 >			housekeeping <>R$+ < $* >		   < $2 >			strip excess on leftR< $* > $+		   < $1 >			strip excess on rightR<>			$@ < @ >			MAIL FROM:<> caseR< $+ >			$: $1				remove housekeeping <># strip route address <@a,@b,@c:user@d> -> <user@d>R@ $+ , $+		$2R@ [ $* ] : $+		$2R@ $+ : $+		$2# find focus for list syntaxR $+ : $* ; @ $+	$@ $>Canonify2 $1 : $2 ; < @ $3 >	list syntaxR $+ : $* ;		$@ $1 : $2;			list syntax# find focus for @ syntax addressesR$+ @ $+		$: $1 < @ $2 >			focus on domainR$+ < $+ @ $+ >		$1 $2 < @ $3 >			move gaze rightR$+ < @ $+ >		$@ $>Canonify2 $1 < @ $2 >	already canonical# convert old-style addresses to a domain-based addressR$- ! $+		$@ $>Canonify2 $2 < @ $1 .UUCP >	resolve uucp namesR$+ . $- ! $+		$@ $>Canonify2 $3 < @ $1 . $2 >		domain uucpsR$+ ! $+		$@ $>Canonify2 $2 < @ $1 .UUCP >	uucp subdomains# if we have % signs, take the rightmost oneR$* % $*		$1 @ $2				First make them all @s.R$* @ $* @ $*		$1 % $2 @ $3			Undo all but the last.R$* @ $*		$@ $>Canonify2 $1 < @ $2 >	Insert < > and finish# else we must be a local nameR$*			$@ $>Canonify2 $1###################################################  Ruleset 96 -- bottom half of ruleset 3  ###################################################SCanonify2=96# handle special cases for local namesR$* < @ localhost > $*		$: $1 < @ $j . > $2		no domain at allR$* < @ localhost . $m > $*	$: $1 < @ $j . > $2		local domainR$* < @ localhost . UUCP > $*	$: $1 < @ $j . > $2		.UUCP domain# check for IPv4/IPv6 domain literalR$* < @ [ $+ ] > $*		$: $1 < @@ [ $2 ] > $3		mark [addr]R$* < @@ $=w > $*		$: $1 < @ $j . > $3		self-literalR$* < @@ $+ > $*		$@ $1 < @ $2 > $3		canon IP addr# if really UUCP, handle it immediately# try UUCP traffic as a local addressR$* < @ $+ . UUCP > $*		$: $1 < @ $[ $2 $] . UUCP . > $3R$* < @ $+ . . UUCP . > $*	$@ $1 < @ $2 . > $3# hostnames ending in class P are always canonicalR$* < @ $* $=P > $*		$: $1 < @ $2 $3 . > $4R$* < @ $* $~P > $*		$: $&{daemon_flags} $| $1 < @ $2 $3 > $4R$* CC $* $| $* < @ $+.$+ > $*	$: $3 < @ $4.$5 . > $6R$* CC $* $| $*			$: $3# pass to name server to make hostname canonicalR$* $| $* < @ $* > $*		$: $2 < @ $[ $3 $] > $4R$* $| $*			$: $2# local host aliases and pseudo-domains are always canonicalR$* < @ $=w > $*		$: $1 < @ $2 . > $3R$* < @ $=M > $*		$: $1 < @ $2 . > $3R$* < @ $* . . > $*		$1 < @ $2 . > $3#####################################################  Ruleset 4 -- Final Output Post-rewriting  #####################################################Sfinal=4R$+ :; <@>		$@ $1 :				handle <list:;>R$* <@>			$@				handle <> and list:;# strip trailing dot off possibly canonical nameR$* < @ $+ . > $*	$1 < @ $2 > $3# eliminate internal codeR$* < @ *LOCAL* > $*	$1 < @ $j > $2# externalize local domain infoR$* < $+ > $*		$1 $2 $3			defocusR@ $+ : @ $+ : $+	@ $1 , @ $2 : $3		<route-addr> canonicalR@ $*			$@ @ $1				... and exit# UUCP must always be presented in old formR$+ @ $- . UUCP		$2!$1				u@h.UUCP => h!u# delete duplicate local namesR$+ % $=w @ $=w		$1 @ $2				u%host@host => u@host#################################################################   Ruleset 97 -- recanonicalize and call ruleset zero   ######		   (used for recursive calls)		   #################################################################SRecurse=97R$*			$: $>canonify $1R$*			$@ $>parse $1#########################################   Ruleset 0 -- Parse Address   #########################################Sparse=0R$*			$: $>Parse0 $1		initial parsingR<@>			$#local $: <@>		special case error msgsR$*			$: $>ParseLocal $1	handle local hacksR$*			$: $>Parse1 $1		final parsing##  Parse0 -- do initial syntax checking and eliminate local addresses.#	This should either return with the (possibly modified) input#	or return with a #error mailer.  It should not return with a#	#mailer other than the #error mailer.#SParse0R<@>			$@ <@>			special case error msgsR$* : $* ; <@>		$#error $@ 5.1.3 $: "553 List:; syntax illegal for recipient addresses"R@ <@ $* >		< @ $1 >		catch "@@host" bogosityR<@ $+>			$#error $@ 5.1.3 $: "553 User address required"R$+ <@>			$#error $@ 5.1.3 $: "553 Hostname required"R$*			$: <> $1R<> $* < @ [ $* ] : $+ > $*	$1 < @ [ $2 ] : $3 > $4R<> $* < @ [ $* ] , $+ > $*	$1 < @ [ $2 ] , $3 > $4R<> $* < @ [ $* ] $+ > $*	$#error $@ 5.1.2 $: "553 Invalid address"R<> $* < @ [ $+ ] > $*		$1 < @ [ $2 ] > $3R<> $* <$* : $* > $*	$#error $@ 5.1.3 $: "553 Colon illegal in host name part"R<> $*			$1R$* < @ . $* > $*	$#error $@ 5.1.2 $: "553 Invalid host name"R$* < @ $* .. $* > $*	$#error $@ 5.1.2 $: "553 Invalid host name"R$* < @ $* @ > $*	$#error $@ 5.1.2 $: "553 Invalid route address"R$* @ $* < @ $* > $*	$#error $@ 5.1.3 $: "553 Invalid route address"R$* , $~O $*		$#error $@ 5.1.3 $: "553 Invalid route address"# now delete the local info -- note $=O to find characters that cause forwardingR$* < @ > $*		$@ $>Parse0 $>canonify $1	user@ => userR< @ $=w . > : $*	$@ $>Parse0 $>canonify $2	@here:... -> ...R$- < @ $=w . >		$: $(dequote $1 $) < @ $2 . >	dequote "foo"@hereR< @ $+ >		$#error $@ 5.1.3 $: "553 User address required"R$* $=O $* < @ $=w . >	$@ $>Parse0 $>canonify $1 $2 $3	...@here -> ...R$- 			$: $(dequote $1 $) < @ *LOCAL* >	dequote "foo"R< @ *LOCAL* >		$#error $@ 5.1.3 $: "553 User address required"R$* $=O $* < @ *LOCAL* >			$@ $>Parse0 $>canonify $1 $2 $3	...@*LOCAL* -> ...R$* < @ *LOCAL* >	$: $1##  Parse1 -- the bottom half of ruleset 0.#SParse1# handle numeric address specR$* < @ [ $+ ] > $*	$: $>ParseLocal $1 < @ [ $2 ] > $3	numeric internet specR$* < @ [ $+ ] > $*	$: $1 < @ [ $2 ] : $S > $3	Add smart host to pathR$* < @ [ $+ ] : > $*		$#esmtp $@ [$2] $: $1 < @ [$2] > $3	no smarthost: sendR$* < @ [ $+ ] : $- : $*> $*	$#$3 $@ $4 $: $1 < @ [$2] > $5	smarthost with mailerR$* < @ [ $+ ] : $+ > $*	$#esmtp $@ $3 $: $1 < @ [$2] > $4	smarthost without mailer# short circuit local delivery so forwarded email worksR$=L < @ $=w . >	$#local $: @ $1			special local namesR$+ < @ $=w . >		$#local $: $1			regular local name# resolve remotely connected UUCP links (if any)# resolve fake top level domains by forwarding to other hosts# pass names that still have a host to a smarthost (if defined)R$* < @ $* > $*		$: $>MailerToTriple < $S > $1 < @ $2 > $3	glue on smarthost name# deal with other remote namesR$* < @$* > $*		$#esmtp $@ $2 $: $1 < @ $2 > $3	user@host.domain# handle locally delivered namesR$=L			$#local $: @ $1		special local namesR$+			$#local $: $1			regular local names##############################################################################   Ruleset 5 -- special rewriting after aliases have been expanded   ##############################################################################SLocal_localaddrSlocaladdr=5R$+			$: $1 $| $>"Local_localaddr" $1R$+ $| $#ok		$@ $1			no changeR$+ $| $#$*		$#$2R$+ $| $*		$: $1# deal with plussed users so aliases work nicelyR$+ + *			$#local $@ $&h $: $1R$+ + $*		$#local $@ + $2 $: $1 + *# prepend an empty "forward host" on the frontR$+			$: <> $1R< > $+			$: < > < $1 <> $&h >		nope, restore +detailR< > < $+ <> + $* >	$: < > < $1 + $2 >		check whether +detailR< > < $+ <> $* >	$: < > < $1 >			else discardR< > < $+ + $* > $*	   < > < $1 > + $2 $3		find the user partR< > < $+ > + $*	$#local $@ $2 $: @ $1		strip the extra +R< > < $+ >		$@ $1				no +detailR$+			$: $1 <> $&h			add +detail back inR$+ <> + $*		$: $1 + $2			check whether +detailR$+ <> $*		$: $1				else discardR< local : $* > $*	$: $>MailerToTriple < local : $1 > $2	no host extensionR< error : $* > $*	$: $>MailerToTriple < error : $1 > $2	no host extensionR< $~[ : $+ > $+	$: $>MailerToTriple < $1 : $2 > $3 < @ $2 >R< $+ > $+		$@ $>MailerToTriple < $1 > $2 < @ $1 >######################################################################  Ruleset 95 -- canonify mailer:[user@]host syntax to triple	######################################################################SMailerToTriple=95R< > $*				$@ $1			strip off null relayR< error : $-.$-.$- : $+ > $* 	$#error $@ $1.$2.$3 $: $4R< error : $- : $+ > $*		$#error $@ $(dequote $1 $) $: $2R< error : $+ > $*		$#error $: $1R< local : $* > $*		$>CanonLocal < $1 > $2R< $~[ : $+ @ $+ > $*<$*>$*	$# $1 $@ $3 $: $2<@$3>	use literal userR< $~[ : $+ > $*		$# $1 $@ $2 $: $3	try qualified mailerR< $=w > $*			$@ $2			delete local hostR< $+ > $*			$#relay $@ $1 $: $2	use unqualified mailer######################################################################  Ruleset CanonLocal -- canonify local: syntax		######################################################################SCanonLocal# strip local host from routed addressesR< $* > < @ $+ > : $+		$@ $>Recurse $3R< $* > $+ $=O $+ < @ $+ >	$@ $>Recurse $2 $3 $4# strip trailing dot from any host name that may appearR< $* > $* < @ $* . >		$: < $1 > $2 < @ $3 ># handle local: syntax -- use old user, either with or without hostR< > $* < @ $* > $*		$#local $@ $1@$2 $: $1R< > $+				$#local $@ $1    $: $1# handle local:user@host syntax -- ignore host partR< $+ @ $+ > $* < @ $* >	$: < $1 > $3 < @ $4 ># handle local:user syntaxR< $+ > $* <@ $* > $*		$#local $@ $2@$3 $: $1R< $+ > $* 			$#local $@ $2    $: $1######################################################################  Ruleset 93 -- convert header names to masqueraded form	######################################################################SMasqHdr=93# do not masquerade anything in class NR$* < @ $* $=N . >	$@ $1 < @ $2 $3 . ># special case the users that should be exposedR$=E < @ *LOCAL* >	$@ $1 < @ $j . >		leave exposedR$=E < @ $=M . >	$@ $1 < @ $2 . >R$=E < @ $=w . >	$@ $1 < @ $2 . ># handle domain-specific masqueradingR$* < @ $=M . > $*	$: $1 < @ $2 . @ $M > $3	convert masqueraded domsR$* < @ $=w . > $*	$: $1 < @ $2 . @ $M > $3R$* < @ *LOCAL* > $*	$: $1 < @ $j . @ $M > $2R$* < @ $+ @ > $*	$: $1 < @ $2 > $3		$M is nullR$* < @ $+ @ $+ > $*	$: $1 < @ $3 . > $4		$M is not null######################################################################  Ruleset 94 -- convert envelope names to masqueraded form	######################################################################SMasqEnv=94R$+			$@ $>MasqHdr $1######################################################################  Ruleset 98 -- local part of ruleset zero (can be null)	######################################################################SParseLocal=98#########################################################################  D: LookUpDomain -- search for domain in access database######	Parameters:###		<$1> -- key (domain name)###		<$2> -- default (what to return if not found in db)###		<$3> -- mark (must be <(!|+) single-token>)###			! does lookup only with tag###			+ does lookup with and without tag###		<$4> -- passthru (additional data passed unchanged through)######################################################################SDR<$*> <$+> <$- $-> <$*>		$: < $(access $4:$1 $: ? $) > <$1> <$2> <$3 $4> <$5>R<?> <$+> <$+> <+ $-> <$*>	$: < $(access $1 $: ? $) > <$1> <$2> <+ $3> <$4>R<SKIP> <$+> <$+> <$- $-> <$*>	$@ <$2> <$5>R<?> <[$+.$-]> <$+> <$- $-> <$*>	$@ $>D <[$1]> <$3> <$4 $5> <$6>R<?> <[$+::$-]> <$+> <$- $-> <$*>	$: $>D <[$1]> <$3> <$4 $5> <$6>R<?> <[$+:$-]> <$+> <$- $-> <$*>	$: $>D <[$1]> <$3> <$4 $5> <$6>R<?> <$+.$+> <$+> <$- $-> <$*>	$@ $>D <$2> <$3> <$4 $5> <$6>R<?> <$+> <$+> <$- $-> <$*>	$@ <$2> <$5>R<$* <TMPF>> <$+> <$+> <$- $-> <$*>	$@ <<TMPF>> <$6>R<$*> <$+> <$+> <$- $-> <$*>	$@ <$1> <$6>#########################################################################  A: LookUpAddress -- search for host address in access database######	Parameters:###		<$1> -- key (dot quadded host address)###		<$2> -- default (what to return if not found in db)###		<$3> -- mark (must be <(!|+) single-token>)###			! does lookup only with tag###			+ does lookup with and without tag###		<$4> -- passthru (additional data passed through)######################################################################SAR<$+> <$+> <$- $-> <$*>		$: < $(access $4:$1 $: ? $) > <$1> <$2> <$3 $4> <$5>R<?> <$+> <$+> <+ $-> <$*>	$: < $(access $1 $: ? $) > <$1> <$2> <+ $3> <$4>R<SKIP> <$+> <$+> <$- $-> <$*>	$@ <$2> <$5>R<?> <$+::$-> <$+> <$- $-> <$*>		$@ $>A <$1> <$3> <$4 $5> <$6>R<?> <$+:$-> <$+> <$- $-> <$*>		$@ $>A <$1> <$3> <$4 $5> <$6>R<?> <$+.$-> <$+> <$- $-> <$*>		$@ $>A <$1> <$3> <$4 $5> <$6>R<?> <$+> <$+> <$- $-> <$*>	$@ <$2> <$5>R<$* <TMPF>> <$+> <$+> <$- $-> <$*>	$@ <<TMPF>> <$6>R<$*> <$+> <$+> <$- $-> <$*>	$@ <$1> <$6>#########################################################################  CanonAddr --	Convert an address into a standard form for###			relay checking.  Route address syntax is###			crudely converted into a %-hack address.######	Parameters:###		$1 -- full recipient address######	Returns:###		parsed address, not in source route form######################################################################SCanonAddrR$*			$: $>Parse0 $>canonify $1	make domain canonical#########################################################################  ParseRecipient --	Strip off hosts in $=R as well as possibly###			$* $=m or the access database.###			Check user portion for host separators.######	Parameters:###		$1 -- full recipient address######	Returns:###		parsed, non-local-relaying address######################################################################SParseRecipientR$*				$: <?> $>CanonAddr $1R<?> $* < @ $* . >		<?> $1 < @ $2 >			strip trailing dotsR<?> $- < @ $* >		$: <?> $(dequote $1 $) < @ $2 >	dequote local part# if no $=O character, no host in the user portion, we are doneR<?> $* $=O $* < @ $* >		$: <NO> $1 $2 $3 < @ $4>R<?> $*				$@ $1R<NO> $* < @ $* $=R >		$: <RELAY> $1 < @ $2 $3 >R<NO> $* < @ $+ >		$: $>D <$2> <NO> <+ To> <$1 < @ $2 >>R<$+> <$+>			$: <$1> $2R<RELAY> $* < @ $* >		$@ $>ParseRecipient $1R<$+> $*			$@ $2#########################################################################  check_relay -- check hostname/address on SMTP startup######################################################################Scheck_relayR$*		$: $>"RateControl" dummyR$*		$: $>"ConnControl" dummySLocal_check_relayScheckrelayR$*			$: $1 $| $>"Local_check_relay" $1R$* $| $* $| $#$*	$#$3R$* $| $* $| $*		$@ $>"Basic_check_relay" $1 $| $2SBasic_check_relay# check for deferred delivery modeR$*			$: < $&{deliveryMode} > $1R< d > $*		$@ deferredR< $* > $*		$: $2R$+ $| $+		$: $>D < $1 > <?> <+ Connect> < $2 >R   $| $+		$: $>A < $1 > <?> <+ Connect> <>	empty client_nameR<?> <$+>		$: $>A < $1 > <?> <+ Connect> <>	no: another lookupR<?> <$*>		$: OK				found nothingR<$={Accept}> <$*>	$@ $1				return value of lookupR<REJECT> <$*>		$#error $@ 5.7.1 $: "550 Access denied"R<DISCARD> <$*>		$#discard $: discardR<QUARANTINE:$+> <$*>	$#error $@ quarantine $: $1R<ERROR:$-.$-.$-:$+> <$*>	$#error $@ $1.$2.$3 $: $4R<ERROR:$+> <$*>		$#error $: $1R<$* <TMPF>> <$*>		$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<$+> <$*>		$#error $: $1#########################################################################  check_mail -- check SMTP `MAIL FROM:' command argument######################################################################SLocal_check_mailScheckmailR$*			$: $1 $| $>"Local_check_mail" $1R$* $| $#$*		$#$2R$* $| $*		$@ $>"Basic_check_mail" $1SBasic_check_mail# check for deferred delivery modeR$*			$: < $&{deliveryMode} > $1R< d > $*		$@ deferredR< $* > $*		$: $2# authenticated?R$*			$: $1 $| $>"tls_client" $&{verify} $| MAILR$* $| $#$+		$#$2R$* $| $*		$: $1R<>			$@ <OK>			we MUST accept <> (RFC 1123)R$+			$: <?> $1R<?><$+>		$: <@> <$1>R<?>$+			$: <@> <$1>R$*			$: $&{daemon_flags} $| $1R$* f $* $| <@> < $* @ $- >	$: < ? $&{client_name} > < $3 @ $4 >R$* u $* $| <@> < $* >	$: <?> < $3 >R$* $| $*		$: $2# handle case of @localhost on addressR<@> < $* @ localhost >	$: < ? $&{client_name} > < $1 @ localhost >R<@> < $* @ [127.0.0.1] >			$: < ? $&{client_name} > < $1 @ [127.0.0.1] >R<@> < $* @ localhost.$m >			$: < ? $&{client_name} > < $1 @ localhost.$m >R<@> < $* @ localhost.UUCP >			$: < ? $&{client_name} > < $1 @ localhost.UUCP >R<@> $*			$: $1			no localhost as domainR<? $=w> $*		$: $2			local client: okR<? $+> <$+>		$#error $@ 5.5.4 $: "553 Real domain name required for sender address"R<?> $*			$: $1R$*			$: <?> $>CanonAddr $1		canonify sender address and mark itR<?> $* < @ $+ . >	<?> $1 < @ $2 >			strip trailing dots# handle non-DNS hostnames (*.bitnet, *.decnet, *.uucp, etc)R<?> $* < @ $* $=P >	$: <OKR> $1 < @ $2 $3 >R<?> $* < @ $j >	$: <OKR> $1 < @ $j >R<?> $* < @ $+ >	$: <? $(resolve $2 $: $2 <PERM> $) > $1 < @ $2 >R<? $* <$->> $* < @ $+ >			$: <$2> $3 < @ $4 ># check sender address: user@address, user@, addressR<$+> $+ < @ $* >	$: @<$1> <$2 < @ $3 >> $| <F:$2@$3> <U:$2@> <D:$3>R<$+> $+		$: @<$1> <$2> $| <U:$2@>R@ <$+> <$*> $| <$+>	$: <@> <$1> <$2> $| $>SearchList <+ From> $| <$3> <>R<@> <$+> <$*> $| <$*>	$: <$3> <$1> <$2>		reverse result# retransform for further useR<?> <$+> <$*>		$: <$1> $2	no matchR<$+> <$+> <$*>		$: <$1> $3	relevant result, keep it# handle case of no @domain on addressR<?> $*			$: $&{daemon_flags} $| <?> $1R$* u $* $| <?> $*	$: <OKR> $3R$* $| $*		$: $2R<?> $*			$: < ? $&{client_addr} > $1R<?> $*			$@ <OKR>			...local unqualed okR<? $+> $*		$#error $@ 5.5.4 $: "553 Domain name required for sender address " $&f							...remote is not# check resultsR<?> $*			$: @ $1		mark address: nothing known about itR<$={ResOk}> $*		$@ <OKR>	domain ok: stopR<TEMP> $*		$#error $@ 4.1.8 $: "451 Domain of sender address " $&f " does not resolve"R<PERM> $*		$#error $@ 5.1.8 $: "553 Domain of sender address " $&f " does not exist"R<$={Accept}> $*	$# $1		accept from access mapR<DISCARD> $*		$#discard $: discardR<QUARANTINE:$+> $*	$#error $@ quarantine $: $1R<REJECT> $*		$#error $@ 5.7.1 $: "550 Access denied"R<ERROR:$-.$-.$-:$+> $*		$#error $@ $1.$2.$3 $: $4R<ERROR:$+> $*		$#error $: $1R<<TMPF>> $*		$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<$+> $*		$#error $: $1		error from access db#########################################################################  check_rcpt -- check SMTP `RCPT TO:' command argument######################################################################SLocal_check_rcptScheckrcptR$*			$: $1 $| $>"Local_check_rcpt" $1R$* $| $#$*		$#$2R$* $| $*		$@ $>"Basic_check_rcpt" $1SBasic_check_rcpt# empty address?R<>			$#error $@ nouser $: "553 User address required"R$@			$#error $@ nouser $: "553 User address required"# check for deferred delivery modeR$*			$: < $&{deliveryMode} > $1R< d > $*		$@ deferredR< $* > $*		$: $2######################################################################R$*			$: $1 $| @ $>"Rcpt_ok" $1R$* $| @ $#TEMP $+	$: $1 $| T $2R$* $| @ $#$*		$#$2R$* $| @ RELAY		$@ RELAYR$* $| @ $*		$: O $| $>"Relay_ok" $1R$* $| T $+		$: T $2 $| $>"Relay_ok" $1R$* $| $#TEMP $+	$#error $2R$* $| $#$*		$#$2R$* $| RELAY		$@ RELAYR T $+ $| $*		$#error $1# anything else is bogusR$*			$#error $@ 5.7.1 $: "550 Relaying denied"######################################################################### Rcpt_ok: is the recipient ok?######################################################################SRcpt_okR$*			$: $>ParseRecipient $1		strip relayable hosts# authenticated via TLS?R$*			$: $1 $| $>RelayTLS	client authenticated?R$* $| $# $+		$# $2			error/ok?R$* $| $*		$: $1			noR$*			$: $1 $| $>"Local_Relay_Auth" $&{auth_type}R$* $| $# $*		$# $2R$* $| NO		$: $1R$* $| $*		$: $1 $| $&{auth_type}R$* $|			$: $1R$* $| $={TrustAuthMech}	$# RELAYR$* $| $*		$: $1# anything terminating locally is okR$+ < @ $=w >		$@ RELAYR$+ < @ $* $=R >	$@ RELAYR$+ < @ $+ >		$: $>D <$2> <?> <+ To> <$1 < @ $2 >>R<RELAY> $*		$@ RELAYR<$* <TMPF>> $*		$#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<$*> <$*>		$: $2# check for local user (i.e. unqualified address)R$*			$: <?> $1R<?> $* < @ $+ >	$: <REMOTE> $1 < @ $2 ># local user is okR<?> $+			$@ RELAYR<$+> $*		$: $2######################################################################### Relay_ok: is the relay/sender ok?######################################################################SRelay_ok# anything originating locally is ok# check IP addressR$*			$: $&{client_addr}R$@			$@ RELAY		originated locallyR0			$@ RELAY		originated locallyR127.0.0.1		$@ RELAY		originated locallyRIPv6:::1		$@ RELAY		originated locallyR$=R $*			$@ RELAY		relayable IP addressR$*			$: $>A <$1> <?> <+ Connect> <$1>R<RELAY> $* 		$@ RELAY		relayable IP addressR<<TMPF>> $*		$#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<$*> <$*>		$: $2R$*			$: [ $1 ]		put brackets around it...R$=w			$@ RELAY		... and see if it is local# check client name: first: did it resolve?R$*			$: < $&{client_resolve} >R<TEMP>			$#TEMP $@ 4.4.0 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}R<FORGED>		$#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}R<FAIL>			$#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}R$*			$: <@> $&{client_name}# pass to name server to make hostname canonicalR<@> $* $=P 		$:<?>  $1 $2R<@> $+			$:<?>  $[ $1 $]R$* .			$1			strip trailing dotsR<?> $=w		$@ RELAYR<?> $* $=R			$@ RELAYR<?> $*			$: $>D <$1> <?> <+ Connect> <$1>R<RELAY> $*		$@ RELAYR<$* <TMPF>> $*		$#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<$*> <$*>		$: $2# turn a canonical address in the form user<@domain># qualify unqual. addresses with $jSFullAddrR$* <@ $+ . >		$1 <@ $2 >R$* <@ $* >		$@ $1 <@ $2 >R$+			$@ $1 <@ $j >SDelay_TLS_Clt# authenticated?R$*			$: $1 $| $>"tls_client" $&{verify} $| MAILR$* $| $#$+		$#$2R$* $| $*		$# $1R$*			$# $1SDelay_TLS_Clt2# authenticated?R$*			$: $1 $| $>"tls_client" $&{verify} $| MAILR$* $| $#$+		$#$2R$* $| $*		$@ $1R$*			$@ $1# call all necessary rulesetsScheck_rcpt# R$@			$#error $@ 5.1.3 $: "553 Recipient address required"R$+			$: $1 $| $>checkrcpt $1R$+ $| $#error $*	$#error $2R$+ $| $#discard $*	$#discard $2R$+ $| $#$*		$@ $>"Delay_TLS_Clt" $2R$+ $| $*		$: <?> $>FullAddr $>CanonAddr $1R<?> $+ < @ $=w >	$: <> $1 < @ $2 > $| <F: $1@$2 > <D: $2 > <U: $1@>R<?> $+ < @ $* >	$: <> $1 < @ $2 > $| <F: $1@$2 > <D: $2 ># lookup the addresses only with Spam tagR<> $* $| <$+>		$: <@> $1 $| $>SearchList <! Spam> $| <$2> <>R<@> $* $| $*		$: $2 $1		reverse result# is the recipient a spam friend?R<FRIEND> $+		$@ $>"Delay_TLS_Clt2" SPAMFRIENDR<$*> $+		$: $2R$*			$: $1 $| $>checkmail $&{mail_from}R$* $| $#$*		$#$2R$* $| $*		$: $1 $| $>checkrelay $&{client_name} $| $&{client_addr}R$* $| $#$*		$#$2R$* $| $*		$: $1#########################################################################  F: LookUpFull -- search for an entry in access database######	lookup of full key (which should be an address) and###	variations if +detail exists: +* and without +detail######	Parameters:###		<$1> -- key###		<$2> -- default (what to return if not found in db)###		<$3> -- mark (must be <(!|+) single-token>)###			! does lookup only with tag###			+ does lookup with and without tag###		<$4> -- passthru (additional data passed unchanged through)######################################################################SFR<$+> <$*> <$- $-> <$*>		$: <$(access $4:$1 $: ? $)> <$1> <$2> <$3 $4> <$5>R<?> <$+> <$*> <+ $-> <$*>	$: <$(access $1 $: ? $)> <$1> <$2> <+ $3> <$4>R<?> <$+ + $* @ $+> <$*> <$- $-> <$*>			$: <$(access $6:$1+*@$3 $: ? $)> <$1+$2@$3> <$4> <$5 $6> <$7>R<?> <$+ + $* @ $+> <$*> <+ $-> <$*>			$: <$(access $1+*@$3 $: ? $)> <$1+$2@$3> <$4> <+ $5> <$6>R<?> <$+ + $* @ $+> <$*> <$- $-> <$*>			$: <$(access $6:$1@$3 $: ? $)> <$1+$2@$3> <$4> <$5 $6> <$7>R<?> <$+ + $* @ $+> <$*> <+ $-> <$*>			$: <$(access $1@$3 $: ? $)> <$1+$2@$3> <$4> <+ $5> <$6>R<?> <$+> <$*> <$- $-> <$*>	$@ <$2> <$5>R<$+ <TMPF>> <$*> <$- $-> <$*>	$@ <<TMPF>> <$5>R<$+> <$*> <$- $-> <$*>		$@ <$1> <$5>#########################################################################  E: LookUpExact -- search for an entry in access database######	Parameters:###		<$1> -- key###		<$2> -- default (what to return if not found in db)###		<$3> -- mark (must be <(!|+) single-token>)###			! does lookup only with tag###			+ does lookup with and without tag###		<$4> -- passthru (additional data passed unchanged through)######################################################################SER<$*> <$*> <$- $-> <$*>		$: <$(access $4:$1 $: ? $)> <$1> <$2> <$3 $4> <$5>R<?> <$+> <$*> <+ $-> <$*>	$: <$(access $1 $: ? $)> <$1> <$2> <+ $3> <$4>R<?> <$+> <$*> <$- $-> <$*>	$@ <$2> <$5>R<$+ <TMPF>> <$*> <$- $-> <$*>	$@ <<TMPF>> <$5>R<$+> <$*> <$- $-> <$*>		$@ <$1> <$5>#########################################################################  U: LookUpUser -- search for an entry in access database######	lookup of key (which should be a local part) and###	variations if +detail exists: +* and without +detail######	Parameters:###		<$1> -- key (user@)###		<$2> -- default (what to return if not found in db)###		<$3> -- mark (must be <(!|+) single-token>)###			! does lookup only with tag###			+ does lookup with and without tag###		<$4> -- passthru (additional data passed unchanged through)######################################################################SUR<$+> <$*> <$- $-> <$*>		$: <$(access $4:$1 $: ? $)> <$1> <$2> <$3 $4> <$5>R<?> <$+> <$*> <+ $-> <$*>	$: <$(access $1 $: ? $)> <$1> <$2> <+ $3> <$4>R<?> <$+ + $* @> <$*> <$- $-> <$*>			$: <$(access $5:$1+*@ $: ? $)> <$1+$2@> <$3> <$4 $5> <$6>R<?> <$+ + $* @> <$*> <+ $-> <$*>			$: <$(access $1+*@ $: ? $)> <$1+$2@> <$3> <+ $4> <$5>R<?> <$+ + $* @> <$*> <$- $-> <$*>			$: <$(access $5:$1@ $: ? $)> <$1+$2@> <$3> <$4 $5> <$6>R<?> <$+ + $* @> <$*> <+ $-> <$*>			$: <$(access $1@ $: ? $)> <$1+$2@> <$3> <+ $4> <$5>R<?> <$+> <$*> <$- $-> <$*>	$@ <$2> <$5>R<$+ <TMPF>> <$*> <$- $-> <$*>	$@ <<TMPF>> <$5>R<$+> <$*> <$- $-> <$*>		$@ <$1> <$5>#########################################################################  SearchList: search a list of items in the access map###	Parameters:###		<exact tag> $| <mark:address> <mark:address> ... <>###	where "exact" is either "+" or "!":###	<+ TAG>	lookup with and w/o tag###	<! TAG>	lookup with tag###	possible values for "mark" are:###		D: recursive host lookup (LookUpDomain)###		E: exact lookup, no modifications###		F: full lookup, try user+ext@domain and user@domain###		U: user lookup, try user+ext and user (input must have trailing @)###	return: <RHS of lookup> or <?> (not found)####################################################################### class with valid marks for SearchListC{Src}E F D U ASSearchList# just call the ruleset with the name of the tag... nice trick...R<$+> $| <$={Src}:$*> <$*>	$: <$1> $| <$4> $| $>$2 <$3> <?> <$1> <>R<$+> $| <> $| <?> <>		$@ <?>R<$+> $| <$+> $| <?> <>		$@ $>SearchList <$1> $| <$2>R<$+> $| <$*> $| <$+> <>	$@ <$3>R<$+> $| <$+>			$@ <$2>#########################################################################  trust_auth: is user trusted to authenticate as someone else?######	Parameters:###		$1: AUTH= parameter from MAIL command######################################################################SLocal_trust_authStrust_authR$*			$: $&{auth_type} $| $1# required by RFC 2554 section 4.R$@ $| $*		$#error $@ 5.7.1 $: "550 not authenticated"R$* $| $&{auth_authen}		$@ identicalR$* $| <$&{auth_authen}>	$@ identicalR$* $| $*		$: $1 $| $>"Local_trust_auth" $2R$* $| $#$*		$#$2R$*			$#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{auth_author}#########################################################################  Relay_Auth: allow relaying based on authentication?######	Parameters:###		$1: ${auth_type}######################################################################SLocal_Relay_Auth#########################################################################  srv_features: which features to offer to a client?###	(done in server)######################################################################Ssrv_featuresR$*		$: $>D <$&{client_name}> <?> <! "Srv_Features"> <>R<?>$*		$: $>A <$&{client_addr}> <?> <! "Srv_Features"> <>R<?>$*		$: <$(access "Srv_Features": $: ? $)>R<?>$*		$@ OKR<$* <TMPF>>$*	$#tempR<$+>$*		$# $1#########################################################################  try_tls: try to use STARTTLS?###	(done in client)######################################################################Stry_tlsR$*		$: $>D <$&{server_name}> <?> <! "Try_TLS"> <>R<?>$*		$: $>A <$&{server_addr}> <?> <! "Try_TLS"> <>R<?>$*		$: <$(access "Try_TLS": $: ? $)>R<?>$*		$@ OKR<$* <TMPF>>$*	$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<NO>$*		$#error $@ 5.7.1 $: "550 do not try TLS with " $&{server_name} " ["$&{server_addr}"]"#########################################################################  tls_rcpt: is connection with server "good" enough?###	(done in client, per recipient)######	Parameters:###		$1: recipient######################################################################Stls_rcptR$*			$: $(macro {TLS_Name} $@ $&{server_name} $) $1R$+			$: <?> $>CanonAddr $1R<?> $+ < @ $+ . >	<?> $1 <@ $2 >R<?> $+ < @ $+ >	$: $1 <@ $2 > $| <F:$1@$2> <U:$1@> <D:$2> <E:>R<?> $+			$: $1 $| <U:$1@> <E:>R$* $| $+	$: $1 $| $>SearchList <! "TLS_Rcpt"> $| $2 <>R$* $| <?>	$@ OKR$* $| <$* <TMPF>>	$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R$* $| <$+>	$@ $>"TLS_connection" $&{verify} $| <$2>#########################################################################  tls_client: is connection with client "good" enough?###	(done in server)######	Parameters:###		${verify} $| (MAIL|STARTTLS)######################################################################Stls_clientR$*		$: $(macro {TLS_Name} $@ $&{server_name} $) $1R$* $| $*	$: $1 $| $>D <$&{client_name}> <?> <! "TLS_Clt"> <>R$* $| <?>$*	$: $1 $| $>A <$&{client_addr}> <?> <! "TLS_Clt"> <>R$* $| <?>$*	$: $1 $| <$(access "TLS_Clt": $: ? $)>R$* $| <$* <TMPF>>	$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R$*		$@ $>"TLS_connection" $1#########################################################################  tls_server: is connection with server "good" enough?###	(done in client)######	Parameter:###		${verify}######################################################################Stls_serverR$*		$: $(macro {TLS_Name} $@ $&{server_name} $) $1R$*		$: $1 $| $>D <$&{server_name}> <?> <! "TLS_Srv"> <>R$* $| <?>$*	$: $1 $| $>A <$&{server_addr}> <?> <! "TLS_Srv"> <>R$* $| <?>$*	$: $1 $| <$(access "TLS_Srv": $: ? $)>R$* $| <$* <TMPF>>	$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R$*		$@ $>"TLS_connection" $1#########################################################################  TLS_connection: is TLS connection "good" enough?######	Parameters:###		${verify} $| <Requirement> [<>]###		Requirement: RHS from access map, may be ? for none.######################################################################STLS_connectionR$* $| <$*>$*			$: $1 $| <$2># create the appropriate error codesR$* $| <PERM + $={Tls} $*>	$: $1 $| <503:5.7.0> <$2 $3>R$* $| <TEMP + $={Tls} $*>	$: $1 $| <403:4.7.0> <$2 $3>R$* $| <$={Tls} $*>		$: $1 $| <403:4.7.0> <$2 $3># deal with TLS handshake failures: abortRSOFTWARE $| <$-:$+> $* 	$#error $@ $2 $: $1 " TLS handshake failed."RSOFTWARE $| $* 		$#error $@ 4.7.0 $: "403 TLS handshake failed."# deal with TLS protocol errors: abortRPROTOCOL $| <$-:$+> $* 	$#error $@ $2 $: $1 " STARTTLS failed."RPROTOCOL $| $* 		$#error $@ 4.7.0 $: "403 STARTTLS failed."R$* $| <$*> <VERIFY>		$: <$2> <VERIFY> <> $1R$* $| <$*> <VERIFY + $+>	$: <$2> <VERIFY> <$3> $1R$* $| <$*> <$={Tls}:$->$*	$: <$2> <$3:$4> <> $1R$* $| <$*> <$={Tls}:$- + $+>$*	$: <$2> <$3:$4> <$5> $1R$* $| $*			$@ OK# authentication required: give appropriate error# other side did authenticate (via STARTTLS)R<$*><VERIFY> <> OK		$@ OKR<$*><VERIFY> <$+> OK		$: <$1> <REQ:0> <$2>R<$*><VERIFY:$-> <$*> OK	$: <$1> <REQ:$2> <$3>R<$*><ENCR:$-> <$*> $*		$: <$1> <REQ:$2> <$3>R<$-:$+><VERIFY $*> <$*>	$#error $@ $2 $: $1 " authentication required"R<$-:$+><VERIFY $*> <$*> FAIL	$#error $@ $2 $: $1 " authentication failed"R<$-:$+><VERIFY $*> <$*> NO	$#error $@ $2 $: $1 " not authenticated"R<$-:$+><VERIFY $*> <$*> NOT	$#error $@ $2 $: $1 " no authentication requested"R<$-:$+><VERIFY $*> <$*> NONE	$#error $@ $2 $: $1 " other side does not support STARTTLS"R<$-:$+><VERIFY $*> <$*> $+	$#error $@ $2 $: $1 " authentication failure " $4R<$*><REQ:$-> <$*>		$: <$1> <REQ:$2> <$3> $>max $&{cipher_bits} : $&{auth_ssf}R<$*><REQ:$-> <$*> $-		$: <$1> <$2:$4> <$3> $(arith l $@ $4 $@ $2 $)R<$-:$+><$-:$-> <$*> TRUE	$#error $@ $2 $: $1 " encryption too weak " $4 " less than " $3R<$-:$+><$-:$-> <$*> $*		$: <$1:$2 ++ $5>R<$-:$+ ++ >			$@ OKR<$-:$+ ++ $+ >			$: <$1:$2> <$3>R<$-:$+> < $+ ++ $+ >		<$1:$2> <$3> <$4>R<$-:$+> $+			$@ $>"TLS_req" $3 $| <$1:$2>#########################################################################  TLS_req: check additional TLS requirements######	Parameters: [<list> <of> <req>] $| <$-:$+>###		$-: SMTP reply code###		$+: Enhanced Status Code######################################################################STLS_reqR $| $+		$@ OKR<CN> $* $| <$+>		$: <CN:$&{TLS_Name}> $1 $| <$2>R<CN:$&{cn_subject}> $* $| <$+>		$@ $>"TLS_req" $1 $| <$2>R<CN:$+> $* $| <$-:$+>	$#error $@ $4 $: $3 " CN " $&{cn_subject} " does not match " $1R<CS:$&{cert_subject}> $* $| <$+>	$@ $>"TLS_req" $1 $| <$2>R<CS:$+> $* $| <$-:$+>	$#error $@ $4 $: $3 " Cert Subject " $&{cert_subject} " does not match " $1R<CI:$&{cert_issuer}> $* $| <$+>	$@ $>"TLS_req" $1 $| <$2>R<CI:$+> $* $| <$-:$+>	$#error $@ $4 $: $3 " Cert Issuer " $&{cert_issuer} " does not match " $1ROK			$@ OK#########################################################################  max: return the maximum of two values separated by :######	Parameters: [$-]:[$-]######################################################################SmaxR:		$: 0R:$-		$: $1R$-:		$: $1R$-:$-		$: $(arith l $@ $1 $@ $2 $) : $1 : $2RTRUE:$-:$-	$: $2R$-:$-:$-	$: $2#########################################################################  RelayTLS: allow relaying based on TLS authentication######	Parameters:###		none######################################################################SRelayTLS# authenticated?R$*			$: <?> $&{verify}R<?> OK			$: OK		authenticated: continueR<?> $*			$@ NO		not authenticatedR$*			$: $&{cert_issuer}R$+			$: $(access CERTISSUER:$1 $)RRELAY			$# RELAYRSUBJECT		$: <@> $&{cert_subject}R<@> $+			$: <@> $(access CERTSUBJECT:$1 $)R<@> RELAY		$# RELAYR$*			$: NO#########################################################################  authinfo: lookup authinfo in the access map######	Parameters:###		$1: {server_name}###		$2: {server_addr}######################################################################SauthinfoR$*		$: $1 $| $>D <$&{server_name}> <?> <! AuthInfo> <>R$* $| <?>$*	$: $1 $| $>A <$&{server_addr}> <?> <! AuthInfo> <>R$* $| <?>$*	$: $1 $| <$(access AuthInfo: $: ? $)> <>R$* $| <?>$*	$@ no				no authinfo availableR$* $| <$*> <>	$# $2#########################################################################  RateControl: ###	Parameters:	ignored###	return: $#error or OK######################################################################SRateControlR$*		$: <A:$&{client_addr}> <E:>R$+		$: $>SearchList <! ClientRate> $| $1 <>R<?>		$@ OKR<$* <TMPF>>	$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<0>		$@ OK		no limitR<$+>		$: <$1> $| $(arith l $@ $&{client_rate} $@ $1 $)R<$+> $| FALSE	$#error $@ 4.3.2 $: 421 Connection rate limit exceeded.#########################################################################  ConnControl: ###	Parameters:	ignored###	return: $#error or OK######################################################################SConnControlR$*		$: <A:$&{client_addr}> <E:>R$+		$: $>SearchList <! ClientConn> $| $1 <>R<?>		$@ OKR<$* <TMPF>>	$#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."R<0>		$@ OK		no limitR<$+>		$: <$1> $| $(arith l $@ $&{client_connections} $@ $1 $)R<$+> $| FALSE	$#error $@ 4.3.2 $: 421 Too many open connections.#########################################################################  greet_pause: lookup pause time before 220 greeting######	Parameters:###		$1: {client_name}###		$2: {client_addr}######################################################################SLocal_greet_pauseSgreet_pauseR$*			$: <$1><?> $| $>"Local_greet_pause" $1R<$*><?> $| $#$*	$#$2R<$*><?> $| $*		$: $1R$+ $| $+		$: $>D < $1 > <?> <! GreetPause> < $2 >R   $| $+		$: $>A < $1 > <?> <! GreetPause> <>	empty client_nameR<?> <$+>		$: $>A < $1 > <?> <! GreetPause> <>	no: another lookupR<?> <$*>		$# 1000R<$* <TMPF>> <$*>	$@R<$+> <$*>		$# $1#######################################################################################################################################################			MAIL FILTER DEFINITIONS########################################################################################################################################################################################################################################################################################################			MAILER DEFINITIONS######################################################################################################################################################################################################   Local and Program Mailer specification   ##########################################################  $Id: local.m4,v 8.59 2004/11/23 00:37:25 ca Exp $  #######  Envelope sender rewriting#SEnvFromLR<@>			$n			errors to mailer-daemonR@ <@ $*>		$n			temporarily bypass Sun bogosityR$+			$: $>AddDomain $1	add local domain if neededR$*			$: $>MasqEnv $1		do masquerading##  Envelope recipient rewriting#SEnvToLR$+ < @ $* >		$: $1			strip host partR$+ + $*		$: < $&{addr_type} > $1 + $2	mark with addr typeR<e s> $+ + $*		$: $1			remove +detail for senderR< $* > $+		$: $2			else remove mark##  Header sender rewriting#SHdrFromLR<@>			$n			errors to mailer-daemonR@ <@ $*>		$n			temporarily bypass Sun bogosityR$+			$: $>AddDomain $1	add local domain if neededR$*			$: $>MasqHdr $1		do masquerading##  Header recipient rewriting#SHdrToLR$+			$: $>AddDomain $1	add local domain if neededR$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2##  Common code to add local domain name (only if always-add-domain)#SAddDomainMlocal,		P=/usr/sbin/sensible-mda, F=lsDFMAw5:/|@qPn9S, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,		T=DNS/RFC822/X-Unix,		A=sensible-mda $g $u $h ${client_addr}Mprog,		P=/bin/sh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,		T=X-Unix/X-Unix/X-Unix,		A=sh -c $u########################################   SMTP Mailer specification   #############################################  $Id: smtp.m4,v 8.64 2001/04/03 01:52:54 gshapiro Exp $  #######  common sender and masquerading recipient rewriting#SMasqSMTPR$* < @ $* > $*		$@ $1 < @ $2 > $3		already fully qualifiedR$+			$@ $1 < @ *LOCAL* >		add local qualification##  convert pseudo-domain addresses to real domain addresses#SPseudoToReal# pass <route-addr>s throughR< @ $+ > $*		$@ < @ $1 > $2			resolve <route-addr># output fake domains as user%fake@relay# do UUCP heuristics; note that these are shared with UUCP mailersR$+ < @ $+ .UUCP. >	$: < $2 ! > $1			convert to UUCP formR$+ < @ $* > $*		$@ $1 < @ $2 > $3		not UUCP form# leave these in .UUCP form to avoid further tamperingR< $&h ! > $- ! $+	$@ $2 < @ $1 .UUCP. >R< $&h ! > $-.$+ ! $+	$@ $3 < @ $1.$2 >R< $&h ! > $+		$@ $1 < @ $&h .UUCP. >R< $+ ! > $+		$: $1 ! $2 < @ $Y >		use UUCP_RELAYR$+ < @ $~[ $* : $+ >	$@ $1 < @ $4 >			strip mailer: partR$+ < @ >		$: $1 < @ *LOCAL* >		if no UUCP_RELAY##  envelope sender rewriting#SEnvFromSMTPR$+			$: $>PseudoToReal $1		sender/recipient commonR$* :; <@>		$@				list:; special caseR$*			$: $>MasqSMTP $1		qualify unqual'ed namesR$+			$: $>MasqEnv $1			do masquerading##  envelope recipient rewriting --#  also header recipient if not masquerading recipients#SEnvToSMTPR$+			$: $>PseudoToReal $1		sender/recipient commonR$+			$: $>MasqSMTP $1		qualify unqual'ed namesR$* < @ *LOCAL* > $*	$: $1 < @ $j . > $2##  header sender and masquerading header recipient rewriting#SHdrFromSMTPR$+			$: $>PseudoToReal $1		sender/recipient commonR:; <@>			$@				list:; special case# do special header rewritingR$* <@> $*		$@ $1 <@> $2			pass null host throughR< @ $* > $*		$@ < @ $1 > $2			pass route-addr throughR$*			$: $>MasqSMTP $1		qualify unqual'ed namesR$+			$: $>MasqHdr $1			do masquerading##  relay mailer header masquerading recipient rewriting#SMasqRelayR$+			$: $>MasqSMTP $1R$+			$: $>MasqHdr $1Msmtp,		P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,		T=DNS/RFC822/SMTP,		A=TCP $hMesmtp,		P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,		T=DNS/RFC822/SMTP,		A=TCP $hMsmtp8,		P=[IPC], F=mDFMuX8, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,		T=DNS/RFC822/SMTP,		A=TCP $hMdsmtp,		P=[IPC], F=mDFMuXa%, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,		T=DNS/RFC822/SMTP,		A=TCP $hMrelay,		P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2040,		T=DNS/RFC822/SMTP,		A=TCP $h### /etc/mail/sendmail.mc #### divert(-1)dnl# #-----------------------------------------------------------------------------# # $Sendmail: debproto.mc,v 8.13.8 2006-09-01 05:10:48 cowboy Exp $# ## # Copyright (c) 1998-2005 Richard Nelson.  All Rights Reserved.# ## # cf/debian/sendmail.mc.  Generated from sendmail.mc.in by configure.# ## # sendmail.mc prototype config file for building Sendmail 8.13.8# ## # Note: the .in file supports 8.7.6 - 9.0.0, but the generated# #	file is customized to the version noted above.# ## # This file is used to configure Sendmail for use with Debian systems.# ## # If you modify this file, you will have to regenerate /etc/mail/sendmail.cf# # by running this file through the m4 preprocessor via one of the following:# #	* `sendmailconfig` # #	* `make`# #	* `m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf`# # The first two options are preferred as they will also update other files# # that depend upon the contents of this file.# ## # The best documentation for this .mc file is:# # /usr/share/doc/sendmail-doc/cf.README.gz# ## #-----------------------------------------------------------------------------# divert(0)dnl# ## #   Copyright (c) 1998-2005 Richard Nelson.  All Rights Reserved.# ## #  This file is used to configure Sendmail for use with Debian systems.# ## define(`_USE_ETC_MAIL_')dnl# include(`/usr/share/sendmail/cf/m4/cf.m4')dnl# VERSIONID(`$Id: sendmail.mc, v 8.13.8-2 2006-09-01 05:10:48 cowboy Exp $')# OSTYPE(`debian')dnl# DOMAIN(`debian-mta')dnl# dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE# undefine(`confHOST_STATUS_DIRECTORY')dnl        #DAEMON_HOSTSTATS=# dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE# dnl ## dnl # General defines# dnl ## dnl # SAFE_FILE_ENV: [undefined] If set, sendmail will do a chroot()# dnl #	into this directory before writing files.# dnl #	If *all* your user accounts are under /home then use that# dnl #	instead - it will prevent any writes outside of /home !# dnl #   define(`confSAFE_FILE_ENV',             `')dnl# dnl ## dnl # Daemon options - restrict to servicing LOCALHOST ONLY !!!# dnl # Remove `, Addr=' clauses to receive from any interface# dnl # If you want to support IPv6, switch the commented/uncommentd lines# FEATURE(`no_default_msa')dnl# dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl# DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl# dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, Addr=::1')dnl# DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, Addr=127.0.0.1')dnl# dnl ## dnl # Be somewhat anal in what we allow# define(`confPRIVACY_FLAGS',dnl# `needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings')dnl# dnl ## dnl # Define connection throttling and window length# define(`confCONNECTION_RATE_THROTTLE', `15')dnl# define(`confCONNECTION_RATE_WINDOW_SIZE',`10m')dnl# dnl ## dnl # Features# dnl ## dnl # The access db is the basis for most of sendmail's checking# FEATURE(`access_db', , `skip')dnl# dnl ## dnl # The greet_pause feature stops some automail bots - but check the# dnl # provided access db for details on excluding localhosts...# FEATURE(`greet_pause', `1000')dnl 1 seconds# dnl ## dnl # Delay_checks allows sender<->recipient checking# FEATURE(`delay_checks', `friend', `n')dnl# dnl ## dnl # If we get too many bad recipients, slow things down...# define(`confBAD_RCPT_THROTTLE',`3')dnl# dnl ## dnl # Stop connections that overflow our concurrent and time connection rates# FEATURE(`conncontrol', `nodelay', `terminate')dnl# FEATURE(`ratecontrol', `nodelay', `terminate')dnl# dnl ## dnl # If you're on a dialup link, you should enable this - so sendmail# dnl # will not bring up the link (it will queue mail for later)# dnl define(`confCON_EXPENSIVE',`True')dnl# dnl ## dnl # Dialup/LAN connection overrides# dnl ## include(`/etc/mail/m4/dialup.m4')dnl# include(`/etc/mail/m4/provider.m4')dnl# dnl ## dnl # Default Mailer setup# MAILER_DEFINITIONS# MAILER(`local')dnl# MAILER(`smtp')dnl# # dnl # Masquerading options# FEATURE(`always_add_domain')dnl# MASQUERADE_AS(`debian.chris1.myftp.org')dnl# FEATURE(`allmasquerade')dnl# FEATURE(`masquerade_envelope')dnl