Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Makefile.in

  Sprache: C
 

SHELL = /bin/sh
SRCS = postconf.c postconf_builtin.c postconf_edit.c postconf_main.c \
 postconf_master.c postconf_misc.c postconf_node.c postconf_other.c \
 postconf_service.c postconf_unused.c postconf_user.c postconf_dbms.c \
 postconf_lookup.c postconf_match.c postconf_print.c
OBJS = postconf.o postconf_builtin.o postconf_edit.o postconf_main.o \
 postconf_master.o postconf_misc.o postconf_node.o postconf_other.o \
 postconf_service.o postconf_unused.o postconf_user.o postconf_dbms.o \
 postconf_lookup.o postconf_match.o postconf_print.o
HDRS = postconf.h
TESTSRC =
DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE) -DLEGACY_DBMS_SUPPORT
CFLAGS = $(DEBUG) $(OPT) $(DEFS)
TESTPROG=
MAKES = bool_table.h bool_vars.h int_table.h int_vars.h str_table.h \
 str_vars.h time_table.h time_vars.h raw_table.h raw_vars.h \
 nint_table.h nint_vars.h nbool_table.h nbool_vars.h long_table.h \
 long_vars.h str_fn_table.h str_fn_vars.h 
DB_MAKES= pcf_ldap_suffixes.h pcf_memcache_suffixes.h pcf_mysql_suffixes.h \
 pcf_pgsql_suffixes.h pcf_sqlite_suffixes.h pcf_mongodb_suffixes.h
TEST_TMP= main.cf master.cf test*.tmp
DUMMIES = makes_dummy for "make -j"
PROG = postconf
SAMPLES = ../../conf/main.cf.default
INC_DIR = ../../include
LIBS = ../../lib/libxsasl.a \
 ../../lib/lib$(LIB_PREFIX)tls$(LIB_SUFFIX) \
 ../../lib/lib$(LIB_PREFIX)dns$(LIB_SUFFIX) \
 ../../lib/lib$(LIB_PREFIX)global$(LIB_SUFFIX) \
 ../../lib/lib$(LIB_PREFIX)util$(LIB_SUFFIX)
HTABLE_FIX = NORANDOMIZE=1 LD_PRELOAD=../../lib/nosleep.so

.c.o:; $(CC) $(CFLAGS) -c $*.c

$(PROG): $(OBJS) $(LIBS)
 $(CC) $(CFLAGS) $(SHLIB_RPATH) -o $@ $(OBJS) $(LIBS) $(SYSLIBS)

../../conf/main.cf.default: $(PROG) Makefile
 rm -f $@
 (echo "# DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE"; \
  echo "# TEXT HERE JUST SHOWS DEFAULT SETTINGS BUILT INTO POSTFIX."; \
  echo "#"; $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -d -c ../../conf) | \
     grep -E -v '^(myhostname|mydomain|mynetworks|process_name|process_id) ' >$@

$(OBJS): ../../conf/makedefs.out

Makefile: Makefile.in
 cat ../../conf/makedefs.out $? >$@

test: $(TESTPROG)

tests: test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 \
 test12 test13 test14 test15 test16 test17 test18 test19 test20 test21 \
 test22 test23 test24 test25 test26 test27 test28 test29 test30 test4b \
 test31 test32 test33 test34 test35 test36 test37 test39 test40 test41 \
 test42 test43 test44 test45 test46 test47 test48 test49 test50 test51 \
 test52 test53 test54 test55 test56 test57 test58 test59 test60 test61 \
 test62 test63 test64 test65 test66 test67 test68 test69 test70 test71 \
 test72 test73 test74 test75 test76 test78 test79 json_tests80-90 \
 test91 test92

json_tests80-90: test80 test81 test82 test83 test84 test85 test86 test87

root_tests:

update: ../../bin/$(PROG) $(SAMPLES)

../../bin/$(PROG): $(PROG)
 cp $(PROG) ../../bin

$(MAKES): makes_dummy

