summaryrefslogtreecommitdiffstats
path: root/main/postfix/postfix-2.6.1-dynamicmaps.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/postfix/postfix-2.6.1-dynamicmaps.patch')
-rw-r--r--main/postfix/postfix-2.6.1-dynamicmaps.patch5273
1 files changed, 0 insertions, 5273 deletions
diff --git a/main/postfix/postfix-2.6.1-dynamicmaps.patch b/main/postfix/postfix-2.6.1-dynamicmaps.patch
deleted file mode 100644
index 630abedc..00000000
--- a/main/postfix/postfix-2.6.1-dynamicmaps.patch
+++ /dev/null
@@ -1,5273 +0,0 @@
-diff -ruN a/conf/postfix-files b/conf/postfix-files
---- a/conf/postfix-files 2009-06-01 12:27:42.000000000 +0000
-+++ b/conf/postfix-files 2009-06-01 13:08:26.000000000 +0000
-@@ -65,6 +65,10 @@
- $queue_directory/trace:d:$mail_owner:-:700:ucr
- $daemon_directory/anvil:f:root:-:755
- $daemon_directory/bounce:f:root:-:755
-+$daemon_directory/dict_ldap.so:f:root:-:755
-+$daemon_directory/dict_pcre.so:f:root:-:755
-+$daemon_directory/dict_mysql.so:f:root:-:755
-+$daemon_directory/dict_pgsql.so:f:root:-:755
- $daemon_directory/cleanup:f:root:-:755
- $daemon_directory/discard:f:root:-:755
- $daemon_directory/error:f:root:-:755
-@@ -94,6 +98,11 @@
- $daemon_directory/trivial-rewrite:f:root:-:755
- $daemon_directory/verify:f:root:-:755
- $daemon_directory/virtual:f:root:-:755
-+/usr/lib/libpostfix-dns.so.1:f:root:-:755
-+/usr/lib/libpostfix-global.so.1:f:root:-:755
-+/usr/lib/libpostfix-tls.so.1:f:root:-:755
-+/usr/lib/libpostfix-master.so.1:f:root:-:755
-+/usr/lib/libpostfix-util.so.1:f:root:-:755
- $daemon_directory/nqmgr:h:$daemon_directory/qmgr
- $daemon_directory/lmtp:h:$daemon_directory/smtp
- $command_directory/postalias:f:root:-:755
-@@ -117,6 +126,7 @@
- $config_directory/aliases:f:root:-:644:p1
- $config_directory/bounce.cf.default:f:root:-:644:1
- $config_directory/canonical:f:root:-:644:p1
-+$config_directory/dynamicmaps.cf:f:root:-:644:p
- $config_directory/cidr_table:f:root:-:644:o
- $config_directory/generic:f:root:-:644:p1
- $config_directory/generics:f:root:-:644:o
-diff -ruN a/src/dns/Makefile.in b/src/dns/Makefile.in
---- a/src/dns/Makefile.in 2009-06-01 12:27:43.000000000 +0000
-+++ b/src/dns/Makefile.in 2009-06-01 13:08:26.000000000 +0000
-@@ -14,7 +14,7 @@
- LIB_DIR = ../../lib
- INC_DIR = ../../include
-
--.c.o:; $(CC) $(CFLAGS) -c $*.c
-+.c.o:; $(CC) -fPIC $(CFLAGS) -c $*.c
-
- all: $(LIB)
-
-@@ -31,12 +31,10 @@
- root_tests:
-
- $(LIB): $(OBJS)
-- $(AR) $(ARFL) $(LIB) $?
-- $(RANLIB) $(LIB)
-+ gcc -shared -Wl,-soname,libpostfix-dns.so.1 -o $(LIB) $(OBJS) $(LIBS) $(SYSLIBS)
-
- $(LIB_DIR)/$(LIB): $(LIB)
- cp $(LIB) $(LIB_DIR)
-- $(RANLIB) $(LIB_DIR)/$(LIB)
-
- update: $(LIB_DIR)/$(LIB) $(HDRS)
- -for i in $(HDRS); \
-diff -ruN a/src/global/Makefile.in b/src/global/Makefile.in
---- a/src/global/Makefile.in 2009-06-01 12:27:43.000000000 +0000
-+++ b/src/global/Makefile.in 2009-06-01 13:08:26.000000000 +0000
-@@ -34,7 +34,7 @@
- canon_addr.o cfg_parser.o cleanup_strerror.o cleanup_strflags.o \
- clnt_stream.o conv_time.o db_common.o debug_peer.o debug_process.o \
- defer.o deliver_completed.o deliver_flock.o deliver_pass.o \
-- deliver_request.o dict_ldap.o dict_mysql.o dict_pgsql.o \
-+ deliver_request.o \
- dict_proxy.o domain_list.o dot_lockfile.o dot_lockfile_as.o \
- dsb_scan.o dsn.o dsn_buf.o dsn_mask.o dsn_print.o dsn_util.o \
- ehlo_mask.o ext_prop.o file_id.o flush_clnt.o header_opts.o \
-@@ -103,10 +103,13 @@
- LIB_DIR = ../../lib
- INC_DIR = ../../include
- MAKES =
-+LDAPSO = dict_ldap.so
-+MYSQLSO = dict_mysql.so
-+PGSQLSO = dict_pgsql.so
-
--.c.o:; $(CC) $(CFLAGS) -c $*.c
-+.c.o:; $(CC) -fPIC $(CFLAGS) -c $*.c
-
--all: $(LIB)
-+all: $(LIB) $(LDAPSO) $(MYSQLSO) $(PGSQLSO)
-
- $(OBJS): ../../conf/makedefs.out
-
-@@ -116,14 +119,30 @@
- test: $(TESTPROG)
-
- $(LIB): $(OBJS)
-- $(AR) $(ARFL) $(LIB) $?
-- $(RANLIB) $(LIB)
-+ gcc -shared -Wl,-soname,libpostfix-global.so.1 -o $(LIB) $(OBJS) $(LIBS) $(SYSLIBS)
-+
-+$(LDAPSO): dict_ldap.o $(LIB) ../../lib/libglobal.a
-+ gcc -shared -Wl,-soname,dict_ldap.so -o $@ $? -lldap -llber -L../../lib -lutil -L. -lglobal
-+
-+$(MYSQLSO): dict_mysql.o $(LIB) ../../lib/libglobal.a
-+ gcc -shared -Wl,-soname,dict_mysql.so -o $@ $? -lmysqlclient -L. -lutil -lglobal
-+
-+$(PGSQLSO): dict_pgsql.o $(LIB) ../../lib/libglobal.a
-+ gcc -shared -Wl,-soname,dict_pgsql.so -o $@ $? -lpq -L. -lutil -lglobal
-
- $(LIB_DIR)/$(LIB): $(LIB)
- cp $(LIB) $(LIB_DIR)
-- $(RANLIB) $(LIB_DIR)/$(LIB)
-
--update: $(LIB_DIR)/$(LIB) $(HDRS)
-+../../libexec/$(LDAPSO): $(LDAPSO)
-+ cp $(LDAPSO) ../../libexec
-+
-+../../libexec/$(MYSQLSO): $(MYSQLSO)
-+ cp $(MYSQLSO) ../../libexec
-+
-+../../libexec/$(PGSQLSO): $(PGSQLSO)
-+ cp $(PGSQLSO) ../../libexec
-+
-+update: $(LIB_DIR)/$(LIB) ../../libexec/$(LDAPSO) ../../libexec/$(MYSQLSO) ../../libexec/$(PGSQLSO) $(HDRS)
- -for i in $(HDRS); \
- do \
- cmp -s $$i $(INC_DIR)/$$i 2>/dev/null || cp $$i $(INC_DIR); \
-@@ -491,7 +510,7 @@
- lint $(DEFS) $(SRCS) $(LINTFIX)
-
- clean:
-- rm -f *.o $(LIB) *core $(TESTPROG) junk
-+ rm -f *.o $(LIB) $(LDAPSO) $(MYSQLSO) $(PGSQLSO) *core $(TESTPROG) junk
- rm -rf printfck
-
- tidy: clean
-diff -ruN a/src/global/Makefile.in.orig b/src/global/Makefile.in.orig
---- a/src/global/Makefile.in.orig 1970-01-01 00:00:00.000000000 +0000
-+++ b/src/global/Makefile.in.orig 2009-06-01 13:07:56.000000000 +0000
-@@ -0,0 +1,2018 @@
-+SHELL = /bin/sh
-+SRCS = abounce.c anvil_clnt.c been_here.c bounce.c bounce_log.c \
-+ canon_addr.c cfg_parser.c cleanup_strerror.c cleanup_strflags.c \
-+ clnt_stream.c conv_time.c db_common.c debug_peer.c debug_process.c \
-+ defer.c deliver_completed.c deliver_flock.c deliver_pass.c \
-+ deliver_request.c dict_ldap.c dict_mysql.c dict_pgsql.c \
-+ dict_proxy.c domain_list.c dot_lockfile.c dot_lockfile_as.c \
-+ dsb_scan.c dsn.c dsn_buf.c dsn_mask.c dsn_print.c dsn_util.c \
-+ ehlo_mask.c ext_prop.c file_id.c flush_clnt.c header_opts.c \
-+ header_token.c input_transp.c int_filt.c is_header.c log_adhoc.c \
-+ mail_addr.c mail_addr_crunch.c mail_addr_find.c mail_addr_map.c \
-+ mail_command_client.c mail_command_server.c mail_conf.c \
-+ mail_conf_bool.c mail_conf_int.c mail_conf_long.c mail_conf_raw.c \
-+ mail_conf_str.c mail_conf_time.c mail_connect.c mail_copy.c \
-+ mail_date.c mail_dict.c mail_error.c mail_flush.c mail_open_ok.c \
-+ mail_params.c mail_pathname.c mail_queue.c mail_run.c \
-+ mail_scan_dir.c mail_stream.c mail_task.c mail_trigger.c maps.c \
-+ mark_corrupt.c match_parent_style.c mbox_conf.c mbox_open.c \
-+ mime_state.c mkmap_cdb.c mkmap_db.c mkmap_dbm.c mkmap_open.c \
-+ mkmap_sdbm.c msg_stats_print.c msg_stats_scan.c mynetworks.c \
-+ mypwd.c namadr_list.c off_cvt.c opened.c own_inet_addr.c \
-+ pipe_command.c post_mail.c quote_821_local.c quote_822_local.c \
-+ rcpt_buf.c rcpt_print.c rec_attr_map.c rec_streamlf.c rec_type.c \
-+ recipient_list.c record.c remove.c resolve_clnt.c resolve_local.c \
-+ rewrite_clnt.c scache_clnt.c scache_multi.c scache_single.c \
-+ sent.c smtp_stream.c split_addr.c string_list.c strip_addr.c \
-+ sys_exits.c timed_ipc.c tok822_find.c tok822_node.c tok822_parse.c \
-+ tok822_resolve.c tok822_rewrite.c tok822_tree.c trace.c \
-+ user_acl.c valid_mailhost_addr.c verify.c verify_clnt.c \
-+ verp_sender.c wildcard_inet_addr.c xtext.c delivered_hdr.c \
-+ fold_addr.c header_body_checks.c mkmap_proxy.c data_redirect.c \
-+ match_service.c mail_conf_nint.c
-+OBJS = abounce.o anvil_clnt.o been_here.o bounce.o bounce_log.o \
-+ canon_addr.o cfg_parser.o cleanup_strerror.o cleanup_strflags.o \
-+ clnt_stream.o conv_time.o db_common.o debug_peer.o debug_process.o \
-+ defer.o deliver_completed.o deliver_flock.o deliver_pass.o \
-+ deliver_request.o dict_ldap.o dict_mysql.o dict_pgsql.o \
-+ dict_proxy.o domain_list.o dot_lockfile.o dot_lockfile_as.o \
-+ dsb_scan.o dsn.o dsn_buf.o dsn_mask.o dsn_print.o dsn_util.o \
-+ ehlo_mask.o ext_prop.o file_id.o flush_clnt.o header_opts.o \
-+ header_token.o input_transp.o int_filt.o is_header.o log_adhoc.o \
-+ mail_addr.o mail_addr_crunch.o mail_addr_find.o mail_addr_map.o \
-+ mail_command_client.o mail_command_server.o mail_conf.o \
-+ mail_conf_bool.o mail_conf_int.o mail_conf_long.o mail_conf_raw.o \
-+ mail_conf_str.o mail_conf_time.o mail_connect.o mail_copy.o \
-+ mail_date.o mail_dict.o mail_error.o mail_flush.o mail_open_ok.o \
-+ mail_params.o mail_pathname.o mail_queue.o mail_run.o \
-+ mail_scan_dir.o mail_stream.o mail_task.o mail_trigger.o maps.o \
-+ mark_corrupt.o match_parent_style.o mbox_conf.o mbox_open.o \
-+ mime_state.o mkmap_cdb.o mkmap_db.o mkmap_dbm.o mkmap_open.o \
-+ mkmap_sdbm.o msg_stats_print.o msg_stats_scan.o mynetworks.o \
-+ mypwd.o namadr_list.o off_cvt.o opened.o own_inet_addr.o \
-+ pipe_command.o post_mail.o quote_821_local.o quote_822_local.o \
-+ rcpt_buf.o rcpt_print.o rec_attr_map.o rec_streamlf.o rec_type.o \
-+ recipient_list.o record.o remove.o resolve_clnt.o resolve_local.o \
-+ rewrite_clnt.o scache_clnt.o scache_multi.o scache_single.o \
-+ sent.o smtp_stream.o split_addr.o string_list.o strip_addr.o \
-+ sys_exits.o timed_ipc.o tok822_find.o tok822_node.o tok822_parse.o \
-+ tok822_resolve.o tok822_rewrite.o tok822_tree.o trace.o \
-+ user_acl.o valid_mailhost_addr.o verify.o verify_clnt.o \
-+ verp_sender.o wildcard_inet_addr.o xtext.o delivered_hdr.o \
-+ fold_addr.o header_body_checks.o mkmap_proxy.o data_redirect.o \
-+ match_service.o mail_conf_nint.o
-+HDRS = abounce.h anvil_clnt.h been_here.h bounce.h bounce_log.h \
-+ canon_addr.h cfg_parser.h cleanup_user.h clnt_stream.h config.h \
-+ conv_time.h db_common.h debug_peer.h debug_process.h defer.h \
-+ deliver_completed.h deliver_flock.h deliver_pass.h deliver_request.h \
-+ dict_ldap.h dict_mysql.h dict_pgsql.h dict_proxy.h domain_list.h \
-+ dot_lockfile.h dot_lockfile_as.h dsb_scan.h dsn.h dsn_buf.h \
-+ dsn_mask.h dsn_print.h dsn_util.h ehlo_mask.h ext_prop.h \
-+ file_id.h flush_clnt.h header_opts.h header_token.h input_transp.h \
-+ int_filt.h is_header.h lex_822.h log_adhoc.h mail_addr.h \
-+ mail_addr_crunch.h mail_addr_find.h mail_addr_map.h mail_conf.h \
-+ mail_copy.h mail_date.h mail_dict.h mail_error.h mail_flush.h \
-+ mail_open_ok.h mail_params.h mail_proto.h mail_queue.h mail_run.h \
-+ mail_scan_dir.h mail_stream.h mail_task.h mail_version.h maps.h \
-+ mark_corrupt.h match_parent_style.h mbox_conf.h mbox_open.h \
-+ mime_state.h mkmap.h msg_stats.h mynetworks.h mypwd.h namadr_list.h \
-+ off_cvt.h opened.h own_inet_addr.h pipe_command.h post_mail.h \
-+ qmgr_user.h qmqp_proto.h quote_821_local.h quote_822_local.h \
-+ quote_flags.h rcpt_buf.h rcpt_print.h rec_attr_map.h rec_streamlf.h \
-+ rec_type.h recipient_list.h record.h resolve_clnt.h resolve_local.h \
-+ rewrite_clnt.h scache.h sent.h smtp_stream.h split_addr.h \
-+ string_list.h strip_addr.h sys_exits.h timed_ipc.h tok822.h \
-+ trace.h user_acl.h valid_mailhost_addr.h verify.h verify_clnt.h \
-+ verp_sender.h wildcard_inet_addr.h xtext.h delivered_hdr.h \
-+ fold_addr.h header_body_checks.h data_redirect.h match_service.h
-+TESTSRC = rec2stream.c stream2rec.c recdump.c
-+DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE)
-+CFLAGS = $(DEBUG) $(OPT) $(DEFS)
-+INCL =
-+LIB = libglobal.a
-+TESTPROG= domain_list dot_lockfile mail_addr_crunch mail_addr_find \
-+ mail_addr_map mail_date maps mynetworks mypwd namadr_list \
-+ off_cvt quote_822_local rec2stream recdump resolve_clnt \
-+ resolve_local rewrite_clnt stream2rec string_list tok822_parse \
-+ quote_821_local mail_conf_time mime_state strip_addr \
-+ verify_clnt xtext anvil_clnt scache ehlo_mask \
-+ valid_mailhost_addr own_inet_addr header_body_checks \
-+ data_redirect
-+
-+LIBS = ../../lib/libutil.a
-+LIB_DIR = ../../lib
-+INC_DIR = ../../include
-+MAKES =
-+
-+.c.o:; $(CC) $(CFLAGS) -c $*.c
-+
-+all: $(LIB)
-+
-+$(OBJS): ../../conf/makedefs.out
-+
-+Makefile: Makefile.in
-+ cat ../../conf/makedefs.out $? >$@
-+
-+test: $(TESTPROG)
-+
-+$(LIB): $(OBJS)
-+ $(AR) $(ARFL) $(LIB) $?
-+ $(RANLIB) $(LIB)
-+
-+$(LIB_DIR)/$(LIB): $(LIB)
-+ cp $(LIB) $(LIB_DIR)
-+ $(RANLIB) $(LIB_DIR)/$(LIB)
-+
-+update: $(LIB_DIR)/$(LIB) $(HDRS)
-+ -for i in $(HDRS); \
-+ do \
-+ cmp -s $$i $(INC_DIR)/$$i 2>/dev/null || cp $$i $(INC_DIR); \
-+ done
-+ cd $(INC_DIR); chmod 644 $(HDRS)
-+
-+dot_lockfile: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) -DTEST $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+tok822_parse: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) -DTEST $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+rec2stream: rec2stream.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+stream2rec: stream2rec.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+recdump: recdump.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+namadr_list: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+domain_list: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mynetworks: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+resolve_clnt: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+rewrite_clnt: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+quote_822_local: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+off_cvt: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mail_addr_map: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mail_addr_find: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+maps: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mypwd: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mail_date: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+resolve_local: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mail_addr_crunch: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+string_list: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+local_transport: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+quote_821_local: quote_821_local.c $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIBS) $(SYSLIBS)
-+
-+mail_conf_time: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) -DTEST $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+mime_state: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) -DTEST $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+strip_addr: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) -DTEST $(CFLAGS) -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+verify_clnt: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+xtext: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+anvil_clnt: $(LIB) $(LIBS)
-+ mv $@.o junk
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+ mv junk $@.o
-+
-+scache: scache.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+ehlo_mask: ehlo_mask.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+valid_mailhost_addr: valid_mailhost_addr.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+own_inet_addr: own_inet_addr.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+header_body_checks: header_body_checks.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+data_redirect: data_redirect.c $(LIB) $(LIBS)
-+ $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(LIBS) $(SYSLIBS)
-+
-+tests: tok822_test mime_tests strip_addr_test tok822_limit_test \
-+ xtext_test scache_multi_test ehlo_mask_test \
-+ namadr_list_test mail_conf_time_test header_body_checks_tests
-+
-+mime_tests: mime_test mime_nest mime_8bit mime_dom mime_trunc mime_cvt \
-+ mime_cvt2 mime_cvt3 mime_garb1 mime_garb2 mime_garb3 mime_garb4
-+
-+header_body_checks_tests: header_body_checks_null_test \
-+ header_body_checks_warn_test header_body_checks_prepend_test \
-+ header_body_checks_ignore_test header_body_checks_replace_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
-+ rm -f tok822_parse.tmp
-+
-+mime_test: mime_state mime_test.in mime_test.ref
-+ ./mime_state <mime_test.in >mime_test.tmp
-+ diff mime_test.ref mime_test.tmp
-+ rm -f mime_test.tmp
-+
-+mime_nest: mime_state mime_nest.in mime_nest.ref
-+ ./mime_state <mime_nest.in >mime_nest.tmp
-+ diff mime_nest.ref mime_nest.tmp
-+ rm -f mime_nest.tmp
-+
-+mime_8bit: mime_state mime_8bit.in mime_8bit.ref
-+ ./mime_state <mime_8bit.in >mime_8bit.tmp
-+ diff mime_8bit.ref mime_8bit.tmp
-+ rm -f mime_8bit.tmp
-+
-+mime_dom: mime_state mime_dom.in mime_dom.ref
-+ ./mime_state <mime_dom.in >mime_dom.tmp
-+ diff mime_dom.ref mime_dom.tmp
-+ rm -f mime_dom.tmp
-+
-+mime_trunc: mime_state mime_trunc.in mime_trunc.ref
-+ ./mime_state <mime_trunc.in >mime_trunc.tmp
-+ diff mime_trunc.ref mime_trunc.tmp
-+ rm -f mime_trunc.tmp
-+
-+mime_cvt: mime_state mime_cvt.in mime_cvt.ref
-+ ./mime_state <mime_cvt.in >mime_cvt.tmp
-+ diff mime_cvt.ref mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+mime_cvt2: mime_state mime_cvt.in2 mime_cvt.ref2
-+ ./mime_state <mime_cvt.in2 >mime_cvt.tmp
-+ diff mime_cvt.ref2 mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+mime_cvt3: mime_state mime_cvt.in3 mime_cvt.ref3
-+ ./mime_state <mime_cvt.in3 >mime_cvt.tmp
-+ diff mime_cvt.ref3 mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+mime_garb1: mime_state mime_garb1.in mime_garb1.ref
-+ ./mime_state <mime_garb1.in >mime_cvt.tmp
-+ diff mime_garb1.ref mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+mime_garb2: mime_state mime_garb2.in mime_garb2.ref
-+ ./mime_state <mime_garb2.in >mime_cvt.tmp
-+ diff mime_garb2.ref mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+mime_garb3: mime_state mime_garb3.in mime_garb3.ref
-+ ./mime_state <mime_garb3.in >mime_cvt.tmp
-+ diff mime_garb3.ref mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+mime_garb4: mime_state mime_garb4.in mime_garb4.ref
-+ ./mime_state <mime_garb4.in >mime_cvt.tmp
-+ diff mime_garb4.ref mime_cvt.tmp
-+ rm -f mime_cvt.tmp
-+
-+tok822_limit_test: tok822_parse tok822_limit.in tok822_limit.ref
-+ ./tok822_parse <tok822_limit.in >tok822_limit.tmp
-+ diff tok822_limit.ref tok822_limit.tmp
-+ rm -f tok822_limit.tmp
-+
-+strip_addr_test: strip_addr strip_addr.ref
-+ ./strip_addr 2>strip_addr.tmp
-+ diff strip_addr.ref strip_addr.tmp
-+ rm -f strip_addr.tmp
-+
-+xtext_test: xtext
-+ ./xtext <xtext.c | od -cb >xtext.tmp
-+ od -cb <xtext.c >xtext.ref
-+ cmp xtext.ref xtext.tmp
-+ rm -f xtext.ref xtext.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 -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
-+ @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`" = "" || { \
-+ echo 'This test requires no transport map'; exit 1; }
-+ sed -e "s/MYDOMAIN/`postconf -h mydomain`/g" \
-+ -e "s/MYHOSTNAME/`postconf -h myhostname`/g" \
-+ resolve_clnt.in | ./resolve_clnt >resolve_clnt.tmp
-+ sed -e "s/MYDOMAIN/`postconf -h mydomain`/g" \
-+ -e "s/MYHOSTNAME/`postconf -h myhostname`/g" \
-+ -e "s/RELAYHOST/`postconf -h mydomain`/g" \
-+ resolve_clnt.ref | diff - resolve_clnt.tmp
-+ rm -f resolve_clnt.tmp
-+
-+scache_multi_test: scache scache_multi.in scache_multi.ref
-+ ./scache <scache_multi.in >scache_multi.tmp
-+ diff scache_multi.ref scache_multi.tmp
-+ rm -f scache_multi.tmp
-+
-+ehlo_mask_test: ehlo_mask ehlo_mask.in ehlo_mask.ref
-+ ./ehlo_mask <ehlo_mask.in >ehlo_mask.tmp
-+ diff ehlo_mask.ref ehlo_mask.tmp
-+ rm -f ehlo_mask.tmp
-+
-+namadr_list_test: namadr_list namadr_list.in namadr_list.ref
-+ -sh namadr_list.in >namadr_list.tmp 2>&1
-+ diff namadr_list.ref namadr_list.tmp
-+ rm -f namadr_list.tmp
-+
-+mail_conf_time_test: mail_conf_time mail_conf_time.ref
-+ ./mail_conf_time >mail_conf_time.tmp
-+ diff mail_conf_time.ref mail_conf_time.tmp
-+ rm -f mail_conf_time.tmp
-+
-+header_body_checks_null_test: header_body_checks header_body_checks_null.ref
-+ ./header_body_checks "" "" "" "" \
-+ <mime_test.in >header_body_checks_null.tmp 2>&1
-+ cmp header_body_checks_null.ref header_body_checks_null.tmp
-+ ./header_body_checks static:dunno static:dunno static:dunno static:dunno \
-+ <mime_test.in >header_body_checks_null.tmp 2>&1
-+ cmp header_body_checks_null.ref header_body_checks_null.tmp
-+ ./header_body_checks static:ok static:ok static:ok static:ok \
-+ <mime_test.in >header_body_checks_null.tmp 2>&1
-+ cmp header_body_checks_null.ref header_body_checks_null.tmp
-+ rm -f header_body_checks_null.tmp
-+
-+header_body_checks_warn_test: header_body_checks header_body_checks_warn.ref
-+ ./header_body_checks static:warn static:warn static:warn static:warn \
-+ <mime_test.in >header_body_checks_warn.tmp 2>&1
-+ cmp header_body_checks_warn.ref header_body_checks_warn.tmp
-+ rm -f header_body_checks_warn.tmp
-+
-+header_body_checks_prepend_test: header_body_checks header_body_checks_prepend.ref
-+ echo /./ prepend header: head >header_body_checks_head
-+ echo /./ prepend header: mime >header_body_checks_mime
-+ echo /./ prepend header: nest >header_body_checks_nest
-+ echo /./ prepend body >header_body_checks_body
-+ ./header_body_checks regexp:header_body_checks_head regexp:header_body_checks_mime \
-+ regexp:header_body_checks_nest regexp:header_body_checks_body \
-+ <mime_test.in >header_body_checks_prepend.tmp 2>&1
-+ cmp header_body_checks_prepend.ref header_body_checks_prepend.tmp
-+ rm -f header_body_checks_prepend.tmp header_body_checks_head header_body_checks_mime header_body_checks_nest header_body_checks_body
-+
-+# Note: the IGNORE action will not strip empty lines. Postfix maps
-+# currently never see null query strings because some map types raise
-+# errors. We can eliminate this restriction by allowing individual
-+# map types to advertise whether they can handle null queries.
-+header_body_checks_ignore_test: header_body_checks header_body_checks_ignore.ref
-+ ./header_body_checks static:ignore static:ignore static:ignore static:ignore \
-+ <mime_test.in >header_body_checks_ignore.tmp 2>&1
-+ cmp header_body_checks_ignore.ref header_body_checks_ignore.tmp
-+ rm -f header_body_checks_ignore.tmp header_body_checks_head header_body_checks_mime header_body_checks_nest header_body_checks_body
-+
-+header_body_checks_replace_test: header_body_checks header_body_checks_replace.ref
-+ echo /./ replace header: head >header_body_checks_head
-+ echo /./ replace header: mime >header_body_checks_mime
-+ echo /./ replace header: nest >header_body_checks_nest
-+ echo /./ replace body >header_body_checks_body
-+ ./header_body_checks regexp:header_body_checks_head regexp:header_body_checks_mime \
-+ regexp:header_body_checks_nest regexp:header_body_checks_body \
-+ <mime_test.in >header_body_checks_replace.tmp 2>&1
-+ cmp header_body_checks_replace.ref header_body_checks_replace.tmp
-+ rm -f header_body_checks_replace.tmp header_body_checks_head header_body_checks_mime header_body_checks_nest header_body_checks_body
-+
-+printfck: $(OBJS) $(PROG)
-+ rm -rf printfck
-+ mkdir printfck
-+ cp *.h printfck
-+ sed '1,/^# do not edit/!d' Makefile >printfck/Makefile
-+ set -e; for i in *.c; do printfck -f .printfck $$i >printfck/$$i; done
-+ cd printfck; make "INC_DIR=../../../include" `cd ..; ls *.o`
-+
-+lint:
-+ lint $(DEFS) $(SRCS) $(LINTFIX)
-+
-+clean:
-+ rm -f *.o $(LIB) *core $(TESTPROG) junk
-+ rm -rf printfck
-+
-+tidy: clean
-+
-+depend: $(MAKES)
-+ (sed '1,/^# do not edit/!d' Makefile.in; \
-+ set -e; for i in [a-z][a-z0-9]*.c; do \
-+ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \
-+ -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \
-+ -e 's/o: \.\//o: /' -e p -e '}' ; \
-+ done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in
-+ @$(EXPORT) make -f Makefile.in Makefile 1>&2
-+
-+# do not edit below this line - it is generated by 'make depend'
-+abounce.o: ../../include/attr.h
-+abounce.o: ../../include/events.h
-+abounce.o: ../../include/iostuff.h
-+abounce.o: ../../include/msg.h
-+abounce.o: ../../include/mymalloc.h
-+abounce.o: ../../include/sys_defs.h
-+abounce.o: ../../include/vbuf.h
-+abounce.o: ../../include/vstream.h
-+abounce.o: ../../include/vstring.h
-+abounce.o: abounce.c
-+abounce.o: abounce.h
-+abounce.o: bounce.h
-+abounce.o: deliver_request.h
-+abounce.o: dsn.h
-+abounce.o: dsn_buf.h
-+abounce.o: mail_params.h
-+abounce.o: mail_proto.h
-+abounce.o: msg_stats.h
-+abounce.o: recipient_list.h
-+anvil_clnt.o: ../../include/attr.h
-+anvil_clnt.o: ../../include/attr_clnt.h
-+anvil_clnt.o: ../../include/iostuff.h
-+anvil_clnt.o: ../../include/msg.h
-+anvil_clnt.o: ../../include/mymalloc.h
-+anvil_clnt.o: ../../include/stringops.h
-+anvil_clnt.o: ../../include/sys_defs.h
-+anvil_clnt.o: ../../include/vbuf.h
-+anvil_clnt.o: ../../include/vstream.h
-+anvil_clnt.o: ../../include/vstring.h
-+anvil_clnt.o: anvil_clnt.c
-+anvil_clnt.o: anvil_clnt.h
-+anvil_clnt.o: mail_params.h
-+anvil_clnt.o: mail_proto.h
-+been_here.o: ../../include/htable.h
-+been_here.o: ../../include/msg.h
-+been_here.o: ../../include/mymalloc.h
-+been_here.o: ../../include/stringops.h
-+been_here.o: ../../include/sys_defs.h
-+been_here.o: ../../include/vbuf.h
-+been_here.o: ../../include/vstring.h
-+been_here.o: been_here.c
-+been_here.o: been_here.h
-+bounce.o: ../../include/attr.h
-+bounce.o: ../../include/iostuff.h
-+bounce.o: ../../include/msg.h
-+bounce.o: ../../include/mymalloc.h
-+bounce.o: ../../include/sys_defs.h
-+bounce.o: ../../include/vbuf.h
-+bounce.o: ../../include/vstream.h
-+bounce.o: ../../include/vstring.h
-+bounce.o: bounce.c
-+bounce.o: bounce.h
-+bounce.o: defer.h
-+bounce.o: deliver_request.h
-+bounce.o: dsn.h
-+bounce.o: dsn_buf.h
-+bounce.o: dsn_print.h
-+bounce.o: dsn_util.h
-+bounce.o: log_adhoc.h
-+bounce.o: mail_params.h
-+bounce.o: mail_proto.h
-+bounce.o: msg_stats.h
-+bounce.o: rcpt_print.h
-+bounce.o: recipient_list.h
-+bounce.o: trace.h
-+bounce.o: verify.h
-+bounce_log.o: ../../include/attr.h
-+bounce_log.o: ../../include/iostuff.h
-+bounce_log.o: ../../include/msg.h
-+bounce_log.o: ../../include/mymalloc.h
-+bounce_log.o: ../../include/stringops.h
-+bounce_log.o: ../../include/sys_defs.h
-+bounce_log.o: ../../include/vbuf.h
-+bounce_log.o: ../../include/vstream.h
-+bounce_log.o: ../../include/vstring.h
-+bounce_log.o: ../../include/vstring_vstream.h
-+bounce_log.o: bounce_log.c
-+bounce_log.o: bounce_log.h
-+bounce_log.o: dsn.h
-+bounce_log.o: dsn_buf.h
-+bounce_log.o: dsn_mask.h
-+bounce_log.o: mail_params.h
-+bounce_log.o: mail_proto.h
-+bounce_log.o: mail_queue.h
-+bounce_log.o: rcpt_buf.h
-+bounce_log.o: recipient_list.h
-+canon_addr.o: ../../include/attr.h
-+canon_addr.o: ../../include/iostuff.h
-+canon_addr.o: ../../include/mymalloc.h
-+canon_addr.o: ../../include/sys_defs.h
-+canon_addr.o: ../../include/vbuf.h
-+canon_addr.o: ../../include/vstream.h
-+canon_addr.o: ../../include/vstring.h
-+canon_addr.o: canon_addr.c
-+canon_addr.o: canon_addr.h
-+canon_addr.o: mail_proto.h
-+canon_addr.o: rewrite_clnt.h
-+cfg_parser.o: ../../include/argv.h
-+cfg_parser.o: ../../include/dict.h
-+cfg_parser.o: ../../include/msg.h
-+cfg_parser.o: ../../include/mymalloc.h
-+cfg_parser.o: ../../include/sys_defs.h
-+cfg_parser.o: ../../include/vbuf.h
-+cfg_parser.o: ../../include/vstream.h
-+cfg_parser.o: ../../include/vstring.h
-+cfg_parser.o: cfg_parser.c
-+cfg_parser.o: cfg_parser.h
-+cfg_parser.o: mail_conf.h
-+cleanup_strerror.o: ../../include/msg.h
-+cleanup_strerror.o: ../../include/sys_defs.h
-+cleanup_strerror.o: ../../include/vbuf.h
-+cleanup_strerror.o: ../../include/vstring.h
-+cleanup_strerror.o: cleanup_strerror.c
-+cleanup_strerror.o: cleanup_user.h
-+cleanup_strflags.o: ../../include/msg.h
-+cleanup_strflags.o: ../../include/sys_defs.h
-+cleanup_strflags.o: ../../include/vbuf.h
-+cleanup_strflags.o: ../../include/vstring.h
-+cleanup_strflags.o: cleanup_strflags.c
-+cleanup_strflags.o: cleanup_user.h
-+clnt_stream.o: ../../include/attr.h
-+clnt_stream.o: ../../include/events.h
-+clnt_stream.o: ../../include/iostuff.h
-+clnt_stream.o: ../../include/msg.h
-+clnt_stream.o: ../../include/mymalloc.h
-+clnt_stream.o: ../../include/sys_defs.h
-+clnt_stream.o: ../../include/vbuf.h
-+clnt_stream.o: ../../include/vstream.h
-+clnt_stream.o: clnt_stream.c
-+clnt_stream.o: clnt_stream.h
-+clnt_stream.o: mail_params.h
-+clnt_stream.o: mail_proto.h
-+conv_time.o: ../../include/msg.h
-+conv_time.o: ../../include/sys_defs.h
-+conv_time.o: conv_time.c
-+conv_time.o: conv_time.h
-+data_redirect.o: ../../include/argv.h
-+data_redirect.o: ../../include/dict.h
-+data_redirect.o: ../../include/dict_cdb.h
-+data_redirect.o: ../../include/dict_db.h
-+data_redirect.o: ../../include/dict_dbm.h
-+data_redirect.o: ../../include/msg.h
-+data_redirect.o: ../../include/name_code.h
-+data_redirect.o: ../../include/split_at.h
-+data_redirect.o: ../../include/stringops.h
-+data_redirect.o: ../../include/sys_defs.h
-+data_redirect.o: ../../include/vbuf.h
-+data_redirect.o: ../../include/vstream.h
-+data_redirect.o: ../../include/vstring.h
-+data_redirect.o: data_redirect.c
-+data_redirect.o: data_redirect.h
-+data_redirect.o: dict_proxy.h
-+data_redirect.o: mail_params.h
-+db_common.o: ../../include/argv.h
-+db_common.o: ../../include/dict.h
-+db_common.o: ../../include/match_list.h
-+db_common.o: ../../include/match_ops.h
-+db_common.o: ../../include/msg.h
-+db_common.o: ../../include/mymalloc.h
-+db_common.o: ../../include/sys_defs.h
-+db_common.o: ../../include/vbuf.h
-+db_common.o: ../../include/vstream.h
-+db_common.o: ../../include/vstring.h
-+db_common.o: cfg_parser.h
-+db_common.o: db_common.c
-+db_common.o: db_common.h
-+db_common.o: string_list.h
-+debug_peer.o: ../../include/match_list.h
-+debug_peer.o: ../../include/match_ops.h
-+debug_peer.o: ../../include/msg.h
-+debug_peer.o: ../../include/sys_defs.h
-+debug_peer.o: debug_peer.c
-+debug_peer.o: debug_peer.h
-+debug_peer.o: mail_params.h
-+debug_peer.o: match_parent_style.h
-+debug_peer.o: namadr_list.h
-+debug_process.o: ../../include/msg.h
-+debug_process.o: ../../include/sys_defs.h
-+debug_process.o: debug_process.c
-+debug_process.o: debug_process.h
-+debug_process.o: mail_conf.h
-+debug_process.o: mail_params.h
-+defer.o: ../../include/attr.h
-+defer.o: ../../include/iostuff.h
-+defer.o: ../../include/msg.h
-+defer.o: ../../include/sys_defs.h
-+defer.o: ../../include/vbuf.h
-+defer.o: ../../include/vstream.h
-+defer.o: ../../include/vstring.h
-+defer.o: bounce.h
-+defer.o: defer.c
-+defer.o: defer.h
-+defer.o: deliver_request.h
-+defer.o: dsn.h
-+defer.o: dsn_buf.h
-+defer.o: dsn_print.h
-+defer.o: dsn_util.h
-+defer.o: flush_clnt.h
-+defer.o: log_adhoc.h
-+defer.o: mail_params.h
-+defer.o: mail_proto.h
-+defer.o: mail_queue.h
-+defer.o: msg_stats.h
-+defer.o: rcpt_print.h
-+defer.o: recipient_list.h
-+defer.o: trace.h
-+defer.o: verify.h
-+deliver_completed.o: ../../include/msg.h
-+deliver_completed.o: ../../include/sys_defs.h
-+deliver_completed.o: ../../include/vbuf.h
-+deliver_completed.o: ../../include/vstream.h
-+deliver_completed.o: ../../include/vstring.h
-+deliver_completed.o: deliver_completed.c
-+deliver_completed.o: deliver_completed.h
-+deliver_completed.o: rec_type.h
-+deliver_completed.o: record.h
-+deliver_flock.o: ../../include/iostuff.h
-+deliver_flock.o: ../../include/myflock.h
-+deliver_flock.o: ../../include/sys_defs.h
-+deliver_flock.o: ../../include/vbuf.h
-+deliver_flock.o: ../../include/vstring.h
-+deliver_flock.o: deliver_flock.c
-+deliver_flock.o: deliver_flock.h
-+deliver_flock.o: mail_params.h
-+deliver_pass.o: ../../include/attr.h
-+deliver_pass.o: ../../include/iostuff.h
-+deliver_pass.o: ../../include/msg.h
-+deliver_pass.o: ../../include/mymalloc.h
-+deliver_pass.o: ../../include/split_at.h
-+deliver_pass.o: ../../include/sys_defs.h
-+deliver_pass.o: ../../include/vbuf.h
-+deliver_pass.o: ../../include/vstream.h
-+deliver_pass.o: ../../include/vstring.h
-+deliver_pass.o: bounce.h
-+deliver_pass.o: defer.h
-+deliver_pass.o: deliver_pass.c
-+deliver_pass.o: deliver_pass.h
-+deliver_pass.o: deliver_request.h
-+deliver_pass.o: dsb_scan.h
-+deliver_pass.o: dsn.h
-+deliver_pass.o: dsn_buf.h
-+deliver_pass.o: mail_params.h
-+deliver_pass.o: mail_proto.h
-+deliver_pass.o: msg_stats.h
-+deliver_pass.o: rcpt_print.h
-+deliver_pass.o: recipient_list.h
-+deliver_request.o: ../../include/attr.h
-+deliver_request.o: ../../include/iostuff.h
-+deliver_request.o: ../../include/msg.h
-+deliver_request.o: ../../include/myflock.h
-+deliver_request.o: ../../include/mymalloc.h
-+deliver_request.o: ../../include/sys_defs.h
-+deliver_request.o: ../../include/vbuf.h
-+deliver_request.o: ../../include/vstream.h
-+deliver_request.o: ../../include/vstring.h
-+deliver_request.o: deliver_request.c
-+deliver_request.o: deliver_request.h
-+deliver_request.o: dsn.h
-+deliver_request.o: dsn_print.h
-+deliver_request.o: mail_open_ok.h
-+deliver_request.o: mail_proto.h
-+deliver_request.o: mail_queue.h
-+deliver_request.o: msg_stats.h
-+deliver_request.o: rcpt_buf.h
-+deliver_request.o: recipient_list.h
-+delivered_hdr.o: ../../include/htable.h
-+delivered_hdr.o: ../../include/msg.h
-+delivered_hdr.o: ../../include/mymalloc.h
-+delivered_hdr.o: ../../include/stringops.h
-+delivered_hdr.o: ../../include/sys_defs.h
-+delivered_hdr.o: ../../include/vbuf.h
-+delivered_hdr.o: ../../include/vstream.h
-+delivered_hdr.o: ../../include/vstring.h
-+delivered_hdr.o: ../../include/vstring_vstream.h
-+delivered_hdr.o: delivered_hdr.c
-+delivered_hdr.o: delivered_hdr.h
-+delivered_hdr.o: fold_addr.h
-+delivered_hdr.o: header_opts.h
-+delivered_hdr.o: is_header.h
-+delivered_hdr.o: quote_822_local.h
-+delivered_hdr.o: quote_flags.h
-+delivered_hdr.o: rec_type.h
-+delivered_hdr.o: record.h
-+dict_ldap.o: ../../include/argv.h
-+dict_ldap.o: ../../include/binhash.h
-+dict_ldap.o: ../../include/dict.h
-+dict_ldap.o: ../../include/match_list.h
-+dict_ldap.o: ../../include/match_ops.h
-+dict_ldap.o: ../../include/msg.h
-+dict_ldap.o: ../../include/mymalloc.h
-+dict_ldap.o: ../../include/stringops.h
-+dict_ldap.o: ../../include/sys_defs.h
-+dict_ldap.o: ../../include/vbuf.h
-+dict_ldap.o: ../../include/vstream.h
-+dict_ldap.o: ../../include/vstring.h
-+dict_ldap.o: cfg_parser.h
-+dict_ldap.o: db_common.h
-+dict_ldap.o: dict_ldap.c
-+dict_ldap.o: dict_ldap.h
-+dict_ldap.o: string_list.h
-+dict_mysql.o: ../../include/argv.h
-+dict_mysql.o: ../../include/dict.h
-+dict_mysql.o: ../../include/events.h
-+dict_mysql.o: ../../include/find_inet.h
-+dict_mysql.o: ../../include/match_list.h
-+dict_mysql.o: ../../include/match_ops.h
-+dict_mysql.o: ../../include/msg.h
-+dict_mysql.o: ../../include/mymalloc.h
-+dict_mysql.o: ../../include/myrand.h
-+dict_mysql.o: ../../include/split_at.h
-+dict_mysql.o: ../../include/stringops.h
-+dict_mysql.o: ../../include/sys_defs.h
-+dict_mysql.o: ../../include/vbuf.h
-+dict_mysql.o: ../../include/vstream.h
-+dict_mysql.o: ../../include/vstring.h
-+dict_mysql.o: cfg_parser.h
-+dict_mysql.o: db_common.h
-+dict_mysql.o: dict_mysql.c
-+dict_mysql.o: dict_mysql.h
-+dict_mysql.o: string_list.h
-+dict_pgsql.o: ../../include/argv.h
-+dict_pgsql.o: ../../include/dict.h
-+dict_pgsql.o: ../../include/events.h
-+dict_pgsql.o: ../../include/find_inet.h
-+dict_pgsql.o: ../../include/match_list.h
-+dict_pgsql.o: ../../include/match_ops.h
-+dict_pgsql.o: ../../include/msg.h
-+dict_pgsql.o: ../../include/mymalloc.h
-+dict_pgsql.o: ../../include/myrand.h
-+dict_pgsql.o: ../../include/split_at.h
-+dict_pgsql.o: ../../include/stringops.h
-+dict_pgsql.o: ../../include/sys_defs.h
-+dict_pgsql.o: ../../include/vbuf.h
-+dict_pgsql.o: ../../include/vstream.h
-+dict_pgsql.o: ../../include/vstring.h
-+dict_pgsql.o: cfg_parser.h
-+dict_pgsql.o: db_common.h
-+dict_pgsql.o: dict_pgsql.c
-+dict_pgsql.o: dict_pgsql.h
-+dict_pgsql.o: string_list.h
-+dict_proxy.o: ../../include/argv.h
-+dict_proxy.o: ../../include/attr.h
-+dict_proxy.o: ../../include/dict.h
-+dict_proxy.o: ../../include/iostuff.h
-+dict_proxy.o: ../../include/msg.h
-+dict_proxy.o: ../../include/mymalloc.h
-+dict_proxy.o: ../../include/stringops.h
-+dict_proxy.o: ../../include/sys_defs.h
-+dict_proxy.o: ../../include/vbuf.h
-+dict_proxy.o: ../../include/vstream.h
-+dict_proxy.o: ../../include/vstring.h
-+dict_proxy.o: clnt_stream.h
-+dict_proxy.o: dict_proxy.c
-+dict_proxy.o: dict_proxy.h
-+dict_proxy.o: mail_params.h
-+dict_proxy.o: mail_proto.h
-+domain_list.o: ../../include/match_list.h
-+domain_list.o: ../../include/match_ops.h
-+domain_list.o: ../../include/sys_defs.h
-+domain_list.o: domain_list.c
-+domain_list.o: domain_list.h
-+dot_lockfile.o: ../../include/iostuff.h
-+dot_lockfile.o: ../../include/mymalloc.h
-+dot_lockfile.o: ../../include/stringops.h
-+dot_lockfile.o: ../../include/sys_defs.h
-+dot_lockfile.o: ../../include/vbuf.h
-+dot_lockfile.o: ../../include/vstring.h
-+dot_lockfile.o: dot_lockfile.c
-+dot_lockfile.o: dot_lockfile.h
-+dot_lockfile.o: mail_params.h
-+dot_lockfile_as.o: ../../include/msg.h
-+dot_lockfile_as.o: ../../include/set_eugid.h
-+dot_lockfile_as.o: ../../include/sys_defs.h
-+dot_lockfile_as.o: ../../include/vbuf.h
-+dot_lockfile_as.o: ../../include/vstring.h
-+dot_lockfile_as.o: dot_lockfile.h
-+dot_lockfile_as.o: dot_lockfile_as.c
-+dot_lockfile_as.o: dot_lockfile_as.h
-+dsb_scan.o: ../../include/attr.h
-+dsb_scan.o: ../../include/iostuff.h
-+dsb_scan.o: ../../include/sys_defs.h
-+dsb_scan.o: ../../include/vbuf.h
-+dsb_scan.o: ../../include/vstream.h
-+dsb_scan.o: ../../include/vstring.h
-+dsb_scan.o: dsb_scan.c
-+dsb_scan.o: dsb_scan.h
-+dsb_scan.o: dsn.h
-+dsb_scan.o: dsn_buf.h
-+dsb_scan.o: mail_proto.h
-+dsn.o: ../../include/msg.h
-+dsn.o: ../../include/mymalloc.h
-+dsn.o: ../../include/sys_defs.h
-+dsn.o: dsn.c
-+dsn.o: dsn.h
-+dsn_buf.o: ../../include/msg.h
-+dsn_buf.o: ../../include/mymalloc.h
-+dsn_buf.o: ../../include/sys_defs.h
-+dsn_buf.o: ../../include/vbuf.h
-+dsn_buf.o: ../../include/vstring.h
-+dsn_buf.o: dsn.h
-+dsn_buf.o: dsn_buf.c
-+dsn_buf.o: dsn_buf.h
-+dsn_mask.o: ../../include/msg.h
-+dsn_mask.o: ../../include/name_code.h
-+dsn_mask.o: ../../include/name_mask.h
-+dsn_mask.o: ../../include/sys_defs.h
-+dsn_mask.o: ../../include/vbuf.h
-+dsn_mask.o: ../../include/vstring.h
-+dsn_mask.o: dsn_mask.c
-+dsn_mask.o: dsn_mask.h
-+dsn_print.o: ../../include/attr.h
-+dsn_print.o: ../../include/iostuff.h
-+dsn_print.o: ../../include/sys_defs.h
-+dsn_print.o: ../../include/vbuf.h
-+dsn_print.o: ../../include/vstream.h
-+dsn_print.o: dsn.h
-+dsn_print.o: dsn_print.c
-+dsn_print.o: dsn_print.h
-+dsn_print.o: mail_proto.h
-+dsn_util.o: ../../include/msg.h
-+dsn_util.o: ../../include/mymalloc.h
-+dsn_util.o: ../../include/stringops.h
-+dsn_util.o: ../../include/sys_defs.h
-+dsn_util.o: ../../include/vbuf.h
-+dsn_util.o: ../../include/vstring.h
-+dsn_util.o: dsn_util.c
-+dsn_util.o: dsn_util.h
-+ehlo_mask.o: ../../include/name_mask.h
-+ehlo_mask.o: ../../include/sys_defs.h
-+ehlo_mask.o: ../../include/vbuf.h
-+ehlo_mask.o: ../../include/vstring.h
-+ehlo_mask.o: ehlo_mask.c
-+ehlo_mask.o: ehlo_mask.h
-+ext_prop.o: ../../include/name_mask.h
-+ext_prop.o: ../../include/sys_defs.h
-+ext_prop.o: ../../include/vbuf.h
-+ext_prop.o: ../../include/vstring.h
-+ext_prop.o: ext_prop.c
-+ext_prop.o: ext_prop.h
-+ext_prop.o: mail_params.h
-+file_id.o: ../../include/msg.h
-+file_id.o: ../../include/sys_defs.h
-+file_id.o: ../../include/vbuf.h
-+file_id.o: ../../include/vstring.h
-+file_id.o: file_id.c
-+file_id.o: file_id.h
-+flush_clnt.o: ../../include/attr.h
-+flush_clnt.o: ../../include/iostuff.h
-+flush_clnt.o: ../../include/match_list.h
-+flush_clnt.o: ../../include/match_ops.h
-+flush_clnt.o: ../../include/msg.h
-+flush_clnt.o: ../../include/sys_defs.h
-+flush_clnt.o: ../../include/vbuf.h
-+flush_clnt.o: ../../include/vstream.h
-+flush_clnt.o: domain_list.h
-+flush_clnt.o: flush_clnt.c
-+flush_clnt.o: flush_clnt.h
-+flush_clnt.o: mail_flush.h
-+flush_clnt.o: mail_params.h
-+flush_clnt.o: mail_proto.h
-+flush_clnt.o: match_parent_style.h
-+fold_addr.o: ../../include/stringops.h
-+fold_addr.o: ../../include/sys_defs.h
-+fold_addr.o: ../../include/vbuf.h
-+fold_addr.o: ../../include/vstring.h
-+fold_addr.o: fold_addr.c
-+fold_addr.o: fold_addr.h
-+header_body_checks.o: ../../include/argv.h
-+header_body_checks.o: ../../include/dict.h
-+header_body_checks.o: ../../include/msg.h
-+header_body_checks.o: ../../include/mymalloc.h
-+header_body_checks.o: ../../include/sys_defs.h
-+header_body_checks.o: ../../include/vbuf.h
-+header_body_checks.o: ../../include/vstream.h
-+header_body_checks.o: ../../include/vstring.h
-+header_body_checks.o: cleanup_user.h
-+header_body_checks.o: dsn_util.h
-+header_body_checks.o: header_body_checks.c
-+header_body_checks.o: header_body_checks.h
-+header_body_checks.o: header_opts.h
-+header_body_checks.o: is_header.h
-+header_body_checks.o: maps.h
-+header_body_checks.o: mime_state.h
-+header_body_checks.o: rec_type.h
-+header_opts.o: ../../include/htable.h
-+header_opts.o: ../../include/msg.h
-+header_opts.o: ../../include/stringops.h
-+header_opts.o: ../../include/sys_defs.h
-+header_opts.o: ../../include/vbuf.h
-+header_opts.o: ../../include/vstring.h
-+header_opts.o: header_opts.c
-+header_opts.o: header_opts.h
-+header_token.o: ../../include/msg.h
-+header_token.o: ../../include/sys_defs.h
-+header_token.o: ../../include/vbuf.h
-+header_token.o: ../../include/vstring.h
-+header_token.o: header_token.c
-+header_token.o: header_token.h
-+header_token.o: lex_822.h
-+input_transp.o: ../../include/msg.h
-+input_transp.o: ../../include/name_mask.h
-+input_transp.o: ../../include/sys_defs.h
-+input_transp.o: ../../include/vbuf.h
-+input_transp.o: ../../include/vstring.h
-+input_transp.o: cleanup_user.h
-+input_transp.o: input_transp.c
-+input_transp.o: input_transp.h
-+input_transp.o: mail_params.h
-+int_filt.o: ../../include/msg.h
-+int_filt.o: ../../include/name_mask.h
-+int_filt.o: ../../include/sys_defs.h
-+int_filt.o: ../../include/vbuf.h
-+int_filt.o: ../../include/vstring.h
-+int_filt.o: cleanup_user.h
-+int_filt.o: int_filt.c
-+int_filt.o: int_filt.h
-+int_filt.o: mail_params.h
-+is_header.o: ../../include/sys_defs.h
-+is_header.o: is_header.c
-+is_header.o: is_header.h
-+log_adhoc.o: ../../include/attr.h
-+log_adhoc.o: ../../include/format_tv.h
-+log_adhoc.o: ../../include/msg.h
-+log_adhoc.o: ../../include/sys_defs.h
-+log_adhoc.o: ../../include/vbuf.h
-+log_adhoc.o: ../../include/vstream.h
-+log_adhoc.o: ../../include/vstring.h
-+log_adhoc.o: dsn.h
-+log_adhoc.o: log_adhoc.c
-+log_adhoc.o: log_adhoc.h
-+log_adhoc.o: mail_params.h
-+log_adhoc.o: msg_stats.h
-+log_adhoc.o: recipient_list.h
-+mail_addr.o: ../../include/stringops.h
-+mail_addr.o: ../../include/sys_defs.h
-+mail_addr.o: ../../include/vbuf.h
-+mail_addr.o: ../../include/vstring.h
-+mail_addr.o: mail_addr.c
-+mail_addr.o: mail_addr.h
-+mail_addr.o: mail_params.h
-+mail_addr_crunch.o: ../../include/argv.h
-+mail_addr_crunch.o: ../../include/mymalloc.h
-+mail_addr_crunch.o: ../../include/sys_defs.h
-+mail_addr_crunch.o: ../../include/vbuf.h
-+mail_addr_crunch.o: ../../include/vstring.h
-+mail_addr_crunch.o: canon_addr.h
-+mail_addr_crunch.o: mail_addr_crunch.c
-+mail_addr_crunch.o: mail_addr_crunch.h
-+mail_addr_crunch.o: resolve_clnt.h
-+mail_addr_crunch.o: tok822.h
-+mail_addr_find.o: ../../include/argv.h
-+mail_addr_find.o: ../../include/dict.h
-+mail_addr_find.o: ../../include/msg.h
-+mail_addr_find.o: ../../include/mymalloc.h
-+mail_addr_find.o: ../../include/stringops.h
-+mail_addr_find.o: ../../include/sys_defs.h
-+mail_addr_find.o: ../../include/vbuf.h
-+mail_addr_find.o: ../../include/vstream.h
-+mail_addr_find.o: ../../include/vstring.h
-+mail_addr_find.o: mail_addr_find.c
-+mail_addr_find.o: mail_addr_find.h
-+mail_addr_find.o: mail_params.h
-+mail_addr_find.o: maps.h
-+mail_addr_find.o: resolve_local.h
-+mail_addr_find.o: strip_addr.h
-+mail_addr_map.o: ../../include/argv.h
-+mail_addr_map.o: ../../include/dict.h
-+mail_addr_map.o: ../../include/msg.h
-+mail_addr_map.o: ../../include/mymalloc.h
-+mail_addr_map.o: ../../include/sys_defs.h
-+mail_addr_map.o: ../../include/vbuf.h
-+mail_addr_map.o: ../../include/vstream.h
-+mail_addr_map.o: ../../include/vstring.h
-+mail_addr_map.o: mail_addr_crunch.h
-+mail_addr_map.o: mail_addr_find.h
-+mail_addr_map.o: mail_addr_map.c
-+mail_addr_map.o: mail_addr_map.h
-+mail_addr_map.o: maps.h
-+mail_command_client.o: ../../include/attr.h
-+mail_command_client.o: ../../include/iostuff.h
-+mail_command_client.o: ../../include/sys_defs.h
-+mail_command_client.o: ../../include/vbuf.h
-+mail_command_client.o: ../../include/vstream.h
-+mail_command_client.o: mail_command_client.c
-+mail_command_client.o: mail_proto.h
-+mail_command_server.o: ../../include/attr.h
-+mail_command_server.o: ../../include/iostuff.h
-+mail_command_server.o: ../../include/sys_defs.h
-+mail_command_server.o: ../../include/vbuf.h
-+mail_command_server.o: ../../include/vstream.h
-+mail_command_server.o: mail_command_server.c
-+mail_command_server.o: mail_proto.h
-+mail_conf.o: ../../include/argv.h
-+mail_conf.o: ../../include/dict.h
-+mail_conf.o: ../../include/msg.h
-+mail_conf.o: ../../include/mymalloc.h
-+mail_conf.o: ../../include/readlline.h
-+mail_conf.o: ../../include/safe.h
-+mail_conf.o: ../../include/stringops.h
-+mail_conf.o: ../../include/sys_defs.h
-+mail_conf.o: ../../include/vbuf.h
-+mail_conf.o: ../../include/vstream.h
-+mail_conf.o: ../../include/vstring.h
-+mail_conf.o: mail_conf.c
-+mail_conf.o: mail_conf.h
-+mail_conf.o: mail_params.h
-+mail_conf_bool.o: ../../include/argv.h
-+mail_conf_bool.o: ../../include/dict.h
-+mail_conf_bool.o: ../../include/msg.h
-+mail_conf_bool.o: ../../include/sys_defs.h
-+mail_conf_bool.o: ../../include/vbuf.h
-+mail_conf_bool.o: ../../include/vstream.h
-+mail_conf_bool.o: ../../include/vstring.h
-+mail_conf_bool.o: mail_conf.h
-+mail_conf_bool.o: mail_conf_bool.c
-+mail_conf_int.o: ../../include/argv.h
-+mail_conf_int.o: ../../include/dict.h
-+mail_conf_int.o: ../../include/msg.h
-+mail_conf_int.o: ../../include/mymalloc.h
-+mail_conf_int.o: ../../include/stringops.h
-+mail_conf_int.o: ../../include/sys_defs.h
-+mail_conf_int.o: ../../include/vbuf.h
-+mail_conf_int.o: ../../include/vstream.h
-+mail_conf_int.o: ../../include/vstring.h
-+mail_conf_int.o: mail_conf.h
-+mail_conf_int.o: mail_conf_int.c
-+mail_conf_long.o: ../../include/argv.h
-+mail_conf_long.o: ../../include/dict.h
-+mail_conf_long.o: ../../include/msg.h
-+mail_conf_long.o: ../../include/mymalloc.h
-+mail_conf_long.o: ../../include/stringops.h
-+mail_conf_long.o: ../../include/sys_defs.h
-+mail_conf_long.o: ../../include/vbuf.h
-+mail_conf_long.o: ../../include/vstream.h
-+mail_conf_long.o: ../../include/vstring.h
-+mail_conf_long.o: mail_conf.h
-+mail_conf_long.o: mail_conf_long.c
-+mail_conf_nint.o: ../../include/argv.h
-+mail_conf_nint.o: ../../include/dict.h
-+mail_conf_nint.o: ../../include/msg.h
-+mail_conf_nint.o: ../../include/mymalloc.h
-+mail_conf_nint.o: ../../include/stringops.h
-+mail_conf_nint.o: ../../include/sys_defs.h
-+mail_conf_nint.o: ../../include/vbuf.h
-+mail_conf_nint.o: ../../include/vstream.h
-+mail_conf_nint.o: ../../include/vstring.h
-+mail_conf_nint.o: mail_conf.h
-+mail_conf_nint.o: mail_conf_nint.c
-+mail_conf_raw.o: ../../include/msg.h
-+mail_conf_raw.o: ../../include/mymalloc.h
-+mail_conf_raw.o: ../../include/sys_defs.h
-+mail_conf_raw.o: mail_conf.h
-+mail_conf_raw.o: mail_conf_raw.c
-+mail_conf_str.o: ../../include/msg.h
-+mail_conf_str.o: ../../include/mymalloc.h
-+mail_conf_str.o: ../../include/stringops.h
-+mail_conf_str.o: ../../include/sys_defs.h
-+mail_conf_str.o: ../../include/vbuf.h
-+mail_conf_str.o: ../../include/vstring.h
-+mail_conf_str.o: mail_conf.h
-+mail_conf_str.o: mail_conf_str.c
-+mail_conf_time.o: ../../include/argv.h
-+mail_conf_time.o: ../../include/dict.h
-+mail_conf_time.o: ../../include/msg.h
-+mail_conf_time.o: ../../include/mymalloc.h
-+mail_conf_time.o: ../../include/stringops.h
-+mail_conf_time.o: ../../include/sys_defs.h
-+mail_conf_time.o: ../../include/vbuf.h
-+mail_conf_time.o: ../../include/vstream.h
-+mail_conf_time.o: ../../include/vstring.h
-+mail_conf_time.o: conv_time.h
-+mail_conf_time.o: mail_conf.h
-+mail_conf_time.o: mail_conf_time.c
-+mail_connect.o: ../../include/attr.h
-+mail_connect.o: ../../include/connect.h
-+mail_connect.o: ../../include/iostuff.h
-+mail_connect.o: ../../include/msg.h
-+mail_connect.o: ../../include/mymalloc.h
-+mail_connect.o: ../../include/stringops.h
-+mail_connect.o: ../../include/sys_defs.h
-+mail_connect.o: ../../include/vbuf.h
-+mail_connect.o: ../../include/vstream.h
-+mail_connect.o: ../../include/vstring.h
-+mail_connect.o: mail_connect.c
-+mail_connect.o: mail_proto.h
-+mail_connect.o: timed_ipc.h
-+mail_copy.o: ../../include/htable.h
-+mail_copy.o: ../../include/iostuff.h
-+mail_copy.o: ../../include/msg.h
-+mail_copy.o: ../../include/safe_open.h
-+mail_copy.o: ../../include/stringops.h
-+mail_copy.o: ../../include/sys_defs.h
-+mail_copy.o: ../../include/vbuf.h
-+mail_copy.o: ../../include/vstream.h
-+mail_copy.o: ../../include/vstring.h
-+mail_copy.o: ../../include/vstring_vstream.h
-+mail_copy.o: dsn.h
-+mail_copy.o: dsn_buf.h
-+mail_copy.o: mail_addr.h
-+mail_copy.o: mail_copy.c
-+mail_copy.o: mail_copy.h
-+mail_copy.o: mail_params.h
-+mail_copy.o: mail_queue.h
-+mail_copy.o: mark_corrupt.h
-+mail_copy.o: mbox_open.h
-+mail_copy.o: quote_822_local.h
-+mail_copy.o: quote_flags.h
-+mail_copy.o: rec_type.h
-+mail_copy.o: record.h
-+mail_copy.o: sys_exits.h
-+mail_date.o: ../../include/msg.h
-+mail_date.o: ../../include/sys_defs.h
-+mail_date.o: ../../include/vbuf.h
-+mail_date.o: ../../include/vstring.h
-+mail_date.o: mail_date.c
-+mail_date.o: mail_date.h
-+mail_dict.o: ../../include/argv.h
-+mail_dict.o: ../../include/dict.h
-+mail_dict.o: ../../include/msg.h
-+mail_dict.o: ../../include/sys_defs.h
-+mail_dict.o: ../../include/vbuf.h
-+mail_dict.o: ../../include/vstream.h
-+mail_dict.o: ../../include/vstring.h
-+mail_dict.o: dict_ldap.h
-+mail_dict.o: dict_mysql.h
-+mail_dict.o: dict_pgsql.h
-+mail_dict.o: dict_proxy.h
-+mail_dict.o: mail_dict.c
-+mail_dict.o: mail_dict.h
-+mail_error.o: ../../include/name_mask.h
-+mail_error.o: ../../include/sys_defs.h
-+mail_error.o: ../../include/vbuf.h
-+mail_error.o: ../../include/vstring.h
-+mail_error.o: mail_error.c
-+mail_error.o: mail_error.h
-+mail_flush.o: ../../include/attr.h
-+mail_flush.o: ../../include/iostuff.h
-+mail_flush.o: ../../include/sys_defs.h
-+mail_flush.o: ../../include/vbuf.h
-+mail_flush.o: ../../include/vstream.h
-+mail_flush.o: mail_flush.c
-+mail_flush.o: mail_flush.h
-+mail_flush.o: mail_params.h
-+mail_flush.o: mail_proto.h
-+mail_open_ok.o: ../../include/msg.h
-+mail_open_ok.o: ../../include/sys_defs.h
-+mail_open_ok.o: ../../include/vbuf.h
-+mail_open_ok.o: ../../include/vstream.h
-+mail_open_ok.o: ../../include/vstring.h
-+mail_open_ok.o: mail_open_ok.c
-+mail_open_ok.o: mail_open_ok.h
-+mail_open_ok.o: mail_queue.h
-+mail_params.o: ../../include/argv.h
-+mail_params.o: ../../include/attr.h
-+mail_params.o: ../../include/dict.h
-+mail_params.o: ../../include/dict_db.h
-+mail_params.o: ../../include/get_hostname.h
-+mail_params.o: ../../include/inet_addr_list.h
-+mail_params.o: ../../include/inet_proto.h
-+mail_params.o: ../../include/iostuff.h
-+mail_params.o: ../../include/msg.h
-+mail_params.o: ../../include/msg_syslog.h
-+mail_params.o: ../../include/myaddrinfo.h
-+mail_params.o: ../../include/mymalloc.h
-+mail_params.o: ../../include/safe.h
-+mail_params.o: ../../include/safe_open.h
-+mail_params.o: ../../include/stringops.h
-+mail_params.o: ../../include/sys_defs.h
-+mail_params.o: ../../include/valid_hostname.h
-+mail_params.o: ../../include/vbuf.h
-+mail_params.o: ../../include/vstream.h
-+mail_params.o: ../../include/vstring.h
-+mail_params.o: ../../include/vstring_vstream.h
-+mail_params.o: mail_conf.h
-+mail_params.o: mail_params.c
-+mail_params.o: mail_params.h
-+mail_params.o: mail_proto.h
-+mail_params.o: mail_version.h
-+mail_params.o: mynetworks.h
-+mail_params.o: own_inet_addr.h
-+mail_params.o: recipient_list.h
-+mail_params.o: verp_sender.h
-+mail_pathname.o: ../../include/attr.h
-+mail_pathname.o: ../../include/iostuff.h
-+mail_pathname.o: ../../include/stringops.h
-+mail_pathname.o: ../../include/sys_defs.h
-+mail_pathname.o: ../../include/vbuf.h
-+mail_pathname.o: ../../include/vstream.h
-+mail_pathname.o: ../../include/vstring.h
-+mail_pathname.o: mail_pathname.c
-+mail_pathname.o: mail_proto.h
-+mail_queue.o: ../../include/argv.h
-+mail_queue.o: ../../include/dir_forest.h
-+mail_queue.o: ../../include/make_dirs.h
-+mail_queue.o: ../../include/msg.h
-+mail_queue.o: ../../include/mymalloc.h
-+mail_queue.o: ../../include/sane_fsops.h
-+mail_queue.o: ../../include/split_at.h
-+mail_queue.o: ../../include/sys_defs.h
-+mail_queue.o: ../../include/valid_hostname.h
-+mail_queue.o: ../../include/vbuf.h
-+mail_queue.o: ../../include/vstream.h
-+mail_queue.o: ../../include/vstring.h
-+mail_queue.o: file_id.h
-+mail_queue.o: mail_params.h
-+mail_queue.o: mail_queue.c
-+mail_queue.o: mail_queue.h
-+mail_run.o: ../../include/msg.h
-+mail_run.o: ../../include/mymalloc.h
-+mail_run.o: ../../include/stringops.h
-+mail_run.o: ../../include/sys_defs.h
-+mail_run.o: ../../include/vbuf.h
-+mail_run.o: ../../include/vstring.h
-+mail_run.o: mail_params.h
-+mail_run.o: mail_run.c
-+mail_run.o: mail_run.h
-+mail_scan_dir.o: ../../include/scan_dir.h
-+mail_scan_dir.o: ../../include/sys_defs.h
-+mail_scan_dir.o: mail_scan_dir.c
-+mail_scan_dir.o: mail_scan_dir.h
-+mail_stream.o: ../../include/argv.h
-+mail_stream.o: ../../include/attr.h
-+mail_stream.o: ../../include/iostuff.h
-+mail_stream.o: ../../include/msg.h
-+mail_stream.o: ../../include/mymalloc.h
-+mail_stream.o: ../../include/sane_fsops.h
-+mail_stream.o: ../../include/stringops.h
-+mail_stream.o: ../../include/sys_defs.h
-+mail_stream.o: ../../include/vbuf.h
-+mail_stream.o: ../../include/vstream.h
-+mail_stream.o: ../../include/vstring.h
-+mail_stream.o: cleanup_user.h
-+mail_stream.o: mail_params.h
-+mail_stream.o: mail_proto.h
-+mail_stream.o: mail_queue.h
-+mail_stream.o: mail_stream.c
-+mail_stream.o: mail_stream.h
-+mail_stream.o: opened.h
-+mail_task.o: ../../include/safe.h
-+mail_task.o: ../../include/sys_defs.h
-+mail_task.o: ../../include/vbuf.h
-+mail_task.o: ../../include/vstring.h
-+mail_task.o: mail_conf.h
-+mail_task.o: mail_params.h
-+mail_task.o: mail_task.c
-+mail_task.o: mail_task.h
-+mail_trigger.o: ../../include/attr.h
-+mail_trigger.o: ../../include/iostuff.h
-+mail_trigger.o: ../../include/msg.h
-+mail_trigger.o: ../../include/mymalloc.h
-+mail_trigger.o: ../../include/sys_defs.h
-+mail_trigger.o: ../../include/trigger.h
-+mail_trigger.o: ../../include/vbuf.h
-+mail_trigger.o: ../../include/vstream.h
-+mail_trigger.o: mail_params.h
-+mail_trigger.o: mail_proto.h
-+mail_trigger.o: mail_trigger.c
-+mail_version.o: mail_version.c
-+maps.o: ../../include/argv.h
-+maps.o: ../../include/dict.h
-+maps.o: ../../include/msg.h
-+maps.o: ../../include/mymalloc.h
-+maps.o: ../../include/split_at.h
-+maps.o: ../../include/stringops.h
-+maps.o: ../../include/sys_defs.h
-+maps.o: ../../include/vbuf.h
-+maps.o: ../../include/vstream.h
-+maps.o: ../../include/vstring.h
-+maps.o: mail_conf.h
-+maps.o: maps.c
-+maps.o: maps.h
-+mark_corrupt.o: ../../include/attr.h
-+mark_corrupt.o: ../../include/msg.h
-+mark_corrupt.o: ../../include/set_eugid.h
-+mark_corrupt.o: ../../include/sys_defs.h
-+mark_corrupt.o: ../../include/vbuf.h
-+mark_corrupt.o: ../../include/vstream.h
-+mark_corrupt.o: ../../include/vstring.h
-+mark_corrupt.o: deliver_request.h
-+mark_corrupt.o: dsn.h
-+mark_corrupt.o: mail_params.h
-+mark_corrupt.o: mail_queue.h
-+mark_corrupt.o: mark_corrupt.c
-+mark_corrupt.o: mark_corrupt.h
-+mark_corrupt.o: msg_stats.h
-+mark_corrupt.o: recipient_list.h
-+match_parent_style.o: ../../include/match_list.h
-+match_parent_style.o: ../../include/match_ops.h
-+match_parent_style.o: ../../include/sys_defs.h
-+match_parent_style.o: mail_params.h
-+match_parent_style.o: match_parent_style.c
-+match_parent_style.o: match_parent_style.h
-+match_parent_style.o: string_list.h
-+match_service.o: ../../include/argv.h
-+match_service.o: ../../include/msg.h
-+match_service.o: ../../include/mymalloc.h
-+match_service.o: ../../include/stringops.h
-+match_service.o: ../../include/sys_defs.h
-+match_service.o: ../../include/vbuf.h
-+match_service.o: ../../include/vstring.h
-+match_service.o: match_service.c
-+match_service.o: match_service.h
-+mbox_conf.o: ../../include/argv.h
-+mbox_conf.o: ../../include/name_mask.h
-+mbox_conf.o: ../../include/sys_defs.h
-+mbox_conf.o: ../../include/vbuf.h
-+mbox_conf.o: ../../include/vstring.h
-+mbox_conf.o: mail_params.h
-+mbox_conf.o: mbox_conf.c
-+mbox_conf.o: mbox_conf.h
-+mbox_open.o: ../../include/argv.h
-+mbox_open.o: ../../include/iostuff.h
-+mbox_open.o: ../../include/msg.h
-+mbox_open.o: ../../include/myflock.h
-+mbox_open.o: ../../include/mymalloc.h
-+mbox_open.o: ../../include/safe_open.h
-+mbox_open.o: ../../include/sys_defs.h
-+mbox_open.o: ../../include/vbuf.h
-+mbox_open.o: ../../include/vstream.h
-+mbox_open.o: ../../include/vstring.h
-+mbox_open.o: deliver_flock.h
-+mbox_open.o: dot_lockfile.h
-+mbox_open.o: dsn.h
-+mbox_open.o: dsn_buf.h
-+mbox_open.o: mbox_conf.h
-+mbox_open.o: mbox_open.c
-+mbox_open.o: mbox_open.h
-+mime_state.o: ../../include/msg.h
-+mime_state.o: ../../include/mymalloc.h
-+mime_state.o: ../../include/sys_defs.h
-+mime_state.o: ../../include/vbuf.h
-+mime_state.o: ../../include/vstring.h
-+mime_state.o: header_opts.h
-+mime_state.o: header_token.h
-+mime_state.o: is_header.h
-+mime_state.o: lex_822.h
-+mime_state.o: mail_params.h
-+mime_state.o: mime_state.c
-+mime_state.o: mime_state.h
-+mime_state.o: rec_type.h
-+mkmap_cdb.o: ../../include/argv.h
-+mkmap_cdb.o: ../../include/dict.h
-+mkmap_cdb.o: ../../include/dict_cdb.h
-+mkmap_cdb.o: ../../include/mymalloc.h
-+mkmap_cdb.o: ../../include/sys_defs.h
-+mkmap_cdb.o: ../../include/vbuf.h
-+mkmap_cdb.o: ../../include/vstream.h
-+mkmap_cdb.o: ../../include/vstring.h
-+mkmap_cdb.o: mkmap.h
-+mkmap_cdb.o: mkmap_cdb.c
-+mkmap_db.o: ../../include/argv.h
-+mkmap_db.o: ../../include/dict.h
-+mkmap_db.o: ../../include/dict_db.h
-+mkmap_db.o: ../../include/msg.h
-+mkmap_db.o: ../../include/myflock.h
-+mkmap_db.o: ../../include/mymalloc.h
-+mkmap_db.o: ../../include/stringops.h
-+mkmap_db.o: ../../include/sys_defs.h
-+mkmap_db.o: ../../include/vbuf.h
-+mkmap_db.o: ../../include/vstream.h
-+mkmap_db.o: ../../include/vstring.h
-+mkmap_db.o: mail_params.h
-+mkmap_db.o: mkmap.h
-+mkmap_db.o: mkmap_db.c
-+mkmap_dbm.o: ../../include/argv.h
-+mkmap_dbm.o: ../../include/dict.h
-+mkmap_dbm.o: ../../include/dict_dbm.h
-+mkmap_dbm.o: ../../include/msg.h
-+mkmap_dbm.o: ../../include/myflock.h
-+mkmap_dbm.o: ../../include/mymalloc.h
-+mkmap_dbm.o: ../../include/stringops.h
-+mkmap_dbm.o: ../../include/sys_defs.h
-+mkmap_dbm.o: ../../include/vbuf.h
-+mkmap_dbm.o: ../../include/vstream.h
-+mkmap_dbm.o: ../../include/vstring.h
-+mkmap_dbm.o: mkmap.h
-+mkmap_dbm.o: mkmap_dbm.c
-+mkmap_open.o: ../../include/argv.h
-+mkmap_open.o: ../../include/dict.h
-+mkmap_open.o: ../../include/dict_cdb.h
-+mkmap_open.o: ../../include/dict_db.h
-+mkmap_open.o: ../../include/dict_dbm.h
-+mkmap_open.o: ../../include/dict_sdbm.h
-+mkmap_open.o: ../../include/msg.h
-+mkmap_open.o: ../../include/mymalloc.h
-+mkmap_open.o: ../../include/sigdelay.h
-+mkmap_open.o: ../../include/sys_defs.h
-+mkmap_open.o: ../../include/vbuf.h
-+mkmap_open.o: ../../include/vstream.h
-+mkmap_open.o: ../../include/vstring.h
-+mkmap_open.o: dict_proxy.h
-+mkmap_open.o: mkmap.h
-+mkmap_open.o: mkmap_open.c
-+mkmap_proxy.o: ../../include/argv.h
-+mkmap_proxy.o: ../../include/dict.h
-+mkmap_proxy.o: ../../include/mymalloc.h
-+mkmap_proxy.o: ../../include/sys_defs.h
-+mkmap_proxy.o: ../../include/vbuf.h
-+mkmap_proxy.o: ../../include/vstream.h
-+mkmap_proxy.o: ../../include/vstring.h
-+mkmap_proxy.o: dict_proxy.h
-+mkmap_proxy.o: mkmap.h
-+mkmap_proxy.o: mkmap_proxy.c
-+mkmap_sdbm.o: ../../include/argv.h
-+mkmap_sdbm.o: ../../include/dict.h
-+mkmap_sdbm.o: ../../include/dict_sdbm.h
-+mkmap_sdbm.o: ../../include/msg.h
-+mkmap_sdbm.o: ../../include/myflock.h
-+mkmap_sdbm.o: ../../include/mymalloc.h
-+mkmap_sdbm.o: ../../include/stringops.h
-+mkmap_sdbm.o: ../../include/sys_defs.h
-+mkmap_sdbm.o: ../../include/vbuf.h
-+mkmap_sdbm.o: ../../include/vstream.h
-+mkmap_sdbm.o: ../../include/vstring.h
-+mkmap_sdbm.o: mkmap.h
-+mkmap_sdbm.o: mkmap_sdbm.c
-+msg_stats_print.o: ../../include/attr.h
-+msg_stats_print.o: ../../include/iostuff.h
-+msg_stats_print.o: ../../include/sys_defs.h
-+msg_stats_print.o: ../../include/vbuf.h
-+msg_stats_print.o: ../../include/vstream.h
-+msg_stats_print.o: mail_proto.h
-+msg_stats_print.o: msg_stats.h
-+msg_stats_print.o: msg_stats_print.c
-+msg_stats_scan.o: ../../include/attr.h
-+msg_stats_scan.o: ../../include/iostuff.h
-+msg_stats_scan.o: ../../include/msg.h
-+msg_stats_scan.o: ../../include/sys_defs.h
-+msg_stats_scan.o: ../../include/vbuf.h
-+msg_stats_scan.o: ../../include/vstream.h
-+msg_stats_scan.o: ../../include/vstring.h
-+msg_stats_scan.o: mail_proto.h
-+msg_stats_scan.o: msg_stats.h
-+msg_stats_scan.o: msg_stats_scan.c
-+mynetworks.o: ../../include/argv.h
-+mynetworks.o: ../../include/inet_addr_list.h
-+mynetworks.o: ../../include/mask_addr.h
-+mynetworks.o: ../../include/msg.h
-+mynetworks.o: ../../include/myaddrinfo.h
-+mynetworks.o: ../../include/name_mask.h
-+mynetworks.o: ../../include/sock_addr.h
-+mynetworks.o: ../../include/sys_defs.h
-+mynetworks.o: ../../include/vbuf.h
-+mynetworks.o: ../../include/vstring.h
-+mynetworks.o: been_here.h
-+mynetworks.o: mail_params.h
-+mynetworks.o: mynetworks.c
-+mynetworks.o: mynetworks.h
-+mynetworks.o: own_inet_addr.h
-+mypwd.o: ../../include/binhash.h
-+mypwd.o: ../../include/htable.h
-+mypwd.o: ../../include/msg.h
-+mypwd.o: ../../include/mymalloc.h
-+mypwd.o: ../../include/sys_defs.h
-+mypwd.o: mypwd.c
-+mypwd.o: mypwd.h
-+namadr_list.o: ../../include/match_list.h
-+namadr_list.o: ../../include/match_ops.h
-+namadr_list.o: ../../include/sys_defs.h
-+namadr_list.o: namadr_list.c
-+namadr_list.o: namadr_list.h
-+off_cvt.o: ../../include/msg.h
-+off_cvt.o: ../../include/sys_defs.h
-+off_cvt.o: ../../include/vbuf.h
-+off_cvt.o: ../../include/vstring.h
-+off_cvt.o: off_cvt.c
-+off_cvt.o: off_cvt.h
-+opened.o: ../../include/msg.h
-+opened.o: ../../include/sys_defs.h
-+opened.o: ../../include/vbuf.h
-+opened.o: ../../include/vstring.h
-+opened.o: opened.c
-+opened.o: opened.h
-+own_inet_addr.o: ../../include/inet_addr_host.h
-+own_inet_addr.o: ../../include/inet_addr_list.h
-+own_inet_addr.o: ../../include/inet_addr_local.h
-+own_inet_addr.o: ../../include/inet_proto.h
-+own_inet_addr.o: ../../include/msg.h
-+own_inet_addr.o: ../../include/myaddrinfo.h
-+own_inet_addr.o: ../../include/mymalloc.h
-+own_inet_addr.o: ../../include/sock_addr.h
-+own_inet_addr.o: ../../include/stringops.h
-+own_inet_addr.o: ../../include/sys_defs.h
-+own_inet_addr.o: ../../include/vbuf.h
-+own_inet_addr.o: ../../include/vstring.h
-+own_inet_addr.o: mail_params.h
-+own_inet_addr.o: own_inet_addr.c
-+own_inet_addr.o: own_inet_addr.h
-+pipe_command.o: ../../include/argv.h
-+pipe_command.o: ../../include/chroot_uid.h
-+pipe_command.o: ../../include/clean_env.h
-+pipe_command.o: ../../include/exec_command.h
-+pipe_command.o: ../../include/iostuff.h
-+pipe_command.o: ../../include/msg.h
-+pipe_command.o: ../../include/msg_vstream.h
-+pipe_command.o: ../../include/set_eugid.h
-+pipe_command.o: ../../include/set_ugid.h
-+pipe_command.o: ../../include/stringops.h
-+pipe_command.o: ../../include/sys_defs.h
-+pipe_command.o: ../../include/timed_wait.h
-+pipe_command.o: ../../include/vbuf.h
-+pipe_command.o: ../../include/vstream.h
-+pipe_command.o: ../../include/vstring.h
-+pipe_command.o: dsn.h
-+pipe_command.o: dsn_buf.h
-+pipe_command.o: dsn_util.h
-+pipe_command.o: mail_copy.h
-+pipe_command.o: mail_params.h
-+pipe_command.o: pipe_command.c
-+pipe_command.o: pipe_command.h
-+pipe_command.o: sys_exits.h
-+post_mail.o: ../../include/attr.h
-+post_mail.o: ../../include/events.h
-+post_mail.o: ../../include/iostuff.h
-+post_mail.o: ../../include/msg.h
-+post_mail.o: ../../include/mymalloc.h
-+post_mail.o: ../../include/sys_defs.h
-+post_mail.o: ../../include/vbuf.h
-+post_mail.o: ../../include/vstream.h
-+post_mail.o: ../../include/vstring.h
-+post_mail.o: cleanup_user.h
-+post_mail.o: int_filt.h
-+post_mail.o: mail_date.h
-+post_mail.o: mail_params.h
-+post_mail.o: mail_proto.h
-+post_mail.o: post_mail.c
-+post_mail.o: post_mail.h
-+post_mail.o: rec_type.h
-+post_mail.o: record.h
-+quote_821_local.o: ../../include/sys_defs.h
-+quote_821_local.o: ../../include/vbuf.h
-+quote_821_local.o: ../../include/vstring.h
-+quote_821_local.o: quote_821_local.c
-+quote_821_local.o: quote_821_local.h
-+quote_821_local.o: quote_flags.h
-+quote_822_local.o: ../../include/sys_defs.h
-+quote_822_local.o: ../../include/vbuf.h
-+quote_822_local.o: ../../include/vstring.h
-+quote_822_local.o: quote_822_local.c
-+quote_822_local.o: quote_822_local.h
-+quote_822_local.o: quote_flags.h
-+rcpt_buf.o: ../../include/attr.h
-+rcpt_buf.o: ../../include/iostuff.h
-+rcpt_buf.o: ../../include/mymalloc.h
-+rcpt_buf.o: ../../include/sys_defs.h
-+rcpt_buf.o: ../../include/vbuf.h
-+rcpt_buf.o: ../../include/vstream.h
-+rcpt_buf.o: ../../include/vstring.h
-+rcpt_buf.o: mail_proto.h
-+rcpt_buf.o: rcpt_buf.c
-+rcpt_buf.o: rcpt_buf.h
-+rcpt_buf.o: recipient_list.h
-+rcpt_print.o: ../../include/attr.h
-+rcpt_print.o: ../../include/iostuff.h
-+rcpt_print.o: ../../include/sys_defs.h
-+rcpt_print.o: ../../include/vbuf.h
-+rcpt_print.o: ../../include/vstream.h
-+rcpt_print.o: mail_proto.h
-+rcpt_print.o: rcpt_print.c
-+rcpt_print.o: rcpt_print.h
-+rcpt_print.o: recipient_list.h
-+rec2stream.o: ../../include/sys_defs.h
-+rec2stream.o: ../../include/vbuf.h
-+rec2stream.o: ../../include/vstream.h
-+rec2stream.o: ../../include/vstring.h
-+rec2stream.o: rec2stream.c
-+rec2stream.o: rec_streamlf.h
-+rec2stream.o: rec_type.h
-+rec2stream.o: record.h
-+rec_attr_map.o: ../../include/attr.h
-+rec_attr_map.o: ../../include/iostuff.h
-+rec_attr_map.o: ../../include/sys_defs.h
-+rec_attr_map.o: ../../include/vbuf.h
-+rec_attr_map.o: ../../include/vstream.h
-+rec_attr_map.o: mail_proto.h
-+rec_attr_map.o: rec_attr_map.c
-+rec_attr_map.o: rec_attr_map.h
-+rec_attr_map.o: rec_type.h
-+rec_streamlf.o: ../../include/sys_defs.h
-+rec_streamlf.o: ../../include/vbuf.h
-+rec_streamlf.o: ../../include/vstream.h
-+rec_streamlf.o: ../../include/vstring.h
-+rec_streamlf.o: rec_streamlf.c
-+rec_streamlf.o: rec_streamlf.h
-+rec_streamlf.o: rec_type.h
-+rec_streamlf.o: record.h
-+rec_type.o: rec_type.c
-+rec_type.o: rec_type.h
-+recdump.o: ../../include/msg_vstream.h
-+recdump.o: ../../include/sys_defs.h
-+recdump.o: ../../include/vbuf.h
-+recdump.o: ../../include/vstream.h
-+recdump.o: ../../include/vstring.h
-+recdump.o: rec_streamlf.h
-+recdump.o: rec_type.h
-+recdump.o: recdump.c
-+recdump.o: record.h
-+recipient_list.o: ../../include/msg.h
-+recipient_list.o: ../../include/mymalloc.h
-+recipient_list.o: ../../include/sys_defs.h
-+recipient_list.o: recipient_list.c
-+recipient_list.o: recipient_list.h
-+record.o: ../../include/msg.h
-+record.o: ../../include/mymalloc.h
-+record.o: ../../include/stringops.h
-+record.o: ../../include/sys_defs.h
-+record.o: ../../include/vbuf.h
-+record.o: ../../include/vstream.h
-+record.o: ../../include/vstring.h
-+record.o: off_cvt.h
-+record.o: rec_type.h
-+record.o: record.c
-+record.o: record.h
-+remove.o: ../../include/sys_defs.h
-+remove.o: ../../include/vbuf.h
-+remove.o: ../../include/vstring.h
-+remove.o: mail_params.h
-+remove.o: remove.c
-+resolve_clnt.o: ../../include/attr.h
-+resolve_clnt.o: ../../include/events.h
-+resolve_clnt.o: ../../include/iostuff.h
-+resolve_clnt.o: ../../include/msg.h
-+resolve_clnt.o: ../../include/sys_defs.h
-+resolve_clnt.o: ../../include/vbuf.h
-+resolve_clnt.o: ../../include/vstream.h
-+resolve_clnt.o: ../../include/vstring.h
-+resolve_clnt.o: ../../include/vstring_vstream.h
-+resolve_clnt.o: clnt_stream.h
-+resolve_clnt.o: mail_params.h
-+resolve_clnt.o: mail_proto.h
-+resolve_clnt.o: resolve_clnt.c
-+resolve_clnt.o: resolve_clnt.h
-+resolve_local.o: ../../include/inet_addr_list.h
-+resolve_local.o: ../../include/match_list.h
-+resolve_local.o: ../../include/match_ops.h
-+resolve_local.o: ../../include/msg.h
-+resolve_local.o: ../../include/myaddrinfo.h
-+resolve_local.o: ../../include/mymalloc.h
-+resolve_local.o: ../../include/sys_defs.h
-+resolve_local.o: ../../include/valid_hostname.h
-+resolve_local.o: mail_params.h
-+resolve_local.o: own_inet_addr.h
-+resolve_local.o: resolve_local.c
-+resolve_local.o: resolve_local.h
-+resolve_local.o: string_list.h
-+resolve_local.o: valid_mailhost_addr.h
-+rewrite_clnt.o: ../../include/attr.h
-+rewrite_clnt.o: ../../include/events.h
-+rewrite_clnt.o: ../../include/iostuff.h
-+rewrite_clnt.o: ../../include/msg.h
-+rewrite_clnt.o: ../../include/sys_defs.h
-+rewrite_clnt.o: ../../include/vbuf.h
-+rewrite_clnt.o: ../../include/vstream.h
-+rewrite_clnt.o: ../../include/vstring.h
-+rewrite_clnt.o: ../../include/vstring_vstream.h
-+rewrite_clnt.o: clnt_stream.h
-+rewrite_clnt.o: mail_params.h
-+rewrite_clnt.o: mail_proto.h
-+rewrite_clnt.o: quote_822_local.h
-+rewrite_clnt.o: quote_flags.h
-+rewrite_clnt.o: rewrite_clnt.c
-+rewrite_clnt.o: rewrite_clnt.h
-+scache.o: ../../include/argv.h
-+scache.o: ../../include/events.h
-+scache.o: ../../include/msg.h
-+scache.o: ../../include/sys_defs.h
-+scache.o: ../../include/vbuf.h
-+scache.o: ../../include/vstream.h
-+scache.o: ../../include/vstring.h
-+scache.o: ../../include/vstring_vstream.h
-+scache.o: scache.c
-+scache.o: scache.h
-+scache_clnt.o: ../../include/attr.h
-+scache_clnt.o: ../../include/auto_clnt.h
-+scache_clnt.o: ../../include/iostuff.h
-+scache_clnt.o: ../../include/msg.h
-+scache_clnt.o: ../../include/mymalloc.h
-+scache_clnt.o: ../../include/stringops.h
-+scache_clnt.o: ../../include/sys_defs.h
-+scache_clnt.o: ../../include/vbuf.h
-+scache_clnt.o: ../../include/vstream.h
-+scache_clnt.o: ../../include/vstring.h
-+scache_clnt.o: mail_params.h
-+scache_clnt.o: mail_proto.h
-+scache_clnt.o: scache.h
-+scache_clnt.o: scache_clnt.c
-+scache_multi.o: ../../include/events.h
-+scache_multi.o: ../../include/htable.h
-+scache_multi.o: ../../include/msg.h
-+scache_multi.o: ../../include/mymalloc.h
-+scache_multi.o: ../../include/ring.h
-+scache_multi.o: ../../include/sys_defs.h
-+scache_multi.o: ../../include/vbuf.h
-+scache_multi.o: ../../include/vstring.h
-+scache_multi.o: scache.h
-+scache_multi.o: scache_multi.c
-+scache_single.o: ../../include/events.h
-+scache_single.o: ../../include/msg.h
-+scache_single.o: ../../include/mymalloc.h
-+scache_single.o: ../../include/sys_defs.h
-+scache_single.o: ../../include/vbuf.h
-+scache_single.o: ../../include/vstring.h
-+scache_single.o: scache.h
-+scache_single.o: scache_single.c
-+sent.o: ../../include/attr.h
-+sent.o: ../../include/msg.h
-+sent.o: ../../include/sys_defs.h
-+sent.o: ../../include/vbuf.h
-+sent.o: ../../include/vstream.h
-+sent.o: ../../include/vstring.h
-+sent.o: bounce.h
-+sent.o: defer.h
-+sent.o: deliver_request.h
-+sent.o: dsn.h
-+sent.o: dsn_buf.h
-+sent.o: dsn_mask.h
-+sent.o: dsn_util.h
-+sent.o: log_adhoc.h
-+sent.o: mail_params.h
-+sent.o: msg_stats.h
-+sent.o: recipient_list.h
-+sent.o: sent.c
-+sent.o: sent.h
-+sent.o: trace.h
-+sent.o: verify.h
-+smtp_stream.o: ../../include/iostuff.h
-+smtp_stream.o: ../../include/msg.h
-+smtp_stream.o: ../../include/sys_defs.h
-+smtp_stream.o: ../../include/vbuf.h
-+smtp_stream.o: ../../include/vstream.h
-+smtp_stream.o: ../../include/vstring.h
-+smtp_stream.o: ../../include/vstring_vstream.h
-+smtp_stream.o: smtp_stream.c
-+smtp_stream.o: smtp_stream.h
-+split_addr.o: ../../include/split_at.h
-+split_addr.o: ../../include/sys_defs.h
-+split_addr.o: mail_addr.h
-+split_addr.o: mail_params.h
-+split_addr.o: split_addr.c
-+split_addr.o: split_addr.h
-+stream2rec.o: ../../include/sys_defs.h
-+stream2rec.o: ../../include/vbuf.h
-+stream2rec.o: ../../include/vstream.h
-+stream2rec.o: ../../include/vstring.h
-+stream2rec.o: rec_streamlf.h
-+stream2rec.o: rec_type.h
-+stream2rec.o: record.h
-+stream2rec.o: stream2rec.c
-+string_list.o: ../../include/match_list.h
-+string_list.o: ../../include/match_ops.h
-+string_list.o: ../../include/sys_defs.h
-+string_list.o: string_list.c
-+string_list.o: string_list.h
-+strip_addr.o: ../../include/mymalloc.h
-+strip_addr.o: ../../include/sys_defs.h
-+strip_addr.o: split_addr.h
-+strip_addr.o: strip_addr.c
-+strip_addr.o: strip_addr.h
-+sys_exits.o: ../../include/msg.h
-+sys_exits.o: ../../include/sys_defs.h
-+sys_exits.o: ../../include/vbuf.h
-+sys_exits.o: ../../include/vstring.h
-+sys_exits.o: sys_exits.c
-+sys_exits.o: sys_exits.h
-+timed_ipc.o: ../../include/msg.h
-+timed_ipc.o: ../../include/sys_defs.h
-+timed_ipc.o: ../../include/vbuf.h
-+timed_ipc.o: ../../include/vstream.h
-+timed_ipc.o: mail_params.h
-+timed_ipc.o: timed_ipc.c
-+timed_ipc.o: timed_ipc.h
-+tok822_find.o: ../../include/sys_defs.h
-+tok822_find.o: ../../include/vbuf.h
-+tok822_find.o: ../../include/vstring.h
-+tok822_find.o: resolve_clnt.h
-+tok822_find.o: tok822.h
-+tok822_find.o: tok822_find.c
-+tok822_node.o: ../../include/mymalloc.h
-+tok822_node.o: ../../include/sys_defs.h
-+tok822_node.o: ../../include/vbuf.h
-+tok822_node.o: ../../include/vstring.h
-+tok822_node.o: resolve_clnt.h
-+tok822_node.o: tok822.h
-+tok822_node.o: tok822_node.c
-+tok822_parse.o: ../../include/msg.h
-+tok822_parse.o: ../../include/stringops.h
-+tok822_parse.o: ../../include/sys_defs.h
-+tok822_parse.o: ../../include/vbuf.h
-+tok822_parse.o: ../../include/vstring.h
-+tok822_parse.o: lex_822.h
-+tok822_parse.o: quote_822_local.h
-+tok822_parse.o: quote_flags.h
-+tok822_parse.o: resolve_clnt.h
-+tok822_parse.o: tok822.h
-+tok822_parse.o: tok822_parse.c
-+tok822_resolve.o: ../../include/msg.h
-+tok822_resolve.o: ../../include/sys_defs.h
-+tok822_resolve.o: ../../include/vbuf.h
-+tok822_resolve.o: ../../include/vstring.h
-+tok822_resolve.o: resolve_clnt.h
-+tok822_resolve.o: tok822.h
-+tok822_resolve.o: tok822_resolve.c
-+tok822_rewrite.o: ../../include/attr.h
-+tok822_rewrite.o: ../../include/iostuff.h
-+tok822_rewrite.o: ../../include/msg.h
-+tok822_rewrite.o: ../../include/sys_defs.h
-+tok822_rewrite.o: ../../include/vbuf.h
-+tok822_rewrite.o: ../../include/vstream.h
-+tok822_rewrite.o: ../../include/vstring.h
-+tok822_rewrite.o: mail_proto.h
-+tok822_rewrite.o: resolve_clnt.h
-+tok822_rewrite.o: rewrite_clnt.h
-+tok822_rewrite.o: tok822.h
-+tok822_rewrite.o: tok822_rewrite.c
-+tok822_tree.o: ../../include/mymalloc.h
-+tok822_tree.o: ../../include/sys_defs.h
-+tok822_tree.o: ../../include/vbuf.h
-+tok822_tree.o: ../../include/vstring.h
-+tok822_tree.o: resolve_clnt.h
-+tok822_tree.o: tok822.h
-+tok822_tree.o: tok822_tree.c
-+trace.o: ../../include/attr.h
-+trace.o: ../../include/iostuff.h
-+trace.o: ../../include/msg.h
-+trace.o: ../../include/sys_defs.h
-+trace.o: ../../include/vbuf.h
-+trace.o: ../../include/vstream.h
-+trace.o: ../../include/vstring.h
-+trace.o: bounce.h
-+trace.o: deliver_request.h
-+trace.o: dsn.h
-+trace.o: dsn_buf.h
-+trace.o: dsn_print.h
-+trace.o: log_adhoc.h
-+trace.o: mail_params.h
-+trace.o: mail_proto.h
-+trace.o: msg_stats.h
-+trace.o: rcpt_print.h
-+trace.o: recipient_list.h
-+trace.o: trace.c
-+trace.o: trace.h
-+user_acl.o: ../../include/match_list.h
-+user_acl.o: ../../include/match_ops.h
-+user_acl.o: ../../include/sys_defs.h
-+user_acl.o: ../../include/vbuf.h
-+user_acl.o: ../../include/vstring.h
-+user_acl.o: mail_params.h
-+user_acl.o: mypwd.h
-+user_acl.o: string_list.h
-+user_acl.o: user_acl.c
-+user_acl.o: user_acl.h
-+valid_mailhost_addr.o: ../../include/msg.h
-+valid_mailhost_addr.o: ../../include/myaddrinfo.h
-+valid_mailhost_addr.o: ../../include/sys_defs.h
-+valid_mailhost_addr.o: ../../include/valid_hostname.h
-+valid_mailhost_addr.o: valid_mailhost_addr.c
-+valid_mailhost_addr.o: valid_mailhost_addr.h
-+verify.o: ../../include/attr.h
-+verify.o: ../../include/iostuff.h
-+verify.o: ../../include/msg.h
-+verify.o: ../../include/sys_defs.h
-+verify.o: ../../include/vbuf.h
-+verify.o: ../../include/vstream.h
-+verify.o: ../../include/vstring.h
-+verify.o: deliver_request.h
-+verify.o: dsn.h
-+verify.o: log_adhoc.h
-+verify.o: mail_params.h
-+verify.o: mail_proto.h
-+verify.o: msg_stats.h
-+verify.o: recipient_list.h
-+verify.o: verify.c
-+verify.o: verify.h
-+verify.o: verify_clnt.h
-+verify_clnt.o: ../../include/attr.h
-+verify_clnt.o: ../../include/iostuff.h
-+verify_clnt.o: ../../include/msg.h
-+verify_clnt.o: ../../include/sys_defs.h
-+verify_clnt.o: ../../include/vbuf.h
-+verify_clnt.o: ../../include/vstream.h
-+verify_clnt.o: ../../include/vstring.h
-+verify_clnt.o: clnt_stream.h
-+verify_clnt.o: deliver_request.h
-+verify_clnt.o: dsn.h
-+verify_clnt.o: mail_params.h
-+verify_clnt.o: mail_proto.h
-+verify_clnt.o: msg_stats.h
-+verify_clnt.o: recipient_list.h
-+verify_clnt.o: verify_clnt.c
-+verify_clnt.o: verify_clnt.h
-+verp_sender.o: ../../include/sys_defs.h
-+verp_sender.o: ../../include/vbuf.h
-+verp_sender.o: ../../include/vstring.h
-+verp_sender.o: mail_params.h
-+verp_sender.o: recipient_list.h
-+verp_sender.o: verp_sender.c
-+verp_sender.o: verp_sender.h
-+wildcard_inet_addr.o: ../../include/inet_addr_host.h
-+wildcard_inet_addr.o: ../../include/inet_addr_list.h
-+wildcard_inet_addr.o: ../../include/msg.h
-+wildcard_inet_addr.o: ../../include/myaddrinfo.h
-+wildcard_inet_addr.o: ../../include/sys_defs.h
-+wildcard_inet_addr.o: wildcard_inet_addr.c
-+wildcard_inet_addr.o: wildcard_inet_addr.h
-+xtext.o: ../../include/msg.h
-+xtext.o: ../../include/sys_defs.h
-+xtext.o: ../../include/vbuf.h
-+xtext.o: ../../include/vstring.h
-+xtext.o: xtext.c
-+xtext.o: xtext.h
-diff -ruN a/src/global/mail_conf.c b/src/global/mail_conf.c
---- a/src/global/mail_conf.c 2009-06-01 12:27:43.000000000 +0000
-+++ b/src/global/mail_conf.c 2009-06-01 13:08:26.000000000 +0000
-@@ -182,6 +182,13 @@
- path = concatenate(var_config_dir, "/", "main.cf", (char *) 0);
- dict_load_file(CONFIG_DICT, path);
- myfree(path);
-+
-+#ifndef NO_DYNAMIC_MAPS
-+ path = concatenate(var_config_dir, "/", "dynamicmaps.cf", (char *) 0);
-+ dict_open_dlinfo(path);
-+ myfree(path);
-+#endif
-+
- }
-
- /* mail_conf_flush - discard configuration dictionary */
-diff -ruN a/src/global/mail_conf.c.orig b/src/global/mail_conf.c.orig
---- a/src/global/mail_conf.c.orig 1970-01-01 00:00:00.000000000 +0000
-+++ b/src/global/mail_conf.c.orig 2009-06-01 13:07:56.000000000 +0000
-@@ -0,0 +1,229 @@
-+/*++
-+/* NAME
-+/* mail_conf 3
-+/* SUMMARY
-+/* global configuration parameter management
-+/* SYNOPSIS
-+/* #include <mail_conf.h>
-+/*
-+/* void mail_conf_read()
-+/*
-+/* void mail_conf_suck()
-+/*
-+/* void mail_conf_flush()
-+/*
-+/* void mail_conf_update(name, value)
-+/* const char *name;
-+/* const char *value;
-+/*
-+/* const char *mail_conf_lookup(name)
-+/* const char *name;
-+/*
-+/* const char *mail_conf_eval(string)
-+/* const char *string;
-+/*
-+/* const char *mail_conf_lookup_eval(name)
-+/* const char *name;
-+/* DESCRIPTION
-+/* mail_conf_suck() reads the global Postfix configuration file, and
-+/* stores its values into a global configuration dictionary.
-+/*
-+/* mail_conf_read() invokes mail_conf_suck() and assigns the values
-+/* to global variables by calling mail_params_init().
-+/*
-+/* mail_conf_flush() discards the global configuration dictionary.
-+/* This is needed in programs that read main.cf multiple times, to
-+/* ensure that deleted parameter settings are handled properly.
-+/*
-+/* The following routines are wrappers around the generic dictionary
-+/* access routines.
-+/*
-+/* mail_conf_update() updates the named global parameter. This has
-+/* no effect on parameters whose value has already been looked up.
-+/* The update succeeds or the program terminates with fatal error.
-+/*
-+/* mail_conf_lookup() looks up the value of the named parameter.
-+/* A null pointer result means the parameter was not found.
-+/* The result is volatile and should be copied if it is to be
-+/* used for any appreciable amount of time.
-+/*
-+/* mail_conf_eval() recursively expands any $parameters in the
-+/* string argument. The result is volatile and should be copied
-+/* if it is to be used for any appreciable amount of time.
-+/*
-+/* mail_conf_lookup_eval() looks up the named parameter, and expands any
-+/* $parameters in the result. The result is volatile and should be
-+/* copied if it is to be used for any appreciable amount of time.
-+/* DIAGNOSTICS
-+/* Fatal errors: malformed numerical value.
-+/* ENVIRONMENT
-+/* MAIL_CONFIG, non-default configuration database
-+/* MAIL_VERBOSE, enable verbose mode
-+/* FILES
-+/* /etc/postfix: default Postfix configuration directory.
-+/* SEE ALSO
-+/* dict(3) generic dictionary manager
-+/* mail_conf_int(3) integer-valued parameters
-+/* mail_conf_str(3) string-valued parameters
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+/* System library. */
-+
-+#include <sys_defs.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+/* Utility library. */
-+
-+#include <msg.h>
-+#include <mymalloc.h>
-+#include <vstream.h>
-+#include <vstring.h>
-+#include <dict.h>
-+#include <safe.h>
-+#include <stringops.h>
-+#include <readlline.h>
-+
-+/* Global library. */
-+
-+#include "mail_params.h"
-+#include "mail_conf.h"
-+
-+/* mail_conf_checkdir - authorize non-default directory */
-+
-+static void mail_conf_checkdir(const char *config_dir)
-+{
-+ VSTRING *buf;
-+ VSTREAM *fp;
-+ char *path;
-+ char *name;
-+ char *value;
-+ char *cp;
-+ int found = 0;
-+
-+ /*
-+ * If running set-[ug]id, require that a non-default configuration
-+ * directory name is blessed as a bona fide configuration directory in
-+ * the default main.cf file.
-+ */
-+ path = concatenate(DEF_CONFIG_DIR, "/", "main.cf", (char *) 0);
-+ if ((fp = vstream_fopen(path, O_RDONLY, 0)) == 0)
-+ msg_fatal("open file %s: %m", path);
-+
-+ buf = vstring_alloc(1);
-+ while (found == 0 && readlline(buf, fp, (int *) 0)) {
-+ if (split_nameval(vstring_str(buf), &name, &value) == 0
-+ && (strcmp(name, VAR_CONFIG_DIRS) == 0
-+ || strcmp(name, VAR_MULTI_CONF_DIRS) == 0)) {
-+ while (found == 0 && (cp = mystrtok(&value, ", \t\r\n")) != 0)
-+ if (strcmp(cp, config_dir) == 0)
-+ found = 1;
-+ }
-+ }
-+ if (vstream_fclose(fp))
-+ msg_fatal("read file %s: %m", path);
-+ vstring_free(buf);
-+
-+ if (found == 0) {
-+ msg_error("untrusted configuration directory name: %s", config_dir);
-+ msg_fatal("specify \"%s = %s\" in %s",
-+ VAR_CONFIG_DIRS, config_dir, path);
-+ }
-+ myfree(path);
-+}
-+
-+/* mail_conf_read - read global configuration file */
-+
-+void mail_conf_read(void)
-+{
-+ mail_conf_suck();
-+ mail_params_init();
-+}
-+
-+/* mail_conf_suck - suck in the global configuration file */
-+
-+void mail_conf_suck(void)
-+{
-+ char *config_dir;
-+ char *path;
-+
-+ /*
-+ * Permit references to unknown configuration variable names. We rely on
-+ * a separate configuration checking tool to spot misspelled names and
-+ * other kinds of trouble. Enter the configuration directory into the
-+ * default dictionary.
-+ */
-+ dict_unknown_allowed = 1;
-+ if (var_config_dir)
-+ myfree(var_config_dir);
-+ if ((config_dir = getenv(CONF_ENV_PATH)) == 0)
-+ config_dir = DEF_CONFIG_DIR;
-+ var_config_dir = mystrdup(config_dir);
-+ set_mail_conf_str(VAR_CONFIG_DIR, var_config_dir);
-+
-+ /*
-+ * If the configuration directory name comes from a different trust
-+ * domain, require that it is listed in the default main.cf file.
-+ */
-+ if (strcmp(var_config_dir, DEF_CONFIG_DIR) != 0 /* non-default */
-+ && safe_getenv(CONF_ENV_PATH) == 0 /* non-default */
-+ && geteuid() != 0) /* untrusted */
-+ mail_conf_checkdir(var_config_dir);
-+ path = concatenate(var_config_dir, "/", "main.cf", (char *) 0);
-+ dict_load_file(CONFIG_DICT, path);
-+ myfree(path);
-+}
-+
-+/* mail_conf_flush - discard configuration dictionary */
-+
-+void mail_conf_flush(void)
-+{
-+ if (dict_handle(CONFIG_DICT) != 0)
-+ dict_unregister(CONFIG_DICT);
-+}
-+
-+/* mail_conf_eval - expand macros in string */
-+
-+const char *mail_conf_eval(const char *string)
-+{
-+#define RECURSIVE 1
-+
-+ return (dict_eval(CONFIG_DICT, string, RECURSIVE));
-+}
-+
-+/* mail_conf_lookup - lookup named variable */
-+
-+const char *mail_conf_lookup(const char *name)
-+{
-+ return (dict_lookup(CONFIG_DICT, name));
-+}
-+
-+/* mail_conf_lookup_eval - expand named variable */
-+
-+const char *mail_conf_lookup_eval(const char *name)
-+{
-+ const char *value;
-+
-+#define RECURSIVE 1
-+
-+ if ((value = dict_lookup(CONFIG_DICT, name)) != 0)
-+ value = dict_eval(CONFIG_DICT, value, RECURSIVE);
-+ return (value);
-+}
-+
-+/* mail_conf_update - update parameter */
-+
-+void mail_conf_update(const char *key, const char *value)
-+{
-+ dict_update(CONFIG_DICT, key, value);
-+}
-diff -ruN a/src/global/mail_dict.c b/src/global/mail_dict.c
---- a/src/global/mail_dict.c 2009-06-01 12:27:43.000000000 +0000
-+++ b/src/global/mail_dict.c 2009-06-01 13:08:26.000000000 +0000
-@@ -45,6 +45,7 @@
-
- static const DICT_OPEN_INFO dict_open_info[] = {
- DICT_TYPE_PROXY, dict_proxy_open,
-+#ifdef NO_DYNAMIC_MAPS
- #ifdef HAS_LDAP
- DICT_TYPE_LDAP, dict_ldap_open,
- #endif
-@@ -54,6 +55,7 @@
- #ifdef HAS_PGSQL
- DICT_TYPE_PGSQL, dict_pgsql_open,
- #endif
-+#endif /* NO_DYNAMIC_MAPS */
- 0,
- };
-
-diff -ruN a/src/global/mail_params.c b/src/global/mail_params.c
---- a/src/global/mail_params.c 2009-06-01 12:27:43.000000000 +0000
-+++ b/src/global/mail_params.c 2009-06-01 13:08:26.000000000 +0000
-@@ -79,6 +79,7 @@
- /* char *var_export_environ;
- /* char *var_debug_peer_list;
- /* int var_debug_peer_level;
-+/* int var_command_maxtime;
- /* int var_in_flow_delay;
- /* int var_fault_inj_code;
- /* char *var_bounce_service;
-@@ -265,6 +266,7 @@
- char *var_export_environ;
- char *var_debug_peer_list;
- int var_debug_peer_level;
-+int var_command_maxtime;
- int var_fault_inj_code;
- char *var_bounce_service;
- char *var_cleanup_service;
-@@ -276,6 +278,7 @@
- char *var_error_service;
- char *var_flush_service;
- char *var_verify_service;
-+char *var_scache_service;
- char *var_trace_service;
- char *var_proxymap_service;
- char *var_proxywrite_service;
-diff -ruN a/src/global/mail_params.c.orig b/src/global/mail_params.c.orig
---- a/src/global/mail_params.c.orig 1970-01-01 00:00:00.000000000 +0000
-+++ b/src/global/mail_params.c.orig 2009-06-01 13:07:56.000000000 +0000
-@@ -0,0 +1,752 @@
-+/*++
-+/* NAME
-+/* mail_params 3
-+/* SUMMARY
-+/* global mail configuration parameters
-+/* SYNOPSIS
-+/* #include <mail_params.h>
-+/*
-+/* char *var_myhostname;
-+/* char *var_mydomain;
-+/* char *var_myorigin;
-+/* char *var_mydest;
-+/* char *var_relayhost;
-+/* char *var_transit_origin;
-+/* char *var_transit_dest;
-+/* char *var_mail_name;
-+/* int var_helpful_warnings;
-+/* char *var_syslog_name;
-+/* char *var_mail_owner;
-+/* uid_t var_owner_uid;
-+/* gid_t var_owner_gid;
-+/* char *var_sgid_group;
-+/* gid_t var_sgid_gid;
-+/* char *var_default_privs;
-+/* uid_t var_default_uid;
-+/* gid_t var_default_gid;
-+/* char *var_config_dir;
-+/* char *var_daemon_dir;
-+/* char *var_data_dir;
-+/* char *var_command_dir;
-+/* char *var_queue_dir;
-+/* int var_use_limit;
-+/* int var_idle_limit;
-+/* int var_event_drain;
-+/* int var_bundle_rcpt;
-+/* char *var_procname;
-+/* int var_pid;
-+/* int var_ipc_timeout;
-+/* char *var_pid_dir;
-+/* int var_dont_remove;
-+/* char *var_inet_interfaces;
-+/* char *var_proxy_interfaces;
-+/* char *var_inet_protocols;
-+/* char *var_mynetworks;
-+/* char *var_double_bounce_sender;
-+/* int var_line_limit;
-+/* char *var_alias_db_map;
-+/* int var_message_limit;
-+/* char *var_mail_release;
-+/* char *var_mail_version;
-+/* int var_ipc_idle_limit;
-+/* int var_ipc_ttl_limit;
-+/* char *var_db_type;
-+/* char *var_hash_queue_names;
-+/* int var_hash_queue_depth;
-+/* int var_trigger_timeout;
-+/* char *var_rcpt_delim;
-+/* int var_fork_tries;
-+/* int var_fork_delay;
-+/* int var_flock_tries;
-+/* int var_flock_delay;
-+/* int var_flock_stale;
-+/* int var_disable_dns;
-+/* int var_soft_bounce;
-+/* time_t var_starttime;
-+/* int var_ownreq_special;
-+/* int var_daemon_timeout;
-+/* char *var_syslog_facility;
-+/* char *var_relay_domains;
-+/* char *var_fflush_domains;
-+/* char *var_mynetworks_style;
-+/* char *var_verp_delims;
-+/* char *var_verp_filter;
-+/* char *var_par_dom_match;
-+/* char *var_config_dirs;
-+/*
-+/* int var_inet_windowsize;
-+/* char *var_import_environ;
-+/* char *var_export_environ;
-+/* char *var_debug_peer_list;
-+/* int var_debug_peer_level;
-+/* int var_in_flow_delay;
-+/* int var_fault_inj_code;
-+/* char *var_bounce_service;
-+/* char *var_cleanup_service;
-+/* char *var_defer_service;
-+/* char *var_pickup_service;
-+/* char *var_queue_service;
-+/* char *var_rewrite_service;
-+/* char *var_showq_service;
-+/* char *var_error_service;
-+/* char *var_flush_service;
-+/* char *var_verify_service;
-+/* char *var_trace_service;
-+/* char *var_proxymap_service;
-+/* char *var_proxywrite_service;
-+/* int var_db_create_buf;
-+/* int var_db_read_buf;
-+/* int var_mime_maxdepth;
-+/* int var_mime_bound_len;
-+/* int var_header_limit;
-+/* int var_token_limit;
-+/* int var_disable_mime_input;
-+/* int var_disable_mime_oconv;
-+/* int var_strict_8bitmime;
-+/* int var_strict_7bit_hdrs;
-+/* int var_strict_8bit_body;
-+/* int var_strict_encoding;
-+/* int var_verify_neg_cache;
-+/* int var_oldlog_compat;
-+/* int var_delay_max_res;
-+/* char *var_int_filt_classes;
-+/* int var_cyrus_sasl_authzid;
-+/*
-+/* char *var_multi_conf_dirs;
-+/* char *var_multi_wrapper;
-+/* char *var_multi_group;
-+/* char *var_multi_name;
-+/* bool var_multi_enable;
-+/*
-+/* void mail_params_init()
-+/*
-+/* const char null_format_string[1];
-+/* DESCRIPTION
-+/* This module (actually the associated include file) define the names
-+/* and defaults of all mail configuration parameters.
-+/*
-+/* mail_params_init() initializes the built-in parameters listed above.
-+/* These parameters are relied upon by library routines, so they are
-+/* initialized globally so as to avoid hard-to-find errors due to
-+/* missing initialization. This routine must be called early, at
-+/* least before entering a chroot jail.
-+/*
-+/* null_format_string is a workaround for gcc compilers that complain
-+/* about empty or null format strings.
-+/* DIAGNOSTICS
-+/* Fatal errors: out of memory; null system or domain name.
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+/* System library. */
-+
-+#include <sys_defs.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <pwd.h>
-+#include <grp.h>
-+#include <time.h>
-+#include <ctype.h>
-+
-+#ifdef STRCASECMP_IN_STRINGS_H
-+#include <strings.h>
-+#endif
-+
-+/* Utility library. */
-+
-+#include <msg.h>
-+#include <msg_syslog.h>
-+#include <get_hostname.h>
-+#include <valid_hostname.h>
-+#include <stringops.h>
-+#include <safe.h>
-+#include <safe_open.h>
-+#include <mymalloc.h>
-+#ifdef HAS_DB
-+#include <dict_db.h>
-+#endif
-+#include <inet_proto.h>
-+#include <vstring_vstream.h>
-+#include <iostuff.h>
-+
-+/* Global library. */
-+
-+#include <mynetworks.h>
-+#include <mail_conf.h>
-+#include <mail_version.h>
-+#include <mail_proto.h>
-+#include <verp_sender.h>
-+#include <own_inet_addr.h>
-+#include <mail_params.h>
-+
-+ /*
-+ * Special configuration variables.
-+ */
-+char *var_myhostname;
-+char *var_mydomain;
-+char *var_myorigin;
-+char *var_mydest;
-+char *var_relayhost;
-+char *var_transit_origin;
-+char *var_transit_dest;
-+char *var_mail_name;
-+int var_helpful_warnings;
-+char *var_syslog_name;
-+char *var_mail_owner;
-+uid_t var_owner_uid;
-+gid_t var_owner_gid;
-+char *var_sgid_group;
-+gid_t var_sgid_gid;
-+char *var_default_privs;
-+uid_t var_default_uid;
-+gid_t var_default_gid;
-+char *var_config_dir;
-+char *var_daemon_dir;
-+char *var_data_dir;
-+char *var_command_dir;
-+char *var_queue_dir;
-+int var_use_limit;
-+int var_event_drain;
-+int var_idle_limit;
-+int var_bundle_rcpt;
-+char *var_procname;
-+int var_pid;
-+int var_ipc_timeout;
-+char *var_pid_dir;
-+int var_dont_remove;
-+char *var_inet_interfaces;
-+char *var_proxy_interfaces;
-+char *var_inet_protocols;
-+char *var_mynetworks;
-+char *var_double_bounce_sender;
-+int var_line_limit;
-+char *var_alias_db_map;
-+int var_message_limit;
-+char *var_mail_release;
-+char *var_mail_version;
-+int var_ipc_idle_limit;
-+int var_ipc_ttl_limit;
-+char *var_db_type;
-+char *var_hash_queue_names;
-+int var_hash_queue_depth;
-+int var_trigger_timeout;
-+char *var_rcpt_delim;
-+int var_fork_tries;
-+int var_fork_delay;
-+int var_flock_tries;
-+int var_flock_delay;
-+int var_flock_stale;
-+int var_disable_dns;
-+int var_soft_bounce;
-+time_t var_starttime;
-+int var_ownreq_special;
-+int var_daemon_timeout;
-+char *var_syslog_facility;
-+char *var_relay_domains;
-+char *var_fflush_domains;
-+char *var_mynetworks_style;
-+char *var_verp_delims;
-+char *var_verp_filter;
-+int var_in_flow_delay;
-+char *var_par_dom_match;
-+char *var_config_dirs;
-+
-+int var_inet_windowsize;
-+char *var_import_environ;
-+char *var_export_environ;
-+char *var_debug_peer_list;
-+int var_debug_peer_level;
-+int var_fault_inj_code;
-+char *var_bounce_service;
-+char *var_cleanup_service;
-+char *var_defer_service;
-+char *var_pickup_service;
-+char *var_queue_service;
-+char *var_rewrite_service;
-+char *var_showq_service;
-+char *var_error_service;
-+char *var_flush_service;
-+char *var_verify_service;
-+char *var_trace_service;
-+char *var_proxymap_service;
-+char *var_proxywrite_service;
-+int var_db_create_buf;
-+int var_db_read_buf;
-+int var_mime_maxdepth;
-+int var_mime_bound_len;
-+int var_header_limit;
-+int var_token_limit;
-+int var_disable_mime_input;
-+int var_disable_mime_oconv;
-+int var_strict_8bitmime;
-+int var_strict_7bit_hdrs;
-+int var_strict_8bit_body;
-+int var_strict_encoding;
-+int var_verify_neg_cache;
-+int var_oldlog_compat;
-+int var_delay_max_res;
-+char *var_int_filt_classes;
-+int var_cyrus_sasl_authzid;
-+
-+char *var_multi_conf_dirs;
-+char *var_multi_wrapper;
-+char *var_multi_group;
-+char *var_multi_name;
-+bool var_multi_enable;
-+
-+const char null_format_string[1] = "";
-+
-+/* check_myhostname - lookup hostname and validate */
-+
-+static const char *check_myhostname(void)
-+{
-+ static const char *name;
-+ const char *dot;
-+ const char *domain;
-+
-+ /*
-+ * Use cached result.
-+ */
-+ if (name)
-+ return (name);
-+
-+ /*
-+ * If the local machine name is not in FQDN form, try to append the
-+ * contents of $mydomain. Use a default domain as a final workaround.
-+ */
-+ name = get_hostname();
-+ if ((dot = strchr(name, '.')) == 0) {
-+ if ((domain = mail_conf_lookup_eval(VAR_MYDOMAIN)) == 0)
-+ domain = DEF_MYDOMAIN;
-+ name = concatenate(name, ".", domain, (char *) 0);
-+ }
-+ return (name);
-+}
-+
-+/* check_mydomainname - lookup domain name and validate */
-+
-+static const char *check_mydomainname(void)
-+{
-+ char *dot;
-+
-+ /*
-+ * Use a default domain when the hostname is not a FQDN ("foo").
-+ */
-+ if ((dot = strchr(var_myhostname, '.')) == 0)
-+ return (DEF_MYDOMAIN);
-+ return (dot + 1);
-+}
-+
-+/* check_default_privs - lookup default user attributes and validate */
-+
-+static void check_default_privs(void)
-+{
-+ struct passwd *pwd;
-+
-+ if ((pwd = getpwnam(var_default_privs)) == 0)
-+ msg_fatal("file %s/%s: parameter %s: unknown user name value: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, var_default_privs);
-+ if ((var_default_uid = pwd->pw_uid) == 0)
-+ msg_fatal("file %s/%s: parameter %s: user %s has privileged user ID",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, var_default_privs);
-+ if ((var_default_gid = pwd->pw_gid) == 0)
-+ msg_fatal("file %s/%s: parameter %s: user %s has privileged group ID",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, var_default_privs);
-+}
-+
-+/* check_mail_owner - lookup owner user attributes and validate */
-+
-+static void check_mail_owner(void)
-+{
-+ struct passwd *pwd;
-+
-+ if ((pwd = getpwnam(var_mail_owner)) == 0)
-+ msg_fatal("file %s/%s: parameter %s: unknown user name value: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MAIL_OWNER, var_mail_owner);
-+ if ((var_owner_uid = pwd->pw_uid) == 0)
-+ msg_fatal("file %s/%s: parameter %s: user %s has privileged user ID",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MAIL_OWNER, var_mail_owner);
-+ if ((var_owner_gid = pwd->pw_gid) == 0)
-+ msg_fatal("file %s/%s: parameter %s: user %s has privileged group ID",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MAIL_OWNER, var_mail_owner);
-+
-+ /*
-+ * This detects only some forms of sharing. Enumerating the entire
-+ * password file name space could be expensive. The purpose of this code
-+ * is to discourage user ID sharing by developers and package
-+ * maintainers.
-+ */
-+ if ((pwd = getpwuid(var_owner_uid)) != 0
-+ && strcmp(pwd->pw_name, var_mail_owner) != 0)
-+ msg_fatal("file %s/%s: parameter %s: user %s has same user ID as %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MAIL_OWNER, var_mail_owner, pwd->pw_name);
-+}
-+
-+/* check_sgid_group - lookup setgid group attributes and validate */
-+
-+static void check_sgid_group(void)
-+{
-+ struct group *grp;
-+
-+ if ((grp = getgrnam(var_sgid_group)) == 0)
-+ msg_fatal("file %s/%s: parameter %s: unknown group name: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_SGID_GROUP, var_sgid_group);
-+ if ((var_sgid_gid = grp->gr_gid) == 0)
-+ msg_fatal("file %s/%s: parameter %s: group %s has privileged group ID",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_SGID_GROUP, var_sgid_group);
-+
-+ /*
-+ * This detects only some forms of sharing. Enumerating the entire group
-+ * file name space could be expensive. The purpose of this code is to
-+ * discourage group ID sharing by developers and package maintainers.
-+ */
-+ if ((grp = getgrgid(var_sgid_gid)) != 0
-+ && strcmp(grp->gr_name, var_sgid_group) != 0)
-+ msg_fatal("file %s/%s: parameter %s: group %s has same group ID as %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_SGID_GROUP, var_sgid_group, grp->gr_name);
-+}
-+
-+/* check_overlap - disallow UID or GID sharing */
-+
-+static void check_overlap(void)
-+{
-+ if (strcmp(var_default_privs, var_mail_owner) == 0)
-+ msg_fatal("file %s/%s: parameters %s and %s specify the same user %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, VAR_MAIL_OWNER,
-+ var_default_privs);
-+ if (var_default_uid == var_owner_uid)
-+ msg_fatal("file %s/%s: parameters %s and %s: users %s and %s have the same user ID: %ld",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, VAR_MAIL_OWNER,
-+ var_default_privs, var_mail_owner,
-+ (long) var_owner_uid);
-+ if (var_default_gid == var_owner_gid)
-+ msg_fatal("file %s/%s: parameters %s and %s: users %s and %s have the same group ID: %ld",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, VAR_MAIL_OWNER,
-+ var_default_privs, var_mail_owner,
-+ (long) var_owner_gid);
-+ if (var_default_gid == var_sgid_gid)
-+ msg_fatal("file %s/%s: parameters %s and %s: user %s and group %s have the same group ID: %ld",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_DEFAULT_PRIVS, VAR_SGID_GROUP,
-+ var_default_privs, var_sgid_group,
-+ (long) var_sgid_gid);
-+ if (var_owner_gid == var_sgid_gid)
-+ msg_fatal("file %s/%s: parameters %s and %s: user %s and group %s have the same group ID: %ld",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MAIL_OWNER, VAR_SGID_GROUP,
-+ var_mail_owner, var_sgid_group,
-+ (long) var_sgid_gid);
-+}
-+
-+#ifdef MYORIGIN_FROM_FILE
-+
-+/* read_param_from_file - read parameter value from file */
-+
-+static char *read_param_from_file(const char *path)
-+{
-+ VSTRING *why = vstring_alloc(100);
-+ VSTRING *buf = vstring_alloc(100);
-+ VSTREAM *fp;
-+ char *bp;
-+ char *result;
-+
-+ /*
-+ * Ugly macros to make complex expressions less unreadable.
-+ */
-+#define SKIP(start, var, cond) \
-+ for (var = start; *var && (cond); var++);
-+
-+#define TRIM(s) { \
-+ char *p; \
-+ for (p = (s) + strlen(s); p > (s) && ISSPACE(p[-1]); p--); \
-+ *p = 0; \
-+ }
-+
-+ fp = safe_open(path, O_RDONLY, 0, (struct stat *) 0, -1, -1, why);
-+ if (fp == 0)
-+ msg_fatal("%s: %s", path, vstring_str(why));
-+ vstring_get_nonl(buf, fp);
-+ if (vstream_ferror(fp)) /* FIX 20070501 */
-+ msg_fatal("%s: read error: %m", path);
-+ vstream_fclose(fp);
-+ SKIP(vstring_str(buf), bp, ISSPACE(*bp));
-+ TRIM(bp);
-+ result = mystrdup(bp);
-+
-+ vstring_free(why);
-+ vstring_free(buf);
-+ return (result);
-+}
-+
-+#endif
-+
-+/* mail_params_init - configure built-in parameters */
-+
-+void mail_params_init()
-+{
-+ static const CONFIG_STR_TABLE first_str_defaults[] = {
-+ VAR_SYSLOG_FACILITY, DEF_SYSLOG_FACILITY, &var_syslog_facility, 1, 0,
-+ VAR_INET_PROTOCOLS, DEF_INET_PROTOCOLS, &var_inet_protocols, 1, 0,
-+ VAR_MULTI_CONF_DIRS, DEF_MULTI_CONF_DIRS, &var_multi_conf_dirs, 0, 0,
-+ VAR_MULTI_WRAPPER, DEF_MULTI_WRAPPER, &var_multi_wrapper, 0, 0,
-+ VAR_MULTI_GROUP, DEF_MULTI_GROUP, &var_multi_group, 0, 0,
-+ VAR_MULTI_NAME, DEF_MULTI_NAME, &var_multi_name, 0, 0,
-+ 0,
-+ };
-+ static const CONFIG_STR_FN_TABLE function_str_defaults[] = {
-+ VAR_MYHOSTNAME, check_myhostname, &var_myhostname, 1, 0,
-+ VAR_MYDOMAIN, check_mydomainname, &var_mydomain, 1, 0,
-+ 0,
-+ };
-+ static const CONFIG_STR_TABLE other_str_defaults[] = {
-+ VAR_MAIL_NAME, DEF_MAIL_NAME, &var_mail_name, 1, 0,
-+ VAR_SYSLOG_NAME, DEF_SYSLOG_NAME, &var_syslog_name, 1, 0,
-+ VAR_MAIL_OWNER, DEF_MAIL_OWNER, &var_mail_owner, 1, 0,
-+ VAR_SGID_GROUP, DEF_SGID_GROUP, &var_sgid_group, 1, 0,
-+ VAR_MYDEST, DEF_MYDEST, &var_mydest, 0, 0,
-+ VAR_MYORIGIN, DEF_MYORIGIN, &var_myorigin, 1, 0,
-+ VAR_RELAYHOST, DEF_RELAYHOST, &var_relayhost, 0, 0,
-+ VAR_DAEMON_DIR, DEF_DAEMON_DIR, &var_daemon_dir, 1, 0,
-+ VAR_DATA_DIR, DEF_DATA_DIR, &var_data_dir, 1, 0,
-+ VAR_COMMAND_DIR, DEF_COMMAND_DIR, &var_command_dir, 1, 0,
-+ VAR_QUEUE_DIR, DEF_QUEUE_DIR, &var_queue_dir, 1, 0,
-+ VAR_PID_DIR, DEF_PID_DIR, &var_pid_dir, 1, 0,
-+ VAR_INET_INTERFACES, DEF_INET_INTERFACES, &var_inet_interfaces, 1, 0,
-+ VAR_PROXY_INTERFACES, DEF_PROXY_INTERFACES, &var_proxy_interfaces, 0, 0,
-+ VAR_DOUBLE_BOUNCE, DEF_DOUBLE_BOUNCE, &var_double_bounce_sender, 1, 0,
-+ VAR_DEFAULT_PRIVS, DEF_DEFAULT_PRIVS, &var_default_privs, 1, 0,
-+ VAR_ALIAS_DB_MAP, DEF_ALIAS_DB_MAP, &var_alias_db_map, 0, 0,
-+ VAR_MAIL_RELEASE, DEF_MAIL_RELEASE, &var_mail_release, 1, 0,
-+ VAR_MAIL_VERSION, DEF_MAIL_VERSION, &var_mail_version, 1, 0,
-+ VAR_DB_TYPE, DEF_DB_TYPE, &var_db_type, 1, 0,
-+ VAR_HASH_QUEUE_NAMES, DEF_HASH_QUEUE_NAMES, &var_hash_queue_names, 1, 0,
-+ VAR_RCPT_DELIM, DEF_RCPT_DELIM, &var_rcpt_delim, 0, 1,
-+ VAR_RELAY_DOMAINS, DEF_RELAY_DOMAINS, &var_relay_domains, 0, 0,
-+ VAR_FFLUSH_DOMAINS, DEF_FFLUSH_DOMAINS, &var_fflush_domains, 0, 0,
-+ VAR_EXPORT_ENVIRON, DEF_EXPORT_ENVIRON, &var_export_environ, 0, 0,
-+ VAR_IMPORT_ENVIRON, DEF_IMPORT_ENVIRON, &var_import_environ, 0, 0,
-+ VAR_MYNETWORKS_STYLE, DEF_MYNETWORKS_STYLE, &var_mynetworks_style, 1, 0,
-+ VAR_DEBUG_PEER_LIST, DEF_DEBUG_PEER_LIST, &var_debug_peer_list, 0, 0,
-+ VAR_VERP_DELIMS, DEF_VERP_DELIMS, &var_verp_delims, 2, 2,
-+ VAR_VERP_FILTER, DEF_VERP_FILTER, &var_verp_filter, 1, 0,
-+ VAR_PAR_DOM_MATCH, DEF_PAR_DOM_MATCH, &var_par_dom_match, 0, 0,
-+ VAR_CONFIG_DIRS, DEF_CONFIG_DIRS, &var_config_dirs, 0, 0,
-+ VAR_BOUNCE_SERVICE, DEF_BOUNCE_SERVICE, &var_bounce_service, 1, 0,
-+ VAR_CLEANUP_SERVICE, DEF_CLEANUP_SERVICE, &var_cleanup_service, 1, 0,
-+ VAR_DEFER_SERVICE, DEF_DEFER_SERVICE, &var_defer_service, 1, 0,
-+ VAR_PICKUP_SERVICE, DEF_PICKUP_SERVICE, &var_pickup_service, 1, 0,
-+ VAR_QUEUE_SERVICE, DEF_QUEUE_SERVICE, &var_queue_service, 1, 0,
-+ VAR_REWRITE_SERVICE, DEF_REWRITE_SERVICE, &var_rewrite_service, 1, 0,
-+ VAR_SHOWQ_SERVICE, DEF_SHOWQ_SERVICE, &var_showq_service, 1, 0,
-+ VAR_ERROR_SERVICE, DEF_ERROR_SERVICE, &var_error_service, 1, 0,
-+ VAR_FLUSH_SERVICE, DEF_FLUSH_SERVICE, &var_flush_service, 1, 0,
-+ VAR_VERIFY_SERVICE, DEF_VERIFY_SERVICE, &var_verify_service, 1, 0,
-+ VAR_TRACE_SERVICE, DEF_TRACE_SERVICE, &var_trace_service, 1, 0,
-+ VAR_PROXYMAP_SERVICE, DEF_PROXYMAP_SERVICE, &var_proxymap_service, 1, 0,
-+ VAR_PROXYWRITE_SERVICE, DEF_PROXYWRITE_SERVICE, &var_proxywrite_service, 1, 0,
-+ VAR_INT_FILT_CLASSES, DEF_INT_FILT_CLASSES, &var_int_filt_classes, 0, 0,
-+ 0,
-+ };
-+ static const CONFIG_STR_FN_TABLE function_str_defaults_2[] = {
-+ VAR_MYNETWORKS, mynetworks, &var_mynetworks, 0, 0,
-+ 0,
-+ };
-+ static const CONFIG_INT_TABLE other_int_defaults[] = {
-+ VAR_MAX_USE, DEF_MAX_USE, &var_use_limit, 1, 0,
-+ VAR_DONT_REMOVE, DEF_DONT_REMOVE, &var_dont_remove, 0, 0,
-+ VAR_LINE_LIMIT, DEF_LINE_LIMIT, &var_line_limit, 512, 0,
-+ VAR_MESSAGE_LIMIT, DEF_MESSAGE_LIMIT, &var_message_limit, 0, 0,
-+ VAR_HASH_QUEUE_DEPTH, DEF_HASH_QUEUE_DEPTH, &var_hash_queue_depth, 1, 0,
-+ VAR_FORK_TRIES, DEF_FORK_TRIES, &var_fork_tries, 1, 0,
-+ VAR_FLOCK_TRIES, DEF_FLOCK_TRIES, &var_flock_tries, 1, 0,
-+ VAR_DEBUG_PEER_LEVEL, DEF_DEBUG_PEER_LEVEL, &var_debug_peer_level, 1, 0,
-+ VAR_FAULT_INJ_CODE, DEF_FAULT_INJ_CODE, &var_fault_inj_code, 0, 0,
-+ VAR_DB_CREATE_BUF, DEF_DB_CREATE_BUF, &var_db_create_buf, 1, 0,
-+ VAR_DB_READ_BUF, DEF_DB_READ_BUF, &var_db_read_buf, 1, 0,
-+ VAR_HEADER_LIMIT, DEF_HEADER_LIMIT, &var_header_limit, 1, 0,
-+ VAR_TOKEN_LIMIT, DEF_TOKEN_LIMIT, &var_token_limit, 1, 0,
-+ VAR_MIME_MAXDEPTH, DEF_MIME_MAXDEPTH, &var_mime_maxdepth, 1, 0,
-+ VAR_MIME_BOUND_LEN, DEF_MIME_BOUND_LEN, &var_mime_bound_len, 1, 0,
-+ VAR_DELAY_MAX_RES, DEF_DELAY_MAX_RES, &var_delay_max_res, MIN_DELAY_MAX_RES, MAX_DELAY_MAX_RES,
-+ VAR_INET_WINDOW, DEF_INET_WINDOW, &var_inet_windowsize, 0, 0,
-+ 0,
-+ };
-+ static const CONFIG_TIME_TABLE time_defaults[] = {
-+ VAR_EVENT_DRAIN, DEF_EVENT_DRAIN, &var_event_drain, 1, 0,
-+ VAR_MAX_IDLE, DEF_MAX_IDLE, &var_idle_limit, 1, 0,
-+ VAR_IPC_TIMEOUT, DEF_IPC_TIMEOUT, &var_ipc_timeout, 1, 0,
-+ VAR_IPC_IDLE, DEF_IPC_IDLE, &var_ipc_idle_limit, 1, 0,
-+ VAR_IPC_TTL, DEF_IPC_TTL, &var_ipc_ttl_limit, 1, 0,
-+ VAR_TRIGGER_TIMEOUT, DEF_TRIGGER_TIMEOUT, &var_trigger_timeout, 1, 0,
-+ VAR_FORK_DELAY, DEF_FORK_DELAY, &var_fork_delay, 1, 0,
-+ VAR_FLOCK_DELAY, DEF_FLOCK_DELAY, &var_flock_delay, 1, 0,
-+ VAR_FLOCK_STALE, DEF_FLOCK_STALE, &var_flock_stale, 1, 0,
-+ VAR_DAEMON_TIMEOUT, DEF_DAEMON_TIMEOUT, &var_daemon_timeout, 1, 0,
-+ VAR_IN_FLOW_DELAY, DEF_IN_FLOW_DELAY, &var_in_flow_delay, 0, 10,
-+ 0,
-+ };
-+ static const CONFIG_BOOL_TABLE bool_defaults[] = {
-+ VAR_DISABLE_DNS, DEF_DISABLE_DNS, &var_disable_dns,
-+ VAR_SOFT_BOUNCE, DEF_SOFT_BOUNCE, &var_soft_bounce,
-+ VAR_OWNREQ_SPECIAL, DEF_OWNREQ_SPECIAL, &var_ownreq_special,
-+ VAR_STRICT_8BITMIME, DEF_STRICT_8BITMIME, &var_strict_8bitmime,
-+ VAR_STRICT_7BIT_HDRS, DEF_STRICT_7BIT_HDRS, &var_strict_7bit_hdrs,
-+ VAR_STRICT_8BIT_BODY, DEF_STRICT_8BIT_BODY, &var_strict_8bit_body,
-+ VAR_STRICT_ENCODING, DEF_STRICT_ENCODING, &var_strict_encoding,
-+ VAR_DISABLE_MIME_INPUT, DEF_DISABLE_MIME_INPUT, &var_disable_mime_input,
-+ VAR_DISABLE_MIME_OCONV, DEF_DISABLE_MIME_OCONV, &var_disable_mime_oconv,
-+ VAR_VERIFY_NEG_CACHE, DEF_VERIFY_NEG_CACHE, &var_verify_neg_cache,
-+ VAR_OLDLOG_COMPAT, DEF_OLDLOG_COMPAT, &var_oldlog_compat,
-+ VAR_HELPFUL_WARNINGS, DEF_HELPFUL_WARNINGS, &var_helpful_warnings,
-+ VAR_CYRUS_SASL_AUTHZID, DEF_CYRUS_SASL_AUTHZID, &var_cyrus_sasl_authzid,
-+ VAR_MULTI_ENABLE, DEF_MULTI_ENABLE, &var_multi_enable,
-+ 0,
-+ };
-+ const char *cp;
-+ INET_PROTO_INFO *proto_info;
-+
-+ /*
-+ * Extract syslog_facility early, so that from here on all errors are
-+ * logged with the proper facility.
-+ */
-+ get_mail_conf_str_table(first_str_defaults);
-+
-+ if (!msg_syslog_facility(var_syslog_facility))
-+ msg_fatal("file %s/%s: parameter %s: unrecognized value: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_SYSLOG_FACILITY, var_syslog_facility);
-+
-+ /*
-+ * What protocols should we attempt to support? The result is stored in
-+ * the global inet_proto_table variable.
-+ */
-+ proto_info = inet_proto_init(VAR_INET_PROTOCOLS, var_inet_protocols);
-+
-+ /*
-+ * Variables whose defaults are determined at runtime. Some sites use
-+ * short hostnames in the host table; some sites name their system after
-+ * the domain.
-+ */
-+ get_mail_conf_str_fn_table(function_str_defaults);
-+ if (!valid_hostname(var_myhostname, DO_GRIPE))
-+ msg_fatal("file %s/%s: parameter %s: bad parameter value: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MYHOSTNAME, var_myhostname);
-+ if (!valid_hostname(var_mydomain, DO_GRIPE))
-+ msg_fatal("file %s/%s: parameter %s: bad parameter value: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_MYDOMAIN, var_mydomain);
-+
-+ /*
-+ * Variables that are needed by almost every program.
-+ *
-+ * XXX Reading the myorigin value from file is originally a Debian Linux
-+ * feature. This code is not enabled by default because of problems: 1)
-+ * it re-implements its own parameter syntax checks, and 2) it does not
-+ * implement $name expansions.
-+ */
-+ get_mail_conf_str_table(other_str_defaults);
-+#ifdef MYORIGIN_FROM_FILE
-+ if (*var_myorigin == '/') {
-+ char *origin = read_param_from_file(var_myorigin);
-+
-+ if (*origin == 0)
-+ msg_fatal("%s file %s is empty", VAR_MYORIGIN, var_myorigin);
-+ myfree(var_myorigin); /* FIX 20070501 */
-+ var_myorigin = origin;
-+ }
-+#endif
-+ get_mail_conf_int_table(other_int_defaults);
-+ get_mail_conf_bool_table(bool_defaults);
-+ get_mail_conf_time_table(time_defaults);
-+ check_default_privs();
-+ check_mail_owner();
-+ check_sgid_group();
-+ check_overlap();
-+#ifdef HAS_DB
-+ dict_db_cache_size = var_db_read_buf;
-+#endif
-+ inet_windowsize = var_inet_windowsize;
-+
-+ /*
-+ * Variables whose defaults are determined at runtime, after other
-+ * variables have been set. This dependency is admittedly a bit tricky.
-+ * XXX Perhaps we should just register variables, and let the evaluator
-+ * figure out in what order to evaluate things.
-+ */
-+ get_mail_conf_str_fn_table(function_str_defaults_2);
-+
-+ /*
-+ * FIX 200412 The IPv6 patch did not call own_inet_addr_list() before
-+ * entering the chroot jail on Linux IPv6 systems. Linux has the IPv6
-+ * interface list in /proc, which is not available after chrooting.
-+ */
-+ (void) own_inet_addr_list();
-+
-+ /*
-+ * The PID variable cannot be set from the configuration file!!
-+ */
-+ set_mail_conf_int(VAR_PID, var_pid = getpid());
-+
-+ /*
-+ * Neither can the start time variable. It isn't even visible.
-+ */
-+ time(&var_starttime);
-+
-+ /*
-+ * Export the syslog name so children can inherit and use it before they
-+ * have initialized.
-+ */
-+ if ((cp = safe_getenv(CONF_ENV_LOGTAG)) == 0
-+ || strcmp(cp, var_syslog_name) != 0)
-+ if (setenv(CONF_ENV_LOGTAG, var_syslog_name, 1) < 0)
-+ msg_fatal("setenv %s %s: %m", CONF_ENV_LOGTAG, var_syslog_name);
-+
-+ /*
-+ * I have seen this happen just too often.
-+ */
-+ if (strcasecmp(var_myhostname, var_relayhost) == 0)
-+ msg_fatal("%s and %s parameter settings must not be identical: %s",
-+ VAR_MYHOSTNAME, VAR_RELAYHOST, var_myhostname);
-+
-+ /*
-+ * XXX These should be caught by a proper parameter parsing algorithm.
-+ */
-+ if (var_myorigin[strcspn(var_myorigin, ", \t\r\n")])
-+ msg_fatal("%s parameter setting must not contain multiple values: %s",
-+ VAR_MYORIGIN, var_myorigin);
-+
-+ if (var_relayhost[strcspn(var_relayhost, ", \t\r\n")])
-+ msg_fatal("%s parameter setting must not contain multiple values: %s",
-+ VAR_RELAYHOST, var_relayhost);
-+
-+ /*
-+ * One more sanity check.
-+ */
-+ if ((cp = verp_delims_verify(var_verp_delims)) != 0)
-+ msg_fatal("file %s/%s: parameters %s and %s: %s",
-+ var_config_dir, MAIN_CONF_FILE,
-+ VAR_VERP_DELIMS, VAR_VERP_FILTER, cp);
-+}
-diff -ruN a/src/global/mkmap_open.c b/src/global/mkmap_open.c
---- a/src/global/mkmap_open.c 2009-06-01 12:27:44.000000000 +0000
-+++ b/src/global/mkmap_open.c 2009-06-01 13:08:26.000000000 +0000
-@@ -81,7 +81,7 @@
- * We use a different table (in dict_open.c) when querying maps.
- */
- typedef struct {
-- char *type;
-+ const char *type;
- MKMAP *(*before_open) (const char *);
- } MKMAP_OPEN_INFO;
-
-@@ -156,7 +156,16 @@
- */
- for (mp = mkmap_types; /* void */ ; mp++) {
- if (mp->type == 0)
-+#ifndef NO_DYNAMIC_MAPS
-+ {
-+ static MKMAP_OPEN_INFO oi;
-+ oi.before_open=(MKMAP*(*)(const char*))dict_mkmap_func(type);
-+ oi.type=type;
-+ mp=&oi;
-+ }
-+#else
- msg_fatal("unsupported map type: %s", type);
-+#endif
- if (strcmp(type, mp->type) == 0)
- break;
- }
-diff -ruN a/src/master/Makefile.in b/src/master/Makefile.in
---- a/src/master/Makefile.in 2009-06-01 12:27:44.000000000 +0000
-+++ b/src/master/Makefile.in 2009-06-01 13:08:26.000000000 +0000
-@@ -20,7 +20,7 @@
- INC_DIR = ../../include
- BIN_DIR = ../../libexec
-
--.c.o:; $(CC) $(CFLAGS) -c $*.c
-+.c.o:; $(CC) `for i in $(LIB_OBJ); do [ $$i = $@ ] && echo -fPIC; done` $(CFLAGS) -c $*.c
-
- all: $(PROG) $(LIB)
-
-@@ -39,12 +39,10 @@
- root_tests:
-
- $(LIB): $(LIB_OBJ)
-- $(AR) $(ARFL) $(LIB) $?
-- $(RANLIB) $(LIB)
-+ gcc -shared -Wl,-soname,libpostfix-master.so.1 -o $(LIB) $(LIB_OBJ) $(LIBS) $(SYSLIBS)
-
- $(LIB_DIR)/$(LIB): $(LIB)
- cp $(LIB) $(LIB_DIR)/$(LIB)
-- $(RANLIB) $(LIB_DIR)/$(LIB)
-
- $(BIN_DIR)/$(PROG): $(PROG)
- cp $(PROG) $(BIN_DIR)
-diff -ruN a/src/milter/Makefile.in b/src/milter/Makefile.in
---- a/src/milter/Makefile.in 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/milter/Makefile.in 2009-06-01 13:08:26.000000000 +0000
-@@ -14,7 +14,7 @@
- INC_DIR = ../../include
- MAKES =
-
--.c.o:; $(CC) $(CFLAGS) -c $*.c
-+.c.o:; $(CC) -fPIC $(CFLAGS) -c $*.c
-
- all: $(LIB)
-
-@@ -30,12 +30,10 @@
- root_tests:
-
- $(LIB): $(OBJS)
-- $(AR) $(ARFL) $(LIB) $?
-- $(RANLIB) $(LIB)
-+ gcc -shared -Wl,-soname,libpostfix-milter.so.1 -o $(LIB) $(OBJS) $(LIBS) $(SYSLIBS)
-
- $(LIB_DIR)/$(LIB): $(LIB)
- cp $(LIB) $(LIB_DIR)
-- $(RANLIB) $(LIB_DIR)/$(LIB)
-
- update: $(LIB_DIR)/$(LIB) $(HDRS)
- -for i in $(HDRS); \
-diff -ruN a/src/postconf/postconf.c b/src/postconf/postconf.c
---- a/src/postconf/postconf.c 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/postconf/postconf.c 2009-06-01 13:08:26.000000000 +0000
-@@ -962,6 +962,16 @@
- {
- ARGV *maps_argv;
- int i;
-+#ifndef NO_DYNAMIC_MAPS
-+ char *path;
-+ char *config_dir;
-+
-+ var_config_dir = mystrdup((config_dir = safe_getenv(CONF_ENV_PATH)) != 0 ?
-+ config_dir : DEF_CONFIG_DIR); /* XXX */
-+ path = concatenate(var_config_dir, "/", "dynamicmaps.cf", (char *) 0);
-+ dict_open_dlinfo(path);
-+ myfree(path);
-+#endif
-
- maps_argv = dict_mapnames();
- for (i = 0; i < maps_argv->argc; i++)
-diff -ruN a/src/postconf/postconf.c.orig b/src/postconf/postconf.c.orig
---- a/src/postconf/postconf.c.orig 1970-01-01 00:00:00.000000000 +0000
-+++ b/src/postconf/postconf.c.orig 2009-06-01 13:07:57.000000000 +0000
-@@ -0,0 +1,1218 @@
-+/*++
-+/* NAME
-+/* postconf 1
-+/* SUMMARY
-+/* Postfix configuration utility
-+/* SYNOPSIS
-+/* .fi
-+/* \fBpostconf\fR [\fB-dhnv\fR] [\fB-c \fIconfig_dir\fR]
-+/* [\fIparameter ...\fR]
-+/*
-+/* \fBpostconf\fR [\fB-aAmlv\fR] [\fB-c \fIconfig_dir\fR]
-+/*
-+/* \fBpostconf\fR [\fB-ev\fR] [\fB-c \fIconfig_dir\fR]
-+/* [\fIparameter=value ...\fR]
-+/*
-+/* \fBpostconf\fR [\fB-#v\fR] [\fB-c \fIconfig_dir\fR]
-+/* [\fIparameter ...\fR]
-+/*
-+/* \fBpostconf\fR [\fB-btv\fR] [\fB-c \fIconfig_dir\fR] [\fItemplate_file\fR]
-+/* DESCRIPTION
-+/* The \fBpostconf\fR(1) command displays the actual values
-+/* of configuration parameters, changes configuration parameter
-+/* values, or displays other configuration information about
-+/* the Postfix mail system.
-+/*
-+/* Options:
-+/* .IP \fB-a\fR
-+/* List the available SASL server plug-in types. The SASL
-+/* plug-in type is selected with the \fBsmtpd_sasl_type\fR
-+/* configuration parameter by specifying one of the names
-+/* listed below.
-+/* .RS
-+/* .IP \fBcyrus\fR
-+/* This server plug-in is available when Postfix is built with
-+/* Cyrus SASL support.
-+/* .IP \fBdovecot\fR
-+/* This server plug-in uses the Dovecot authentication server,
-+/* and is available when Postfix is built with any form of SASL
-+/* support.
-+/* .RE
-+/* .IP
-+/* This feature is available with Postfix 2.3 and later.
-+/* .IP \fB-A\fR
-+/* List the available SASL client plug-in types. The SASL
-+/* plug-in type is selected with the \fBsmtp_sasl_type\fR or
-+/* \fBlmtp_sasl_type\fR configuration parameters by specifying
-+/* one of the names listed below.
-+/* .RS
-+/* .IP \fBcyrus\fR
-+/* This client plug-in is available when Postfix is built with
-+/* Cyrus SASL support.
-+/* .RE
-+/* .IP
-+/* This feature is available with Postfix 2.3 and later.
-+/* .IP "\fB-b\fR [\fItemplate_file\fR]"
-+/* Display the message text that appears at the beginning of
-+/* delivery status notification (DSN) messages, with $\fBname\fR
-+/* 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 the \fBbounce_template_file\fR parameter.
-+/* To force selection of the built-in message text templates,
-+/* specify an empty template file name (in shell language: "").
-+/*
-+/* This feature is available with Postfix 2.3 and later.
-+/* .IP "\fB-c \fIconfig_dir\fR"
-+/* The \fBmain.cf\fR configuration file is in the named directory
-+/* instead of the default configuration directory.
-+/* .IP \fB-d\fR
-+/* Print default parameter settings instead of actual settings.
-+/* .IP \fB-e\fR
-+/* Edit the \fBmain.cf\fR 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 metacharacters and whitespace.
-+/* .IP \fB-h\fR
-+/* Show parameter values only, not the ``name = '' label
-+/* that normally precedes the value.
-+/* .IP \fB-l\fR
-+/* List the names of all supported mailbox locking methods.
-+/* Postfix supports the following methods:
-+/* .RS
-+/* .IP \fBflock\fR
-+/* A kernel-based advisory locking method for local files only.
-+/* This locking method is available on systems with a BSD
-+/* compatible library.
-+/* .IP \fBfcntl\fR
-+/* A kernel-based advisory locking method for local and remote files.
-+/* .IP \fBdotlock\fR
-+/* An application-level locking method. An application locks a file
-+/* named \fIfilename\fR by creating a file named \fIfilename\fB.lock\fR.
-+/* The application is expected to remove its own lock file, as well as
-+/* stale lock files that were left behind after abnormal termination.
-+/* .RE
-+/* .IP \fB-m\fR
-+/* List the names of all supported lookup table types. In Postfix
-+/* configuration files,
-+/* lookup tables are specified as \fItype\fB:\fIname\fR, where
-+/* \fItype\fR is one of the types listed below. The table \fIname\fR
-+/* syntax depends on the lookup table type as described in the
-+/* DATABASE_README document.
-+/* .RS
-+/* .IP \fBbtree\fR
-+/* A sorted, balanced tree structure.
-+/* This is available on systems with support for Berkeley DB
-+/* databases.
-+/* .IP \fBcdb\fR
-+/* A read-optimized structure with no support for incremental updates.
-+/* This is available on systems with support for CDB databases.
-+/* .IP \fBcidr\fR
-+/* A table that associates values with Classless Inter-Domain Routing
-+/* (CIDR) patterns. This is described in \fBcidr_table\fR(5).
-+/* .IP \fBdbm\fR
-+/* An indexed file type based on hashing.
-+/* This is available on systems with support for DBM databases.
-+/* .IP \fBenviron\fR
-+/* The UNIX process environment array. The lookup key is the variable
-+/* name. Originally implemented for testing, someone may find this
-+/* useful someday.
-+/* .IP \fBhash\fR
-+/* An indexed file type based on hashing.
-+/* This is available on systems with support for Berkeley DB
-+/* databases.
-+/* .IP "\fBldap\fR (read-only)"
-+/* Perform lookups using the LDAP protocol. This is described
-+/* in \fBldap_table\fR(5).
-+/* .IP "\fBmysql\fR (read-only)"
-+/* Perform lookups using the MYSQL protocol. This is described
-+/* in \fBmysql_table\fR(5).
-+/* .IP "\fBpcre\fR (read-only)"
-+/* A lookup table based on Perl Compatible Regular Expressions. The
-+/* file format is described in \fBpcre_table\fR(5).
-+/* .IP "\fBpgsql\fR (read-only)"
-+/* Perform lookups using the PostgreSQL protocol. This is described
-+/* in \fBpgsql_table\fR(5).
-+/* .IP "\fBproxy\fR (read-only)"
-+/* A lookup table that is implemented via the Postfix
-+/* \fBproxymap\fR(8) service. The table name syntax is
-+/* \fItype\fB:\fIname\fR.
-+/* .IP "\fBregexp\fR (read-only)"
-+/* A lookup table based on regular expressions. The file format is
-+/* described in \fBregexp_table\fR(5).
-+/* .IP \fBsdbm\fR
-+/* An indexed file type based on hashing.
-+/* This is available on systems with support for SDBM databases.
-+/* .IP "\fBstatic\fR (read-only)"
-+/* A table that always returns its name as lookup result. For example,
-+/* \fBstatic:foobar\fR always returns the string \fBfoobar\fR as lookup
-+/* result.
-+/* .IP "\fBtcp\fR (read-only)"
-+/* Perform lookups using a simple request-reply protocol that is
-+/* described in \fBtcp_table\fR(5).
-+/* This feature is not included with the stable Postfix release.
-+/* .IP "\fBunix\fR (read-only)"
-+/* A limited way to query the UNIX authentication database. The
-+/* following tables are implemented:
-+/* .RS
-+/*. IP \fBunix:passwd.byname\fR
-+/* The table is the UNIX password database. The key is a login name.
-+/* The result is a password file entry in \fBpasswd\fR(5) format.
-+/* .IP \fBunix:group.byname\fR
-+/* The table is the UNIX group database. The key is a group name.
-+/* The result is a group file entry in \fBgroup\fR(5) format.
-+/* .RE
-+/* .RE
-+/* .IP
-+/* Other table types may exist depending on how Postfix was built.
-+/* .IP \fB-n\fR
-+/* Print parameter settings that are not left at their built-in
-+/* default value, because they are explicitly specified in main.cf.
-+/* .IP "\fB-t\fR [\fItemplate_file\fR]"
-+/* Display the templates for delivery status notification (DSN)
-+/* messages. To override the built-in templates, specify a
-+/* template file at the end of the command line, or specify a
-+/* template file in main.cf with the \fBbounce_template_file\fR
-+/* parameter. To force selection of the built-in templates,
-+/* specify an empty template file name (in shell language:
-+/* "").
-+/*
-+/* This feature is available with Postfix 2.3 and later.
-+/* .IP \fB-v\fR
-+/* Enable verbose logging for debugging purposes. Multiple \fB-v\fR
-+/* options make the software increasingly verbose.
-+/* .IP \fB-#\fR
-+/* Edit the \fBmain.cf\fR configuration file. The file is copied
-+/* to a temporary file then renamed into place. The parameters
-+/* specified on the command line are commented-out, so that they
-+/* revert to their default values. Specify a list of parameter
-+/* names, not name=value pairs. There is no \fBpostconf\fR command
-+/* to perform the reverse operation.
-+/*
-+/* This feature is available with Postfix 2.6 and later.
-+/* DIAGNOSTICS
-+/* Problems are reported to the standard error stream.
-+/* ENVIRONMENT
-+/* .ad
-+/* .fi
-+/* .IP \fBMAIL_CONFIG\fR
-+/* Directory with Postfix configuration files.
-+/* CONFIGURATION PARAMETERS
-+/* .ad
-+/* .fi
-+/* The following \fBmain.cf\fR parameters are especially relevant to
-+/* this program.
-+/*
-+/* The text below provides only a parameter summary. See
-+/* \fBpostconf\fR(5) for more details including examples.
-+/* .IP "\fBconfig_directory (see 'postconf -d' output)\fR"
-+/* The default location of the Postfix main.cf and master.cf
-+/* configuration files.
-+/* .IP "\fBbounce_template_file (empty)\fR"
-+/* Pathname of a configuration file with bounce message templates.
-+/* FILES
-+/* /etc/postfix/main.cf, Postfix configuration parameters
-+/* SEE ALSO
-+/* bounce(5), bounce template file format
-+/* postconf(5), configuration parameters
-+/* README FILES
-+/* .ad
-+/* .fi
-+/* Use "\fBpostconf readme_directory\fR" or
-+/* "\fBpostconf html_directory\fR" to locate this information.
-+/* .na
-+/* .nf
-+/* DATABASE_README, Postfix lookup table overview
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+/* System library. */
-+
-+#include <sys_defs.h>
-+#include <sys/stat.h>
-+#include <stdio.h> /* rename() */
-+#include <pwd.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <ctype.h>
-+
-+#ifdef USE_PATHS_H
-+#include <paths.h>
-+#endif
-+
-+/* Utility library. */
-+
-+#include <msg.h>
-+#include <vstream.h>
-+#include <msg_vstream.h>
-+#include <get_hostname.h>
-+#include <stringops.h>
-+#include <htable.h>
-+#include <dict.h>
-+#include <safe.h>
-+#include <mymalloc.h>
-+#include <argv.h>
-+#include <split_at.h>
-+#include <vstring_vstream.h>
-+#include <myflock.h>
-+#include <inet_proto.h>
-+#include <argv.h>
-+#include <edit_file.h>
-+
-+/* Global library. */
-+
-+#include <mynetworks.h>
-+#include <mail_conf.h>
-+#include <mail_dict.h>
-+#include <mail_proto.h>
-+#include <mail_version.h>
-+#include <mail_params.h>
-+#include <mail_addr.h>
-+#include <mbox_conf.h>
-+#include <mail_run.h>
-+
-+/* XSASL library. */
-+
-+#include <xsasl.h>
-+
-+ /*
-+ * What we're supposed to be doing.
-+ */
-+#define SHOW_NONDEF (1<<0) /* show non-default settings */
-+#define SHOW_DEFS (1<<1) /* show default setting */
-+#define SHOW_NAME (1<<2) /* show parameter name */
-+#define SHOW_MAPS (1<<3) /* show map types */
-+#define EDIT_MAIN (1<<4) /* edit main.cf */
-+#define SHOW_LOCKS (1<<5) /* show mailbox lock methods */
-+#define SHOW_EVAL (1<<6) /* expand right-hand sides */
-+#define SHOW_SASL_SERV (1<<7) /* show server auth plugin types */
-+#define SHOW_SASL_CLNT (1<<8) /* show client auth plugin types */
-+#define COMMENT_OUT (1<<9) /* #-out selected main.cf entries */
-+
-+ /*
-+ * Lookup table for in-core parameter info.
-+ */
-+HTABLE *param_table;
-+
-+ /*
-+ * Lookup table for external parameter info.
-+ */
-+DICT *text_table;
-+
-+ /*
-+ * Declarations generated by scanning actual C source files.
-+ */
-+#include "time_vars.h"
-+#include "bool_vars.h"
-+#include "int_vars.h"
-+#include "str_vars.h"
-+#include "raw_vars.h"
-+#include "nint_vars.h"
-+
-+ /*
-+ * Manually extracted.
-+ */
-+#include "auto_vars.h"
-+#include "install_vars.h"
-+
-+ /*
-+ * Lookup tables generated by scanning actual C source files.
-+ */
-+static const CONFIG_TIME_TABLE time_table[] = {
-+#include "time_table.h"
-+ 0,
-+};
-+
-+static const CONFIG_BOOL_TABLE bool_table[] = {
-+#include "bool_table.h"
-+ 0,
-+};
-+
-+static const CONFIG_INT_TABLE int_table[] = {
-+#include "int_table.h"
-+ 0,
-+};
-+
-+static const CONFIG_STR_TABLE str_table[] = {
-+#include "str_table.h"
-+#include "auto_table.h" /* XXX */
-+#include "install_table.h"
-+ 0,
-+};
-+
-+static const CONFIG_RAW_TABLE raw_table[] = {
-+#include "raw_table.h"
-+ 0,
-+};
-+
-+static const CONFIG_NINT_TABLE nint_table[] = {
-+#include "nint_table.h"
-+ 0,
-+};
-+
-+ /*
-+ * Parameters with default values obtained via function calls.
-+ */
-+char *var_myhostname;
-+char *var_mydomain;
-+char *var_mynetworks;
-+
-+static const char *check_myhostname(void);
-+static const char *check_mydomainname(void);
-+static const char *check_mynetworks(void);
-+
-+static const CONFIG_STR_FN_TABLE str_fn_table[] = {
-+ VAR_MYHOSTNAME, check_myhostname, &var_myhostname, 1, 0,
-+ VAR_MYDOMAIN, check_mydomainname, &var_mydomain, 1, 0,
-+ 0,
-+};
-+static const CONFIG_STR_FN_TABLE str_fn_table_2[] = {
-+ VAR_MYNETWORKS, check_mynetworks, &var_mynetworks, 1, 0,
-+ 0,
-+};
-+
-+ /*
-+ * XXX Global so that call-backs can see it.
-+ */
-+static int cmd_mode = SHOW_NAME;
-+
-+/* check_myhostname - lookup hostname and validate */
-+
-+static const char *check_myhostname(void)
-+{
-+ static const char *name;
-+ const char *dot;
-+ const char *domain;
-+
-+ /*
-+ * Use cached result.
-+ */
-+ if (name)
-+ return (name);
-+
-+ /*
-+ * If the local machine name is not in FQDN form, try to append the
-+ * contents of $mydomain.
-+ */
-+ name = get_hostname();
-+ if ((dot = strchr(name, '.')) == 0) {
-+ if ((domain = mail_conf_lookup_eval(VAR_MYDOMAIN)) == 0)
-+ domain = DEF_MYDOMAIN;
-+ name = concatenate(name, ".", domain, (char *) 0);
-+ }
-+ return (name);
-+}
-+
-+/* get_myhostname - look up and store my hostname */
-+
-+static void get_myhostname(void)
-+{
-+ const char *name;
-+
-+ if ((name = mail_conf_lookup_eval(VAR_MYHOSTNAME)) == 0)
-+ name = check_myhostname();
-+ var_myhostname = mystrdup(name);
-+}
-+
-+/* check_mydomainname - lookup domain name and validate */
-+
-+static const char *check_mydomainname(void)
-+{
-+ char *dot;
-+
-+ /*
-+ * Use the hostname when it is not a FQDN ("foo"), or when the hostname
-+ * actually is a domain name ("foo.com").
-+ */
-+ if (var_myhostname == 0)
-+ get_myhostname();
-+ if ((dot = strchr(var_myhostname, '.')) == 0 || strchr(dot + 1, '.') == 0)
-+ return (DEF_MYDOMAIN);
-+ return (dot + 1);
-+}
-+
-+/* check_mynetworks - lookup network address list */
-+
-+static const char *check_mynetworks(void)
-+{
-+ INET_PROTO_INFO *proto_info;
-+ const char *junk;
-+
-+ if (var_inet_interfaces == 0) {
-+ if ((cmd_mode & SHOW_DEFS)
-+ || (junk = mail_conf_lookup_eval(VAR_INET_INTERFACES)) == 0)
-+ junk = DEF_INET_INTERFACES;
-+ var_inet_interfaces = mystrdup(junk);
-+ }
-+ if (var_mynetworks_style == 0) {
-+ if ((cmd_mode & SHOW_DEFS)
-+ || (junk = mail_conf_lookup_eval(VAR_MYNETWORKS_STYLE)) == 0)
-+ junk = DEF_MYNETWORKS_STYLE;
-+ var_mynetworks_style = mystrdup(junk);
-+ }
-+ if (var_inet_protocols == 0) {
-+ if ((cmd_mode & SHOW_DEFS)
-+ || (junk = mail_conf_lookup_eval(VAR_INET_PROTOCOLS)) == 0)
-+ junk = DEF_INET_PROTOCOLS;
-+ var_inet_protocols = mystrdup(junk);
-+ proto_info = inet_proto_init(VAR_INET_PROTOCOLS, var_inet_protocols);
-+ }
-+ return (mynetworks());
-+}
-+
-+/* edit_parameters - edit parameter file */
-+
-+static void edit_parameters(int cmd_mode, int argc, char **argv)
-+{
-+ char *config_dir;
-+ char *path;
-+ EDIT_FILE *ep;
-+ VSTREAM *src;
-+ VSTREAM *dst;
-+ VSTRING *buf = vstring_alloc(100);
-+ VSTRING *key = vstring_alloc(10);
-+ char *cp;
-+ char *edit_key;
-+ char *edit_val;
-+ HTABLE *table;
-+ struct cvalue {
-+ char *value;
-+ int found;
-+ };
-+ struct cvalue *cvalue;
-+ HTABLE_INFO **ht_info;
-+ HTABLE_INFO **ht;
-+ int interesting;
-+ const char *err;
-+
-+ /*
-+ * Store command-line parameters for quick lookup.
-+ */
-+ table = htable_create(argc);
-+ while ((cp = *argv++) != 0) {
-+ if (strchr(cp, '\n') != 0)
-+ msg_fatal("-e or -# accepts no multi-line input");
-+ while (ISSPACE(*cp))
-+ cp++;
-+ if (*cp == '#')
-+ msg_fatal("-e or -# accepts no comment input");
-+ if (cmd_mode & EDIT_MAIN) {
-+ if ((err = split_nameval(cp, &edit_key, &edit_val)) != 0)
-+ msg_fatal("%s: \"%s\"", err, cp);
-+ } else if (cmd_mode & COMMENT_OUT) {
-+ if (*cp == 0)
-+ msg_fatal("-# requires non-blank parameter names");
-+ if (strchr(cp, '=') != 0)
-+ msg_fatal("-# requires parameter names only");
-+ edit_key = mystrdup(cp);
-+ trimblanks(edit_key, 0);
-+ edit_val = 0;
-+ } else {
-+ msg_panic("edit_parameters: unknown mode %d", cmd_mode);
-+ }
-+ cvalue = (struct cvalue *) mymalloc(sizeof(*cvalue));
-+ cvalue->value = edit_val;
-+ cvalue->found = 0;
-+ htable_enter(table, edit_key, (char *) cvalue);
-+ }
-+
-+ /*
-+ * XXX Avoid code duplication by better code decomposition.
-+ */
-+ if (var_config_dir)
-+ myfree(var_config_dir);
-+ var_config_dir = mystrdup((config_dir = safe_getenv(CONF_ENV_PATH)) != 0 ?
-+ config_dir : DEF_CONFIG_DIR); /* XXX */
-+ set_mail_conf_str(VAR_CONFIG_DIR, var_config_dir);
-+
-+ /*
-+ * Open a temp file for the result. This uses a deterministic name so we
-+ * don't leave behind thrash with random names.
-+ */
-+ path = concatenate(var_config_dir, "/", "main.cf", (char *) 0);
-+ if ((ep = edit_file_open(path, O_CREAT | O_WRONLY, 0644)) == 0)
-+ msg_fatal("open %s%s: %m", path, EDIT_FILE_SUFFIX);
-+ dst = ep->tmp_fp;
-+
-+ /*
-+ * Open the original file for input.
-+ */
-+ if ((src = vstream_fopen(path, O_RDONLY, 0)) == 0) {
-+ /* OK to delete, since we control the temp file name exclusively. */
-+ (void) unlink(ep->tmp_path);
-+ msg_fatal("open %s for reading: %m", path);
-+ }
-+
-+ /*
-+ * Copy original file to temp file, while replacing parameters on the
-+ * fly. Issue warnings for names found multiple times.
-+ */
-+#define STR(x) vstring_str(x)
-+
-+ interesting = 0;
-+ while (vstring_get(buf, src) != VSTREAM_EOF) {
-+ for (cp = STR(buf); ISSPACE(*cp) /* including newline */ ; cp++)
-+ /* void */ ;
-+ /* Copy comment, all-whitespace, or empty line. */
-+ if (*cp == '#' || *cp == 0) {
-+ vstream_fputs(STR(buf), dst);
-+ }
-+ /* Copy, skip or replace continued text. */
-+ else if (cp > STR(buf)) {
-+ if (interesting == 0)
-+ vstream_fputs(STR(buf), dst);
-+ else if (cmd_mode & COMMENT_OUT)
-+ vstream_fprintf(dst, "#%s", STR(buf));
-+ }
-+ /* Copy or replace start of logical line. */
-+ else {
-+ vstring_strncpy(key, cp, strcspn(cp, " \t\r\n="));
-+ cvalue = (struct cvalue *) htable_find(table, STR(key));
-+ if ((interesting = !!cvalue) != 0) {
-+ if (cvalue->found++ == 1)
-+ msg_warn("%s: multiple entries for \"%s\"", path, STR(key));
-+ if (cmd_mode & EDIT_MAIN)
-+ vstream_fprintf(dst, "%s = %s\n", STR(key), cvalue->value);
-+ else if (cmd_mode & COMMENT_OUT)
-+ vstream_fprintf(dst, "#%s", cp);
-+ else
-+ msg_panic("edit_parameters: unknown mode %d", cmd_mode);
-+ } else {
-+ vstream_fputs(STR(buf), dst);
-+ }
-+ }
-+ }
-+
-+ /*
-+ * Generate new entries for parameters that were not found.
-+ */
-+ if (cmd_mode & EDIT_MAIN) {
-+ for (ht_info = ht = htable_list(table); *ht; ht++) {
-+ cvalue = (struct cvalue *) ht[0]->value;
-+ if (cvalue->found == 0)
-+ vstream_fprintf(dst, "%s = %s\n", ht[0]->key, cvalue->value);
-+ }
-+ myfree((char *) ht_info);
-+ }
-+
-+ /*
-+ * When all is well, rename the temp file to the original one.
-+ */
-+ if (vstream_fclose(src))
-+ msg_fatal("read %s: %m", path);
-+ if (edit_file_close(ep) != 0)
-+ msg_fatal("close %s%s: %m", path, EDIT_FILE_SUFFIX);
-+
-+ /*
-+ * Cleanup.
-+ */
-+ myfree(path);
-+ vstring_free(buf);
-+ vstring_free(key);
-+ htable_free(table, myfree);
-+}
-+
-+/* read_parameters - read parameter info from file */
-+
-+static void read_parameters(void)
-+{
-+ char *config_dir;
-+ char *path;
-+
-+ /*
-+ * A direct rip-off of mail_conf_read(). XXX Avoid code duplication by
-+ * better code decomposition.
-+ */
-+ dict_unknown_allowed = 1;
-+ if (var_config_dir)
-+ myfree(var_config_dir);
-+ var_config_dir = mystrdup((config_dir = safe_getenv(CONF_ENV_PATH)) != 0 ?
-+ config_dir : DEF_CONFIG_DIR); /* XXX */
-+ set_mail_conf_str(VAR_CONFIG_DIR, var_config_dir);
-+ path = concatenate(var_config_dir, "/", "main.cf", (char *) 0);
-+ dict_load_file(CONFIG_DICT, path);
-+ myfree(path);
-+}
-+
-+/* set_parameters - set parameter values from default or explicit setting */
-+
-+static void set_parameters(void)
-+{
-+
-+ /*
-+ * Populate the configuration parameter dictionary with default settings
-+ * or with actual settings.
-+ *
-+ * Iterate over each entry in str_fn_table, str_fn_table_2, time_table,
-+ * bool_table, int_table, str_table, and raw_table. Look up each
-+ * parameter name in the configuration parameter dictionary. If the
-+ * parameter is not set, take the default value, or take the value from
-+ * main.cf, without doing $name expansions. This includes converting
-+ * default values from numeric/boolean internal forms to external string
-+ * form.
-+ *
-+ * Once the configuration parameter dictionary is populated, printing a
-+ * parameter setting is a matter of querying the configuration parameter
-+ * dictionary, optionally expanding of $name values, and printing the
-+ * result.
-+ */
-+}
-+
-+/* hash_parameters - hash all parameter names so we can find and sort them */
-+
-+static void hash_parameters(void)
-+{
-+ const CONFIG_TIME_TABLE *ctt;
-+ const CONFIG_BOOL_TABLE *cbt;
-+ const CONFIG_INT_TABLE *cit;
-+ const CONFIG_STR_TABLE *cst;
-+ const CONFIG_STR_FN_TABLE *csft;
-+ const CONFIG_RAW_TABLE *rst;
-+ const CONFIG_NINT_TABLE *nst;
-+
-+ param_table = htable_create(100);
-+
-+ for (ctt = time_table; ctt->name; ctt++)
-+ htable_enter(param_table, ctt->name, (char *) ctt);
-+ for (cbt = bool_table; cbt->name; cbt++)
-+ htable_enter(param_table, cbt->name, (char *) cbt);
-+ for (cit = int_table; cit->name; cit++)
-+ htable_enter(param_table, cit->name, (char *) cit);
-+ for (cst = str_table; cst->name; cst++)
-+ htable_enter(param_table, cst->name, (char *) cst);
-+ for (csft = str_fn_table; csft->name; csft++)
-+ htable_enter(param_table, csft->name, (char *) csft);
-+ for (csft = str_fn_table_2; csft->name; csft++)
-+ htable_enter(param_table, csft->name, (char *) csft);
-+ for (rst = raw_table; rst->name; rst++)
-+ htable_enter(param_table, rst->name, (char *) rst);
-+ for (nst = nint_table; nst->name; nst++)
-+ htable_enter(param_table, nst->name, (char *) nst);
-+}
-+
-+/* show_strval - show string-valued parameter */
-+
-+static void show_strval(int mode, const char *name, const char *value)
-+{
-+ if (mode & SHOW_EVAL)
-+ value = mail_conf_eval(value);
-+
-+ if (mode & SHOW_NAME) {
-+ vstream_printf("%s = %s\n", name, value);
-+ } else {
-+ vstream_printf("%s\n", value);
-+ }
-+}
-+
-+/* show_intval - show integer-valued parameter */
-+
-+static void show_intval(int mode, const char *name, int value)
-+{
-+ if (mode & SHOW_NAME) {
-+ vstream_printf("%s = %d\n", name, value);
-+ } else {
-+ vstream_printf("%d\n", value);
-+ }
-+}
-+
-+/* print_bool - print boolean parameter */
-+
-+static void print_bool(int mode, CONFIG_BOOL_TABLE *cbt)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, cbt->name, cbt->defval ? "yes" : "no");
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, cbt->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, cbt->name, cbt->defval ? "yes" : "no");
-+ } else {
-+ show_strval(mode, cbt->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, cbt->name, value);
-+ }
-+ }
-+}
-+
-+/* print_time - print relative time parameter */
-+
-+static void print_time(int mode, CONFIG_TIME_TABLE *ctt)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, ctt->name, ctt->defval);
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, ctt->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, ctt->name, ctt->defval);
-+ } else {
-+ show_strval(mode, ctt->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, ctt->name, value);
-+ }
-+ }
-+}
-+
-+/* print_int - print integer parameter */
-+
-+static void print_int(int mode, CONFIG_INT_TABLE *cit)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_intval(mode, cit->name, cit->defval);
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, cit->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_intval(mode, cit->name, cit->defval);
-+ } else {
-+ show_strval(mode, cit->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, cit->name, value);
-+ }
-+ }
-+}
-+
-+/* print_str - print string parameter */
-+
-+static void print_str(int mode, CONFIG_STR_TABLE *cst)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, cst->name, cst->defval);
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, cst->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, cst->name, cst->defval);
-+ } else {
-+ show_strval(mode, cst->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, cst->name, value);
-+ }
-+ }
-+}
-+
-+/* print_str_fn - print string-function parameter */
-+
-+static void print_str_fn(int mode, CONFIG_STR_FN_TABLE *csft)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, csft->name, csft->defval());
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, csft->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, csft->name, csft->defval());
-+ } else {
-+ show_strval(mode, csft->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, csft->name, value);
-+ }
-+ }
-+}
-+
-+/* print_str_fn_2 - print string-function parameter */
-+
-+static void print_str_fn_2(int mode, CONFIG_STR_FN_TABLE *csft)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, csft->name, csft->defval());
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, csft->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, csft->name, csft->defval());
-+ } else {
-+ show_strval(mode, csft->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, csft->name, value);
-+ }
-+ }
-+}
-+
-+/* print_raw - print raw string parameter */
-+
-+static void print_raw(int mode, CONFIG_RAW_TABLE * rst)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_EVAL)
-+ msg_warn("parameter %s expands at run-time", rst->name);
-+ mode &= ~SHOW_EVAL;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, rst->name, rst->defval);
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, rst->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, rst->name, rst->defval);
-+ } else {
-+ show_strval(mode, rst->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, rst->name, value);
-+ }
-+ }
-+}
-+
-+/* print_nint - print new integer parameter */
-+
-+static void print_nint(int mode, CONFIG_NINT_TABLE * rst)
-+{
-+ const char *value;
-+
-+ if (mode & SHOW_EVAL)
-+ msg_warn("parameter %s expands at run-time", rst->name);
-+ mode &= ~SHOW_EVAL;
-+
-+ if (mode & SHOW_DEFS) {
-+ show_strval(mode, rst->name, rst->defval);
-+ } else {
-+ value = dict_lookup(CONFIG_DICT, rst->name);
-+ if ((mode & SHOW_NONDEF) == 0) {
-+ if (value == 0) {
-+ show_strval(mode, rst->name, rst->defval);
-+ } else {
-+ show_strval(mode, rst->name, value);
-+ }
-+ } else {
-+ if (value != 0)
-+ show_strval(mode, rst->name, value);
-+ }
-+ }
-+}
-+
-+/* print_parameter - show specific parameter */
-+
-+static void print_parameter(int mode, char *ptr)
-+{
-+
-+#define INSIDE(p,t) (ptr >= (char *) t && ptr < ((char *) t) + sizeof(t))
-+
-+ /*
-+ * This is gross, but the best we can do on short notice.
-+ */
-+ if (INSIDE(ptr, time_table))
-+ print_time(mode, (CONFIG_TIME_TABLE *) ptr);
-+ if (INSIDE(ptr, bool_table))
-+ print_bool(mode, (CONFIG_BOOL_TABLE *) ptr);
-+ if (INSIDE(ptr, int_table))
-+ print_int(mode, (CONFIG_INT_TABLE *) ptr);
-+ if (INSIDE(ptr, str_table))
-+ print_str(mode, (CONFIG_STR_TABLE *) ptr);
-+ if (INSIDE(ptr, str_fn_table))
-+ print_str_fn(mode, (CONFIG_STR_FN_TABLE *) ptr);
-+ if (INSIDE(ptr, str_fn_table_2))
-+ print_str_fn_2(mode, (CONFIG_STR_FN_TABLE *) ptr);
-+ if (INSIDE(ptr, raw_table))
-+ print_raw(mode, (CONFIG_RAW_TABLE *) ptr);
-+ if (INSIDE(ptr, nint_table))
-+ print_nint(mode, (CONFIG_NINT_TABLE *) ptr);
-+ if (msg_verbose)
-+ vstream_fflush(VSTREAM_OUT);
-+}
-+
-+/* comp_names - qsort helper */
-+
-+static int comp_names(const void *a, const void *b)
-+{
-+ HTABLE_INFO **ap = (HTABLE_INFO **) a;
-+ HTABLE_INFO **bp = (HTABLE_INFO **) b;
-+
-+ return (strcmp(ap[0]->key, bp[0]->key));
-+}
-+
-+/* show_maps - show available maps */
-+
-+static void show_maps(void)
-+{
-+ ARGV *maps_argv;
-+ int i;
-+
-+ maps_argv = dict_mapnames();
-+ for (i = 0; i < maps_argv->argc; i++)
-+ vstream_printf("%s\n", maps_argv->argv[i]);
-+ argv_free(maps_argv);
-+}
-+
-+/* show_locks - show available mailbox locking methods */
-+
-+static void show_locks(void)
-+{
-+ ARGV *locks_argv;
-+ int i;
-+
-+ locks_argv = mbox_lock_names();
-+ for (i = 0; i < locks_argv->argc; i++)
-+ vstream_printf("%s\n", locks_argv->argv[i]);
-+ argv_free(locks_argv);
-+}
-+
-+/* show_sasl - show SASL plug-in types */
-+
-+static void show_sasl(int what)
-+{
-+ ARGV *sasl_argv;
-+ int i;
-+
-+ sasl_argv = (what & SHOW_SASL_SERV) ? xsasl_server_types() :
-+ xsasl_client_types();
-+ for (i = 0; i < sasl_argv->argc; i++)
-+ vstream_printf("%s\n", sasl_argv->argv[i]);
-+ argv_free(sasl_argv);
-+}
-+
-+/* show_parameters - show parameter info */
-+
-+static void show_parameters(int mode, char **names)
-+{
-+ HTABLE_INFO **list;
-+ HTABLE_INFO **ht;
-+ char **namep;
-+ char *value;
-+
-+ /*
-+ * Show all parameters.
-+ */
-+ if (*names == 0) {
-+ list = htable_list(param_table);
-+ qsort((char *) list, param_table->used, sizeof(*list), comp_names);
-+ for (ht = list; *ht; ht++)
-+ print_parameter(mode, ht[0]->value);
-+ myfree((char *) list);
-+ return;
-+ }
-+
-+ /*
-+ * Show named parameters.
-+ */
-+ for (namep = names; *namep; namep++) {
-+ if ((value = htable_find(param_table, *namep)) == 0) {
-+ msg_warn("%s: unknown parameter", *namep);
-+ } else {
-+ print_parameter(mode, value);
-+ }
-+ }
-+}
-+
-+MAIL_VERSION_STAMP_DECLARE;
-+
-+/* main */
-+
-+int main(int argc, char **argv)
-+{
-+ int ch;
-+ int fd;
-+ struct stat st;
-+ int junk;
-+ ARGV *ext_argv = 0;
-+
-+ /*
-+ * Fingerprint executables and core dumps.
-+ */
-+ MAIL_VERSION_STAMP_ALLOCATE;
-+
-+ /*
-+ * Be consistent with file permissions.
-+ */
-+ umask(022);
-+
-+ /*
-+ * To minimize confusion, make sure that the standard file descriptors
-+ * are open before opening anything else. XXX Work around for 44BSD where
-+ * fstat can return EBADF on an open file descriptor.
-+ */
-+ for (fd = 0; fd < 3; fd++)
-+ if (fstat(fd, &st) == -1
-+ && (close(fd), open("/dev/null", O_RDWR, 0)) != fd)
-+ msg_fatal("open /dev/null: %m");
-+
-+ /*
-+ * Set up logging.
-+ */
-+ msg_vstream_init(argv[0], VSTREAM_ERR);
-+
-+ /*
-+ * Parse JCL.
-+ */
-+ while ((ch = GETOPT(argc, argv, "aAbc:deE#hmlntv")) > 0) {
-+ switch (ch) {
-+ case 'a':
-+ cmd_mode |= SHOW_SASL_SERV;
-+ break;
-+ case 'A':
-+ cmd_mode |= SHOW_SASL_CLNT;
-+ break;
-+ case 'b':
-+ if (ext_argv)
-+ msg_fatal("specify one of -b and -t");
-+ ext_argv = argv_alloc(2);
-+ argv_add(ext_argv, "bounce", "-SVnexpand_templates", (char *) 0);
-+ break;
-+ case 'c':
-+ if (setenv(CONF_ENV_PATH, optarg, 1) < 0)
-+ msg_fatal("out of memory");
-+ break;
-+ case 'd':
-+ cmd_mode |= SHOW_DEFS;
-+ break;
-+ case 'e':
-+ cmd_mode |= EDIT_MAIN;
-+ break;
-+
-+ /*
-+ * People, this does not work unless you properly handle default
-+ * settings. For example, fast_flush_domains = $relay_domains
-+ * must not evaluate to the empty string when relay_domains is
-+ * left at its default setting of $mydestination.
-+ */
-+#if 0
-+ case 'E':
-+ cmd_mode |= SHOW_EVAL;
-+ break;
-+#endif
-+ case '#':
-+ cmd_mode = COMMENT_OUT;
-+ break;
-+
-+ case 'h':
-+ cmd_mode &= ~SHOW_NAME;
-+ break;
-+ case 'l':
-+ cmd_mode |= SHOW_LOCKS;
-+ break;
-+ case 'm':
-+ cmd_mode |= SHOW_MAPS;
-+ break;
-+ case 'n':
-+ cmd_mode |= SHOW_NONDEF;
-+ break;
-+ case 't':
-+ if (ext_argv)
-+ msg_fatal("specify one of -b and -t");
-+ ext_argv = argv_alloc(2);
-+ argv_add(ext_argv, "bounce", "-SVndump_templates", (char *) 0);
-+ break;
-+ case 'v':
-+ msg_verbose++;
-+ break;
-+ default:
-+ msg_fatal("usage: %s [-a (server SASL types)] [-A (client SASL types)] [-b (bounce templates)] [-c config_dir] [-d (defaults)] [-e (edit)] [-# (comment-out)] [-h (no names)] [-l (lock types)] [-m (map types)] [-n (non-defaults)] [-v] [name...]", argv[0]);
-+ }
-+ }
-+
-+ /*
-+ * Sanity check.
-+ */
-+ junk = (cmd_mode & (SHOW_DEFS | SHOW_NONDEF | SHOW_MAPS | SHOW_LOCKS | EDIT_MAIN | SHOW_SASL_SERV | SHOW_SASL_CLNT | COMMENT_OUT));
-+ if (junk != 0 && ((junk != SHOW_DEFS && junk != SHOW_NONDEF
-+ && junk != SHOW_MAPS && junk != SHOW_LOCKS && junk != EDIT_MAIN
-+ && junk != SHOW_SASL_SERV && junk != SHOW_SASL_CLNT
-+ && junk != COMMENT_OUT)
-+ || ext_argv != 0))
-+ msg_fatal("specify one of -a, -A, -b, -d, -e, -#, -m, -l and -n");
-+
-+ /*
-+ * Display bounce template information and exit.
-+ */
-+ if (ext_argv) {
-+ if (argv[optind]) {
-+ if (argv[optind + 1])
-+ msg_fatal("options -b and -t require at most one template file");
-+ argv_add(ext_argv, "-o",
-+ concatenate(VAR_BOUNCE_TMPL, "=",
-+ argv[optind], (char *) 0),
-+ (char *) 0);
-+ }
-+ /* Grr... */
-+ argv_add(ext_argv, "-o",
-+ concatenate(VAR_QUEUE_DIR, "=", ".", (char *) 0),
-+ (char *) 0);
-+ mail_conf_read();
-+ mail_run_replace(var_daemon_dir, ext_argv->argv);
-+ /* NOTREACHED */
-+ }
-+
-+ /*
-+ * If showing map types, show them and exit
-+ */
-+ if (cmd_mode & SHOW_MAPS) {
-+ mail_dict_init();
-+ show_maps();
-+ }
-+
-+ /*
-+ * If showing locking methods, show them and exit
-+ */
-+ else if (cmd_mode & SHOW_LOCKS) {
-+ show_locks();
-+ }
-+
-+ /*
-+ * If showing SASL plug-in types, show them and exit
-+ */
-+ else if (cmd_mode & SHOW_SASL_SERV) {
-+ show_sasl(SHOW_SASL_SERV);
-+ } else if (cmd_mode & SHOW_SASL_CLNT) {
-+ show_sasl(SHOW_SASL_CLNT);
-+ }
-+
-+ /*
-+ * Edit main.cf.
-+ */
-+ else if (cmd_mode & (EDIT_MAIN | COMMENT_OUT)) {
-+ edit_parameters(cmd_mode, argc - optind, argv + optind);
-+ }
-+
-+ /*
-+ * If showing non-default values, read main.cf.
-+ */
-+ else {
-+ if ((cmd_mode & SHOW_DEFS) == 0) {
-+ read_parameters();
-+ set_parameters();
-+ }
-+
-+ /*
-+ * Throw together all parameters and show the asked values.
-+ */
-+ hash_parameters();
-+ show_parameters(cmd_mode, argv + optind);
-+ }
-+ vstream_fflush(VSTREAM_OUT);
-+ exit(0);
-+}
-diff -ruN a/src/postmap/postmap.c b/src/postmap/postmap.c
---- a/src/postmap/postmap.c 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/postmap/postmap.c 2009-06-01 13:08:26.000000000 +0000
-@@ -5,7 +5,7 @@
- /* Postfix lookup table management
- /* SYNOPSIS
- /* .fi
--/* \fBpostmap\fR [\fB-Nbfhimnoprsvw\fR] [\fB-c \fIconfig_dir\fR]
-+/* \fBpostmap\fR [\fB-Nbfhimnoprsuvw\fR] [\fB-c \fIconfig_dir\fR]
- /* [\fB-d \fIkey\fR] [\fB-q \fIkey\fR]
- /* [\fIfile_type\fR:]\fIfile_name\fR ...
- /* DESCRIPTION
-@@ -151,6 +151,8 @@
- /* .sp
- /* This feature is available in Postfix version 2.2 and later,
- /* and is not available for all database types.
-+/* .IP \fB-u\fR
-+/* Upgrade the database to the current version.
- /* .IP \fB-v\fR
- /* Enable verbose logging for debugging purposes. Multiple \fB-v\fR
- /* options make the software increasingly verbose.
-@@ -723,6 +725,18 @@
- dict_close(dict);
- }
-
-+/* postmap_upgrade - upgrade a map */
-+
-+static int postmap_upgrade(const char *map_type, const char *map_name)
-+{
-+ DICT *dict;
-+
-+ dict = dict_open3(map_type, map_name, O_RDWR,
-+ DICT_FLAG_LOCK|DICT_FLAG_UPGRADE);
-+ dict_close(dict);
-+ return (dict != 0);
-+}
-+
- /* usage - explain */
-
- static NORETURN usage(char *myname)
-@@ -743,6 +757,7 @@
- int postmap_flags = POSTMAP_FLAG_AS_OWNER | POSTMAP_FLAG_SAVE_PERM;
- int open_flags = O_RDWR | O_CREAT | O_TRUNC;
- int dict_flags = DICT_FLAG_DUP_WARN | DICT_FLAG_FOLD_FIX;
-+ int upgrade = 0;
- char *query = 0;
- char *delkey = 0;
- int sequence = 0;
-@@ -787,7 +802,7 @@
- /*
- * Parse JCL.
- */
-- while ((ch = GETOPT(argc, argv, "Nbc:d:fhimnopq:rsvw")) > 0) {
-+ while ((ch = GETOPT(argc, argv, "Nbc:d:fhimnopq:rsuvw")) > 0) {
- switch (ch) {
- default:
- usage(argv[0]);
-@@ -804,8 +819,8 @@
- msg_fatal("out of memory");
- break;
- case 'd':
-- if (sequence || query || delkey)
-- msg_fatal("specify only one of -s -q or -d");
-+ if (sequence || query || delkey || upgrade)
-+ msg_fatal("specify only one of -s -q -u or -d");
- delkey = optarg;
- break;
- case 'f':
-@@ -831,8 +846,8 @@
- postmap_flags &= ~POSTMAP_FLAG_SAVE_PERM;
- break;
- case 'q':
-- if (sequence || query || delkey)
-- msg_fatal("specify only one of -s -q or -d");
-+ if (sequence || query || delkey || upgrade)
-+ msg_fatal("specify only one of -s -q -u or -d");
- query = optarg;
- break;
- case 'r':
-@@ -840,10 +855,15 @@
- dict_flags |= DICT_FLAG_DUP_REPLACE;
- break;
- case 's':
-- if (query || delkey)
-- msg_fatal("specify only one of -s or -q or -d");
-+ if (query || delkey || upgrade)
-+ msg_fatal("specify only one of -s or -q or -u or -d");
- sequence = 1;
- break;
-+ case 'u':
-+ if (sequence || query || delkey || upgrade)
-+ msg_fatal("specify only one of -s -q -u or -d");
-+ upgrade=1;
-+ break;
- case 'v':
- msg_verbose++;
- break;
-@@ -914,6 +934,21 @@
- exit(0);
- }
- exit(1);
-+ } else if (upgrade) { /* Upgrade the map(s) */
-+ int success = 1;
-+ if (optind + 1 > argc)
-+ usage(argv[0]);
-+ while (optind < argc) {
-+ if ((path_name = split_at(argv[optind], ':')) != 0) {
-+ success &= postmap_upgrade(argv[optind], path_name);
-+ } else {
-+ success &= postmap_upgrade(var_db_type, path_name);
-+ }
-+ if (!success)
-+ exit(1);
-+ optind++;
-+ }
-+ exit(0);
- } else { /* create/update map(s) */
- if (optind + 1 > argc)
- usage(argv[0]);
-diff -ruN a/src/tls/Makefile.in b/src/tls/Makefile.in
---- a/src/tls/Makefile.in 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/tls/Makefile.in 2009-06-01 13:08:26.000000000 +0000
-@@ -22,7 +22,7 @@
- INC_DIR = ../../include
- MAKES =
-
--.c.o:; $(CC) $(CFLAGS) -c $*.c
-+.c.o:; $(CC) -fPIC $(CFLAGS) -c $*.c
-
- all: $(LIB)
-
-@@ -38,12 +38,10 @@
- root_tests:
-
- $(LIB): $(OBJS)
-- $(AR) $(ARFL) $(LIB) $?
-- $(RANLIB) $(LIB)
-+ gcc -shared -Wl,-soname,libpostfix-tls.so.1 -o $(LIB) $(OBJS) $(LIBS) $(SYSLIBS)
-
- $(LIB_DIR)/$(LIB): $(LIB)
- cp $(LIB) $(LIB_DIR)
-- $(RANLIB) $(LIB_DIR)/$(LIB)
-
- update: $(LIB_DIR)/$(LIB) $(HDRS)
- -for i in $(HDRS); \
-diff -ruN a/src/util/Makefile.in b/src/util/Makefile.in
---- a/src/util/Makefile.in 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/util/Makefile.in 2009-06-01 13:08:26.000000000 +0000
-@@ -31,21 +31,23 @@
- vstream_popen.c vstring.c vstring_vstream.c watchdog.c writable.c \
- write_buf.c write_wait.c sane_basename.c format_tv.c allspace.c \
- allascii.c load_file.c killme_after.c vstream_tweak.c upass_connect.c \
-- upass_listen.c upass_trigger.c edit_file.c inet_windowsize.c
-+ upass_listen.c upass_trigger.c edit_file.c inet_windowsize.c \
-+ load_lib.c
- OBJS = alldig.o allprint.o argv.o argv_split.o attr_clnt.o attr_print0.o \
- attr_print64.o attr_print_plain.o attr_scan0.o attr_scan64.o \
- attr_scan_plain.o auto_clnt.o base64_code.o basename.o binhash.o \
- chroot_uid.o cidr_match.o clean_env.o close_on_exec.o concatenate.o \
- ctable.o dict.o dict_alloc.o dict_cdb.o dict_cidr.o dict_db.o \
- dict_dbm.o dict_debug.o dict_env.o dict_ht.o dict_ni.o dict_nis.o \
-- dict_nisplus.o dict_open.o dict_pcre.o dict_regexp.o dict_sdbm.o \
-- dict_static.o dict_tcp.o dict_unix.o dir_forest.o doze.o dummy_read.o \
-+ dict_nisplus.o dict_open.o dict_regexp.o \
-+ dict_static.o dict_unix.o dir_forest.o doze.o dummy_read.o \
- dummy_write.o duplex_pipe.o environ.o events.o exec_command.o \
- fifo_listen.o fifo_trigger.o file_limit.o find_inet.o fsspace.o \
- fullname.o get_domainname.o get_hostname.o hex_code.o hex_quote.o \
- host_port.o htable.o inet_addr_host.o inet_addr_list.o \
- inet_addr_local.o inet_connect.o inet_listen.o inet_proto.o \
- inet_trigger.o line_wrap.o lowercase.o lstat_as.o mac_expand.o \
-+ load_lib.o \
- mac_parse.o make_dirs.o mask_addr.o match_list.o match_ops.o msg.o \
- msg_output.o msg_syslog.o msg_vstream.o mvect.o myaddrinfo.o myflock.o \
- mymalloc.o myrand.o mystrtok.o name_code.o name_mask.o netstring.o \
-@@ -78,7 +80,7 @@
- msg_output.h msg_syslog.h msg_vstream.h mvect.h myaddrinfo.h myflock.h \
- mymalloc.h myrand.h name_code.h name_mask.h netstring.h nvtable.h \
- open_as.h open_lock.h percentm.h posix_signals.h readlline.h ring.h \
-- safe.h safe_open.h sane_accept.h sane_connect.h sane_fsops.h \
-+ safe.h safe_open.h sane_accept.h sane_connect.h sane_fsops.h load_lib.h \
- sane_socketpair.h sane_time.h scan_dir.h set_eugid.h set_ugid.h \
- sigdelay.h sock_addr.h spawn_command.h split_at.h stat_as.h \
- stringops.h sys_defs.h timed_connect.h timed_wait.h trigger.h \
-@@ -91,6 +93,7 @@
- CFLAGS = $(DEBUG) $(OPT) $(DEFS)
- FILES = Makefile $(SRCS) $(HDRS)
- INCL =
-+PCRESO = dict_pcre.so
- LIB = libutil.a
- TESTPROG= dict_open dup2_pass_on_exec events exec_command fifo_open \
- fifo_rdonly_bug fifo_rdwr_bug fifo_trigger fsspace fullname \
-@@ -105,10 +108,11 @@
-
- LIB_DIR = ../../lib
- INC_DIR = ../../include
-+LIBS = $(LIB_DIR)/$(LIB) $(PCRESO)
-
--.c.o:; $(CC) $(CFLAGS) -c $*.c
-+.c.o:; $(CC) -fPIC $(CFLAGS) -c $*.c
-
--all: $(LIB)
-+all: $(LIB) $(PCRESO)
-
- $(OBJS): ../../conf/makedefs.out
-
-@@ -117,15 +121,19 @@
-
- test: $(TESTPROG)
-
-+$(PCRESO): dict_pcre.o libutil.a
-+ gcc -shared -Wl,-soname,dict_pcre.so -o $@ $? -lpcre -L. -lutil
-+
- $(LIB): $(OBJS)
-- $(AR) $(ARFL) $(LIB) $?
-- $(RANLIB) $(LIB)
-+ gcc -shared -Wl,-soname,libpostfix-util.so.1 -o $(LIB) $(OBJS) -ldl $(SYSLIBS)
-
- $(LIB_DIR)/$(LIB): $(LIB)
- cp $(LIB) $(LIB_DIR)
-- $(RANLIB) $(LIB_DIR)/$(LIB)
-
--update: $(LIB_DIR)/$(LIB) $(HDRS)
-+../../libexec/$(PCRESO): $(PCRESO)
-+ cp $(PCRESO) ../../libexec
-+
-+update: $(LIBS) ../../libexec/$(PCRESO) $(HDRS)
- -for i in $(HDRS); \
- do \
- cmp -s $$i $(INC_DIR)/$$i 2>/dev/null || cp $$i $(INC_DIR); \
-@@ -147,7 +155,8 @@
- lint $(SRCS)
-
- clean:
-- rm -f *.o $(LIB) *core $(TESTPROG) junk $(MAKES) *.tmp
-+ rm -f *.o $(LIB) $(PCRESO) *core $(TESTPROG) \
-+ junk $(MAKES) *.tmp
- rm -rf printfck
-
- tidy: clean
-diff -ruN a/src/util/dict.h b/src/util/dict.h
---- a/src/util/dict.h 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/util/dict.h 2009-06-01 13:08:26.000000000 +0000
-@@ -66,6 +66,7 @@
- #define DICT_FLAG_NO_UNAUTH (1<<13) /* disallow unauthenticated data */
- #define DICT_FLAG_FOLD_FIX (1<<14) /* case-fold key with fixed-case map */
- #define DICT_FLAG_FOLD_MUL (1<<15) /* case-fold key with multi-case map */
-+#define DICT_FLAG_UPGRADE (1<<30) /* Upgrade the db */
- #define DICT_FLAG_FOLD_ANY (DICT_FLAG_FOLD_FIX | DICT_FLAG_FOLD_MUL)
-
- /* IMPORTANT: Update the dict_mask[] table when the above changes */
-@@ -138,6 +139,11 @@
- extern DICT *dict_open(const char *, int, int);
- extern DICT *dict_open3(const char *, const char *, int, int);
- extern void dict_open_register(const char *, DICT *(*) (const char *, int, int));
-+#ifndef NO_DYNAMIC_MAPS
-+extern void dict_open_dlinfo(const char *path);
-+typedef void* (*dict_mkmap_func_t)(const char *);
-+dict_mkmap_func_t dict_mkmap_func(const char *dict_type);
-+#endif
-
- #define dict_get(dp, key) ((const char *) (dp)->lookup((dp), (key)))
- #define dict_put(dp, key, val) (dp)->update((dp), (key), (val))
-diff -ruN a/src/util/dict_db.c b/src/util/dict_db.c
---- a/src/util/dict_db.c 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/util/dict_db.c 2009-06-01 13:08:26.000000000 +0000
-@@ -664,6 +664,12 @@
- msg_fatal("set DB cache size %d: %m", dict_db_cache_size);
- if (type == DB_HASH && db->set_h_nelem(db, DICT_DB_NELM) != 0)
- msg_fatal("set DB hash element count %d: %m", DICT_DB_NELM);
-+ if (dict_flags & DICT_FLAG_UPGRADE) {
-+ if (msg_verbose)
-+ msg_info("upgrading database %s",db_path);
-+ if ((errno = db->upgrade(db,db_path,0)) != 0)
-+ msg_fatal("upgrade of database %s: %m",db_path);
-+ }
- #if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 0)
- if ((errno = db->open(db, 0, db_path, 0, type, db_flags, 0644)) != 0)
- msg_fatal("open database %s: %m", db_path);
-diff -ruN a/src/util/dict_dbm.c b/src/util/dict_dbm.c
---- a/src/util/dict_dbm.c 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/util/dict_dbm.c 2009-06-01 13:08:26.000000000 +0000
-@@ -407,6 +407,10 @@
- char *dbm_path;
- int lock_fd;
-
-+#ifdef HAVE_GDBM
-+ msg_fatal("%s: gdbm maps use locking that is incompatible with postfix. Use a hash map instead.",
-+ path);
-+#endif
- /*
- * Note: DICT_FLAG_LOCK is used only by programs that do fine-grained (in
- * the time domain) locking while accessing individual database records.
-diff -ruN a/src/util/dict_open.c b/src/util/dict_open.c
---- a/src/util/dict_open.c 2009-06-01 12:27:45.000000000 +0000
-+++ b/src/util/dict_open.c 2009-06-01 13:08:26.000000000 +0000
-@@ -44,6 +44,8 @@
- /* DICT *(*open) (const char *, int, int);
- /*
- /* ARGV *dict_mapnames()
-+/*
-+/* void (*)() dict_mkmap_func(const char *dict_type)
- /* DESCRIPTION
- /* This module implements a low-level interface to multiple
- /* physical dictionary types.
-@@ -159,6 +161,9 @@
- /*
- /* dict_mapnames() returns a sorted list with the names of all available
- /* dictionary types.
-+/*
-+/* dict_mkmap_func() returns a pointer to the mkmap setup function
-+/* for the given map type, as given in /etc/dynamicmaps.cf
- /* DIAGNOSTICS
- /* Fatal error: open error, unsupported dictionary type, attempt to
- /* update non-writable dictionary.
-@@ -183,6 +188,9 @@
- #include <strings.h>
- #endif
-
-+#include <sys/stat.h>
-+#include <unistd.h>
-+
- /* Utility library. */
-
- #include <argv.h>
-@@ -207,6 +215,27 @@
- #include <split_at.h>
- #include <htable.h>
-
-+#ifndef NO_DYNAMIC_MAPS
-+#include <load_lib.h>
-+#include <vstring.h>
-+#include <vstream.h>
-+#include <vstring_vstream.h>
-+#include <mvect.h>
-+
-+ /*
-+ * Interface for dynamic map loading.
-+ */
-+typedef struct {
-+ const char *pattern;
-+ const char *soname;
-+ const char *openfunc;
-+ const char *mkmapfunc;
-+} DLINFO;
-+
-+static DLINFO *dict_dlinfo;
-+static DLINFO *dict_open_dlfind(const char *type);
-+#endif
-+
- /*
- * lookup table for available map types.
- */
-@@ -221,9 +250,11 @@
- #endif
- DICT_TYPE_ENVIRON, dict_env_open,
- DICT_TYPE_UNIX, dict_unix_open,
-+#ifdef NO_DYNAMIC_MAPS
- #ifdef SNAPSHOT
- DICT_TYPE_TCP, dict_tcp_open,
- #endif
-+#endif
- #ifdef HAS_SDBM
- DICT_TYPE_SDBM, dict_sdbm_open,
- #endif
-@@ -243,9 +274,11 @@
- #ifdef HAS_NETINFO
- DICT_TYPE_NETINFO, dict_ni_open,
- #endif
-+#ifdef NO_DYNAMIC_MAPS
- #ifdef HAS_PCRE
- DICT_TYPE_PCRE, dict_pcre_open,
- #endif
-+#endif /* NO_DYNAMIC_MAPS */
- #ifdef HAS_POSIX_REGEXP
- DICT_TYPE_REGEXP, dict_regexp_open,
- #endif
-@@ -303,8 +336,31 @@
- dict_type, dict_name);
- if (dict_open_hash == 0)
- dict_open_init();
-- if ((dp = (DICT_OPEN_INFO *) htable_find(dict_open_hash, dict_type)) == 0)
-- msg_fatal("unsupported dictionary type: %s", dict_type);
-+ if ((dp = (DICT_OPEN_INFO *) htable_find(dict_open_hash, dict_type)) == 0) {
-+#ifdef NO_DYNAMIC_MAPS
-+ msg_fatal("%s: unsupported dictionary type: %s", myname, dict_type);
-+#else
-+ struct stat st;
-+ LIB_FN fn[2];
-+ DICT *(*open) (const char *, int, int);
-+ DLINFO *dl=dict_open_dlfind(dict_type);
-+ if (!dl)
-+ msg_fatal("%s: unsupported dictionary type: %s: Is the postfix-%s package installed?", myname, dict_type, dict_type);
-+ if (stat(dl->soname,&st) < 0) {
-+ msg_fatal("%s: unsupported dictionary type: %s (%s not found. Is the postfix-%s package installed?)",
-+ myname, dict_type, dl->soname, dict_type);
-+ }
-+ fn[0].name = dl->openfunc;
-+ fn[0].ptr = (void**)&open;
-+ fn[1].name = NULL;
-+ load_library_symbols(dl->soname, fn, NULL);
-+ dict_open_register(dict_type, open);
-+ dp = (DICT_OPEN_INFO *) htable_find(dict_open_hash, dict_type);
-+#endif
-+ }
-+ if (msg_verbose>1) {
-+ msg_info("%s: calling %s open routine",myname,dict_type);
-+ }
- if ((dict = dp->open(dict_name, open_flags, dict_flags)) == 0)
- msg_fatal("opening %s:%s %m", dict_type, dict_name);
- if (msg_verbose)
-@@ -312,6 +368,36 @@
- return (dict);
- }
-
-+dict_mkmap_func_t dict_mkmap_func(const char *dict_type)
-+{
-+ char *myname="dict_mkmap_func";
-+ struct stat st;
-+ LIB_FN fn[2];
-+ dict_mkmap_func_t mkmap;
-+ DLINFO *dl;
-+#ifndef NO_DYNAMIC_MAPS
-+ if (!dict_dlinfo)
-+ msg_fatal("dlinfo==NULL");
-+ dl=dict_open_dlfind(dict_type);
-+ if (!dl)
-+ msg_fatal("%s: unsupported dictionary type: %s: Is the postfix-%s package installed?", myname, dict_type, dict_type);
-+ if (stat(dl->soname,&st) < 0) {
-+ msg_fatal("%s: unsupported dictionary type: %s (%s not found. Is the postfix-%s package installed?)",
-+ myname, dict_type, dl->soname, dict_type);
-+ }
-+ if (!dl->mkmapfunc)
-+ msg_fatal("%s: unsupported dictionary type: %s does not allow map creation.", myname, dict_type);
-+
-+ fn[0].name = dl->mkmapfunc;
-+ fn[0].ptr = (void**)&mkmap;
-+ fn[1].name = NULL;
-+ load_library_symbols(dl->soname, fn, NULL);
-+ return mkmap;
-+#else
-+ return (void(*)())NULL;
-+#endif
-+}
-+
- /* dict_open_register - register dictionary type */
-
- void dict_open_register(const char *type,
-@@ -345,6 +431,9 @@
- HTABLE_INFO **ht;
- DICT_OPEN_INFO *dp;
- ARGV *mapnames;
-+#ifndef NO_DYNAMIC_MAPS
-+ DLINFO *dlp;
-+#endif
-
- if (dict_open_hash == 0)
- dict_open_init();
-@@ -353,6 +442,13 @@
- dp = (DICT_OPEN_INFO *) ht[0]->value;
- argv_add(mapnames, dp->type, ARGV_END);
- }
-+#ifndef NO_DYNAMIC_MAPS
-+ if (!dict_dlinfo)
-+ msg_fatal("dlinfo==NULL");
-+ for (dlp=dict_dlinfo; dlp->pattern; dlp++) {
-+ argv_add(mapnames, dlp->pattern, ARGV_END);
-+ }
-+#endif
- qsort((void *) mapnames->argv, mapnames->argc, sizeof(mapnames->argv[0]),
- dict_sort_alpha_cpp);
- myfree((char *) ht_info);
-@@ -360,6 +456,87 @@
- return mapnames;
- }
-
-+#ifndef NO_DYNAMIC_MAPS
-+#define STREQ(x,y) (x == y || (x[0] == y[0] && strcmp(x,y) == 0))
-+
-+void dict_open_dlinfo(const char *path)
-+{
-+ char *myname="dict_open_dlinfo";
-+ VSTREAM *conf_fp=vstream_fopen(path,O_RDONLY,0);
-+ VSTRING *buf = vstring_alloc(100);
-+ char *cp;
-+ ARGV *argv;
-+ MVECT vector;
-+ int nelm=0;
-+ int linenum=0;
-+
-+ dict_dlinfo=(DLINFO*)mvect_alloc(&vector,sizeof(DLINFO),3,NULL,NULL);
-+
-+ if (!conf_fp) {
-+ msg_warn("%s: cannot open %s. No dynamic maps will be allowed.",
-+ myname, path);
-+ } else {
-+ while (vstring_get_nonl(buf,conf_fp) != VSTREAM_EOF) {
-+ cp = vstring_str(buf);
-+ linenum++;
-+ if (*cp == '#' || *cp == '\0')
-+ continue;
-+ argv = argv_split(cp, " \t");
-+ if (argv->argc != 3 && argv->argc != 4) {
-+ msg_fatal("%s: Expected \"pattern .so-name open-function [mkmap-function]\" at line %d",
-+ myname, linenum);
-+ }
-+ if (STREQ(argv->argv[0],"*")) {
-+ msg_warn("%s: wildcard dynamic map entry no longer supported.",
-+ myname);
-+ continue;
-+ }
-+ if (argv->argv[1][0] != '/') {
-+ msg_fatal("%s: .so name must begin with a \"/\" at line %d",
-+ myname, linenum);
-+ }
-+ if (nelm >= vector.nelm) {
-+ dict_dlinfo=(DLINFO*)mvect_realloc(&vector,vector.nelm+3);
-+ }
-+ dict_dlinfo[nelm].pattern = mystrdup(argv->argv[0]);
-+ dict_dlinfo[nelm].soname = mystrdup(argv->argv[1]);
-+ dict_dlinfo[nelm].openfunc = mystrdup(argv->argv[2]);
-+ if (argv->argc==4)
-+ dict_dlinfo[nelm].mkmapfunc = mystrdup(argv->argv[3]);
-+ else
-+ dict_dlinfo[nelm].mkmapfunc = NULL;
-+ nelm++;
-+ argv_free(argv);
-+ }
-+ }
-+ if (nelm >= vector.nelm) {
-+ dict_dlinfo=(DLINFO*)mvect_realloc(&vector,vector.nelm+1);
-+ }
-+ dict_dlinfo[nelm].pattern = NULL;
-+ dict_dlinfo[nelm].soname = NULL;
-+ dict_dlinfo[nelm].openfunc = NULL;
-+ dict_dlinfo[nelm].mkmapfunc = NULL;
-+ if (conf_fp)
-+ vstream_fclose(conf_fp);
-+ vstring_free(buf);
-+}
-+
-+static DLINFO *dict_open_dlfind(const char *type)
-+{
-+ DLINFO *dp;
-+
-+ if (!dict_dlinfo)
-+ return NULL;
-+
-+ for (dp=dict_dlinfo; dp->pattern; dp++) {
-+ if (STREQ(dp->pattern,type))
-+ return dp;
-+ }
-+ return NULL;
-+}
-+
-+#endif /* !NO_DYNAMIC_MAPS */
-+
- #ifdef TEST
-
- /*
-diff -ruN a/src/util/load_lib.c b/src/util/load_lib.c
---- a/src/util/load_lib.c 1970-01-01 00:00:00.000000000 +0000
-+++ b/src/util/load_lib.c 2009-06-01 13:08:26.000000000 +0000
-@@ -0,0 +1,135 @@
-+/*++
-+/* NAME
-+/* load_lib 3
-+/* SUMMARY
-+/* library loading wrappers
-+/* SYNOPSIS
-+/* #include <load_lib.h>
-+/*
-+/* extern int load_library_symbols(const char *, LIB_FN *, LIB_FN *);
-+/* const char *libname;
-+/* LIB_FN *libfuncs;
-+/* LIB_FN *libdata;
-+/*
-+/* DESCRIPTION
-+/* This module loads functions from libraries, returnine pointers
-+/* to the named functions.
-+/*
-+/* load_library_symbols() loads all of the desired functions, and
-+/* returns zero for success, or exits via msg_fatal().
-+/*
-+/* SEE ALSO
-+/* msg(3) diagnostics interface
-+/* DIAGNOSTICS
-+/* Problems are reported via the msg(3) diagnostics routines:
-+/* library not found, symbols not found, other fatal errors.
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* LaMont Jones
-+/* Hewlett-Packard Company
-+/* 3404 Harmony Road
-+/* Fort Collins, CO 80528, USA
-+/*
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+/* System libraries. */
-+
-+#include "sys_defs.h"
-+#include <stdlib.h>
-+#include <stddef.h>
-+#include <string.h>
-+#if defined(HAS_DLOPEN)
-+#include <dlfcn.h>
-+#elif defined(HAS_SHL_LOAD)
-+#include <dl.h>
-+#endif
-+
-+/* Application-specific. */
-+
-+#include "msg.h"
-+#include "load_lib.h"
-+
-+extern int load_library_symbols(const char * libname, LIB_FN * libfuncs, LIB_FN * libdata)
-+{
-+ char *myname = "load_library_symbols";
-+ LIB_FN *fn;
-+
-+#if defined(HAS_DLOPEN)
-+ void *handle;
-+ char *emsg;
-+
-+ handle=dlopen(libname,RTLD_NOW);
-+ emsg=dlerror();
-+ if (emsg) {
-+ msg_fatal("%s: dlopen failure loading %s: %s", myname, libname, emsg);
-+ }
-+
-+ if (libfuncs) {
-+ for (fn=libfuncs; fn->name; fn++) {
-+ *(fn->ptr) = dlsym(handle,fn->name);
-+ emsg=dlerror();
-+ if (emsg) {
-+ msg_fatal("%s: dlsym failure looking up %s in %s: %s", myname,
-+ fn->name, libname, emsg);
-+ }
-+ if (msg_verbose>1) {
-+ msg_info("loaded %s = %lx",fn->name, *((long*)(fn->ptr)));
-+ }
-+ }
-+ }
-+
-+ if (libdata) {
-+ for (fn=libdata; fn->name; fn++) {
-+ *(fn->ptr) = dlsym(handle,fn->name);
-+ emsg=dlerror();
-+ if (emsg) {
-+ msg_fatal("%s: dlsym failure looking up %s in %s: %s", myname,
-+ fn->name, libname, emsg);
-+ }
-+ if (msg_verbose>1) {
-+ msg_info("loaded %s = %lx",fn->name, *((long*)(fn->ptr)));
-+ }
-+ }
-+ }
-+#elif defined(HAS_SHL_LOAD)
-+ shl_t handle;
-+
-+ handle = shl_load(libname,BIND_IMMEDIATE,0);
-+
-+ if (libfuncs) {
-+ for (fn=libfuncs; fn->name; fn++) {
-+ if (shl_findsym(&handle,fn->name,TYPE_PROCEDURE,fn->ptr) != 0) {
-+ msg_fatal("%s: shl_findsym failure looking up %s in %s: %m",
-+ myname, fn->name, libname);
-+ }
-+ if (msg_verbose>1) {
-+ msg_info("loaded %s = %x",fn->name, *((long*)(fn->ptr)));
-+ }
-+ }
-+ }
-+
-+ if (libdata) {
-+ for (fn=libdata; fn->name; fn++) {
-+ if (shl_findsym(&handle,fn->name,TYPE_DATA,fn->ptr) != 0) {
-+ msg_fatal("%s: shl_findsym failure looking up %s in %s: %m",
-+ myname, fn->name, libname);
-+ }
-+ if (msg_verbose>1) {
-+ msg_info("loaded %s = %x",fn->name, *((long*)(fn->ptr)));
-+ }
-+ }
-+ }
-+
-+#else
-+ msg_fatal("%s: need dlopen or shl_load support for dynamic libraries",
-+ myname);
-+#endif
-+ return 0;
-+}
-diff -ruN a/src/util/load_lib.h b/src/util/load_lib.h
---- a/src/util/load_lib.h 1970-01-01 00:00:00.000000000 +0000
-+++ b/src/util/load_lib.h 2009-06-01 13:08:26.000000000 +0000
-@@ -0,0 +1,41 @@
-+#ifndef _LOAD_LIB_H_INCLUDED_
-+#define _LOAD_LIB_H_INCLUDED_
-+
-+/*++
-+/* NAME
-+/* load_lib 3h
-+/* SUMMARY
-+/* library loading wrappers
-+/* SYNOPSIS
-+/* #include "load_lib.h"
-+/* DESCRIPTION
-+/* .nf
-+
-+ /*
-+ * External interface.
-+ */
-+/* NULL name terminates list */
-+typedef struct LIB_FN {
-+ const char *name;
-+ void **ptr;
-+} LIB_FN;
-+
-+extern int load_library_symbols(const char *, LIB_FN *, LIB_FN *);
-+
-+/* LICENSE
-+/* .ad
-+/* .fi
-+/* The Secure Mailer license must be distributed with this software.
-+/* AUTHOR(S)
-+/* LaMont Jones
-+/* Hewlett-Packard Company
-+/* 3404 Harmony Road
-+/* Fort Collins, CO 80528, USA
-+/*
-+/* Wietse Venema
-+/* IBM T.J. Watson Research
-+/* P.O. Box 704
-+/* Yorktown Heights, NY 10598, USA
-+/*--*/
-+
-+#endif