diff options
Diffstat (limited to 'main/postfix/postfix-2.6.1-dynamicmaps.patch')
-rw-r--r-- | main/postfix/postfix-2.6.1-dynamicmaps.patch | 5273 |
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 630abedc3b..0000000000 --- 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 |