makes_dummy: $(INC_DIR)/mail_params.h ../global/mail_params.c extract.awk Makefile.in
 $(AWK) -f extract.awk ../*/*.c | $(SHELL)
 touch makes_dummy

$(DB_MAKES): extract_cfg.sh Makefile.in 

pcf_ldap_suffixes.h: ../global/dict_ldap.c 
 sh extract_cfg.sh -d ../global/dict_ldap.c > $@

pcf_memcache_suffixes.h: ../global/dict_memcache.c 
 sh extract_cfg.sh -d ../global/dict_memcache.c > $@

pcf_mongodb_suffixes.h: ../global/dict_mongodb.c 
 sh extract_cfg.sh -d ../global/dict_mongodb.c > $@

pcf_mysql_suffixes.h: ../global/dict_mysql.c 
 sh extract_cfg.sh -d -s ../global/dict_mysql.c > $@

pcf_pgsql_suffixes.h: ../global/dict_pgsql.c 
 sh extract_cfg.sh -d -s ../global/dict_pgsql.c > $@

pcf_sqlite_suffixes.h: ../global/dict_sqlite.c
 sh extract_cfg.sh -d -s ../global/dict_sqlite.c > $@

Define two parameters with smtpd_restriction_classes. One will be ignored.

test1: $(PROG) test1.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo smtpd_restriction_classes = foo bar >> main.cf
 echo foo = yes >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test1.tmp 2>&1
 diff test1.ref test1.tmp
 rm -f main.cf master.cf test1.tmp

Define two unused parameters. Expect two warnings.

test2: $(PROG) test2.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo restriction_classes = foo bar >> main.cf
 echo foo = yes >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test2.tmp 2>&1
 diff test2.ref test2.tmp
 rm -f main.cf master.cf test2.tmp

Define one parameter in main.cf, validate it with main.cf.

test3: $(PROG) test3.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo = yes >> main.cf
 echo 'bar = $$foo' >> main.cf
 echo 'always_bcc = $$bar' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test3.tmp 2>&1
 diff test3.ref test3.tmp
 rm -f main.cf master.cf test3.tmp

Define one parameter in main.cf, validate it with master.cf.

test4: $(PROG) test4.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo = yes >> main.cf
 echo 'bar = $$foo' >> main.cf
 echo smtpd unix - n n - 0 smtpd >> master.cf
 echo ' -o always_bcc=$$bar' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test4.tmp 2>&1
 diff test4.ref test4.tmp
 rm -f main.cf master.cf test4.tmp

Define one parameter in master.cf, validate it with main.cf.

test4b: $(PROG) test4b.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'always_bcc = $$foo' >> main.cf
 echo 'biff = $$bar' >> main.cf
 echo 'bar = aaa' >> main.cf
 echo smtpd1 unix - n n - 0 smtpd >> master.cf
 echo ' -o foo=xxx -o bar=yyy -o baz=zzz' >> master.cf
 echo '#smtpd2 unix - n n - 0 smtpd' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test4b.tmp 2>&1
 diff test4b.ref test4b.tmp
 rm -f main.cf master.cf test4b.tmp

Define one user-defined parameter with name=value in master.cf,
validate it with known_parameter=$$name in master.cf.

test5: $(PROG) test5.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo smtpd unix - n n - 0 smtpd >> master.cf
 echo ' -o bar=yes -o always_bcc=$$bar -o' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test5.tmp 2>&1
 diff test5.ref test5.tmp
 rm -f main.cf master.cf test5.tmp

Basic functionality test: service parameters for delivery agents.

test6: $(PROG) test6.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo whatevershebrings unix - n n - 0 pipe >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . 2>&1 | grep whatevershebrings >test6.tmp
 diff test6.ref test6.tmp
 rm -f main.cf master.cf test6.tmp

Basic functionality test: service parameters for spawn programs.

test7: $(PROG) test7.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo whatevershebrings unix - n n - 0 spawn >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . 2>&1 | grep whatevershebrings >test7.tmp
 diff test7.ref test7.tmp
 rm -f main.cf master.cf test7.tmp

test8: $(PROG) test8.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo whatevershebrings inet - n n - 0 spawn >> master.cf
 echo whatevershebrings_time_limit=1 >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . 2>&1 | grep whatevershebrings >test8.tmp
 diff test8.ref test8.tmp
 rm -f main.cf master.cf test8.tmp

test9: $(PROG) test9.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo bar unix - n n - 0 spawn >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -M '*'/inet >test9.tmp 2>&1
 diff test9.ref test9.tmp
 rm -f main.cf master.cf test9.tmp

test10: $(PROG) test10.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo bar unix - n n - 0 spawn >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -M bar/inet foo/unix >test10.tmp 2>&n style='color: green'>1
 diff test10.ref test10.tmp
 rm -f main.cf master.cf test10.tmp

test11: $(PROG) test11.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo bar unix - n n - 0 spawn >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -M >test11.tmp 2>&1
 diff test11.ref test11.tmp
 rm -f main.cf master.cf test11.tmp

Duplicate service entry.

test12: $(PROG) test12.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo bar=yes >> main.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo ' -o always_bcc=$$bar -o' >> master.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo ' -o always_bcc=$$bar -o' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -M >test12.tmp 2>&1
 diff test12.ref test12.tmp
 rm -f main.cf master.cf test12.tmp

Define parameter with restriction_classes in master.cf, validate in main.cf.

test13: $(PROG) test13.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo bar=yes >> main.cf
 echo baz=xx >> main.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo ' -o smtpd_restriction_classes=bar' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test13.tmp 2>&1
 diff test13.ref test13.tmp
 rm -f main.cf master.cf test13.tmp

Define parameter with restriction_classes in main.cf, validate in master.cf.

test14: $(PROG) test14.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo smtpd_restriction_classes=bar >> main.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo ' -o bar=yes -o baz=xx' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test14.tmp 2>&1
 diff test14.ref test14.tmp
 rm -f main.cf master.cf test14.tmp

Define two parameters, one is hidden by master.cf.

test15: $(PROG) test15.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo bar=xx >> main.cf
 echo baz=yy >> main.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo ' -o bar=yes -o always_bcc=$$bar$$baz' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test15.tmp 2>&1
 diff test15.ref test15.tmp
 rm -f main.cf master.cf test15.tmp

Test graceful degradation if master.cf is unavailable.

test16: $(PROG) test16.ref
 rm -f main.cf master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test16.tmp 2>&1
 diff test16.ref test16.tmp
 rm -f main.cf master.cf test16.tmp

test17: $(PROG) test17.ref
 rm -f main.cf master.cf
 touch -t 197101010000 main.cf
 -$(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc . >test17.tmp 2>&1exit 0
 diff test17.ref test17.tmp
 rm -f main.cf master.cf test17.tmp

Test legacy $name in built-in defaults.

test18: $(PROG) test18.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo virtual_maps=xxx >> main.cf
 echo smtpd_client_connection_limit_exceptions=yyy >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test18.tmp 2>&1
 diff test18.ref test18.tmp
 rm -f main.cf master.cf test18.tmp

Test $name in "raw" parameters.

test19: $(PROG) test19.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo forward_path='$$'aaaa >> main.cf
 echo default_rbl_reply='$$'bbbb >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test19.tmp 2>&1
 diff test19.ref test19.tmp
 rm -f main.cf master.cf test19.tmp

Test master.cf line folding.

test20: $(PROG) test20.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo inet - n n - 0 spawn >> master.cf
 echo ' -o always_bcc=$$bar$$baz' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc . >test20.tmp 2>&1
 diff test20.ref test20.tmp
 rm -f main.cf master.cf test20.tmp

Test main.cf line folding.

test21: $(PROG) test21.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo forward_path = xxxxxxxxxxxxx xxxxxxxxxxxxxx xxxxxxxxxxxx \
     xxxxxxxxxxxxx xxxxxxxxxxxxxx >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nfc . >test21.tmp 2>&1
 diff test21.ref test21.tmp
 rm -f main.cf master.cf test21.tmp

Like test6, but using a delivery agent that has no _time_limit magic.

test22: $(PROG) test22.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo whatevershebrings unix - n n - 0 smtp >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . 2>&1 | grep whatevershebrings >test22.tmp
 diff test22.ref test22.tmp
 rm -f main.cf master.cf test22.tmp

Test the -C flag for each category.

test23: $(PROG) test23.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo always_bcc = yes >> main.cf
 echo name = value >> main.cf
 echo whatevershebrings unix - n n - 0 smtp >> master.cf
 echo ' -o always_bcc=$$name' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -nC builtin >test23.tmp 2>&'color: green'>1
 diff test23.ref test23.tmp
 rm -f main.cf master.cf test23.tmp

test24: $(PROG) test24.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo always_bcc = yes >> main.cf
 echo name = value >> main.cf
 echo whatevershebrings unix - n n - 0 smtp >> master.cf
 echo ' -o always_bcc=$$name' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -nC user >test24.tmp 2>&1
 diff test24.ref test24.tmp
 rm -f main.cf master.cf test24.tmp

test25: $(PROG) test25.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo always_bcc = yes >> main.cf
 echo name = value >> main.cf
 echo whatevershebrings unix - n n - 0 smtp >> master.cf
 echo ' -o always_bcc=$$name' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -C service 2>&1 | grep whatevershebrings >test25.tmp
 diff test25.ref test25.tmp
 rm -f main.cf master.cf test25.tmp

Test completeness of "-C all".

test26: $(PROG) test26.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo always_bcc = yes >> main.cf
 echo name = value >> main.cf
 echo whatevershebrings unix - n n - 0 smtp >> master.cf
 echo ' -o always_bcc=$$name' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . -C all >test26.tmp 2>&1
 diff test26.ref test26.tmp
 rm -f main.cf master.cf test26.tmp

test27: $(PROG) test27.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo always_bcc = yes >> main.cf
 echo name = value >> main.cf
 echo whatevershebrings unix - n n - 0 smtp >> master.cf
 echo ' -o always_bcc=$$name' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c . -C all 2>&1 | grep whatevershebrings >test27.tmp
 diff test27.ref test27.tmp
 rm -f main.cf master.cf test27.tmp

Test macro expansion, type:table parsing and scoping.

test28: $(PROG) test28.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'xx = proxy:ldap:foo' >> main.cf
 echo 'foo_domain = bar' >> main.cf
 echo 'header_checks = ldap:hh' >> main.cf
 echo 'hh_domain = whatever' >> main.cf
 echo 'zz = $$yy' >> main.cf
 echo 'yy = aap' >> main.cf
 echo 'db = memcache' >> main.cf
 echo whatevershebrings unix - n n - 0 other >> master.cf
 echo ' -o body_checks=$$db:$$zz' >> master.cf
 echo 'aap_domain = whatever' >> main.cf
 echo 'aa_domain = whatever' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test28.tmp 2>&1
 diff test28.ref test28.tmp
 rm -f main.cf master.cf test28.tmp

Test the handling of known and unknown database-defined suffixes.

test29: $(PROG) test29.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'ldapxx = proxy:ldap:ldapfoo' >> main.cf
 echo 'ldapfoo_domain = bar' >> main.cf
 echo 'ldapfoo_domainx = bar' >> main.cf
 echo 'mysqlxx = proxy:mysql:mysqlfoo' >> main.cf
 echo 'mysqlfoo_domain = bar' >> main.cf
 echo 'mysqlfoo_domainx = bar' >> main.cf
 echo 'pgsqlxx = proxy:pgsql:pgsqlfoo' >> main.cf
 echo 'pgsqlfoo_domain = bar' >> main.cf
 echo 'pgsqlfoo_domainx = bar' >> main.cf
 echo 'sqlitexx = proxy:sqlite:sqlitefoo' >> main.cf
 echo 'sqlitefoo_domain = bar' >> main.cf
 echo 'sqlitefoo_domainx = bar' >> main.cf
 echo 'memcachexx = proxy:memcache:memcachefoo' >> main.cf
 echo 'memcachefoo_domain = bar' >> main.cf
 echo 'memcachefoo_domainx = bar' >> main.cf
 echo 'mongodbxx = proxy:mongodb:mongodbfoo' >> main.cf
 echo 'mongodbfoo_domain = bar' >> main.cf
 echo 'mongodbfoo_domainx = bar' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test29.tmp 2>&1
 diff test29.ref test29.tmp
 rm -f main.cf master.cf test29.tmp

test30: $(PROG) test30.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo p1=xx >> main.cf
 echo p2=xx >> main.cf
 echo p3=xx >> main.cf
 echo p4=xx >> main.cf
 echo whatevershebrings unix - n n - 0 other >> master.cf
 echo ' -o body_checks=$$p1' >> master.cf
 echo ' -o bodyx_checks=$$p2' >> master.cf
 echo ' -oheader_checks=$$p3' >> master.cf
 echo ' -oheaderx_checks=$$p4' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test30.tmp 2>&1
 diff test30.ref test30.tmp
 rm -f main.cf master.cf test30.tmp

Does a non-default setting propagate to a non-default value?

test31: $(PROG) test31.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'smtpd_helo_restrictions=whatever' >> main.cf
 echo 'smtpd_sender_restrictions=$$smtpd_helo_restrictions' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nxc . >test31.tmp 2>&1
 diff test31.ref test31.tmp
 rm -f main.cf master.cf test31.tmp

Does a non-default setting propagate to a default value?

test32: $(PROG) test32.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'relay_domains=whatever' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -xc . fast_flush_domains >test32.tmp 2>&an style='color: green'>1
 diff test32.ref test32.tmp
 rm -f main.cf master.cf test32.tmp

Does a default setting propagate to a non-default value?

test33: $(PROG) test33.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=whatever' >> main.cf
 echo 'always_bcc=$$relay_domains' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -xc . always_bcc >test33.tmp 2>&='color: green'>1
 diff test33.ref test33.tmp
 rm -f main.cf master.cf test33.tmp

test34: $(PROG) test34.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=whatever' >> main.cf
 echo 'process_name=xxx' >> main.cf
 echo 'process_id=yyy' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -xc . mydestination process_name >test34.tmp 2>&1
 diff test34.ref test34.tmp
 rm -f main.cf master.cf test34.tmp

test35: $(PROG) test35.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo whatevershebrings unix - n n - 0 other >> master.cf
 echo ' -o body_checks=whatever' >> master.cf
 echo ' -o process_name=aaa' >> master.cf
 echo ' -o process_id=bbb' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -xc . process_name >test35.tmp 2>&le='color: green'>1
 diff test35.ref test35.tmp
 rm -f main.cf master.cf test35.tmp

test36: $(PROG) test36.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$virtual_mapx' >> main.cf
 echo 'virtual_alias_maps=$$virtual_maps' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nxc . >test36.tmp 2>&1
 diff test36.ref test36.tmp
 rm -f main.cf master.cf test36.tmp

test37: $(PROG) test37.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'xxx=yyy' >> main.cf
 echo 'aaa=bbb' >> main.cf
 echo whatever unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$xxx' >> master.cf
 echo ' -o always_bcc=$$aaa' >> master.cf
 echo ' -o aaa=ccc' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfxc . >test37.tmp 2>&1
 diff test37.ref test37.tmp
 rm -f main.cf master.cf test37.tmp

test39: $(PROG) test39.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc . '*'/unix >test39.tmp 2>&'color: green'>1
 diff test39.ref test39.tmp
 rm -f main.cf master.cf test39.tmp

test40: $(PROG) test40.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -voaaa=bbb' >> master.cf
 echo ' -vo ccc=$$aaa' >> master.cf
 echo ' -v -oddd=$$ccc' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfxc . '*'/unix >test40.tmp 2>&='color: green'>1
 diff test40.ref test40.tmp
 rm -f main.cf master.cf test40.tmp

test41: $(PROG) test41.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar unix - n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Pc . bar/unix/xxx=yyy bar/unix/aaa=bbb >test41.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >>test41.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Pc . bar/unix/xxx=YYY bar/unix/aaa=BBB >>test41.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >>test41.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Pc . >>test41.tmp 2>&1
 diff test41.ref test41.tmp
 rm -f main.cf master.cf test41.tmp

test42: $(PROG) test42.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar unix - n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Pc . bar/unix/xxx=yyy bar/unix/aaa=bbb >test42.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >>test42.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Pc . >>test42.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -PXc. bar/unix/xxx bar/unix/aaa >>test42.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >>test42.tmp 2>&1
 diff test42.ref test42.tmp
 rm -f main.cf master.cf test42.tmp

test43: $(PROG) test43.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar unix - n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Fc . bar/unix/chroot=y bar/unix/command='aa -stuffobb=cc dd' >test43.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >>test43.tmp 2>&1
 diff test43.ref test43.tmp
 rm -f main.cf master.cf test43.tmp

test44: $(PROG) test44.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar unix - n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc . bar/unix='xx inet - n n - 0 aa -stuffobb=cc dd' >test44.tmp 2>&1
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >>test44.tmp 2>&1
 diff test44.ref test44.tmp
 rm -f main.cf master.cf test44.tmp

test45: $(PROG) test45.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar xxxx - n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test45.tmp 2>&1 || true
 diff test45.ref test45.tmp
 rm -f main.cf master.cf test45.tmp

test46: $(PROG) test46.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet X n n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test46.tmp 2>&1 || true
 diff test46.ref test46.tmp
 rm -f main.cf master.cf test46.tmp

test47: $(PROG) test47.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - X n - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test47.tmp 2>&1 || true
 diff test47.ref test47.tmp
 rm -f main.cf master.cf test47.tmp

test48: $(PROG) test48.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n X - 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test48.tmp 2>&1 || true
 diff test48.ref test48.tmp
 rm -f main.cf master.cf test48.tmp

test49: $(PROG) test49.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n X 0 other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test49.tmp 2>&1 || true
 diff test49.ref test49.tmp
 rm -f main.cf master.cf test49.tmp

test50: $(PROG) test50.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n - X other >> master.cf
 echo baz unix - n n - 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test50.tmp 2>&1 || true
 diff test50.ref test50.tmp
 rm -f main.cf master.cf test50.tmp

test51: $(PROG) test51.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n -? 0 other >> master.cf
 echo bar inet - n n X? 0 other >> master.cf
 echo baz unix - n n 00 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test51.tmp 2>&1 || true
 diff test51.ref test51.tmp
 rm -f main.cf master.cf test51.tmp

test52: $(PROG) test52.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n 0 0 other >> master.cf
 echo baz unix - n n 0 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -MXc. bar/inet foo/unix xxx/yyy
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test52.tmp 2>&1 || true
 diff test52.ref test52.tmp
 rm -f main.cf master.cf test52.tmp

test53: $(PROG) test53.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n 0 0 other >> master.cf
 echo baz unix - n n 0 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -M#c. bar/inet xxx/yyy
 diff test53.ref master.cf
 rm -f main.cf master.cf test53.tmp

test54: $(PROG) test54.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n 0 0 other >> master.cf
 echo baz unix - n n 0 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -M#c. bar/inet foo/unix
 diff test54.ref master.cf
 rm -f main.cf master.cf test54.tmp

test55: $(PROG) test55.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n 0 0 other >> master.cf
 echo baz unix - n n 0 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -M#c. bar/inet baz/unix
 diff test55.ref master.cf
 rm -f main.cf master.cf test55.tmp

test56: $(PROG) test56.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n 0 0 other >> master.cf
 echo " -o first" >> master.cf
 echo " -o second" >> master.cf
 echo baz unix - n n 0 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -M#c. bar/inet xxx/yyy
 diff test56.ref master.cf
 rm -f main.cf master.cf test56.tmp

Many more tests in util/mac_expand.in.

test57: $(PROG) test57.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'x = $${{1} == {2}?{error}:x-value}' >> main.cf
 echo 'y = y-value' >> main.cf
 echo 'bar = $${x?{$$y}:$$z}' >> main.cf
 echo 'baz = $${x?{$$z}:$$y}' >> main.cf
 echo 'foo = $$bar$$baz' >> main.cf
 echo 't1 = Postfix 2.11 $${{$${x?bug:x}} == {bug}?in}compatible' >> main.cf
 echo 't2 = $$t1' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nxc. >test57.tmp 2>&1
 diff test57.ref test57.tmp
 rm -f main.cf master.cf test57.tmp

test58: $(PROG) test58.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination = foo bar pipemap:{ldap:xxx, memcache:yy}x randmap:{xx' >> main.cf
 echo 'xxx_domain = foo' >> main.cf
 echo 'xxx_bogus = foo' >> main.cf
 echo 'yy_backup = bbb' >> main.cf
 echo 'yy_bogus = bbb' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. >test58.tmp 2>&1 || true
 diff test58.ref test58.tmp
 rm -f main.cf master.cf test58.tmp

test59: $(PROG) test59.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo bar inet - n n 0 0 other >> master.cf
 echo " -o name1=value1" >> master.cf
 echo " -o { name2 = value2a value2b }" >> master.cf
 echo " { arg1a arg1b }" >> master.cf
 echo " { arg2a arg2b }x" >> master.cf
 echo " { arg3a arg3b " >> master.cf
 echo baz unix - n n 0 0 other >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mfc. >test59.tmp 2>&1 || true
 diff test59.ref test59.tmp
 rm -f main.cf master.cf test59.tmp

test60: $(PROG) test60.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o always_bcc=bar' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Fhc. >test60.tmp 2>&1 || true
 diff test60.ref test60.tmp
 rm -f main.cf master.cf test60.tmp

test61: $(PROG) test61.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o always_bcc=bar' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Phc. >test61.tmp 2>&1 || true
 diff test61.ref test61.tmp
 rm -f main.cf master.cf test61.tmp

test62: $(PROG) test62.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o always_bcc=bar' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -FHc. >test62.tmp 2>&1 || true
 diff test62.ref test62.tmp
 rm -f main.cf master.cf test62.tmp

test63: $(PROG) test63.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o always_bcc=bar' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -PHc. >test63.tmp 2>&1 || true
 diff test63.ref test63.tmp
 rm -f main.cf master.cf test63.tmp

main.cf overrides built-in default.

test64: $(PROG) test64.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'relayhost = relay-from-main.cf' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. relayhost >test64.tmp 2>&1
 diff test64.ref test64.tmp
 rm -f main.cf master.cf test64.tmp

'-o name=value' overrides main.cf.

test65: $(PROG) test65.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'relayhost = relay-from-main.cf' >> main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -o relayhost=relay-from-cmd-line relayhost >test65.tmp 2>&1
 diff test65.ref test65.tmp
 rm -f main.cf master.cf test65.tmp

unknown parameters in database configuration file (absolute pathname).

test66: $(PROG) test66.ref
 rm -f main.cf master.cf
 touch master.cf
 echo alias_maps = ldap:`pwd`/test66.cf >> main.cf
 echo " " mysql:`pwd`/test66.cf >> main.cf
 echo " " pgsql:`pwd`/test66.cf >> main.cf
 echo " " sqlite:`pwd`/test66.cf >> main.cf
 echo " " memcache:`pwd`/test66.cf >> main.cf
 echo junk = junk >> test66.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. 2>test66.tmp >/dev/null
 sed "s;PWD;`pwd`;" test66.ref | diff - test66.tmp
 rm -f main.cf master.cf test66.tmp test66.cf

expand process name and service name in master.cf.

test67: $(PROG) test67.ref
 rm -f main.cf master.cf
 touch master.cf
 echo 'smtp inet n - n - - smtpd' >>master.cf
 echo ' -o test1_process_name=$$process_name' >> master.cf
 echo ' -o test1_service_name=$$service_name' >> master.cf
 echo 'smtp unix n - n - - smtp' >>master.cf
 echo ' -o test2_process_name=$$process_name' >> master.cf
 echo ' -o test2_service_name=$$service_name' >> master.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -xMfc. >test67.tmp 2>&1
 diff test67.ref test67.tmp
 rm -f main.cf master.cf test67.tmp

test68: $(PROG) test68.ref
 rm -f main.cf master.cf
 touch master.cf
 echo foo = ldap:`pwd` >> main.cf
 echo 'alias_maps = $$foo/test68.cf' >> main.cf
 echo " " mysql:`pwd`/test68.cf >> main.cf
 echo " " pgsql:`pwd`/test68.cf >> main.cf
 echo " " sqlite:`pwd`/test68.cf >> main.cf
 echo " " memcache:`pwd`/test68.cf >> main.cf
 echo junk = junk >> test68.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. 2>test68.tmp >/dev/null
 sed "s;PWD;`pwd`;" test68.ref | diff - test68.tmp
 rm -f main.cf master.cf test68.tmp test68.cf

See also test28 for user-defined parameters defined in main.cf.

test69: $(PROG) test69.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo whatevershebrings unix - n n - 0 other >> master.cf
 echo " -o ldap=ldap:`pwd`" >> master.cf
 echo ' -o body_checks=$$ldap/test69.cf' >> master.cf
 echo junk = junk >> test69.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test69.tmp 2>&1
 sed "s;PWD;`pwd`;" test69.ref | diff - test69.tmp
 rm -f main.cf master.cf test69.tmp test69.cf

Nasty nesting. Prove that the ldap table is detected. If support for
legacy table syntax is dropped, replace ldap:xyz with ldap:`pwd`/xyz
and update the good/bad parameter name tests.

test70: $(PROG) test70.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo "smtpd_client_restrictions = check_sender_access {" >>main.cf
 echo "  pipemap:{ldap:used} { search_order = foo, bar } }"  >>main.cf
 echo "used_server_host = 127.0.0.1"  >>main.cf
 echo "unused_server_host = 127.0.0.1"  >>main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test70.tmp 2>&1
 diff test70.ref test70.tmp
 rm -f main.cf master.cf test70.tmp

test71: $(PROG) test71.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo "smtpd_client_restrictions = inline:{" >>main.cf
 echo " {" >>main.cf
 echo " aaa0 = #aaa1" >>main.cf
 echo " } #aaa2" >>main.cf
 echo " }" >>main.cf
 echo "smtpd_helo_restrictions = pcre:{" >>main.cf
 echo " {" >>main.cf
 echo " /bbb0 #bbb1/" >>main.cf
 echo " } #bbb2" >>main.cf
 echo " }" >>main.cf
 echo "smtpd_sender_restrictions = regexp:{" >>main.cf
 echo " {" >>main.cf
 echo " /ccc0 #ccc1/" >>main.cf
 echo " } #ccc2" >>main.cf
 echo " }" >>main.cf
 touch -t 197101010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test71.tmp 2>&1
 diff test71.ref test71.tmp
 rm -f main.cf master.cf test71.tmp

Different requests to add lines to master.cf.
test72: $(PROG) test72.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/unix='smtp unix - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp fifo - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp inet - n n - 0 other'
 touch -t 197201010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. >test72.tmp 2>&1
 diff test72.ref test72.tmp
 rm -f main.cf master.cf test72.tmp

Replace one entry based on the name+type in the request's service entry.
test73: $(PROG) test73.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/unix='smtp unix - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp fifo - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp inet - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp unix - n n - 0 otherx'
 touch -t 197301010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. >test73.tmp 2>&1
 diff test73.ref test73.tmp
 rm -f main.cf master.cf test73.tmp

Replace one entry based on the name+type in the request's service pattern.
test74: $(PROG) test74.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/unix='smtp unix - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp fifo - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/abcd='smtp inet - n n - 0 other'
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. smtp/fifo='lmtp unix - n n - 0 otherx'
 touch -t 197401010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -Mc. >test74.tmp 2>&1
 diff test74.ref test74.tmp
 rm -f main.cf master.cf test74.tmp

Warn about skipping redundant name=value update.
test75: $(PROG) test75.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. mail_version=x mail_version=y >test75.tmp 2>&1
 touch -t 197501010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. >>test75.tmp 2>&1
 diff test75.ref test75.tmp
 rm -f main.cf master.cf test75.tmp

Warn about unused, deprecated, or deleted parameters.
test76: $(PROG) test76.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. \
     config_directory=. \
     deleted-test-only=whatever \
     disable_dns_lookups=no \
     lmtp_use_tls=no \
     smtpd_tls_dh1024_param_file=auto >test76.tmp 2>&1
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o alias_maps=foo' >> master.cf
 echo ' -o smtp_enforce_tls=yes' >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. >>test76.tmp 2>&1
 diff test76.ref test76.tmp
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -qnc. >/dev/null 2>test76.tmp
 diff /dev/null test76.tmp
 rm -f main.cf master.cf test76.tmp

test77: $(PROG) test77-main.cf test77.ref
 rm -f main.cf master.cf
 cp test77-main.cf main.cf
 touch master.cf
 touch -t 197701010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc . >test77.tmp 2>&1
 diff test77.ref test77.tmp
 rm -f main.cf master.cf test77.tmp

Warn about unused, deprecated, or deleted parameters.
test78: $(PROG) test78.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. \
     config_directory=. \
     smtp_tls_enforce_peername=yes \
     lmtp_tls_enforce_peername=yes \
     >test78.tmp 2>&1
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o lmtp_tls_enforce_peername=no' >> master.cf
 echo ' -o smtp_tls_enforce_peername=no' >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. >>test78.tmp 2>&1
 diff test78.ref test78.tmp
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -qnc. >/dev/null 2>test78.tmp
 diff /dev/null test78.tmp
 rm -f main.cf master.cf test78.tmp

Warn about unused, deprecated, or deleted parameters.
test79: $(PROG) test79.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. \
     config_directory=. \
     authorized_verp_clients=x \
     fallback_relay=x \
     lmtp_per_record_deadline=x \
     postscreen_blacklist_action=x \
     postscreen_dnsbl_ttl=x \
     postscreen_dnsbl_whitelist_threshold=x \
     postscreen_whitelist_interfaces=x \
     smtpd_client_connection_limit_exceptions=x \
     smtpd_per_record_deadline=x \
     smtp_per_record_deadline=x \
     tlsproxy_client_level=x \
     tlsproxy_client_policy=x \
     virtual_maps=x \
     lmtp_cname_overrides_servername=x \
     smtp_cname_overrides_servername=x \
     >test79.tmp 2>&1
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o lmtp_tls_enforce_peername=no' >> master.cf
 echo ' -o smtp_tls_enforce_peername=no' >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. >>test79.tmp 2>&1
 diff test79.ref test79.tmp
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -qnc. >/dev/null 2>test79.tmp
 diff /dev/null test79.tmp
 rm -f main.cf master.cf test79.tmp

JSON for main.cf parameters - no $name expansion
test80: $(PROG) test80.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. -j >test80.tmp 2>&1
 diff test80.ref test80.tmp
 rm -f main.cf master.cf test80.tmp

JSON for main.cf parameters - with $name expansion
test81: $(PROG) test81.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -nc. -jx >test81.tmp 2>&1
 diff test81.ref test81.tmp
 rm -f main.cf master.cf test81.tmp

JSON for master.cf entries - no $name expansion
test82: $(PROG) test82.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$whatever' >> master.cf
 echo ' -o whatever=example.net' >> master.cf
 echo 12345 inet n n n - - spawn >> master.cf
 echo ' -o { command_time_limit = 2 3 }' >> master.cf
 echo ' user=nobody argv=/bin/sh -c { sleep 1 }' >> master.cf 
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -Mj >test82.tmp 2>&1
 diff test82.ref test82.tmp
 rm -f main.cf master.cf test82.tmp

JSON for master.cf entries - with $name expansion
test83: $(PROG) test83.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$whatever' >> master.cf
 echo ' -o whatever=example.net' >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -Mjx >test83.tmp 2>&1
 diff test83.ref test83.tmp
 rm -f main.cf master.cf test83.tmp

clean:
 rm -f *.o *core $(PROG) $(TESTPROG) junk $(MAKES) $(AUTOS) $(DUMMIES) \
 $(TEST_TMP) $(DB_MAKES)

JSON for master.cf fields - no $name expansion
test84: $(PROG) test84.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$whatever' >> master.cf
 echo ' -o whatever=example.net' >> master.cf
 echo 12345 inet n n n - - spawn >> master.cf
 echo ' -o { command_time_limit = 2 3 }' >> master.cf
 echo ' user=nobody argv=/bin/sh -c { sleep 1 }' >> master.cf 
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -Fj >test84.tmp 2>&1
 diff test84.ref test84.tmp
 rm -f main.cf master.cf test84.tmp

JSON for master.cf fields - with $name expansion
test85: $(PROG) test85.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$whatever' >> master.cf
 echo ' -o whatever=example.net' >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -Fjx >test85.tmp 2>&1
 diff test85.ref test85.tmp
 rm -f main.cf master.cf test85.tmp

JSON for master.cf parameters - no $name expansion
test86: $(PROG) test86.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$whatever' >> master.cf
 echo ' -o whatever=example.net' >> master.cf
 echo 12345 inet n n n - - spawn >> master.cf
 echo ' -o { command_time_limit = 2 3 }' >> master.cf
 echo ' user=nobody argv=/bin/sh -c { sleep 1 }' >> master.cf 
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -Pj >test86.tmp 2>&1
 diff test86.ref test86.tmp
 rm -f main.cf master.cf test86.tmp

JSON for master.cf parameters - with $name expansion
test87: $(PROG) test87.ref
 rm -f main.cf master.cf
 touch main.cf master.cf
 echo 'mydestination=$$whatever' >> main.cf
 echo whatever=example.com >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 other >> master.cf
 echo ' -o mydestination=$$whatever' >> master.cf
 echo ' -o whatever=example.net' >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. -Pjx >test87.tmp 2>&1
 diff test87.ref test87.tmp
 rm -f main.cf master.cf test87.tmp

postconf -PP will list parameters not set in master.cf.
test91: $(PROG) test91.ref
 rm -f main.cf master.cf test91.tmp
 touch main.cf master.cf test91.tmp
 #echo 'foo/unix/proxymap = foo_map' >> test91.tmp
 #echo 'bar/unix/proxymap = bar_map' >> test91.tmp
 #echo 'baz/unix/proxymap = baz_map' >> test91.tmp
 echo 'foo_proxy_write_maps=foo_map' >> main.cf
 echo 'bar_proxy_write_maps=bar_map' >> main.cf
 echo 'proxy_write_maps=baz_map' >> main.cf
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 foo >> master.cf
 echo ' -o proxy_write_maps=$$foo_proxy_write_maps' >> master.cf
 echo bar unix - n n - 0 bar >> master.cf
 echo ' -o proxy_write_maps=$$bar_proxy_write_maps' >> master.cf
 echo baz unix - n n - 0 baz >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -xPPc. \
     '*/*/proxy_write_maps' >test91.tmp 2>&1
 diff test91.ref test91.tmp
 rm -f main.cf master.cf test91.tmp

