diff options
author | Richard A Nelson (Rick) <cowboy@debian.org> | 2008-07-15 22:25:00 +0000 |
---|---|---|
committer | Andreas Beckmann <debian@abeckmann.de> | 2012-10-01 20:07:42 +0200 |
commit | cb83348f6c0b88c1d1104d6868be756aa51cc5fa (patch) | |
tree | ebed61709d675b931e169105a514a8b82b1a0b83 /debian | |
parent | c0720aa475c782c27a17942561685db0e730a77d (diff) | |
download | sendmail-cb83348f6c0b88c1d1104d6868be756aa51cc5fa.tar.gz |
Imported Debian patch 8.14.3-5debian/8.14.3-5
Diffstat (limited to 'debian')
-rw-r--r-- | debian/Makefile.in | 3 | ||||
-rw-r--r-- | debian/build/autoconf.mk | 4 | ||||
-rw-r--r-- | debian/build/debian/sendmail.init.d.in | 6 | ||||
-rw-r--r-- | debian/build/site.config.m4.in | 2 | ||||
-rw-r--r-- | debian/cf/Makefile.in | 3 | ||||
-rw-r--r-- | debian/cf/domain/debian-msp.m4.in | 4 | ||||
-rw-r--r-- | debian/cf/domain/debian-mta.m4.in | 4 | ||||
-rw-r--r-- | debian/changelog | 33 | ||||
-rw-r--r-- | debian/configure | 134 | ||||
-rw-r--r-- | debian/configure.ac | 49 | ||||
-rw-r--r-- | debian/examples/Makefile.in | 3 | ||||
-rw-r--r-- | debian/examples/db/access | 2 | ||||
-rw-r--r-- | debian/local/:x! | 963 | ||||
-rw-r--r-- | debian/local/Makefile.in | 3 | ||||
-rw-r--r-- | debian/local/Parse_conf.pm.in | 17 | ||||
-rw-r--r-- | debian/local/update_conf.in | 120 | ||||
-rw-r--r-- | debian/patches/8.14/8.14.3/kerberos.patch | 23 | ||||
-rw-r--r-- | debian/sensible_mda/Makefile.in | 3 |
18 files changed, 269 insertions, 1107 deletions
diff --git a/debian/Makefile.in b/debian/Makefile.in index c3118b7..1fda743 100644 --- a/debian/Makefile.in +++ b/debian/Makefile.in @@ -100,8 +100,7 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ ./build/install-sh ./build/missing ./build/mkinstalldirs \ AUTHORS COPYING ChangeLog INSTALL NEWS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/build/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ diff --git a/debian/build/autoconf.mk b/debian/build/autoconf.mk index 04fef57..9e62798 100644 --- a/debian/build/autoconf.mk +++ b/debian/build/autoconf.mk @@ -2,7 +2,7 @@ #------------------------------------------------------------------------------ # vim: syntax=make # -# $Sendmail: autoconf.mk,v 8.14.3 2008-05-19 08:22:49 cowboy Exp $ +# $Sendmail: autoconf.mk,v 8.14.3 2008-07-15 15:26:59 cowboy Exp $ # # Copyright (c) 1998-2008 Richard Nelson. All Rights Reserved. # @@ -16,7 +16,7 @@ # on Debian slink, potato, woody, testing, sid, ... # but the generated file is customized to the version noted above. # -# Richard Nelson <cowboy@debian.org> 2008-05-19 08:22:49 (-0700) +# Richard Nelson <cowboy@debian.org> 2008-07-15 15:26:59 (-0700) #------------------------------------------------------------------------------ #SHELL := /bin/sh -x diff --git a/debian/build/debian/sendmail.init.d.in b/debian/build/debian/sendmail.init.d.in index 3837c7b..4dd7047 100644 --- a/debian/build/debian/sendmail.init.d.in +++ b/debian/build/debian/sendmail.init.d.in @@ -1,10 +1,10 @@ #!/bin/sh ### BEGIN INIT INFO # Provides: sendmail -# Required-Start: $remote_fs $network -# Required-Stop: $remote_fs $network +# Required-Start: $remote_fs $network $syslog +# Required-Stop: $remote_fs $network $syslog # Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 +# Default-Stop: 1 # Short-Description: powerful, efficient, and scalable Mail Transport Agent # Description: Sendmail is an alternative Mail Transport Agent (MTA) # for Debian. It is suitable for handling sophisticated diff --git a/debian/build/site.config.m4.in b/debian/build/site.config.m4.in index a5c8c95..9b0c142 100644 --- a/debian/build/site.config.m4.in +++ b/debian/build/site.config.m4.in @@ -103,6 +103,8 @@ APPENDDEF(`conf_editmap_LIBS', `@sm_editmap_libs@') # libmilter APPENDDEF(`conf_libmilter_ENVDEF', `@sm_libmilter_envdef@') APPENDDEF(`conf_libmilter_LIBS', `@sm_libmilter_libs@') +APPENDDEF(`conf_libmilter_ENVDEF', `-DSM_CONF_POLL=1') +APPENDDEF(`conf_libmilter_ENVDEF', `-D_FFR_WORKERS_POOL=1') # # libsm APPENDDEF(`conf_libsm_ENVDEF', `@sm_libsm_envdef@') diff --git a/debian/cf/Makefile.in b/debian/cf/Makefile.in index 53a252e..522f761 100644 --- a/debian/cf/Makefile.in +++ b/debian/cf/Makefile.in @@ -35,8 +35,7 @@ target_triplet = @target@ subdir = cf DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/build/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs diff --git a/debian/cf/domain/debian-msp.m4.in b/debian/cf/domain/debian-msp.m4.in index 500314d..e01c92e 100644 --- a/debian/cf/domain/debian-msp.m4.in +++ b/debian/cf/domain/debian-msp.m4.in @@ -41,12 +41,12 @@ define(`confCONTROL_SOCKET_NAME', dnl # dnl # flags define(`confPROCESS_TITLE_PREFIX', `MSP')dnl -define(`confNO_RCPT_ACTION', `add-to-undisclosed')dnl +dnl define(`confNO_RCPT_ACTION', `add-to-undisclosed')dnl define(`confRRT_IMPLIES_DSN', `False')dnl define(`confSAFE_FILE_ENV', `/')dnl define(`confSAFE_QUEUE', `True')dnl define(`confQUEUE_FILE_MODE', `0660')dnl -define(`confTEMP_FILE_MODE', `0644')dnl +define(`confTEMP_FILE_MODE', `0640')dnl dnl # dnl # Provide some 'more reasonable' timeout values dnl # See SASL/TLS sections below for more timeout values diff --git a/debian/cf/domain/debian-mta.m4.in b/debian/cf/domain/debian-mta.m4.in index 0aaff70..43e6ac4 100644 --- a/debian/cf/domain/debian-mta.m4.in +++ b/debian/cf/domain/debian-mta.m4.in @@ -39,7 +39,7 @@ dnl # dnl # flags define(`confPROCESS_TITLE_PREFIX', `MTA')dnl define(`confMAX_DAEMON_CHILDREN', `0')dnl -define(`confNO_RCPT_ACTION', `add-to-undisclosed')dnl +dnl define(`confNO_RCPT_ACTION', `add-to-undisclosed')dnl define(`confRRT_IMPLIES_DSN', `False')dnl define(`confSAFE_FILE_ENV', `/')dnl define(`confSAFE_QUEUE', `True')dnl @@ -87,7 +87,7 @@ dnl # dnl # Allow mailq/hoststat to work with both MSP/MTA queues ifelse(eval(sm_version_math >= 527360), `1',dnl `define(`confQUEUE_FILE_MODE', `0640')dnl' -`define(`confTEMP_FILE_MODE', `0644')dnl') +`define(`confTEMP_FILE_MODE', `0640')dnl') dnl # dnl # For security, we default to not letting lusers run the queues dnl # If possible, we prevent sendmail -bv from reading things they shouldn't diff --git a/debian/changelog b/debian/changelog index c8daa2d..1a83e66 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,36 @@ +sendmail (8.14.3-5) unstable; urgency=high + + * Sendmail uses the same filemode for pid/hoststat/dead.letter/etc + files :( To prevent world readable dead.letter files, we have to + restrict other data as well (like hoststat/mailq) Closes: #481347 + + * Remove confNO_RCPT_ACTION for better spam detection Closes: #490776 + + * Several changes thanks to Joe Maimon + + Update sample access db to not block Connect:0, as it + has the unintended side effect of killing sendmail -bs -Am :( + + add autoconf AC_PROG_MKDIR_P + + rewrite SM_RESULTS_IFELSE autoconf macro with AC_RUN_IFELSE + why didn't I think of that, but still, it was an experience :) + + * Improve the sendmail.conf comment, and parsing of timespecs + when creating crontabs (also randomize start times) + Thanks to Michael J. Micek + + * Improve the sendmail.conf commentary for QUEUE_INTERVAL + to note how to create persistent queue-runners (p120m) + Thanks to Michael J. Micek + + * Milter changes for increased performance + + Enable poll (vs select) + + Enable _FFR_WORKERS_POOL + + * Init script touch-ups + + Make init script depend on $syslog + + Remove 0 and 6 from Default-Stop in init script + + -- Richard A Nelson (Rick) <cowboy@debian.org> Tue, 15 Jul 2008 22:25:00 -0000 + sendmail (8.14.3-4) unstable; urgency=low * Redo the Perl 5.10 fix so that it sticks this time diff --git a/debian/configure b/debian/configure index f574a5b..c161d6b 100644 --- a/debian/configure +++ b/debian/configure @@ -2080,6 +2080,48 @@ _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed +{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +echo "${ECHO_T}$MKDIR_P" >&6; } + { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` @@ -2250,48 +2292,6 @@ else echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi -{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 -echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done -done -IFS=$as_save_IFS - -fi - - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version - MKDIR_P="$ac_install_sh -d" - fi -fi -{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 -echo "${ECHO_T}$MKDIR_P" >&6; } - mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; @@ -5139,14 +5139,29 @@ done if test "$sm_have_mfapi" = 'yes'; then { echo "$as_me:$LINENO: checking libmilter version" >&5 echo $ECHO_N "checking libmilter version... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF + /* + * This hack will compile and run a program + * to determine what level of libmilter should + * be used for this package + */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "libmilter/mfapi.h" char vers[30] = "0"; int main (void) { + FILE *confout = fopen("conftest.out","w"); + if (!confout) + return 1; snprintf(vers ,sizeof(vers) ,"%d%c%d%c%d" @@ -5156,10 +5171,11 @@ echo $ECHO_N "checking libmilter version... $ECHO_C" >&6; } ,'.' ,SM_LM_VRS_PLVL(SMFI_VERSION) ); - fprintf(stdout + fprintf(confout ,"%s\n" ,vers ); + close(confout); return 0; } @@ -5175,7 +5191,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext >conftest.out 2>conftest.err' + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; @@ -5185,7 +5201,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - sm_libmilter_version="$(cat conftest.out)" + sm_libmilter_version=`cat conftest.out` else echo "$as_me: program exited with status $ac_status" >&5 @@ -5197,6 +5213,9 @@ sm_libmilter_version=0 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + { echo "$as_me:$LINENO: result: $sm_libmilter_version" >&5 echo "${ECHO_T}$sm_libmilter_version" >&6; } fi; @@ -5811,9 +5830,9 @@ if test $sm_enable_newdb != no; then -for ac_header in db4/db.h db3/db.h db2/db.h db1/db.h db.h \ - db4/db_185.h db3/db_185.h db2/db_185.h \ - db1/db_185.h db_185.h +for ac_header in db.h db4/db.h db3/db.h db2/db.h db1/db.h \ + db_185.h db4/db_185.h db3/db_185.h db2/db_185.h \ + db1/db_185.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then @@ -5957,11 +5976,11 @@ fi done - if [ $ac_cv_header_db4_db_h = yes ] \ + if [ $ac_cv_header_db_h = yes ] \ + || [ $ac_cv_header_db4_db_h = yes ] \ || [ $ac_cv_header_db3_db_h = yes ] \ || [ $ac_cv_header_db2_db_h = yes ] \ - || [ $ac_cv_header_db1_db_h = yes ] \ - || [ $ac_cv_header_db_h = yes ]; then + || [ $ac_cv_header_db1_h = yes ]; then sm_have_newdb=yes; fi; @@ -6251,7 +6270,7 @@ if test $ac_cv_lib_db_4_5_db_create = yes; then sm_newdb_lib='db-4.5' else - { echo "$as_me:$LINENO: checking for db_create in -ldb-4.4" >&5 + { echo "$as_me:$LINENO: checking for db_create in -ldb-4.4" >&5 echo $ECHO_N "checking for db_create in -ldb-4.4... $ECHO_C" >&6; } if test "${ac_cv_lib_db_4_4_db_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6316,7 +6335,7 @@ if test $ac_cv_lib_db_4_4_db_create = yes; then sm_newdb_lib='db-4.4' else - { echo "$as_me:$LINENO: checking for db_create in -ldb-4.3" >&5 + { echo "$as_me:$LINENO: checking for db_create in -ldb-4.3" >&5 echo $ECHO_N "checking for db_create in -ldb-4.3... $ECHO_C" >&6; } if test "${ac_cv_lib_db_4_3_db_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6381,7 +6400,7 @@ if test $ac_cv_lib_db_4_3_db_create = yes; then sm_newdb_lib='db-4.3' else - { echo "$as_me:$LINENO: checking for db_create_4002 in -ldb-4.2" >&5 + { echo "$as_me:$LINENO: checking for db_create_4002 in -ldb-4.2" >&5 echo $ECHO_N "checking for db_create_4002 in -ldb-4.2... $ECHO_C" >&6; } if test "${ac_cv_lib_db_4_2_db_create_4002+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6446,7 +6465,7 @@ if test $ac_cv_lib_db_4_2_db_create_4002 = yes; then sm_newdb_lib='db-4.2' else - { echo "$as_me:$LINENO: checking for db_create in -ldb" >&5 + { echo "$as_me:$LINENO: checking for db_create in -ldb" >&5 echo $ECHO_N "checking for db_create in -ldb... $ECHO_C" >&6; } if test "${ac_cv_lib_db_db_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6510,7 +6529,8 @@ echo "${ECHO_T}$ac_cv_lib_db_db_create" >&6; } if test $ac_cv_lib_db_db_create = yes; then sm_newdb_lib='db' else - sm_have_newdb=no + + sm_have_newdb=no fi fi diff --git a/debian/configure.ac b/debian/configure.ac index 4f336c9..8b730b7 100644 --- a/debian/configure.ac +++ b/debian/configure.ac @@ -96,6 +96,7 @@ AC_SUBST(PACKAGE_NAME) AC_SUBST(PACKAGE_STRING) AC_CONFIG_AUX_DIR([./build])dnl AC_CANONICAL_TARGET AC_ARG_PROGRAM +AC_PROG_MKDIR_P AC_PROG_MAKE_SET AM_INIT_AUTOMAKE AM_MAINTAINER_MODE @@ -648,13 +649,21 @@ if test "$sm_enable_milter" != "no"; then sm_libmilter_version=0]) if test "$sm_have_mfapi" = 'yes'; then AC_MSG_CHECKING([libmilter version]) - SM_RESULT_IFELSE([[ + AC_RUN_IFELSE([[ + /* + * This hack will compile and run a program + * to determine what level of libmilter should + * be used for this package + */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "libmilter/mfapi.h" char vers[30] = "0"; int main (void) { + FILE *confout = fopen("conftest.out","w"); + if (!confout) + return 1; snprintf(vers ,sizeof(vers) ,"%d%c%d%c%d" @@ -664,14 +673,15 @@ if test "$sm_enable_milter" != "no"; then ,'.' ,SM_LM_VRS_PLVL(SMFI_VERSION) ); - fprintf(stdout + fprintf(confout ,"%s\n" ,vers ); + close(confout); return 0; } ]] - ,[AS_VAR_SET(sm_libmilter_version, "$(cat conftest.out)")] + ,[sm_libmilter_version=`cat conftest.out`] ,[sm_libmilter_version=0] ) AC_MSG_RESULT([$sm_libmilter_version]) @@ -815,14 +825,14 @@ sm_have_newdb=no; sm_use_185=no; sm_newdb_lib=; if test $sm_enable_newdb != no; then - AC_CHECK_HEADERS(db4/db.h db3/db.h db2/db.h db1/db.h db.h \ - db4/db_185.h db3/db_185.h db2/db_185.h \ - db1/db_185.h db_185.h) - if [[ $ac_cv_header_db4_db_h = yes ]] \ + AC_CHECK_HEADERS(db.h db4/db.h db3/db.h db2/db.h db1/db.h \ + db_185.h db4/db_185.h db3/db_185.h db2/db_185.h \ + db1/db_185.h) + if [[ $ac_cv_header_db_h = yes ]] \ + || [[ $ac_cv_header_db4_db_h = yes ]] \ || [[ $ac_cv_header_db3_db_h = yes ]] \ || [[ $ac_cv_header_db2_db_h = yes ]] \ - || [[ $ac_cv_header_db1_db_h = yes ]] \ - || [[ $ac_cv_header_db_h = yes ]]; then + || [[ $ac_cv_header_db1_h = yes ]]; then sm_have_newdb=yes; fi; @@ -920,17 +930,16 @@ if test $sm_enable_newdb != no; then if test $sm_newdb_lib = db4; then AC_CHECK_LIB(db-4.6, db_create, [sm_newdb_lib='db-4.6'], [ AC_CHECK_LIB(db-4.5, db_create, [sm_newdb_lib='db-4.5'], [ - AC_CHECK_LIB(db-4.4, db_create, [sm_newdb_lib='db-4.4'], [ - AC_CHECK_LIB(db-4.3, db_create, [sm_newdb_lib='db-4.3'], [ - AC_CHECK_LIB(db-4.2, db_create_4002, - [sm_newdb_lib='db-4.2'], [ - AC_CHECK_LIB(db, db_create, - [sm_newdb_lib='db'], [sm_have_newdb=no])dnl - ])dnl - ])dnl - ])dnl - ])dnl - ])dnl + AC_CHECK_LIB(db-4.4, db_create, [sm_newdb_lib='db-4.4'], [ + AC_CHECK_LIB(db-4.3, db_create, [sm_newdb_lib='db-4.3'], [ + AC_CHECK_LIB(db-4.2, db_create_4002, [sm_newdb_lib='db-4.2'], [ + AC_CHECK_LIB(db, db_create, [sm_newdb_lib='db'], [ + sm_have_newdb=no])dnl + ])dnl + ])dnl + ])dnl + ])dnl + ])dnl elif test $sm_newdb_lib = db3; then AC_CHECK_LIB($sm_newdb_lib, db_create, [:], [ AC_CHECK_LIB(db, db_create, diff --git a/debian/examples/Makefile.in b/debian/examples/Makefile.in index 86e6fad..496bdff 100644 --- a/debian/examples/Makefile.in +++ b/debian/examples/Makefile.in @@ -39,8 +39,7 @@ DIST_COMMON = $(dist_man_MANS) $(dist_sbin_SCRIPTS) \ $(nobase_dist_sysconf_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/build/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs diff --git a/debian/examples/db/access b/debian/examples/db/access index de466df..dd1b87a 100644 --- a/debian/examples/db/access +++ b/debian/examples/db/access @@ -132,7 +132,7 @@ reject@ REJECT # # Block invalid IPs # -Connect:0 REJECT +#Connect:0 REJECT whilst invalid, this also blocks sendmail -bs -Am Connect:169.254 REJECT Connect:192.0.2 REJECT Connect:224 REJECT diff --git a/debian/local/:x! b/debian/local/:x! deleted file mode 100644 index ecb13a7..0000000 --- a/debian/local/:x! +++ /dev/null @@ -1,963 +0,0 @@ -#!/usr/bin/perl -w -#------------------------------------------------------------------------ -# -# $Sendmail: Parse_conf.pm,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ -# -# Parse and update /etc/mail/sendmail.conf -# -# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. -# -# Notes (to all): -# -# Notes (to self): -# -#------------------------------------------------------------------------ -# -# Package/Module declaration -package Parse_conf; -require Exporter; -@ISA = qw(Exporter); -#@EXPORT = qw(read_conf write_conf); -@EXPORT_OK = qw(read_conf write_conf get_value); -$VERSION = '2.0000'; -# -# Initialization of the perl environment -use strict; # be kosher -#use warnings; # Not needed here -use Cwd; # provide cwd() -use Env; # A few environmental references -use integer; # Peformance -use Sys::Hostname; # make sure we have a valid hostname -use Getopt::Long; # parameter handling -use FileHandle; # I/O - -# Local libraries - for Debian Sendmail Perl helper functions -# BEGIN { $main::my_path = substr($0,$[,rindex($0,'/')) }; -use lib ('.', substr($0,$[,rindex($0,'/')), "@datadir@/sendmail"); -require Parse_mc; - -# Version of this program -#($main::MYNAME = $main::0) =~ s|.*/||; -#$main::Author = "Richard Nelson"; -#$main::AuthorMail = "cowboy\@debian.org"; -#$main::Version = '$Revision: 1.00 $ '; -$Parse_conf::program_name = 'Parse_conf.pm'; -$Parse_conf::program_version = '@sm_version@'; -$Parse_conf::program_date = '@sm_date@ @sm_time@ cowboy'; -$Parse_conf::debug = 0; - -my $interp_pgm = "$^X"; -my $interp_vrm = $]; -$interp_vrm = ("$^V" | '000') if (defined $^V); -my $current_time = scalar localtime; -my $user = getlogin || (getpwuid($<))[0] || "Unknown!!"; -my $hostname = hostname(); -my $directory = getcwd(); - -$Parse_conf::Conffile = "@sysconfdir@/mail/sendmail.conf"; -my $debug; - -# -#------------------------------------------------------------------------------ -# Global variables -#------------------------------------------------------------------------------ -my %parm_def = ( - 'DAEMON_NETMODE' => 'Static' - ,'DAEMON_NETIF' => 'eth0' - ,'DAEMON_MODE' => 'Daemon' - ,'DAEMON_RUNASUSER' => 'No' - ,'DAEMON_PARMS' => '' - ,'DAEMON_HOSTSTATS' => 'No' - ,'DAEMON_MAILSTATS' => 'No' - ,'QUEUE_MODE' => '${DAEMON_MODE}' - ,'QUEUE_INTERVAL' => '10m' - ,'QUEUE_PARMS' => '' - ,'MSP_MODE' => 'Cron' - ,'MSP_INTERVAL' => '20m' - ,'MSP_PARMS' => '' - ,'MSP_MAILSTATS' => '${DAEMON_MAILSTATS}' - ,'MISC_PARMS' => '' - ,'CRON_MAILTO' => 'root' - ,'CRON_PARMS' => '' - ,'HANDS_OFF' => 'No' - ,'LOG_CMDS' => 'No' - ,'AGE_DATA' => '' - ); - -my %parameter = %parm_def; - -my %parm_kw = ( - 'DAEMON_NETMODE' => ['static', 'dynamic'] - ,'DAEMON_MODE' => ['daemon', 'inetd','none'] - ,'QUEUE_MODE' => ['daemon', 'cron', 'none'] - ,'MSP_MODE' => ['daemon', 'cron', 'none'] - ); - -my %parm_bool = ( - 'HANDS_OFF' => 1 - ,'DAEMON_RUNASUSER' => 1 - ,'DAEMON_HOSTSTATS' => 1 - ,'DAEMON_MAILSTATS' => 1 - ,'MSP_MAILSTATS' => 1 - ,'LOG_CMDS' => 1 - ); - -my %parm_dependant = ( - ); - -my %parm_deprecated = ( - 'DAEMON_STATS' => 'DAEMON_MAILSTATS' - ,'MSP_STATS' => 'MSP_MAILSTATS' - ); - -my %parm_hidden = ( - 'DAEMON_RUNASUSER' => 1 - ,'prefix' => 1 - ,'exec_prefix' => 1 - ,'bindir' => 1 - ,'sbindir' => 1 - ,'libexecdir' => 1 - ,'datadir' => 1 - ,'sysconfdir' => 1 - ,'sharedstatedir' => 1 - ,'localstatedir' => 1 - ,'libdir' => 1 - ,'MTA_DAEMON' => 1 - ,'MTA_COMMAND' => 1 - ,'MTA_L' => 1 - ,'MTA_L_QUEUE' => 1 - ,'MTA_ROOT' => 1 - ,'MTA_PIDFILE' => 1 - ,'MSP_DAEMON' => 1 - ,'MSP_COMMAND' => 1 - ,'MSP_L' => 1 - ,'MSP_L_QUEUE' => 1 - ,'MSP_ROOT' => 1 - ,'MSP_PIDFILE' => 1 - ); - -# -#------------------------------------------------------------------------------ -# Finally, some code (almost) -#------------------------------------------------------------------------------ -1; # return (true); - - -# -#------------------------------------------------------------------------------ -# Read /etc/mail/sendmail.conf -#------------------------------------------------------------------------------ -sub read_conf { - my ($input_file) = @_; - $input_file ||= $Parse_conf::Conffile; - - $debug = $main::debug || $Parse_conf::debug; - - # Update defaults according to current environment - &update_defaults; - - # Read /etc/mail/sendmail.conf (if extant) - &read_config($input_file); - - # Update old values to new format - &update_values; - - # Make sure things are kosher - my $ok = &validate_config; - if (! $ok) { - die "Terminating due to configuration error."; - }; - }; - -# -#------------------------------------------------------------------------------ -# [Re]write /etc/mail/sendmail.conf -#------------------------------------------------------------------------------ -sub write_conf { - my ($output_file) = @_; - - $debug = $main::debug || $Parse_conf::debug; - - &write_config($output_file); - }; - -# -#------------------------------------------------------------------------ -# Update default settings according to current environment -#------------------------------------------------------------------------ -sub update_defaults { - my ($class, $flags, $files, $options); - my ($ok, $stats); - my $file; - - # Read the mc/m4 files - &Parse_mc::read_dbs('', ''); - - # Obtain entry for HOST_STATUS_DIRECTORY - ($class, $flags, $files, $options) = - &Parse_mc::entry_dbs('confHOST_STATUS_DIRECTORY'); - $file = @{$files}[0]; - if ( $file ne '-' and -d $file ) { - $parameter{'DAEMON_HOSTSTATS'} = 'Yes'; - } - else { - $parameter{'DAEMON_HOSTSTATS'} = 'No'; - }; - - # Obtain entry for STATUS_FILE - ($class, $flags, $files, $options) = - &Parse_mc::entry_dbs('STATUS_FILE'); - $file = @{$files}[0]; - if ( $file ne '-' and -e $file ) { - $parameter{'DAEMON_MAILSTATS'} = 'Yes'; - } - else { - $parameter{'DAEMON_MAILSTATS'} = 'No'; - }; - - # Obtain entry for MSP_STATUS_FILE - ($class, $flags, $files, $options) = - &Parse_mc::entry_dbs('MSP_STATUS_FILE'); - $file = @{$files}[0]; - if ( $file ne '-' and -e $file ) { - $parameter{'MSP_MAILSTATS'} = 'Yes'; - } - else { - $parameter{'MSP_MAILSTATS'} = 'No'; - }; - - }; - -# -#------------------------------------------------------------------------ -# Update old settings according to current format -#------------------------------------------------------------------------ -sub update_values { - my ($ok, $var); - - # Add m(inutes) to {queue,msp}_interval if needed - $parameter{'QUEUE_INTERVAL'} =~ s/^(\d+)$/$1m/; - $parameter{'MSP_INTERVAL'} =~ s/^(\d+)$/$1m/; - - # Also update the queue aging data - ($ok, $var) = &get_value('AGE_DATA'); - my $tmpval = eval $var; - if ($@) { - warn $@; - } - else { - $var = $tmpval; - }; - if (not defined $var) { - $tmpval = '""'; - } - elsif (not ref $var) { - $tmpval = "$var"; - } - elsif (@{$var} == 0) { - $tmpval = '""'; - } - else { - $tmpval = '['; - foreach my $entry (@{$var}) { - foreach my $ndx ($[ .. $#{$entry}) { - @{$entry}[$ndx] =~ s/'/\\'/g; - }; - @{$entry}[0] =~ s/^(\d+)$/$1m/; - $tmpval .= "['" . join("', '", @{$entry}) . "'],"; - }; - $tmpval .= ']'; - $parameter{'AGE_DATA'} = $tmpval; - }; - - # Set any dependant fields here... - }; - -# -#------------------------------------------------------------------------ -# Obtain parameter name -#------------------------------------------------------------------------ -sub get_name { - my ($name, $quiet) = @_; - - # Handle deprecated/renamed variables - if ( exists($parm_deprecated{$name}) ) { - print STDERR "$name is deprecated." - if ($debug and ! $quiet); - if ( $parm_deprecated{$name} ) { - print STDERR " Please use $parm_deprecated{$name} instead.\n" - if ($debug and ! $quiet); - $name = $parm_deprecated{$name}; - } - else { - print STDERR " It will be ignored.\n" - if ($debug and ! $quiet); - }; - }; - - return $name; - }; - -# -#------------------------------------------------------------------------ -# Obtain value directly, or indirectly -#------------------------------------------------------------------------ -sub get_value { - my ($name) = @_; - my $ok = 1; - my $value = ''; - if ( ! exists($parameter{$name}) ) { - print STDERR "Variable $name not defined...\n"; - return ($ok, $value); - }; - - $name = get_name($name, ''); - $value = $parameter{$name}; - - my $tval = $value; - $tval =~ s/^\s*//; - my $default = 0; - - # Dereference loop... keep original value if we get any errors... - Dereference:; - if ($tval =~ /^\$/) { - my @ref_stack = ($name); - my %ref_hash = ($name => 1); - while ($tval =~ /^\$/ and $ok) { - my $start = 1; - my $del = 1; - my $char = substr($tval, 1, 1); - if ( $char eq '{' or $char eq '(' ) { - $start += 1; $del += 2; - }; - my $ref = get_name(substr($tval, $start, - length($tval)-$del), ''); - push @ref_stack, $ref; - if (exists($ref_hash{$ref})) { - print STDERR "Go directly to jail; do not pass go, ", - "do not collect \$200\n"; - print STDERR " Reference loop: ", - join('->', @ref_stack, '...'),"\n"; - $ok = 0; - } - else { - $ref_hash{$ref} = 1; - if (lc $ref eq 'default') { - $tval = $parm_def{$name}; - print STDERR - "Setting $name to default value: ", - "$parm_def{$name}.\n" - if ($debug); - } - elsif (exists($parameter{$ref})) { - $tval = $parameter{$ref}; - print STDERR - "Setting $name to value of $ref: $tval.\n" - if ($debug); - } - else { - print STDERR - "Can not deference $ref, it doesn't exist.\n"; - $ok = 0; - }; - }; - }; - }; - - if ( $ok ) { - # Check keyword parms for valid values - if (exists $parm_kw{$name}) { - my @ltval = split(/\s/,$tval); - my $ltval = lc(@ltval[$[]); - my $found = ""; - foreach my $value (@{$parm_kw{$name}}) { - if ($value eq $ltval) { - $found = 1; $tval = ucfirst($ltval); }; - }; - if ( ! $found ) { - $default += 1; - if ( $default > 1 ) { - print STDERR - "Can not resolve $name, value=$value.\n"; - $ok = 0; - } - else { - print STDERR "Illegal value($tval) for $name.\n", - " Valid values are: ", - join(', ', @{$parm_kw{$name}}), - "\n", - " Set to default: $parm_def{$name}.\n"; - $tval = $parm_def{$name}; - goto Dereference; - }; - }; - } - - # Check boolean parms for valid values - elsif (exists $parm_bool{$name}) { - my @ltval = split(/\s/,$tval); - my $ltval = lc(@ltval[$[]); - $ltval =~ s/^[ty1].*/1/; - $ltval =~ s/^[fn0].*/0/; - if ($ltval eq '0' or $ltval eq '1') { - $tval = ucfirst($ltval); } - else { - $default += 1; - if ( $default > 1 ) { - print STDERR - "Can not resolve $name, value=$value.\n"; - $ok = 0; - } - else { - print STDERR "Illegal value($tval) for $name.\n", - " Valid values are: T[rue],Y[es],1,", - " F[alse],N[o],0\n", - " Set to default: $parm_def{$name}.\n"; - $tval = $parm_def{$name}; - goto Dereference; - }; - }; - }; - }; - - $value = $tval if $ok; - - print STDERR "get_value : $name => $value\n" - if ($debug); - - return ($ok, $value); - }; - -# -#------------------------------------------------------------------------ -# Read input configuration file (if no input, just use defaults) -#------------------------------------------------------------------------ -sub read_config { - my ($input_file) = @_; - @ARGV = split(' ', $input_file); - return if (! -r $input_file); - - my $savename = ''; - my $parmname = ''; - my $parmval = ''; - my $parmref = ''; - my $defname = ''; - my $defval = ''; - my $tmpval = ''; - - print STDOUT "Reading configuration from ", join(',',@ARGV), ".\n"; - - line: while (<ARGV>) { - next line if /^$/; # skip empty lines - chomp; # drop tailing \n - if (s/\\$//) { - $_ .= <>; - redo unless eof(); - }; - - # check commented lines for default parameter values - # a bit of a kluge, but it works out nicely - if (/^#\s*([\w_]+)="([^"]*)"/) { - $defname = get_name($1, 1); - $defval = $2; - print STDERR "Default: $defname => $defval.\n" - if ($debug); - next line; - }; - # Skip any comments - next line if /^#/; # skip comments - - # Process assignment statements - if (/^\s*([\w_]+)="([^"]*)"/) { - $savename = $1; - $parmname = get_name($savename, ''); - $parmval = $2; - print STDERR "Value : $savename => $parmval.\n" - if ($debug); - - # Do we know about this parameter? - # NOTE: keep, even if we don't know about it to prevent - # problems with up/down grades (not loose anything) - if ( ! exists($parm_def{$parmname}) and - ! exists($parm_hidden{$parmname}) ) { - print STDERR "$parmname is a user defined parameter.\n" - if ($debug); - }; - - # Note if value is default, if so, we'll change it to - # the current default - maybe counterintuitive, oh well - # it does help with migration - if ($parmname eq $defname and $parmval eq $defval) { - print STDERR "$parmname is the default value: $defval.\n" - if ($debug); - $parmval = $parm_def{$parmname}; - }; - - # Finally, assign value - if (exists $parm_kw{$savename} or - exists $parm_bool{$savename}) { - $parmval = ucfirst($parmval); - }; - - if ($savename eq $parmname) { - $parameter{$parmname} = $parmval; - } - else { - $parameter{$savename} = $parmval; - }; - }; - }; - }; - -# -#------------------------------------------------------------------------ -# Validate current configuration -#------------------------------------------------------------------------ -sub validate_config { - - my $valid = 1; - - print STDOUT "Validating configuration.\n"; - - # Really, we only care about the some of the variables - those - # that have defaults... the rest, well, so what ! - foreach my $val (sort keys %parm_def) { - my ($ok, $value) = &get_value($val, 1); - if (! $ok) { $valid = 0; }; - }; - - if (! $valid ) { - print STDERR "\nOne or more errors were encountered!\n\n"; - }; - - return ($valid); - }; - -# -#------------------------------------------------------------------------ -# Write updated configuration file -#------------------------------------------------------------------------ -sub write_config { - my ($database_file) = @_; - my $ofh = new FileHandle; - - # Make sure things are kosher - my $result = &validate_config; - if (! $result) { - die "Terminating due to configuration error."; - }; - - $database_file = $database_file || $Parse_conf::Conffile; - my $caller = "$main::program_name" if ($main::program_name); - $caller .= " $main::program_version" if ($main::program_version); - $caller .= " $main::program_date" if ($main::program_date); - - print STDOUT "Writing configuration to $database_file.\n"; - $database_file = '&STDOUT' if ($database_file eq '-'); - unless ( open($ofh, ">$database_file") ) { - warn("Could not open $database_file($!), using STDOUT\n"); - open($ofh, ">&STDOUT"); - }; - $database_file = '-' if ($database_file eq '&STDOUT'); - -# print $ofh <<"EOT"; -#################################################################### -##### This file is automagically generated -- edit at your own risk -##### -##### file: ${database_file} -##### generated via: (${interp_pgm} ${interp_vrm}) -##### ${caller} -##### ${Parse_conf::program_name} ${Parse_conf::program_version} ${Parse_conf::program_date} -##### by: ${user}\@${hostname} -##### on: ${current_time} -##### in: ${directory} -##### input files: -#EOT -# foreach my $file ( split(' ', $input_file) ) { -# print $ofh <<"EOT"; -##### ${file} -#EOT -# }; -# print $ofh <<"EOT"; -##### -#################################################################### - print $ofh <<"EOT"; -#------------------------------------------------------------------------------ -# -# $database_file -# -# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. -# Version: ${main::program_version} -# Time-stamp: <${main::program_date}> -# -# Parameter file for sendmail (sourced by /usr/share/sendmail/sendmail) -# Make all changes herein, instead of altering /etc/init.d/sendmail. -# -# After making changes here, you'll need to run /usr/sbin/sendmailconfig -# or ${main::program_name} to have the changes take effect - -# If you change DAEMON_MODE, QUEUE_MODE, or QUEUE_INTERVAL, you'll also -# need to run /etc/init.d/sendmail restart. -# -# Changes made herein will be kept across upgrades - except for comments! -# Some comment lines have special significance ... -# -# **** **** **** **** DO NOT EDIT THE COMMENTS **** **** **** **** -# -# Supported parameters (and defaults) are listed herein. -# -# Notes: -# * This setup allows sendmail to run in several modes: -# - listener and queue runner..DAEMON_MODE="daemon".QUEUE_MODE="daemon" -# - listener only..............DAEMON_MODE="daemon".QUEUE_MODE="none" -# - queue runner only..........DAEMON_MODE="none"...QUEUE_MODE="daemon" -# - *NOTHING* ?!?..............DAEMON_MODE="none"...QUEUE_MODE="none" -# -# * You can also run the listener from inetd: -# - listener and queue runner..DAEMON_MODE="inetd"..QUEUE_MODE="daemon" -# - listener only..............DAEMON_MODE="inetd"..QUEUE_MODE="none" -# -# * You can also run the queue runner from cron: -# - listener and queue runner..DAEMON_MODE="....."..QUEUE_MODE="cron" -# - queue runner only..........DAEMON_MODE="none"...QUEUE_MODE="cron" -# -# * _PARMS entries herein are shown in precedence order, any later _PARMS -# field will, if applicable, override any previous _PARMS fields. -# -# * Values *MUST* be surrounded with double quotes ("), single quotes -# will *NOT* work ! -# -#------------------------------------------------------------------------------ -# SMTP Listener Configuration -# -# DAEMON_NETMODE="$parm_def{'DAEMON_NETMODE'}"; Keyword SMTP network mode -# static: Do not monitor any network interfaces for changes -# dynamic: Monitor one or more interfaces for changes -# -DAEMON_NETMODE="$parameter{'DAEMON_NETMODE'}"; -# -# DAEMON_NETIF="$parm_def{'DAEMON_NETIF'}"; string SMTP interface(s) -# This parameter defines the network interface(s) that the daemon -# will monitor for status changes (via ppp, dhcp, ifup/down hooks). -# -# NOTES: -# 1) Only list more than one interfaces if they only used for fallback, -# otherwise the daemon will wind up ping-ponging between interfaces. -# 2) Do not use 'lo' unless your daemon only listens on the localhost. -# -DAEMON_NETIF="$parameter{'DAEMON_NETIF'}"; -# -# DAEMON_MODE="$parm_def{'DAEMON_MODE'}"; Keyword SMTP listener -# daemon: Run as standalone daemon -# inetd: Run from inet supervisor (forks for each mail) -# none: No listener (ie, nullclient/smarthost) -# -# NOTE: If you choose "none", mail will build up in the MSP queues -# and you will not receive any mail from external sites. -# -DAEMON_MODE="$parameter{'DAEMON_MODE'}"; -# -# DAEMON_PARMS="$parm_def{'DAEMON_PARMS'}"; String Listener parms -# Any parameters here will be ignored when run from cron. -# Note that {QUEUE,MISC,CRON}_PARMS, if applicable, will override -# anything declared herein. -# -DAEMON_PARMS="$parameter{'DAEMON_PARMS'}"; -# -# DAEMON_HOSTSTATS="$parm_def{'DAEMON_HOSTSTATS'}"; Boolean Listener stats -# This parameter determines whether or not host stats are collected -# and available for the \`hoststat\` command to display. There will -# be a (minor) performance hit, as files will be created/updated for each -# sendmail delivery attempt. The files are fixed in size, and small, -# but there can be many of them. -# -DAEMON_HOSTSTATS="$parameter{'DAEMON_HOSTSTATS'}"; -# -# DAEMON_MAILSTATS="$parm_def{'DAEMON_MAILSTATS'}"; Boolean Listener stats -# This parameter determines whether or not mailer stats are collected -# and available for the \`mailstats\` command to display. There will -# be a (minor) performance hit, as this file will be updated for each -# item coming into, or out of, sendmail. The file is fixed in size, -# and small, so there's no need to rotate it. -# -DAEMON_MAILSTATS="$parameter{'DAEMON_MAILSTATS'}"; -# -#------------------------------------------------------------------------------ -# SMTP MTA Queue Runner Configuration -# -# QUEUE_MODE="$parm_def{'QUEUE_MODE'}"; Keyword SMTP queue runner -# daemon: Run as standalone daemon -# cron: Run from crontab -# none: No queue runner (ie, nullclient/smarthost) -# -QUEUE_MODE="$parameter{'QUEUE_MODE'}"; -# -# QUEUE_INTERVAL="$parm_def{'QUEUE_INTERVAL'}"; Timespec (digits+w|d|h|m|s) -# Interval at which to run the MTA queues. What interval should you use? -# The amount of time that is acceptable before retrying delivery on -# mail that couldn't be delivered in one run, or how long an item can -# set in the queue before having the first delivery attempt done. -# -# NOTE: If you leave this field blank, You get *NO* queue runners !!! -# -QUEUE_INTERVAL="$parameter{'QUEUE_INTERVAL'}"; -# -# QUEUE_PARMS="$parm_def{'QUEUE_PARMS'}"; String queue parameters -# Any parameters here are also used when run from cron. -# Note that MISC_PARMS and CRON_PARMS, if applicable, will override -# anything declared herein. -# -QUEUE_PARMS="$parameter{'QUEUE_PARMS'}"; -# -#------------------------------------------------------------------------------ -# SMTP - MSP Queue Runner Configuration -# -# MSP_MODE="$parm_def{'MSP_MODE'}"; Keyword MSP queue runner mode -# daemon: Run as standalone daemon -# cron: Run from crontab -# none: No queue runner (ie, nullclient/smarthost) -# -# NOTE: If QUEUE_MODE="cron" & MSP_MODE="none", the MSP queue will -# be run as part of the MTA queue running process. -# -MSP_MODE="$parameter{'MSP_MODE'}"; -# -# MSP_INTERVAL="$parm_def{'MSP_INTERVAL'}"; Timespec (digits+w|d|h|m|s) -# Interval at which to run the MSP queues. What interval should you use? -# The amount of time that is acceptable before retrying delivery on -# mail that couldn't be accepted by the MTA, and was therefore left -# in the message submission queue. The MTA shouldn't be down that often -# so this can be larger than QUEUE_INTERVAL. -# -# NOTE: If you leave this field blank, The MSP queue will *NOT* be run !!! -# -MSP_INTERVAL="$parameter{'MSP_INTERVAL'}"; -# -# MSP_PARMS="$parm_def{'MSP_PARMS'}"; String queue parameters -# Any parameters here are also used when run from cron. -# Note that MISC_PARMS and CRON_PARMS, if applicable, will override -# anything declared herein. -# -MSP_PARMS="$parameter{'MSP_PARMS'}"; -# -# MSP_MAILSTATS="$parm_def{'MSP_MAILSTATS'}"; Boolean Listener stats -# This parameter determines whether or not mailer stats are collected -# and available for the \`mailstats\` command to display. There will -# be a (minor) performance hit, as this file will be updated for each -# item coming into, or out of, sendmail. The file is fixed in size, -# and small, so there's no need to rotate it. -# -MSP_MAILSTATS="$parameter{'MSP_MAILSTATS'}"; -# -#------------------------------------------------------------------------------ -# Miscellaneous Confguration -# -# MISC_PARMS="$parm_def{'MISC_PARMS'}"; String miscellaneous parameters -# Miscellaneous parameters - applied to any sendmail invocation. -# Any parameters here are also used when run from cron. -# Applied after {DAEMON,QUEUE}_PARMS, and can therefore override them -# if need be (in which case why did use them?) -# Note that CRON_PARMS, if applicable, will override anything -# declared herein. -# -# Here is where'd you setup and debugging or special parms that you -# want shared betwixt the possibly separate listener/queue-runner -# processes. -# -MISC_PARMS="$parameter{'MISC_PARMS'}"; -# -#------------------------------------------------------------------------------ -# Cron Job Configuration -# -# CRON_MAILTO="$parm_def{'CRON_MAILTO'}"; String cronjob output -# Recipient of *rare* cronjob output. Some cronjobs will be running -# under user `mail`, so any problems encountered would probably be missed -# so define a user who actually (hopefully) checks email now and again. -# -CRON_MAILTO="$parameter{'CRON_MAILTO'}"; -# -# CRON_PARMS="$parm_def{'CRON_PARMS'}"; String cron specific parmeters -# Cron parameters - applied *only* when sendmail queue running is done -# via a cronjob. Applied after QUEUE_PARMS and MISC_PARMS, and can -# therefore override them if need be. -# -CRON_PARMS="$parameter{'CRON_PARMS'}"; -# -#------------------------------------------------------------------------------ -# Other stuff -# LOG_CMDS="$parm_def{'LOG_CMDS'}"; Binary command logging flag -# Will cause syslog entries for many of the sendmail related commands -# like runq, mailq, etc - you'll also see cron jobs (if enabled). -# -LOG_CMDS="$parameter{'LOG_CMDS'}"; -# -# HANDS_OFF="$parm_def{'HANDS_OFF'}"; Binary Do *NOT* touch the configuration -# Set this *ONLY* if you are going to be fully responsible for the entire -# setup of sendmail - the directories, permissions, databases, etc. With -# this variable set to "Yes", nothing will be done for you during updates. -# -# In other words, "The blood be upon your hands" if you set this... -# My ability to help with problems will be greatly reduced ! -# -# "Well, a pet peeve of mine is people who directly edit the -# .cf file instead of using the m4 configuration files. -# Don't do it! [laughs] I treat the .cf file as a binary -# file - you should too." -# -- Eric Allman 1999/10/18 -# http://www.dotcomeon.com/allman_sendmail_qa.html -# -HANDS_OFF="$parameter{'HANDS_OFF'}"; -# -#------------------------------------------------------------------------------ -# Queue Aging Configuration -# -# Why would you want to age your queues? On every queue-run interval, -# sendmail will try *every* file in the queue... If a site is down -# for a while, considerable time can be wasted each interval in retrying -# it. The scheme supported allows aging by time, and can move the older -# files to another (less frequently run queue), thereby reducing overal -# system impact - and providing better mail throughput. -# -# Note that this support is completely separate from QUEUE_MODE=cron, -# you can age queues even if you're running QUEUE_MODE=daemon. -# -# There are four parts to the queue aging support, and these parts -# may be repeated, to operate on multiple queues. -# -# 1. Interval at which to age the queues (in minutes). -# What interval should you use? Roughly twice the normal queue -# interval, so that messages are tried twice in each successively -# slower queue. -# -# 2. Criteria (optional and defaults to interval). This is the -# specification of which files to move. It defaults moving -# files whose age in the queues exceeds the interval. -# This field, if specified can be very complex - supporting -# aging by just about anything! see qtool(8) for details. -# -# 3. To queue. This is the queue to which files will be moved. -# It may be fully qualified, or relative to /var/spool/mqueue. -# -# 4. From queue. This is the queue from which files will be moved. -# It may be fully qualified, or relative to /var/spool/mqueue. -# -# Samples: -# AGE_DATA="[['25m', '', 'hourly', 'main']]"; -# Every 25 minutes, move any file older than 25 minutes from -# /var/spool/mqueue/main to /var/spool/mqueue/hourly -# -# AGE_DATA="[['25m', '', 'hourly', 'main'],\\ -# ['125', '', 'daily', 'hourly']]"; -# Same as the above, but also move files from the hourly queue -# to the daily queue after 125 minutes in the hourly queue. -# -# AGE_DATA="[['25m',\\ -# '-e \\'\$msg{message}[0] == /Deferred: 452 4.2.2 Over quota/\\'',\\ -# 'overquota', 'main']]"; -# Every 25 minutes, move all files deferred because of quota -# violations from /var/spool/mqueue/main to -# /var/spool/mqueue/overquota where they can be processed on -# a different interval, or by some other means. -# -# If the above samples suggest Perl arrays, well, they are... -# -# AGE_DATA="$parm_def{'AGE_DATA'}"; Perl array Queue aging data -# -EOT - my ($ok, $var) = &get_value('AGE_DATA'); - my $tmpval = eval $var; - if ($@) { - warn $@; - } - else { - $var = $tmpval; - }; - if (not defined $var) { - print $ofh 'AGE_DATA="";',"\n"; - } - elsif (not ref $var) { - print $ofh 'AGE_DATA="',$var,'";',"\n"; - } - elsif (@{$var} == 0) { - print $ofh 'AGE_DATA="";',"\n"; - } - else { - print $ofh 'AGE_DATA="[\\',"\n"; - foreach my $entry (@{$var}) { - foreach my $ndx ($[ .. $#{$entry}) { - @{$entry}[$ndx] =~ s/'/\\'/g; - }; - print $ofh "['",join("', '",@{$entry}),"'],\\\n"; - }; - print $ofh ']";',"\n"; - }; - print $ofh <<"EOT"; -# -#------------------------------------------------------------------------------ -# Dependant variables (set according to other variables) -# -EOT - foreach my $key (sort keys %parm_dependant) { - my ($ok, $value); - # Don't evaluate value, just stuff it... - next if ( ! $parameter{$key} ); - ($ok, $value) = (1, $parameter{$key}); - print $ofh "$key=",'"',$value,'";',"\n"; - }; - print $ofh <<"EOT"; -# -#------------------------------------------------------------------------------ -# Hidden variables (the blood be upon your hands) -# -EOT - foreach my $key (sort keys %parm_hidden) { - my ($ok, $value); - # Don't evaluate value, just stuff it... - next if ( ! $parameter{$key} ); - ($ok, $value) = (1, $parameter{$key}); - print $ofh "$key=",'"',$value,'";',"\n"; - }; - print $ofh <<"EOT"; -# -#------------------------------------------------------------------------------ -# Deprecated variables (kept for reference) -# -EOT - foreach my $key (sort keys %parm_deprecated) { - my ($ok, $value); - # Don't evaluate value, just stuff it... - if ( $parm_deprecated{$key} ) { - ($ok, $value) = (1, join('','${', $parm_deprecated{$key}, '}')); - } - elsif ( $parameter{$key} ) { - ($ok, $value) = (1, $parameter{$key}); - }; - print $ofh "$key=",'"',$value,'";',"\n"; - }; - print $ofh <<"EOT"; -# -#------------------------------------------------------------------------------ -# Unknown variables (kept for reference) -# -EOT - foreach my $key (sort keys %parameter) { - if (! exists($parm_def{$key}) and - ! exists($parm_deprecated{$key})) { - # Don't evaluate value, just stuff it... - my ($ok, $value) = (1, $parameter{$key}); - print $ofh "$key=",'"',$value,'";',"\n"; - }; - }; - print $ofh <<"EOT"; -#------------------------------------------------------------------------------ -# - -EOT - - close($ofh); - if ( $database_file eq $Parse_conf::Conffile ) { - chown '0', '0', "$database_file"; - chmod 0644, "$database_file"; - }; - }; - -__END__ diff --git a/debian/local/Makefile.in b/debian/local/Makefile.in index 8b6bec2..32b6d15 100644 --- a/debian/local/Makefile.in +++ b/debian/local/Makefile.in @@ -48,8 +48,7 @@ DIST_COMMON = $(dist_man_MANS) $(dist_pkgdata_SCRIPTS) \ $(srcdir)/update_smrsh.in $(srcdir)/update_sys.in \ $(srcdir)/update_tls.in $(srcdir)/update_tlsm4.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/build/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs diff --git a/debian/local/Parse_conf.pm.in b/debian/local/Parse_conf.pm.in index ecb13a7..c3889e3 100644 --- a/debian/local/Parse_conf.pm.in +++ b/debian/local/Parse_conf.pm.in @@ -236,8 +236,8 @@ sub update_values { my ($ok, $var); # Add m(inutes) to {queue,msp}_interval if needed - $parameter{'QUEUE_INTERVAL'} =~ s/^(\d+)$/$1m/; - $parameter{'MSP_INTERVAL'} =~ s/^(\d+)$/$1m/; + $parameter{'QUEUE_INTERVAL'} =~ s/^(p?\d+)$/$1m/; + $parameter{'MSP_INTERVAL'} =~ s/^(p?\d+)$/$1m/; # Also update the queue aging data ($ok, $var) = &get_value('AGE_DATA'); @@ -691,12 +691,14 @@ DAEMON_MAILSTATS="$parameter{'DAEMON_MAILSTATS'}"; # QUEUE_MODE="$parameter{'QUEUE_MODE'}"; # -# QUEUE_INTERVAL="$parm_def{'QUEUE_INTERVAL'}"; Timespec (digits+w|d|h|m|s) +# QUEUE_INTERVAL="$parm_def{'QUEUE_INTERVAL'}"; Timespec (p?digits+w|d|h|m|s) # Interval at which to run the MTA queues. What interval should you use? # The amount of time that is acceptable before retrying delivery on # mail that couldn't be delivered in one run, or how long an item can # set in the queue before having the first delivery attempt done. # +# NOTE: To use persistent queue-runners use this form: p120m +# # NOTE: If you leave this field blank, You get *NO* queue runners !!! # QUEUE_INTERVAL="$parameter{'QUEUE_INTERVAL'}"; @@ -828,6 +830,11 @@ HANDS_OFF="$parameter{'HANDS_OFF'}"; # interval, so that messages are tried twice in each successively # slower queue. # +# NOTE: some values just wont work, due to crontab pecularities +# a value of 90 minutes will actually be run at every x:30 ! +# Please check /etc/cron.d/sendmail to make sure it is doing what +# you thought it should ! +# # 2. Criteria (optional and defaults to interval). This is the # specification of which files to move. It defaults moving # files whose age in the queues exceeds the interval. @@ -846,9 +853,9 @@ HANDS_OFF="$parameter{'HANDS_OFF'}"; # /var/spool/mqueue/main to /var/spool/mqueue/hourly # # AGE_DATA="[['25m', '', 'hourly', 'main'],\\ -# ['125', '', 'daily', 'hourly']]"; +# ['120m', '', 'daily', 'hourly']]"; # Same as the above, but also move files from the hourly queue -# to the daily queue after 125 minutes in the hourly queue. +# to the daily queue after 120 minutes in the hourly queue. # # AGE_DATA="[['25m',\\ # '-e \\'\$msg{message}[0] == /Deferred: 452 4.2.2 Over quota/\\'',\\ diff --git a/debian/local/update_conf.in b/debian/local/update_conf.in index 90d0550..c6b2ff9 100644 --- a/debian/local/update_conf.in +++ b/debian/local/update_conf.in @@ -59,12 +59,14 @@ $main::opt_output_file=''; $main::opt_input_file=''; $main::opt_debug=''; $main::opt_test=''; +$main::opt_static=''; my @options = qw( help|h output-file|output_file|o:s input-file|input_file|i:s debug! test! + static! ); my $result = GetOptions(@options); if ( ! $result ) { @@ -75,6 +77,8 @@ if ( $main::opt_help ) { warn "$0 \n"; warn " -help\n" if $main::opt_help; warn " -debug\n" if $main::opt_debug; + warn " -test\n" if $main::opt_debug; + warn " -static\n" if $main::opt_static; warn " -o $main::opt_output_file\n" if $main::opt_output_file; warn " -i $main::opt_input_file\n" if $main::opt_input_file; exit 0; @@ -87,10 +91,15 @@ if ( $main::opt_test ) { &sm2cron_time("4h"); &sm2cron_time("3d"); &sm2cron_time("2w"); - &sm2cron_time("5w"); &sm2cron_time("2w3d4h5m6s"); &sm2cron_time("89s"); &sm2cron_time("90m"); + &sm2cron_time("150m"); + &sm2cron_time("125"); + &sm2cron_time("31d"); + &sm2cron_time("35d"); + &sm2cron_time("5w"); + &sm2cron_time("9w"); exit 0; }; @@ -157,6 +166,12 @@ sub check_nullclient { # #------------------------------------------------------------------------ # Compute time setting for Crontab entry (simplistic) +# NOTE: It does the basics pretty darned well... *BUT* +# It fails, miserably, on things that would multiple lines: +# 90 minutes: does it at 30 minutes (90-60) +# Or are just edge conditions: +# 25 hours: treated as 24 hours +# 35 days: does it the 7rd of every month (35-28) #------------------------------------------------------------------------ sub sm2cron_time { my $month = 0; @@ -171,9 +186,10 @@ sub sm2cron_time { my ($sm) = @_; my $seconds = 0; + my $randstart = '00'; if ($sm eq '') { if ( $main::opt_test ) { - print "$cron = sm2cron_time($sm);\n"; + print "mm hh dom mon dow = sm2cron_time($sm);\n"; }; return ($cron, $seconds); }; @@ -183,73 +199,93 @@ sub sm2cron_time { # to cron time # m h dom mon dow $t = $sm; - ($week = $sm) =~ s/.*?(\d+)w.*/$1/ if ( $t =~ /w/ ); - ($day = $sm) =~ s/.*?(\d+)d.*/$1/ if ( $t =~ /d/ ); - ($hour = $sm) =~ s/.*?(\d+)h.*/$1/ if ( $t =~ /h/ ); - ($minute = $sm) =~ s/.*?(\d+)m.*/$1/ if ( $t =~ /m/ ); - ($second = $sm) =~ s/.*?(\d+)s.*/$1/ if ( $t =~ /s/ ); - # Convert weeks to days (roughly) - $day = $day + (7 * $week); + if ( $t =~ /^\d+$/ ) { + $minute = $sm; } + else { + ($week = $sm) =~ s/.*?(\d+)w.*/$1/ if ( $t =~ /w/ ); + ($day = $sm) =~ s/.*?(\d+)d.*/$1/ if ( $t =~ /d/ ); + ($hour = $sm) =~ s/.*?(\d+)h.*/$1/ if ( $t =~ /h/ ); + ($minute = $sm) =~ s/.*?(\d+)m.*/$1/ if ( $t =~ /m/ ); + ($second = $sm) =~ s/.*?(\d+)s.*/$1/ if ( $t =~ /s/ ); + } + # Rationalize the time + $seconds = ($week * 7 * 24 * 60 * 60) + + ($day * 24 * 60 * 60) + + ($hour * 60 * 60) + + ($minute * 60) + + $second; + $month = $seconds / (4 * 7 * 24 * 60 * 60); + $seconds = $seconds % (4 * 7 * 24 * 60 * 60); + $week = $seconds / (7 * 24 * 60 * 60); + $seconds = $seconds % (7 * 24 * 60 * 60); + $day = $seconds / (24 * 60 * 60); + $seconds = $seconds % (24 * 60 * 60); + $hour = $seconds / (60 * 60); + $seconds = $seconds % (60 * 60); + $minute = $seconds / (60); + $seconds = $seconds % (60); + $second = $seconds; # Cron doesn't do seconds, round to minutes or ignore - $seconds = $seconds + $second; - $tmp = $second; - $second = sprintf("%02d", $second%60); - $minute = $minute + sprintf("%02d", ($tmp-$second)/60); - $minute = $minute + 1 if ($second >= 30); + $minute = $minute + 1 if ($second > 30); # Minute of hour (0-59) - $seconds = $seconds + ($minute * 60); - $tmp = $minute; - $minute = sprintf("%02d", $minute%60); - $hour = $hour + sprintf("%02d", ($tmp-$minute)/60); + $minute = sprintf("%02d", $minute); + $randstart = sprintf("%02d", int(rand(60))) if (!$main::opt_static); if (0 < $hour + $day + $week + $month) { - $hour = $hour + 1 if ($minute >= 30); - $cron = "00 "; + if (1 >= $minute) { + $cron = "$randstart "; } + else { + $cron = "$minute "; } + } + elsif (1 >= $minute) { + $cron = "* "; } else { - $minute = '01' if ($minute == 0); $cron = "*/$minute"; }; # Hour of day (0-23) - $seconds = $seconds + ($hour * 60 * 60); - $tmp = $hour; - $hour = sprintf("%02d", $hour%24); - $day = $day + sprintf("%02d", ($tmp-$hour)/24); + $hour = sprintf("%02d", $hour); + $randstart = sprintf("%02d", int(rand(24))) if (!$main::opt_static); if (0 < $day + $week + $month) { - $day = $hour + 1 if ($minute >= 30); - $cron = "$cron 00 "; + if (1 >= $hour) { + $cron = "$cron $randstart "; } + else { + $cron = "$cron $hour "; } } - elsif ($hour != 0) { - $cron = "$cron */$hour"; + elsif (1 >= $hour) { + $cron = "$cron * "; } else { - $cron = "$cron * "; + $cron = "$cron */$hour"; }; # Day of month (1-31) - $tmp = $day; - $day = sprintf("%02d", $day%32); - $month = $month + sprintf("%02d", ($tmp-$day)/32); + $day = $day + (7 * $week); + $day = sprintf("%02d", $day); + $randstart = 1 + sprintf("%02d", int(rand(31))) if (!$main::opt_static); if (0 < $month) { - $month = $month + 1 if ($day >= 15); - $cron = "$cron 01 "; + if (1 >= $day) { + $cron = "$cron $randstart "; } + else { + $cron = "$cron $day "; } } - elsif ($day != 0) { - $cron = "$cron */$day"; + elsif (1 >= $day) { + $cron = "$cron * "; } else { - $cron = "$cron * "; + $cron = "$cron */$day"; }; # Month in year (1-12) - $month = sprintf("%02d", $month%12); - if (0 < $month) { - $cron = "$cron */$month"; + $month = sprintf("%02d", $month); + $randstart = 1 + sprintf("%02d", int(rand(12))) if (!$main::opt_static); + if (1 >= $month) { + $cron = "$cron * "; } else { - $cron = "$cron * "; + $cron = "$cron */$month"; }; $cron = "$cron *"; # Day of week (0-7) diff --git a/debian/patches/8.14/8.14.3/kerberos.patch b/debian/patches/8.14/8.14.3/kerberos.patch new file mode 100644 index 0000000..969a0f6 --- /dev/null +++ b/debian/patches/8.14/8.14.3/kerberos.patch @@ -0,0 +1,23 @@ +# Attempt to support Kerberos +#### Patch data follows #### +diff -c 'sendmail/conf.c' 'debian/patches.conf.c' +Index: ./sendmail/conf.c +Prereq: 8.1141 +*** ./sendmail/conf.c Mon May 26 19:55:54 2008 +--- ./debian/conf.c Mon May 26 20:02:22 2008 +*************** +*** 3891,3896 **** +--- 3891,3902 ---- + vendor_post_defaults(e) + ENVELOPE *e; + { ++ /* ++ * Kerberos V support ++ */ ++ sm_setuserenv("KRB5CCNAME", NULL); ++ sm_setuserenv("KRB5KTNAME", NULL); ++ + #ifdef __QNX__ + /* Makes sure the SOCK environment variable remains */ + sm_setuserenv("SOCK", NULL); +#### End of Patch data #### diff --git a/debian/sensible_mda/Makefile.in b/debian/sensible_mda/Makefile.in index d90cac6..24f2b8a 100644 --- a/debian/sensible_mda/Makefile.in +++ b/debian/sensible_mda/Makefile.in @@ -38,8 +38,7 @@ subdir = sensible_mda DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/sensible-mda.c.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/build/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs |