xref: /freebsd/contrib/sendmail/cf/feature/bcc.m4 (revision e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1)
1da7d7b9cSGregory Neil Shapirodivert(-1)
2da7d7b9cSGregory Neil Shapiro#
3da7d7b9cSGregory Neil Shapiro# Copyright (c) 2014 Proofpoint, Inc. and its suppliers.
4da7d7b9cSGregory Neil Shapiro#	All rights reserved.
5da7d7b9cSGregory Neil Shapiro#
6da7d7b9cSGregory Neil Shapiro# By using this file, you agree to the terms and conditions set
7da7d7b9cSGregory Neil Shapiro# forth in the LICENSE file which can be found at the top level of
8da7d7b9cSGregory Neil Shapiro# the sendmail distribution.
9da7d7b9cSGregory Neil Shapiro#
10da7d7b9cSGregory Neil Shapiro#
11da7d7b9cSGregory Neil Shapiro
12da7d7b9cSGregory Neil Shapirodivert(-1)
13da7d7b9cSGregory Neil Shapiro# Arguments:
14da7d7b9cSGregory Neil Shapiro# 1: Map to use
15da7d7b9cSGregory Neil Shapiro#   - empty/none: default map bcctable
16da7d7b9cSGregory Neil Shapiro#   - `access': to use access_db (with bcc: as tag)
17da7d7b9cSGregory Neil Shapiro#   - map definition
18da7d7b9cSGregory Neil Shapiro#   The map contains domain names and the RHS should be simply "ok".
19da7d7b9cSGregory Neil Shapiro#   If the access map is used, then its lookup algorithm is used.
20da7d7b9cSGregory Neil Shapiro#   Otherwise:
21da7d7b9cSGregory Neil Shapiro#    domain	ok
22da7d7b9cSGregory Neil Shapiro#   matches anything@domain
23da7d7b9cSGregory Neil Shapiro#    .domain	ok
24da7d7b9cSGregory Neil Shapiro#   matches any subdomain, e.g., l@sub.domain and l@sub.dom.domain
25da7d7b9cSGregory Neil Shapiro#   On a match, the original address will be used as bcc address unless
26da7d7b9cSGregory Neil Shapiro#   argument 3 is set.
27da7d7b9cSGregory Neil Shapiro# 2: Name of host ([mailer:]host)
28da7d7b9cSGregory Neil Shapiro# 3: Default bcc address: if set, this will be always used.
29da7d7b9cSGregory Neil Shapiro#   Only one of 2/3 can be empty.
30da7d7b9cSGregory Neil Shapiro#   Note: if Bcc address is used then only one copy will be sent!
31da7d7b9cSGregory Neil Shapiro#   (due to duplicate elimination)
32da7d7b9cSGregory Neil Shapiro# 4: Map definition for canonicalRcpt map of address rewriting to
33da7d7b9cSGregory Neil Shapiro#   apply to the added bcc envelope recipients.
34da7d7b9cSGregory Neil Shapiro#   The option -T<TMPF> is required to handle temporary map failures.
35da7d7b9cSGregory Neil Shapiro#
36da7d7b9cSGregory Neil Shapiro# The ruleset must return either
37da7d7b9cSGregory Neil Shapiro# - an e-mail address (user@dom.ain) which is then added as "bcc" recipient.
38da7d7b9cSGregory Neil Shapiro# - an empty string: do not add a "bcc" recipient, or
39da7d7b9cSGregory Neil Shapiro# - $#error: fail the SMTP transaction (e.g., temporary lookup failure)
40da7d7b9cSGregory Neil Shapiro#
41da7d7b9cSGregory Neil Shapiro# This feature sets O AddBcc=true
42da7d7b9cSGregory Neil Shapiro
43da7d7b9cSGregory Neil Shapiroifelse(lower(_ARG_),`access',`define(`_BCC_ACCESS_', `1')')
44da7d7b9cSGregory Neil Shapirodefine(`_ADD_BCC_', `1')
45da7d7b9cSGregory Neil Shapiro
46da7d7b9cSGregory Neil Shapiroifdef(`_BCC_ACCESS_', `dnl
47da7d7b9cSGregory Neil Shapiroifdef(`_ACCESS_TABLE_', `',
48da7d7b9cSGregory Neil Shapiro	`errprint(`*** ERROR: FEATURE(`bcc') requires FEATURE(`access_db')
49da7d7b9cSGregory Neil Shapiro')')')
50da7d7b9cSGregory Neil Shapiro
51da7d7b9cSGregory Neil Shapiroifdef(`_BCC_ACCESS_', `', `
52da7d7b9cSGregory Neil ShapiroLOCAL_CONFIG
53da7d7b9cSGregory Neil ShapiroKbcctable ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`bcctable', `_ARG_')')
54da7d7b9cSGregory Neil Shapiro
55da7d7b9cSGregory Neil ShapiroLOCAL_CONFIG
56da7d7b9cSGregory Neil ShapiroO AddBcc=true
57da7d7b9cSGregory Neil Shapiroifelse(len(X`'_ARG2_),`1', `', `
58da7d7b9cSGregory Neil ShapiroDA`'_ARG2_')
59da7d7b9cSGregory Neil Shapiro
60da7d7b9cSGregory Neil Shapiroifelse(len(X`'_ARG4_), `1', `',
61da7d7b9cSGregory Neil Shapiro`define(`_CANONIFY_BCC_', `1')dnl
62da7d7b9cSGregory Neil Shapirodefine(`_NEED_SMTPOPMODES_', `1')dnl
63da7d7b9cSGregory Neil Shapiro# canonical address look up for AddBcc recipients
64da7d7b9cSGregory Neil ShapiroKcanonicalRcpt _ARG4_
65da7d7b9cSGregory Neil Shapiro')dnl
66da7d7b9cSGregory Neil Shapiro
67da7d7b9cSGregory Neil ShapiroLOCAL_RULESETS
68da7d7b9cSGregory Neil ShapiroSbcc
69da7d7b9cSGregory Neil ShapiroR< $+ >			$1
70da7d7b9cSGregory Neil Shapiroifdef(`_BCC_ACCESS_', `dnl
71da7d7b9cSGregory Neil ShapiroR$+ @ $+		$: $1@$2 $| $>SearchList <! bcc> $| <D:$2> <>',
72da7d7b9cSGregory Neil Shapiro`R$+ @ $+		$: $1@$2 $| $>BCC $2')
73da7d7b9cSGregory Neil ShapiroR$* $| <?>		$@
74da7d7b9cSGregory Neil ShapiroR$* $| $*		$: ifelse(len(X`'_ARG3_),`1', `$1', `_ARG3_')
75da7d7b9cSGregory Neil Shapiro
76da7d7b9cSGregory Neil Shapiroifdef(`_CANONIFY_BCC_', `dnl
77da7d7b9cSGregory Neil ShapiroR$+ @ $+		$: $1@$2 $| <$(canonicalRcpt $1 @ $2 $: $)>
78da7d7b9cSGregory Neil ShapiroR$* $| <>		$@
79*5b0945b5SGregory Neil ShapiroR$* $| <$* <TMPF>>	$#error $@ 4.3.0 $: _TMPFMSG_(`BCC')
80da7d7b9cSGregory Neil ShapiroR$* $| <$+>		$@ $2			map matched?
81da7d7b9cSGregory Neil Shapiro')
82da7d7b9cSGregory Neil Shapiro
83da7d7b9cSGregory Neil Shapiro
84da7d7b9cSGregory Neil Shapiroifdef(`_BCC_ACCESS_', `', `
85da7d7b9cSGregory Neil ShapiroSBCC
86da7d7b9cSGregory Neil ShapiroR$+		$: $1 < $(bcctable $1 $: ? $) >
87da7d7b9cSGregory Neil ShapiroR$- . $+ <?>	$: $2 < $(bcctable .$2 $: ? $) >
88da7d7b9cSGregory Neil ShapiroR$- . $+ <?>	$: $>BCC $2
89da7d7b9cSGregory Neil ShapiroR$* <$*>	$: <$2>
90da7d7b9cSGregory Neil Shapiro')
91