V1/Sun
configuration file.
V*/Berkeley configuration file.
V*/Berkeley config file and a V*/Sun config file
which are otherwise identical.
V1/Sun backwards
compatibility mode.
main.cf and subsidiary.cf.
| Solaris | initially | latest patch | in progress | planned |
|---|---|---|---|---|
| 2.5.1 | SMI-8.6 | 8.8.8+Sun | nothing further | nothing further |
| 2.6 | SMI-8.6 | 8.8.8+Sun | nothing further | security fixes only |
| 7 | 8.9.1b+Sun | 8.11.7+Sun | nothing further | security fixes only |
| 8 | 8.9.3+Sun | 8.11.7+Sun | nothing further | security fixes only |
| 9 | 8.12.2+Sun | 8.13.7+Sun | nothing | TBD |
| 10 | 8.13.3+Sun | 8.13.7+Sun | nothing | TBD |
| Nevada | 8.13.8+Sun | N/A | 8.14.0+Sun | TBD |
V1/Sun configuration fileV1/Sun
configuration files had become a problem, as they had several bugs which
could only be fixed by upgrading to a new configuration file format. So
for Solaris 9 and later, support for these by then (mid-2002) ancient
configuration files was dropped.
V1/Sun configuration file as an old
binary, will behave identically, except for bug fixes and security
enhancements.
NoRecipientAction (option to emulate old behavior
exists)To: or Cc:
header, older versions of sendmail would add an Apparently-To:
header, whose value was the recipient as specified in the SMTP transaction.
This behavior was in violation of RFC 1123, so an option was added to make
it configurable.
The new default behavior is not to add any header in such circumstances;
this is what will occur when running a new binary with an old
V1/Sun config file. Since all properly formatted messages
contain a To: header, this is a corner case. Note also that
this will not break any MUAs.
% chmod go-w / /etc /etc/mail /var /var/spool /var/spool/mqueue
% chown root / /etc /etc/mail
Depending on which release of Solaris you are running, some of these may
already be set correctly.
V*/Berkeley configuration fileV7/Berkeley, V8/Berkeley, V9/Berkeley
and V10/Berkeley.)
V*/Sun config file and
a V*/Berkeley config file when run by the same 8.X+Sun
binaryV*/Sun and V*/Berkeley, though there is a general
goal to keep such differences to a minimum. Fortunately, few have been
required.
Content-Length:
header in V*/Sun mode but no such header in
V*/Berkeley mode. Note that these are not the same as
messages to mailboxes; for such messages, both modes will result in
this header being present, as mail.local(1M) adds it.
Note also for messages to files in V*/Sun mode that
mail.local adds this header as well: sendmail calls
mail.local using a new option, telling it to append to
the specified file rather than the specified mailbox. For this reason,
a new version of mail.local is provided with the
8.8.8+Sun version of sendmail, as well as with subsequent versions.
Note: the above paragraph holds for 8.8.X and 8.9.X; however,
as of 8.10.X, V*/Sun mode has moved even closer to
V*/Berkeley mode: messages which are piped to programs
will not have a Content-Length: header in either mode.
Note further that as of the fix for Sun bug 4756570 (this fix is present in the latest sendmail patches for Solaris 7 and later), that even file delivery is no longer different between the two modes, and this sub-section has become obsolete.
gethostbyname(`hostname`) and
checking h_name and h_aliases for a name with a
dot. Note that the service switch is obeyed in this look-up. If no such
fully-qualified name can be found, sendmail sleeps for 60 seconds before
trying again on the premise that a temporary name service failure may
have occurred. After the sleep, if it still cannot determine the
fully-qualified host name, it gives up trying to do so and continues,
using a short name. Note that on a properly configured system this
should never happen. Anyway, in V*/Sun mode, a call to
getdomainname() is made prior to the sleep; if successful,
the sleep is avoided, and the name provided by getdomainname() is used, minus its first label. No such call is made in
V*/Berkeley mode. Unfortunately, however, this start-up code
happens before the configuration file is even read, so V*/Sun
mode is essentially in effect regardless.
Note: using the NIS domain name to fully qualify the host name as
described above is needed in V*/Sun mode for backward
compatibility; however, it is not recommended. A Bourne-shell script,
check-hostname.sh, which can check
for such a configuration and recommend corrective action, is provided.
Note that on a Solaris 7 or later system, this script can be found at
/usr/lib/mail/sh/check-hostname and is described by the
check-hostname(1M) man page. Note further than in Solaris
10 this script has migrated to /usr/sbin/check-hostname
though a symbolic link from the old location is still provided.
V*/Sun mode, if ldap is listed as a method
for aliases in /etc/nsswitch.conf, then an
internal method will be used for retrieving LDAP aliases; this will
not occur in V*/Berkeley mode.
V1/Sun Backwards
Compatibility ModeV1/Sun configuration files.
(N.B.: see caveat below.) These V1/Sun config files are called
such because of the sendmail.cf version directive V, which takes
a numeric argument optionally followed by a slash and a vendor name. The
older SMI-8.6 versions of sendmail used V1/Sun config files.
The newer modes are V7/Sun for sendmail 8.8.8+Sun,
V8/Sun for 8.9.X+Sun, V9/Sun for 8.10.X+Sun and
8.11.X+Sun and V10/Sun for 8.12.X+Sun . For a config file
with no V directive, the default has been V1/Sun.
Caveat: V1/Sun config files do
not have any anti-spam features, and cannot
be fixed. They are also subject to at least one nasty denial of service
attack. We strongly recommend that any machine connected to
the Internet be running at least version 8.8.8 (binary and
config file), but preferably 8.9.3 or later. Otherwise, you may very likely
find your site listed by ORBS and/or
MAPS. Note also that starting
with Solaris 9, V1/Sun backwards
compatibility support is removed.
Most new features introduced in 8.7 and later work regardless of the mode, but some behavioral differences exist between the modes. Section numbers below refer to the 2nd edition O'Reilly book sendmail.
| What | Description |
|---|---|
$k
| The $k macro contains the value of the mail hub machine
(see §D.6).
|
$m
| The $m macro contains the name of the parent domain.
|
$%
| The $% prefix can be used in the LHS to evaluate the
$%l, $%y and $%z macros.
|
${
| ${ and $} are a synonym for $( and
$) (see §33.4).
|
$j
| The $j macro is not automatically included in
$=w (see §32.5.8), nor is it required to contain a dot.
|
owner-
| The owner- (see §25.3) of a mailing list is not
set as the envelope sender when processing a :include:.
|
| DNS | When making DNS lookups, RES_DNSRCH (search subdomains)
and RES_DEFNAMES (append the local domain) are automatically
disabled.
|
| aliases | Duplicate left-hand side entries in the aliases(5) file are silently ignored. |
K
| The K configuration command (see §33.3) is disabled.
|
VRFY
| The VRFY and EXPN SMTP commands (see
§22.3.2) provide the same information. That is, they both
act like EXPN.
|
F=g
| The F=g delivery agent flag (see §30.8.22) cannot
be turned off, even if it is omitted. That is, the special address
<> is never used as the sender of bounced mail.
|
| shells | A user with any shell is allowed to redirect mail to programs or files (see §22.8.4 for how this differs from current behavior). |
Probably the four most important of these are the owner-
behavioral difference, the disabling of the K command,
the shells issue and the F=g delivery agent flag.
owner- prevents mailing list bounces from going to
the proper address. The
owner- section on
the migration page discusses this in
detail.
K command is used to define map classes, i.e., associate
a symbolic name with a database file, where the symbolic name will later
be used in the RHS of rules. The ability to use this feature makes
virtual hosting much easier, and
is required for some of the new anti-spam features.
.forwards that
redirect messages to files and/or programs to stop working. The
/etc/shells section
on the migration page discusses this in
detail.
F=g delivery agent flag was added to work around a
bug in very old Solaris (pre-2.3) config files in which the special
reserved address <> led to an infinite loop
in the address-rewriting rule-sets. Ironically, later Solaris
V1/Sun config files were subject to a different
infinite loop type bug caused by the F=g
flag. Per section 5.3.3 of
RFC 1123, the address <> is
reserved to prevent bounce storms: a bounce is never sent for any message
whose return path is <>. But since F=g
causes an alternate return path to be used, a loop can ensue which leads
to a nasty denial of service.
generic-solaris2.cf vs. Solaris'
main.cfV7/Berkeley vs. V7/Sun for
8.8.8+Sun (see section 3 above for details);
V8/Berkeley vs. V8/Sun for
8.9.3+Sun .
/etc/mail/sendmail.cw is optional in the
Solaris version.
/etc/mail/sendmail.ct is enabled and optional
in the Solaris version; Berkeley has this disabled (i.e.,
commented out).
AutoRebuildAliases option is turned on in the
Solaris versions, for backward compatibility with older Solaris
releases.
mail.local(1M) as the local
mail delivery agent instead of /bin/mail. In general,
mail.local is preferred, but it was not introduced
until Solaris 2.5; therefore, Berkeley cannot safely use it in
its generic file.
accept_unqualified_senders,
accept_unresolvable_domains and
relay_entire_domain for backwards compatibility.
To get the stronger Berkeley defaults, use
DOMAIN(solaris-antispam) instead of
DOMAIN(solaris-generic) in your .mc
file; see /usr/lib/mail/README for m4 details.
AliasFile to
/etc/mail/aliases; the Solaris version sets it to
dbm:/etc/mail/aliases . This is done for backwards
compatibility in case any applications have been written which
depend on the dbm(3b) API. To get the Berkeley DB
API, put define(`ALIAS_FILE', /etc/mail/aliases)
in your .mc file after the
OSTYPE(solaris2.ml) macro.
V10/Berkeley vs. V10/Sun for
8.12.2+Sun (see section 3 above for details).
accept_unqualified_senders,
accept_unresolvable_domains and
relay_entire_domain for backwards compatibility.
To get the stronger Berkeley defaults, use
DOMAIN(solaris-antispam) instead of
DOMAIN(solaris-generic) in your .mc
file; see /usr/lib/mail/README for m4 details.
main.cf vs.
subsidiary.cfmain.cf and subsidiary.cf
have differed significantly from each other. No longer:
RemoteMode is enabled in subsidiary.cf
but not in main.cf. (Until Solaris 9.)
subsidiary.cf defines SMART_HOST to be
mailhost.$m ($m is the local sub-domain);
main.cf does not define a SMART_HOST.
.mc file used to build subsidiary.cf,
the LOCAL_NET_CONFIG macro is used to route all messages
destined for hosts within the local domain directly to that host,
instead of to the SMART_HOST. This is not necessary in
main.cf, as that config file is for hosts that know how
to route messages properly.
FallbackSmartHost option),
there is no longer a need for separate main.{mc,cf} and
subsidiary.{mc.cf} files, so they have been combined into
a single sendmail.{mc,cf} pair of files, though the old
names are still available as symbolic links pointing to the new names.