postconf -PP will list the same parameters as "postconf", but it does
that once for every master.cf service, and will show the settings that
are in effect for that service.
test92: $(PROG)
 rm -f main.cf master.cf test92.tmp
 touch main.cf master.cf test92.tmp
 touch -t 197601010000 main.cf
 echo foo unix - n n - 0 foo >> master.cf
 touch -t 197601010000 master.cf
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -c. | \
     grep -E -v '^(process_id|process_name|service_name) =' >test92.tmp
 $(HTABLE_FIX) $(SHLIB_ENV) $(VALGRIND) ./$(PROG) -PPc. | \
     sed 's;foo/unix/;;' | \
     grep -E -v '^(process_id|process_name|service_name) =' | \
     diff test92.tmp -
 rm -f main.cf master.cf test92.tmp

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 | LANG=C 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'
postconf.o: ../../include/argv.h
postconf.o: ../../include/check_arg.h
postconf.o: ../../include/compat_level.h
postconf.o: ../../include/dict.h
postconf.o: ../../include/htable.h
postconf.o: ../../include/mac_midna.h
postconf.o: ../../include/mail_conf.h
postconf.o: ../../include/mail_dict.h
postconf.o: ../../include/mail_params.h
postconf.o: ../../include/mail_run.h
postconf.o: ../../include/mail_version.h
postconf.o: ../../include/msg.h
postconf.o: ../../include/msg_vstream.h
postconf.o: ../../include/myflock.h
postconf.o: ../../include/mymalloc.h
postconf.o: ../../include/name_code.h
postconf.o: ../../include/name_mask.h
postconf.o: ../../include/stringops.h
postconf.o: ../../include/sys_defs.h
postconf.o: ../../include/vbuf.h
postconf.o: ../../include/vstream.h
postconf.o: ../../include/vstring.h
postconf.o: ../../include/warn_stat.h
postconf.o: postconf.c
postconf.o: postconf.h
postconf_builtin.o: ../../include/argv.h
postconf_builtin.o: ../../include/attr.h
postconf_builtin.o: ../../include/check_arg.h
postconf_builtin.o: ../../include/dict.h
postconf_builtin.o: ../../include/get_hostname.h
postconf_builtin.o: ../../include/htable.h
postconf_builtin.o: ../../include/inet_proto.h
postconf_builtin.o: ../../include/iostuff.h
postconf_builtin.o: ../../include/mail_addr.h
postconf_builtin.o: ../../include/mail_conf.h
postconf_builtin.o: ../../include/mail_params.h
postconf_builtin.o: ../../include/mail_proto.h
postconf_builtin.o: ../../include/mail_version.h
postconf_builtin.o: ../../include/midna_domain.h
postconf_builtin.o: ../../include/msg.h
postconf_builtin.o: ../../include/myflock.h
postconf_builtin.o: ../../include/mymalloc.h
postconf_builtin.o: ../../include/mynetworks.h
postconf_builtin.o: ../../include/name_code.h
postconf_builtin.o: ../../include/nvtable.h
postconf_builtin.o: ../../include/server_acl.h
postconf_builtin.o: ../../include/stringops.h
postconf_builtin.o: ../../include/sys_defs.h
postconf_builtin.o: ../../include/vbuf.h
postconf_builtin.o: ../../include/vstream.h
postconf_builtin.o: ../../include/vstring.h
postconf_builtin.o: bool_table.h
postconf_builtin.o: bool_vars.h
postconf_builtin.o: install_table.h
postconf_builtin.o: install_vars.h
postconf_builtin.o: int_table.h
postconf_builtin.o: int_vars.h
postconf_builtin.o: long_table.h
postconf_builtin.o: long_vars.h
postconf_builtin.o: nbool_table.h
postconf_builtin.o: nbool_vars.h
postconf_builtin.o: nint_table.h
postconf_builtin.o: nint_vars.h
postconf_builtin.o: postconf.h
postconf_builtin.o: postconf_builtin.c
postconf_builtin.o: raw_table.h
postconf_builtin.o: raw_vars.h
postconf_builtin.o: str_fn_table.h
postconf_builtin.o: str_fn_vars.h
postconf_builtin.o: str_table.h
postconf_builtin.o: str_vars.h
postconf_builtin.o: time_table.h
postconf_builtin.o: time_vars.h
postconf_dbms.o: ../../include/argv.h
postconf_dbms.o: ../../include/check_arg.h
postconf_dbms.o: ../../include/dict.h
postconf_dbms.o: ../../include/dict_debug.h
postconf_dbms.o: ../../include/dict_ht.h
postconf_dbms.o: ../../include/dict_ldap.h
postconf_dbms.o: ../../include/dict_memcache.h
postconf_dbms.o: ../../include/dict_mongodb.h
postconf_dbms.o: ../../include/dict_mysql.h
postconf_dbms.o: ../../include/dict_pcre.h
postconf_dbms.o: ../../include/dict_pgsql.h
postconf_dbms.o: ../../include/dict_proxy.h
postconf_dbms.o: ../../include/dict_regexp.h
postconf_dbms.o: ../../include/dict_sqlite.h
postconf_dbms.o: ../../include/htable.h
postconf_dbms.o: ../../include/mac_expand.h
postconf_dbms.o: ../../include/mac_parse.h
postconf_dbms.o: ../../include/mail_conf.h
postconf_dbms.o: ../../include/mail_params.h
postconf_dbms.o: ../../include/mkmap.h
postconf_dbms.o: ../../include/msg.h
postconf_dbms.o: ../../include/myflock.h
postconf_dbms.o: ../../include/mymalloc.h
postconf_dbms.o: ../../include/name_code.h
postconf_dbms.o: ../../include/split_at.h
postconf_dbms.o: ../../include/stringops.h
postconf_dbms.o: ../../include/sys_defs.h
postconf_dbms.o: ../../include/vbuf.h
postconf_dbms.o: ../../include/vstream.h
postconf_dbms.o: ../../include/vstring.h
postconf_dbms.o: pcf_ldap_suffixes.h
postconf_dbms.o: pcf_memcache_suffixes.h
postconf_dbms.o: pcf_mongodb_suffixes.h
postconf_dbms.o: pcf_mysql_suffixes.h
postconf_dbms.o: pcf_pgsql_suffixes.h
postconf_dbms.o: pcf_sqlite_suffixes.h
postconf_dbms.o: postconf.h
postconf_dbms.o: postconf_dbms.c
postconf_edit.o: ../../include/argv.h
postconf_edit.o: ../../include/check_arg.h
postconf_edit.o: ../../include/dict.h
postconf_edit.o: ../../include/edit_file.h
postconf_edit.o: ../../include/htable.h
postconf_edit.o: ../../include/mail_params.h
postconf_edit.o: ../../include/msg.h
postconf_edit.o: ../../include/myflock.h
postconf_edit.o: ../../include/mymalloc.h
postconf_edit.o: ../../include/name_code.h
postconf_edit.o: ../../include/readlline.h
postconf_edit.o: ../../include/split_at.h
postconf_edit.o: ../../include/stringops.h
postconf_edit.o: ../../include/sys_defs.h
postconf_edit.o: ../../include/vbuf.h
postconf_edit.o: ../../include/vstream.h
postconf_edit.o: ../../include/vstring.h
postconf_edit.o: ../../include/vstring_vstream.h
postconf_edit.o: postconf.h
postconf_edit.o: postconf_edit.c
postconf_lookup.o: ../../include/argv.h
postconf_lookup.o: ../../include/check_arg.h
postconf_lookup.o: ../../include/dict.h
postconf_lookup.o: ../../include/htable.h
postconf_lookup.o: ../../include/mac_expand.h
postconf_lookup.o: ../../include/mac_parse.h
postconf_lookup.o: ../../include/mail_conf.h
postconf_lookup.o: ../../include/msg.h
postconf_lookup.o: ../../include/myflock.h
postconf_lookup.o: ../../include/mymalloc.h
postconf_lookup.o: ../../include/name_code.h
postconf_lookup.o: ../../include/stringops.h
postconf_lookup.o: ../../include/sys_defs.h
postconf_lookup.o: ../../include/vbuf.h
postconf_lookup.o: ../../include/vstream.h
postconf_lookup.o: ../../include/vstring.h
postconf_lookup.o: postconf.h
postconf_lookup.o: postconf_lookup.c
postconf_main.o: ../../include/argv.h
postconf_main.o: ../../include/check_arg.h
postconf_main.o: ../../include/dict.h
postconf_main.o: ../../include/htable.h
postconf_main.o: ../../include/mac_expand.h
postconf_main.o: ../../include/mac_parse.h
postconf_main.o: ../../include/mail_conf.h
postconf_main.o: ../../include/mail_params.h
postconf_main.o: ../../include/msg.h
postconf_main.o: ../../include/myflock.h
postconf_main.o: ../../include/mymalloc.h
postconf_main.o: ../../include/name_code.h
postconf_main.o: ../../include/readlline.h
postconf_main.o: ../../include/stringops.h
postconf_main.o: ../../include/sys_defs.h
postconf_main.o: ../../include/vbuf.h
postconf_main.o: ../../include/vstream.h
postconf_main.o: ../../include/vstring.h
postconf_main.o: postconf.h
postconf_main.o: postconf_main.c
postconf_master.o: ../../include/argv.h
postconf_master.o: ../../include/check_arg.h
postconf_master.o: ../../include/dict.h
postconf_master.o: ../../include/dict_ht.h
postconf_master.o: ../../include/htable.h
postconf_master.o: ../../include/mail_params.h
postconf_master.o: ../../include/master_proto.h
postconf_master.o: ../../include/msg.h
postconf_master.o: ../../include/myflock.h
postconf_master.o: ../../include/mymalloc.h
postconf_master.o: ../../include/name_code.h
postconf_master.o: ../../include/readlline.h
postconf_master.o: ../../include/split_at.h
postconf_master.o: ../../include/stringops.h
postconf_master.o: ../../include/sys_defs.h
postconf_master.o: ../../include/vbuf.h
postconf_master.o: ../../include/vstream.h
postconf_master.o: ../../include/vstring.h
postconf_master.o: postconf.h
postconf_master.o: postconf_master.c
postconf_match.o: ../../include/argv.h
postconf_match.o: ../../include/check_arg.h
postconf_match.o: ../../include/dict.h
postconf_match.o: ../../include/htable.h
postconf_match.o: ../../include/msg.h
postconf_match.o: ../../include/myflock.h
postconf_match.o: ../../include/mymalloc.h
postconf_match.o: ../../include/name_code.h
postconf_match.o: ../../include/split_at.h
postconf_match.o: ../../include/sys_defs.h
postconf_match.o: ../../include/vbuf.h
postconf_match.o: ../../include/vstream.h
postconf_match.o: ../../include/vstring.h
postconf_match.o: postconf.h
postconf_match.o: postconf_match.c
postconf_misc.o: ../../include/argv.h
postconf_misc.o: ../../include/check_arg.h
postconf_misc.o: ../../include/dict.h
postconf_misc.o: ../../include/htable.h
postconf_misc.o: ../../include/mail_conf.h
postconf_misc.o: ../../include/mail_params.h
postconf_misc.o: ../../include/myflock.h
postconf_misc.o: ../../include/mymalloc.h
postconf_misc.o: ../../include/name_code.h
postconf_misc.o: ../../include/safe.h
postconf_misc.o: ../../include/stringops.h
postconf_misc.o: ../../include/sys_defs.h
postconf_misc.o: ../../include/vbuf.h
postconf_misc.o: ../../include/vstream.h
postconf_misc.o: ../../include/vstring.h
postconf_misc.o: postconf.h
postconf_misc.o: postconf_misc.c
postconf_node.o: ../../include/argv.h
postconf_node.o: ../../include/check_arg.h
postconf_node.o: ../../include/dict.h
postconf_node.o: ../../include/htable.h
postconf_node.o: ../../include/msg.h
postconf_node.o: ../../include/myflock.h
postconf_node.o: ../../include/mymalloc.h
postconf_node.o: ../../include/name_code.h
postconf_node.o: ../../include/sys_defs.h
postconf_node.o: ../../include/vbuf.h
postconf_node.o: ../../include/vstream.h
postconf_node.o: ../../include/vstring.h
postconf_node.o: postconf.h
postconf_node.o: postconf_node.c
postconf_other.o: ../../include/argv.h
postconf_other.o: ../../include/check_arg.h
postconf_other.o: ../../include/dict.h
postconf_other.o: ../../include/dns.h
postconf_other.o: ../../include/htable.h
postconf_other.o: ../../include/mbox_conf.h
postconf_other.o: ../../include/msg.h
postconf_other.o: ../../include/myaddrinfo.h
postconf_other.o: ../../include/myflock.h
postconf_other.o: ../../include/name_code.h
postconf_other.o: ../../include/name_mask.h
postconf_other.o: ../../include/sock_addr.h
postconf_other.o: ../../include/sys_defs.h
postconf_other.o: ../../include/tls.h
postconf_other.o: ../../include/vbuf.h
postconf_other.o: ../../include/vstream.h
postconf_other.o: ../../include/vstring.h
postconf_other.o: ../../include/xsasl.h
postconf_other.o: postconf.h
postconf_other.o: postconf_other.c
postconf_print.o: ../../include/argv.h
postconf_print.o: ../../include/check_arg.h
postconf_print.o: ../../include/dict.h
postconf_print.o: ../../include/htable.h
postconf_print.o: ../../include/msg.h
postconf_print.o: ../../include/myflock.h
postconf_print.o: ../../include/name_code.h
postconf_print.o: ../../include/sys_defs.h
postconf_print.o: ../../include/vbuf.h
postconf_print.o: ../../include/vstream.h
postconf_print.o: ../../include/vstring.h
postconf_print.o: postconf.h
postconf_print.o: postconf_print.c
postconf_service.o: ../../include/argv.h
postconf_service.o: ../../include/check_arg.h
postconf_service.o: ../../include/dict.h
postconf_service.o: ../../include/htable.h
postconf_service.o: ../../include/mail_params.h
postconf_service.o: ../../include/msg.h
postconf_service.o: ../../include/myflock.h
postconf_service.o: ../../include/mymalloc.h
postconf_service.o: ../../include/name_code.h
postconf_service.o: ../../include/stringops.h
postconf_service.o: ../../include/sys_defs.h
postconf_service.o: ../../include/vbuf.h
postconf_service.o: ../../include/vstream.h
postconf_service.o: ../../include/vstring.h
postconf_service.o: postconf.h
postconf_service.o: postconf_service.c
postconf_unused.o: ../../include/argv.h
postconf_unused.o: ../../include/check_arg.h
postconf_unused.o: ../../include/dict.h
postconf_unused.o: ../../include/htable.h
postconf_unused.o: ../../include/mail_conf.h
postconf_unused.o: ../../include/mail_params.h
postconf_unused.o: ../../include/msg.h
postconf_unused.o: ../../include/myflock.h
postconf_unused.o: ../../include/mymalloc.h
postconf_unused.o: ../../include/name_code.h
postconf_unused.o: ../../include/sys_defs.h
postconf_unused.o: ../../include/vbuf.h
postconf_unused.o: ../../include/vstream.h
postconf_unused.o: ../../include/vstring.h
postconf_unused.o: postconf.h
postconf_unused.o: postconf_unused.c
postconf_user.o: ../../include/argv.h
postconf_user.o: ../../include/check_arg.h
postconf_user.o: ../../include/dict.h
postconf_user.o: ../../include/htable.h
postconf_user.o: ../../include/mac_expand.h
postconf_user.o: ../../include/mac_parse.h
postconf_user.o: ../../include/mail_conf.h
postconf_user.o: ../../include/mail_params.h
postconf_user.o: ../../include/msg.h
postconf_user.o: ../../include/myflock.h
postconf_user.o: ../../include/mymalloc.h
postconf_user.o: ../../include/name_code.h
postconf_user.o: ../../include/stringops.h
postconf_user.o: ../../include/sys_defs.h
postconf_user.o: ../../include/vbuf.h
postconf_user.o: ../../include/vstream.h
postconf_user.o: ../../include/vstring.h
postconf_user.o: postconf.h
postconf_user.o: postconf_user.c

Messung V0.5 in Prozent
C=99 H=93 G=95

¤ Dauer der Verarbeitung: 0.24 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=752002