generic-linux.cf
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:33k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. #
  2. # Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.
  3. # All rights reserved.
  4. # Copyright (c) 1983, 1995 Eric P. Allman.  All rights reserved.
  5. # Copyright (c) 1988, 1993
  6. # The Regents of the University of California.  All rights reserved.
  7. #
  8. # By using this file, you agree to the terms and conditions set
  9. # forth in the LICENSE file which can be found at the top level of
  10. # the sendmail distribution.
  11. #
  12. #
  13. ######################################################################
  14. ######################################################################
  15. #####
  16. ##### SENDMAIL CONFIGURATION FILE
  17. #####
  18. ##### built by gshapiro@horsey.gshapiro.net on Fri Dec 10 15:35:59 PST 1999
  19. ##### in /usr/local/src/sendmail/devel/OpenSource/sendmail-8.10.0.Beta10/cf/cf
  20. ##### using ../ as configuration include directory
  21. #####
  22. ######################################################################
  23. ######################################################################
  24. #####  $Id: cfhead.m4,v 8.65 1999/12/09 00:53:06 ca Exp $  #####
  25. #####  $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $  #####
  26. #####  $Id: generic-linux.mc,v 8.1 1999/09/24 22:48:05 gshapiro Exp $  #####
  27. #####  $Id: linux.m4,v 8.11 1999/03/12 22:21:25 ca Exp $  #####
  28. #####  $Id: local_procmail.m4,v 8.21 1999/11/18 05:06:23 ca Exp $  #####
  29. #####  $Id: generic.m4,v 8.15 1999/04/04 00:51:09 ca Exp $  #####
  30. #####  $Id: redirect.m4,v 8.15 1999/08/06 01:47:36 gshapiro Exp $  #####
  31. #####  $Id: use_cw_file.m4,v 8.9 1999/02/07 07:26:13 gshapiro Exp $  #####
  32. #####  $Id: proto.m4,v 8.404 1999/12/09 19:06:12 gshapiro Exp $  #####
  33. # level 9 config file format
  34. V9/Berkeley
  35. # override file safeties - setting this option compromises system security,
  36. # addressing the actual file configuration problem is preferred
  37. # need to set this before any file actions are encountered in the cf file
  38. #O DontBlameSendmail=safe
  39. # default LDAP map specification
  40. # need to set this now before any LDAP maps are defined
  41. #O LDAPDefaultSpec=-h localhost
  42. ##################
  43. #   local info   #
  44. ##################
  45. Cwlocalhost
  46. # file containing names of hosts for which we receive email
  47. Fw/etc/mail/local-host-names
  48. # my official domain name
  49. # ... define this only if sendmail cannot automatically determine your domain
  50. #Dj$w.Foo.COM
  51. CP.
  52. # "Smart" relay host (may be null)
  53. DS
  54. # operators that cannot be in local usernames (i.e., network indicators)
  55. CO @ % !
  56. # a class with just dot (for identifying canonical names)
  57. C..
  58. # a class with just a left bracket (for identifying domain literals)
  59. C[[
  60. # Resolve map (to check if a host exists in check_mail)
  61. Kresolve host -a<OK> -T<TEMP>
  62. # Hosts that will permit relaying ($=R)
  63. FR-o /etc/mail/relay-domains
  64. # who I send unqualified names to (null means deliver locally)
  65. DR
  66. # who gets all local email traffic ($R has precedence for unqualified names)
  67. DH
  68. # dequoting map
  69. Kdequote dequote
  70. # class E: names that should be exposed as from this host, even if we masquerade
  71. # class L: names that should be delivered locally, even if we have a relay
  72. # class M: domains that should be converted to $M
  73. # class N: domains that should not be converted to $M
  74. #CL root
  75. CEroot
  76. # who I masquerade as (null for no masquerading) (see also $=M)
  77. DM
  78. # my name for error messages
  79. DnMAILER-DAEMON
  80. CPREDIRECT
  81. # Configuration version number
  82. DZ8.10.0.Beta10
  83. ###############
  84. #   Options   #
  85. ###############
  86. # strip message body to 7 bits on input?
  87. O SevenBitInput=False
  88. # 8-bit data handling
  89. O EightBitMode=pass8
  90. # wait for alias file rebuild (default units: minutes)
  91. O AliasWait=10
  92. # location of alias file
  93. O AliasFile=/etc/mail/aliases
  94. # minimum number of free blocks on filesystem
  95. O MinFreeBlocks=100
  96. # maximum message size
  97. #O MaxMessageSize=1000000
  98. # substitution for space (blank) characters
  99. O BlankSub=.
  100. # avoid connecting to "expensive" mailers on initial submission?
  101. O HoldExpensive=False
  102. # checkpoint queue runs after every N successful deliveries
  103. #O CheckpointInterval=10
  104. # default delivery mode
  105. O DeliveryMode=background
  106. # automatically rebuild the alias database?
  107. # NOTE: There is a potential for a denial of service attack if this is set.
  108. #       This option is deprecated and will be removed from a future version.
  109. #O AutoRebuildAliases=False
  110. # error message header/file
  111. #O ErrorHeader=/etc/mail/error-header
  112. # error mode
  113. #O ErrorMode=print
  114. # save Unix-style "From_" lines at top of header?
  115. #O SaveFromLine=False
  116. # temporary file mode
  117. O TempFileMode=0600
  118. # match recipients against GECOS field?
  119. #O MatchGECOS=False
  120. # maximum hop count
  121. #O MaxHopCount=17
  122. # location of help file
  123. O HelpFile=/etc/mail/helpfile
  124. # ignore dots as terminators in incoming messages?
  125. #O IgnoreDots=False
  126. # name resolver options
  127. #O ResolverOptions=+AAONLY
  128. # deliver MIME-encapsulated error messages?
  129. O SendMimeErrors=True
  130. # Forward file search path
  131. O ForwardPath=$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward
  132. # open connection cache size
  133. O ConnectionCacheSize=2
  134. # open connection cache timeout
  135. O ConnectionCacheTimeout=5m
  136. # persistent host status directory
  137. #O HostStatusDirectory=.hoststat
  138. # single thread deliveries (requires HostStatusDirectory)?
  139. #O SingleThreadDelivery=False
  140. # use Errors-To: header?
  141. O UseErrorsTo=False
  142. # log level
  143. O LogLevel=9
  144. # send to me too, even in an alias expansion?
  145. #O MeToo=True
  146. # verify RHS in newaliases?
  147. O CheckAliases=False
  148. # default messages to old style headers if no special punctuation?
  149. O OldStyleHeaders=True
  150. # SMTP daemon options
  151. O DaemonPortOptions=Name=MTA
  152. O DaemonPortOptions=Port=587, Name=MSA, M=E
  153. # SMTP client options
  154. #O ClientPortOptions=Address=0.0.0.0
  155. # privacy flags
  156. O PrivacyOptions=authwarnings
  157. # who (if anyone) should get extra copies of error messages
  158. #O PostmasterCopy=Postmaster
  159. # slope of queue-only function
  160. #O QueueFactor=600000
  161. # queue directory
  162. O QueueDirectory=/var/spool/mqueue
  163. # timeouts (many of these)
  164. #O Timeout.initial=5m
  165. #O Timeout.connect=5m
  166. #O Timeout.iconnect=5m
  167. #O Timeout.helo=5m
  168. #O Timeout.mail=10m
  169. #O Timeout.rcpt=1h
  170. #O Timeout.datainit=5m
  171. #O Timeout.datablock=1h
  172. #O Timeout.datafinal=1h
  173. #O Timeout.rset=5m
  174. #O Timeout.quit=2m
  175. #O Timeout.misc=2m
  176. #O Timeout.command=1h
  177. #O Timeout.ident=30s
  178. #O Timeout.fileopen=60s
  179. #O Timeout.control=2m
  180. O Timeout.queuereturn=5d
  181. #O Timeout.queuereturn.normal=5d
  182. #O Timeout.queuereturn.urgent=2d
  183. #O Timeout.queuereturn.non-urgent=7d
  184. O Timeout.queuewarn=4h
  185. #O Timeout.queuewarn.normal=4h
  186. #O Timeout.queuewarn.urgent=1h
  187. #O Timeout.queuewarn.non-urgent=12h
  188. #O Timeout.hoststatus=30m
  189. #O Timeout.resolver.retrans=5s
  190. #O Timeout.resolver.retrans.first=5s
  191. #O Timeout.resolver.retrans.normal=5s
  192. #O Timeout.resolver.retry=4
  193. #O Timeout.resolver.retry.first=4
  194. #O Timeout.resolver.retry.normal=4
  195. # should we not prune routes in route-addr syntax addresses?
  196. #O DontPruneRoutes=False
  197. # queue up everything before forking?
  198. O SuperSafe=True
  199. # status file
  200. O StatusFile=/etc/mail/statistics
  201. # time zone handling:
  202. #  if undefined, use system default
  203. #  if defined but null, use TZ envariable passed in
  204. #  if defined and non-null, use that info
  205. #O TimeZoneSpec=
  206. # default UID (can be username or userid:groupid)
  207. #O DefaultUser=mailnull
  208. # list of locations of user database file (null means no lookup)
  209. #O UserDatabaseSpec=/etc/mail/userdb
  210. # fallback MX host
  211. #O FallbackMXhost=fall.back.host.net
  212. # if we are the best MX host for a site, try it directly instead of config err
  213. #O TryNullMXList=False
  214. # load average at which we just queue messages
  215. #O QueueLA=8
  216. # load average at which we refuse connections
  217. #O RefuseLA=12
  218. # maximum number of children we allow at one time
  219. #O MaxDaemonChildren=12
  220. # maximum number of new connections per second
  221. #O ConnectionRateThrottle=3
  222. # work recipient factor
  223. #O RecipientFactor=30000
  224. # deliver each queued job in a separate process?
  225. #O ForkEachJob=False
  226. # work class factor
  227. #O ClassFactor=1800
  228. # work time factor
  229. #O RetryFactor=90000
  230. # shall we sort the queue by hostname first?
  231. #O QueueSortOrder=priority
  232. # minimum time in queue before retry
  233. #O MinQueueAge=30m
  234. # default character set
  235. #O DefaultCharSet=iso-8859-1
  236. # service switch file (ignored on Solaris, Ultrix, OSF/1, others)
  237. #O ServiceSwitchFile=/etc/mail/service.switch
  238. # hosts file (normally /etc/hosts)
  239. #O HostsFile=/etc/hosts
  240. # dialup line delay on connection failure
  241. #O DialDelay=10s
  242. # action to take if there are no recipients in the message
  243. #O NoRecipientAction=add-to-undisclosed
  244. # chrooted environment for writing to files
  245. #O SafeFileEnvironment=/arch
  246. # are colons OK in addresses?
  247. #O ColonOkInAddr=True
  248. # how many jobs can you process in the queue?
  249. #O MaxQueueRunSize=10000
  250. # shall I avoid expanding CNAMEs (violates protocols)?
  251. #O DontExpandCnames=False
  252. # SMTP initial login message (old $e macro)
  253. O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
  254. # UNIX initial From header format (old $l macro)
  255. O UnixFromLine=From $g $d
  256. # From: lines that have embedded newlines are unwrapped onto one line
  257. #O SingleLineFromHeader=False
  258. # Allow HELO SMTP command that does not include a host name
  259. #O AllowBogusHELO=False
  260. # Characters to be quoted in a full name phrase (@,;:()[] are automatic)
  261. #O MustQuoteChars=.
  262. # delimiter (operator) characters (old $o macro)
  263. O OperatorChars=.:%@!^/[]+
  264. # shall I avoid calling initgroups(3) because of high NIS costs?
  265. #O DontInitGroups=False
  266. # are group-writable :include: and .forward files (un)trustworthy?
  267. #O UnsafeGroupWrites=True
  268. # where do errors that occur when sending errors get sent?
  269. #O DoubleBounceAddress=postmaster
  270. # where to save bounces if all else fails
  271. #O DeadLetterDrop=/var/tmp/dead.letter
  272. # what user id do we assume for the majority of the processing?
  273. #O RunAsUser=sendmail
  274. # maximum number of recipients per SMTP envelope
  275. #O MaxRecipientsPerMessage=100
  276. # shall we get local names from our installed interfaces?
  277. #O DontProbeInterfaces=False
  278. # Return-Receipt-To: header implies DSN request
  279. #O RrtImpliesDsn=False
  280. # override connection address (for testing)
  281. #O ConnectOnlyTo=0.0.0.0
  282. # Trusted user for file ownership and starting the daemon
  283. #O TrustedUser=root
  284. # Control socket for daemon management
  285. #O ControlSocketName=/var/spool/mqueue/.control
  286. # Maximum MIME header length to protect MUAs
  287. #O MaxMimeHeaderLength=0/0
  288. # Maximum length of the sum of all headers
  289. O MaxHeadersLength=32768
  290. # Maximum depth of alias recursion
  291. #O MaxAliasRecursion=10
  292. # location of pid file
  293. #O PidFile=/var/run/sendmail.pid
  294. # Prefix string for the process title shown on 'ps' listings
  295. #O ProcessTitlePrefix=prefix
  296. # Data file (df) memory-buffer file maximum size
  297. #O DataFileBufferSize=4096
  298. # Transcript file (xf) memory-buffer file maximum size
  299. #O XscriptFileBufferSize=4096
  300. # list of authentication mechanisms
  301. #O AuthMechanisms=GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
  302. # default authentication information for outgoing connections
  303. #O DefaultAuthInfo=/etc/mail/default-auth-info
  304. # try to authenticate? (Try when available/only when Authenticated)
  305. #O AuthOptions=T
  306. ###########################
  307. #   Message precedences   #
  308. ###########################
  309. Pfirst-class=0
  310. Pspecial-delivery=100
  311. Plist=-30
  312. Pbulk=-60
  313. Pjunk=-100
  314. #####################
  315. #   Trusted users   #
  316. #####################
  317. # this is equivalent to setting class "t"
  318. #Ft/etc/mail/trusted-users
  319. Troot
  320. Tdaemon
  321. Tuucp
  322. #########################
  323. #   Format of headers   #
  324. #########################
  325. H?P?Return-Path: <$g>
  326. HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
  327. $.$?{auth_type}(authenticated as ${auth_authen} $?{auth_author}for ${auth_author} $.with ${auth_type})
  328. $.by $j ($v/$Z)$?r with $r$. id $i$?u
  329. for $u; $|;
  330. $.$b
  331. H?D?Resent-Date: $a
  332. H?D?Date: $a
  333. H?F?Resent-From: $?x$x <$g>$|$g$.
  334. H?F?From: $?x$x <$g>$|$g$.
  335. H?x?Full-Name: $x
  336. # HPosted-Date: $a
  337. # H?l?Received-Date: $b
  338. H?M?Resent-Message-Id: <$t.$i@$j>
  339. H?M?Message-Id: <$t.$i@$j>
  340. #
  341. ######################################################################
  342. ######################################################################
  343. #####
  344. ##### REWRITING RULES
  345. #####
  346. ######################################################################
  347. ######################################################################
  348. ############################################
  349. ###  Ruleset 3 -- Name Canonicalization  ###
  350. ############################################
  351. Scanonify=3
  352. # handle null input (translate to <@> special case)
  353. R$@ $@ <@>
  354. # strip group: syntax (not inside angle brackets!) and trailing semicolon
  355. R$* $: $1 <@> mark addresses
  356. R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr>
  357. R@ $* <@> $: @ $1 unmark @host:...
  358. R$* :: $* <@> $: $1 :: $2 unmark node::addr
  359. R:include: $* <@> $: :include: $1 unmark :include:...
  360. R$* [ IPv6 $- ] <@> $: $1 [ IPv6 $2 ] unmark IPv6 addr
  361. R$* : $* [ $* ] $: $1 : $2 [ $3 ] <@> remark if leading colon
  362. R$* : $* <@> $: $2 strip colon if marked
  363. R$* <@> $: $1 unmark
  364. R$* ;    $1 strip trailing semi
  365. R$* < $* ; >    $1 < $2 > bogus bracketed semi
  366. # null input now results from list:; syntax
  367. R$@ $@ :; <@>
  368. # strip angle brackets -- note RFC733 heuristic to get innermost item
  369. R$* $: < $1 > housekeeping <>
  370. R$+ < $* >    < $2 > strip excess on left
  371. R< $* > $+    < $1 > strip excess on right
  372. R<> $@ < @ > MAIL FROM:<> case
  373. R< $+ > $: $1 remove housekeeping <>
  374. # strip route address <@a,@b,@c:user@d> -> <user@d>
  375. R@ $+ , $+ $2
  376. R@ $+ : $+ $2
  377. # find focus for list syntax
  378. R $+ : $* ; @ $+ $@ $>Canonify2 $1 : $2 ; < @ $3 > list syntax
  379. R $+ : $* ; $@ $1 : $2; list syntax
  380. # find focus for @ syntax addresses
  381. R$+ @ $+ $: $1 < @ $2 > focus on domain
  382. R$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze right
  383. R$+ < @ $+ > $@ $>Canonify2 $1 < @ $2 > already canonical
  384. # do some sanity checking
  385. R$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in addrs
  386. # convert old-style addresses to a domain-based address
  387. R$- ! $+ $@ $>Canonify2 $2 < @ $1 .UUCP > resolve uucp names
  388. R$+ . $- ! $+ $@ $>Canonify2 $3 < @ $1 . $2 > domain uucps
  389. R$+ ! $+ $@ $>Canonify2 $2 < @ $1 .UUCP > uucp subdomains
  390. # if we have % signs, take the rightmost one
  391. R$* % $* $1 @ $2 First make them all @s.
  392. R$* @ $* @ $* $1 % $2 @ $3 Undo all but the last.
  393. R$* @ $* $@ $>Canonify2 $1 < @ $2 > Insert < > and finish
  394. # else we must be a local name
  395. R$* $@ $>Canonify2 $1
  396. ################################################
  397. ###  Ruleset 96 -- bottom half of ruleset 3  ###
  398. ################################################
  399. SCanonify2=96
  400. # handle special cases for local names
  401. R$* < @ localhost > $* $: $1 < @ $j . > $2 no domain at all
  402. R$* < @ localhost . $m > $* $: $1 < @ $j . > $2 local domain
  403. R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP domain
  404. # check for IPv6 domain literal (save quoted form)
  405. R$* < @ [ IPv6 $- ] > $* $: $2 $| $1 < @@ [ $(dequote $2 $) ] > $3 mark IPv6 addr
  406. R$- $| $* < @@ $=w > $* $: $2 < @ $j . > $4 self-literal
  407. R$- $| $* < @@ [ $+ ] > $* $@ $2 < @ [ IPv6 $1 ] > $4 canon IP addr
  408. # check for IPv4 domain literal
  409. R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d]
  410. R$* < @@ $=w > $* $: $1 < @ $j . > $3 self-literal
  411. R$* < @@ $+ > $* $@ $1 < @ $2 > $3 canon IP addr
  412. # if really UUCP, handle it immediately
  413. # try UUCP traffic as a local address
  414. R$* < @ $+ . UUCP > $* $: $1 < @ $[ $2 $] . UUCP . > $3
  415. R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3
  416. R$* $: $&{daemon_flags} $| $1
  417. R$* CC $* $| $* $: $3
  418. # pass to name server to make hostname canonical unless turned off
  419. R$* $| $* < @ $* $~P > $* $: $2 < @ $[ $3 $4 $] > $5
  420. R$* $| $* $: $2
  421. # local host aliases and pseudo-domains are always canonical
  422. R$* < @ $=w > $* $: $1 < @ $2 . > $3
  423. R$* < @ $j > $* $: $1 < @ $j . > $2
  424. R$* < @ $=M > $* $: $1 < @ $2 . > $3
  425. R$* < @ $* $=P > $* $: $1 < @ $2 $3 . > $4
  426. R$* < @ $* . . > $* $1 < @ $2 . > $3
  427. ##################################################
  428. ###  Ruleset 4 -- Final Output Post-rewriting  ###
  429. ##################################################
  430. Sfinal=4
  431. R$* <@> $@ handle <> and list:;
  432. # strip trailing dot off possibly canonical name
  433. R$* < @ $+ . > $* $1 < @ $2 > $3
  434. # eliminate internal code
  435. R$* < @ *LOCAL* > $* $1 < @ $j > $2
  436. # externalize local domain info
  437. R$* < $+ > $* $1 $2 $3 defocus
  438. R@ $+ : @ $+ : $+ @ $1 , @ $2 : $3 <route-addr> canonical
  439. R@ $* $@ @ $1 ... and exit
  440. # UUCP must always be presented in old form
  441. R$+ @ $- . UUCP $2!$1 u@h.UUCP => h!u
  442. # delete duplicate local names
  443. R$+ % $=w @ $=w $1 @ $2 u%host@host => u@host
  444. ##############################################################
  445. ###   Ruleset 97 -- recanonicalize and call ruleset zero   ###
  446. ###    (used for recursive calls)    ###
  447. ##############################################################
  448. SRecurse=97
  449. R$* $: $>canonify $1
  450. R$* $@ $>parse $1
  451. ######################################
  452. ###   Ruleset 0 -- Parse Address   ###
  453. ######################################
  454. Sparse=0
  455. R$* $: $>Parse0 $1 initial parsing
  456. R<@> $#local $: <@> special case error msgs
  457. R$* $: $>ParseLocal $1 handle local hacks
  458. R$* $: $>Parse1 $1 final parsing
  459. #
  460. #  Parse0 -- do initial syntax checking and eliminate local addresses.
  461. # This should either return with the (possibly modified) input
  462. # or return with a #error mailer.  It should not return with a
  463. # #mailer other than the #error mailer.
  464. #
  465. SParse0
  466. R<@> $@ <@> special case error msgs
  467. R$* : $* ; <@> $#error $@ 5.1.3 $: "553 List:; syntax illegal for recipient addresses"
  468. R@ <@ $* > < @ $1 > catch "@@host" bogosity
  469. R<@ $+> $#error $@ 5.1.3 $: "553 User address required"
  470. R$* $: <> $1
  471. R<> $* < @ [ $+ ] > $* $1 < @ [ $2 ] > $3
  472. R<> $* <$* : $* > $* $#error $@ 5.1.3 $: "553 Colon illegal in host name part"
  473. R<> $* $1
  474. R$* < @ . $* > $* $#error $@ 5.1.2 $: "553 Invalid host name"
  475. R$* < @ $* .. $* > $* $#error $@ 5.1.2 $: "553 Invalid host name"
  476. # now delete the local info -- note $=O to find characters that cause forwarding
  477. R$* < @ > $* $@ $>Parse0 $>canonify $1 user@ => user
  478. R< @ $=w . > : $* $@ $>Parse0 $>canonify $2 @here:... -> ...
  479. R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote "foo"@here
  480. R< @ $+ > $#error $@ 5.1.3 $: "553 User address required"
  481. R$* $=O $* < @ $=w . > $@ $>Parse0 $>canonify $1 $2 $3 ...@here -> ...
  482. R$-  $: $(dequote $1 $) < @ *LOCAL* > dequote "foo"
  483. R< @ *LOCAL* > $#error $@ 5.1.3 $: "553 User address required"
  484. R$* $=O $* < @ *LOCAL* >
  485. $@ $>Parse0 $>canonify $1 $2 $3 ...@*LOCAL* -> ...
  486. R$* < @ *LOCAL* > $: $1
  487. #
  488. #  Parse1 -- the bottom half of ruleset 0.
  489. #
  490. SParse1
  491. # handle numeric address spec
  492. R$* < @ [ $+ ] > $* $: $>ParseLocal $1 < @ [ $2 ] > $3 numeric internet spec
  493. R$* < @ [ $+ ] > $* $1 < @ [ $2 ] : $S > $3 Add smart host to path
  494. R$* < @ [ IPv6 $- ] : > $*
  495. $#esmtp $@ [ $(dequote $2 $) ] $: $1 < @ [IPv6 $2 ] > $3 no smarthost: send
  496. R$* < @ [ $+ ] : > $* $#esmtp $@ [$2] $: $1 < @ [$2] > $3 no smarthost: send
  497. R$* < @ [ $+ ] : $- : $*> $* $#$3 $@ $4 $: $1 < @ [$2] > $5 smarthost with mailer
  498. R$* < @ [ $+ ] : $+ > $* $#esmtp $@ $3 $: $1 < @ [$2] > $4 smarthost without mailer
  499. # short circuit local delivery so forwarded email works
  500. R$=L < @ $=w . > $#local $: @ $1 special local names
  501. R$+ < @ $=w . > $#local $: $1 regular local name
  502. # resolve remotely connected UUCP links (if any)
  503. # resolve fake top level domains by forwarding to other hosts
  504. # pass names that still have a host to a smarthost (if defined)
  505. R$* < @ $* > $* $: $>MailerToTriple < $S > $1 < @ $2 > $3 glue on smarthost name
  506. # deal with other remote names
  507. R$* < @$* > $* $#esmtp $@ $2 $: $1 < @ $2 > $3 user@host.domain
  508. # handle locally delivered names
  509. R$=L $#local $: @ $1 special local names
  510. R$+ $#local $: $1 regular local names
  511. ###########################################################################
  512. ###   Ruleset 5 -- special rewriting after aliases have been expanded   ###
  513. ###########################################################################
  514. SLocal_localaddr
  515. Slocaladdr=5
  516. R$+ $: $1 $| $>"Local_localaddr" $1
  517. R$+ $| $#$* $#$2
  518. R$+ $| $* $: $1
  519. # deal with plussed users so aliases work nicely
  520. R$+ + * $#local $@ $&h $: $1
  521. R$+ + $* $#local $@ + $2 $: $1 + *
  522. # prepend an empty "forward host" on the front
  523. R$+ $: <> $1
  524. # see if we have a relay or a hub
  525. R< > $+ $: < $H > $1 try hub
  526. R< > $+ $: < $R > $1 try relay
  527. R< > $+ $: < > < $1 <> $&h > nope, restore +detail
  528. R< > < $+ <> + $* > $: < > < $1 + $2 > check whether +detail
  529. R< > < $+ <> $* > $: < > < $1 > else discard
  530. R< > < $+ + $* > $*    < > < $1 > + $2 $3 find the user part
  531. R< > < $+ > + $* $#local $@ $2 $: @ $1 strip the extra +
  532. R< > < $+ > $@ $1 no +detail
  533. R$+ $: $1 <> $&h add +detail back in
  534. R$+ <> + $* $: $1 + $2 check whether +detail
  535. R$+ <> $* $: $1 else discard
  536. R< local : $* > $* $: $>MailerToTriple < local : $1 > $2 no host extension
  537. R< error : $* > $* $: $>MailerToTriple < error : $1 > $2 no host extension
  538. R< $- : $+ > $+ $: $>MailerToTriple < $1 : $2 > $3 < @ $2 >
  539. R< $+ > $+ $@ $>MailerToTriple < $1 > $2 < @ $1 >
  540. ###################################################################
  541. ###  Ruleset 95 -- canonify mailer:[user@]host syntax to triple ###
  542. ###################################################################
  543. SMailerToTriple=95
  544. R< > $* $@ $1 strip off null relay
  545. R< error : $-.$-.$- : $+ > $*  $#error $@ $1.$2.$3 $: $4
  546. R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2
  547. R< local : $* > $* $>CanonLocal < $1 > $2
  548. R< $- : $+ @ $+ > $*<$*>$* $# $1 $@ $3 $: $2<@$3> use literal user
  549. R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer
  550. R< $=w > $* $@ $2 delete local host
  551. R< [ IPv6 $+ ] > $* $#relay $@ $(dequote $1 $) $: $2 use unqualified mailer
  552. R< $+ > $* $#relay $@ $1 $: $2 use unqualified mailer
  553. ###################################################################
  554. ###  Ruleset CanonLocal -- canonify local: syntax ###
  555. ###################################################################
  556. SCanonLocal
  557. # strip local host from routed addresses
  558. R< $* > < @ $+ > : $+ $@ $>Recurse $3
  559. R< $* > $+ $=O $+ < @ $+ > $@ $>Recurse $2 $3 $4
  560. # strip trailing dot from any host name that may appear
  561. R< $* > $* < @ $* . > $: < $1 > $2 < @ $3 >
  562. # handle local: syntax -- use old user, either with or without host
  563. R< > $* < @ $* > $* $#local $@ $1@$2 $: $1
  564. R< > $+ $#local $@ $1    $: $1
  565. # handle local:user@host syntax -- ignore host part
  566. R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 >
  567. # handle local:user syntax
  568. R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1
  569. R< $+ > $*  $#local $@ $2    $: $1
  570. ###################################################################
  571. ###  Ruleset 93 -- convert header names to masqueraded form ###
  572. ###################################################################
  573. SMasqHdr=93
  574. # do not masquerade anything in class N
  575. R$* < @ $* $=N . > $@ $1 < @ $2 $3 . >
  576. # special case the users that should be exposed
  577. R$=E < @ *LOCAL* > $@ $1 < @ $j . > leave exposed
  578. R$=E < @ $=M . > $@ $1 < @ $2 . >
  579. R$=E < @ $=w . > $@ $1 < @ $2 . >
  580. # handle domain-specific masquerading
  581. R$* < @ $=M . > $* $: $1 < @ $2 . @ $M > $3 convert masqueraded doms
  582. R$* < @ $=w . > $* $: $1 < @ $2 . @ $M > $3
  583. R$* < @ *LOCAL* > $* $: $1 < @ $j . @ $M > $2
  584. R$* < @ $+ @ > $* $: $1 < @ $2 > $3 $M is null
  585. R$* < @ $+ @ $+ > $* $: $1 < @ $3 . > $4 $M is not null
  586. ###################################################################
  587. ###  Ruleset 94 -- convert envelope names to masqueraded form ###
  588. ###################################################################
  589. SMasqEnv=94
  590. R$* < @ *LOCAL* > $* $: $1 < @ $j . > $2
  591. ###################################################################
  592. ###  Ruleset 98 -- local part of ruleset zero (can be null) ###
  593. ###################################################################
  594. SParseLocal=98
  595. # addresses sent to foo@host.REDIRECT will give a 551 error code
  596. R$* < @ $+ .REDIRECT. > $: $1 < @ $2 . REDIRECT . > < ${opMode} >
  597. R$* < @ $+ .REDIRECT. > <i> $: $1 < @ $2 . REDIRECT. >
  598. R$* < @ $+ .REDIRECT. > < $- > $#error $@ 5.1.1 $: "551 User has moved; please try " <$1@$2>
  599. ######################################################################
  600. ###  CanonAddr -- Convert an address into a standard form for
  601. ### relay checking.  Route address syntax is
  602. ### crudely converted into a %-hack address.
  603. ###
  604. ### Parameters:
  605. ### $1 -- full recipient address
  606. ###
  607. ### Returns:
  608. ### parsed address, not in source route form
  609. ######################################################################
  610. SCanonAddr
  611. R$* $: $>Parse0 $>canonify $1 make domain canonical
  612. ######################################################################
  613. ###  ParseRecipient -- Strip off hosts in $=R as well as possibly
  614. ### $* $=m or the access database.
  615. ### Check user portion for host separators.
  616. ###
  617. ### Parameters:
  618. ### $1 -- full recipient address
  619. ###
  620. ### Returns:
  621. ### parsed, non-local-relaying address
  622. ######################################################################
  623. SParseRecipient
  624. R$* $: <?> $>CanonAddr $1
  625. R<?> $* < @ $* . > <?> $1 < @ $2 > strip trailing dots
  626. R<?> $- < @ $* > $: <?> $(dequote $1 $) < @ $2 > dequote local part
  627. # if no $=O character, no host in the user portion, we are done
  628. R<?> $* $=O $* < @ $* > $: <NO> $1 $2 $3 < @ $4>
  629. R<?> $* $@ $1
  630. R<NO> $* < @ $* $=R > $: <RELAY> $1 < @ $2 $3 >
  631. R<RELAY> $* < @ $* > $@ $>ParseRecipient $1
  632. R<$-> $* $@ $2
  633. ######################################################################
  634. ###  check_relay -- check hostname/address on SMTP startup
  635. ######################################################################
  636. SLocal_check_relay
  637. Scheck_relay
  638. R$* $: $1 $| $>"Local_check_relay" $1
  639. R$* $| $* $| $#$* $#$3
  640. R$* $| $* $| $* $@ $>"Basic_check_relay" $1 $| $2
  641. SBasic_check_relay
  642. # check for deferred delivery mode
  643. R$* $: < ${deliveryMode} > $1
  644. R< d > $* $@ deferred
  645. R< $* > $* $: $2
  646. ######################################################################
  647. ###  check_mail -- check SMTP `MAIL FROM:' command argument
  648. ######################################################################
  649. SLocal_check_mail
  650. Scheck_mail
  651. R$* $: $1 $| $>"Local_check_mail" $1
  652. R$* $| $#$* $#$2
  653. R$* $| $* $@ $>"Basic_check_mail" $1
  654. SBasic_check_mail
  655. # check for deferred delivery mode
  656. R$* $: < ${deliveryMode} > $1
  657. R< d > $* $@ deferred
  658. R< $* > $* $: $2
  659. R<> $@ <OK> we MUST accept <> (RFC 1123)
  660. R$+ $: <?> $1
  661. R<?><$+> $: <@> <$1>
  662. R<?>$+ $: <@> <$1>
  663. R$* $: $&{daemon_flags} $| $1
  664. R$* f $* $| <@> < $* @ $- > $: < ? $&{client_name} > < $3 @ $4 >
  665. R$* u $* $| <@> < $* > $: <?> < $3 >
  666. R$* $| $* $: $2
  667. # handle case of @localhost on address
  668. R<@> < $* @ localhost > $: < ? $&{client_name} > < $1 @ localhost >
  669. R<@> < $* @ [127.0.0.1] >
  670. $: < ? $&{client_name} > < $1 @ [127.0.0.1] >
  671. R<@> < $* @ localhost.$m >
  672. $: < ? $&{client_name} > < $1 @ localhost.$m >
  673. R<@> < $* @ localhost.UUCP >
  674. $: < ? $&{client_name} > < $1 @ localhost.UUCP >
  675. R<@> $* $: $1 no localhost as domain
  676. R<? $=w> $* $: $2 local client: ok
  677. R<? $+> <$+> $#error $@ 5.5.4 $: "553 Real domain name required"
  678. R<?> $* $: $1
  679. R$* $: <?> $>CanonAddr $1 canonify sender address and mark it
  680. R<?> $* < @ $+ . > <?> $1 < @ $2 > strip trailing dots
  681. # handle non-DNS hostnames (*.bitnet, *.decnet, *.uucp, etc)
  682. R<?> $* < @ $* $=P > $: <OK> $1 < @ $2 $3 >
  683. R<?> $* < @ $+ > $: <? $(resolve $2 $: $2 <PERM> $) > $1 < @ $2 >
  684. R<? $* <$->> $* < @ $+ >
  685. $: <$2> $3 < @ $4 >
  686. # handle case of no @domain on address
  687. R<?> $* $: $&{daemon_flags} $| <?> $1
  688. R$* u $* $| <?> $* $: <OK> $3
  689. R$* $| $* $: $2
  690. R<?> $* $: < ? $&{client_name} > $1
  691. R<?> $* $@ <OK> ...local unqualed ok
  692. R<? $+> $* $#error $@ 5.5.4 $: "553 Domain name required"
  693. ...remote is not
  694. # check results
  695. R<?> $* $: @ $1 mark address: nothing known about it
  696. R<OK> $* $@ <OK>
  697. R<TEMP> $* $#error $@ 4.1.8 $: "451 Sender domain must resolve"
  698. R<PERM> $* $#error $@ 5.1.8 $: "501 Sender domain must exist"
  699. ######################################################################
  700. ###  check_rcpt -- check SMTP `RCPT TO:' command argument
  701. ######################################################################
  702. SLocal_check_rcpt
  703. Scheck_rcpt
  704. R$* $: $1 $| $>"Local_check_rcpt" $1
  705. R$* $| $#$* $#$2
  706. R$* $| $* $@ $>"Basic_check_rcpt" $1
  707. SBasic_check_rcpt
  708. # check for deferred delivery mode
  709. R$* $: < ${deliveryMode} > $1
  710. R< d > $* $@ deferred
  711. R< $* > $* $: $2
  712. R$* $: $>ParseRecipient $1 strip relayable hosts
  713. # authenticated by a trusted mechanism?
  714. R$* $: $1 $| $&{auth_type}
  715. R$* $| $: $1
  716. R$* $| $={TrustAuthMech} $@ RELAYAUTH
  717. R$* $| $* $: $1
  718. # anything terminating locally is ok
  719. R$+ < @ $=w > $@ RELAYTO
  720. R$+ < @ $* $=R > $@ RELAYTO
  721. # check for local user (i.e. unqualified address)
  722. R$* $: <?> $1
  723. R<?> $* < @ $+ > $: <REMOTE> $1 < @ $2 >
  724. # local user is ok
  725. R<?> $+ $@ RELAYTOLOCAL
  726. R<$+> $* $: $2
  727. # anything originating locally is ok
  728. # check IP address
  729. R$* $: $&{client_addr}
  730. R$@ $@ RELAYFROM originated locally
  731. R0 $@ RELAYFROM originated locally
  732. R$=R $* $@ RELAYFROM relayable IP address
  733. R$* $: [ $1 ] put brackets around it...
  734. R$=w $@ RELAYFROM ... and see if it is local
  735. # check client name: first: did it resolve?
  736. R$* $: < $&{client_resolve} >
  737. R<TEMP> $#error $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
  738. R<FORGED> $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_name}
  739. R<FAIL> $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_name}
  740. R$* $: <?> $&{client_name}
  741. R<?> $@ RELAYFROM
  742. R<?> $=w $@ RELAYFROM
  743. R<?> $* $=R $@ RELAYFROM
  744. # anything else is bogus
  745. R$* $#error $@ 5.7.1 $: "550 Relaying denied"
  746. # is user trusted to authenticate as someone else?
  747. Strust_auth
  748. R$* $: $&{auth_type} $| $1
  749. # required by RFC 2554 section 4.
  750. R$@ $| $* $#error $@ 5.7.1 $: "550 not authenticated"
  751. R$* $| $&{auth_authen} $@ identical
  752. R$* $| $* $: $1 $| $>"Local_trust_auth" $1
  753. R$* $| $#$* $#$2
  754. R$* $#error $@ 5.7.1 $: "550 " $&{auth_authen} " not allowed to act as " $&{auth_author}
  755. SLocal_trust_auth
  756. #
  757. ######################################################################
  758. ######################################################################
  759. #####
  760. ##### MAILER DEFINITIONS
  761. #####
  762. ######################################################################
  763. ######################################################################
  764. ##################################################
  765. ###   Local and Program Mailer specification   ###
  766. ##################################################
  767. #####  $Id: local.m4,v 8.50 1999/11/21 19:02:08 ca Exp $  #####
  768. #
  769. #  Envelope sender rewriting
  770. #
  771. SEnvFromL=10
  772. R<@> $n errors to mailer-daemon
  773. R@ <@ $*> $n temporarily bypass Sun bogosity
  774. R$+ $: $>AddDomain $1 add local domain if needed
  775. R$* $: $>MasqEnv $1 do masquerading
  776. #
  777. #  Envelope recipient rewriting
  778. #
  779. SEnvToL=20
  780. R$+ < @ $* > $: $1 strip host part
  781. #
  782. #  Header sender rewriting
  783. #
  784. SHdrFromL=30
  785. R<@> $n errors to mailer-daemon
  786. R@ <@ $*> $n temporarily bypass Sun bogosity
  787. R$+ $: $>AddDomain $1 add local domain if needed
  788. R$* $: $>MasqHdr $1 do masquerading
  789. #
  790. #  Header recipient rewriting
  791. #
  792. SHdrToL=40
  793. R$+ $: $>AddDomain $1 add local domain if needed
  794. R$* < @ *LOCAL* > $* $: $1 < @ $j . > $2
  795. #
  796. #  Common code to add local domain name (only if always-add-domain)
  797. #
  798. SAddDomain=50
  799. Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
  800. T=DNS/RFC822/X-Unix,
  801. A=procmail -Y -a $h -d $u
  802. Mprog, P=/bin/sh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,
  803. T=X-Unix/X-Unix/X-Unix,
  804. A=sh -c $u
  805. #####################################
  806. ###   SMTP Mailer specification   ###
  807. #####################################
  808. #####  $Id: smtp.m4,v 8.55 1999/09/21 20:26:18 ca Exp $  #####
  809. #
  810. #  common sender and masquerading recipient rewriting
  811. #
  812. SMasqSMTP=61
  813. R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully qualified
  814. R$+ $@ $1 < @ *LOCAL* > add local qualification
  815. #
  816. #  convert pseudo-domain addresses to real domain addresses
  817. #
  818. SPseudoToReal=51
  819. # pass <route-addr>s through
  820. R< @ $+ > $* $@ < @ $1 > $2 resolve <route-addr>
  821. # output fake domains as user%fake@relay
  822. # do UUCP heuristics; note that these are shared with UUCP mailers
  823. R$+ < @ $+ .UUCP. > $: < $2 ! > $1 convert to UUCP form
  824. R$+ < @ $* > $* $@ $1 < @ $2 > $3 not UUCP form
  825. # leave these in .UUCP form to avoid further tampering
  826. R< $&h ! > $- ! $+ $@ $2 < @ $1 .UUCP. >
  827. R< $&h ! > $-.$+ ! $+ $@ $3 < @ $1.$2 >
  828. R< $&h ! > $+ $@ $1 < @ $&h .UUCP. >
  829. R< $+ ! > $+ $: $1 ! $2 < @ $Y > use UUCP_RELAY
  830. R$+ < @ $+ : $+ > $@ $1 < @ $3 > strip mailer: part
  831. R$+ < @ > $: $1 < @ *LOCAL* > if no UUCP_RELAY
  832. #
  833. #  envelope sender rewriting
  834. #
  835. SEnvFromSMTP=11
  836. R$+ $: $>PseudoToReal $1 sender/recipient common
  837. R$* :; <@> $@ list:; special case
  838. R$* $: $>MasqSMTP $1 qualify unqual'ed names
  839. R$+ $: $>MasqEnv $1 do masquerading
  840. #
  841. #  envelope recipient rewriting --
  842. #  also header recipient if not masquerading recipients
  843. #
  844. SEnvToSMTP=21
  845. R$+ $: $>PseudoToReal $1 sender/recipient common
  846. R$+ $: $>MasqSMTP $1 qualify unqual'ed names
  847. R$* < @ *LOCAL* > $* $: $1 < @ $j . > $2
  848. #
  849. #  header sender and masquerading header recipient rewriting
  850. #
  851. SHdrFromSMTP=31
  852. R$+ $: $>PseudoToReal $1 sender/recipient common
  853. R:; <@> $@ list:; special case
  854. # do special header rewriting
  855. R$* <@> $* $@ $1 <@> $2 pass null host through
  856. R< @ $* > $* $@ < @ $1 > $2 pass route-addr through
  857. R$* $: $>MasqSMTP $1 qualify unqual'ed names
  858. R$+ $: $>MasqHdr $1 do masquerading
  859. #
  860. #  relay mailer header masquerading recipient rewriting
  861. #
  862. SMasqRelay=71
  863. R$+ $: $>MasqSMTP $1
  864. R$+ $: $>MasqHdr $1
  865. Msmtp, P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=rn, L=990,
  866. T=DNS/RFC822/SMTP,
  867. A=IPC $h
  868. Mesmtp, P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=rn, L=990,
  869. T=DNS/RFC822/SMTP,
  870. A=IPC $h
  871. Msmtp8, P=[IPC], F=mDFMuX8, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=rn, L=990,
  872. T=DNS/RFC822/SMTP,
  873. A=IPC $h
  874. Mdsmtp, P=[IPC], F=mDFMuXa%, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=rn, L=990,
  875. T=DNS/RFC822/SMTP,
  876. A=IPC $h
  877. Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=rn, L=2040,
  878. T=DNS/RFC822/SMTP,
  879. A=IPC $h