20060117
- Safety: daemon processes that need no privileges now insist
- that they are configured to run without privileges. Files:
- master/single_server.c, master/multi_server.c,
+ [withdrawn 20060126] Safety: daemon processes that need no
+ privileges now insist that they are configured to run without
+ privileges. Files: master/single_server.c, master/multi_server.c,
master/trigger_server.c.
Cleanup: preserve upper case information of address localpart
"sendmail -bs", "postconf -b", "postconf -t", and probably
more. Files: master/{single,multi,trigger}_server.c.
-Open problems:
+20060130
- select->poll, kqueue, ...
+ Bugfix: an empty remote_header_rewrite_domain value caused
+ trivial-rewrite to dereference a null pointer, but only in
+ regression tests, not in production. Envelope addresses are
+ by definition rewritten in the local domain context, because
+ an address without domain is equivalent to an address in
+ the local domain; and header addresses are rewritten in the
+ remote context only when remote_header_rewrite_domain is
+ non-empty. File: trivial-rewrite/rewrite.c.
+
+20060131
+
+ Cleanup: regression tests are now separated into "make
+ tests" for unprivileged tests, and "make root_tests" for
+ tests that require privileges to connect to the Postfix
+ internal sockets. Files Makefile.in, src/*/Makefile.in.
+
+20060201
+
+ Bugfix: despite efforts to treat malformed domain names in
+ DNS replies as hard errors (change 20050726) they were still
+ processed as soft errors. File: dns/dns_lookup.c.
+
+Open issues:
+
+ Investigate if it is feasible to eliminate cleanup(8) from
+ the path of mail that is forwarded or generated internally.
+ Good: we don't want header rewriting or content inspection.
+ Bad: we still need virtual aliasing, even when mail is
+ forwarded internally. This almost seems to imply that we
+ do virtual aliasing earlier?
+
+ Investigate what it would take to eliminate oqmgr, and to
+ make the old behavior configurable in a unified queue manager.
+ This would shave another 2.7 KLOC from the source footprint.
+
+ Document case folding strategy in different maps (access,
+ canonical, etc). Even better: make it configurable, so we
+ can blame the user when they make a mistake :-)
+
+ Eliminate the (incoming,deferred)-active rename operation.
+
+ Softbounce fallback-to-ISP for SOHO users. This requires
+ playing with with the soft_error test in the smtp_trouble.c
+ module, and a way to avoid trying direct-to-MX-backup.
+
+ select -> kqueue, epoll, /dev/poll, poll() ...
Set pipelining flag at start of session and at other protocol
synchronization points.
Centralize main.cf parameter input so that defaults work
consistently.
+ Fix default time unit handling so that we can have a default
+ bounce lifetime of $maximal_queue_lifetime, without causing
+ panics when a non-default maximal_queue_lifetime setting
+ includes no time unit.
+
In second-line servers such as proxymap and trivial-rewrite,
set the max_idle time limit to a relatively small value so
that processes will refresh more often.
done;
rm -f Makefile; (cat conf/makedefs.out Makefile.in) >Makefile
-update printfck tests:
+update printfck tests root_tests:
set -e; for i in $(DIRS); do \
(set -e; echo "[$$i]"; cd $$i; $(MAKE) $(OPTS) $@ MAKELEVEL=) || exit 1; \
done
For safety reasons, Postfix no longer allows $number substitution
in regexp: or pcre: transport tables or per-sender relayhost tables.
-For safety reasons, daemons that don't need privileges now insist
-that they are configured as unprivileged in master.cf.
-
Major changes with snapshot 20060123
====================================
Dovecot SASL support (SMTP server only). Details can be found
in the SASL_README document.
-You can now use "resolve_numeric_address = yes" to stop Postfix
+You can now use "resolve_numeric_domain = yes" to stop Postfix
from rejecting user@ipaddress as an invalid destination. It will
deliver the mail to user@[ipaddress] instead.
impact outbound delivery rates.
<b>CONFIGURATION PARAMETERS</b>
- Changes to <b>main.cf</b> are not picked up automatically, as
+ Changes to <a href="postconf.5.html"><b>main.cf</b></a> are not picked up automatically, as
<a href="qmgr.8.html"><b>oqmgr</b>(8)</a> is a persistent process. Use the command "<b>postfix</b>
<b>reload</b>" after a configuration change.
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
- The default location of the Postfix main.cf and
- master.cf configuration files.
+ The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
+ <a href="master.5.html">master.cf</a> configuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
How much time a Postfix daemon process may take to
sages, with $<b>name</b> expressions replaced by actual
values. To override the built-in message text,
specify a template file at the end of the command
- line, or specify a template file in main.cf with
+ line, or specify a template file in <a href="postconf.5.html">main.cf</a> with
the <b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a></b> parameter. To force
selection of the built-in message text templates,
specify an empty template file name (in shell lan-
later.
<b>-c</b> <i>config</i><b>_</b><i>dir</i>
- The <b>main.cf</b> configuration file is in the named
+ The <a href="postconf.5.html"><b>main.cf</b></a> configuration file is in the named
directory instead of the default configuration
directory.
<b>-d</b> Print default parameter settings instead of actual
settings.
- <b>-e</b> Edit the <b>main.cf</b> configuration file. The file is
+ <b>-e</b> Edit the <a href="postconf.5.html"><b>main.cf</b></a> configuration file. The file is
copied to a temporary file then renamed into place.
Parameters and values are specified on the command
line. Use quotes in order to protect shell
<b>-n</b> Print parameter settings that are not left at their
built-in default value, because they are explicitly
- specified in main.cf.
+ specified in <a href="postconf.5.html">main.cf</a>.
<b>-t</b> [<i>template</i><b>_</b><i>file</i>]
Display the templates for delivery status notifica-
tion (DSN) messages. To override the built-in tem-
plates, specify a template file at the end of the
- command line, or specify a template file in main.cf
+ command line, or specify a template file in <a href="postconf.5.html">main.cf</a>
with the <b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a></b> parameter. To force
selection of the built-in templates, specify an
empty template file name (in shell language: "").
Directory with Postfix configuration files.
<b>CONFIGURATION PARAMETERS</b>
- The following <b>main.cf</b> parameters are especially relevant
+ The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
to this program.
The text below provides only a parameter summary. See
<a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including examples.
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
- The default location of the Postfix main.cf and
- master.cf configuration files.
+ The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
+ <a href="master.5.html">master.cf</a> configuration files.
<b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a> (empty)</b>
Pathname of a configuration file with bounce mes-
sage templates.
<b>FILES</b>
- /etc/postfix/main.cf, Postfix configuration parameters
+ /etc/postfix/<a href="postconf.5.html">main.cf</a>, Postfix configuration parameters
<b>SEE ALSO</b>
<a href="bounce.5.html">bounce(5)</a>, bounce template file format
impact outbound delivery rates.
<b>CONFIGURATION PARAMETERS</b>
- Changes to <b>main.cf</b> are not picked up automatically as
+ Changes to <a href="postconf.5.html"><b>main.cf</b></a> are not picked up automatically as
<a href="qmgr.8.html"><b>qmgr</b>(8)</a> is a persistent process. Use the "<b>postfix reload</b>"
command after a configuration change.
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
- The default location of the Postfix main.cf and
- master.cf configuration files.
+ The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
+ <a href="master.5.html">master.cf</a> configuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
How much time a Postfix daemon process may take to
<a href="http://www.faqs.org/rfcs/rfc1652.html">RFC 1652</a> (8bit-MIME transport)
<a href="http://www.faqs.org/rfcs/rfc1870.html">RFC 1870</a> (Message Size Declaration)
<a href="http://www.faqs.org/rfcs/rfc2033.html">RFC 2033</a> (LMTP protocol)
+ <a href="http://www.faqs.org/rfcs/rfc2034.html">RFC 2034</a> (SMTP Enhanced Error Codes)
<a href="http://www.faqs.org/rfcs/rfc2045.html">RFC 2045</a> (MIME: Format of Internet Message Bodies)
<a href="http://www.faqs.org/rfcs/rfc2046.html">RFC 2046</a> (MIME: Media Types)
<a href="http://www.faqs.org/rfcs/rfc2554.html">RFC 2554</a> (AUTH command)
<a href="http://www.faqs.org/rfcs/rfc2821.html">RFC 2821</a> (SMTP protocol)
<a href="http://www.faqs.org/rfcs/rfc2920.html">RFC 2920</a> (SMTP Pipelining)
<a href="http://www.faqs.org/rfcs/rfc3207.html">RFC 3207</a> (STARTTLS command)
+ <a href="http://www.faqs.org/rfcs/rfc3461.html">RFC 3461</a> (SMTP DSN Extension)
<a href="http://www.faqs.org/rfcs/rfc3463.html">RFC 3463</a> (Enhanced Status Codes)
<b>DIAGNOSTICS</b>
<b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b>
Optional lookup tables with the Postfix SMTP client
- TLS usage policy by next-hop domain name and by
+ TLS usage policy by next-hop destination and by
remote SMTP server hostname.
<b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (5)</b>
<a href="http://www.faqs.org/rfcs/rfc1869.html">RFC 1869</a> (SMTP service extensions)
<a href="http://www.faqs.org/rfcs/rfc1870.html">RFC 1870</a> (Message Size Declaration)
<a href="http://www.faqs.org/rfcs/rfc1985.html">RFC 1985</a> (ETRN command)
+ <a href="http://www.faqs.org/rfcs/rfc2034.html">RFC 2034</a> (SMTP Enhanced Error Codes)
<a href="http://www.faqs.org/rfcs/rfc2554.html">RFC 2554</a> (AUTH command)
<a href="http://www.faqs.org/rfcs/rfc2821.html">RFC 2821</a> (SMTP protocol)
<a href="http://www.faqs.org/rfcs/rfc2920.html">RFC 2920</a> (SMTP Pipelining)
RFC 1652 (8bit-MIME transport)
RFC 1870 (Message Size Declaration)
RFC 2033 (LMTP protocol)
+RFC 2034 (SMTP Enhanced Error Codes)
RFC 2045 (MIME: Format of Internet Message Bodies)
RFC 2046 (MIME: Media Types)
RFC 2554 (AUTH command)
RFC 2821 (SMTP protocol)
RFC 2920 (SMTP Pipelining)
RFC 3207 (STARTTLS command)
+RFC 3461 (SMTP DSN Extension)
RFC 3463 (Enhanced Status Codes)
.SH DIAGNOSTICS
.ad
when TLS is not already enabled for that server.
.IP "\fBsmtp_tls_per_site (empty)\fR"
Optional lookup tables with the Postfix SMTP client TLS usage
-policy by next-hop domain name and by remote SMTP server hostname.
+policy by next-hop destination and by remote SMTP server hostname.
.IP "\fBsmtp_tls_scert_verifydepth (5)\fR"
The verification depth for remote SMTP server certificates.
.IP "\fBsmtp_tls_session_cache_database (empty)\fR"
RFC 1869 (SMTP service extensions)
RFC 1870 (Message Size Declaration)
RFC 1985 (ETRN command)
+RFC 2034 (SMTP Enhanced Error Codes)
RFC 2554 (AUTH command)
RFC 2821 (SMTP protocol)
RFC 2920 (SMTP Pipelining)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
tests: update template_test 2template_test
+root_tests:
+
update: ../../libexec/$(PROG) $(SAMPLES)
../../libexec/$(PROG): $(PROG)
# Avoid dependency on installed Postfix.
# XXX This still requires that default_privs, mail_owner etc. accounts exist.
template_test: $(PROG) main.cf template_test.ref
- MAIL_CONFIG=. ./$(PROG) -SVuzndump_templates >template_test.tmp
+ MAIL_CONFIG=. ./$(PROG) -SVzndump_templates >template_test.tmp
diff template_test.ref template_test.tmp
- MAIL_CONFIG=. ./$(PROG) -SVuzndump_templates \
+ MAIL_CONFIG=. ./$(PROG) -SVzndump_templates \
-o bounce_template_file=template_test.ref > template_test.tmp
diff template_test.ref template_test.tmp
rm -f template_test.tmp
test: $(TESTPROG)
-tests: test
-
update: ../../libexec/$(PROG)
../../libexec/$(PROG): $(PROG)
tests: cleanup_masquerade_test
+root_tests:
+
cleanup_masquerade_test: cleanup_masquerade cleanup_masq.ref
rm -f cleanup_masq.tmp
./cleanup_masquerade '' a.b.c,b.c xxx@aa.a.b.c >>cleanup_masq.tmp
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
tests: test dns_rr_to_pa_test dns_rr_to_sa_test dns_sa_to_rr_test \
dns_rr_eq_sa_test
+root_tests:
+
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
DNS_RR *rr;
int resource_found = 0;
int cname_found = 0;
- int not_found_status = DNS_RETRY; /* can't happen */
+ int not_found_status = DNS_NOTFOUND; /* can't happen */
int status;
/*
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
+tests:
+
+root_tests:
+
update: ../../libexec/fsstone
../../libexec/fsstone: fsstone
xtext_test scache_multi_test ehlo_mask_test \
namadr_list_test
+root_tests: rewrite_clnt_test resolve_clnt_test
+
tok822_test: tok822_parse tok822_parse.in tok822_parse.ref
./tok822_parse <tok822_parse.in >tok822_parse.tmp 2>&1
diff tok822_parse.ref tok822_parse.tmp
# Requires: Postfix running, root privileges
rewrite_clnt_test: rewrite_clnt rewrite_clnt.in rewrite_clnt.ref
+ @set -- `id`; case "$$1" in \
+ *"(root)") ;; \
+ *) echo 'This test requires root privilege'; exit 1;; \
+ esac
+ @test -n "`postconf -h remote_header_rewrite_domain`" || { \
+ echo 'This test requires non-empty remote_header_rewrite_domain'; exit 1; }
./rewrite_clnt <rewrite_clnt.in >rewrite_clnt.tmp
- sed "s/MYDOMAIN/`postconf -h mydomain`/" rewrite_clnt.ref | \
- diff - rewrite_clnt.tmp
+ sed -e "s/MYDOMAIN/`postconf -h mydomain`/" \
+ -e "s/INVALID_DOMAIN/`postconf -h remote_header_rewrite_domain`/" \
+ rewrite_clnt.ref | diff - rewrite_clnt.tmp
rm -f rewrite_clnt.tmp
# Requires: Postfix, root, relayhost=$mydomain, no transport map
resolve_clnt_test: resolve_clnt resolve_clnt.in resolve_clnt.ref
- test "`postconf -h relayhost`" = '$$mydomain' || { \
+ @set -- `id`; case "$$1" in \
+ *"(root)") ;; \
+ *) echo 'This test requires root privilege'; exit 1;; \
+ esac
+ @test "`postconf -h relayhost`" = '$$mydomain' || { \
echo 'This test requires relayhost=$$mydomain'; exit 1; }
- test "`postconf -h transport_maps`" = "" || { \
+ @test "`postconf -h transport_maps`" = "" || { \
echo 'This test requires no transport map'; exit 1; }
sed -e "s/MYDOMAIN/`postconf -h mydomain`/g" \
-e "s/MYHOSTNAME/`postconf -h myhostname`/g" \
#define DEF_MAX_QUEUE_TIME "5d"
extern int var_max_queue_time;
+ /*
+ * XXX The default can't be $maximal_queue_lifetime, because that panics
+ * when a non-default maximal_queue_lifetime setting contains no time unit.
+ */
#define VAR_DSN_QUEUE_TIME "bounce_queue_lifetime"
#define DEF_DSN_QUEUE_TIME "5d"
extern int var_dsn_queue_time;
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20060126"
+#define MAIL_RELEASE_DATE "20060201"
#define MAIL_VERSION_NUMBER "2.3"
#ifdef SNAPSHOT
};
struct RESOLVE_FLAG_TABLE *fp;
- resolve_clnt(class, addr, reply);
+ resolve_clnt(class, RESOLVE_NULL_FROM, addr, reply);
if (reply->flags & RESOLVE_FLAG_FAIL) {
vstream_printf("request failed\n");
} else {
class resolve
address
transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient MAILER-DAEMON@MYHOSTNAME
flags CLASS_LOCAL
class resolve
address @
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address @@
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address @a.
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient @a
flags CLASS_DEFAULT
class resolve
address !
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a!
transport smtp
-nexthop porcupine.org
-recipient @a.porcupine.org
+nexthop MYDOMAIN
+recipient @a.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address !b
-transport local
-nexthop tail.porcupine.org
-recipient b@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient b@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a!b
transport smtp
-nexthop porcupine.org
-recipient b@a.porcupine.org
+nexthop MYDOMAIN
+recipient b@a.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address !@
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a!@
transport smtp
-nexthop porcupine.org
-recipient @a.porcupine.org
+nexthop MYDOMAIN
+recipient @a.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address !b@
-transport local
-nexthop tail.porcupine.org
-recipient b@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient b@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a!b@
transport smtp
-nexthop porcupine.org
-recipient b@a.porcupine.org
+nexthop MYDOMAIN
+recipient b@a.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address %
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a%
-transport local
-nexthop tail.porcupine.org
-recipient a@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient a@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address %b
transport smtp
-nexthop porcupine.org
-recipient @b.porcupine.org
+nexthop MYDOMAIN
+recipient @b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address a%b
transport smtp
-nexthop porcupine.org
-recipient a@b.porcupine.org
+nexthop MYDOMAIN
+recipient a@b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address %@
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a%@
-transport local
-nexthop tail.porcupine.org
-recipient a@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient a@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address %b@
transport smtp
-nexthop porcupine.org
-recipient @b.porcupine.org
+nexthop MYDOMAIN
+recipient @b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address @@
-transport local
-nexthop tail.porcupine.org
-recipient MAILER-DAEMON@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient MAILER-DAEMON@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address a@@
-transport local
-nexthop tail.porcupine.org
-recipient a@tail.porcupine.org
-flags CLASS_LOCAL
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
+recipient a@
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address @b@
transport smtp
-nexthop porcupine.org
-recipient @b.porcupine.org
+nexthop MYDOMAIN
+recipient @b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address a@b@
transport smtp
-nexthop porcupine.org
-recipient a@b.porcupine.org
+nexthop MYDOMAIN
+recipient a@b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
address a%b@
transport smtp
-nexthop porcupine.org
-recipient a@b.porcupine.org
+nexthop MYDOMAIN
+recipient a@b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
-address a%b@tail.porcupine.org
+address a%b@MYHOSTNAME
transport smtp
-nexthop porcupine.org
-recipient a@b.porcupine.org
+nexthop MYDOMAIN
+recipient a@b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
-address a!b@tail.porcupine.org
+address a!b@MYHOSTNAME
transport smtp
-nexthop porcupine.org
-recipient b@a.porcupine.org
+nexthop MYDOMAIN
+recipient b@a.MYDOMAIN
flags CLASS_DEFAULT
class resolve
-address a@b@tail.porcupine.org
+address a@b@MYHOSTNAME
transport smtp
-nexthop porcupine.org
-recipient a@b.porcupine.org
+nexthop MYDOMAIN
+recipient a@b.MYDOMAIN
flags CLASS_DEFAULT
class resolve
-address a[b]@tail.porcupine.org@tail.porcupine.org
+address a[b]@MYHOSTNAME@MYHOSTNAME
transport local
-nexthop tail.porcupine.org
-recipient a[b]@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient a[b]@MYHOSTNAME
flags CLASS_LOCAL
class resolve
-address a[b]%tail.porcupine.org@tail.porcupine.org
+address a[b]%MYHOSTNAME@MYHOSTNAME
transport local
-nexthop tail.porcupine.org
-recipient a[b]@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient a[b]@MYHOSTNAME
flags CLASS_LOCAL
class resolve
-address a[b]%tail.porcupine.org%tail.porcupine.org
+address a[b]%MYHOSTNAME%MYHOSTNAME
transport local
-nexthop tail.porcupine.org
-recipient a[b]@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient a[b]@MYHOSTNAME
flags CLASS_LOCAL
class resolve
-address tail.porcupine.org!a[b]@tail.porcupine.org
+address MYHOSTNAME!a[b]@MYHOSTNAME
transport local
-nexthop tail.porcupine.org
-recipient a [b]@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient a [b]@MYHOSTNAME
flags CLASS_LOCAL
class resolve
-address tail.porcupine.org!a[b]%tail.porcupine.org
+address MYHOSTNAME!a[b]%MYHOSTNAME
transport local
-nexthop tail.porcupine.org
-recipient a [b]@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient a [b]@MYHOSTNAME
flags CLASS_LOCAL
class resolve
-address tail.porcupine.org!tail.porcupine.org!a[b]
+address MYHOSTNAME!MYHOSTNAME!a[b]
transport local
-nexthop tail.porcupine.org
-recipient a [b]@tail.porcupine.org
+nexthop MYHOSTNAME
+recipient a [b]@MYHOSTNAME
flags CLASS_LOCAL
class resolve
address user@dom.ain1@dom.ain2
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user@dom.ain1@dom.ain2
flags FLAG_ROUTED CLASS_DEFAULT
class resolve
address user%dom.ain1@dom.ain2
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user%dom.ain1@dom.ain2
flags FLAG_ROUTED CLASS_DEFAULT
class resolve
address dom.ain1!user@dom.ain2
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient dom.ain1!user@dom.ain2
flags FLAG_ROUTED CLASS_DEFAULT
class resolve
address user@[1.2.3.4]@dom.ain2
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user@[1.2.3.4]@dom.ain2
flags FLAG_ROUTED CLASS_DEFAULT
class resolve
address user%[1.2.3.4]@dom.ain2
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user%[1.2.3.4]@dom.ain2
flags FLAG_ROUTED CLASS_DEFAULT
class resolve
address [1.2.3.4]!user@dom.ain2
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient [1.2.3.4]!user@dom.ain2
flags FLAG_ROUTED CLASS_DEFAULT
class resolve
-address user@localhost.porcupine.org
+address user@localhost.MYDOMAIN
transport local
-nexthop tail.porcupine.org
-recipient user@localhost.porcupine.org
+nexthop MYHOSTNAME
+recipient user@localhost.MYDOMAIN
flags CLASS_LOCAL
class resolve
class resolve
address user@1.2.3
-transport smtp
-nexthop porcupine.org
+transport CHANNEL NOT UPDATED
+nexthop NEXTHOP NOT UPDATED
recipient user@1.2.3
-flags CLASS_DEFAULT
+flags FLAG_ERROR CLASS_DEFAULT
class resolve
address user@host:port
class resolve
address user@host
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user@host
flags CLASS_DEFAULT
class resolve
address user@host
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user@host
flags CLASS_DEFAULT
class verify
address user@host
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user@host
flags CLASS_DEFAULT
class verify
address user@host
transport smtp
-nexthop porcupine.org
+nexthop MYDOMAIN
recipient user@host
flags CLASS_DEFAULT
rule remote
address a!
-result ""@a.domain.invalid
+result ""@a.INVALID_DOMAIN
rule remote
address !b
rule remote
address a!b
-result b@a.domain.invalid
+result b@a.INVALID_DOMAIN
rule remote
address %
rule remote
address %b
-result ""@b.domain.invalid
+result ""@b.INVALID_DOMAIN
rule remote
address a%b
-result a@b.domain.invalid
+result a@b.INVALID_DOMAIN
rule remote
address @
rule remote
address a@b
-result a@b.domain.invalid
+result a@b.INVALID_DOMAIN
rule remote
address a@b.
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
$(LIB): $(LIB_OBJ)
$(AR) $(ARFL) $(LIB) $?
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/o$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
tests: test1 test2
+root_tests:
+
test1: $(PROG) map.in map-abc1.ref map-ghi1.ref map-uABC1.ref
./$(PROG) map.in
for key in abc ghi; \
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG) $(SAMPLES)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
tests: test1 test2
+root_tests:
+
test1: $(PROG) map.in map-abc1.ref map-ghi1.ref map-uABC1.ref
./$(PROG) map.in
for key in abc ghi; \
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/$(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
-tests: smtp_map11_test
+tests:
+
+root_tests: smtp_map11_test
update: ../../libexec/$(PROG)
/* RFC 1652 (8bit-MIME transport)
/* RFC 1870 (Message Size Declaration)
/* RFC 2033 (LMTP protocol)
+/* RFC 2034 (SMTP Enhanced Error Codes)
/* RFC 2045 (MIME: Format of Internet Message Bodies)
/* RFC 2046 (MIME: Media Types)
/* RFC 2554 (AUTH command)
/* RFC 2821 (SMTP protocol)
/* RFC 2920 (SMTP Pipelining)
/* RFC 3207 (STARTTLS command)
+/* RFC 3461 (SMTP DSN Extension)
/* RFC 3463 (Enhanced Status Codes)
/* DIAGNOSTICS
/* Problems and transactions are logged to \fBsyslogd\fR(8).
/* when TLS is not already enabled for that server.
/* .IP "\fBsmtp_tls_per_site (empty)\fR"
/* Optional lookup tables with the Postfix SMTP client TLS usage
-/* policy by next-hop domain name and by remote SMTP server hostname.
+/* policy by next-hop destination and by remote SMTP server hostname.
/* .IP "\fBsmtp_tls_scert_verifydepth (5)\fR"
/* The verification depth for remote SMTP server certificates.
/* .IP "\fBsmtp_tls_session_cache_database (empty)\fR"
} else {
msg_info("%s (port %d)", STR(why->reason), ntohs(port));
}
+ /* Insert: test if we must skip the remaining MX hosts. */
}
dns_rr_free(addr_list);
myfree(dest_buf);
tests: smtpd_check_test smtpd_check_test2 smtpd_acl_test smtpd_exp_test \
smtpd_token_test smtpd_check_test4 smtpd_check_dsn_test
+root_tests:
+
smtpd_check_test: smtpd_check smtpd_check.in smtpd_check.ref smtpd_check_access
../postmap/postmap hash:smtpd_check_access
./smtpd_check <smtpd_check.in >smtpd_check.tmp 2>&1
/* RFC 1869 (SMTP service extensions)
/* RFC 1870 (Message Size Declaration)
/* RFC 1985 (ETRN command)
+/* RFC 2034 (SMTP Enhanced Error Codes)
/* RFC 2554 (AUTH command)
/* RFC 2821 (SMTP protocol)
/* RFC 2920 (SMTP Pipelining)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../bin/smtp-source ../../bin/smtp-sink ../../bin/qmqp-source \
../../bin/qmqp-sink
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
+tests:
+
+root_tests:
+
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
tests:
+root_tests:
+
depend: $(MAKES)
(sed '1,/^# do not edit/!d' Makefile.in; \
set -e; for i in [a-z][a-z0-9]*.c; do \
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
$(BIN_DIR)/$(PROG): $(PROG)
cp $(PROG) $@
/*
* Append missing @origin
*/
- else if (var_append_at_myorigin != 0) {
+ else if (var_append_at_myorigin != 0
+ && context->origin[0][0] != 0) {
domain = tok822_sub_append(tree, tok822_alloc('@', (char *) 0));
tok822_sub_append(tree, tok822_scan(REW_PARAM_VALUE(context->origin),
(TOK822 **) 0));
* alone.
*/
if (var_append_dot_mydomain != 0
+ && context->domain[0][0] != 0
&& (domain = tok822_rfind_type(tree->tail, '@')) != 0
&& domain != tree->tail
&& tok822_find_type(domain, TOK822_DOMLIT) == 0
dict_cidr_test attr_scan_plain_test htable_test hex_code_test \
myaddrinfo_test format_tv_test
+root_tests:
+
valid_hostname_test: valid_hostname valid_hostname.in valid_hostname.ref
./valid_hostname <valid_hostname.in 2>valid_hostname.tmp
diff valid_hostname.ref valid_hostname.tmp
} control_un;
struct cmsghdr *cmptr;
- memset((char *) &msg, 0, sizeof(msg));
+ memset((char *) &msg, 0, sizeof(msg)); /* Fix 200512 */
msg.msg_control = control_un.control;
msg.msg_controllen = CMSG_LEN(sizeof(newfd)); /* Fix 200506 */
#else
} control_un;
struct cmsghdr *cmptr;
- memset((char *) &msg, 0, sizeof(msg));
+ memset((char *) &msg, 0, sizeof(msg)); /* Fix 200512 */
msg.msg_control = control_un.control;
msg.msg_controllen = CMSG_LEN(sizeof(sendfd)); /* Fix 200506 */
tests: test
+root_tests:
+
update: ../../libexec/$(PROG)
../../libexec/$(PROG): $(PROG)
test: $(TESTPROG)
-tests: test
+tests:
+
+root_tests:
update: ../../libexec/$(PROG)
test: $(TESTPROG)
+tests:
+
+root_tests:
+
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)