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