D: define macro
Macros are named with a single character or with a word in braces
({}). Single character names may be selected from the entire
ASCII set, but user-defined macros should be selected
from the set of upper case letters only. Lower case letters and
special symbols are used internally. Long names beginning with a
lower case letter or a punctuation character are reserved for
use by sendmail, so user-defined long macro names should begin
with an upper case letter.
The syntax for macro definitions is:
Dx | val
x is the name of the macro (which may be a single
character or a word in braces) and val is the value
it should have. There should be no spaces given that do not
actually belong in the macro value.
Macros are interpolated using the construct $x,
where x is the name of the macro to be interpolated.
This interpolation is done when the configuration file is read,
except in M lines. The special construct
$&x can be used in R lines to get
deferred interpolation.
Conditionals can be specified using the syntax:
$?x text1 $| text2 $.
This interpolates text1 if the macro $x
is set and non-null, and text2 otherwise. The else (<$|)
clause may be omitted.
Lower case macro names are reserved to have special semantics,
used to pass information in or out of
sendmail(1M),
and special characters are reserved to provide conditionals,
and so on. Upper case names (that is, $A through
$Z) are specifically reserved for configuration file
authors.
The following macros are defined and/or used internally by
sendmail for interpolation into argv's for
mailers or for other contexts. (The macros not marked by a
footnote are passed out of sendmail but are not otherwise
used internally.)
$a-
The origination date in RFC822 format. This is
extracted from the
Date:
line.
$b-
The current date in RFC822 format.
$c-
The hop count. This is a count of the number of
Received:
lines plus the value of the -h command line flag.
$d-
The current date in UNIX format (derived using the
ctime(3C)
function).
$e[1]-
(Obsolete; use the SmtpGreetingMessage option instead.)
The SMTP entry message. This is printed out when
SMTP starts up. The first word must be the $j
macro as specified by RFC821. Defaults to
$j Sendmail $v ready at $b
. Commonly redefined to include
the configuration version number, for example, $j Sendmail
$v/$Z ready at $b
.
$f-
The envelope sender (from) address.
$g-
The sender address relative to the recipient. For example, if
$f is foo, $g will be host!foo,
foo@host.domain, or whatever is appropriate for the
receiving mailer.
$h-
The recipient host. This is set in ruleset 0 from the $@
field of a parsed address.
$i-
The queue ID, for example, HAA12345.
$j[2]-
The official domain name for this site. This is fully qualified
if the full qualification can be found. It must be redefined to
be the fully qualified domain name if your system is not configured
so that information can find it automatically.
$k-
The UUCP node name (from the uname system call).
$l[1]-
(Obsolete; use the UnixFromLine option instead.) The
format of the UNIX from line. Unless you have changed the UNIX
mailbox format, you should not change the default, which is
From $g $d
.
$m-
The domain part of the
gethostname(3bsd)
return value. Under normal circumstances, $j is equivalent
to $w.$m.
$n[1]-
The name of the daemon (for error messages). Defaults to
MAILER-DAEMON.
$o[1]-
(Obsolete: use the OperatorChars option instead.) The set
of operators in addresses. A list of characters which will be
considered tokens and which will separate tokens when doing parsing.
For example, if @ were in the $o macro, then
the input a@b would be scanned as three tokens: a,
@, and b. Defaults to .:@[], which is
the minimum set necessary to do RFC822 parsing; a richer
set of operators is .:%@!/[], which adds support for UUCP,
the %-hack, and X.400 addresses.
$p-
Sendmail's process ID.
$q[1]-
Default format of sender address. The $q macro specifies
how an address should appear in a message when it is defaulted.
Defaults to
<$g>
. It is commonly redefined to be
$?x$x <$g>$|$g$
or $g$?x ($x)$.
, corresponding
to the following two formats:
Eric Allman <eric@CS.Berkeley.EDU>
eric@CS.Berkeley.EDU (Eric Allman)
sendmail properly quotes names that have special characters
if the first form is used.
$r-
Protocol used to receive the message. Set from the -p
command line flag or by the SMTP server code.
$s-
Sender's host name. Set from the -p command line flag or
by the SMTP server code.
$t-
A numeric representation of the current time.
$u-
The recipient user.
$v-
The version number of the sendmail binary.
$w[2]-
The hostname of this site. This is the root name of this host (but,
see below for caveats).
$x-
The full name of the sender.
$z-
The home directory of the recipient.
$_-
The validated sender address.
${auth_authen}-
The client's authentication credentials as determined by authentication
(only set if successful).
${auth_author}-
The authorization identity (the AUTH= parameter of the
SMTP MAIL command if supplied.
${auth_type}-
The mechanism used for authentication
(only set if successful).
${bodytype}-
The message body type (7BIT or 8BITMIME), as
determined from the envelope.
${client_addr}-
The IP address of the SMTP client. Defined in
the SMTP server only.
${client_name}-
The host name of the SMTP client.
This may be the client's bracketed IP address
in the form [ nnn.nnn.nnn.nnn ] if the client's
IP address is not resolvable, or if the resolved
name doesn't match ${client_name}.
Defined in the SMTP server only.
${client_port}-
The port number of the SMTP client. Defined in the
SMTP server only.
${client_resolve}-
Holds the result of the resolve call for
${client_name}: OK, FAIL, FORGED, TEMP.
Defined in the SMTP server only.
${currHeader}
Header
value
as
quoted
string-
(possibly truncated to MAXNAME).
${daemon_addr}-
The IP address the daemon is listening on for connections.
Unless DaemonPortOptions
is set, this will be ``0.0.0.0''.
${daemon_family}-
The network family
if the daemon is accepting network connections.
Possible values include ``inet'' , ``inet6'' , ``iso'' , ``ns'' , ``x.25''.
${daemon_flags}-
The flags for the daemon as specified by the
Modifier= part of
DaemonPortOptions
whereby the flags are separated from each other by spaces,
and upper case flags are doubled.
That is, Modifier=Ea
will be represented as ``EE a'' in
${daemon_flags},
which is required for testing the flags in rulesets.
${daemon_info}-
Some information about a daemon as a text string.
For example, ``SMTP+queueing@00:30:00''.
${daemon_name}-
The name of the daemon from
DaemonPortOptions Name= suboption.
If this suboption is not set,
``Daemon#'', where # is the daemon number, is used.
${daemon_port}-
The port the daemon is accepting connection on. Unless
DaemonPortOptions is set, this will most likely be ``25''.
${deliveryMode}-
The current delivery mode sendmail is using.
It is initially set to the value of the
DeliveryMode option.
${envid}-
The envelope id passed to sendmail as part of the envelope.
${hdrlen}-
The length of the header value which is stored in
${currHeader} (before possible truncation).
If this value is greater than or equal
MAXNAME
the header has been truncated.
${hdr_name}-
The name of the header field for which the current header
check ruleset has been called.
This is useful for a default header check ruleset to get
the name of the header.
${if_addr}-
The IP address of the interface of an incoming connection
unless it is in the loopback net.
${if_name}-
The name of the interface of an incoming connection.
This macro can be used for
SmtpGreetingMessage and HReceived for virtual hosting.
For example:
O SmtpGreetingMessage=$?{if_name}${if_name}$|$j$. Sendmail $v/$Z; $b
${mail_addr}-
The address part of the resolved triple of the address given for the
SMTP MAIL command. Defined in the SMTP server only.
${mail_host}-
The host from the resolved triple of the address given for the
SMTP MAIL command.
Defined in the SMTP server only.
${mail_mailer}-
The mailer from the resolved triple of the address given for the
SMTP MAIL command. Defined in the SMTP server only.
${ntries}-
The number of delivery attempts.
${opMode}-
The current operation mode (from the -b flag).
${queue_interval}-
The queue run interval given by the
-q flag. For example, -q30m
would set ${queue_interval} to ``00:30:00''.
${rcpt_addr}-
The address part of the resolved triple of the address given for the
SMTP RCPT command. Defined in the SMTP server only.
${rcpt_host}-
The host from the resolved triple of the address given for the
SMTP RCPT command. Defined in the SMTP server only.
${rcpt_mailer}-
The mailer from the resolved triple of the address given for the
SMTP RCPT command. Defined in the SMTP server only.
Footnotes:
[1]-
These macros are information passed into sendmail.
As of version 8.6, all of these macros have reasonable defaults.
Previous versions required that they be defined.
[2]-
These macros are information passed both in and out of sendmail.
There are three types of dates that can be used. The $a
and $b macros are in RFC822 format; $a
is the time as extracted from the Date:
line of the
message (if there was one), and $b is the current date
and time (used for postmarks). If no Date:
line is found
in the incoming message, $a is set to the current time
also. The $d macro is equivalent to the $b
macro in UNIX (see the
ctime(3C)
manual page) format.
The macros $w, $j, and $m are set to
the identity of this host. sendmail tries to find the
fully qualified name of the host if at all possible; it does this
by calling
gethostname(3bsd)
to get the current hostname and then passing that to
gethostbyname(3N)
which is supposed to return the canonical version of that host name.
For example, on some systems, gethostname might return
foo which would be mapped to foo.bar.com by
gethostbyname.
Assuming this is successful, $j is set to the fully
qualified name and $m is set to the domain part of the
name (everything after the first dot). The $w macro is
set to the first word (everything before the first dot) if you
have a level 5 or higher configuration file; otherwise, it is
set to the same value as $j. If the canonification is
not successful, it is imperative that the config file set
$j to the fully qualified domain name. The $f
macro is the ID of the sender as originally determined;
when mailing to a specific host the $g macro is set to
the address of the sender relative to the recipient. For example,
if a message is sent to bollard@matisse.CS.Berkeley.EDU
from the machine vangogh.CS.Berkeley.EDU, the
$f macro will be eric and the $g
macro will be eric@vangogh.CS.Berkeley.EDU.
The $x macro is set to the full name of the sender.
This can be determined in several ways. It can be passed as flag
to sendmail. It can be defined in the NAME
environment variable. The third choice is the value of the
Full-Name:
line in the header if it exists, and the
fourth choice is the comment field of a From:
line.
If all of these fail, and if the message is being originated
locally, the full name is looked up in the /etc/passwd
file.
When sending, the $h, $u, and $z
macros get set to the host, user, and home directory (if local)
of the recipient. The first two are set from the $@
and $: part of the rewriting rules, respectively.
The $p and $t macros are used to create
unique strings (for example, for the Message-Id:
field).
The $i macro is set to the queue id on this host; if
put into the timestamp line it can be extremely useful for
tracking messages. The $v macro is set to be the
version number of sendmail; this is normally put in
timestamps and has been proven extremely useful for debugging.
The $c macro is set to the hop count, for
example, the number of times this message has been processed.
This can be determined by the -h flag on the command
line or by counting the timestamps in the message.
The $r and $s macros are set to the protocol
used to communicate with sendmail and the sending
hostname. They can be set together using the -p
command line flag or separately using the -M or
-oM flags.
The $_ macro is set to a validated sender host name.
If the sender is running an RFC1413-compliant
IDENT server and the receiver has the IDENT
protocol turned on, it will include the user name on that host.
The ${client_name}, ${client_addr}, and
${client_port} macros are set to the name, address,
and port number of the SMTP client who is invoking
sendmail as a server. These can be used in the
check_* rulesets using the $& deferred
evaluation form (see
``Ruleset hooks''
for details).
© 2000 The Santa Cruz Operation, Inc. All rights reserved.