diff options
229 files changed, 49992 insertions, 0 deletions
diff --git a/debian/Debian-specific b/debian/Debian-specific new file mode 100644 index 0000000..7692165 --- /dev/null +++ b/debian/Debian-specific @@ -0,0 +1,211 @@ +Please take a gander at /usr/share/doc/sendmail/sendmail/README.Debian.gz - +it has a quick overview of important matters. + +Changes: Items that cause a functional difference in the way + sendmail works. + + These items *may* bite you if you aren't careful ! + +Removed: Items that are not shipped + +Enhancements: Items above and beyond the base sendmail distribution + These will be Debian add ons, or items the sendmail folk + consider *not ready for prime time* (the _FFR_'s). + + These items should *not* bite you, but be aware that + other distributions may not have anything comparable. + +Patches: Items correcting flaws in the original sendmail distribution + these items are culled from c.m.s, notes from developers, + and user input. + ++++++++++++++++++++++++++++++Sendmail 8.12.0:++++++++++++++++++++++++++++++++ + + Changes:------------------------------------------------------------- + 1) rmail/rmail.c: Deliver mail foreground, not queued + Roland Rosenfeld (closes: bug #31138) + + 2) cf/feature/local_procmail.m4: Remove -Y from procmail + (closes: bug #25639) + + 3) sendmail/control.c: Make control socket mode 0660 + + 4) cf/mailer/cyrus.m4 Support cyrus-deliver + + 5) cf/mailer/local.m4 Support FEATURE(dont_masquerade_local) + + Removed:------------------------------------------------------------- + + 1) TLS support disabled because the maintainer is in the US, + he'll need to wait until Debian supports crypto export from US. + + 2) smtpd alias for sendmail (in smtpd package) + moved to /usr/lib/sm.bin + + 3) hoststat alias for sendmail (in newscache package) + moved to /usr/lib/sm.bin + + 4) vacation vacation program (in vacation package) + moved to /usr/lib/sm.bin + + Enhancements:-------------------------------------------------------- + 1) cf/cf/debproto.m4: Sample, mimimal sendmail.mc file + cf/ostype/debian.m4: Debian customizations for OSTYPE(debian) + + 2) cf/feature/dont_masquerade_local.m4 -- superceded by + FEATURE(local_no_masquerade) + + 3) cf/hack/nodns.m4: /etc/mail/service.switch-nodns + (closes: bug#24608) + + 4) /etc/mail/sendmail.conf + /etc/init.d/sendmail Nice, powerfull means to control sendmail + + Patches:------------------------------------------------------------- + 1) cf/mailer/cyrus.m4: Support Debian cyrus delivery agent pkg + Manoj Srivastava (closes: bug #63441) + ++++++++++++++++++++++++++++++Sendmail 8.11.6:++++++++++++++++++++++++++++++++ + + Changes:------------------------------------------------------------- + 1) rmail/rmail.c: Deliver mail foreground, not queued + Roland Rosenfeld (closes: bug #31138) + + 2) cf/feature/local_procmail.m4: Remove -Y from procmail + (closes: bug #25639) + + 3) sendmail/control.c: Make control socket mode 0660 + + 4) cf/mailer/cyrus.m4 Support cyrus-deliver + + 5) cf/mailer/local.m4 Support FEATURE(dont_masquerade_local) + + Removed:------------------------------------------------------------- + 1) TLS support disabled because the maintainer is in the US, + he'll need to wait until Debian supports crypto export from US. + 2) smtpd alias for sendmail (in smtpd package) + moved to /usr/lib/sm.bin + 3) hoststat alias for sendmail (in newscache package) + moved to /usr/lib/sm.bin + 4) vacation vacation program (in vacation package) + moved to /usr/lib/sm.bin + + Enhancements:-------------------------------------------------------- + 1) cf/cf/debproto.m4: Sample, mimimal sendmail.mc file + cf/ostype/debian.m4: Debian customizations for OSTYPE(debian) + + 2) cf/feature/dont_masquerade_local.m4 + cf/mailer/local.m4: Don't masquerade local to local delivery + Wichert Akkerman + + 3) cf/hack/nodns.m4: /etc/mail/service.switch-nodns + (closes: bug#24608) + + 4) /etc/default/sendmail + /etc/init.d/sendmail Nice, powerfull means to control sendmail + + Patches:------------------------------------------------------------- + 1) cf/mailer/cyrus.m4: Support Debian cyrus delivery agent pkg + Manoj Srivastava (closes: bug #63441) + + ++++++++++++++++++++++++++++++Sendmail 8.10.2:++++++++++++++++++++++++++++++++ + + Changes:------------------------------------------------------------- + 1) rmail/rmail.c: Deliver mail foreground, not queued + Roland Rosenfeld (closes: bug #31138) + + 2) cf/feature/local_procmail.m4: Remove -Y from procmail + (closes: bug #25639) + + 3) sendmail/control.c: Make control socket mode 0660 + + Removed:------------------------------------------------------------- + 1) smtpd alias for sendmail (in smtpd package) + 2) hoststat alias for sendmail (in newscache package) + 3) vacation vacation program (in vacation package) + + Enhancements:-------------------------------------------------------- + 1) cf/cf/debproto.m4: Sample, mimimal sendmail.mc file + cf/ostype/debian.m4: Debian customizations for OSTYPE(debian) + + 2) cf/feature/dont_masquerade_local.m4 + cf/mailer/local.m4: Don't masquerade local to local delivery + Wichert Akkerman + + 3) cf/hack/nodns.m4: /etc/mail/service.switch-nodns + (closes: bug#24608) + + 4) cf/feature/dssl.m4 + cf/feature/imrss.m4 + cf/feature/orbs.m4 Note, these are deprecated and will + cf/feature/orca.m4 be removed soon, please update to use + cf/feature/rbl.m4 the FEATURE(dnsbl,[addr],[message]) + + 5) /etc/default/sendmail + /etc/init.d/sendmail Nice, powerfull means to control sendmail + + Patches:------------------------------------------------------------- + 1) cf/mailer/cyrus.m4: Support Debian cyrus delivery agent pkg + Manoj Srivastava (closes: bug #63441) + + 2) mail.local/mail.local.c: Fix unsafe fgets in mail.local + Wichert Akkerman (closes: bug #63715) + + ++++++++++++++++++++++++++++++Sendmail 8.9.3:+++++++++++++++++++++++++++++++++ + + Changes:------------------------------------------------------------- + 1) rmail/rmail.c: Deliver mail foreground, not queued + Roland Rosenfeld (closes: bug #31138) + + 2) cf/feature/local_procmail.m4: Remove -Y from procmail + (closes: bug #25639) + + Removed:------------------------------------------------------------- + 1) smtpd alias for sendmail (in smtpd package) + 2) hoststat alias for sendmail (in newscache package) + 3) vacation vacation program (in vacation package) + + Enhancements:-------------------------------------------------------- + 1) cf/cf/debproto.m4: Sample, mimimal sendmail.mc file + cf/ostype/debian.m4: Debian customizations for OSTYPE(debian) + + 2) cf/feature/dont_masquerade_local.m4 + cf/mailer/local.m4: Don't masquerade local to local delivery + Wichert Akkerman + + 3) cf/hack/nodns.m4: /etc/mail/service.switch-nodns + (closes: bug#24608) + + 4) cf/feature/dssl.m4 + cf/feature/imrss.m4 + cf/feature/orbs.m4 + cf/feature/orca.m4 + cf/feature/rbl.m4 + cf/m4/cfhead.m4 + cf/m4/proto.m4: Anti spam/relay/etc + Claus Assmann + + 5) cf/m4/proto.m4 (patch) + cf/feature/ldap.m4: Better support of LDAP maps + + 6) cf/feature/local_procmail.m4: FEATURE(local_procmail) before MAILER(local) + + Patches:------------------------------------------------------------- + 1) cf/mailer/cyrus/m4: Support Debian cyrus delivery agent pkg + Manoj Srivastava (closes: bug #63441) + + 2) mail.local/mail.local.c: Fix unsafe fgets in mail.local + Wichert Akkerman (closes: bug #63715) + + 3) src/mime.c + src/headers.c: Duplicate "Content-Transfer-Encoding" + Per Hedeland/c.m.s (closes: bug #28279) + + 4) src/ldap_map.h + src/map.c: Correct LDAP mapping + + 5) src/main.c: sendmail -bi(newalias) DOS + c.m.s (closes: bug #51126) +vim: noautoindent diff --git a/debian/Makefile.in b/debian/Makefile.in new file mode 100644 index 0000000..0ff62fd --- /dev/null +++ b/debian/Makefile.in @@ -0,0 +1,913 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in \ + $(top_srcdir)/./build/debian/libmilter-dev.dirs.in \ + $(top_srcdir)/./build/debian/libmilter-dev.links.in \ + $(top_srcdir)/./build/debian/libmilter-dev.postrm.in \ + $(top_srcdir)/./build/debian/libmilter-dev.preinst.in \ + $(top_srcdir)/./build/debian/libmilter.dirs.in \ + $(top_srcdir)/./build/debian/libmilter.links.in \ + $(top_srcdir)/./build/debian/libmilter.lintian-overrides.in \ + $(top_srcdir)/./build/debian/libmilter.postrm.in \ + $(top_srcdir)/./build/debian/libmilter.preinst.in \ + $(top_srcdir)/./build/debian/rmail.dirs.in \ + $(top_srcdir)/./build/debian/rmail.postrm.in \ + $(top_srcdir)/./build/debian/rmail.preinst.in \ + $(top_srcdir)/./build/debian/sendmail-base.dirs.in \ + $(top_srcdir)/./build/debian/sendmail-base.postinst.in \ + $(top_srcdir)/./build/debian/sendmail-base.postrm.in \ + $(top_srcdir)/./build/debian/sendmail-base.preinst.in \ + $(top_srcdir)/./build/debian/sendmail-base.prerm.in \ + $(top_srcdir)/./build/debian/sendmail-bin.dirs.in \ + $(top_srcdir)/./build/debian/sendmail-bin.postinst.in \ + $(top_srcdir)/./build/debian/sendmail-bin.postrm.in \ + $(top_srcdir)/./build/debian/sendmail-bin.preinst.in \ + $(top_srcdir)/./build/debian/sendmail-bin.prerm.in \ + $(top_srcdir)/./build/debian/sendmail-bin.suid.in \ + $(top_srcdir)/./build/debian/sendmail-cf.dirs.in \ + $(top_srcdir)/./build/debian/sendmail-cf.postrm.in \ + $(top_srcdir)/./build/debian/sendmail-cf.preinst.in \ + $(top_srcdir)/./build/debian/sendmail-doc.dirs.in \ + $(top_srcdir)/./build/debian/sendmail-doc.postrm.in \ + $(top_srcdir)/./build/debian/sendmail-doc.preinst.in \ + $(top_srcdir)/./build/debian/sendmail.cron.daily.in \ + $(top_srcdir)/./build/debian/sendmail.dirs.in \ + $(top_srcdir)/./build/debian/sendmail.init.d.in \ + $(top_srcdir)/./build/debian/sensible-mda.dirs.in \ + $(top_srcdir)/./build/debian/sensible-mda.postrm.in \ + $(top_srcdir)/./build/debian/sensible-mda.preinst.in \ + $(top_srcdir)/./local/sendmail.in \ + $(top_srcdir)/build/autoconf.mk.in \ + $(top_srcdir)/build/autoconf.pl.in \ + $(top_srcdir)/build/autoconf.sh.in \ + $(top_srcdir)/build/debian/changelog.in \ + $(top_srcdir)/build/debian/changelog.sh.in \ + $(top_srcdir)/build/debian/control.m4.in \ + $(top_srcdir)/build/site.config.m4.in \ + $(top_srcdir)/build/update_chaos.in \ + $(top_srcdir)/cf/debian/autoconf.m4.in \ + $(top_srcdir)/cf/debian/sendmail.mc.in \ + $(top_srcdir)/cf/debian/submit.mc.in \ + $(top_srcdir)/cf/domain/debian-msp.m4.in \ + $(top_srcdir)/cf/domain/debian-mta.m4.in \ + $(top_srcdir)/cf/hack/debian_auth.m4.in \ + $(top_srcdir)/cf/hack/virthost_by_ip.m4.in \ + $(top_srcdir)/cf/ostype/debian.m4.in $(top_srcdir)/configure \ + $(top_srcdir)/examples/dhcp3/dhclient-exit-hooks.d/sendmail.in \ + $(top_srcdir)/examples/network/if-down.d/sendmail.in \ + $(top_srcdir)/examples/network/if-up.d/sendmail.in \ + $(top_srcdir)/examples/ppp/ip-down.d/sendmail.in \ + $(top_srcdir)/examples/ppp/ip-up.d/sendmail.in \ + $(top_srcdir)/examples/resolvconf/update-libc.d/sendmail.in \ + $(top_srcdir)/examples/sasl/sasl.m4.in \ + $(top_srcdir)/examples/tls/starttls.m4.in \ + $(top_srcdir)/local/bug/sendmail/script.in \ + ./build/config.guess ./build/config.sub ./build/depcomp \ + ./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)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs +CONFIG_CLEAN_FILES = build/autoconf.mk build/autoconf.pl \ + build/autoconf.sh build/debian/changelog.sh \ + build/debian/changelog build/update_chaos build/site.config.m4 \ + build/debian/control.m4 libmilter${sm_libmilter_version}.dirs \ + libmilter${sm_libmilter_version}.links \ + libmilter${sm_libmilter_version}.lintian-overrides \ + libmilter${sm_libmilter_version}.postrm \ + libmilter${sm_libmilter_version}.preinst libmilter-dev.dirs \ + libmilter-dev.links libmilter-dev.postrm libmilter-dev.preinst \ + rmail.dirs rmail.postrm rmail.preinst sendmail.dirs \ + sendmail-base.dirs sendmail-base.postinst sendmail-base.postrm \ + sendmail-base.preinst sendmail-base.prerm sendmail-doc.dirs \ + sendmail-doc.postrm sendmail-doc.preinst sendmail-cf.dirs \ + sendmail-cf.postrm sendmail-cf.preinst sendmail.cron.daily \ + sendmail-bin.dirs sendmail.init.d sendmail-bin.postinst \ + sendmail-bin.postrm sendmail-bin.preinst sendmail-bin.prerm \ + sendmail-bin.suid sensible-mda.dirs sensible-mda.postrm \ + sensible-mda.preinst cf/debian/autoconf.m4 \ + cf/debian/sendmail.mc cf/debian/submit.mc \ + cf/domain/debian-msp.m4 cf/domain/debian-mta.m4 \ + cf/hack/debian_auth.m4 cf/hack/virthost_by_ip.m4 \ + cf/ostype/debian.m4 \ + examples/dhcp3/dhclient-exit-hooks.d/sendmail \ + examples/network/if-down.d/sendmail \ + examples/network/if-up.d/sendmail \ + examples/ppp/ip-down.d/sendmail examples/ppp/ip-up.d/sendmail \ + examples/resolvconf/update-libc.d/sendmail \ + examples/sasl/sasl.m4 examples/tls/starttls.m4 \ + local/bug/sendmail/script +SOURCES = +DIST_SOURCES = +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBIAN = @DEBIAN@ +DEBIAN_DH = @DEBIAN_DH@ +DEB_BUILD_ARCH = @DEB_BUILD_ARCH@ +DEB_BUILD_GNU_CPU = @DEB_BUILD_GNU_CPU@ +DEB_BUILD_GNU_SYSTEM = @DEB_BUILD_GNU_SYSTEM@ +DEB_BUILD_GNU_TYPE = @DEB_BUILD_GNU_TYPE@ +DEB_HOST_ARCH = @DEB_HOST_ARCH@ +DEB_HOST_GNU_CPU = @DEB_HOST_GNU_CPU@ +DEB_HOST_GNU_SYSTEM = @DEB_HOST_GNU_SYSTEM@ +DEB_HOST_GNU_TYPE = @DEB_HOST_GNU_TYPE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SM_CPYRT = @SM_CPYRT@ +SM_DATE = @SM_DATE@ +SM_MAXVERS = @SM_MAXVERS@ +SM_MINVERS = @SM_MINVERS@ +SM_VERS = @SM_VERS@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_version = @ac_version@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +am_version = @am_version@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +buildtree = @buildtree@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sm_auth_lib = @sm_auth_lib@ +sm_badepends = @sm_badepends@ +sm_build_arch = @sm_build_arch@ +sm_custom = @sm_custom@ +sm_custom_s = @sm_custom_s@ +sm_databases = @sm_databases@ +sm_date = @sm_date@ +sm_depends = @sm_depends@ +sm_dist_name = @sm_dist_name@ +sm_dist_vers = @sm_dist_vers@ +sm_editmap_envdef = @sm_editmap_envdef@ +sm_editmap_libs = @sm_editmap_libs@ +sm_enable_auth = @sm_enable_auth@ +sm_enable_bind = @sm_enable_bind@ +sm_enable_hesiod = @sm_enable_hesiod@ +sm_enable_ipv6 = @sm_enable_ipv6@ +sm_enable_ldap = @sm_enable_ldap@ +sm_enable_maillock = @sm_enable_maillock@ +sm_enable_milter = @sm_enable_milter@ +sm_enable_ndbm = @sm_enable_ndbm@ +sm_enable_newdb = @sm_enable_newdb@ +sm_enable_nis = @sm_enable_nis@ +sm_enable_nisplus = @sm_enable_nisplus@ +sm_enable_regex = @sm_enable_regex@ +sm_enable_sfio = @sm_enable_sfio@ +sm_enable_shm = @sm_enable_shm@ +sm_enable_tcpd = @sm_enable_tcpd@ +sm_enable_tls = @sm_enable_tls@ +sm_envdef = @sm_envdef@ +sm_features = @sm_features@ +sm_ffr = @sm_ffr@ +sm_hesiod_parms = @sm_hesiod_parms@ +sm_host_arch = @sm_host_arch@ +sm_incdirs = @sm_incdirs@ +sm_ldap_lib = @sm_ldap_lib@ +sm_libmilter_envdef = @sm_libmilter_envdef@ +sm_libmilter_libs = @sm_libmilter_libs@ +sm_libmilter_version = @sm_libmilter_version@ +sm_libs = @sm_libs@ +sm_libsm_envdef = @sm_libsm_envdef@ +sm_libsm_libs = @sm_libsm_libs@ +sm_libsmdb_envdef = @sm_libsmdb_envdef@ +sm_libsmdb_libs = @sm_libsmdb_libs@ +sm_libsmutil_envdef = @sm_libsmutil_envdef@ +sm_libsmutil_libs = @sm_libsmutil_libs@ +sm_m4_ffr = @sm_m4_ffr@ +sm_mail_local_envdef = @sm_mail_local_envdef@ +sm_mail_local_libs = @sm_mail_local_libs@ +sm_mailstats_envdef = @sm_mailstats_envdef@ +sm_mailstats_libs = @sm_mailstats_libs@ +sm_makemap_envdef = @sm_makemap_envdef@ +sm_makemap_libs = @sm_makemap_libs@ +sm_mapdef = @sm_mapdef@ +sm_newdb_lib = @sm_newdb_lib@ +sm_praliases_envdef = @sm_praliases_envdef@ +sm_praliases_libs = @sm_praliases_libs@ +sm_recommends = @sm_recommends@ +sm_revision = @sm_revision@ +sm_rmail_envdef = @sm_rmail_envdef@ +sm_rmail_libs = @sm_rmail_libs@ +sm_sendmail_envdef = @sm_sendmail_envdef@ +sm_sendmail_libs = @sm_sendmail_libs@ +sm_smrsh_envdef = @sm_smrsh_envdef@ +sm_smrsh_libs = @sm_smrsh_libs@ +sm_suggests = @sm_suggests@ +sm_time = @sm_time@ +sm_utc = @sm_utc@ +sm_vacation_envdef = @sm_vacation_envdef@ +sm_vacation_libs = @sm_vacation_libs@ +sm_version = @sm_version@ +sm_version_beta = @sm_version_beta@ +sm_version_major = @sm_version_major@ +sm_version_math = @sm_version_math@ +sm_version_minor = @sm_version_minor@ +sm_version_r = @sm_version_r@ +sm_version_v = @sm_version_v@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# +# AutoMake +# +ACLOCAL_AMFLAGS = -I build +# +# Subdirectories to process +# +SUBDIRS = cf examples local sensible_mda +# +# Kluge to get my own targets include as recursive +# +RECURSIVE_TARGETS = build-arch-recursive build-indep-recursive \ + install-arch-recursive install-indep-recursive +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ + cd $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +build/autoconf.mk: $(top_builddir)/config.status $(top_srcdir)/build/autoconf.mk.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/autoconf.pl: $(top_builddir)/config.status $(top_srcdir)/build/autoconf.pl.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/autoconf.sh: $(top_builddir)/config.status $(top_srcdir)/build/autoconf.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/debian/changelog.sh: $(top_builddir)/config.status $(top_srcdir)/build/debian/changelog.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/debian/changelog: $(top_builddir)/config.status $(top_srcdir)/build/debian/changelog.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/update_chaos: $(top_builddir)/config.status $(top_srcdir)/build/update_chaos.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/site.config.m4: $(top_builddir)/config.status $(top_srcdir)/build/site.config.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +build/debian/control.m4: $(top_builddir)/config.status $(top_srcdir)/build/debian/control.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter${sm_libmilter_version}.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter${sm_libmilter_version}.links: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter.links.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter${sm_libmilter_version}.lintian-overrides: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter.lintian-overrides.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter${sm_libmilter_version}.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter${sm_libmilter_version}.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter-dev.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter-dev.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter-dev.links: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter-dev.links.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter-dev.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter-dev.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +libmilter-dev.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/libmilter-dev.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +rmail.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/rmail.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +rmail.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/rmail.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +rmail.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/rmail.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-base.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-base.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-base.postinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-base.postinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-base.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-base.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-base.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-base.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-base.prerm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-base.prerm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-doc.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-doc.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-doc.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-doc.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-doc.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-doc.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-cf.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-cf.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-cf.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-cf.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-cf.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-cf.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail.cron.daily: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail.cron.daily.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-bin.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-bin.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail.init.d: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail.init.d.in $(top_srcdir)/./local/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-bin.postinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-bin.postinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-bin.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-bin.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-bin.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-bin.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-bin.prerm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-bin.prerm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sendmail-bin.suid: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sendmail-bin.suid.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sensible-mda.dirs: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sensible-mda.dirs.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sensible-mda.postrm: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sensible-mda.postrm.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sensible-mda.preinst: $(top_builddir)/config.status $(top_srcdir)/./build/debian/sensible-mda.preinst.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/debian/autoconf.m4: $(top_builddir)/config.status $(top_srcdir)/cf/debian/autoconf.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/debian/sendmail.mc: $(top_builddir)/config.status $(top_srcdir)/cf/debian/sendmail.mc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/debian/submit.mc: $(top_builddir)/config.status $(top_srcdir)/cf/debian/submit.mc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/domain/debian-msp.m4: $(top_builddir)/config.status $(top_srcdir)/cf/domain/debian-msp.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/domain/debian-mta.m4: $(top_builddir)/config.status $(top_srcdir)/cf/domain/debian-mta.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/hack/debian_auth.m4: $(top_builddir)/config.status $(top_srcdir)/cf/hack/debian_auth.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/hack/virthost_by_ip.m4: $(top_builddir)/config.status $(top_srcdir)/cf/hack/virthost_by_ip.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +cf/ostype/debian.m4: $(top_builddir)/config.status $(top_srcdir)/cf/ostype/debian.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/dhcp3/dhclient-exit-hooks.d/sendmail: $(top_builddir)/config.status $(top_srcdir)/examples/dhcp3/dhclient-exit-hooks.d/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/network/if-down.d/sendmail: $(top_builddir)/config.status $(top_srcdir)/examples/network/if-down.d/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/network/if-up.d/sendmail: $(top_builddir)/config.status $(top_srcdir)/examples/network/if-up.d/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/ppp/ip-down.d/sendmail: $(top_builddir)/config.status $(top_srcdir)/examples/ppp/ip-down.d/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/ppp/ip-up.d/sendmail: $(top_builddir)/config.status $(top_srcdir)/examples/ppp/ip-up.d/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/resolvconf/update-libc.d/sendmail: $(top_builddir)/config.status $(top_srcdir)/examples/resolvconf/update-libc.d/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/sasl/sasl.m4: $(top_builddir)/config.status $(top_srcdir)/examples/sasl/sasl.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +examples/tls/starttls.m4: $(top_builddir)/config.status $(top_srcdir)/examples/tls/starttls.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +local/bug/sendmail/script: $(top_builddir)/config.status $(top_srcdir)/local/bug/sendmail/script.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d $(distdir) || mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-shar dist-tarZ dist-zip distcheck distclean \ + distclean-generic distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# +# Debian targets, phase out +# +.PHONY: build-indep build-indep-am +.PHONY: build-arch build-arch-am +.PHONY: install-indep install-indep-am +.PHONY: install-arch install-arch-am +build-indep: build-indep-recursive +build-indep-am: +build-arch: build-arch-recursive +build-arch-am: +install-indep: install-indep-recursive +install-indep-am: +install-arch: install-arch-recursive +install-arch-am: +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/NEWS b/debian/NEWS new file mode 100644 index 0000000..5dddeec --- /dev/null +++ b/debian/NEWS @@ -0,0 +1,42 @@ +sendmail (8.13.1-14) unstable; urgency=low + + * TLS errors: + From http://lists.debian.org/debian-security/2003/09/msg00209.html + > I cannot get STARTTLS to work with the newest sendmail in unstable. + > It *always* complains that the key file is group readable! + > Now, before you scream RTFM, I did use GroupReadableKeyFile! + + please copy "/usr/share/sendmail/examples/starttls.m4 to /etc/mail/tls and + execute 'sendmailconfig' after you copied the file over. + + It's an updated file you have to use by now. You should have read the + install message by the sendmail update and the changelog too ;p + + You have to do the same with SASLv2 m4 if you use SASLv2 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Fri, 19 Oct 2007 02:13:30 -0000 + +sendmail (8.13.1-8) unstable; urgency=low + + * Make initial install prompt free (by using a sane&safe default): + + listen only to 127.0.0.1 + + if /etc/mailname extant, use it as the masquerade value + + no smarthost (would have to prompt) + + Issue msg to run sendmailconfig *later* if desired + closes: #112397 #213022 #227464 + + If the default setup isn't what you'd like, you can run sendmailconfig + at any time to change your preferences... + + * Correct sasl2 instructions - closes: #265976 + Here's what you must do to make sasl usable with smtp/smmsp: + + chown smmta:smmsp /etc/sasldb2 (problematic if used by others) + + dpkg-statoverride --remove /var/run/saslauthd + + dpkg-statoverride --add root sasl 711 /var/run/saslauthd + + Now, anytime a user authenticates with a PLAIN password, SASL will + add the password to /etc/sasldb2 (automigrate) and subsequently, the + user may use more secure mechanisms. + + -- Richard A Nelson (Rick) <cowboy@debian.org> Fri, 19 Oct 2007 02:13:30 -0000 + diff --git a/debian/README.Build b/debian/README.Build new file mode 100644 index 0000000..d9f6868 --- /dev/null +++ b/debian/README.Build @@ -0,0 +1,114 @@ + Welcome to the badlands production of Sendmail + 2001/08/07 12:00:00 + +If you're reading this, I'll assume you'd like to build your own private +copy of sendmail using the Debian supplied version as a starting point. + +I've tried (hard) to make this as easy as possible, and would greatly +appreciate any feedback. + +I've built sendmail 8.7.6 - 8.12.0 +on Debian slink - sid with this setup. + +I see a few reasons to build sendmail yourself: + 1) You want to build the current package on an older/newer Debian release + 2) You want to port to a different architecture + 3) You want additional features not included in the stock distribution + 4) You want to remove features from the stock distribution + 5) You want to further customize/patch the stock distribution + +First, you'll need to locate, download, and unpack the source from a +Debian site (which, I guess you've already done that if you are reading this). + +Then, what you do depends upon why you're building: + + 1) You want to build the current package on an older/newer Debian release: + Hopefully, autoconf will automagically take care of things for you! + A) Build the package using whatever tools you're used to: + dpkg-buildpackage -rfakeroot -uc -us + debuild -rfakeroot -uc -us + etc. + B) If you get a successful build, great ! install it and enjoy !!! + C) If you get any build errors, contact me and we'll figure out what + to do... probably will be a simple update to the autoconf setup. + + 2) You want to port to a different architecture: + This is pretty much like 1) except that you're more likely to run + into problems ;-( Likely error candidates are kernel/library headers + and lack of support for desired add-ons (other -dev packages). + + See Known Issues below and Follow the directions for 1) above. + + 3) You want additional features not included in the stock distribution: + This should be fairly rare, as the stock distribution includes just + about everything !!! + + Follow the directions for 5) below and let me know - I'll most likely + add the support to the stock package, especially if it doesn't conflict + with other options. + + 4) You want to remove features from the stock distribution: + This is likely to be due to some kind of library conflict, or a + desire to reduce the package size. + + To remove most features, just make sure you *DO NOT* have the -dev + package for that feature installed - autoconf will do the rest ! + In these cases, Follow the directions for 1) above. + + Otherwise, Follow the directions for 5) below. + + 5) You want to further customize/patch the stock distribution: + A) Decide which features you wish to support (LDAP,SASL,TLS, etc.) + B) Install the apropriate -dev packages (libssl-dev, etc.) + C) Evaluate the following files for updates: + debian/build/site.config.m4.in ==> Sendmail compile config + debian/cf/ostype/debian.m4.in ==> Common .mc file config + debian/cf/domain/debian-msp.m4.in ==> MSP .mc file config + debian/cf/domain/debian-mta.m4.in ==> MTA .mc file config + D) Examine debian/rules for possible overrides (listed in the + header... Don't change debian/rules because it will get replaced + by the configure step. + E) Create any necessary patches (or contact me for assistance). + Patches go in debian/patches/${version}/ and must be able + to be applied with -p0 from debian/.. There's almost always + at least one existing patch you can peek at for an example. + F) Build the package as outlined in 1) above. + G) Please pass the patch on to me, with any description you have + so that if it is common, it can get added to the Debian stock + distribution, and maybe forwarded upstream (with your approval). + +Known issues: + Arch: + arm: 1) + m68k: 2) + Sendmail: + <8.10.0 3) + Misc: + IPV6 4) + + 1) Shared memory support requires a 2.2.x; x>=19 or 2.4.x kernel to + compile on. Runtime support also requires said kernels, but the + support can be turned on/off at runtime, so the real constraint + is having an appropriate kernel for building on. + - Can be overridden via configure option (see top of debia/rules) + - Defaulted by a arch test in configure - if you hit this on + your arch, let me know and I'll update the test. + + 2) Compiler miss-optimizing long-long values + - Supported via a patch making the test variables volatile so + the beast builds. I don't know of any runtime problems, but hey... + + 3) Sendmail <8.10.0 will *NOT* compile against libdb3-dev! + - Install libdb2-dev for the compilation (db2 and db3 can coexist + with newer libc/libdbx packages) - you can then reinstall libdb3-dev + if you need it for other things. + + 4) IPV6 support requires the bind-8 developement package (bind-dev) + because the libc folk have changed things above and beyond bind-8, + and sendmail can't figure out what to do. + +PS: This is obviously a *very* rough draft, please let me know how to make + it more useful for you! + +-- +Rick Nelson (cowboy@debian.org) diff --git a/debian/README.Debian.libmilter-dev b/debian/README.Debian.libmilter-dev new file mode 100644 index 0000000..f621a7c --- /dev/null +++ b/debian/README.Debian.libmilter-dev @@ -0,0 +1,25 @@ +The sendmail Mail Filter API (Milter) is designed to allow third-party +programs access to mail messages as they are being processed in order to +filter meta-information and content. + +NOTE: With Sendmail 8.12.0 and above, the Milter API is built-in. +Before 8.12.0, both libmilter and the callouts in sendmail are marked +as an FFR (For Future Release). This means that support is *NOT* +guaranteed - but things have been working well, and the usenet/mailing +list (comp.mail.sendmail) does help if you have questions/problems. + +Everything you'll need to create a milter filter is contained in +/usr/share/doc/sendmail (for which you need to install sendmail-doc): + + - libmilter/README Document on build/install/config for milter + NOTE: see updated make in milter directory + - cf.README Document on configuring milter in sendmail.mc + - RELEASE_NOTES Any late breaking news + +and /usr/share/sendmail/examples (for which you need to install sendmail): + + - examples/milter/* Sample milter filter and makefile + +-- +Rick Nelson +cowboy@debian.org diff --git a/debian/README.Debian.sendmail b/debian/README.Debian.sendmail new file mode 100644 index 0000000..6188f37 --- /dev/null +++ b/debian/README.Debian.sendmail @@ -0,0 +1,111 @@ + ***** Important notes on sendmail 8.12.0 **** + +*) This is a significant improvement in security, functionality and speed ! + I strongly urge you to install sendmail-doc and peruse files here and in + /usr/share/doc/sendmail-doc + +*) Sendmail has extended control over queue management, and these changes can + cause a performance drop if you don't change your local configuration. + + Old: + MaxDaemonChildren controlled number of listener *and* queue runners + + Sendmail would fork as many children as needed to run the queues + + New: + MaxDaemonChildren still works as a total limit + MaxQueueChildren limits *only* the number of total queue runners + MaxRunnersPerQueue limits the number of runners per individual + queue (in 8.11+, you can have multiple queues) -- *AND* you + can override this global limit on per queue basis! + MaxQueueRunSize limits the number of messages processed per queue run + + Sendmail only forks upto MaxRunnersPerQueue for each queue per run + + The gotcha here is that MaxRunnersPerQueue defaults to one ! + + I've changed the default MaxRunnersPerQueue to 5, so deliveries aren't + single threaded, but you may want to have more or less than 5. + +*) Check out queue groups!!! It can significantly improve throughput + see /usr/share/doc/sendmail-doc/cf.README.gz + and /usr/share/doc/sendmail-doc/op/op.{ps,txt}.gz + +*) Sendmail is *much* more secure now, and you'll never have problems + because sendmail doesn't accept new submissions (when using the sendmail + command, TCP connections will still be refused). + + Message submission (sendmail -bs, -m, etc.) now use a SGID binary and + a separate g+w message queue. + + see /usr/share/doc/sendmail-doc/sendmail.SECURITY.gz for further info + on the changes - which should be transparent to both the admin and user. + +*) The Debian package includes the ability to run sendmail in a variety of + ways: + MTA listener (port 25): None, daemon, or via INETD + MTA queue runner: None, daemon, or via cron + MSP queue runner: None, daemon, or via cron + MTA queue aging: None, or via cron + See /etc/mail/sendmail.conf for more details + +*) Sendmail now supports multiple queues! You can distribute queues + across devices, and the queues are run independantly - improving + throughput ! + +*) There are new queue sort orders - amongst them are: + FileName: removes the need to read .qf files + Random: good for multi-queue runners + +*) Virtual hosting support has been enhanced in the os/site debian.m4 + file. If you need more, checkout DAEMON_OPTIONS (Modifier=b) + see /usr/share/doc/sendmail-doc/cf.README.gz + and /usr/share/doc/sendmail-doc/op.{ps,txt}.gz + let me know what you think - any more extensions you'd like to see? + +*) IPv6 support is inboard, but Linux does things oddly (and differently + wrt kernel versions)... To run IPv6 on 2.2.x and 2.4.x, try this: + FEATURE(`no_default_msa')dnl + CLIENT_OPTIONS(`Family=inet6, Modifier=h')dnl + DAEMON_OPTIONS(`Port=smtp, Name=MTA-v6, Family=inet6')dnl + DAEMON_OPTIONS(`Port=587, Name=MSA-v6, Family=inet6, M=aE')dnl + +*) Sendmail now always uses TCP wrappers (/etc/hosts.allow /etc/hosts.deny) + This is a change from prior versions where wrapper support was enabled + via sendmail.mc. + + Please make sure you add the appropriate entry to the /etc/hosts.* file. + The most likely candidate is to place sendmail: all in /etc/hosts.allow + +*) sendmail.st (for mailstats command) is *NOT* automagically created + because writing the statistic can be a performance hinderance. + If you want statistics: touch /var/lib/sendmail/sendmail.st + +*) You should *really* read RELEASE_NOTES... There are *many* changes for + spam control. + A) Relaying is, by default, prohibitted + B) Mail from non-resolvable domains is, by default, prohibitted + + **** Other information **** + +This Debian package includes an automatic configuration utility +`sendmailconfig' which can be run at any time to modify the current sendmail +configuration. + +Most mail-related configuration files are kept in the /etc/mail directory. + +Specialized configurations can be accomplished by editing the file +/etc/mail/sendmail.mc by hand and then running `sendmailconfig' to generate +and use the appropriate corresponding sendmail.cf file. Such configurations +can make use of the m4 configuration macros kept in the +/usr/share/sendmail/cf directory. + +See also the other documentation in this directory and in the optional +directory /usr/share/doc/sendmail-doc (installed via sendmail-doc package). + +Finally, the file /etc/aliases holds a text representation of the current mail +aliases. See the aliases(5) man page for more information. If you edit this +file, be sure to run `newaliases' to update the corresponding binary database. + +Rick Nelson +cowboy@debian.org diff --git a/debian/README.Debian.sendmail-doc b/debian/README.Debian.sendmail-doc new file mode 100644 index 0000000..358d1c8 --- /dev/null +++ b/debian/README.Debian.sendmail-doc @@ -0,0 +1,11 @@ +This is the documentation directory for the sendmail program. + +The material here is optional, but may be important in configuring +sendmail for your use. + +Other information (and examples) can be found in the following directories: + 1) /usr/share/doc/sendmail Required documentation and examples + 2) /usr/share/doc/libmilter-dev Required documentation for Mail fILTERs + +Rick Nelson +cowboy@debian.org diff --git a/debian/README.potato b/debian/README.potato new file mode 100644 index 0000000..94f4d7e --- /dev/null +++ b/debian/README.potato @@ -0,0 +1,128 @@ +# +# COMPILING THE DEBIAN SENDMAIL PACKAGE ON POTATO +# +I am writing this document to summarize the assistance that Richard A +Nelson (Rick) <cowboy@debian.org> gave me in getting the +sendmail-8.12.1-1 package to compile under Potato. Hopefully this +will save him the effort of responding to other email from people as +clueless as myself. + +Pre-requisites (supplied by potato): + Linux 2.2.19 or 2.4.7+ for shm support. + m4 + debhelper 1.1.17+ + groff + bsdmainutils + libopenldap-dev + libwrap0-dev + liblockfile-dev + libpam0g-dev + automake + libtool + libdb2-dev + dpkg-dev + +Pre-requisites (that you must fulfill on your own): + libsasl-dev + +Instructions on how to fulfill above dependency: +1) download from your nearest Debian source mirror the cyrus-sasl + source. At the point of the writing of this document that was version + 1.5.24-9. The source should be in "debian/pool/main/c/cyrus-sasl", + you will need the following files (possibly replacing the version): + cyrus-sasl_1.5.24-9.diff.gz + cyrus-sasl_1.5.24-9.dsc + cyrus-sasl_1.5.24.orig.tar.gz + +2) extract the source using dpkg-source -x cyrus-sasl_1.5.24-9.dsc + This should create a directory cyrus-sasl-1.5.24/ +3) compile+package sasl, this can be accomplished in different + ways. For either of them you will need to cd into the source + directory you just extracted (cd cyrus-sasl-1.5.24). Then you will + need to execute one of the following sets of commands: + debian/rules build as a normal user + debian/rules binary as root + or + debian/rules binary as root + or + dpkg-buildpackage +4) install the resulting packages with a command similar to: + cd ..;dpkg --install *1.5.24-9*deb + +At this time, all of the prerequisites should be fulfilled to build the +sendmail-8.12.1-1 packages. + +Note: to get a functional sendmail binary, I had to uninstall +libdb2-dev at this point. See note on libdb at the end of this +document. If your sendmail binary segfaults on startup, try removing +libdb2-dev and going through all the remaining steps again. + + +Now on to the real reason why you are reading this, making a sendmail +binary package: +1) download the sendmail source from your nearest Debian source + mirror. At the point of the writing of this document that was + version 8.12.1-1. The source should be in "debian/pool/main/s/sendmail", + you will need the following files (possibly replacing the version): + sendmail_8.12.1-1.diff.gz + sendmail_8.12.1-1.dsc + sendmail_8.12.1.orig.tar.gz +2) extract the source using dpkg-source -x sendmail_8.12.1-1.dsc + This should create a directory named sendmail-8.12.1/ +3) modify debian portion to remove perl-5.6.1 dependancy and to fix a + typo. Some or all of this step will possibly disappear from future + versions. First cd sendmail-8.12.1/debian + a) Fix typo in the debian rules file + Search for the string "dh_testversion 2" + if dh_testversion is immediately preceded by a / remove it. + i.e. if you see /dh_testversion change it to dh_testversion + *** Note: you no longer need to do this as of 8.12.1-2 ! + b) Change directory into sendmail-8.12.1/debian/local. Edit the + following files: + Parse_mc.pm.in + parse_mc.in + update_conf.in + update_mk.in + commenting out the following lines: + use warnings; + no warnings qw(once); + you may optionally also with to remove the -w for the first line + of those files. +4) compile+package sendmail, this can be accomplished in different + ways. For either of them you will need to cd into the source + directory you extracted (cd sendmail-8.12.1). Then you will + need to execute one of the following sets of commands: + debian/rules build as a normal user + debian/rules binary as root + or + debian/rules binary as root + or + dpkg-buildpackage +5) install the resulting packages with a command similar to: + cd ..;dpkg --install *8.12.1-1*deb + +At this point you should have a working sendmail binary installed. It +is time to start testing. If sendmail seg faults on start up (verify +with sendmail -bD), you should read the following note on libdb, +libdb2, and libdb3). + + +Yours, + +William R Thomas <corvar@theonering.net> + + +A note on libdb, libdb2, and libdb3: + Sendmail and all of the various libraries it uses must all use + the same version of libdb. The quick, dirty, easy way to verify + this is to use ldd to determine which libdb library is being + used in the finished binaries: + ldd /usr/lib/sendmail + ldd /usr/lib/libnss_db.so + ldd /usr/sbin/saslpasswd (if available) + ldd /usr/sbin/slapd (if available) + if everything has gone well, you should see that all of the + above files are using the same version of libdb. + + To get everything on the same version of libdb, I needed to + uninstall libdb2-dev previous to compiling the sendmail package. diff --git a/debian/TODO b/debian/TODO new file mode 100644 index 0000000..9349ed4 --- /dev/null +++ b/debian/TODO @@ -0,0 +1,52 @@ +Important: + * qualify /usr/lib/sm.bin/sendmail with version number for coexistance +> react=rvrs_name, ret=0, name=broadcast.localhost. +FAIL: t-smar-3.sh +* compile with tls, posix thread, pmilter + * Parse_mc.pm: scan include() and add as dependancies + * Complete RunAsUser setup for MTA + * udpate_mc: update stats file and RunAsUser accordingly +Misc: + * MSP/MTA split related + - -Am -bs failure if not root (can't write to /var/spool/mqueue) + would have to make queue dir 0660 + * Don't do that ;-) + - queue cleaning for MSP -- do queue cleaning by subdirs + * 8.12 related ? + - recheck milter (Beta9+, its no longer _FFR_) + - debian/examples/milter needs looking at + * Debian stuff + - removing /etc/cron.d/sendmail to stop gid mismatch errors doesn't + work because cron may not see the update before scheduling... + shipping binary suid may solve this (and removes a small window + where calls to sendmail binary fail) + - rules.in: why doesn't a failure in lower make propogate up? + - update debian/patches/patches.index + - create an LDAP migration script + - cleanup/extend sendmailconfig (debconf) + - support submit.mc updates (nullclient, etc) + - put stuff in sendmail.mc appropriately + above/below MAILER_DEFINITIONS + - sendmail -> mgetty/fax linkage + - sensible-mda: make sure mbox exists, setgid mail, drop suid + +Doc: + +FHS: + * /usr/lib/sendmail (obsolete link used by rmail/pine/others) + +IRC comments: +* <wichert> cowboy: I use a LUSER_RELAY here, which sends everything to another machine. That other machine uses a different maildomain, so I would like the luserrelay to rewrite the from-address when relaying +<cowboy> wichert: does genericstable work with the relay? +<wichert> cowboy: that probably, but that will rewrite _all_ outgoing mail +<cowboy> wichert: so you want it rewritten *only* when going through the relay? +<wichert> cowboy: indeed. And only for the receiving persons +<cowboy> wichert: hrm... I guess a new mailer def for the relay eh? +<wichert> cowboy: probably, FEATUER(luser_relay,host,rewrite_to) or so, with the 3rd param being optional +<cowboy> wichert: hrm... so you using aliases now? +<wichert> cowboy: no, people who do a group-reply to something I sent just get errors now +<cowboy> wichert: interesting... have you considered masquerading as your luser_relay, and then using generictable/user db to override for the uids that actually exist? +<wichert> cowboy: sounds like a hack and certainly does not scale very well +<cowboy> wichert: most definetly true ;-{ + +* <wichert> cowboy: another thing: you might want to make a /usr/doc/sendmail/README.spam or so with info about all spam/relay-control hacks/features that are in the Debian package, with a couple of examples diff --git a/debian/build/Build b/debian/build/Build new file mode 100644 index 0000000..bf94717 --- /dev/null +++ b/debian/build/Build @@ -0,0 +1,23 @@ +#!/bin/sh +#----------------------------------------------------------------------------- +# $Sendmail: build/Build,v 8.12.0 2001/03/21 11:41:31 cowboy Exp $ +# +# Copyright (c) 2001-2001 Richard Nelson. All Rights Reserved. +# +# Debian script to rationalize builds for Sendmail prior to 8.9.0 +# +#----------------------------------------------------------------------------- +set -e; + +# If ./Makefiles is a directory, we need to use makesendmail +if [ -d Makefiles ]; then + sh makesendmail; + +# If ./Makefile.dist exists, use it +elif [ -f Makefile.dist ]; then + (cd obj* && make;); + +# Otherwise, well, there's not much we can do +else + :; + fi; diff --git a/debian/build/autoconf.mk b/debian/build/autoconf.mk new file mode 100644 index 0000000..7e5597b --- /dev/null +++ b/debian/build/autoconf.mk @@ -0,0 +1,108 @@ +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: autoconf.mk,v 8.14.1 2007-10-20 16:39:52 cowboy Exp $ +# +# Copyright (c) 1998-2007 Richard Nelson. All Rights Reserved. +# +# build/autoconf.mk. Generated from autoconf.mk.in by configure. +# +# Rules file for Sendmail 8.14.1(527873) +# on Debian lenny/sid +# via Debhelper V4.1 +# +# Note: the .in file supports Sendmail 8.7.6 - 9.0.0 +# on Debian slink, potato, woody, testing, sid, ... +# but the generated file is customized to the version noted above. +# +# Richard Nelson <cowboy@debian.org> 2007-10-20 16:39:52 (-0700) +#------------------------------------------------------------------------------ +#SHELL := /bin/sh -x + +# Variables for, and by, Autoconf (Don't touch these! edit config step) +PACKAGE_NAME = Sendmail +PACKAGE_VERSION = 8.14.1 +prefix = /usr +exec_prefix = /usr +bindir = ${DESTDIR}/usr/bin +sbindir = ${DESTDIR}/usr/sbin +libexecdir = ${DESTDIR}/usr/lib/sm.bin +sysconfdir = ${DESTDIR}/etc +sharedstatedir = ${DESTDIR}/usr/com +localstatedir = ${DESTDIR}/var +libdir = ${DESTDIR}/usr/lib +includedir = ${DESTDIR}/usr/include +oldincludedir = ${DESTDIR}/usr/include +datarootdir = ${DESTDIR}/usr/share +datadir = ${DESTDIR}/usr/share +infodir = ${DESTDIR}/usr/share/info +mandir = ${DESTDIR}/usr/share/man +docdir = ${DESTDIR}/usr/share/doc +srcdir = . +abs_srcdir = /home/src/sendmail/sendmail-8.14.1/debian/build +top_srcdir = .. +abs_top_srcdir = /home/src/sendmail/sendmail-8.14.1/debian +builddir = . +abs_builddir = /home/src/sendmail/sendmail-8.14.1/debian/build +top_builddir = .. +abs_top_builddir = /home/src/sendmail/sendmail-8.14.1/debian + + +# My private variables +buildtree = build-tree/sendmail-8.14.1 +sm_custom = +sm_custom_s = +sm_version = 8.14.1 +sm_revision = + +# I like to preserve timestamps... +INSTALL := /usr/bin/install -c -p +INSTALL_PROGRAM := ${INSTALL} +# We'll let the dh_strip program take care of this for us... +#ifeq (,$(findstring nostrip,${DEB_BUILD_OPTIONS})) +# override INSTALL_PROGRAM += -s +# endif +INSTALL_DATA := ${INSTALL} -m 644 +# Scripts need to be executable also +INSTALL_SCRIPT := ${INSTALL} -m 0755 + +# AutoConfig generated +#AC_CC := cc +#AC_CFLAGS := -g -Wall -O2 -fPIC -fstack-protector-all +#AC_DEFS := -DPACKAGE_NAME=\"Sendmail\" -DPACKAGE_TARNAME=\"sendmail\" -DPACKAGE_VERSION=\"8.14.1\" -DPACKAGE_STRING=\"Sendmail\ 8.14.1\" -DPACKAGE_BUGREPORT=\"bug/reportbug\ or\ sendmail@packages.debian.org\" -DPACKAGE=\"sendmail\" -DVERSION=\"8.14.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_REGEX_H=1 -DHAVE_DB_H=1 -DHAVE_DB_185_H=1 -DHAVE_RPCSVC_YPCLNT_H=1 -DHAVE_RPCSVC_NIS_H=1 -DHAVE_LDAP_H=1 -DHAVE_RESOLV_H=1 -DHAVE_TCPD_H=1 -DHAVE_NETINET_IP6_H=1 -DHAVE_GETADDRINFO=1 -DHAVE_MAILLOCK_H=1 -DHAVE_SASL_SASL_H=1 -DHAVE_OPENSSL_SSL_H=1 +#AC_LDFLAGS := -pie -Wl,-z,noexecstack,-z,relro,-z,now -Wl,--warn-shared-textrel -pie -Wl,-z,noexecstack,-z,relro,-z,now -Wl,--warn-shared-textrel +#AC_LIBS := + +# Private AutoConfig generated +sm_libmilter_version := 1 + +# Define standard compile/install flags (skip if not yet configured) +DUMMY_CC := $(shell echo '-CC-' | tr '-' '@') +#ifeq ("cc", "${AC_CC}") +# ifeq ("y", "$(shell test -x /usr/bin/gcc-3.2 && echo 'y' || echo 'n')") +# AC_CC := gcc-3.2 +# else +# ifeq ("y", "$(shell test -x /usr/bin/gcc-3.1 && echo 'y' || echo 'n')") +# AC_CC := gcc-3.1 +# endif +# endif +# endif +#ifneq ("${DUMMY_CC}", "${AC_CC}") +# CC := ${AC_CC} +# #DEFS := ${AC_DEFS} ${DEFINES} +# DEFS := ${DEFINES} +# LDFLAGS := ${AC_LDFLAGS} +# LIBS := ${AC_LIBS} +# endif +ifeq (,${CFLAGS}) + CFLAGS := -O2 -g -Wall ${DEFS} + endif +# No longer needed, left as an example: +# Force no optimization for arm - buggy compiler... +#ifeq ("arm", "${DEB_HOST_ARCH}") +# override CFLAGS := -O0 -Wall +# endif +#ifneq (,$(findstring noopt,${DEB_BUILD_OPTIONS})) +# override CFLAGS += -O0 +# endif diff --git a/debian/build/autoconf.mk.in b/debian/build/autoconf.mk.in new file mode 100644 index 0000000..2df76c0 --- /dev/null +++ b/debian/build/autoconf.mk.in @@ -0,0 +1,108 @@ +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: autoconf.mk,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Rules file for Sendmail @sm_version@@sm_revision@(@sm_version_math@) +# on @sm_dist_name@ @sm_dist_vers@ +# via Debhelper V@DEBIAN_DH@ +# +# Note: the .in file supports Sendmail @SM_MINVERS@ - @SM_MAXVERS@ +# on Debian slink, potato, woody, testing, sid, ... +# but the generated file is customized to the version noted above. +# +# Richard Nelson <cowboy@debian.org> @sm_date@ @sm_time@ (@sm_utc@) +#------------------------------------------------------------------------------ +#SHELL := /bin/sh -x + +# Variables for, and by, Autoconf (Don't touch these! edit config step) +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = ${DESTDIR}@bindir@ +sbindir = ${DESTDIR}@sbindir@ +libexecdir = ${DESTDIR}@libexecdir@ +sysconfdir = ${DESTDIR}@sysconfdir@ +sharedstatedir = ${DESTDIR}@sharedstatedir@ +localstatedir = ${DESTDIR}@localstatedir@ +libdir = ${DESTDIR}@libdir@ +includedir = ${DESTDIR}@includedir@ +oldincludedir = ${DESTDIR}@oldincludedir@ +datarootdir = ${DESTDIR}@datarootdir@ +datadir = ${DESTDIR}@datadir@ +infodir = ${DESTDIR}@infodir@ +mandir = ${DESTDIR}@mandir@ +docdir = ${DESTDIR}@docdir@ +srcdir = @srcdir@ +abs_srcdir = @abs_srcdir@ +top_srcdir = @top_srcdir@ +abs_top_srcdir = @abs_top_srcdir@ +builddir = @builddir@ +abs_builddir = @abs_builddir@ +top_builddir = @top_builddir@ +abs_top_builddir = @abs_top_builddir@ +VPATH = @srcdir@ + +# My private variables +buildtree = @buildtree@ +sm_custom = @sm_custom@ +sm_custom_s = @sm_custom_s@ +sm_version = @sm_version@ +sm_revision = @sm_revision@ + +# I like to preserve timestamps... +INSTALL := @INSTALL@ -p +INSTALL_PROGRAM := @INSTALL_PROGRAM@ +# We'll let the dh_strip program take care of this for us... +#ifeq (,$(findstring nostrip,${DEB_BUILD_OPTIONS})) +# override INSTALL_PROGRAM += -s +# endif +INSTALL_DATA := @INSTALL_DATA@ +# Scripts need to be executable also +INSTALL_SCRIPT := @INSTALL_SCRIPT@ -m 0755 + +# AutoConfig generated +#AC_CC := @CC@ +#AC_CFLAGS := @CFLAGS@ +#AC_DEFS := @CPPFLAGS@ @DEFS@ +#AC_LDFLAGS := @LDFLAGS@ +#AC_LIBS := @LIBS@ + +# Private AutoConfig generated +sm_libmilter_version := @sm_libmilter_version@ + +# Define standard compile/install flags (skip if not yet configured) +DUMMY_CC := $(shell echo '-CC-' | tr '-' '@') +#ifeq ("cc", "${AC_CC}") +# ifeq ("y", "$(shell test -x /usr/bin/gcc-3.2 && echo 'y' || echo 'n')") +# AC_CC := gcc-3.2 +# else +# ifeq ("y", "$(shell test -x /usr/bin/gcc-3.1 && echo 'y' || echo 'n')") +# AC_CC := gcc-3.1 +# endif +# endif +# endif +#ifneq ("${DUMMY_CC}", "${AC_CC}") +# CC := ${AC_CC} +# #DEFS := ${AC_DEFS} ${DEFINES} +# DEFS := ${DEFINES} +# LDFLAGS := ${AC_LDFLAGS} +# LIBS := ${AC_LIBS} +# endif +ifeq (,${CFLAGS}) + CFLAGS := -O2 -g -Wall ${DEFS} + endif +# No longer needed, left as an example: +# Force no optimization for arm - buggy compiler... +#ifeq ("arm", "${DEB_HOST_ARCH}") +# override CFLAGS := -O0 -Wall +# endif +#ifneq (,$(findstring noopt,${DEB_BUILD_OPTIONS})) +# override CFLAGS += -O0 +# endif diff --git a/debian/build/autoconf.pl.in b/debian/build/autoconf.pl.in new file mode 100644 index 0000000..befa8d8 --- /dev/null +++ b/debian/build/autoconf.pl.in @@ -0,0 +1,41 @@ +#------------------------------------------------------------------------------ +# Autoconf variables - in a form suitable for sh, perl +# @configure_input@ +#------------------------------------------------------------------------------ +# Variables for, and by, Autoconf (Don't touch these! edit config step) +my ($PACKAGE_NAME, $PACKAGE_VERSION, $prefix, $exec_prefix, $bindir, + $sbindir, $libexecdir, $datadir, $sysconfdir, $sharedstatedir, + $localstatedir, $libdir, $includedir, $infodir, $mandir, $docdir, + $srcdir, $abs_srcdir, $top_srcdir, $abs_top_srcdir, + $builddir, $abs_builddir, $top_builddir, $abs_top_builddir, + $VPATH); +BEGIN { + $PACKAGE_NAME = "@PACKAGE_NAME@"; + $PACKAGE_VERSION = "@PACKAGE_VERSION@"; + $prefix = "@prefix@"; + $exec_prefix = "@exec_prefix@"; + $bindir = "@bindir@"; + $sbindir = "@sbindir@"; + $libexecdir = "@libexecdir@"; + $sysconfdir = "@sysconfdir@"; + $sharedstatedir = "@sharedstatedir@"; + $localstatedir = "@localstatedir@"; + $libdir = "@libdir@"; + $includedir = "@includedir@"; + $oldincludedir = "@oldincludedir@"; + $datarootdir = "@datarootdir@"; + $datadir = "@datadir@"; + $infodir = "@infodir@"; + $mandir = "@mandir@"; + $docdir = "@docdir@"; + $srcdir = "@srcdir@"; + $abs_srcdir = "@abs_srcdir@"; + $top_srcdir = "@top_srcdir@"; + $abs_top_srcdir = "@abs_top_srcdir@"; + $builddir = "@builddir@"; + $abs_builddir = "@abs_builddir@"; + $top_builddir = "@top_builddir@"; + $abs_top_builddir = "@abs_top_builddir@"; + $VPATH = "@srcdir@"; + }; + diff --git a/debian/build/autoconf.sh.in b/debian/build/autoconf.sh.in new file mode 100644 index 0000000..30b1514 --- /dev/null +++ b/debian/build/autoconf.sh.in @@ -0,0 +1,33 @@ +#------------------------------------------------------------------------------ +# Autoconf variables - in a form suitable for sh, perl +# @configure_input@ +#------------------------------------------------------------------------------ +# Variables for, and by, Autoconf (Don't touch these! edit config step) +PACKAGE_NAME="@PACKAGE_NAME@"; +PACKAGE_VERSION="@PACKAGE_VERSION@"; +prefix="@prefix@"; +exec_prefix="@exec_prefix@"; +bindir="@bindir@"; +sbindir="@sbindir@"; +libexecdir="@libexecdir@"; +sysconfdir="@sysconfdir@"; +sharedstatedir="@sharedstatedir@"; +localstatedir="@localstatedir@"; +libdir="@libdir@"; +includedir="@includedir@"; +oldincludedir="@oldincludedir@"; +datarootdir="@datarootdir@"; +datadir="@datadir@"; +infodir="@infodir@"; +mandir="@mandir@"; +docdir="@docdir@"; +srcdir="@srcdir@"; +abs_srcdir="@abs_srcdir@" +top_srcdir="@top_srcdir@" +abs_top_srcdir="@abs_top_srcdir@" +builddir="@builddir@" +abs_builddir="@abs_builddir@" +top_builddir="@top_builddir@" +abs_top_builddir="@abs_top_builddir@" +VPATH="@srcdir@" + diff --git a/debian/build/config.guess b/debian/build/config.guess new file mode 100644 index 0000000..0f0fe71 --- /dev/null +++ b/debian/build/config.guess @@ -0,0 +1,1516 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2007-03-06' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner <per@bothner.com>. +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa:Linux:*:*) + echo xtensa-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <features.h> + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include <sys/param.h> +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess +and + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/debian/build/config.sub b/debian/build/config.sub new file mode 100644 index 0000000..5defff6 --- /dev/null +++ b/debian/build/config.sub @@ -0,0 +1,1622 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2007-01-18' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/debian/build/debian/changelog.sh.in b/debian/build/debian/changelog.sh.in new file mode 100644 index 0000000..8b95f68 --- /dev/null +++ b/debian/build/debian/changelog.sh.in @@ -0,0 +1,71 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# $Sendmail: changelog.sh,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Debian script to generate changelogs for sendmail @sm_version@@sm_revision@ +# +# Note: this file supports @SM_MINVERS@ - @SM_MAXVERS@ +# +#----------------------------------------------------------------------------- +set -e; +# +# Initialization +PACKAGE='sendmail'; + +# +# Remove old combined changelog +rm -f build/debian/changelog; + +echo "Building @PACKAGE_NAME@ @sm_version@@sm_custom_s@@sm_revision@ (@sm_version_math@) changelog."; + +# +# Start with Custom changelog (if any) +if [ -n "@sm_custom@" ]; then + if [ -f @sm_custom@.changelog ]; then + cat @sm_custom@.changelog \ + >> build/debian/changelog; + fi; + fi; + +# +# Create a combined changelog *IFF* we have the pieces/parts... +if [ ! -d private/changelogs ]; then + cat changelog >>build/debian/changelog; +else + # + # v.r.m changelogs + if [ -f private/changelogs/@sm_version@ ]; then + cat private/changelogs/@sm_version@ \ + >> build/debian/changelog; + # + # v.r changelogs + elif [ -f private/changelogs/@sm_version_major@ ]; then + cat private/changelogs/@sm_version_major@ >> build/debian/changelog; + + # + # v changelogs + elif [ -f private/changelogs/@sm_version_v@ ]; then + cat private/changelogs/@sm_version_v@ >> build/debian/changelog; + fi; + # + # Variable definitions + cat private/changelogs/vars >> build/debian/changelog; + fi; + +# +# Update 1st line to add --with-custom (defaults to null) +if [ -z "@sm_custom@" ]; then + mv build/debian/changelog build/debian/changelog.in; +else + sed \ + -e '1s/sendmail (@sm_version@-/sendmail (@sm_version@@sm_custom_s@-/' \ + -e '1s/sendmail (@sm_custom@.@sm_version@-/sendmail (@sm_version@@sm_custom_s@-/' \ + build/debian/changelog \ + > build/debian/changelog.in; + rm build/debian/changelog; + fi; + diff --git a/debian/build/debian/control.m4.in b/debian/build/debian/control.m4.in new file mode 100644 index 0000000..7ff23f1 --- /dev/null +++ b/debian/build/debian/control.m4.in @@ -0,0 +1,262 @@ +dnl #-------------------------------------------------------------------------- +dnl # $Sendmail: control.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +dnl # +dnl # Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +dnl # +dnl # @configure_input@ +dnl # +dnl # Debian control.m4 for sendmail @sm_version@@sm_revision@(@sm_version_math@) +dnl # +dnl # Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +dnl # file is customized to the version noted above. +dnl # +dnl # Note: Exercise care in the feeding of this file, especially wrt quoting! +dnl # +dnl #-------------------------------------------------------------------------- +changequote([[, ]])dnl +dnl # +dnl # The source package description +dnl # Always built +dnl # +[[Source: sendmail +Priority: extra +Section: mail +Maintainer: Richard A Nelson (Rick) <cowboy@debian.org> +Standards-Version: 3.7.2 +]]dnl # Sigh... build daemons ignore B-D-I, so replicate in B-D :( +[[Build-Depends-Indep: groff, bsdmainutils +Build-Depends: make (>> 3.79.1-14), m4, cdbs, patchutils, dh-buildinfo, debhelper (>= 5), linux-libc-dev (>= 2.6.21-3) | linux-kernel-headers, groff, bsdmainutils @sm_badepends@ +Build-Conflicts: libbind-dev, bind-dev, fakeroot (<< 0.4.5) +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=any package: sendmail-bin +dnl # Always built +dnl # +[[ + +Package: sendmail-bin +Architecture: any +Section: mail +Replaces: mail-transport-agent +Provides: mail-transport-agent +Conflicts: mail-transport-agent +Depends: sendmail-base, sendmail-cf, ${shlibs:Depends}, ${perl:Depends} @sm_depends@ +Recommends: @sm_recommends@ +Suggests: sendmail-doc, @sm_suggests@, cyrus-common +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for Debian. + It is suitable for handling sophisticated mail configurations, + although this means that its configuration can also be complex. + . + Fortunately, simple thing can be done easily, and complex things + are possible, even if not easily understood ;) Sendmail is the *ONLY* + MTA with a Turing complete language to control *ALL* aspects of delivery! + . + Sendmail provides Security and SPAM/UCE/UBE protection via several means. + . + Sendmail includes *no* Mail User Agents (MUA), you'll have to + pick from the plethora of available MUAs (mutt, vm, etc.) + . + This package supports @sm_databases@ maps, + and has enabled @sm_features@. + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=any package: rmail +dnl # Always built +dnl # +[[ + +Package: rmail +Architecture: any +Section: mail +Conflicts: sendmail (<< 8.13.1-7), postfix, exim, exim-tls, exim4-daemon-custom, exim4-daemon-heavy, exim4-daemon-light, courier-mta, smail, zmailer +Depends: sendmail-bin | mail-transport-agent, ${shlibs:Depends} +Description: MTA->UUCP remote mail handler + Rmail handles mail received via uucp and passes it to the local + sendmail (or workalike). + . + This version comes from the sendmail source package and the only + change is the call to sendmail (from -obq to -obi). + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=any package: sensible-mda (debian private) +dnl # Always built +dnl # +[[ + +Package: sensible-mda +Architecture: any +Section: mail +Depends: sendmail-bin | mail-transport-agent, procmail | maildrop | deliver, ${shlibs:Depends} +Description: Mail Delivery Agent wrapper + Sensible-mda is a Debian addition in the sendmail package and has been + split out in hopes that it might be useful for other MTA packages. + . + Sensible-mda is called by the MTA, and will in turn call whichever of + the following MDAs that it finds (in this order): + procmail, maildrop, deliver, mail.local]]dnl +dnl # +dnl # The arch=any package: libmilter +dnl # Only built if MILTER is enabled +dnl # +ifelse([[@sm_enable_milter@]], [[yes]], [[[[ + +Package: libmilter@sm_libmilter_version@ +Architecture: any +Section: libs +Depends: ${shlibs:Depends} +Description: Sendmail Mail Filter API (Milter) + The Sendmail Mail Filter API (Milter) is designed to allow third-party + programs access to mail messages as they are being processed in order + to filter meta-information(headers) and content. + . + The Debian Sendmail package is built to support libmilter. + . + This package contains libmilter.so + . +Homepage: http://www.sendmail.org + +Package: libmilter@sm_libmilter_version@-dbg +Architecture: any +Section: libs +Depends: libmilter@sm_libmilter_version@ (= ${binary:Version}), ${shlibs:Depends} +Description: Sendmail Mail Filter API (Milter) + The Sendmail Mail Filter API (Milter) is designed to allow third-party + programs access to mail messages as they are being processed in order + to filter meta-information(headers) and content. + . + The Debian Sendmail package is built to support libmilter. + . + This package contains debugging information for libmilter.so + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=any package: libmilter-dev +dnl # Only built if MILTER is enabled +dnl # +[[ + +Package: libmilter-dev +Architecture: any +Section: libdevel +Depends: libmilter@sm_libmilter_version@ (= ${binary:Version}) +Suggests: sendmail-doc +Description: Sendmail Mail Filter API (Milter) + The Sendmail Mail Filter API (Milter) is designed to allow third-party + programs access to mail messages as they are being processed in order + to filter meta-information (headers) and content. + . + The Debian Sendmail package is built to support libmilter. + . + This is the libmilter static library and include files for development. + . + The documentation on building a Milter is in the sendmail-doc package. + . +Homepage: http://www.sendmail.org]]]])dnl +dnl # +dnl # The arch=all package: sendmail-doc +dnl # Always built +dnl # +[[ + +Package: sendmail-doc +Architecture: all +Section: doc +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for + Debian. It is suitable for handling sophisticated mail + configurations, although this means that its configuration + can also be complex. + . + Don't try anything fancy in sendmail without using this for guidance. + . + Because of the complexity, you may find yourself wanting to peruse + the documentation files included herein. The main files are: + cf.README.gz -- A reference for all things in sendmail.{mc,cf} + op.{ps,txt}.gz -- The care and feeding of Sendmail. + faq.txt.gz -- Sendmail FAQ, current as of the package date. + . + Other files include the references for smrsh and libmilter. + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=all package: sendmail +dnl # Always built +dnl # +[[ + +Package: sendmail +Architecture: all +Section: mail +Replaces: sendmail-tls +Depends: sendmail-base, sendmail-bin, sendmail-cf, sensible-mda +Suggests: sendmail-doc, rmail +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for Debian. + It is suitable for handling sophisticated mail configurations, + although this means that its configuration can also be complex. + . + Fortunately, simple thing can be done easily, and complex things + are possible, even if not easily understood ;) Sendmail is the *ONLY* + MTA with a Turing complete language to control *ALL* aspects of delivery! + . + Sendmail provides Security and SPAM/UCE/UBE protection via several means. + . + Sendmail includes *no* Mail User Agents (MUA), you'll have to + pick from the plethora of available MUAs (mutt, vm, etc.) + . + This package supports @sm_databases@ maps, + and has enabled @sm_features@. + . + This package is to make installation/upgrading easier (Do NOT delete it) + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=all package: sendmail-base +dnl # Always built +dnl # +[[ + +Package: sendmail-base +Architecture: all +Section: mail +Depends: m4, make, adduser, ${perl:Depends} +Suggests: sendmail-doc, ca-certificates, logcheck, logrotate, resolvconf +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for + Debian. It is suitable for handling sophisticated mail + configurations, although this means that its configuration + can also be complex. + . + This package contains the base, architecture independent, portions + of the sendmail packages. + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # The arch=all package: sendmail-cf +dnl # Always built +dnl # +[[ + +Package: sendmail-cf +Architecture: all +Section: mail +Suggests: sendmail-doc +Depends: m4 +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for + Debian. It is suitable for handling sophisticated mail + configurations, although this means that its configuration + can also be complex. + . + This package contains the .m4 (configuration files) for the + sendmail packages. + . +Homepage: http://www.sendmail.org]]dnl +dnl # +dnl # Provide the requisite trailing newline +dnl # + + diff --git a/debian/build/debian/libmilter-dbg.dirs.in b/debian/build/debian/libmilter-dbg.dirs.in new file mode 100644 index 0000000..91d68a1 --- /dev/null +++ b/debian/build/debian/libmilter-dbg.dirs.in @@ -0,0 +1,2 @@ +./DEBIAN +.@libdir@/debug diff --git a/debian/build/debian/libmilter-dev.dirs.in b/debian/build/debian/libmilter-dev.dirs.in new file mode 100644 index 0000000..a0b512b --- /dev/null +++ b/debian/build/debian/libmilter-dev.dirs.in @@ -0,0 +1,7 @@ +./DEBIAN +.@includedir@/libmilter +.@libdir@ +.@libdir@/libmilter +.@docdir@/libmilter-dev +.@datadir@/bug +.@datadir@/lintian/overrides diff --git a/debian/build/debian/libmilter-dev.links.in b/debian/build/debian/libmilter-dev.links.in new file mode 100644 index 0000000..529e052 --- /dev/null +++ b/debian/build/debian/libmilter-dev.links.in @@ -0,0 +1,3 @@ +usr/share/bug/sendmail usr/share/bug/libmilter-dev +usr/lib/libmilter.so.@sm_libmilter_version@ usr/lib/libmilter/libmilter.so.@sm_libmilter_version@ +usr/lib/libmilter/libmilter.so.@sm_libmilter_version@ usr/lib/libmilter/libmilter.so diff --git a/debian/build/debian/libmilter-dev.lintian-overrides b/debian/build/debian/libmilter-dev.lintian-overrides new file mode 100644 index 0000000..4ad19e8 --- /dev/null +++ b/debian/build/debian/libmilter-dev.lintian-overrides @@ -0,0 +1 @@ +libmilter-dev: description-synopsis-starts-with-a-capital-letter diff --git a/debian/build/debian/libmilter-dev.postrm.in b/debian/build/debian/libmilter-dev.postrm.in new file mode 100644 index 0000000..121fa31 --- /dev/null +++ b/debian/build/debian/libmilter-dev.postrm.in @@ -0,0 +1,53 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=libmilter-dev; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f @docdir@/$PACKAGE 2>/dev/null || true; + rmdir @docdir@/sendmail 2>/dev/null || true; + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/libmilter-dev.preinst.in b/debian/build/debian/libmilter-dev.preinst.in new file mode 100644 index 0000000..0ba2a7f --- /dev/null +++ b/debian/build/debian/libmilter-dev.preinst.in @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=libmilter-dev; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/libmilter.dirs.in b/debian/build/debian/libmilter.dirs.in new file mode 100644 index 0000000..8145c07 --- /dev/null +++ b/debian/build/debian/libmilter.dirs.in @@ -0,0 +1,5 @@ +./DEBIAN +.@libdir@/libmilter +.@docdir@/libmilter@sm_libmilter_version@ +.@datadir@/bug +.@datadir@/lintian/overrides diff --git a/debian/build/debian/libmilter.links.in b/debian/build/debian/libmilter.links.in new file mode 100644 index 0000000..b0ffc90 --- /dev/null +++ b/debian/build/debian/libmilter.links.in @@ -0,0 +1 @@ +usr/share/bug/sendmail usr/share/bug/libmilter@sm_libmilter_version@ diff --git a/debian/build/debian/libmilter.lintian-overrides.in b/debian/build/debian/libmilter.lintian-overrides.in new file mode 100644 index 0000000..077630b --- /dev/null +++ b/debian/build/debian/libmilter.lintian-overrides.in @@ -0,0 +1,4 @@ +libmilter@sm_libmilter_version@: description-synopsis-starts-with-a-capital-letter +libmilter@sm_libmilter_version@: postinst-has-useless-call-to-ldconfig +libmilter@sm_libmilter_version@: postrm-has-useless-call-to-ldconfig +libmilter@sm_libmilter_version@: non-dev-pkg-with-shlib-symlink diff --git a/debian/build/debian/libmilter.postrm.in b/debian/build/debian/libmilter.postrm.in new file mode 100644 index 0000000..a671fc2 --- /dev/null +++ b/debian/build/debian/libmilter.postrm.in @@ -0,0 +1,53 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=libmilter@sm_libmilter_version@; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f @docdir@/$PACKAGE 2>/dev/null || true; + rmdir @docdir@/sendmail 2>/dev/null || true; + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/libmilter.preinst.in b/debian/build/debian/libmilter.preinst.in new file mode 100644 index 0000000..ba1380c --- /dev/null +++ b/debian/build/debian/libmilter.preinst.in @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=libmilter@sm_libmilter_version@; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/rmail.dirs.in b/debian/build/debian/rmail.dirs.in new file mode 100644 index 0000000..d6661b4 --- /dev/null +++ b/debian/build/debian/rmail.dirs.in @@ -0,0 +1,6 @@ +./DEBIAN +.@sbindir@ +.@mandir@ +.@mandir@/man8 +.@datadir@/bug +.@datadir@/lintian/overrides diff --git a/debian/build/debian/rmail.lintian-overrides b/debian/build/debian/rmail.lintian-overrides new file mode 100644 index 0000000..c69602a --- /dev/null +++ b/debian/build/debian/rmail.lintian-overrides @@ -0,0 +1 @@ +rmail: description-synopsis-starts-with-a-capital-letter diff --git a/debian/build/debian/rmail.postrm.in b/debian/build/debian/rmail.postrm.in new file mode 100644 index 0000000..3f19cd0 --- /dev/null +++ b/debian/build/debian/rmail.postrm.in @@ -0,0 +1,53 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=rmail; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f @docdir@/$PACKAGE 2>/dev/null || true; + rmdir @docdir@/sendmail 2>/dev/null || true; + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/rmail.preinst.in b/debian/build/debian/rmail.preinst.in new file mode 100644 index 0000000..017889d --- /dev/null +++ b/debian/build/debian/rmail.preinst.in @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=rmail; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-base.dirs.in b/debian/build/debian/sendmail-base.dirs.in new file mode 100644 index 0000000..c8e2877 --- /dev/null +++ b/debian/build/debian/sendmail-base.dirs.in @@ -0,0 +1,60 @@ +./DEBIAN +.@sysconfdir@/cron.d +.@sysconfdir@/cron.daily +.@sysconfdir@/default +.@sysconfdir@/dhcp3 +.@sysconfdir@/dhcp3/dhclient-exit-hooks.d +.@sysconfdir@/logcheck +.@sysconfdir@/logcheck/ignore.d.paranoid +.@sysconfdir@/logcheck/ignore.d.server +.@sysconfdir@/logcheck/ignore.d.workstation +.@sysconfdir@/logcheck/violations.ignore.d +.@sysconfdir@/logrotate.d +.@sysconfdir@/mail +.@sysconfdir@/mail/m4 +.@sysconfdir@/mail/peers +.@sysconfdir@/mail/smrsh +.@sysconfdir@/mail/sasl +.@sysconfdir@/mail/tls +.@sysconfdir@/network +.@sysconfdir@/network/if-down.d +.@sysconfdir@/network/if-post-down.d +.@sysconfdir@/network/if-up.d +.@sysconfdir@/pam.d +.@sysconfdir@/ppp/ip-down.d +.@sysconfdir@/ppp/ip-up.d +.@sysconfdir@/resolvconf +.@sysconfdir@/resolvconf/update-libc.d +.@bindir@ +.@sbindir@ +.@docdir@/sendmail-base +.@mandir@ +.@mandir@/man1 +.@mandir@/man8 +.@datadir@/bug +.@datadir@/bug/sendmail +.@datadir@/sendmail +.@datadir@/sendmail/examples +.@datadir@/sendmail/examples/db +.@datadir@/sendmail/examples/dhcp3 +.@datadir@/sendmail/examples/dhcp3/dhclient-exit-hooks.d +.@datadir@/sendmail/examples/ppp +.@datadir@/sendmail/examples/ppp/ip-down.d +.@datadir@/sendmail/examples/ppp/ip-up.d +.@datadir@/sendmail/examples/ldap +.@datadir@/sendmail/examples/logcheck +.@datadir@/sendmail/examples/logcheck/ignore.d.paranoid +.@datadir@/sendmail/examples/logcheck/ignore.d.server +.@datadir@/sendmail/examples/logcheck/ignore.d.workstation +.@datadir@/sendmail/examples/logcheck/violations.ignore.d +.@datadir@/sendmail/examples/milter +.@datadir@/sendmail/examples/network +.@datadir@/sendmail/examples/network/if-down.d +.@datadir@/sendmail/examples/network/if-post-down.d +.@datadir@/sendmail/examples/network/if-up.d +.@datadir@/sendmail/examples/pam.d +.@datadir@/sendmail/examples/resolvconf +.@datadir@/sendmail/examples/resolvconf/update-libc.d +.@datadir@/sendmail/examples/sasl +.@datadir@/sendmail/examples/tls +.@datadir@/lintian/overrides diff --git a/debian/build/debian/sendmail-base.lintian-overrides b/debian/build/debian/sendmail-base.lintian-overrides new file mode 100644 index 0000000..abc14c9 --- /dev/null +++ b/debian/build/debian/sendmail-base.lintian-overrides @@ -0,0 +1 @@ +sendmail-base: manpage-has-bad-whatis-entry usr/share/man/man8/etrn.8.gz diff --git a/debian/build/debian/sendmail-base.postinst.in b/debian/build/debian/sendmail-base.postinst.in new file mode 100644 index 0000000..f726fcc --- /dev/null +++ b/debian/build/debian/sendmail-base.postinst.in @@ -0,0 +1,116 @@ +#!/bin/sh -e +# +# Debian post installation script +# +# Install of already installed package: +# 1) old-prerm upgrade new-version +# *) new-prerm failed-upgrade old-version +# *) old-postinst abort-upgrade new-version +# +# If a `conflicting' package is being removed at the same time: +# 1) forall packages depending on conflicting package and --auto-deconfigure +# deconfigured's-prerm deconfigure \ +# in-favour package-being-installed version \ +# removing conflicting-package version +# *) deconfigured's-postinst abort-deconfigure \ +# in-favour package-being-installed-but-failed version \ +# removing conflicting-package version +# 2) To prepare for removal of the conflicting package +# conflictor's-prerm remove \ +# in-favour package new-version +# *) conflictor's-postinst abort-remove \ +# in-favour package new-version +# +# Configuration of package: +# postinst configure most-recently-configured-version +# +set -e; + +PACKAGE=sendmail-base; + +# do we have debconf? +if [ -f /usr/share/debconf/confmodule ]; then + DEBCONF=true; + #. /usr/share/debconf/confmodule; + #db_stop; # For testing +else + DEBCONF=''; + fi; + +case "$1" in + configure) + #----------------------------------------------------------- + if [ "$2" = "" ]; then + :; + #echo " "; + #echo "A new sendmail user, welcome!"; + fi; + + #----------------------------------------------------------- + # Tell users about new and interesting things... + if [ -x @datadir@/sendmail/update_notices ]; then + @datadir@/sendmail/update_notices $2; + fi; + + #----------------------------------------------------------- + # Create group/user smmta/smmsp iff needed + touch @sysconfdir@/mail/tsmmta; + if ! chown root:smmta @sysconfdir@/mail/tsmmta 2>/dev/null; then + addgroup --system --quiet smmta; + fi; + if ! chown smmta:smmta @sysconfdir@/mail/tsmmta 2>/dev/null; then + adduser --system --ingroup smmta --home "/var/lib/sendmail" \ + --disabled-password \ + --quiet --gecos 'Mail Transfer Agent' smmta; + fi; + rm @sysconfdir@/mail/tsmmta; + touch @sysconfdir@/mail/tsmmsp; + if ! chown root:smmsp @sysconfdir@/mail/tsmmsp 2>/dev/null; then + addgroup --system --quiet smmsp; + fi; + if ! chown smmsp:smmsp @sysconfdir@/mail/tsmmsp 2>/dev/null; then + adduser --system --ingroup smmsp --home "/var/lib/sendmail" \ + --disabled-password \ + --quiet --gecos 'Mail Submission Program' smmsp; + fi; + rm @sysconfdir@/mail/tsmmsp; + + #----------------------------------------------------------- + # With a dynamic uid/gid, have to set appropriate ownership herein + chown root:smmsp @sysconfdir@/mail/sasl; + chown root:smmsp @sysconfdir@/mail/tls; + + #----------------------------------------------------------- + # Save the current configuration files in safe place... + if [ -x @sysconfdir@/cron.daily/sendmail ]; then + echo "Saving current /etc/mail/sendmail.mc,cf to /var/backups"; + @sysconfdir@/cron.daily/sendmail || true; + fi; + + #----------------------------------------------------------- + # Make sure inetd.conf has sendmail in it (but disabled) + if [ -x /usr/sbin/update-inetd ]; then + update-inetd --remove "^587"; + update-inetd --group MAIL --add \ + "#<off># smtp\tstream\ttcp\tnowait\troot\t@sbindir@/sendmail sendmail -Am -bs"; + update-inetd --group MAIL --add \ + "#<off># submission\tstream\ttcp\tnowait\troot\t@sbindir@/sendmail sendmail -Am -bs"; + update-inetd --group MAIL --add \ + "#<off># smtps\tstream\ttcp\tnowait\troot\t@sbindir@/sendmail sendmail -Am -bs"; + update-inetd --group MAIL --disable smtp,smtps,submission; + fi; + + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + exit 0; + ;; + + *) + echo "$PACKAGE postinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-base.postrm.in b/debian/build/debian/sendmail-base.postrm.in new file mode 100644 index 0000000..a440573 --- /dev/null +++ b/debian/build/debian/sendmail-base.postrm.in @@ -0,0 +1,106 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=sendmail-base; + +case "$1" in + remove) + if [ ! -z "$2" ]; then + echo "Removing $PACKAGE $2 $3($4)"; + fi; + + if [ -x /usr/sbin/update-inetd ]; then + update-inetd --remove "^smtp"; + update-inetd --remove "^smtps"; + update-inetd --remove "^submission"; + fi; + ;; + + purge) + # Currently, dh_installdebconf doesn't do db_stop... ensure it is done! + if [ "$1" = "purge" ] && [ -e /usr/share/debconf/confmodule ]; then + # Source debconf library. + . /usr/share/debconf/confmodule; + # Make sure we're done + #db_stop; + # Remove my changes to the db. + db_purge; + fi; + + # Remove user/group smmsp + if [ -x /usr/sbin/deluser ]; then + deluser --quiet smmta || true; + deluser --quiet smmsp || true; + fi; + userdel smmta 2>/dev/null || true; + groupdel smmta 2>/dev/null || true; + userdel smmsp 2>/dev/null || true; + groupdel smmsp 2>/dev/null || true; + + # Purge those files installed in other package directories + rm -f @libdir@/lib/sasl/Sendmail.conf; + rm -f @sysconfdir@/certs/sendmail.pem; + rm -f @datadir@/bug/sendmail*; + # Can't touch these as they may be included in slapd.conf + #rm -rf @sysconfdir@/ldap/schema/sendmail.schema; + #rm -rf @sysconfdir@/openldap/sendmail.schema; + #rm -rf @sysconfdir@/umich-ldap/sendmail.schema; + # Purge psuedo conffiles (managed by sendmail) + rm -f @sysconfdir@/mail/sendmail.conf; + # Purge sendmail configuration files + rm -f @sysconfdir@/mail/sendmail.mc \ + @sysconfdir@/mail/submit.mc \ + @sysconfdir@/mail/m4/dialup.m4 \ + @sysconfdir@/mail/m4/provider.m4 \ + @sysconfdir@/mail/local-host-names \ + @sysconfdir@/mail/relay-domains \ + @sysconfdir@/mail/trusted-users \ + @sysconfdir@/mail/default-auth-info \ + ; + rmdir @sysconfdir@/mail/peers 2>/dev/null || true; + rmdir @sysconfdir@/mail 2>/dev/null || true; + + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + echo "$1 of $PACKAGE $2"; + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +# NOTE WELL: If we fall through here during purge, update-rc.d will be +# called with remove... and /etc/init.d/$PACKAGE goes away! +#DEBHELPER# + +exit 0; diff --git a/debian/build/debian/sendmail-base.preinst.in b/debian/build/debian/sendmail-base.preinst.in new file mode 100644 index 0000000..576313b --- /dev/null +++ b/debian/build/debian/sendmail-base.preinst.in @@ -0,0 +1,66 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=sendmail-base; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + rm -rf @docdir@/sendmail/examples 2>/dev/null || true; + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + + # Prevent cronjob from running during upgrade... + if [ -f @sysconfdir@/cron.d/sendmail ]; then + echo "#preinst" > @sysconfdir@/cron.d/sendmail; + fi; + + # Move files to new home + if [ -d @sysconfdir@/mail/ssl ]; then + mv -f @sysconfdir@/mail/ssl @sysconfdir@/mail/tls; + fi; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-base.prerm.in b/debian/build/debian/sendmail-base.prerm.in new file mode 100644 index 0000000..28941ad --- /dev/null +++ b/debian/build/debian/sendmail-base.prerm.in @@ -0,0 +1,138 @@ +#!/bin/sh -e +# +# Debian pre removal script +# +# Install of already installed package: +# 1) old-prerm upgrade new-version +# *) new-prerm failed-upgrade old-version +# *) old-postinst abort-upgrade new-version +# +# If a `conflicting' package is being removed at the same time: +# 1) forall packages depending on conflicting package and --auto-deconfigure +# deconfigured's-prerm deconfigure \ +# in-favour package-being-installed version \ +# removing conflicting-package version +# *) deconfigured's-postinst abort-deconfigure \ +# in-favour package-being-installed-but-failed version \ +# removing conflicting-package version +# 2) To prepare for removal of the conflicting package +# conflictor's-prerm remove \ +# in-favour package new-version +# *) conflictor's-postinst abort-remove \ +# in-favour package new-version +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# +set -e; + +PACKAGE=sendmail-base; + +case "$1" in + remove) + if [ ! -z "$2" ]; then + echo "Removing $PACKAGE $2 $3($4)"; + fi; + + if [ -x /usr/sbin/update-inetd ]; then + update-inetd --group MAIL --disable smtp,smtps,submission; + fi; + + # Make sure /etc/aliases is left (move it from /etc/mail if needed) + if [ -L @sysconfdir@/mail/aliases ]; then + rm -f @sysconfdir@/mail/aliases; + elif [ -f @sysconfdir@/mail/aliases ] \ + && [ -L /etc/aliases ]; then + mv @sysconfdir@/mail/aliases /etc/aliases; + fi; + + # Remove psuedo conffiles (managed by sendmail) + rm -f @sysconfdir@/cron.d/sendmail; + + # Remove files scattered across the system that + # happened to be created by sendmail + rm -f @libdir@/sasl/Sendmail.conf; + + # Remove those files created by sendmail + rm -rf @localstatedir@/lib/sendmail; + rm -rf @localstatedir@/run/sendmail; + # Note: syslog really owns these files + #rm -f @localstatedir@/log/mail/*; + #rm -f @localstatedir@/log/mail.log; + # Note: these can lead to a loss of mail!!!! + if [ -x @sysconfdir@/init.d/sendmail ]; then + @sysconfdir@/init.d/sendmail clean; + fi; + if [ -L @localstatedir@/spool/mqueue ]; then + rmdir --ignore-fail-on-non-empty \ + `readlink -fn @localstatedir@/spool/mqueue`; + elif [ -d @localstatedir@/spool/mqueue ]; then + rmdir --ignore-fail-on-non-empty \ + @localstatedir@/spool/mqueue; + fi; + if [ -L @localstatedir@/spool/mqueue-client ]; then + rmdir --ignore-fail-on-non-empty \ + `readlink -fn @localstatedir@/spool/mqueue-client`; + elif [ -d @localstatedir@/spool/mqueue-client ]; then + rmdir --ignore-fail-on-non-empty \ + @localstatedir@/spool/mqueue-client; + fi; + + # Remove sendmail built configuration files + rm -f @sysconfdir@/mail/*.db \ + @sysconfdir@/mail/*.dir \ + @sysconfdir@/mail/*.pag; + rm -f @sysconfdir@/mail/sendmail.cf \ + @sysconfdir@/mail/sendmail.cf.old \ + @sysconfdir@/mail/sendmail.cf.errors \ + @sysconfdir@/mail/sendmail.mc.old \ + @sysconfdir@/mail/submit.cf \ + @sysconfdir@/mail/submit.cf.errors \ + @sysconfdir@/mail/submit.mc.old \ + @sysconfdir@/mail/databases \ + @sysconfdir@/mail/Makefile \ + ; + rm -rf @sysconfdir@/mail/smrsh \ + @sysconfdir@/mail/sasl \ + @sysconfdir@/mail/tls; + + # Remove empty files (probably touched databases) + find @sysconfdir@/mail -maxdepth 1 -size 0 | xargs -r rm; + ;; + + upgrade) + # Potentially move the old configuration file to the new name - + # before it gets deleted (for not existing in the new package) + mv -f @sysconfdir@/default/sendmail \ + @sysconfdir@/mail/sendmail.conf 2>/dev/null || true; + + # Prevent cronjob from running during upgrade... + if [ -f /etc/cron.d/sendmail ]; then + echo "#prerm" > @sysconfdir@/cron.d/sendmail; + fi; + ;; + + failed-upgrade) + ;; + + deconfigure) + echo "Deconfigure of $PACKAGE $2 $3($4) $5 $6($7) "; + ;; + + *) + echo "$PACKAGE prerm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +# The @DEBHELPER@ stuff causes problems with upgrades because of the +# length of time that Sendmail is stopped... + +# +# Included for sanity checks +# +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-bin.dirs.in b/debian/build/debian/sendmail-bin.dirs.in new file mode 100644 index 0000000..0e6ad62 --- /dev/null +++ b/debian/build/debian/sendmail-bin.dirs.in @@ -0,0 +1,20 @@ +./DEBIAN +.@sysconfdir@/cron.daily +.@sysconfdir@/init.d +.@bindir@ +.@sbindir@ +.@libexecdir@ +.@docdir@/sendmail +.@mandir@ +.@mandir@/man1 +.@mandir@/man5 +.@mandir@/man8 +.@datadir@/bug +.@localstatedir@/lib/sendmail +.@localstatedir@/run/sendmail +.@localstatedir@/run/sendmail/msp +.@localstatedir@/run/sendmail/mta +.@localstatedir@/run/sendmail/stampdir +.@localstatedir@/spool/mqueue +.@localstatedir@/spool/mqueue-client +.@datadir@/lintian/overrides diff --git a/debian/build/debian/sendmail-bin.lintian-overrides b/debian/build/debian/sendmail-bin.lintian-overrides new file mode 100644 index 0000000..24785ad --- /dev/null +++ b/debian/build/debian/sendmail-bin.lintian-overrides @@ -0,0 +1,9 @@ +sendmail-bin: duplicate-updaterc.d-calls-in-postinst sendmail +sendmail-bin: suidregister-used-in-maintainer-script postinst +sendmail-bin: suidregister-used-in-maintainer-script postinst +sendmail-bin: duplicate-updaterc.d-calls-in-postinst sendmail +sendmail-bin: setgid-binary usr/lib/sm.bin/sendmail 2755 root/mail +sendmail-bin: setgid-binary usr/lib/sm.bin/mailstats 2755 root/mail +sendmail-bin: binary-without-manpage mailq +sendmail-bin: binary-without-manpage newaliases +sendmail-bin: manpage-section-mismatch usr/share/man/man8/newaliases.sendmail.8.gz:14 8 != 1 diff --git a/debian/build/debian/sendmail-bin.postinst.in b/debian/build/debian/sendmail-bin.postinst.in new file mode 100644 index 0000000..13ce727 --- /dev/null +++ b/debian/build/debian/sendmail-bin.postinst.in @@ -0,0 +1,319 @@ +#!/bin/sh -e +# +# Debian post installation script +# +# Install of already installed package: +# 1) old-prerm upgrade new-version +# *) new-prerm failed-upgrade old-version +# *) old-postinst abort-upgrade new-version +# +# If a `conflicting' package is being removed at the same time: +# 1) forall packages depending on conflicting package and --auto-deconfigure +# deconfigured's-prerm deconfigure \ +# in-favour package-being-installed version \ +# removing conflicting-package version +# *) deconfigured's-postinst abort-deconfigure \ +# in-favour package-being-installed-but-failed version \ +# removing conflicting-package version +# 2) To prepare for removal of the conflicting package +# conflictor's-prerm remove \ +# in-favour package new-version +# *) conflictor's-postinst abort-remove \ +# in-favour package new-version +# +# Configuration of package: +# postinst configure most-recently-configured-version +# +set -e; + +PACKAGE=sendmail-bin; + +#----------------------------------------------------------- +#stop(): stop sendmail +stop_mta () { + # Account for varying PIDfile locations of older sendmail packages + if [ -f /var/run/sendmail/mta/sendmail.pid ]; then + start-stop-daemon --stop --oknodo --quiet \ + --pidfile /var/run/sendmail/msp/sendmail.pid > /dev/null; + start-stop-daemon --stop --oknodo --quiet \ + -pidfile /var/run/sendmail/mta/sendmail.pid > /dev/null; + elif [ -f /var/run/sendmail/sendmail.pid ]; then + start-stop-daemon --stop --oknodo --quiet \ + --pidfile /var/run/sendmail/sendmail.pid > /dev/null; + elif [ -f /var/run/sendmail.pid ]; then + start-stop-daemon --stop --oknodo --quiet \ + --pidfile /var/run/sendmail.pid > /dev/null; + fi; + # Since we changed the executable, do one more try - using the old name + if [ -f /var/run/sendmail/mta/sendmail.pid ]; then + start-stop-daemon --stop --oknodo --quiet \ + --pidfile /var/run/sendmail/mta/sendmail.pid > /dev/null; + fi; + start-stop-daemon --stop --oknodo --quiet \ + --name sendmail > /dev/null; + if [ -x @sysconfdir@/init.d/sendmail ]; then + if [ -x /usr/sbin/invoke-rc.d ]; then + /usr/sbin/invoke-rc.d --quiet --force sendmail stop; + else + @sysconfdir@/init.d/sendmail stop; + fi; + fi; + }; + +#----------------------------------------------------------- +#start(): start sendmail +start_mta () { + if [ -x /usr/sbin/invoke-rc.d ]; then + /usr/sbin/invoke-rc.d sendmail start; + else + @sysconfdir@/init.d/sendmail start; + fi; + }; + +#----------------------------------------------------------- +# configure(): save sendmail.cf, call sendmailconfig +configure_mta () { + local enter; + echo -n "Configure now ? (y/N) "; + read yn; + yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//"); + test -n "$yn" || yn="N"; + case "$yn" in + [Yy]*) + stop_mta; + @sbindir@/sendmailconfig --no-reload; + start_mta; + ;; + + [Nn]*) + echo -e "\nTo configure sendmail later, type" \ + "sendmailconfig"; + echo "After configuring sendmail, you can" \ + "start it via @sysconfdir@/init.d/sendmail start"; + echo -n "Press [ENTER] "; + read enter; + ;; + esac; + }; + +# do we have debconf? +if [ -f /usr/share/debconf/confmodule ]; then + DEBCONF=true; + #. /usr/share/debconf/confmodule; + #db_stop; # For testing +else + DEBCONF=''; + fi; + +case "$1" in + configure) + # continue below + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + exit 0; + ;; + + *) + echo "$PACKAGE postinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#-------------------------------------------------------------------- +# Continuation of "$1" = "configure" + +# Note: can't use debhelper here because the actions aren't contiguous +#xxxHELPER# + +# Automatically added by dh_installinit +if [ -x "@sysconfdir@/init.d/sendmail" ]; then + update-rc.d -f sendmail remove >/dev/null; + update-rc.d sendmail defaults 21 19 >/dev/null; + #/etc/init.d/sendmail start +fi +# End automatically added section + +#----------------------------------------------------------- +# Create (or update) MTA, MSP alternatives +# This way, we'll be able to install 2 MTAs on the same box :) +update-alternatives \ + --install @sbindir@/sendmail-mta sendmail-mta @libexecdir@/sendmail 25 \ + --slave @mandir@/man8/sendmail-mta.8.gz sendmail-mta.8.gz \ + @mandir@/man8/sendmail.sendmail.8.gz \ + --slave @sbindir@/runq runq @datadir@/sendmail/runq \ + --slave @mandir@/man8/runq.8.gz runq.8.gz \ + @mandir@/man8/runq.sendmail.8.gz \ + --slave @sbindir@/newaliases newaliases \ + @datadir@/sendmail/newaliases \ + --slave @mandir@/man8/newaliases.8.gz newaliases.8.gz \ + @mandir@/man8/newaliases.sendmail.8.gz \ + --slave @bindir@/mailq mailq @datadir@/sendmail/mailq \ + --slave @mandir@/man1/mailq.1.gz mailq.1.gz \ + @mandir@/man1/mailq.sendmail.1.gz \ + --slave @mandir@/man5/aliases.5.gz aliases.5.gz \ + @mandir@/man5/aliases.sendmail.5.gz \ + ; +update-alternatives \ + --install @sbindir@/sendmail-msp sendmail-msp @libexecdir@/sendmail 25 \ + --slave @mandir@/man8/sendmail-msp.8.gz sendmail-msp.8.gz \ + @mandir@/man8/sendmail.sendmail.8.gz \ + --slave @sbindir@/sendmail sendmail @libexecdir@/sendmail \ + --slave @libdir@/sendmail lib.sendmail @libexecdir@/sendmail \ + --slave @mandir@/man8/sendmail.8.gz sendmail.8.gz \ + @mandir@/man8/sendmail.sendmail.8.gz \ + ; + +#----------------------------------------------------------- +# With a dynamic uid/gid, have to set appropriate ownership herein +if command -v suidregister >/dev/null 2>&1 && test -s /etc/suid.conf; then + suidregister -s sendmail @sbindir@/sendmail root smmsp 02755; + suidregister -s sendmail @libexecdir@/mailstats root smmsp 02755; +elif [ -x @sbindir@/sendmail ]; then + chown root:smmsp @libexecdir@/sendmail; + chmod 02755 @libexecdir@/sendmail; + chown root:smmsp @libexecdir@/mailstats; + chmod 02755 @libexecdir@/mailstats; + fi; + +#----------------------------------------------------------- +# Create backups of /etc/mail/{sendmail,submit}.mc +if [ -f @sysconfdir@/mail/sendmail.cf ]; then + echo "Saving old /etc/mail/sendmail.cf" \ + "as /etc/mail/sendmail.cf.old ..."; + cp -f @sysconfdir@/mail/sendmail.cf \ + @sysconfdir@/mail/sendmail.cf.old; + chown root:root @sysconfdir@/mail/sendmail.cf.old; + chmod 0644 @sysconfdir@/mail/sendmail.cf.old; + fi; +if [ -f @sysconfdir@/mail/submit.cf ]; then + cp -f @sysconfdir@/mail/submit.cf \ + @sysconfdir@/mail/submit.cf.old; + chown root:root @sysconfdir@/mail/submit.cf.old; + chmod 0644 @sysconfdir@/mail/submit.cf.old; + fi; + +start_ask=0; + +#----------------------------------------------------------- +# Create /etc/mail/sendmail.mc if it doesn't exist +if [ ! -f @sysconfdir@/mail/sendmail.mc ]; then + cat <<-EOT + + You are doing a new install, or have erased /etc/mail/sendmail.mc. + If you've accidentaly erased /etc/mail/sendmail.mc, check /var/backups. + + I am creating a safe, default sendmail.mc for you and you can + run sendmailconfig later if you need to change the defaults. + + EOT + fi; + +if [ -x @datadir@/sendmail/update_sendmail ]; then + stop_mta; + echo "Updating sendmail environment ..."; + @datadir@/sendmail/update_sendmail || true; + start_mta; + fi; +exit 0; + + +#----------------------------------------------------------- +# See if we can do this automagically... +cat <<-EOT + +It is a good idea to regenerate the sendmail configuration +file with each new spin of the sendmail package. + +But, if you hand edit sendmail.cf instead of making changes through +sendmail.mc, then you want to say no, save your old sendmail.cf, run +sendmailconfig, then migrate your changes into the new version. + +EOT +echo -n "Automagically regenerate the sendmail.cf configuration file? (Y/n) "; +read yn; +yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//"); +test -n "$yn" || yn="Y"; +case "$yn" in + [Yy]*) + if [ -f @sysconfdir@/mail/sendmail.cf ]; then + echo "Saving old /etc/mail/sendmail.cf" \ + "as /etc/mail/sendmail.cf.old ..."; + cp -f @sysconfdir@/mail/sendmail.cf \ + @sysconfdir@/mail/sendmail.cf.old; + chown root:root @sysconfdir@/mail/sendmail.cf.old; + chmod 0644 @sysconfdir@/mail/sendmail.cf.old; + fi; + if [ -f @sysconfdir@/mail/submit.cf ]; then + cp -f @sysconfdir@/mail/submit.cf \ + @sysconfdir@/mail/submit.cf.old; + chown root:root @sysconfdir@/mail/submit.cf.old; + chmod 0644 @sysconfdir@/mail/submit.cf.old; + fi; + if [ -x @datadir@/sendmail/update_sendmail ]; then + stop_mta; + echo "Updating sendmail environment ..."; + @datadir@/sendmail/update_sendmail || true; + fi; + ;; + + [Nn]*) + cat <<-EOT + + Your files (sendmail.mc,cf, etc) have *not* been altered. + + *** Warning *** Warning *** Warning *** Warning *** Warning *** Warning *** + + There have been changes in + * Paths of some databases and executables + * FEATUREs, DOMAIN, includes + * Internal Database storage + + These changes were *NOT* made for you ... And will not be + until you run sendmailconfig! + + Until you update /etc/mail/sendmail.cf via sendmailconfig, + you should expect to have problems running sendmail! + + "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 + + *** Warning *** Warning *** Warning *** Warning *** Warning *** Warning *** + + EOT + echo "Do you wish to run sendmailconfig now, or later"; + start_ask=0; + configure_mta; + case "$yn" in + [Yy]*) + cat <<-EOT + + Do you wish to start sendmail with the new sendmail.cf, + or do you wish to delay until you can merge any changes + from your older sendmail.cf.old? + EOT + start_ask=1; + start_mta; + ;; + esac; + exit 0; + esac; + +#----------------------------------------------------------- +# If we're still here, we're going the automagic path... +# Now, liberal application of smoke and mirrors +if [ -f @sysconfdir@/mail/sendmail.mc ]; then + start_ask=1; + start_mta; + fi; + +exit 0; + +#----------------------------------------------------------- +# +# List herein (for reference) what debhelper would've done: +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-bin.postrm.in b/debian/build/debian/sendmail-bin.postrm.in new file mode 100644 index 0000000..e0ae347 --- /dev/null +++ b/debian/build/debian/sendmail-bin.postrm.in @@ -0,0 +1,85 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=sendmail-bin; + +case "$1" in + remove) + if [ ! -z "$2" ]; then + echo "Removing $PACKAGE $2 $3($4)"; + if [ "$PACKAGE" = 'sendmail' ] && [ "$3" = 'sendmail-tls' ] || \ + [ "$PACKAGE" = 'sendmail-tls' ] && [ "$3" = 'sendmail' ]; then + echo '...Nothing to do...'; + exit 0; + fi; + fi; + ;; + + purge) + # If postrm is called *AND* there are no files, exit quickly + # (This is a *GROSS* hack... beter use the test below) + #if [ ! -s `echo "$0" | sed -e 's/postrm$/list/'` ]; then + # echo "Purging replaced package $PACKAGE, nothing to do..."; + # exit 0; + # fi; + + # We're *really* purging; neither sendmail nor sendmail-tls + # is currently installed + if [ -f @libexecdir@/sendmail ]; then + echo "Purging replaced package $PACKAGE, nothing to do..."; + exit 0; + fi; + + # Currently, dh_installdebconf doesn't do db_stop... ensure it is done! + if [ "$1" = "purge" ] && [ -e /usr/share/debconf/confmodule ]; then + # Source debconf library. + . /usr/share/debconf/confmodule; + # Make sure we're done + #db_stop; + # Remove my changes to the db. + db_purge; + fi; + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + echo "$1 of $PACKAGE $2"; + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +# NOTE WELL: If we fall through here during purge, update-rc.d will be +# called with remove... and /etc/init.d/$PACKAGE goes away! +#DEBHELPER# + +exit 0; diff --git a/debian/build/debian/sendmail-bin.preinst.in b/debian/build/debian/sendmail-bin.preinst.in new file mode 100644 index 0000000..b45a775 --- /dev/null +++ b/debian/build/debian/sendmail-bin.preinst.in @@ -0,0 +1,52 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=sendmail-bin; + +# do we have debconf? +if [ -f /usr/share/debconf/confmodule ]; then + DEBCONF=true; + . /usr/share/debconf/confmodule; +else + DEBCONF=''; + fi; + +case "$1" in + install) + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + rm -rf @libdir@/sendmail 2>/dev/null || true; + + # Prevent cronjob from running during upgrade... + if [ -f /etc/cron.d/sendmail ]; then + echo "#preinst" > @sysconfdir@/cron.d/sendmail; + fi; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-bin.prerm.in b/debian/build/debian/sendmail-bin.prerm.in new file mode 100644 index 0000000..a478620 --- /dev/null +++ b/debian/build/debian/sendmail-bin.prerm.in @@ -0,0 +1,90 @@ +#!/bin/sh -e +# +# Debian pre removal script +# +# Install of already installed package: +# 1) old-prerm upgrade new-version +# *) new-prerm failed-upgrade old-version +# *) old-postinst abort-upgrade new-version +# +# If a `conflicting' package is being removed at the same time: +# 1) forall packages depending on conflicting package and --auto-deconfigure +# deconfigured's-prerm deconfigure \ +# in-favour package-being-installed version \ +# removing conflicting-package version +# *) deconfigured's-postinst abort-deconfigure \ +# in-favour package-being-installed-but-failed version \ +# removing conflicting-package version +# 2) To prepare for removal of the conflicting package +# conflictor's-prerm remove \ +# in-favour package new-version +# *) conflictor's-postinst abort-remove \ +# in-favour package new-version +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# +set -e; + +PACKAGE=sendmail-bin; + +case "$1" in + remove) + if [ ! -z "$2" ]; then + echo "Removing $PACKAGE $2 $3($4)"; + if [ "$PACKAGE" = 'sendmail' ] && [ "$3" = 'sendmail-tls' ] || \ + [ "$PACKAGE" = 'sendmail-tls' ] && [ "$3" = 'sendmail' ]; then + echo '...Nothing to do...'; + exit 0; + fi; + fi; + # Remove alternatives for MTA, MSP + update-alternatives --remove sendmail-mta @libexecdir@/sendmail; + update-alternatives --remove sendmail-msp @libexecdir@/sendmail; + if [ -x @sysconfdir@/init.d/sendmail ] && \ + [ -x @datadir@/sendmail/sendmail ]; then + if [ -x /usr/sbin/invoke-rc.d ]; then + /usr/sbin/invoke-rc.d --quiet --force sendmail stop; + else + @sysconfdir@/init.d/sendmail stop; + fi; + fi; + # Prevent cronjob from running during upgrade... + if [ -f /etc/cron.d/sendmail ]; then + rm -f @sysconfdir@/cron.d/sendmail; + fi; + ;; + + upgrade) + # Prevent cronjob from running during upgrade... + if [ -f /etc/cron.d/sendmail ]; then + echo "#prerm" > @sysconfdir@/cron.d/sendmail; + fi; + + # NOTE NOTE NOTE NOTE NOTE + # If we fall through to DEBHELPER, sendmail will be stopped + # much earlier than necessary !!! + exit 0; + ;; + + failed-upgrade) + ;; + + deconfigure) + echo "Deconfigure of $PACKAGE $2 $3($4) $5 $6($7) "; + ;; + + *) + echo "$PACKAGE prerm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +# +# Included for sanity checks +# +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-bin.suid.in b/debian/build/debian/sendmail-bin.suid.in new file mode 100644 index 0000000..32469ca --- /dev/null +++ b/debian/build/debian/sendmail-bin.suid.in @@ -0,0 +1,2 @@ +@sbindir@/sendmail +@libexecdir@/mailstats diff --git a/debian/build/debian/sendmail-cf.dirs.in b/debian/build/debian/sendmail-cf.dirs.in new file mode 100644 index 0000000..5f68fa8 --- /dev/null +++ b/debian/build/debian/sendmail-cf.dirs.in @@ -0,0 +1,14 @@ +./DEBIAN +.@docdir@/sendmail-cf +.@datadir@/bug +.@datadir@/sendmail/cf +.@datadir@/sendmail/cf/cf +.@datadir@/sendmail/cf/debian +.@datadir@/sendmail/cf/domain +.@datadir@/sendmail/cf/feature +.@datadir@/sendmail/cf/hack +.@datadir@/sendmail/cf/m4 +.@datadir@/sendmail/cf/mailer +.@datadir@/sendmail/cf/ostype +.@datadir@/sendmail/cf/sh +.@datadir@/lintian/overrides diff --git a/debian/build/debian/sendmail-cf.postrm.in b/debian/build/debian/sendmail-cf.postrm.in new file mode 100644 index 0000000..5e963d4 --- /dev/null +++ b/debian/build/debian/sendmail-cf.postrm.in @@ -0,0 +1,56 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=sendmail-cf; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f @docdir@/$PACKAGE 2>/dev/null || true; + rmdir @docdir@/sendmail 2>/dev/null || true; + + # Make sure the data directory is *clean* + rm -rf @datadir@/sendmail/cf + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-cf.preinst.in b/debian/build/debian/sendmail-cf.preinst.in new file mode 100644 index 0000000..d80d6d6 --- /dev/null +++ b/debian/build/debian/sendmail-cf.preinst.in @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=sendmail-cf; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-doc.dirs.in b/debian/build/debian/sendmail-doc.dirs.in new file mode 100644 index 0000000..6692aec --- /dev/null +++ b/debian/build/debian/sendmail-doc.dirs.in @@ -0,0 +1,8 @@ +./DEBIAN +.@docdir@/sendmail-doc +.@docdir@/sendmail-doc/libmilter +.@docdir@/sendmail-doc/libmilter/html +.@docdir@/sendmail-doc/op +.@docdir@/sendmail-doc/sendmail +.@datadir@/bug +.@datadir@/lintian/overrides diff --git a/debian/build/debian/sendmail-doc.postrm.in b/debian/build/debian/sendmail-doc.postrm.in new file mode 100644 index 0000000..5a66b10 --- /dev/null +++ b/debian/build/debian/sendmail-doc.postrm.in @@ -0,0 +1,53 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=sendmail-doc; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f @docdir@/$PACKAGE 2>/dev/null || true; + rmdir @docdir@/sendmail 2>/dev/null || true; + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail-doc.preinst.in b/debian/build/debian/sendmail-doc.preinst.in new file mode 100644 index 0000000..071f1e5 --- /dev/null +++ b/debian/build/debian/sendmail-doc.preinst.in @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=sendmail-doc; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sendmail.cron.daily.in b/debian/build/debian/sendmail.cron.daily.in new file mode 100644 index 0000000..131f9a2 --- /dev/null +++ b/debian/build/debian/sendmail.cron.daily.in @@ -0,0 +1,101 @@ +#!/bin/sh +set +e; + +#------------------------------------------------------------------------------ +# Autoconf variables - in a form suitable for sh, perl +# Generated automatically from autoconf.sh.in by configure. +#------------------------------------------------------------------------------ +# Variables for, and by, Autoconf (Don't touch these! edit config step) +PACKAGE_NAME="@PACKAGE_NAME@"; +PACKAGE_VERSION="@PACKAGE_VERSION@"; +prefix="@prefix@"; +exec_prefix="@exec_prefix@"; +bindir="@bindir@"; +sbindir="@sbindir@"; +libexecdir="@libexecdir@"; +datadir="@datadir@"; +sysconfdir="@sysconfdir@"; +sharedstatedir="@sharedstatedir@"; +localstatedir="@localstatedir@"; +libdir="@libdir@"; +includedir="@includedir@"; +infodir="@infodir@"; +mandir="@mandir@"; +docdir="@docdir@"; +srcdir="@srcdir@"; + +copies=2; + +# backup "/etc/mail/sendmail.mc" +if [ -f ${sysconfdir}/mail/sendmail.mc ]; then + if [ ! -f ${localstatedir}/backups/sendmail.mc.bak ]; then + cp -pf ${sysconfdir}/mail/sendmail.mc \ + ${localstatedir}/backups/sendmail.mc.bak; + fi; + if ! cmp -s ${localstatedir}/backups/sendmail.mc.bak \ + ${sysconfdir}/mail/sendmail.mc ; then + cd ${localstatedir}/backups; + /usr/bin/savelog -p -c $copies sendmail.mc.bak > /dev/null; + cp -pf ${sysconfdir}/mail/sendmail.mc \ + ${localstatedir}/backups/sendmail.mc.bak; + fi; + fi; + +# backup "/etc/mail/submit.mc" +if [ -f ${sysconfdir}/mail/submit.mc ]; then + if [ ! -f ${localstatedir}/backups/submit.mc.bak ]; then + cp -pf ${sysconfdir}/mail/submit.mc \ + ${localstatedir}/backups/submit.mc.bak; + fi; + if ! cmp -s ${localstatedir}/backups/submit.mc.bak \ + ${sysconfdir}/mail/submit.mc ; then + cd ${localstatedir}/backups; + /usr/bin/savelog -p -c $copies submit.mc.bak > /dev/null; + cp -pf ${sysconfdir}/mail/submit.mc \ + ${localstatedir}/backups/submit.mc.bak; + fi; + fi; + +# while we're here, might as well do sendmail.cf +if [ -f ${sysconfdir}/mail/sendmail.cf ]; then + if [ ! -f ${localstatedir}/backups/sendmail.cf.bak ]; then + cp -pf ${sysconfdir}/mail/sendmail.cf \ + ${localstatedir}/backups/sendmail.cf.bak; + fi; + if ! cmp -s ${localstatedir}/backups/sendmail.cf.bak \ + ${sysconfdir}/mail/sendmail.cf ; then + cd ${localstatedir}/backups; + # save previous generation only if differences are significant + diff -bBwI "^\#\#\#\#\# " \ + ${localstatedir}/backups/sendmail.cf.bak \ + ${sysconfdir}/mail/sendmail.cf > /dev/null; + if [ $? -ne 0 ]; then + /usr/bin/savelog -p -c $copies sendmail.cf.bak \ + > /dev/null; + fi; + cp -pf ${sysconfdir}/mail/sendmail.cf \ + ${localstatedir}/backups/sendmail.cf.bak; + fi; + fi; + +# while we're here, might as well do submit.cf +if [ -f ${sysconfdir}/mail/submit.cf ]; then + if [ ! -f ${localstatedir}/backups/submit.cf.bak ]; then + cp -pf ${sysconfdir}/mail/submit.cf \ + ${localstatedir}/backups/submit.cf.bak; + fi; + if ! cmp -s ${localstatedir}/backups/submit.cf.bak \ + ${sysconfdir}/mail/submit.cf ; then + cd ${localstatedir}/backups; + # save previous generation only if differences are significant + diff -bBwI "^\#\#\#\#\# " \ + ${localstatedir}/backups/submit.cf.bak \ + ${sysconfdir}/mail/submit.cf > /dev/null; + if [ $? -ne 0 ]; then + /usr/bin/savelog -p -c $copies submit.cf.bak \ + > /dev/null; + fi; + cp -pf ${sysconfdir}/mail/submit.cf \ + ${localstatedir}/backups/submit.cf.bak; + fi; + fi; diff --git a/debian/build/debian/sendmail.dirs.in b/debian/build/debian/sendmail.dirs.in new file mode 100644 index 0000000..4c335c8 --- /dev/null +++ b/debian/build/debian/sendmail.dirs.in @@ -0,0 +1,4 @@ +./DEBIAN +.@docdir@/sendmail +.@datadir@/bug +.@datadir@/lintian/overrides diff --git a/debian/build/debian/sendmail.init.d.in b/debian/build/debian/sendmail.init.d.in new file mode 100644 index 0000000..f5126b2 --- /dev/null +++ b/debian/build/debian/sendmail.init.d.in @@ -0,0 +1,39 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: sendmail +# Required-Start: $local_fs $network +# Required-Stop: $local_fs $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# 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 +# mail configurations, although this means that its +# configuration can also be complex. Fortunately, simple +# thing can be done easily, and complex thing are possible, +# even if not easily understood ;) Sendmail is the *ONLY* +# MTA with a Turing complete language to control *ALL* +# aspects of delivery! +### END INIT INFO + +# Author: Marc-Christian Petersen <m.c.p@kernel.linux-systeme.com> + +PATH=/bin:/usr/bin:/sbin:/usr/sbin +DESC="Mail Transport Agent (MTA)" +NAME=sendmail +DAEMON=/usr/sbin/$NAME +DAEMON_ARGS="" +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/sendmail ] && . /etc/default/sendmail + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +. /lib/lsb/init-functions + diff --git a/debian/build/debian/sensible-mda.dirs.in b/debian/build/debian/sensible-mda.dirs.in new file mode 100644 index 0000000..d6661b4 --- /dev/null +++ b/debian/build/debian/sensible-mda.dirs.in @@ -0,0 +1,6 @@ +./DEBIAN +.@sbindir@ +.@mandir@ +.@mandir@/man8 +.@datadir@/bug +.@datadir@/lintian/overrides diff --git a/debian/build/debian/sensible-mda.lintian-overrides b/debian/build/debian/sensible-mda.lintian-overrides new file mode 100644 index 0000000..cc2becf --- /dev/null +++ b/debian/build/debian/sensible-mda.lintian-overrides @@ -0,0 +1,2 @@ +sensible-mda: setuid-binary usr/sbin/sensible-mda 4755 root/root +sensible-mda: description-synopsis-starts-with-a-capital-letter diff --git a/debian/build/debian/sensible-mda.postrm.in b/debian/build/debian/sensible-mda.postrm.in new file mode 100644 index 0000000..b447bfd --- /dev/null +++ b/debian/build/debian/sensible-mda.postrm.in @@ -0,0 +1,53 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=sensible-mda; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f @docdir@/$PACKAGE 2>/dev/null || true; + rmdir @docdir@/sendmail 2>/dev/null || true; + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/debian/sensible-mda.preinst.in b/debian/build/debian/sensible-mda.preinst.in new file mode 100644 index 0000000..e54cd20 --- /dev/null +++ b/debian/build/debian/sensible-mda.preinst.in @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=sensible-mda; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d @docdir@/$PACKAGE ]; then + rm -rf @docdir@/$PACKAGE; + fi; + if [ ! -d @docdir@/sendmail ]; then + mkdir -p @docdir@/sendmail; + chmod a+rx @docdir@/sendmail; + fi; + ln -sf sendmail @docdir@/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/build/depcomp b/debian/build/depcomp new file mode 100644 index 0000000..51606f8 --- /dev/null +++ b/debian/build/depcomp @@ -0,0 +1,464 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. This file always lives in the current directory. + # Also, the AIX compiler puts `$object:' at the start of each line; + # $object doesn't have directory information. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Must come before tru64. + + # Intel's C compiler understands `-MD -MF file'. However + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/debian/build/install-sh b/debian/build/install-sh new file mode 100644 index 0000000..0ec27bc --- /dev/null +++ b/debian/build/install-sh @@ -0,0 +1,294 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/#inst.$$# + rmtmp=$dstdir/#rm.$$# + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$src" "$dsttmp" && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# Now remove or move aside any old file at destination location. We try this +# two ways since rm can't unlink itself on some systems and the destination +# file might be busy for other reasons. In this case, the final cleanup +# might fail but the new file should still install successfully. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/debian/build/missing b/debian/build/missing new file mode 100644 index 0000000..6a37006 --- /dev/null +++ b/debian/build/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/debian/build/mkinstalldirs b/debian/build/mkinstalldirs new file mode 100644 index 0000000..d2d5f21 --- /dev/null +++ b/debian/build/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/debian/build/rules.hdr b/debian/build/rules.hdr new file mode 100644 index 0000000..b62ae36 --- /dev/null +++ b/debian/build/rules.hdr @@ -0,0 +1,64 @@ +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: rules,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Rules file for Sendmail @sm_version@@sm_revision@(@sm_version_math@) +# on @sm_dist_name@ @sm_dist_vers@ +# via Debhelper V@DEBIAN_DH@ +# +# Note: the .in file supports Sendmail @SM_MINVERS@ - @SM_MAXVERS@ +# on Debian slink, potato, woody, testing, sid, ... +# but the generated file is customized to the version noted above. +# +# The only thing to watch for is to make sure the changelog correctly +# reflects the appropriate version and distribution! +# +# To support private builds: +# 1) use the environment variables (defaults shown first): +# CC=gcc|gcc-3.0..........-- choose compiler +# CFLAGS='-O2 -Wall [-g]'.-- choose compile options +# DEFINES=''..............-- additional -Dxxx +# SM_CONF_OPT=''..........-- additional configure options +# SM_BUILD_OPT=''.........-- additional build options +# 2) Build the package using your normal setup: +# A) [fakeroot] debian/rules binary +# B) debuild -rfakeroot +# C) dpkg-buildpackage -rfakeroot -uc -us +# +# DEB_BUILD_OPTIONS (global Debian package build options) +# Debian specific, and common across package options +# noopt - Do *NOT* compile with optimization (force -O0) +# nostrip - Do *NOT* strip binaries (for debugging) +# +# +# SM_CONF_OPT +# Additional configure options and/or overrides may be specified thusly: +# 1) export SM_CONF_OPT='--enable-shm=no' +# dpkg-buildpackage -rfakeroot -uc -us +# 2) SM_CONF_OPT='--enable-shm=no' dpkg-buildpackage +# 3) debuild -e SM_CONF_OPT='--enable-shm=no' +# etc... +# +# SM_BUILD_OPT +# 1) export SM_BUILD_OPT='notls' +# dpkg-buildpackage -rfakeroot -uc -us +# 2) SM_BUILD_OPT='notls' dpkg-buildpackage -rfakeroot -uc -us +# 3) debuild -e SM_BUILD_OPT='notls' -e CLFAGS='-O3 Wall' +# etc... +# +# Supported options values for SM_BUILD_OPT: +# notls Disable STARTTLS (OpenSSL) support +# noauth Disable SMTP AUTH (sasl) support +# nodev Disable generation of libmilter-dev package +# nodoc Disable generation of sendmail-doc package +# +# This make file uses scripts from the DBS (0.8) package! +# +# Richard Nelson <cowboy@debian.org> @sm_date@ @sm_time@ (@sm_utc@) +#------------------------------------------------------------------------------ diff --git a/debian/build/site.config.m4.in b/debian/build/site.config.m4.in new file mode 100644 index 0000000..a5c8c95 --- /dev/null +++ b/debian/build/site.config.m4.in @@ -0,0 +1,241 @@ +#----------------------------------------------------------------------------- +# $Sendmail: site.config.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Debian site.config.m4 for sendmail @sm_version@@sm_revision@(@sm_version_math@) +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +# +#------------------------------------------------------------------ +# Sendmail @sm_version@@sm_revision@(@sm_version_math@) on @sm_date@ at @sm_time@ (@sm_utc@) +#------------------------------------------------------------------ +# +#------------------------------------------------------------------ +# The following sendmail features are included +#------------------------------------------------------------------ +#REGEX: @sm_enable_regex@ +#NDBM: @sm_enable_ndbm@ +#NEWDB: @sm_enable_newdb@ @sm_newdb_lib@ +#NIS: @sm_enable_nis@ +#NISPLUS: @sm_enable_nisplus@ +#LDAP: @sm_enable_ldap@ @sm_ldap_lib@ +#HESIOD: @sm_enable_hesiod@ @sm_hesiod_parms@ +#TCPD: @sm_enable_tcpd@ +#BIND: @sm_enable_bind@ +#IPv6: @sm_enable_ipv6@ +#Maillock: @sm_enable_maillock@ +#MILTER: @sm_enable_milter@ +#SFIO: @sm_enable_sfio@ +#AUTH: @sm_enable_auth@ @sm_auth_lib@ +#TLS: @sm_enable_tls@ +#SHM: @sm_enable_shm@ +#FFRs: @sm_ffr@ +#M4_FFRs: @sm_m4_ffr@ +# +#------------------------------------------------------------------ +# Packages and build dependancies (Debian packages) +#------------------------------------------------------------------ +#Sendmail: sendmail +#Build-Depends: @sm_badepends@ +#Depends: @sm_depends@ +#Recommends: @sm_recommends@ +#Suggests: @sm_suggests@ +# +#------------------------------------------------------------------ +# Build Setup +#------------------------------------------------------------------ +#Autoconf version: @ac_version@ +#Automake version: @am_version@ +#DEBIAN_DH(DebHelper): @DEBIAN_DH@ internal use(not reliable) +# +#DEB_BUILD_ARCH: @DEB_BUILD_ARCH@ +#DEB_BUILD_GNU_CPU: @DEB_BUILD_GNU_CPU@ +#DEB_BUILD_GNU_SYSTEM: @DEB_BUILD_GNU_SYSTEM@ +#DEB_BUILD_GNU_TYPE: @DEB_BUILD_GNU_TYPE@ +#DEB_HOST_ARCH: @DEB_HOST_ARCH@ +#DEB_HOST_GNU_CPU: @DEB_HOST_GNU_CPU@ +#DEB_HOST_GNU_SYSTEM: @DEB_HOST_GNU_SYSTEM@ +#DEB_HOST_GNU_TYPE: @DEB_HOST_GNU_TYPE@ +# +#------------------------------------------------------------------ +# Autoconf variable settings defaults +#------------------------------------------------------------------ +#prefix: @prefix@ /usr/local +#exec_prefix: @exec_prefix@ ${prefix} +#bindir: @bindir@ ${exec_prefix}/bin +#sbindir: @sbindir@ ${exec_prefix}/sbin +#libexecdir: @libexecdir@ ${exec_prefix}/libexec +#datadir: @datadir@ ${prefix}/share +#sysconfdir: @sysconfdir@ ${prefix}/etc +#sharedstatedir: @sharedstatedir@ ${prefix}/com +#localstatedir: @localstatedir@ ${prefix}/var +#libdir: @libdir@ ${exec_prefix}/var +#includedir: @includedir@ ${prefix}/include +#oldincludedir: @oldincludedir@ /usr/include +#infodir: @infodir@ ${prefix}/info +#mandir: @mandir@ ${prefix}/man +#docdir: @docdir@ ${prefix}/doc +#srcdir: @srcdir@ configure or .. +# +#------------------------------------------------------------------ +# Build options for the various pieces parts of sendmail +#------------------------------------------------------------------ +# +# Make sure defaults are sound... +define(`confLIBS', `')dnl # was -ldl +# +# global +APPENDDEF(`confINCDIRS', `@sm_incdirs@') +APPENDDEF(`confMAPDEF', `@sm_mapdef@') +APPENDDEF(`confENVDEF', `@sm_envdef@') +APPENDDEF(`confLIBS', `@sm_libs@') +# +# editmap +APPENDDEF(`conf_editmap_ENVDEF', `@sm_editmap_envdef@') +APPENDDEF(`conf_editmap_LIBS', `@sm_editmap_libs@') +# +# libmilter +APPENDDEF(`conf_libmilter_ENVDEF', `@sm_libmilter_envdef@') +APPENDDEF(`conf_libmilter_LIBS', `@sm_libmilter_libs@') +# +# libsm +APPENDDEF(`conf_libsm_ENVDEF', `@sm_libsm_envdef@') +APPENDDEF(`conf_libsm_LIBS', `@sm_libsm_libs@') +# +# libsmdb +APPENDDEF(`conf_libsmdb_ENVDEF', `@sm_libsmdb_envdef@') +APPENDDEF(`conf_libsmdb_LIBS', `@sm_libsmdb_libs@') +# +# libsmutil +APPENDDEF(`conf_libsmutil_ENVDEF', `@sm_libsmutil_envdef@') +APPENDDEF(`conf_libsmutil_LIBS', `@sm_libsmutil_libs@') +# +# mail.local +APPENDDEF(`conf_mail_local_ENVDEF', `@sm_mail_local_envdef@') +APPENDDEF(`conf_mail_local_LIBS', `@sm_mail_local_libs@') +# +# mailstats +APPENDDEF(`conf_mailstats_ENVDEF', `@sm_mailstats_envdef@') +APPENDDEF(`conf_mailstats_LIBS', `@sm_mailstats_libs@') +# +# makemap +APPENDDEF(`conf_makemap_ENVDEF', `@sm_makemap_envdef@') +APPENDDEF(`conf_makemap_LIBS', `@sm_makemap_libs@') +# +# praliases +APPENDDEF(`conf_praliases_ENVDEF', `@sm_praliases_envdef@') +APPENDDEF(`conf_praliases_LIBS', `@sm_praliases_libs@') +# +# rmail +APPENDDEF(`conf_rmail_ENVDEF', `@sm_rmail_envdef@') +APPENDDEF(`conf_rmail_LIBS', `@sm_rmail_libs@') +# +# sendmail +APPENDDEF(`conf_sendmail_ENVDEF', `@sm_sendmail_envdef@') +APPENDDEF(`conf_sendmail_LIBS', `@sm_sendmail_libs@') +# +# smrsh +APPENDDEF(`conf_smrsh_ENVDEF', `@sm_smrsh_envdef@') +APPENDDEF(`conf_smrsh_LIBS', `@sm_smrsh_libs@') +# +# vacation +APPENDDEF(`conf_vacation_ENVDEF', `@sm_vacation_envdef@') +APPENDDEF(`conf_vacation_LIBS', `@sm_vacation_libs@') +# +#------------------------------------------------------------------ +# Build-time selection not handled by autoconf above +#------------------------------------------------------------------ +# none, for the nonce... +# +#------------------------------------------------------------------ +# Global Build time configuration +#------------------------------------------------------------------ +# compilation/link +define(`confCC', `@CC@')dnl #Compiler +define(`confOPTIMIZE', `@CFLAGS@')dnl #Optimization +define(`confCCOPTS', `')dnl #CC options +define(`confCCOPTS_SO' `-fPIC')dnl #Shared libraries +define(`confLD', confCC)dnl #Linker +define(`confLDOPTS', `@LDFLAGS@')dnl #Linker opts +define(`confLDOPTS_SO', `-shared -fPIC @LDFLAGS@')dnl #linker shared lib +define(`confLIBDIRS', `')dnl #-L linker flags +define(`confMTCCOPTS', `-D_REENTRANT')dnl #Multi-thread cc opts +define(`confMTLDOPTS', `-lpthread')dnl #Multi-thread ld opts +define(`confSHAREDLIB_EXT', `.so')dnl # +define(`confSHAREDLIB_SUFFIX', `')dnl # +define(`confSHAREDLIBDIR', `@libdir@')dnl # +define(`confSONAME',`-soname')dnl # +# +# paths, owners, and modes +# Note: can't use smmsp here, it is dynamically created +# Note: EBINDIR deserves a better home, suggestions? +define(`confEBINDIR', `@libexecdir@')dnl #mail.local,smrsh,etc. +define(`confGBINGRP', `mail')dnl #sgid binary group smmsp +define(`confGBINMODE', `02755')dnl #sgid binary mode +define(`confGBINOWN', `root')dnl #sgid binary owner +define(`confHFDIR', `@sysconfdir@/mail')dnl #helpfile dir +define(`confHFFILE', `helpfile')dnl #helpfile name +define(`confINCGRP', `root')dnl #include group +define(`confINCMODE', `0744')dnl #include mode +define(`confINCOWN', `root')dnl #include owner +ifelse(eval(@sm_version_math@ >= 527363), `1',dnl +`define(`confINCLUDEDIR',`@includedir@')dnl #include target', +`define(`confINCLUDEDIR',`@includedir@/libmilter')dnl #include target' +)dnl +define(`confINST_DEP', `')dnl #submit.cf clientmqueue +define(`confLIBDIR', `@libdir@/libmilter')dnl #library dir +define(`confLIBGRP', `root')dnl #library group +define(`confLIBMODE', `0744')dnl #library mode +define(`confLIBOWN', `root')dnl #library owner +define(`confMANROOT', `@mandir@/man')dnl #man root +define(`confMANROOTMAN',`@mandir@/man')dnl #man root +define(`confMANGRP', `root')dnl #man group +define(`confMANMODE', `0744')dnl #man mode +define(`confMANOWN', `root')dnl #man owner +define(`confMBINDIR', `@libexecdir@')dnl #MTA bindir @sbindir@ +define(`confMBINGRP', `root')dnl #MTA bin grp +define(`confMBINMODE', `0755')dnl #MTA bin mode +define(`confMBINOWN', `root')dnl #MTA bin owner +define(`confMSPQOWN', `mail')dnl #MSP queue owner smmsp +define(`confMSP_QUEUE_DIR', `/var/spool/mqueue-client')dnl +define(`confSBINDIR', `@libexecdir@')dnl #suid bin dir @sbindir@ +define(`confSBINGRP', `root')dnl #suid bin grp +define(`confSBINMODE', `04755')dnl #suid bin mode +define(`confSBINOWN', `root')dnl #suid bin owner +# Note, STDIR in /var/lib/sendmail... default is /var/spool/mqueue +define(`confSTDIR', `@localstatedir@/lib/sendmail')dnl #Statistics dir +define(`confSTFILE', `statistics')dnl #statistics name +define(`confMSP_STFILE',`sm-client.st')dnl #MSP statistics name +define(`confSTMODE', `0660')dnl #statistics mode +define(`confUBINDIR', `@libexecdir@')dnl #usr bin dir @bindir@ +define(`confUBINGRP', `mail')dnl #usr bin grp smmsp +define(`confUBINMODE', `0755')dnl #usr bin mode +define(`confUBINOWN', `root')dnl #usr bin owner +# +# don't provide links, I'll do them myself later +# sigh... must have something in there or $(make install) croaks -- temp file +define(`confLINKS', `sendmail-bin')dnl +define(`confMTA_LINKS')dnl +# +# Force rmail installation +define(`confFORCE_RMAIL')dnl +# +# don't install formatted man pages or sendmail.st +dnl define(`confNO_MAN_INSTALL')dnl +dnl define(`confNO_MAN_BUILD')dnl +define(`confINSTALL_RAWMAN')dnl +define(`confDONT_INSTALL_CATMAN', `')dnl # for 8.12 +define(`confMANDOC', `')dnl # for 8.9.3 +define(`confNROFF', `cat')dnl # for 8.9.3 +define(`confNO_STATISTICS_INSTALL')dnl +# +# flags +# +# Tests (should be temporary) +# diff --git a/debian/build/update_chaos.in b/debian/build/update_chaos.in new file mode 100644 index 0000000..96e323c --- /dev/null +++ b/debian/build/update_chaos.in @@ -0,0 +1,202 @@ +#!/bin/sh +#----------------------------------------------------------------------------- +# $Sendmail: update_chaos,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Debian script to rationalize builds for Sendmail @sm_version@@sm_revision@(@sm_math@) +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +set -e; + +#------------------------------------------------------------------ +# Exit, stage left, even... if not needed (private dir, or >= 8.10.0) +#------------------------------------------------------------------ +BUILD_TREE='@srcdir@/../../build-tree/sendmail-@sm_version@'; +if [ ! -d ${BUILD_TREE} ]; then + exit 0; + fi; +if [ -d ${BUILD_TREE}/devtools/bin ]; then + exit 0; + fi; + +echo "Rationalizing Sendmail-@sm_version@ setup..."; + +#------------------------------------------------------------------ +# List of subdirectories to work on +#------------------------------------------------------------------ +SUBDIRS="editmap libmilter mail.local mailstats + makemap praliases rmail sendmail smrsh vacation"; + +#------------------------------------------------------------------ +# Match Sendmail's build directory conventions +#------------------------------------------------------------------ +os=`uname -s | sed -e 's/\//-/g' -e 's/ //g'`; +rel=`uname -r | sed -e 's/(/-/g' -e 's/)//g'`; +arch=`uname -m | sed -e 's/ //g'`; +OBJ_DIR="obj.${os}.${rel}.${arch}"; + +#------------------------------------------------------------------ +# Function to escape quotes (to survive subsequent sed) +#------------------------------------------------------------------ +esq () { + result=$(echo "${1}" | sed -e 's?\"?\\\\\\\"?g'); + }; + +#------------------------------------------------------------------ +# Prior to 8.10.0, sendmail source was in the src directory +# Prior to 8.10.0, devtools was called BuildTools +# Create compatibility links (to look like 8.10.0+) +#------------------------------------------------------------------ +if [ ! -d ${BUILD_TREE}/sendmail ]; then + echo "...Creating \${BUILD_TREE}/sendmail compatibility symlink"; + ln -sf src ${BUILD_TREE}/sendmail; + if [ ! -d ${BUILD_TREE}/devtools ]; then + echo "...Creating \${BUILD_TREE}/devtools compatibility symlink"; + ln -sf BuildTools ${BUILD_TREE}/devtools; + fi; + fi; + +#------------------------------------------------------------------ +# Prior to 8.10.0, objects were in the source directories, not separate +# Create compatibility links (to look like 8.10.0+) +#------------------------------------------------------------------ +echo "...Creating ${OBJ_DIR}/<dir> directories"; +mkdir -p ${BUILD_TREE}/${OBJ_DIR}; +for subdir in $SUBDIRS; do + if [ -d ${BUILD_TREE}/${subdir} ]; then + ln -sf "../${subdir}/${OBJ_DIR}" \ + ${BUILD_TREE}/${OBJ_DIR}/${subdir}; + fi; + done; + +#------------------------------------------------------------------ +# If 8.9.0+, we're done, get the flock outa here... +#------------------------------------------------------------------ +if [ -e ${BUILD_TREE}/sendmail/Build ]; then + echo '...Done.'; + exit 0; + fi; + +#------------------------------------------------------------------ +# Prior to 8.9.0, READ_ME was seen in a few places +# Create compatibility links +#------------------------------------------------------------------ +echo '...Creating READ_ME compatility symlinks'; +for file in $(find ${BUILD_TREE} -name 'READ_ME'); do + ln -sf READ_ME $(echo "${file}" | sed -e 's/READ_ME/README/'); + done; + +#------------------------------------------------------------------ +# Prior to 8.9.0, MAKE was used instead of Build +# We'll install a small wrapper for the earlier releases +# Prior to 8.9.0, Only src directory had an obj.* subdirectory +# Create compatibility links (to look like 8.9.0+) +#------------------------------------------------------------------ +echo "...Creating <dir>/${OBJ_DIR}"; +for subdir in $SUBDIRS; do + if [ -d ${BUILD_TREE}/${subdir} ]; then + if [ ! -d ${BUILD_TREE}/${subdir}/Makefiles ]; then + mkdir -p ${BUILD_TREE}/${subdir}/${OBJ_DIR}; + for file in `find ${BUILD_TREE}/${subdir} -type f`; do + cp -a $file ${BUILD_TREE}/${subdir}/${OBJ_DIR}; + done; + fi; + cp -a debian/build/Build ${BUILD_TREE}/${subdir}/; + fi; + done; +# +#------------------------------------------------------------------ +# Kluge the Makefiles to comply with our file locations. +#------------------------------------------------------------------ +echo '...Kluging Makefiles'; +for file in mailstats/Makefile.dist \ + mail.local/Makefile.dist \ + makemap/Makefile.dist \ + praliases/Makefile.dist \ + smrsh/Makefile.dist \ + src/Makefiles/Makefile.Linux \ + ; do + cp -a ${BUILD_TREE}/${file} ${BUILD_TREE}/${file}.save; + # + # Set local variables to allow for quoting... + esq "@sm_incdirs@"; + sm_incdirs=$result; + esq "@sm_mapdef@"; + sm_mapdef=$result; + esq "@sm_envdef@"; + sm_envdef=$result; + esq "@sm_libs@"; + sm_libs=$result; + # + # global + sed \ + -e 's?-I/usr/sww/include??' \ + -e 's?-I/usr/local/include??' \ + -e 's?-L/usr/sww/lib??' \ + -e 's?../src?../../src?g' \ + -e "s?^INCDIRS=\(.*\)\$?INCDIRS=\1 $sm_incdirs?" \ + -e "s?^DBMDEF=.*?DBMDEF=$sm_mapdef?" \ + -e "s?^ENVDEF=\(.*\)\$?ENVDEF=\1 $sm_envdef?" \ + -e "s?^LIBS=.*?LIBS=$sm_libs?" \ + ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; + mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; + # + # compilation/link + sed \ + -e 's?^O=.*?O=@CFLAGS@?' \ + -e 's?^LIBDIRS=.*?LIBDIRS=?' \ + ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; + mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; + + # + # paths, owners, and modes + # Note: EBINDIR deserves a better home, suggestions? + sed \ + -e 's?^BINDIR=.*?BINDIR=${DESTDIR}@sbindir@?' \ + -e 's?^BINMODE=.*?BINMODE=04755?' \ + -e 's?^BINGRP=.*?BINGRP=mail?' \ + -e 's?^BINOWN=.*?BINOWN=root?' \ + -e 's?^HFDIR=.*?HFDIR=${DESTDIR}@sysconfdir@/mail?' \ + -e 's?^STDIR=.*?STDIR=${DESTDIR}@localstatedir@/lib/sendmail?' \ + ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; + mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; + + if [ "${file}" = 'mail.local/Makefile.dist' \ + -o "${file}" = 'smrsh/Makefile.dist' \ + ]; then + sed \ + -e 's?^BINDIR=.*?BINDIR=${DESTDIR}@libexecdir@?' \ + -e 's?^BINMODE=.*?BINMODE=04755?' \ + -e 's?^BINGRP=.*?BINGRP=mail?' \ + -e 's?^BINOWN=.*?BINOWN=root?' \ + ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; + echo 'force-install: install' >> ${BUILD_TREE}/${file}.new; + mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; + + elif [ "${file}" = 'mailstats/Makefile.dist' \ + -o "${file}" = 'makemap/Makefile.dist' \ + -o "${file}" = 'praliases/Makefile.dist' \ + ]; then + sed \ + -e 's?^BINDIR=.*?BINDIR=${DESTDIR}@sbindir@?' \ + -e 's?^BINMODE=.*?BINMODE=0755?' \ + -e 's?^BINGRP=.*?BINGRP=mail?' \ + -e 's?^BINOWN=.*?BINOWN=root?' \ + ${BUILD_TREE}/${file} > ${BUILD_TREE}/${file}.new; + mv ${BUILD_TREE}/${file}.new ${BUILD_TREE}/${file}; + fi; + + # For most directories, replace Makefile with our updated Makefile.dist + if [ "${file}" != 'src/Makefiles/Makefile.Linux' ]; then + cp ${BUILD_TREE}/${file} \ + $(dirname "${BUILD_TREE}/${file}")/${OBJ_DIR}/Makefile; + fi; + done; + +echo '...Done.'; diff --git a/debian/build/version.c b/debian/build/version.c new file mode 100644 index 0000000..f09a9a0 --- /dev/null +++ b/debian/build/version.c @@ -0,0 +1,2 @@ +char Version[] = "8.l4.1"; + diff --git a/debian/cf/Makefile.in b/debian/cf/Makefile.in new file mode 100644 index 0000000..29e946a --- /dev/null +++ b/debian/cf/Makefile.in @@ -0,0 +1,463 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +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)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBIAN = @DEBIAN@ +DEBIAN_DH = @DEBIAN_DH@ +DEB_BUILD_ARCH = @DEB_BUILD_ARCH@ +DEB_BUILD_GNU_CPU = @DEB_BUILD_GNU_CPU@ +DEB_BUILD_GNU_SYSTEM = @DEB_BUILD_GNU_SYSTEM@ +DEB_BUILD_GNU_TYPE = @DEB_BUILD_GNU_TYPE@ +DEB_HOST_ARCH = @DEB_HOST_ARCH@ +DEB_HOST_GNU_CPU = @DEB_HOST_GNU_CPU@ +DEB_HOST_GNU_SYSTEM = @DEB_HOST_GNU_SYSTEM@ +DEB_HOST_GNU_TYPE = @DEB_HOST_GNU_TYPE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SM_CPYRT = @SM_CPYRT@ +SM_DATE = @SM_DATE@ +SM_MAXVERS = @SM_MAXVERS@ +SM_MINVERS = @SM_MINVERS@ +SM_VERS = @SM_VERS@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_version = @ac_version@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +am_version = @am_version@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +buildtree = @buildtree@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sm_auth_lib = @sm_auth_lib@ +sm_badepends = @sm_badepends@ +sm_build_arch = @sm_build_arch@ +sm_custom = @sm_custom@ +sm_custom_s = @sm_custom_s@ +sm_databases = @sm_databases@ +sm_date = @sm_date@ +sm_depends = @sm_depends@ +sm_dist_name = @sm_dist_name@ +sm_dist_vers = @sm_dist_vers@ +sm_editmap_envdef = @sm_editmap_envdef@ +sm_editmap_libs = @sm_editmap_libs@ +sm_enable_auth = @sm_enable_auth@ +sm_enable_bind = @sm_enable_bind@ +sm_enable_hesiod = @sm_enable_hesiod@ +sm_enable_ipv6 = @sm_enable_ipv6@ +sm_enable_ldap = @sm_enable_ldap@ +sm_enable_maillock = @sm_enable_maillock@ +sm_enable_milter = @sm_enable_milter@ +sm_enable_ndbm = @sm_enable_ndbm@ +sm_enable_newdb = @sm_enable_newdb@ +sm_enable_nis = @sm_enable_nis@ +sm_enable_nisplus = @sm_enable_nisplus@ +sm_enable_regex = @sm_enable_regex@ +sm_enable_sfio = @sm_enable_sfio@ +sm_enable_shm = @sm_enable_shm@ +sm_enable_tcpd = @sm_enable_tcpd@ +sm_enable_tls = @sm_enable_tls@ +sm_envdef = @sm_envdef@ +sm_features = @sm_features@ +sm_ffr = @sm_ffr@ +sm_hesiod_parms = @sm_hesiod_parms@ +sm_host_arch = @sm_host_arch@ +sm_incdirs = @sm_incdirs@ +sm_ldap_lib = @sm_ldap_lib@ +sm_libmilter_envdef = @sm_libmilter_envdef@ +sm_libmilter_libs = @sm_libmilter_libs@ +sm_libmilter_version = @sm_libmilter_version@ +sm_libs = @sm_libs@ +sm_libsm_envdef = @sm_libsm_envdef@ +sm_libsm_libs = @sm_libsm_libs@ +sm_libsmdb_envdef = @sm_libsmdb_envdef@ +sm_libsmdb_libs = @sm_libsmdb_libs@ +sm_libsmutil_envdef = @sm_libsmutil_envdef@ +sm_libsmutil_libs = @sm_libsmutil_libs@ +sm_m4_ffr = @sm_m4_ffr@ +sm_mail_local_envdef = @sm_mail_local_envdef@ +sm_mail_local_libs = @sm_mail_local_libs@ +sm_mailstats_envdef = @sm_mailstats_envdef@ +sm_mailstats_libs = @sm_mailstats_libs@ +sm_makemap_envdef = @sm_makemap_envdef@ +sm_makemap_libs = @sm_makemap_libs@ +sm_mapdef = @sm_mapdef@ +sm_newdb_lib = @sm_newdb_lib@ +sm_praliases_envdef = @sm_praliases_envdef@ +sm_praliases_libs = @sm_praliases_libs@ +sm_recommends = @sm_recommends@ +sm_revision = @sm_revision@ +sm_rmail_envdef = @sm_rmail_envdef@ +sm_rmail_libs = @sm_rmail_libs@ +sm_sendmail_envdef = @sm_sendmail_envdef@ +sm_sendmail_libs = @sm_sendmail_libs@ +sm_smrsh_envdef = @sm_smrsh_envdef@ +sm_smrsh_libs = @sm_smrsh_libs@ +sm_suggests = @sm_suggests@ +sm_time = @sm_time@ +sm_utc = @sm_utc@ +sm_vacation_envdef = @sm_vacation_envdef@ +sm_vacation_libs = @sm_vacation_libs@ +sm_version = @sm_version@ +sm_version_beta = @sm_version_beta@ +sm_version_major = @sm_version_major@ +sm_version_math = @sm_version_math@ +sm_version_minor = @sm_version_minor@ +sm_version_r = @sm_version_r@ +sm_version_v = @sm_version_v@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: Makefile,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Rules file for Sendmail @sm_version@@sm_revision@(@sm_version_math@) +# on @sm_dist_name@ @sm_dist_vers@ +# via Debhelper V@DEBIAN_DH@ +# +# Note: the .in file supports Sendmail @SM_MINVERS@ - @SM_MAXVERS@ +# on Debian slink, potato, woody, testing, sid, ... +# but the generated file is customized to the version noted above. +# +# Richard Nelson <cowboy@debian.org> @sm_date@ @sm_time@ (@sm_utc@) +#------------------------------------------------------------------------------ +# +# Shipped data +# +# Installed cf subdirectories +CF_DIRS = cf debian domain feature hack m4 mailer ostype +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cf/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu cf/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-data-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am + +# +# Local customisation... not automake friendly +# +install-data-hook: + $(INSTALL) -d ${DESTDIR}${pkgdatadir}/cf; + cp -a ${top_srcdir}/../${buildtree}/cf/* ${DESTDIR}${pkgdatadir}/cf; + chmod a+x ${DESTDIR}${pkgdatadir}/cf/sh/makeinfo.sh; + $(RM) ${DESTDIR}${pkgdatadir}/cf/README; + $(RM) ${DESTDIR}${pkgdatadir}/cf/sendmail.schema; + $(RM) ${DESTDIR}${pkgdatadir}/cf/cf/Build; + $(RM) ${DESTDIR}${pkgdatadir}/cf/cf/Makefile; + $(RM) ${DESTDIR}${pkgdatadir}/cf/cf/*.cf; + for dir in ${CF_DIRS}; do \ + $(INSTALL) -d ${DESTDIR}${pkgdatadir}/cf/$$dir; \ + find $$dir -type f -name '*.mc' -o -name '*.m4' \ + | xargs -ri \ + $(INSTALL_DATA) '{}' ${DESTDIR}${pkgdatadir}/cf/'{}'; \ + done; + if [ -f ${top_srcdir}/../${buildtree}/contrib/domainmap.m4 ]; then \ + $(INSTALL_DATA) ${top_srcdir}/../${buildtree}/contrib/domainmap.m4 \ + ${DESTDIR}${pkgdatadir}/cf/feature; \ + fi; + if [ -f ${top_srcdir}/../${buildtree}/contrib/dnsblaccess.m4 ]; then \ + $(INSTALL_DATA) ${top_srcdir}/../${buildtree}/contrib/dnsblaccess.m4 \ + ${DESTDIR}${pkgdatadir}/cf/hack; \ + fi; +# +# Debian targets, phase out (this needs to be treated as -arch, not -indep) +# +.PHONY: build-indep build-arch +.PHONY: install-indep install-arch +build-indep: +build-arch: +install-indep: install +install-arch: +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/cf/debian/autoconf.m4.in b/debian/cf/debian/autoconf.m4.in new file mode 100644 index 0000000..70423d3 --- /dev/null +++ b/debian/cf/debian/autoconf.m4.in @@ -0,0 +1,60 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: autoconf.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# m4 autoconf config file for building Sendmail @sm_version@@sm_revision@ +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +VERSIONID(`$Id: autoconf.m4, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Export (from autoconf to m4) some items of dubious value +dnl #--------------------------------------------------------------------- +define(`SM_VERS', `@SM_VERS@')dnl +define(`SM_DATE', `@SM_DATE@')dnl +define(`SM_MINVERS', `@SM_MINVERS@')dnl +define(`SM_MAXVERS', `@SM_MAXVERS@')dnl +define(`SM_CPYRT', `@SM_CPYRT@')dnl +define(`sm_date', `@sm_date@')dnl +define(`sm_time', `@sm_time@')dnl +define(`sm_utc', `@sm_utc@')dnl +define(`sm_version', `@sm_version@')dnl +define(`sm_revision', `@sm_revision@')dnl +define(`sm_version_v', `@sm_version_v@')dnl +define(`sm_version_r', `@sm_version_r@')dnl +define(`sm_version_major', `@sm_version_major@')dnl +define(`sm_version_minor', `@sm_version_minor@')dnl +define(`sm_version_beta', `@sm_version_beta@')dnl +define(`sm_version_math', `@sm_version_math@')dnl +define(`sm_enable_regex', `@sm_enable_regex@')dnl +define(`sm_enable_ndbm', `@sm_enable_ndbm@')dnl +define(`sm_enable_newdb', `@sm_enable_newdb@')dnl +define(`sm_newdb_lib', `@sm_newdb_lib@')dnl +define(`sm_enable_nis', `@sm_enable_nis@')dnl +define(`sm_enable_nisplus', `@sm_enable_nisplus@')dnl +define(`sm_enable_ldap', `@sm_enable_ldap@')dnl +define(`sm_ldap_lib', `@sm_ldap_lib@')dnl +define(`sm_enable_hesiod', `@sm_enable_hesiod@')dnl +define(`sm_hesiod_parms', `@sm_hesiod_parms@')dnl +define(`sm_enable_tcpd', `@sm_enable_tcpd@')dnl +define(`sm_enable_ipv6', `@sm_enable_ipv6@')dnl +define(`sm_enable_maillock',`@sm_enable_maillock@')dnl +define(`sm_enable_milter', `@sm_enable_milter@')dnl +define(`sm_enable_sfio', `@sm_enable_sfio@')dnl +define(`sm_enable_auth', `@sm_enable_auth@')dnl +define(`sm_auth_lib', `@sm_auth_lib@')dnl +define(`sm_enable_tls', `@sm_enable_tls@')dnl +define(`sm_enable_shm', `@sm_enable_shm@')dnl +define(`sm_ffr', `@sm_ffr@')dnl +define(`sm_m4_ffr', `@sm_m4_ffr@')dnl +define(`sm_enable_dev', `@sm_enable_dev@')dnl +define(`sm_enable_doc', `@sm_enable_doc@')dnl diff --git a/debian/cf/debian/sendmail.mc.in b/debian/cf/debian/sendmail.mc.in new file mode 100644 index 0000000..f10f29e --- /dev/null +++ b/debian/cf/debian/sendmail.mc.in @@ -0,0 +1,104 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: debproto.mc,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# sendmail.mc prototype config file for building Sendmail @sm_version@ +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +# This file is used to configure Sendmail for use with Debian systems. +# +# If you modify this file, you will have to regenerate /etc/mail/sendmail.cf +# by running this file through the m4 preprocessor via one of the following: +# * `sendmailconfig` +# * `make` +# * `m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf` +# The first two options are preferred as they will also update other files +# that depend upon the contents of this file. +# +# The best documentation for this .mc file is: +# /usr/share/doc/sendmail-doc/cf.README.gz +# +#----------------------------------------------------------------------------- +divert(0)dnl +# +# Copyright (c) 1998-2005 Richard Nelson. All Rights Reserved. +# +# This file is used to configure Sendmail for use with Debian systems. +# +define(`_USE_ETC_MAIL_')dnl +include(`@datadir@/sendmail/cf/m4/cf.m4')dnl +VERSIONID(`$Id: sendmail.mc, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +OSTYPE(`debian')dnl +DOMAIN(`debian-mta')dnl +dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE +dnl undefine(`confHOST_STATUS_DIRECTORY')dnl #DAEMON_HOSTSTATS= +dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE +dnl # +dnl # General defines +dnl # +dnl # SAFE_FILE_ENV: [undefined] If set, sendmail will do a chroot() +dnl # into this directory before writing files. +dnl # If *all* your user accounts are under /home then use that +dnl # instead - it will prevent any writes outside of /home ! +dnl # define(`confSAFE_FILE_ENV', `')dnl +dnl # +dnl # Daemon options - restrict to servicing LOCALHOST ONLY !!! +dnl # Remove `, Addr=' clauses to receive from any interface +dnl # If you want to support IPv6, switch the commented/uncommentd lines +dnl # +FEATURE(`no_default_msa')dnl +dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl +DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl +dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, Addr=::1')dnl +DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, Addr=127.0.0.1')dnl +dnl # +dnl # Be somewhat anal in what we allow +define(`confPRIVACY_FLAGS',dnl +`needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings')dnl +dnl # +dnl # Define connection throttling and window length +define(`confCONNECTION_RATE_THROTTLE', `15')dnl +define(`confCONNECTION_RATE_WINDOW_SIZE',`10m')dnl +dnl # +dnl # Features +dnl # +dnl # use /etc/mail/local-host-names +FEATURE(`use_cw_file')dnl +dnl # +dnl # The access db is the basis for most of sendmail's checking +FEATURE(`access_db', , `skip')dnl +dnl # +dnl # The greet_pause feature stops some automail bots - but check the +dnl # provided access db for details on excluding localhosts... +FEATURE(`greet_pause', `1000')dnl 1 seconds +dnl # +dnl # Delay_checks allows sender<->recipient checking +FEATURE(`delay_checks', `friend', `n')dnl +dnl # +dnl # If we get too many bad recipients, slow things down... +define(`confBAD_RCPT_THROTTLE',`3')dnl +dnl # +dnl # Stop connections that overflow our concurrent and time connection rates +FEATURE(`conncontrol', `nodelay', `terminate')dnl +FEATURE(`ratecontrol', `nodelay', `terminate')dnl +dnl # +dnl # If you're on a dialup link, you should enable this - so sendmail +dnl # will not bring up the link (it will queue mail for later) +dnl define(`confCON_EXPENSIVE',`True')dnl +dnl # +dnl # Dialup/LAN connection overrides +dnl # +include(`/etc/mail/m4/dialup.m4')dnl +include(`/etc/mail/m4/provider.m4')dnl +dnl # +dnl # Default Mailer setup +MAILER_DEFINITIONS +MAILER(`local')dnl +MAILER(`smtp')dnl + diff --git a/debian/cf/debian/submit.mc.in b/debian/cf/debian/submit.mc.in new file mode 100644 index 0000000..572b638 --- /dev/null +++ b/debian/cf/debian/submit.mc.in @@ -0,0 +1,56 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: submit.mc,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# submit.mc prototype config file for building Sendmail @sm_version@ +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +# This file is used to configure Sendmail for use with Debian systems. +# +# If you modify this file, you will have to regenerate /etc/mail/submit.cf +# by running this file through the m4 preprocessor via one of the following: +# * `sendmailconfig` +# * `make` +# * `m4 /etc/mail/submit.mc > /etc/mail/submit.cf` +# The first two options are preferred as they will also update other files +# that depend upon the contents of this file. +# +# The best documentation for this .mc file is: +# /usr/share/doc/sendmail-doc/cf.README.gz +# +#----------------------------------------------------------------------------- +divert(0)dnl +# +# Copyright (c) 2000-2002 Richard Nelson. All Rights Reserved. +# +# This file is used to configure Sendmail for use with Debian systems. +# +define(`_USE_ETC_MAIL_')dnl +include(`@datadir@/sendmail/cf/m4/cf.m4')dnl +VERSIONID(`$Id: submit.mc, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +OSTYPE(`debian')dnl +DOMAIN(`debian-msp')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Masquerading information, if needed, should go here +dnl # You likely will not need this, as the MTA will do it +dnl #--------------------------------------------------------------------- +dnl MASQUERADE_AS()dnl +dnl FEATURE(`masquerade_envelope')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # The real reason we're here: the FEATURE(msp) +dnl #--------------------------------------------------------------------- +FEATURE(`msp', `[127.0.0.1]', `MSA')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Some minor cleanup from FEATURE(msp) +dnl #--------------------------------------------------------------------- +dnl # +dnl #--------------------------------------------------------------------- diff --git a/debian/cf/domain/debian-msp.m4.in b/debian/cf/domain/debian-msp.m4.in new file mode 100644 index 0000000..500314d --- /dev/null +++ b/debian/cf/domain/debian-msp.m4.in @@ -0,0 +1,73 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: debian-msp.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# domain(debian-msp) config file for building Sendmail @sm_version@@sm_revision@ +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(`sm_version', `dnl', +`include(`@datadir@/sendmail/cf/debian/autoconf.m4')dnl') +dnl # +VERSIONID(`$Id: debian-msp.m4, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +define(`DEBIAN_MSP')dnl +define(`confCF_VERSION', `Submit')dnl +dnl # +dnl # changes made herein *must* be reflected in parse_mc,update_db,debian.m4 +dnl # +define(`MSP_QUEUE_DIR', `@localstatedir@/spool/mqueue-client')dnl +define(`STATUS_FILE', `@localstatedir@/lib/sendmail/sm-client.st')dnl +dnl # +dnl # Since MSP only delivers to MTA, persistant status isn't needed +define(`confHOST_STATUS_DIRECTORY', `')dnl +dnl # +dnl # For FHS, we use a subdirectory in /var/run (multiple files) +dnl # For permissions, we use separate MSP/MTA subdirectories +define(`confPID_FILE', `@localstatedir@/run/sendmail/msp/sendmail.pid')dnl +define(`confCONTROL_SOCKET_NAME', + `@localstatedir@/run/sendmail/msp/smcontrol')dnl +dnl # +dnl # flags +define(`confPROCESS_TITLE_PREFIX', `MSP')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 +dnl # +dnl # Provide some 'more reasonable' timeout values +dnl # See SASL/TLS sections below for more timeout values +dnl # +define(`confTO_ICONNECT', `2s')dnl # rfc min= , def=5m +define(`confTO_MAIL', `2m')dnl # rfc min=5m, def=10m, too long +define(`confTO_DATAINIT', `2m')dnl # rfc min=2m, def=5m +define(`confTO_RSET', `1m')dnl # rfc min= , def=5m +define(`confTO_QUIT', `2m')dnl # rfc min= , def=2m +define(`confTO_COMMAND', `5m')dnl # rfc min=5m, def=1h +define(`confTO_IDENT', `5s')dnl # , def=5s, 0=skip +define(`confTO_HOSTSTATUS',`0')dnl # , def=30m +dnl # +dnl # by default, disable Message Submission Agent (8.10.0+) +ifelse(eval(sm_version_math >= 526848), `1',dnl +`FEATURE(`no_default_msa')') +dnl # +dnl # Mail Submission Program uid/gid +define(`confRUN_AS_USER', `smmsp')dnl +define(`confTRUSTED_USER', confRUN_AS_USER)dnl +dnl # +dnl # Optional items (should be a subset site.config.m4 used for build) +dnl # to prevent sendmail error messages +dnl # diff --git a/debian/cf/domain/debian-mta.m4.in b/debian/cf/domain/debian-mta.m4.in new file mode 100644 index 0000000..0aaff70 --- /dev/null +++ b/debian/cf/domain/debian-mta.m4.in @@ -0,0 +1,112 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: debian-mta.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# domain(debian-mta) config file for building Sendmail @sm_version@@sm_revision@ +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(`sm_version', `dnl' , +`include(`@datadir@/sendmail/cf/debian/autoconf.m4')dnl') +dnl # +VERSIONID(`$Id: debian-mta.m4, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +define(`DEBIAN_MTA')dnl +dnl # +dnl # changes made herein *must* be reflected in parse_mc,update_db,debian.m4 +dnl # +define(`STATUS_FILE', `@localstatedir@/lib/sendmail/sendmail.st')dnl +define(`confHOST_STATUS_DIRECTORY', + `@localstatedir@/lib/sendmail/host_status')dnl +dnl # +dnl # For FHS, we use a subdirectory in /var/run (multiple files) +dnl # For permissions, we use separate MSP/MTA subdirectories +define(`confPID_FILE', `@localstatedir@/run/sendmail/mta/sendmail.pid')dnl +define(`confCONTROL_SOCKET_NAME', + `@localstatedir@/run/sendmail/mta/smcontrol')dnl +dnl # +dnl # flags +define(`confPROCESS_TITLE_PREFIX', `MTA')dnl +define(`confMAX_DAEMON_CHILDREN', `0')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', `0600')dnl +define(`confTEMP_FILE_MODE', `0600')dnl +dnl # +dnl # Provide some 'more reasonable' timeout values +dnl # See SASL/TLS sections below for more timeout values +dnl # +define(`confTO_ICONNECT', `2m')dnl # rfc min= , def=5m +define(`confTO_MAIL', `2m')dnl # rfc min=5m, def=10m, too long +define(`confTO_DATAINIT', `2m')dnl # rfc min=2m, def=5m +define(`confTO_RSET', `1m')dnl # rfc min= , def=5m +define(`confTO_QUIT', `2m')dnl # rfc min= , def=2m +define(`confTO_COMMAND', `5m')dnl # rfc min=5m, def=1h +define(`confTO_IDENT', `5s')dnl # , def=5s, 0=skip +dnl # +dnl RFC 2821 recommends a higher value for max-hop than the default(25) +define(`confMAX_HOP', `100')dnl +dnl # +dnl # Debian users have group writable directories/files by default (8.9.0+) +ifelse(eval(sm_version_math >= 526592), `1',dnl +`define(`confDONT_BLAME_SENDMAIL',dnl + defn(`confDONT_BLAME_SENDMAIL')`,AssumeSafeChown,ForwardFileInGroupWritableDirPath,GroupWritableForwardFileSafe,GroupWritableIncludeFileSafe,IncludeFileInGroupWritableDirPath')dnl' +)dnl +dnl # +dnl # Don't warn for non-existant forward files (8.10.0+) +ifelse(eval(sm_version_math >= 526848), `1',dnl +`define(`confDONT_BLAME_SENDMAIL',dnl + defn(`confDONT_BLAME_SENDMAIL')`,DontWarnForwardFileInUnsafeDirPath,TrustStickyBit,NonRootSafeAddr')dnl' +)dnl +dnl # +dnl # Allow group-writable include files (8.12.0+) +ifelse(eval(sm_version_math >= 527360), `1',dnl +`define(`confDONT_BLAME_SENDMAIL',dnl + defn(`confDONT_BLAME_SENDMAIL')`,GroupWritableIncludeFile,GroupReadableaDefaultAuthInfoFile')dnl' +)dnl +dnl # +dnl # by default, disable Message Submission Agent (8.10.0+) +dnl # except for 8.12.0+, where its needed for MSA ! +ifelse(eval(sm_version_math >= 526848), `1',dnl +`ifelse(eval(sm_version_math < 527360), `1',dnl +`FEATURE(`no_default_msa')',`dnl')') +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') +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 +dnl # +define(`confPRIVACY_FLAGS', `restrictqrun') +ifelse(eval(sm_version_math >= 527360), `1',dnl +`define(`confPRIVACY_FLAGS',dnl + defn(`confPRIVACY_FLAGS')`,restrictexpand')dnl') +dnl # +dnl # Define trusted user to be the new mta uid (smmta) +dnl # +ifdef(`confTRUSTED_USER',,`define(`confTRUSTED_USER',`smmta')dnl') +dnl # +dnl # Provide a more reasonable default for number of queue-runners +dnl # because many/most? people will not discover this themselves +dnl # and the sendmail default is one! +dnl # +define(`confMAX_RUNNERS_PER_QUEUE', `5')dnl +dnl # +dnl # Optional items (should be a subset site.config.m4 used for build) +dnl # to prevent sendmail error messages +dnl # diff --git a/debian/cf/feature/rhsbl.m4 b/debian/cf/feature/rhsbl.m4 new file mode 100644 index 0000000..c81c45c --- /dev/null +++ b/debian/cf/feature/rhsbl.m4 @@ -0,0 +1,41 @@ +divert(-1) +# +# Copyright (c) 2002 Derek J. Balling +# All rights reserved. +# +# Permission to use granted for all purposes. If modifications are made +# they are requested to be sent to <dredd@megacity.org> for inclusion in future +# versions +# +# Allows (hopefully) for checking of access.db whitelisting now. This ONLY +# works on sendmail-8.12.x ... use on any other version may require tinkering +# by you the downloader. +# +# Incorporates many changes by Sergey S. Mokryshev <mokr@mokr.net> +# +# + +divert(0) +ifdef(`_RHSBL_R_',`dnl',`dnl +VERSIONID(`$Id: rhsbl.m4,v 1.4 2002/06/01 14:05:06 dredd Exp $') +define(`_RHSBL_R_',`') +ifdef(`_DNSBL_R_',`dnl',`dnl +LOCAL_CONFIG +# map for DNS based blacklist lookups based on the sender RHS +Kdnsbl host -T<TMP>')') +divert(-1) +define(`_RHSBL_SRV_', `_ARG_')dnl +define(`_RHSBL_MSG_', `ifelse(len(X`'_ARG2_),`1',`"550 Mail from " $`'&{RHS} " refused by blackhole site '_RHSBL_SRV_`"',`_ARG2_')')dnl +define(`_RHSBL_MSG_TMP_', `ifelse(_ARG3_,`t',`"451 Temporary lookup failure of " $`'&{RHS} " at '_RHSBL_SRV_`"',`_ARG3_')')dnl +divert(8) +# DNS based RHS spam list _RHSBL_SRV_ +R$+ $: <@> $>CanonAddr $&f +R<@> $*<@$+.> $: <@> <@$2.> $| $>SearchList <+ rhs> $| <F:$1@$2> <D:$2> <> +R<@> $* $| <$={Accept}> $: OKSOFAR +R<@> $*<@$+.> $| $* $: <?> $(dnsbl $2._RHSBL_SRV_. $: OK $) $(macro {RHS} $@ $2 $) +R<@> $* $: OKSOFAR +R<?> OK $: OKSOFAR +ifelse(len(X`'_ARG3_),`1', +`R<?>$+<TMP> $: TMPOK', +`R<?>$+<TMP> $#error $@ 4.7.1 $: _RHSBL_MSG_TMP_') +R<?>$+ $#error $@ 5.7.1 $: _RHSBL_MSG_ diff --git a/debian/cf/feature/vnet.m4 b/debian/cf/feature/vnet.m4 new file mode 100644 index 0000000..aea804b --- /dev/null +++ b/debian/cf/feature/vnet.m4 @@ -0,0 +1,74 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: ./vnet.m4,v 8.12.0 2001/09/24 12:00:00 cowboy Exp $ +# +# Copyright (c) 2001-2004 Richard Nelson. All Rights Reserved. +# +# feature(vnet) config file for building Sendmail +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +dnl +dnl +dnl +LOCAL_CONFIG +###################################################################### +### vnet: support .rscs domain and XAGENT +### +###################################################################### +# +# Support routing of .rscs nodes via XAGENT +# +# Define vnet/rscs node hlq +CAvnet.ibm.com vnet rscs ipnet +# +# Note: you'll have to define your XAGENT node: +#DAlexvmk.lexington.ibm.com +###################################################################### +dnl +dnl +dnl +LOCAL_RULE_3 +###################################################################### +### vnet: support .rscs domain, XAGENT, and Lotus Notes +### +###################################################################### +# +# Support Lotus Notes and VM TCP/IP MTAs +# +# Remove stupid route addressing (%hack) added by VM TCP/IP +R$* % ibmus.rscs < @ $+> $* $: $1 < @ us.ibm.com > $3 # Deprecated +R$* % ibmca.rscs < @ $+> $* $: $1 < @ ca.ibm.com > $3 # Deprecated +R$* % ibmuk.rscs < @ $+> $* $: $1 < @ uk.ibm.com > $3 # Deprecated +R$* % $-.rscs < @ $+> $* $: $1 < @ $2.rscs > $4 # Deprecated +# Now, rewrite those address to user@<node>.vnet +R$* < @ $-.$=A > $* $: $1 < @ $2.vnet . > +# Now, try the domaintable yet again... +#R$* < @ $-.vnet > $* $: $1 < @ $(domaintable $2.vnet $) > $3 +# Finally, allow an override on simply the rscs domain... +#R$* < @ $-.vnet > $* $: $1 < @ $2.$(domaintable vnet $) > $3 +###################################################################### +dnl +dnl +dnl +LOCAL_NET_CONFIG +###################################################################### +### vnet: Handle .rscs domain, deliver to *.ibm.com, etc... +### +###################################################################### +# Skip any local addresses +# (or we'll get a "mail loops back to itself" error +R$* < @ $=w . > $* $@ $1 < @ $2 . > $3 regular local name +R$* < @ $=w > $* $@ $1 < @ $2 . > $3 regular local name + +# Recipients of the form user@node.{vnet,rscs,ipnet} get rewritten to +# user@node.vnet, the message itself is forwarded to +# the VM TCP/IP to RSCS gateway node specified in $A. +R$* < @ $- . vnet . > $* $#relay $@ $A $: $1 < @$2.VNET. > $3 + +# Recipients inside IBM--transfer the mail directly. +R$* < @ $+.ibm.com > $* $#relay $@ $2.ibm.com $: $1 < @$2.ibm.com > $3 +R$* < @ $+.ibm.com. > $* $#relay $@ $2.ibm.com $: $1 < @$2.ibm.com > $3 +###################################################################### +LOCAL_CONFIG diff --git a/debian/cf/hack/debian_auth.m4.in b/debian/cf/hack/debian_auth.m4.in new file mode 100644 index 0000000..917c6b5 --- /dev/null +++ b/debian/cf/hack/debian_auth.m4.in @@ -0,0 +1,47 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: debian_auth.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# debian_trustauth.m4 m4 file for +# * supporting MSP->MTA and MTA->MTA authentication +# * supporting the auth= parameter on the mail from: command. +# +# This file is an extremely simple example that lets *ALL* trusted users +# sendmail, daemon, root, uucp, etc. proxy for any user. +# +# If you've a better idea, please let me know +# +#----------------------------------------------------------------------------- +divert(0)dnl +VERSIONID(`$Id: debian_auth.m4,v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +dnl # +dnl # MTA as Client authentication - only if authinfo/access_db *NOT* used... +define(`confDEF_AUTH_INFO', `MAIL_SETTINGS_DIR`'default-auth-info')dnl +dnl # +dnl # add (fake) uid 'sendmail' to trusted users - it is used as the id +dnl # for MSP->MTA, and MTA->MTA proxying. +ifdef(`confTRUSTED_USERS', + `define(`confTRUSTED_USERS', + defn(`confTRUSTED_USERS')`,sendmail')', + `define(`confTRUSTED_USERS', `sendmail')')dnl +dnl # +dnl # Define local rulesets for trust_auth +LOCAL_RULESETS +# +#----------------------------------------------------------------------------- +# Local_trust_auth: Define who is able to authenticate for whom... +# The sendmail default is to allow *IFF* authen == author +# This ruleset also allows trusted users to authenicate as anyone - needed +# for MSP->MTA and MTA->MTA forwarding of mail from: <...> auth=... +SLocal_trust_auth +R$* $: $&{auth_authen} Put authentication id in the workspace +ifdef(`DEBIAN_DEBUG',dnl +`R$* $: $(log authtype:$&{auth_type} $) $1 +R$* $: $(log authauthen:$&{auth_authen} $) $1 +R$* $: $(log authauthor:$&{auth_author} $) $1') +R$=t $@ $#ok Trusted users... Allow trusted users to auth= as anyone +#----------------------------------------------------------------------------- diff --git a/debian/cf/hack/msp_nullclient.m4 b/debian/cf/hack/msp_nullclient.m4 new file mode 100644 index 0000000..db9f8cc --- /dev/null +++ b/debian/cf/hack/msp_nullclient.m4 @@ -0,0 +1,95 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: ./msp_nullclient.m4,v 8.12.0 2001/05/23 14:30:00 cowboy Exp $ +# +# Copyright (c) 2001-2001 Richard Nelson. All Rights Reserved. +# +# msp_nullclient.m4 m4 file for supporting a nullclient in the MSP +# environment. That is, change the feature(msp) to feature(msp_nullclient) +# in /etc/mail/submit.mc. An MTA listener is now optional, and you can +# run with only MSP mode (setgid mail). +# +# This file is blatantly cut&pasted from nullclient.m4 and msp.m4 !!! +# +# If you've a better idea, please let me know +# +#----------------------------------------------------------------------------- +# +# Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers. +# All rights reserved. +# Copyright (c) 1983 Eric P. Allman. All rights reserved. +# Copyright (c) 1988, 1993 +# The Regents of the University of California. All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# +ifelse(defn(`_ARG_'), `', `errprint(`Hack "msp_nullclient" requires argument')', + `define(`_NULL_CLIENT_', _ARG_)') + +# +# This is used only for relaying mail from a client to a hub when +# that client does absolutely nothing else -- i.e., it is a "null +# mailer". In this sense, it acts like the "R" option in Sun +# sendmail. +# + +divert(0)dnl +VERSIONID(`$Id: msp_nullclient.m4,v 8.12.0 2001/05/23 14:30:00 cowboy Exp $') +divert(-1)dnl + +dnl # +dnl # This *MUST* be used within the context of MSP +ifdef(`DEBIAN_MSP', `dnl', `DOMAIN(`debian-msp')') +dnl # +dnl # Restrict listening to localhost (to increase security) +ifelse(defn(`_DPO_'), `', +`DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=E')dnl') + +dnl #-------------------- Now the Nullclient carp --------------------------- +undefine(`ALIAS_FILE') +define(`MAIL_HUB', _NULL_CLIENT_) +define(`SMART_HOST', _NULL_CLIENT_) +define(`confFORWARD_PATH', `') +ifdef(`confFROM_HEADER',, `define(`confFROM_HEADER', `<$g>')') +dnl #-------------------- Now the MSP carp ---------------------------------- +ifdef(`STATUS_FILE', +`define(`_F_', +`define(`_b_', index(STATUS_FILE, `sendmail.st'))ifelse(_b_, `-1', `STATUS_FILE', `substr(STATUS_FILE, 0, _b_)sm-client.st')') +define(`STATUS_FILE', _F_) +undefine(`_b_') undefine(`_F_')', +`define(`STATUS_FILE', `/var/run/sm-client.st')') +define(`confUSE_MSP', `True')dnl +define(`confFORWARD_PATH', `')dnl +define(`confPRIVACY_FLAGS', `goaway,noetrn')dnl +dnl --------------------------------------------- +dnl run as this user (even if called by root) +define(`confRUN_AS_USER', `smmsp')dnl +define(`confTRUSTED_USER', `confRUN_AS_USER')dnl +dnl --------------------------------------------- +dnl This queue directory must have the same group +dnl as sendmail and it must be group-writable. +dnl notice: do not test for QUEUE_DIR, it is set in some ostype/*.m4 files +ifdef(`MSP_QUEUE_DIR', +`define(`QUEUE_DIR', `MSP_QUEUE_DIR')', +`define(`QUEUE_DIR', `/var/spool/clientmqueue')')dnl +dnl --------------------------------------------- +ifdef(`confPID_FILE', `dnl', +`define(`confPID_FILE', QUEUE_DIR`/sm-client.pid')') +define(`confQUEUE_FILE_MODE', `0660')dnl +FEATURE(`no_default_msa')dnl +ifelse(defn(`_DPO_'), `', +`DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=E')dnl') +dnl #---------------------- Debian MSP fixup ------------------------------- +dnl define(`confHOST_STATUS_DIRECTORY', `/var/lib/sendmail/host_status')dnl +define(`confRUN_AS_USER', `mail')dnl +define(`confTRUSTED_USER', `confRUN_AS_USER')dnl +dnl #---------------------- back to nullclient carp ------------------------ +define(`_DEF_LOCAL_MAILER_FLAGS', `lsDFM5q') +MASQUERADE_AS(_NULL_CLIENT_) +FEATURE(`allmasquerade') +FEATURE(`masquerade_envelope') +MAILER(`local') +MAILER(`smtp') diff --git a/debian/cf/hack/nodns.m4 b/debian/cf/hack/nodns.m4 new file mode 100644 index 0000000..1f3f71e --- /dev/null +++ b/debian/cf/hack/nodns.m4 @@ -0,0 +1,17 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: ./nodns.m4,v 8.12.0 2001/08/24 12:00:00 cowboy Exp $ +# +# Copyright (c) 1999-2001 Richard Nelson. All Rights Reserved. +# +# hack/nodns.m4 m4 file for omitting DNS queries +# +# If you've a better idea, please let me know +# +#----------------------------------------------------------------------------- +divert(0)dnl +VERSIONID(`$Id: nodns.m4,v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +undefine(`confBIND_OPTS')dnl +define(`confSERVICE_SWITCH_FILE', `/etc/mail/service.switch-nodns')dnl +define(`confDONT_PROBE_INTERFACES', `True')dnl +FEATURE(nocanonify)dnl diff --git a/debian/cf/hack/spamtrap.m4 b/debian/cf/hack/spamtrap.m4 new file mode 100644 index 0000000..9acd2c3 --- /dev/null +++ b/debian/cf/hack/spamtrap.m4 @@ -0,0 +1,62 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: ./spamtrap.m4,v 8.12.0 2001/09/24 12:00:00 cowboy Exp $ +# +# hack(spamtrap) config file for building Sendmail +# +# Courtesy of jeff@sdsc.edu (Jeff Makey) +# via c.m.s posting Sat, 8 Sep 2001 07:44:26 +0000 (UTC) +# +# Spamtrap addresses go into the access file like this: +# +# To:spamtrap@pandora.orbl.org POISON +# To:Friend@public.com POISON +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +LOCAL_CONFIG +# provide access to macros as a map +Kmacro macro + +LOCAL_RULESETS +###################################################################### +### spamtrap: handle spamtrap(POISON) users +### +###################################################################### +# +# This is not only redundant, but fails with feature(`delay_checks') +# +#SLocal_check_mail +# Clear the "poison recipient" indicator macro for this message. +#R$* $: $(macro {PoisonRecipient} $) $1 + +SLocal_check_rcpt +# +# Spamtrap addresses go into the access file like this: +# To:spamtrap@pandora.orbl.org POISON +# +# Certain recipients are "poison" and cause the +# message to be rejected for all recipients. +R$* $: $1 $| $1 create workspace to right of $| +R$* $| $* <$+> $* $1 $| $3 focus on part in angle brackets +R$* $| $+ $: $1 $| $>SearchList <!To> $| <E:$2> <> +R$* $| <POISON> $: $1 $| $(macro {PoisonRecipient} $@ POISON $) +R$* $| $* $: $1 delete workspace + +Scheck_eoh +R$* $: $&{PoisonRecipient} +RPOISON $#error $@ 5.7.1 $: 550 Mail sent to spam lists is not accepted here + +# +# With a "To:Friend@public.com POISON" entry in the access file the +# following ruleset will block certain types of spam too: +# +# Certain To headers are sure-fire spam signatures. +HTo: $>CheckTo +SCheckTo +R$+ , $+ $@ $1 , $2 do not try to verify complex addresses +R$* $: $1 $| $>SearchList <!To> $| <E:$1> <> +R$* $| <POISON> $#error $@ 5.7.1 $: 550 Mail sent by spamware is not accepted here +R$* $| $* $: $1 delete lookup result + diff --git a/debian/cf/hack/virthost_by_ip.m4.in b/debian/cf/hack/virthost_by_ip.m4.in new file mode 100644 index 0000000..922751a --- /dev/null +++ b/debian/cf/hack/virthost_by_ip.m4.in @@ -0,0 +1,77 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: virthost_by_ip.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# hack(virthost_by_ip) config file for building Sendmail @sm_version@@sm_revision@ +# Note: Also check op.{ps,txt} for the 'b' modifier to daemon_options - it +# extends ip based virtual hosting. +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(`sm_version', `dnl', +`include(`@datadir@/sendmail/cf/debian/autoconf.m4')dnl') +dnl # +VERSIONID(`$Id: virthost_by_ip.m4, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Virtual hosting extensions - Login (greeting message) +dnl #--------------------------------------------------------------------- +define(`confSMTP_LOGIN_MSG', `$?{if_name}${if_name}$|$j$. Sendmail $v/$Z; $b; (No UCE/UBE) $?{client_addr}logging access from: ${client_name}(${client_resolve})-$_$.')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Virtual hosting extensions - Received-by headers (8.12.0 style) +dnl #--------------------------------------------------------------------- +dnl # 8.7.0+ +ifdef(`_REC_HDR_', `dnl', +`define(`_REC_HDR_', `$?sfrom $s $.$?_($?s$|from $.$_)')dnl' +`define(`_REC_END_', `for $u; $|; + $.$b')dnl' +) +dnl # AUTH(SASL) 8.10.0+ +ifdef(`_REC_AUTH_', `dnl', +`define(`_REC_AUTH_', `$.$?{auth_type}(authenticated')dnl' +`define(`_REC_FULL_AUTH_', `$.$?{auth_type}(user=${auth_authen} $?{auth_author}author=${auth_author} $.mech=${auth_type}')dnl' +) +dnl # TLS(SSL) 8.11.0+ +ifdef(`_REC_BY_', `dnl', +`define(`_REC_BY_', `$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}')dnl' +`define(`_REC_TLS_', `(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u')dnl' +) +dnl # Now, override default settings for virtual hosting +define(`_REC_BY_', `$.by $?{if_name}${if_name}$|$j$. ($v/$Z)$?r with $r$. id $i$?{tls_version}')dnl +define(`confRECEIVED_HEADER', `_REC_HDR_ + _REC_FULL_AUTH_$?{auth_ssf} bits=${auth_ssf}$.) + _REC_BY_ + _REC_TLS_ + _REC_END_')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Virtual hosting extensions - ClientPortOptions (modifier=h) +dnl # -- Use name of interface for HELO command +dnl #--------------------------------------------------------------------- +ifelse(eval(sm_version_math >= 526848), `1',dnl +`ifelse(defn(`_CPO_'), `dnl', +`CLIENT_OPTIONS(`Modifier=h')dnl')dnl') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Virtual hosting extensions - DaemonPortOptions (modifier=b) +dnl # -- Bind to interface mail was received on +dnl # I can't do this for you, because each use of DAEMON_OPTIONS will +dnl # create a new listener ! +dnl #--------------------------------------------------------------------- +dnl ifelse(eval(sm_version_math >= 526848), `1',dnl +dnl `ifelse(defn(`_DPO_'), `dnl', +dnl `DAEMON_OPTIONS(`Modifier=b')dnl')dnl') + diff --git a/debian/cf/mailer/ssh.m4 b/debian/cf/mailer/ssh.m4 new file mode 100644 index 0000000..25cc475 --- /dev/null +++ b/debian/cf/mailer/ssh.m4 @@ -0,0 +1,42 @@ +PUSHDIVERT(-1) +dnl +dnl By using this file, you agree to the terms and conditions set +dnl forth in the LICENSE file which can be found at the top level of +dnl the sendmail distribution. +dnl +dnl Original version contributed by Andrzej Filip. +dnl +dnl $Log: ssh.m4,v $ +dnl Revision 8.1 2004/03/27 12:54:53 anfi +dnl *** empty log message *** +dnl +VERSIONID(`$Id: ssh.m4,v 8.1 2004/03/27 12:54:53 anfi Exp $') + +ifdef(`SSH_MAILER_PATH',, + `ifdef(`SSH_PATH', + `define(`SSH_MAILER_PATH', SSH_PATH)', + `define(`SSH_MAILER_PATH', `/usr/bin/ssh')')') +ifdef(`SSH_REMOTE_COMMAND',, + `define(`SSH_REMOTE_COMMAND', `/usr/sbin/sendmail -bs')') +define(`_SSH_QGRP', `ifelse(defn(`SSH_MAILER_QGRP'),`',`', ` Q=SSH_MAILER_QGRP,')')dnl +_DEFIFNOT(`_DEF_SSH_MAILER_FLAGS', `mDFMuX') +_DEFIFNOT(`SSH_MAILER_FLAGS',`') +ifdef(`SSH_MAILER_ARGS',, `define(`SSH_MAILER_ARGS', + `ssh -o BatchMode=yes -o EscapeChar=none -- 'SSH_MAILER_HOST` 'SSH_REMOTE_COMMAND)') +ifdef(`SSH_MAILER_HOST',, `define(`SSH_MAILER_HOST',`$h')') +ifdef(`SSH_MAILER_USER',`', +`errprint(`*** SSH_MAILER_USER must be defined before MAILER(`ssh'). +')') +ifdef(`SSH_MAILER_DIR',`', +`errprint(`*** SSH_MAILER_DIR must be defined before MAILER(`ssh'). +')') + +POPDIVERT +######################*****############## +### SSH Mailer specification ### +##################*****################## + +Mssh, P=SSH_MAILER_PATH, F=_MODMF_(CONCAT(_DEF_SSH_MAILER_FLAGS, SSH_MAILER_FLAGS), `SSH'), S=EnvFromSMTP/HdrFromSMTP, R=ifdef(`_ALL_MASQUERADE_', `EnvToSMTP/HdrFromSMTP', `EnvToSMTP'), E=\r\n, L=990, + _OPTINS(`SSH_MAILER_MAX', `M=', `, ')_OPTINS(`SSH_MAILER_MAXMSGS', `m=', `, ')_OPTINS(`SSH_MAILER_MAXRCPTS', `r=', `, ')_OPTINS(`SSH_MAILER_CHARSET', `C=', `, ')T=DNS/RFC822/SMTP,_SSH_QGRP + U=SSH_MAILER_USER, D=SSH_MAILER_DIR, + A=SSH_MAILER_ARGS diff --git a/debian/cf/mailer/xagent.m4 b/debian/cf/mailer/xagent.m4 new file mode 100644 index 0000000..2a432d1 --- /dev/null +++ b/debian/cf/mailer/xagent.m4 @@ -0,0 +1,26 @@ +PUSHDIVERT(-1) +# +# Copyright (c) 1998 Sendmail, Inc. All rights reserved. +# Copyright (c) 1983 Eric P. Allman. All rights reserved. +# Copyright (c) 1988, 1993 +# The Regents of the University of California. All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# + +ifdef(`XAGENT_MAILER_PATH',, `define(`XAGENT_MAILER_PATH', /usr/lib/xagent)') +ifdef(`XAGENT_MAILER_FLAGS',, `define(`XAGENT_MAILER_FLAGS', `DFMueXLn')') +ifdef(`XAGENT_MAILER_ARGS',, `define(`XAGENT_MAILER_ARGS', `xagent $h $u')') +POPDIVERT +#################################### +### XAGENT Mailer specification ### +#################################### + +VERSIONID(`@(#)xagent.m4 0.1 (ISSC) 4/19/1996') + +Mxagent, P=XAGENT_MAILER_PATH, F=XAGENT_MAILER_FLAGS, S=11/31, R=21/31, + _OPTINS(`XAGENT_MAILER_MAX', `M=', `, ')T=DNS/RFC822/X-Unix, + A=XAGENT_MAILER_ARGS, E=\n diff --git a/debian/cf/ostype/debian.m4.in b/debian/cf/ostype/debian.m4.in new file mode 100644 index 0000000..ce8620f --- /dev/null +++ b/debian/cf/ostype/debian.m4.in @@ -0,0 +1,113 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: debian.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# ostype(debian) config file for building Sendmail @sm_version@@sm_revision@ +# +# Note: the .in file supports @SM_MINVERS@ - @SM_MAXVERS@, but the generated +# file is customized to the version noted above. +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(`sm_version', `dnl', +`include(`@datadir@/sendmail/cf/debian/autoconf.m4')dnl') +dnl # +VERSIONID(`$Id: debian.m4, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +define(`confCF_VERSION', `Debian@sm_revision@')dnl +dnl # +dnl # changes made herein *must* be reflected in parse_mc,update_db,debian.m4 +dnl # +ifdef(`MAIL_SETTINGS_DIR', `dnl', + `define(`MAIL_SETTINGS_DIR', `@sysconfdir@/mail/')dnl') +dnl # support 8.9.3 migration to 8.10.0 naming convention +dnl # Note: this is too late... needs to be in sendmail.mc - at top +ifdef(`_USE_ETC_MAIL_', `dnl', `define(`_USE_ETC_MAIL_')dnl') +dnl # +dnl # Define default greeting +define(`confSMTP_LOGIN_MSG', `$j Sendmail $v/$Z; $b; (No UCE/UBE) $?{client_addr}logging access from: ${client_name}(${client_resolve})-$_$.')dnl +dnl # +dnl # Keep dead letter drop, it is the last resort home for abused mail +define(`confDEAD_LETTER_DROP', `@localstatedir@/lib/sendmail/dead.letter')dnl +dnl # +dnl # Put status file in other than /etc/mail (sendmail default) +dnl # Many people run with R/O /etc +define(`STATUS_FILE', `@localstatedir@/lib/sendmail/sendmail.st')dnl +define(`confHOST_STATUS_DIRECTORY', + `@localstatedir@/lib/sendmail/host_status')dnl +dnl # +dnl # Allow scanf extensions for common text files +define(`confCR_FILE', `-o '`MAIL_SETTINGS_DIR`'relay-domains %[^\#]')dnl +define(`confCT_FILE', `MAIL_SETTINGS_DIR`'trusted-users %[^\#]')dnl +define(`confCW_FILE', `MAIL_SETTINGS_DIR`'local-host-names %[^\#]')dnl +dnl # +dnl # This *really* needs a better home +define(`confEBINDIR', `@libexecdir@')dnl +dnl # +dnl # add .' to mustquote chars (and match the binary default) +changequote([, ])dnl +define([confMUST_QUOTE_CHARS], [.'])dnl +changequote(`, ')dnl +dnl # +dnl # Default in 8.10+, used to be false (iirc), deprecated +define(`confME_TOO', `True')dnl +dnl # +dnl # Set the default user/group for mailers (mail:mail) +dnl # this should help NIS startup time +dnl # +define(`confDEF_USER_ID', `mail:mail')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # mailer paths and options +dnl #--------------------------------------------------------------------- +define(`LOCAL_MAILER_PATH', `@sbindir@/sensible-mda')dnl +define(`LOCAL_MAILER_ARGS', `sensible-mda $g $u $h ${client_addr}')dnl +MODIFY_MAILER_FLAGS(`LOCAL', `+S')dnl #do keep root +MODIFY_MAILER_FLAGS(`LOCAL', `-r')dnl #do not munge args +MODIFY_MAILER_FLAGS(`LOCAL', `-m')dnl #do not try LMTP +define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl +define(`PROCMAIL_MAILER_ARGS', `procmail -m $h $f $u')dnl +define(`USENET_MAILER_PATH', `/usr/bin/inews')dnl +define(`UUCP_MAILER_ARGS',`uux - -r -z -a$g -gC $h!rmail ($u)')dnl +dnl define(`confDEF_CHAR_SET', `iso-8859-1')dnl +dnl # +dnl # Optional items (should be a subset site.config.m4 used for build) +dnl # to prevent sendmail error messages +dnl # +dnl #--------------------------------------------------------------------- +dnl # IPv6 support (new option for 8.12+) +dnl # IPv6 causes problems for some DNS servers, work around them +dnl #--------------------------------------------------------------------- +ifelse(sm_enable_ipv6, `yes',dnl +`ifelse(eval(sm_version_math >= 527360), `1',dnl +`define(`confBIND_OPTS', `+WorkAroundBrokenAAAA')dnl')') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Milter (8.10.0-8.11.0) built-in with 8.12.0+ +dnl #--------------------------------------------------------------------- +ifelse(sm_enable_milter, `yes',dnl +`define(`_FFR_MILTER')dnl') +# +#------------------------------------------------------------------------- +# +# Undocumented features are available in Debian Sendmail @sm_version@@sm_revision@. +# * none +# +# _FFR_ features are available in Debian Sendmail @sm_version@@sm_revision@. +ifelse(sm_enable_milter, `yes',dnl +`# * milter') +# * sm_ffr +#------------------------------------------------------------------------- +# +# These _FFR_ features are for sendmail.mc processing +# +@sm_m4_ffr@ +#------------------------------------------------------------------------- diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..895f430 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,292 @@ +sendmail (8.14.1-11) unstable; urgency=low + + * /etc/init.d/sendmail will now rebuild databases on + start/reload/restart (like Redhat derived, various BSDs, etc) + + * Finally nailed (fingers crossed) the elusive cause of + ;; connection timed out; no servers could be reached + There are still issues on what state to leave things in, but + at least the file will be turned into garbage closes: #375787 + + sendmail.conf::DAEMON_NETMODE now defaults to Static + + /etc/{ppp,dhcp3,network,resolvconf}/*/sendmail pass an additional option + + /usr/share/sendmail/dynamic is much more careful + + * ARM is broken, disable -fstack-protector-all closes: #446415 + * add FEATURE(use_cw_file) to default sendmail.mc closes: #433216 + * remove /usr/share/bug/sendmail-doc -> sendmail closes: #387799 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sat, 20 Oct 2007 23:35:30 -0000 + +sendmail (8.14.1-10) unstable; urgency=low + + * Do not blindly accept client certificates by default + thanks to Jeffrey Honig (from #sendmail@freenode) + NOTE: this only affects new installations - if you've already installed + sendmail, you and haven't changed the default; you should ! + /etc/mail/tls/starttls.m4 + * Set confRRT_IMPLIES_DSN to upstream default of False + * Enable pool() for libmilter closes: #445307 + This should help high performance/load situations where select() just + doesn't scale well + + -- Richard A Nelson (Rick) <cowboy@debian.org> Thu, 04 Oct 2007 22:40:00 -0000 + +sendmail (8.14.1-9) unstable; urgency=low + + * Finally drop MAILER(cyrus21) in favour of cyrusv2 + * Egads, a rules typo dropped all local patches :( closes: #436185 + * upgrade to db4.6 (and newer libdb-dev) + + -- Richard A Nelson (Rick) <cowboy@debian.org> Mon, 13 Aug 2007 20:52:22 -0000 + +sendmail (8.14.1-8) unstable; urgency=low + + * remove dependancy on update-inetd and netbase/inet-superserver + + Default install uses daemon mode (no need for inetd) + + update-inetd call predicated upon it existance + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sat, 28 Jul 2007 01:17:00 -0000 + +sendmail (8.14.1-7) unstable; urgency=low + + * buildd's do not honour Build-Depends-Indep:, so replicate that + information on the Build-Depends line to solve FTBFS Closes: #430405 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Tue, 29 May 2007 02:21:00 -0000 + +sendmail (8.14.1-6) unstable; urgency=low + + * The `ironclad or die` release, using newer gcc/binutils + features to further reduce the exploit footprint of an + application. Thanks to Marc-Christian Petersen + Read more about all that good stuff at: + http://www.gentoo.org/proj/en/hardened/hardened-toolchain.xml#RELRO + + * Create an ELF "PT_GNU_RELRO" segment header in the object. + Or in other words: built with "-z relro" + + * When generating an executable or shared library, mark it to tell + the dynamic linker to resolve all symbols when the program is + started, or when the shared library is linked to using dlopen, + instead of deferring function call resolution to the point when + the function is first called. + Or in other words: built with "-z now" + + * Emit extra code to check for buffer overflows, such as stack + smashing attacks. This is done by adding a guard variable to + functions with vulnerable objects. This includes functions + that call alloca, and functions with buffers larger than 8 + bytes. The guards are initialized when a function is entered + and then checked when the function exits. If a guard check + fails, an error message is printed and the program exits. + Or in other words: built with "-fstack-protector-all" + + * Compiled as PIE (Position Independant Executable) + This assists PAX enabled kernels, with ASLR, and is also needed + for GRSecurity. Even with stock kernels, this makes the memory + mapping less static, hindering attacks. + + -- Richard A Nelson (Rick) <cowboy@debian.org> Tue, 29 May 2007 02:21:00 -0000 + +sendmail (8.14.1-5) private; urgency=low + + * DH_COMPAT = 5 + + * Tweak LSB setup of /etc/init.d/sendmail such that stop/start + when DAEMON_MODE=None is not an error + + * Clean up rules file abit, more to go (I love deleting suff) + + drop sm_conf/sm_conf_opt from debian/rules + + drop old private copy of dbs and use cdbs (not cleanly) + + drop support of older sendmail versions (8.8.8+) + + drop support for building on older debian versions (slink+) + + drop split debian directory kluge + + drop smX support - it requires a complete revamp + + * Things are still complicated by upstream not using autoconf/makefile + builds, but I have used them in support - much of that work remains and + will not be removed in the near term + + * Add alternative build-depend for linux-libc-dev (which will depcrecate + linux-kernel-headers) + + -- Richard A Nelson (Rick) <cowboy@debian.org> Wed, 23 May 2007 05:00:00 -0000 + +sendmail (8.14.1-4) unstable; urgency=low + + * Fix occasional mailq failures caused by set -e and lsb scripts :( + + -- Richard A Nelson (Rick) <cowboy@debian.org> Tue, 22 May 2007 23:00:00 -0000 + +sendmail (8.14.1-3) unstable; urgency=low + + * Add missing build-depends for linux-kernel-headers + Thanks Marc-Christian Petersen + * LSB init scripts + Thanks Marc-Christian Petersen + * Finally, make rmail a suggestion, not a dependancy + and remove conflicts with old versions closes: #376113 + * Suffix _mta to start/stop/configure for ksh closes: #424213 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Thu, 19 May 2007 20:14:00 -0000 + +sendmail (8.14.1-2) unstable; urgency=high + + * Rebuild against a fixed libd4.5 closes: #423153 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Thu, 10 May 2007 21:30:00 -0000 + +sendmail (8.14.1-1) unstable; urgency=low + + * *** *** libmilter gets a new version *** *** + *** *** MimeDefang and other packages will need to be rebuilt *** *** + + * New upstream release + - Fix 8.14.0 regressions & issues + * Refit patches + * Drop qtool patch, equivalent applied upstream + * Force configure defaults (new machine, gotta get it right) + * update configure.ac for newer db versions + * refresh FAQ + * build against db4.5 closes: #421945 + * build-indep-depends on groff, not groff-base closes: #362872 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sat, 05 May 2007 20:10:00 -0000 + +sendmail (8.14.1-0) private; urgency=low + + * New upstream release + - Fix 8.14.0 regressions & issues + * Refit patches + * Drop qtool patch, equivalent applied upstream + * Force configure defaults (new machine, gotta get it right) + * update configure.ac for newer db versions + * refresh FAQ + + -- Richard A Nelson (Rick) <cowboy@debian.org> Fri, 04 Apr 2007 04:00:00 -0000 + +sendmail (8.14.1.Gamma0-0) private; urgency=low + + * New upstream Gamma + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Fri, 30 Mar 2007 04:40:00 -0000 + +sendmail (8.14.1.Beta2-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sat, 24 Mar 2007 04:30:00 -0000 + +sendmail (8.14.1.Beta1-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Fri, 09 Mar 2007 17:00:00 -0000 + +sendmail (8.14.1.Beta0-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Mon, 05 Mar 2007 05:40:00 -0000 + +sendmail (8.14.0-0) private; urgency=low + + * New upstream Release + - Headers 8bit clean + - Milter enhancements + * Refit patches + * Some issues, so this will not be uploaded - errata of (2007/02/06) help + + -- Richard A Nelson (Rick) <cowboy@debian.org> Thu, 01 Feb 2007 16:20:00 -0000 + +sendmail (8.14.0.Gamma0-0) private; urgency=low + + * New upstream Release + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Wed, 31 Jan 2007 20:50:00 -0000 + +sendmail (8.14.0.Beta5-1) experimental; urgency=low + + * New upstream Beta + * Refit patches + + * Major item + + Welcome back space betwixt 'from:' and '<other stuff>' + + -- Richard A Nelson (Rick) <cowboy@debian.org> Tue, 09 Jan 2007 21:40:00 -0000 + +sendmail (8.14.0.Beta4-1) experimental; urgency=low + + * Sigh... built here, but not build machines closes: #405917 + * change from ~ to . to appease build scripts and match upstream + * drop my check_helo patch, needs rework + * Upstream incorporated patch for greet_pause closes: #312164 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sun, 07 Jan 2007 22:50:00 -0000 + +sendmail (8.14.0~Beta4-1) experimental; urgency=low + + * Release to experimental + * New upstream Beta + * Refit patches + + * Major new feature: + + headers are 8 bit "transparent". + + the milter API has been extended. + + * New/improved anti-SPAM features: + + no false-postives on greet_pause failures due to timeouts/rejections + + new option MaxNOOPCommands + + detection of open HTTP proxies (GET, POST, CONNECT, or USER) + + FEATURE(`require_rdns') + + FEATURE(`block_bad_helo') + + FEATURE(`badmx') + + option `relaytofulladdress' for FEATURE(`access_db') + + * Upstream incorporated patch for greet_pause closes: #312164 + + -- Richard A Nelson (Rick) <cowboy@debian.org> Fri, 05 Jan 2007 19:07:46 -0000 + +sendmail (8.14.0~Beta4-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sun, 25 Dec 2006 04:30:00 -0000 + +sendmail (8.14.0~Beta3-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Tue, 19 Dec 2006 00:10:00 -0000 + +sendmail (8.14.0~Beta2-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sat, 09 Dec 2006 18:40:00 -0000 + +sendmail (8.14.0~Beta1-0) private; urgency=low + + * New upstream Beta + * Refit patches + + -- Richard A Nelson (Rick) <cowboy@debian.org> Sun, 19 Nov 2006 17:50:00 -0000 + +sendmail (8.14.0~Beta0-0) private; urgency=low + + * New upstream Beta + * Support 8.14 in build tools + * Refit patches + * Update FFRs + + -- Richard A Nelson (Rick) <cowboy@debian.org> Wed, 01 Nov 2006 02:30:00 -0000 + +/* vim:set ai et tw=80 */ diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/configure b/debian/configure new file mode 100644 index 0000000..50005ba --- /dev/null +++ b/debian/configure @@ -0,0 +1,12175 @@ +#! /bin/sh +# From configure.ac Revision: 8.14.1 . +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.61 for Sendmail 8.14.1. +# +# Report bugs to <bug/reportbug or sendmail@packages.debian.org>. +# +# # +# # $Sendmail$ +# # from Sendmail: ./configure.ac,v 8.14.1 2007-10-04 21:42:00 +# # +# cat <<EOF +# +# Copyright (c) 1998-2007 Richard Nelson. All Rights Reserved. +# +# Sendmail 8.14.1 +# Generated by Autoconf 2.61, Automake _am_version +# +# Debian configure script for building Sendmail +# Note: this file supports Sendmail 8.7.6 - 9.0.0 +# and has been tested on autoconf 2.12, 2.13, 2.50, 2.52, 2.53 +# +# +# EOF +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 </dev/null 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='Sendmail' +PACKAGE_TARNAME='sendmail' +PACKAGE_VERSION='8.14.1' +PACKAGE_STRING='Sendmail 8.14.1' +PACKAGE_BUGREPORT='bug/reportbug or sendmail@packages.debian.org' + +ac_unique_file="./build/site.config.m4.in" +ac_default_prefix=/usr +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +target +target_cpu +target_vendor +target_os +SET_MAKE +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +am__isrc +CYGPATH_W +PACKAGE +VERSION +ACLOCAL +AUTOCONF +AUTOMAKE +AUTOHEADER +MAKEINFO +install_sh +STRIP +INSTALL_STRIP_PROGRAM +mkdir_p +AWK +am__leading_dot +AMTAR +am__tar +am__untar +MAINTAINER_MODE_TRUE +MAINTAINER_MODE_FALSE +MAINT +ac_version +am_version +SM_VERS +SM_DATE +SM_MINVERS +SM_MAXVERS +SM_CPYRT +sm_date +sm_time +sm_utc +sm_version +sm_version_v +sm_version_r +sm_version_major +sm_version_minor +sm_version_beta +sm_version_math +sm_revision +sm_custom +sm_custom_s +buildtree +sm_dist_name +sm_dist_vers +DEBIAN +DEBIAN_DH +DEB_BUILD_ARCH +DEB_BUILD_GNU_CPU +DEB_BUILD_GNU_SYSTEM +DEB_BUILD_GNU_TYPE +DEB_HOST_ARCH +DEB_HOST_GNU_CPU +DEB_HOST_GNU_SYSTEM +DEB_HOST_GNU_TYPE +sm_build_arch +sm_host_arch +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +DEPDIR +am__include +am__quote +AMDEP_TRUE +AMDEP_FALSE +AMDEPBACKSLASH +CCDEPMODE +am__fastdepCC_TRUE +am__fastdepCC_FALSE +CPP +LN_S +GREP +EGREP +sm_incdirs +sm_mapdef +sm_envdef +sm_libs +sm_editmap_envdef +sm_editmap_libs +sm_libmilter_envdef +sm_libmilter_libs +sm_libmilter_version +sm_libsm_envdef +sm_libsm_libs +sm_libsmdb_envdef +sm_libsmdb_libs +sm_libsmutil_envdef +sm_libsmutil_libs +sm_mail_local_envdef +sm_mail_local_libs +sm_mailstats_envdef +sm_mailstats_libs +sm_makemap_envdef +sm_makemap_libs +sm_praliases_envdef +sm_praliases_libs +sm_rmail_envdef +sm_rmail_libs +sm_sendmail_envdef +sm_sendmail_libs +sm_smrsh_envdef +sm_smrsh_libs +sm_vacation_envdef +sm_vacation_libs +sm_databases +sm_features +sm_badepends +sm_depends +sm_recommends +sm_suggests +sm_newdb_lib +sm_ldap_lib +sm_hesiod_parms +sm_ffr +sm_m4_ffr +sm_enable_shm +sm_enable_milter +sm_enable_regex +sm_enable_ndbm +sm_enable_newdb +sm_enable_nis +sm_enable_nisplus +sm_enable_ldap +SM_ENABLE_LDAP_TRUE +SM_ENABLE_LDAP_FALSE +sm_enable_bind +sm_enable_hesiod +sm_enable_tcpd +sm_enable_ipv6 +sm_enable_maillock +sm_enable_sfio +sm_enable_auth +sm_auth_lib +SM_ENABLE_AUTH_TRUE +SM_ENABLE_AUTH_FALSE +sm_enable_tls +SM_ENABLE_TLS_TRUE +SM_ENABLE_TLS_FALSE +LIBOBJS +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Sendmail 8.14.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/sendmail] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Sendmail 8.14.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-regex=.........Allow REGEX maps [auto] + --enable-ndbm=..........Allow NDBM maps [auto] + --enable-newdb=.........Allow NEWDB maps [auto] + --enable-nis=...........Allow NIS maps [auto] + --enable-nisplus=.......Allow NISPLUS maps [auto] + --enable-ldap=..........Allow LDAP maps [auto] + --enable-hesiod=........Allow HESIOD maps [auto] + --enable-tcpd=..........Allow TCP wrappers [auto] + --enable-bind=..........Allow BIND usage [auto] + --enable-ipv6=..........Allow IPv6 usage [auto] + --enable-maillock=......Allow maillock [auto] + --enable-milter=........Allow milter [auto] + --enable-sfio=..........Allow SFIO usage [auto] + --enable-auth=..........Allow SMTP auth [auto] + --enable-tls=...........Allow TLS/SSL [auto] + --enable-shm=...........Allow shared memory [auto] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-buildtree=.......Build directory [.] + --with-revision=........Package revision [''] + --with-custom=..........Custom package name [''] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <bug/reportbug or sendmail@packages.debian.org>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Sendmail configure 8.14.1 +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. + +# +# $Sendmail$ +# from Sendmail: ./configure.ac,v 8.14.1 2007-10-04 21:42:00 +# +cat <<EOF + + Copyright (c) 1998-2007 Richard Nelson. All Rights Reserved. + + Sendmail 8.14.1 + Generated by Autoconf 2.61, Automake _am_version + + Debian configure script for building Sendmail + Note: this file supports Sendmail 8.7.6 - 9.0.0 + and has been tested on autoconf 2.12, 2.13, 2.50, 2.52, 2.53 + + +EOF + +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Sendmail $as_me 8.14.1, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_aux_dir= +for ac_dir in ./build "$srcdir"/./build; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ./build \"$srcdir\"/./build" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in ./build \"$srcdir\"/./build" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6; } +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 +echo "$as_me: error: invalid value of canonical target" >&2;} + { (exit 1); exit 1; }; };; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm -f conftest.sed + +{ 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'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + SET_MAKE= +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +am__api_version='1.10' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL 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. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +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 + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$AWK" && break +done + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='sendmail' + VERSION='8.14.1' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +ac_version="2.61"; +am_version="_am_version"; + + +am_version="$am__api_version"; + + +SM_VERS='8.14.1'; +SM_DATE='2007-10-04 21:42:00'; +SM_MINVERS='8.7.6'; +SM_MAXVERS='9.0.0'; +SM_CPYRT='2007'; + + + + + + +#------------------------------------------------------------------- +# Determine date/time of build +#------------------------------------------------------------------- +#sm_date=[`date --iso-8601=seconds`]; # <== Not valid on older systems !!! +sm_date=`date +%Y-%m-%dT%H:%M:%S%z`; +sm_utc=$(expr "$sm_date" : '.*T.*\([+-].*\)'); +sm_time=$(expr "$sm_date" : '.*T\(.*\)[+-]'); +sm_date=$(expr "$sm_date" : '\(.*\)T'); + + +#------------------------------------------------------------------- +# Determine sendmail version +#------------------------------------------------------------------- +if test -f ../build-tree/*/sendmail/version.c; then + version_file='../build-tree/*/sendmail/version.c'; + sm_version=`sed -ne "s/char[[:space:]]*Version\[\] = \"\([^\"]*\)\";/\1/p" $version_file`; +else + curr_dir=$(echo `pwd` | sed -e 's/\/debian$//' -); + version=$(expr "${curr_dir}" : '.*-\([0-9.].*\)'); + beta_version=$(expr "${curr_dir}" : '.*[+~]\([0-9.].*\)'); + if test -z "$beta_version"; then + sm_version="$version"; + else + sm_version="$beta_version"; + fi; + fi; +if test -z "$sm_version"; then + version_file='./build/version.c'; + if test -f $version_file; then + sm_version=`sed -ne "s/char[[:space:]]*Version\[\] = \"\([^\"]*\)\";/\1/p" $version_file`; + fi; + fi; + +if test -z "$sm_version"; then + { { echo "$as_me:$LINENO: error: could not determine Sendmail version" >&5 +echo "$as_me: error: could not determine Sendmail version" >&2;} + { (exit 1); exit 1; }; } + fi; +PACKAGE_VERSION="${sm_version}"; +PACKAGE_STRING="${PACKAGE_NAME} ${PACKAGE_VERSION}"; + +# +# break the version into pieces for easier comparisons +# v,r = separate components (8.12.0.Beta7 = 8 12) +# major = 1st two components (8.9.3 -> 8.9) +# minor = last component (8.9.3 -> 3) +# beta = suffix for beta version (8.12.0.Beta7 -> 7) +# math = for numeric (<, >=, etc.) comparisons +# 9.0.0 = 589824 (9.0 = 589824) +# 8.14.1 = 527873 (8.14 = 527872) +# 8.13.1 = 527617 (8.13 = 527616) +# 8.12.11 = 527371 (8.12 = 527360) +# 8.11.7 = 527111 (8.11 = 527104) +# 8.10.2 = 526850 (8.10 = 526848) +# 8.9.3 = 526595 (8.9 = 526592) +# 8.8.8 = 526344 (8.8 = 526336) +# 8.7.6 = 526086 (8.7 = 526080) +v2i () { + sm_version_test=`expr 65536 \* $(expr "$1" : '\([0-9]*\)') + \ + 256 \* $(expr "$1" : '[0-9]*\.\([0-9]*\)') + \ + $(expr "$1" : '[0-9]*\.[0-9]*\.\([0-9]*\)')`; + #echo "v2i($1)=$sm_version_test"; + }; +i2v () { + val=$1; + major=`expr $val / 65536`; + val=`expr $val % 65536`; + minor=`expr $val / 256`; + val=`expr $val % 256`; + result="$major.$minor.$val"; + #echo "i2v($1)=$result"; + #return $result; + }; +sm_version_v=`expr $sm_version : '\([0-9]*\)'`; +sm_version_r=`expr $sm_version : '[0-9]*\.\([0-9]*\)'`; +sm_version_major="$sm_version_v.$sm_version_r"; +sm_version_minor=`expr $sm_version : '[0-9]*\.[0-9]*\.\([0-9]*\)'`; +sm_version_beta=`expr $sm_version : '[0-9]*\.[0-9]*\.[0-9]*\.Beta\([0-9]*\)'`; +sm_version_math=`expr 65536 \* $sm_version_v \ + + 256 \* $sm_version_r \ + + $sm_version_minor`; + + + + +#------------------------------------------------------------------- +# Configuration for Sendmail +#------------------------------------------------------------------- +#checks for programs +#checks for libraries +#checks for header files +#checks for typedefs +#checks for structures +#checks for compiler characteristics +#checks for library functions +#checks for system services + +#------------------------------------------------------------------- +# Initialize variables +#------------------------------------------------------------------- +# +# Initialize variables - value is one of: +# no: don't even try to include support for +# yes: require support for +# auto: support if present, warn if not +# +#------------------------------------------------------------------- + +# Check whether --with-buildtree was given. +if test "${with_buildtree+set}" = set; then + withval=$with_buildtree; buildtree="$withval" +else + buildtree='.' +fi + + +# Check whether --with-revision was given. +if test "${with_revision+set}" = set; then + withval=$with_revision; sm_revision="$withval" +else + sm_revision='' +fi + + +# Check whether --with-custom was given. +if test "${with_custom+set}" = set; then + withval=$with_custom; sm_custom="$withval" +else + sm_custom='' +fi + +# Check whether --enable-regex was given. +if test "${enable_regex+set}" = set; then + enableval=$enable_regex; sm_enable_regex="$enableval" +else + sm_enable_regex=auto +fi + +# Check whether --enable-ndbm was given. +if test "${enable_ndbm+set}" = set; then + enableval=$enable_ndbm; sm_enable_ndbm="$enableval" +else + sm_enable_ndbm=auto +fi + +# Check whether --enable-newdb was given. +if test "${enable_newdb+set}" = set; then + enableval=$enable_newdb; sm_enable_newdb="$enableval" +else + sm_enable_newdb=auto +fi + +# Check whether --enable-nis was given. +if test "${enable_nis+set}" = set; then + enableval=$enable_nis; sm_enable_nis="$enableval" +else + sm_enable_nis=auto +fi + +# Check whether --enable-nisplus was given. +if test "${enable_nisplus+set}" = set; then + enableval=$enable_nisplus; sm_enable_nisplus="$enableval" +else + sm_enable_nisplus=auto +fi + +# Check whether --enable-ldap was given. +if test "${enable_ldap+set}" = set; then + enableval=$enable_ldap; sm_enable_ldap="$enableval" +else + sm_enable_ldap=auto +fi + +# Check whether --enable-hesiod was given. +if test "${enable_hesiod+set}" = set; then + enableval=$enable_hesiod; sm_enable_hesiod="$enableval" +else + sm_enable_hesiod=auto +fi + +# Check whether --enable-tcpd was given. +if test "${enable_tcpd+set}" = set; then + enableval=$enable_tcpd; sm_enable_tcpd="$enableval" +else + sm_enable_tcpd=auto +fi + +# Check whether --enable-bind was given. +if test "${enable_bind+set}" = set; then + enableval=$enable_bind; sm_enable_bind="$enableval" +else + sm_enable_bind=auto +fi + +# Check whether --enable-ipv6 was given. +if test "${enable_ipv6+set}" = set; then + enableval=$enable_ipv6; sm_enable_ipv6="$enableval" +else + sm_enable_ipv6=auto +fi + +# Check whether --enable-maillock was given. +if test "${enable_maillock+set}" = set; then + enableval=$enable_maillock; sm_enable_maillock="$enableval" +else + sm_enable_maillock=auto +fi + +# Check whether --enable-milter was given. +if test "${enable_milter+set}" = set; then + enableval=$enable_milter; sm_enable_milter="$enableval" +else + sm_enable_milter=auto +fi + +# Check whether --enable-sfio was given. +if test "${enable_sfio+set}" = set; then + enableval=$enable_sfio; sm_enable_sfio="$enableval" +else + sm_enable_sfio=auto +fi + +# Check whether --enable-auth was given. +if test "${enable_auth+set}" = set; then + enableval=$enable_auth; sm_enable_auth="$enableval" +else + sm_enable_auth=auto +fi + +# Check whether --enable-tls was given. +if test "${enable_tls+set}" = set; then + enableval=$enable_tls; sm_enable_tls="$enableval" +else + sm_enable_tls=auto +fi + +# Check whether --enable-shm was given. +if test "${enable_shm+set}" = set; then + enableval=$enable_shm; sm_enable_shm="$enableval" +else + sm_enable_shm=auto +fi + + +#------------------------------------------------------------------- +# Resolve variables for sendmail Makefiles and .m4 where +# exec_prefix=${prefix} will not work... +#------------------------------------------------------------------- +#eval PACKAGE_VERSION="${PACKAGE_VERSION}" +#eval PACKAGE_STRING="${PACKAGE_STRING}" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' +eval prefix="${prefix}"; +eval exec_prefix="${exec_prefix}"; +eval bindir="${bindir}"; +eval sbindir="${sbindir}"; +eval libexecdir="${libexecdir}"; +eval sysconfdir="${sysconfdir}"; +eval sharedstatedir="${sharedstatedir}"; +eval localstatedir="${localstatedir}"; +eval libdir="${libdir}"; +eval includedir="${includedir}"; +eval oldincludedir="${oldincludedir}"; +eval datarootdir="${datarootdir}"; +eval datadir="${datadir}"; +eval infodir="${infodir}"; +eval mandir="${mandir}"; +eval docdir="${docdir}"; +eval srcdir="${srcdir}"; + + +test -n "$sm_custom" && sm_custom_s="+${sm_custom}"; + +eval buildtree="${buildtree}"; + +#------------------------------------------------------------------- +# Determine Distribution and version to build for +#------------------------------------------------------------------- +sm_dist_name=''; +sm_dist_vers=''; +DEBIAN=''; +DEBIAN_DH=''; +{ echo "$as_me:$LINENO: checking for Debian" >&5 +echo $ECHO_N "checking for Debian... $ECHO_C" >&6; } +if test ! -f /etc/debian_version ; then + DEBIAN='no'; + { echo "$as_me:$LINENO: result: \"$DEBIAN\"" >&5 +echo "${ECHO_T}\"$DEBIAN\"" >&6; } +else + DEBIAN='yes'; + sm_dist_name='Debian'; + sm_dist_vers=`cat /etc/debian_version`; + # Determine which level of debhelper we're building with + DEBIAN_DH='1'; + if test -x /usr/bin/dh_testversion; then + # Must run this test above the debian directory + if (cd .. && dh_testversion 4.1.0 2>/dev/null); then + DEBIAN_DH='4.1'; + elif (cd .. && dh_testversion 4.0.0 2>/dev/null); then + DEBIAN_DH='4'; + elif (cd .. && dh_testversion 3.0.0 2>/dev/null); then + DEBIAN_DH='3'; + elif (cd .. && dh_testversion 2.0.40 2>/dev/null); then + DEBIAN_DH='2'; + else + DEBIAN_DH='1'; + fi; + fi; + if test -x /usr/bin/dpkg-architecture; then + eval `dpkg-architecture -s`; + fi; + sm_build_arch="$DEB_BUILD_ARCH" + sm_host_arch="$DEB_HOST_ARCH" + + + + + { echo "$as_me:$LINENO: result: $DEBIAN, using debhelper v$DEBIAN_DH" >&5 +echo "${ECHO_T}$DEBIAN, using debhelper v$DEBIAN_DH" >&6; } + fi; + +#------------------------------------------------------------------- +# Announce our presence... +#------------------------------------------------------------------- + +echo "" +echo "Sendmail ${sm_version}${sm_custom_s}${sm_revision} (${sm_version_math}) \ +on ${sm_dist_name} ${sm_dist_vers} ${sm_build_arch}/${sm_host_arch}."; +echo "Generated by Autoconf ${ac_version}, Automake ${am_version}."; +echo ""; + +#------------------------------------------------------------------- +# Required programs +# cc, cpp +# install +# egrep +# std includes +#------------------------------------------------------------------- +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +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); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL 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. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6; } +fi + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_EGREP=$EGREP +fi + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + + +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +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' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + + +#------------------------------------------------------------------- +# Variables used in site.config.m4.in to set corresponding Build vars +#------------------------------------------------------------------- +# Global +sm_incdirs=''; +sm_mapdef=''; +sm_envdef=''; +sm_libs=''; +# editmap +sm_editmap_envdef=''; +sm_editmap_libs=''; +# libmilter +sm_libmilter_envdef='-fPIC'; +sm_libmilter_libs=''; +sm_libmilter_version=0; +# libsm +sm_libsm_envdef='-fPIC'; +sm_libsm_libs=''; +# libsmdb +sm_libsmdb_envdef=''; +sm_libsmdb_libs=''; +# libsmutil +sm_libsmutil_envdef='-fPIC'; +sm_libsmutil_libs=''; +# mail.local +sm_mail_local_envdef=''; +sm_mail_local_libs=''; +# mailstats +sm_mailstats_envdef=''; +sm_mailstats_libs=''; +# makemap +sm_makemap_envdef=''; +sm_makemap_libs=''; +# praliases +sm_praliases_envdef=''; +sm_praliases_libs=''; +# rmail +sm_rmail_envdef=''; +sm_rmail_libs=''; +# sendmail +sm_sendmail_envdef=''; +sm_sendmail_libs=''; +# smrsh +sm_smrsh_envdef=''; +sm_smrsh_libs=''; +# vacation +sm_vacation_envdef=''; +sm_vacation_libs=''; + +#------------------------------------------------------------------- +# Auxilliary variables +#------------------------------------------------------------------- +sm_databases=''; +sm_features=''; +sm_badepends=''; +sm_depends=''; +sm_recommends=''; +sm_suggests=''; +sm_newdb_lib=''; +sm_ldap_lib=''; +sm_hesiod_parms=''; +sm_ffr=''; +sm_m4_ffr=''; + +#------------------------------------------------------------------- +# Override default/specified values +#------------------------------------------------------------------- +# Change pid from /var/run to /var/run/sendmail/mta to alleviate clutter +sm_sendmail_envdef="$sm_sendmail_envdef \ +-D_PATH_SENDMAILPID=\\\"${localstatedir}/run/sendmail/mta/sendmail.pid\\\""; +# Set paths for smrsh +sm_smrsh_envdef="$sm_smrsh_envdef \ +-DCMDDIR=\\\"${sysconfdir}/mail/smrsh\\\""; +sm_smrsh_envdef="$sm_smrsh_envdef -DPATH=\\\"/usr/bin:/bin\\\""; +# +# Everything we'll build on has strerror(3) +# sm_envdef="$sm_envdef -DHASSTRERROR=1"; +# +# The next two require a patch to {include/sm,sendmail,src}/conf.h +# and would give duplicate definition warnings if left herein +#sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; +sm_envdef="$sm_envdef -DHASFCHMOD=1 -DHASSETRLIMIT=1"; +# +# Back by request... +#sm_envdef="$sm_envdef -DPICKY_HELO_CHECK"; +# +# flock() doens't work over NFS and there's a rumour of b0rkedness in +# Linux 2.4.x kernels ;( +sm_envdef="$sm_envdef -DHASFLOCK=0"; +sm_libsm_envdef="$sm_libsm_envdef -DHAVE_NANOSLEEP=1"; +sm_ffr="$sm_ffr -D_FFR_QUEUE_SCHED_DBG"; # %%%%%% TESTING %%%%%%%% +# +# version specific setup +if test "$sm_version_major" = "8.14"; then + sm_ffr="$sm_ffr -D_FFR_SKIP_DOMAINS"; + sm_mapdef="$sm_mapdef -DSOCKETMAP"; + sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; + sm_ffr="$sm_ffr -D_FFR_GROUPREADABLEAUTHINFOFILE"; + sm_ffr="$sm_ffr -D_FFR_DAEMON_NETUNIX"; + sm_ffr="$sm_ffr -D_FFR_NO_PIPE"; + sm_ffr="$sm_ffr -D_FFR_SHM_STATUS"; + sm_ffr="$sm_ffr -D_FFR_RHS"; + sm_ffr="$sm_ffr -D_FFR_MAIL_MACRO"; + sm_m4_ffr="$sm_m4_ffr define(\`_FFR_MAIL_MACRO')"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.13"; then + sm_ffr="$sm_ffr -D_FFR_SKIP_DOMAINS"; + sm_mapdef="$sm_mapdef -DSOCKETMAP"; + sm_ffr="$sm_ffr -D_FFR_BLOCK_PROXIES"; + sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; + sm_ffr="$sm_ffr -D_FFR_GROUPREADABLEAUTHINFOFILE"; + sm_ffr="$sm_ffr -D_FFR_CONTROL_MSTAT"; + sm_ffr="$sm_ffr -D_FFR_DAEMON_NETUNIX"; + sm_ffr="$sm_ffr -D_FFR_NO_PIPE"; + sm_ffr="$sm_ffr -D_FFR_SHM_STATUS"; + sm_ffr="$sm_ffr -D_FFR_RHS"; + sm_ffr="$sm_ffr -D_FFR_MAIL_MACRO"; + sm_ffr="$sm_ffr -D_FFR_HELONAME"; + sm_m4_ffr="$sm_m4_ffr define(\`_FFR_MAIL_MACRO')"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.12"; then + sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; + # + # Note: There is a problem with both <=2.2.19 and <=2.4.2-acx in + # that setitimer() sometimes looses events, this is mentioned + # in the man page, but seems to hit even in non-pathologically + # heavy loading. So, we revert back to alarm() - which, thusfar + # has proven stable. + # Note: This actually seems to have been a sendmail issue fixed in 8.12.3 + sm_envdef="$sm_envdef -DSM_CONF_SETITIMER=0"; + # + sm_ffr="$sm_ffr -D_FFR_MAX_FORWARD_ENTRIES=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; + sm_ffr="$sm_ffr -D_FFR_CONTROL_MSTAT"; + sm_ffr="$sm_ffr -D_FFR_GROUPREADABLEAUTHINFOFILE"; + sm_ffr="$sm_ffr -D_FFR_DAEMON_NETUNIX"; + sm_ffr="$sm_ffr -D_FFR_SHM_STATUS"; + sm_ffr="$sm_ffr -D_FFR_RHS"; + sm_ffr="$sm_ffr -D_FFR_MAIL_MACRO"; + sm_m4_ffr="$sm_m4_ffr define(\`_FFR_MAIL_MACRO')"; + sm_ffr="$sm_ffr -D_FFR_NO_PIPE"; + sm_ffr="$sm_ffr -D_FFR_QUARANTINE"; + sm_ffr="$sm_ffr -D_FFR_DEAL_WITH_ERROR_SSL"; + sm_mailstats_envdef="$sm_mailstats_envdef -D_FFR_QUARANTINE"; + sm_vacation_envdef="$sm_vaction_envdef -D_FFR_RETURN_ADDR"; +elif test "$sm_version_major" = "8.11"; then + sm_vacation_envdef="$sm_vaction_envdef -D_FFR_DEBUG=1"; + sm_vacation_envdef="$sm_vaction_envdef -D_FFR_LISTDB=1"; + sm_ffr="$sm_ffr -D_FFR_TESTMODE_DROP_PRIVS=1"; + sm_ffr="$sm_ffr -D_FFR_ADDR_TYPE=1"; + sm_ffr="$sm_ffr -D_FFR_ARITH=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUE_FILE_MODE=1"; + sm_ffr="$sm_ffr -D_FFR_MAX_FORWARD_ENTRIES=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.10"; then + sm_ffr="$sm_ffr -D_FFR_ADDR_TYPE=1"; + sm_ffr="$sm_ffr -D_FFR_ARITH=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUE_FILE_MODE=1"; + sm_ffr="$sm_ffr -D_FFR_MAX_FORWARD_ENTRIES=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.9"; then + sm_ffr="$sm_ffr -D_FFR_MAX_MIME_HEADER_LENGTH=1"; + sm_ffr="$sm_ffr -D_FFR_MAX_HEADERS_LENGTH=1"; + sm_ffr="$sm_ffr -D_FFR_MAXRCPT_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_DSN_RRT_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_CONTROL_SOCKET=1"; + sm_ffr="$sm_ffr -D_FFR_TRUSTED_USER=1"; + sm_ffr="$sm_ffr -D_FFR_MAP_SYSLOG=1"; + sm_ffr="$sm_ffr -D_DONT_PROBE_INTERFACES_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_PIDFILE_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_DEADLETTERDROP_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUE_FILE_MODE=1"; + fi; + +# 8.12.5+ +v2i 8.12.5; +if test $sm_version_math -ge $sm_version_test; then + :; +else + sm_mail_local_envdef="$sm_mail_local_envdef \ +-D_PATH_MAILDIR=\\\"${localstatedir}/mail\\\""; + sm_rmail_envdef="$sm_rmail_envdef \ +-D_PATH_SENDMAIL=\\\"${sbindir}/sendmail\\\""; + sm_vacation_envdef="$sm_vacation_envdef \ +-D_PATH_SENDMAIL=\\\"${sbindir}/sendmail\\\""; + fi; + +# 8.12.0+ +v2i 8.12.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + :; + fi; + +# 8.11.0+ +v2i 8.11.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + sm_enable_tls=no; + fi; + +# 8.10.0+ +v2i 8.10.0; +if test $sm_version_math -ge $sm_version_test; then + # SRCROUTE works quite well with glibc 2.1+ (should test for this...) + sm_sendmail_envdef="$sm_sendmail_envdef -DIP_SRCROUTE=1"; + # Allow setting Hostname from $j... + sm_ffr="$sm_ffr -D_FFR_RESET_MACRO_GLOBALS"; + sm_mail_local_envdef="$sm_mail_local_envdef -DCONTENTLENGTH"; + # Note: the next line is commented to *prevent* mode 660 files in /var/mail + #sm_mail_local_envdef="$sm_mail_local_envdef -DMAILGID=8"; +else + sm_enable_milter=no; + sm_enable_auth=no; + sm_enable_ipv6=no; + sm_sendmail_envdef="$sm_sendmail_envdef \ +-D_PATH_VARTMP=\\\"${localstatedir}/lib/sendmail\\\""; + sm_sendmail_envdef="$sm_sendmail_envdef \ +-D_PATH_SENDMAILCF=\\\"${sysconfdir}/mail/sendmail.cf\\\""; + fi; + +# 8.9.0+ +v2i 8.9.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + :; + fi; + +# 8.8.0+ +v2i 8.8.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + sm_enable_ldap=no; + sm_enable_tcpd=no; + fi; + +# Shared memory support (on 8.12, but needs a recent kernel) +# Note: there is a race condition where sometimes sendmail can't +# use shared memory because the prior pid didn't delete it +# but we override the linux default for performance reasons +# (or rather we would, if most users weren't on kernels that +# don't properly support it - < 2.2.19 or 2.4.1) +# *ANY* arch still on a 2.2.x; x<19 must *NOT* enable this... +if test "$sm_enable_shm" != "no"; then + v2i 8.12.0; + if test $sm_version_math -lt $sm_version_test; then + sm_enable_shm=no; + fi; + if test "arm" = "${sm_host_arch}"; then + sm_enable_shm=no; + fi; + fi; +if test "$sm_enable_shm" != "no"; then + sm_enable_shm=yes; + fi; + + +# Milter (_FFR_ on 8.10, 8.11, native on 8.12+) +if test "$sm_enable_milter" != "no"; then + sm_libmilter_envdef="$sm_libmilter_envdef -DSM_CONF_POLL=1"; + sm_libmilter_version=0; + v2i 8.14.0; + if test $sm_version_math -ge $sm_version_test; then + sm_libmilter_version=1; + fi; + v2i 8.10.0; + if test $sm_version_math -ge $sm_version_test; then + sm_enable_milter=yes; + v2i 8.12.0; + if test $sm_version_math -ge $sm_version_test; then + sm_libmilter_envdef="$sm_libmilter_envdef -D_FFR_MULTILINE"; + v2i 8.13.0; + if test $sm_version_math -lt $sm_version_test; then + sm_sendmail_envdef="$sm_sendmail_envdef -DMILTER"; + sm_libmilter_envdef="$sm_libmilter_envdef \ +-D_FFR_MILTER_ROOT_UNSAFE"; + fi; + sm_libmilter_libs="$sm_libmilter_libs" + else + sm_libmilter_envdef="$sm_libmilter_envdef -D_FFR_MILTER"; + sm_sendmail_envdef="$sm_sendmail_envdef -D_FFR_MILTER"; + fi; + v2i 8.11.0; + if test $sm_version_math -ge $sm_version_test; then + sm_libmilter_envdef="$sm_libmilter_envdef -D_FFR_SMFI_PROGRESS"; + fi; + fi; + fi; + + +# SFIO (required for TLS and security layer of SASL on 8.11) +# We'll let it go through here on any version (to check headers), but +# issue no messages unless needed... +if test "$sm_enable_tls" != "no"; then + if test $sm_enable_sfio != no; then + sm_enable_sfio=auto; + elif test $sm_enable_tls = yes; then + if test "$sm_version_major" = "8.11"; then + { { echo "$as_me:$LINENO: error: SFIO is disabled, but you asked for TLS" >&5 +echo "$as_me: error: SFIO is disabled, but you asked for TLS" >&2;} + { (exit 1); exit 1; }; } + fi; + elif test $sm_enable_tls = auto; then + if test "$sm_version_major" = "8.11"; then + { echo "$as_me:$LINENO: WARNING: SFIO is disabled, not trying TLS" >&5 +echo "$as_me: WARNING: SFIO is disabled, not trying TLS" >&2;} + fi; + fi; +elif test $sm_enable_sfio != no; then + if test "$sm_version_major" = "8.11"; then + { echo "$as_me:$LINENO: WARNING: TLS is disabled, no need for SFIO" >&5 +echo "$as_me: WARNING: TLS is disabled, no need for SFIO" >&2;} + fi; + sm_enable_sfio=no; + fi; + +#------------------------------------------------------------------- +# +# Check for presence of REGEX headers +# +sm_have_regex=no; +if test $sm_enable_regex != no; then + # On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in regex.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_regex=yes + +else + sm_have_regex=no +fi + +done + + + if test $ac_cv_header_regex_h = yes ; then + { echo "$as_me:$LINENO: checking for regfree" >&5 +echo $ECHO_N "checking for regfree... $ECHO_C" >&6; } +if test "${ac_cv_func_regfree+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define regfree to an innocuous variant, in case <limits.h> declares regfree. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define regfree innocuous_regfree + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char regfree (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef regfree + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char regfree (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_regfree || defined __stub___regfree +choke me +#endif + +int +main () +{ +return regfree (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_regfree=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_regfree=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_regfree" >&5 +echo "${ECHO_T}$ac_cv_func_regfree" >&6; } +if test $ac_cv_func_regfree = yes; then + : + +else + { { echo "$as_me:$LINENO: error: POSIX regex required." >&5 +echo "$as_me: error: POSIX regex required." >&2;} + { (exit 1); exit 1; }; } + +fi + + fi; + + if test $sm_have_regex = yes; then + sm_databases="$sm_databases, REGEX"; + sm_mapdef="$sm_mapdef -DMAP_REGEX"; + elif test $sm_enable_regex = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate REGEX package" >&5 +echo "$as_me: WARNING: Could not locate REGEX package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate REGEX package" >&5 +echo "$as_me: error: Could not locate REGEX package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_regex=$sm_have_regex; + +#------------------------------------------------------------------- +# +# Check for presence of NDBM headers +# +sm_have_ndbm=no; +if test $sm_enable_ndbm != no; then + + +for ac_header in ndbm.h db1/ndbm.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_ndbm=yes + +else + sm_have_ndbm=no +fi + +done + + + if test $sm_have_ndbm != no; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_DB1_NDBM_H) + #include <db1/ndbm.h> + #elif defined(HAVE_NDBM_H) + #include <ndbm.h> + #endif + dbm_pagfno(0); + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "DBM_PAGFNO_NOT_AVAILABLE" >/dev/null 2>&1; then + sm_have_ndbm=no +fi +rm -f conftest* + + + if test $sm_have_ndbm = no; then + { echo "$as_me:$LINENO: WARNING: DB emulation of ndbm not sufficient, -lndbm ignored" >&5 +echo "$as_me: WARNING: DB emulation of ndbm not sufficient, -lndbm ignored" >&2;} + fi; + fi; + + if test $sm_have_ndbm != no; then + { echo "$as_me:$LINENO: checking for main in -lndbm" >&5 +echo $ECHO_N "checking for main in -lndbm... $ECHO_C" >&6; } +if test "${ac_cv_lib_ndbm_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lndbm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ndbm_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ndbm_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ndbm_main" >&5 +echo "${ECHO_T}$ac_cv_lib_ndbm_main" >&6; } +if test $ac_cv_lib_ndbm_main = yes; then + sm_have_ndmb=yes + +else + sm_have_ndmb=no +fi + + + if test $sm_have_ndbm = no; then + { echo "$as_me:$LINENO: WARNING: Could not find -lndbm" >&5 +echo "$as_me: WARNING: Could not find -lndbm" >&2;} + fi; + fi; + + # only libsmdb and sendmail #include <ndbm.h>, but libsmdb is needed + # by most of the other components + if test $sm_have_ndbm = yes; then + sm_databases="$sm_databases, DBM"; + sm_mapdef="$sm_mapdef -DNDBM"; + sm_editmap_libs="$sm_editmap_libs -lndbm"; + sm_makemap_libs="$sm_makemap_libs -lndbm"; + sm_praliases_libs="$sm_praliases_libs -lndbm"; + sm_sendmail_libs="$sm_sendmail_libs -lndbm"; + sm_vacation_libs="$sm_vacation_libs -lndbm"; + elif test $sm_enable_ndbm = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate NDBM package" >&5 +echo "$as_me: WARNING: Could not locate NDBM package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate NDBM package" >&5 +echo "$as_me: error: Could not locate NDBM package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_ndbm=$sm_have_ndbm; + +#------------------------------------------------------------------- +# +# Check for presence of NEWDB headers (and determine version) +# +sm_have_newdb=no; +sm_use_185=no; +sm_newdb_lib=; +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 +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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if [ $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 + sm_have_newdb=yes; + fi; + + if test $sm_have_newdb = yes; then + { echo "$as_me:$LINENO: checking newdb version" >&5 +echo $ECHO_N "checking newdb version... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_DB4_DB_H) + #include <db4/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #if DB_VERSION_MAJOR >= 4 + sm_newdb_lib=4 + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_newdb_lib=4" >/dev/null 2>&1; then + sm_newdb_lib=db4 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_DB3_DB_H) + #include <db3/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #if DB_VERSION_MAJOR >= 3 + sm_newdb_lib=3 + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_newdb_lib=3" >/dev/null 2>&1; then + sm_newdb_lib=db3 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_DB2_DB_H) + #include <db2/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #if DB_VERSION_MAJOR >= 2 + sm_newdb_lib=2 + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_newdb_lib=2" >/dev/null 2>&1; then + sm_newdb_lib=db2 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_DB1_DB_H) + #include <db1/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #ifndef DB_VERSION_MAJOR + #define DB_VERSION_MAJOR 1 + #endif + #if DB_VERSION_MAJOR >= 1 + sm_newdb_lib=1 + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_newdb_lib=1" >/dev/null 2>&1; then + sm_newdb_lib=db1 +fi +rm -f conftest* + + +fi +rm -f conftest* + + +fi +rm -f conftest* + + +fi +rm -f conftest* + + # < 8.10.x can't handle db3+ + v2i 8.10.0; + if test $sm_version_math -lt $sm_version_test; then + #if t[ $ac_cv_header_db3_db_185_h = yes ] \ + #|| [ $ac_cv_header_db_185_h = yes ]; then + # sm_use_185=yes; + #else + ac_cv_header_db4_db_h=no; + ac_cv_header_db3_db_h=no; + if [ $sm_newdb_lib = db4 ] \ + || [ $sm_newdb_lib = db3 ]; then + if test $ac_cv_header_db2_db_h = yes; then + { echo "$as_me:$LINENO: WARNING: <8.10.0 & $sm_newdb_lib: trying db2" >&5 +echo "$as_me: WARNING: <8.10.0 & $sm_newdb_lib: trying db2" >&2;} + sm_newdb_lib=db2; + else + { echo "$as_me:$LINENO: WARNING: <8.10.0 & $sm_newdb_lib: trying db1" >&5 +echo "$as_me: WARNING: <8.10.0 & $sm_newdb_lib: trying db1" >&2;} + sm_newdb_lib=db1; + fi; + fi; + # fi; + fi; + # < 8.9.0 can't handle db2+ ???? + v2i 8.9.0; + if test $sm_version_math -lt $sm_version_test; then + ac_cv_header_db4_db_h=no; + ac_cv_header_db3_db_h=no; + ac_cv_header_db2_db_h=no; + if test $sm_newdb_lib = db2; then + { echo "$as_me:$LINENO: WARNING: <8.9.0 & $sm_newdb_lib: trying db1" >&5 +echo "$as_me: WARNING: <8.9.0 & $sm_newdb_lib: trying db1" >&2;} + sm_newdb_lib=db1; + fi; + fi; + { echo "$as_me:$LINENO: result: $sm_newdb_lib" >&5 +echo "${ECHO_T}$sm_newdb_lib" >&6; } + if test "X$sm_newdb_lib" = "X"; then + { echo "$as_me:$LINENO: WARNING: NEWDB version unknown, omitting support!" >&5 +echo "$as_me: WARNING: NEWDB version unknown, omitting support!" >&2;} + sm_have_newdb=no; + fi; + fi; + + # Check first for a library matching the db version (-ldb4, etc) + # then check to see if -ldb will work + if test $sm_have_newdb != no; then + sm_old_libs="$LIBS"; + if test $sm_newdb_lib = db4; then + { echo "$as_me:$LINENO: checking for db_create in -ldb-4.6" >&5 +echo $ECHO_N "checking for db_create in -ldb-4.6... $ECHO_C" >&6; } +if test "${ac_cv_lib_db_4_6_db_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb-4.6 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_4_6_db_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_4_6_db_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_4_6_db_create" >&5 +echo "${ECHO_T}$ac_cv_lib_db_4_6_db_create" >&6; } +if test $ac_cv_lib_db_4_6_db_create = yes; then + sm_newdb_lib='db-4.6' +else + + { echo "$as_me:$LINENO: checking for db_create in -ldb-4.5" >&5 +echo $ECHO_N "checking for db_create in -ldb-4.5... $ECHO_C" >&6; } +if test "${ac_cv_lib_db_4_5_db_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb-4.5 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_4_5_db_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_4_5_db_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_4_5_db_create" >&5 +echo "${ECHO_T}$ac_cv_lib_db_4_5_db_create" >&6; } +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 $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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb-4.4 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_4_4_db_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_4_4_db_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_4_4_db_create" >&5 +echo "${ECHO_T}$ac_cv_lib_db_4_4_db_create" >&6; } +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 $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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb-4.3 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_4_3_db_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_4_3_db_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_4_3_db_create" >&5 +echo "${ECHO_T}$ac_cv_lib_db_4_3_db_create" >&6; } +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 $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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb-4.2 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create_4002 (); +int +main () +{ +return db_create_4002 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_4_2_db_create_4002=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_4_2_db_create_4002=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_4_2_db_create_4002" >&5 +echo "${ECHO_T}$ac_cv_lib_db_4_2_db_create_4002" >&6; } +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 $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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_db_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_db_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_db_create" >&5 +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 +fi + +fi + +fi + +fi + +fi + +fi + elif test $sm_newdb_lib = db3; then + as_ac_Lib=`echo "ac_cv_lib_$sm_newdb_lib''_db_create" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for db_create in -l$sm_newdb_lib" >&5 +echo $ECHO_N "checking for db_create in -l$sm_newdb_lib... $ECHO_C" >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$sm_newdb_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval echo '${'$as_ac_Lib'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + : +else + + { 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 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_create (); +int +main () +{ +return db_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_db_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_db_create=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_db_create" >&5 +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 +fi + +fi + elif test $sm_newdb_lib = db2; then + as_ac_Lib=`echo "ac_cv_lib_$sm_newdb_lib''_db_open" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for db_open in -l$sm_newdb_lib" >&5 +echo $ECHO_N "checking for db_open in -l$sm_newdb_lib... $ECHO_C" >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$sm_newdb_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_open (); +int +main () +{ +return db_open (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval echo '${'$as_ac_Lib'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + : +else + + { echo "$as_me:$LINENO: checking for db_open in -ldb" >&5 +echo $ECHO_N "checking for db_open in -ldb... $ECHO_C" >&6; } +if test "${ac_cv_lib_db_db_open+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char db_open (); +int +main () +{ +return db_open (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_db_open=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_db_open=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_db_open" >&5 +echo "${ECHO_T}$ac_cv_lib_db_db_open" >&6; } +if test $ac_cv_lib_db_db_open = yes; then + sm_newdb_lib='db' +else + sm_have_newdb=no +fi + +fi + else + as_ac_Lib=`echo "ac_cv_lib_$sm_newdb_lib''_dbopen" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for dbopen in -l$sm_newdb_lib" >&5 +echo $ECHO_N "checking for dbopen in -l$sm_newdb_lib... $ECHO_C" >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$sm_newdb_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dbopen (); +int +main () +{ +return dbopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval echo '${'$as_ac_Lib'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + : +else + + { echo "$as_me:$LINENO: checking for dbopen in -ldb" >&5 +echo $ECHO_N "checking for dbopen in -ldb... $ECHO_C" >&6; } +if test "${ac_cv_lib_db_dbopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dbopen (); +int +main () +{ +return dbopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_dbopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_dbopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_dbopen" >&5 +echo "${ECHO_T}$ac_cv_lib_db_dbopen" >&6; } +if test $ac_cv_lib_db_dbopen = yes; then + sm_newdb_lib='db' +else + sm_have_newdb=no +fi + +fi + fi; + if test $sm_newdb_lib = db; then + as_ac_Lib=`echo "ac_cv_lib_$sm_newdb_lib''_dbopen" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for dbopen in -l$sm_newdb_lib" >&5 +echo $ECHO_N "checking for dbopen in -l$sm_newdb_lib... $ECHO_C" >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$sm_newdb_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dbopen (); +int +main () +{ +return dbopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval echo '${'$as_ac_Lib'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + : +else + + { echo "$as_me:$LINENO: checking for dbopen in -ldb" >&5 +echo $ECHO_N "checking for dbopen in -ldb... $ECHO_C" >&6; } +if test "${ac_cv_lib_db_dbopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldb $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dbopen (); +int +main () +{ +return dbopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_db_dbopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_db_dbopen=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_db_dbopen" >&5 +echo "${ECHO_T}$ac_cv_lib_db_dbopen" >&6; } +if test $ac_cv_lib_db_dbopen = yes; then + sm_newdb_lib='db' +else + sm_have_newdb=no +fi + +fi + fi; + LIBS="$sm_old_libs"; + + if test $sm_have_newdb != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -l$sm_newdb_lib (or -ldb)" >&5 +echo "$as_me: WARNING: Could not find -l$sm_newdb_lib (or -ldb)" >&2;} + fi; + fi; + + # only libsmdb and sendmail #include <db.h>, but libsmdb is needed + # by most of the other components + if test $sm_have_newdb = yes; then + if test \( $ac_cv_header_db4_db_h = yes -a $sm_newdb_lib = db4 \) \ + -o \( $ac_cv_header_db3_db_h = yes -a $sm_newdb_lib = db3 \) \ + -o \( $ac_cv_header_db2_db_h = yes -a $sm_newdb_lib = db2 \) \ + -o \( $ac_cv_header_db1_db_h = yes -a $sm_newdb_lib = db1 \); then + sm_libsmdb_envdef="$sm_libsmdb_envdef -I/usr/include/$sm_newdb_lib"; + sm_sendmail_envdef="$sm_sendmail_envdef -I/usr/include/$sm_newdb_lib"; + fi; + if test $sm_use_185 = yes; then + : + #sm_libsmdb_envdef="$sm_libsmdb_envdef -Ddb.h db_185.h"; + #sm_sendmail_envdef="$sm_sendmail_envdef -Ddb.h db_185.h"; + fi; + junk=$(echo "${sm_newdb_lib}" | sed -e 's/^db\(-\)\?//'); + sm_databases="$sm_databases, DB"; + if test $junk != 1; then + sm_badepends="$sm_badepends, libdb${junk}-dev"; + fi; + sm_mapdef="$sm_mapdef -DNEWDB"; + junk=$(echo "${sm_newdb_lib}" | sed -e 's/^db//'); + sm_newdb_lib="-ldb${junk}"; + sm_editmap_libs="$sm_editmap_libs $sm_newdb_lib"; + sm_makemap_libs="$sm_makemap_libs $sm_newdb_lib"; + sm_praliases_libs="$sm_praliases_libs $sm_newdb_lib"; + sm_sendmail_libs="$sm_sendmail_libs $sm_newdb_lib"; + sm_vacation_libs="$sm_vacation_libs $sm_newdb_lib"; + elif test $sm_enable_newdb = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate NEWDB (libdb{4,3,2,1,}-dev) package" >&5 +echo "$as_me: WARNING: Could not locate NEWDB (libdb{4,3,2,1,}-dev) package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate NEWDB (libdb{4,3,2,1,}-dev) package" >&5 +echo "$as_me: error: Could not locate NEWDB (libdb{4,3,2,1,}-dev) package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_newdb=$sm_have_newdb; + + +#------------------------------------------------------------------- +# +# Check for presence of NIS headers +# +sm_have_nis=no; +if test $sm_enable_nis != no; then + +for ac_header in rpcsvc/ypclnt.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_nis=yes + +else + sm_have_nis=no +fi + +done + + + if test $sm_have_nis = yes; then + { echo "$as_me:$LINENO: checking for main in -lnsl" >&5 +echo $ECHO_N "checking for main in -lnsl... $ECHO_C" >&6; } +if test "${ac_cv_lib_nsl_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_nsl_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_nsl_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5 +echo "${ECHO_T}$ac_cv_lib_nsl_main" >&6; } +if test $ac_cv_lib_nsl_main = yes; then + sm_have_nis=yes + +else + sm_have_nis=no +fi + + + if test $sm_have_nis != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -lnsl" >&5 +echo "$as_me: WARNING: Could not find -lnsl" >&2;} + fi; + fi; + + if test $sm_have_nis = yes; then + sm_databases="$sm_databases, NIS"; + sm_mapdef="$sm_mapdef -DNIS"; + sm_sendmail_libs="$sm_sendmail_libs -lnsl"; + elif test $sm_enable_nis = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate NIS package" >&5 +echo "$as_me: WARNING: Could not locate NIS package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate NIS package" >&5 +echo "$as_me: error: Could not locate NIS package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_nis=$sm_have_nis; + +#------------------------------------------------------------------- +# +# Check for presence of NISPLUS headers +# +sm_have_nisplus=no; +if test $sm_enable_nisplus != no; then + +for ac_header in rpcsvc/nis.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_nisplus=yes + +else + sm_have_nisplus=no +fi + +done + + + if [ $sm_have_nisplus = yes ] \ + && [ $sm_have_nis = no ]; then + { echo "$as_me:$LINENO: checking for main in -lnsl" >&5 +echo $ECHO_N "checking for main in -lnsl... $ECHO_C" >&6; } +if test "${ac_cv_lib_nsl_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_nsl_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_nsl_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5 +echo "${ECHO_T}$ac_cv_lib_nsl_main" >&6; } +if test $ac_cv_lib_nsl_main = yes; then + sm_have_nis=yes + +else + sm_have_nis=no +fi + + + if test $sm_have_nis != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -lnsl" >&5 +echo "$as_me: WARNING: Could not find -lnsl" >&2;} + fi; + fi; + + if test $sm_have_nisplus = yes; then + sm_databases="$sm_databases, NIS+"; + sm_mapdef="$sm_mapdef -DNISPLUS"; + if test $sm_have_nis != yes; then + sm_sendmail_libs="$sm_sendmail_libs -lnsl"; + fi; + elif test $sm_enable_nisplus = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate NISPLUS package" >&5 +echo "$as_me: WARNING: Could not locate NISPLUS package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate NISPLUS package" >&5 +echo "$as_me: error: Could not locate NISPLUS package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_nisplus=$sm_have_nisplus; + +#------------------------------------------------------------------- +# +# Check for presence of LDAP headers (support OpenLDAP v2/v1, Umich) +# +sm_have_ldap=no; +sm_have_ldap_init=no; +sm_have_ldap_memfree=no; +sm_ldap_inc=; +sm_ldap_lib=; +sm_ldap_pkg=; +if test $sm_enable_ldap != no; then + + +for ac_header in ldap.h umich-ldap/ldap.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + if test $ac_cv_header_ldap_h = yes; then + { echo "$as_me:$LINENO: checking for main in -lldap" >&5 +echo $ECHO_N "checking for main in -lldap... $ECHO_C" >&6; } +if test "${ac_cv_lib_ldap_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap -llber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ldap_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldap_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_main" >&5 +echo "${ECHO_T}$ac_cv_lib_ldap_main" >&6; } +if test $ac_cv_lib_ldap_main = yes; then + sm_have_ldap=yes + +else + sm_have_ldap=no + +fi + + { echo "$as_me:$LINENO: checking for ldap_init in -lldap" >&5 +echo $ECHO_N "checking for ldap_init in -lldap... $ECHO_C" >&6; } +if test "${ac_cv_lib_ldap_ldap_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap -llber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ldap_init (); +int +main () +{ +return ldap_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ldap_ldap_init=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldap_ldap_init=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_ldap_init" >&5 +echo "${ECHO_T}$ac_cv_lib_ldap_ldap_init" >&6; } +if test $ac_cv_lib_ldap_ldap_init = yes; then + sm_have_ldap_init=yes + +else + sm_have_ldap_init=no + +fi + + { echo "$as_me:$LINENO: checking for ldap_memfree in -lldap" >&5 +echo $ECHO_N "checking for ldap_memfree in -lldap... $ECHO_C" >&6; } +if test "${ac_cv_lib_ldap_ldap_memfree+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lldap -llber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ldap_memfree (); +int +main () +{ +return ldap_memfree (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ldap_ldap_memfree=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ldap_ldap_memfree=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_ldap_memfree" >&5 +echo "${ECHO_T}$ac_cv_lib_ldap_ldap_memfree" >&6; } +if test $ac_cv_lib_ldap_ldap_memfree = yes; then + sm_have_ldap_memfree=yes + +else + sm_have_ldap_memfree=no + +fi + + + if test $sm_have_ldap = yes; then + { echo "$as_me:$LINENO: checking for main in -llber" >&5 +echo $ECHO_N "checking for main in -llber... $ECHO_C" >&6; } +if test "${ac_cv_lib_lber_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_lber_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_lber_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_lber_main" >&5 +echo "${ECHO_T}$ac_cv_lib_lber_main" >&6; } +if test $ac_cv_lib_lber_main = yes; then + sm_have_ldap=yes + +else + sm_have_ldap=no +fi + + fi; + + if test $sm_have_ldap = yes; then + { echo "$as_me:$LINENO: checking for openldap package" >&5 +echo $ECHO_N "checking for openldap package... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_LDAP_H) + #include <ldap.h> + #if defined(LDAP_VERSION3) + sm_ldap_version=3 + #else + sm_ldap_version=2 + #endif + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_ldap_version=3" >/dev/null 2>&1; then + sm_ldap_pkg="libldap2-dev" + +else + sm_ldap_pkg="libopenldap-dev" +fi +rm -f conftest* + + { echo "$as_me:$LINENO: result: $sm_ldap_pkg" >&5 +echo "${ECHO_T}$sm_ldap_pkg" >&6; } + fi; + + if test $sm_have_ldap = yes; then + sm_badepends="$sm_badepends, $sm_ldap_pkg" + sm_ldap_lib="-lldap -llber"; + else + { echo "$as_me:$LINENO: WARNING: Could not find OpenLDAP -lldap or -llber" >&5 +echo "$as_me: WARNING: Could not find OpenLDAP -lldap or -llber" >&2;} + fi; + fi; + + if [ "X$ac_cv_header_umich_ldap_ldap_h" = Xyes ] \ + && [ $sm_have_ldap != yes ]; then + { echo "$as_me:$LINENO: checking for main in -lumich_ldap" >&5 +echo $ECHO_N "checking for main in -lumich_ldap... $ECHO_C" >&6; } +if test "${ac_cv_lib_umich_ldap_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lumich_ldap -lumich_lber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_umich_ldap_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_umich_ldap_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_umich_ldap_main" >&5 +echo "${ECHO_T}$ac_cv_lib_umich_ldap_main" >&6; } +if test $ac_cv_lib_umich_ldap_main = yes; then + sm_have_ldap=yes + +else + sm_have_ldap=no + +fi + + + if test $sm_have_ldap = yes; then + { echo "$as_me:$LINENO: checking for main in -lumich_lber" >&5 +echo $ECHO_N "checking for main in -lumich_lber... $ECHO_C" >&6; } +if test "${ac_cv_lib_umich_lber_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lumich_lber $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_umich_lber_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_umich_lber_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_umich_lber_main" >&5 +echo "${ECHO_T}$ac_cv_lib_umich_lber_main" >&6; } +if test $ac_cv_lib_umich_lber_main = yes; then + sm_have_ldap=yes + +else + sm_have_ldap=no +fi + + fi; + + if test $sm_have_ldap = yes; then + sm_badepends="$sm_badepends, umich-libldap-dev"; + sm_ldap_inc="-I/usr/include/umich-ldap"; + sm_ldap_lib="-lumich_ldap -lumich_lber"; + else + { echo "$as_me:$LINENO: WARNING: Could not find UMich -lldap or -llber" >&5 +echo "$as_me: WARNING: Could not find UMich -lldap or -llber" >&2;} + fi; + fi; + + if test $sm_have_ldap = yes; then + # + # sendmail/conf.h includes LDAP, so everything does... + sm_databases="$sm_databases, LDAP"; + sm_mapdef="$sm_mapdef -DLDAPMAP"; + sm_incdirs="$sm_incdirs $sm_ldap_inc"; + #sm_libs="$sm_libs $sm_ldap_lib"; + sm_editmap_libs="$sm_editmap_libs $sm_ldap_lib"; + sm_libsm_libs="$sm_libsm_libs $sm_ldap_lib"; + sm_mail_local_libs="$sm_mail_local_libs $sm_ldap_lib"; + sm_mailstats_libs="$sm_mailstats_libs $sm_ldap_lib"; + sm_makemap_libs="$sm_makemap_libs $sm_ldap_lib"; + sm_praliases_libs="$sm_praliases_libs $sm_ldap_lib"; + sm_rmail_libs="$sm_rmail_libs $sm_ldap_lib"; + sm_sendmail_libs="$sm_sendmail_libs $sm_ldap_lib"; + sm_smrsh_libs="$sm_smrsh_libs $sm_ldap_lib"; + sm_vacation_libs="$sm_vacation_libs $sm_ldap_lib"; + sm_libsm_envdef="$sm_libsm_envdef -D_LDAP_EXAMPLE_"; + if test $sm_have_ldap_init = yes; then + sm_libsm_envdef="$sm_libsm_envdef -DLDAP_REFERRALS"; + sm_sendmail_envdef="$sm_sendmail_envdef -DLDAP_REFERRALS"; + sm_libsm_envdef="$sm_libsm_envdef -D_FFR_LDAP_URI"; + sm_sendmail_envdef="$sm_sendmail_envdef -D_FFR_LDAP_URI"; + sm_libsm_envdef="$sm_libsm_envdef -D_FFR_LDAP_SETVERSION"; + sm_sendmail_envdef="$sm_sendmail_envdef -D_FFR_LDAP_SETVERSION"; + fi; + if test $sm_have_ldap_memfree = yes; then + sm_libsm_envdef="$sm_libsm_envdef -DSM_CONF_LDAP_MEMFREE"; + fi; + elif test $sm_enable_ldap = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate LDAP (libldap2-dev) package" >&5 +echo "$as_me: WARNING: Could not locate LDAP (libldap2-dev) package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate LDAP (libldap2-dev) package" >&5 +echo "$as_me: error: Could not locate LDAP (libldap2-dev) package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_ldap=$sm_have_ldap; + if test x$sm_enable_ldap = xyes; then + SM_ENABLE_LDAP_TRUE= + SM_ENABLE_LDAP_FALSE='#' +else + SM_ENABLE_LDAP_TRUE='#' + SM_ENABLE_LDAP_FALSE= +fi + + +#------------------------------------------------------------------- +# +# Check for presence of resolve(and/or bind) headers +# if found, enable other maps dependant upon resolver libraries +# +# Since GLIBC 2.2.1 has mucked with resolv.h, we must build w/bind 8.2.2p7 +# Unfortunately, this will fsck up HESIOD (bind 8.2 only has partial support) +# It also messed with openLDAP - making it not work ;( +# +# We're now using resolv.h - as it seems to be working (w/sendmail changes) +# +sm_have_resolve=no; +sm_have_bind=no; +resolve_lib=''; +resolve_inc=''; +#if test $sm_enable_resolv != no; then + + +for ac_header in resolv.h bind/resolv.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_resolv_h = yes; then + sm_have_resolve=yes; + fi; + if test $ac_cv_header_bind_resolv_h = yes; then + sm_have_bind=yes; + fi; + + if test $ac_cv_header_resolv_h = yes; then + { echo "$as_me:$LINENO: checking for __res_query in -lresolv" >&5 +echo $ECHO_N "checking for __res_query in -lresolv... $ECHO_C" >&6; } +if test "${ac_cv_lib_resolv___res_query+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char __res_query (); +int +main () +{ +return __res_query (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_resolv___res_query=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_resolv___res_query=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_resolv___res_query" >&5 +echo "${ECHO_T}$ac_cv_lib_resolv___res_query" >&6; } +if test $ac_cv_lib_resolv___res_query = yes; then + sm_have_resolve=yes + +else + { echo "$as_me:$LINENO: checking for res_query in -lresolv" >&5 +echo $ECHO_N "checking for res_query in -lresolv... $ECHO_C" >&6; } +if test "${ac_cv_lib_resolv_res_query+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char res_query (); +int +main () +{ +return res_query (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_resolv_res_query=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_resolv_res_query=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_res_query" >&5 +echo "${ECHO_T}$ac_cv_lib_resolv_res_query" >&6; } +if test $ac_cv_lib_resolv_res_query = yes; then + sm_have_resolve=yes + +else + sm_have_resolve=no +fi + + +fi + + + if test $sm_have_resolve = yes; then + resolve_inc=''; + resolve_lib='-lresolv'; + else + { echo "$as_me:$LINENO: WARNING: Could not find -lresolv" >&5 +echo "$as_me: WARNING: Could not find -lresolv" >&2;} + fi; + fi; + + if test $ac_cv_header_bind_resolv_h = yes; then + { echo "$as_me:$LINENO: checking for __res_query in -lbind" >&5 +echo $ECHO_N "checking for __res_query in -lbind... $ECHO_C" >&6; } +if test "${ac_cv_lib_bind___res_query+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbind $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char __res_query (); +int +main () +{ +return __res_query (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_bind___res_query=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_bind___res_query=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_bind___res_query" >&5 +echo "${ECHO_T}$ac_cv_lib_bind___res_query" >&6; } +if test $ac_cv_lib_bind___res_query = yes; then + sm_have_bind=yes + +else + sm_have_bind=no +fi + + + if test $sm_have_bind = yes; then + if test $sm_enable_bind = yes; then + sm_badepends="$sm_badepends, bind-dev"; + resolve_inc='-I/usr/include/bind'; + resolve_lib='-lbind -lresolv'; + else + sm_have_bind=no; + fi; + else + { echo "$as_me:$LINENO: WARNING: Could not find -lbind (bind-dev)" >&5 +echo "$as_me: WARNING: Could not find -lbind (bind-dev)" >&2;} + fi; + fi; + + if test $sm_have_resolve = yes; then + v2i 8.12.0; + if test $sm_version_math -ge $sm_version_test; then + sm_databases="$sm_databases, DNS"; + fi; + #sm_incdirs="$sm_incdirs $resolve_inc"; + #sm_libs="$sm_libs "$resolve_lib"; + sm_sendmail_envdef="$sm_sendmail_envdef $resolve_inc"; + sm_sendmail_libs="$sm_sendmail_libs $resolve_lib"; + else + { { echo "$as_me:$LINENO: error: Could not locate RESOLV package" >&5 +echo "$as_me: error: Could not locate RESOLV package" >&2;} + { (exit 1); exit 1; }; } + fi; +# fi; +sm_enable_bind=$sm_have_bind; + +#------------------------------------------------------------------- +# +# Check for presence of HESIOD headers +# Note: if using libhesiod, we should have HES_GETMAILHOST +# if using libbind, it doesn't have HES_GETMAILHOST ;-{ +# +sm_have_hesiod=no; +sm_hesiod_parms=''; +if test $sm_enable_hesiod != no; then + + +for ac_header in hesiod.h bind/hesiod.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_hesiod_h = yes; then + sm_have_hesiod=yes; + elif [ $ac_cv_header_bind_hesiod_h = yes ] \ + && [ $sm_have_bind = yes ]; then + sm_have_hesiod=yes; + fi; + + if test $sm_have_hesiod = yes; then + { echo "$as_me:$LINENO: checking for hes_getmailhost" >&5 +echo $ECHO_N "checking for hes_getmailhost... $ECHO_C" >&6; } + CPPFLAGS_SAVE="$CPPFLAGS"; + CPPFLAGS="$resolve_inc"; + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include <hesiod.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "hes_getmailhost\(" >/dev/null 2>&1; then + sm_hesiod_parms="-DHES_GETMAILHOST" +fi +rm -f conftest* + + CPPFLAGS="$CPPFLAGS_SAVE"; + if test -z "$sm_hesiod_parms"; then + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + else + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + fi; + fi; + + if test $sm_have_hesiod = yes; then + sm_databases="$sm_databases, HESIOD"; + sm_badepends="$sm_badepends, libhesiod-dev"; + sm_mapdef="$sm_mapdef -DHESIOD"; + sm_libsmutil_envdef="$sm_libsmutil_envdef $resolve_inc"; + sm_sendmail_envdef="$sm_sendmail_envdef $sm_hesiod_parms"; + # Need following if not using bind headers + if test -z "$resolve_inc"; then + sm_sendmail_libs="$sm_sendmail_libs -lhesiod"; + fi; + elif test $sm_enable_hesiod = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate HESIOD (libhesiod-dev) package" >&5 +echo "$as_me: WARNING: Could not locate HESIOD (libhesiod-dev) package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate HESIOD (libhesiod-dev) package" >&5 +echo "$as_me: error: Could not locate HESIOD (libhesiod-dev) package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_hesiod=$sm_have_hesiod; + +#------------------------------------------------------------------- +# +# Check for presence of TCP Wrapper headers +# +sm_have_tcpd=no; +if test $sm_enable_tcpd != no; then + +for ac_header in tcpd.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_tcpd=yes + +else + sm_have_tcpd=no +fi + +done + + + if test $ac_cv_header_tcpd_h = yes ; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + int allow_severity = 0; + int deny_severity = 0; + + +int +main () +{ +hosts_access() + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + sm_have_tcpd=yes + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + sm_have_tcpd=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi; + + if test $sm_have_tcpd = yes; then + { echo "$as_me:$LINENO: checking for main in -lwrap" >&5 +echo $ECHO_N "checking for main in -lwrap... $ECHO_C" >&6; } +if test "${ac_cv_lib_wrap_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lwrap $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_wrap_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_wrap_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_wrap_main" >&5 +echo "${ECHO_T}$ac_cv_lib_wrap_main" >&6; } +if test $ac_cv_lib_wrap_main = yes; then + sm_have_tcpd=yes + +else + sm_have_tcpd=no +fi + + + if test $sm_have_tcpd != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -lwrap (libwrap0-dev)" >&5 +echo "$as_me: WARNING: Could not find -lwrap (libwrap0-dev)" >&2;} + fi; + fi; + + if test $sm_have_tcpd = yes; then + sm_features="$sm_features, TCPWrappers"; + sm_badepends="$sm_badepends, libwrap0-dev"; + sm_sendmail_envdef="$sm_sendmail_envdef -DTCPWRAPPERS"; + sm_sendmail_libs="$sm_sendmail_libs -lwrap"; + elif test $sm_enable_tcpd = auto; then + { echo "$as_me:$LINENO: WARNING: TCPD(libwrap0-dev) protection not supported!" >&5 +echo "$as_me: WARNING: TCPD(libwrap0-dev) protection not supported!" >&2;} + else + { { echo "$as_me:$LINENO: error: TCPD(libwrap0-dev) protection not supported!" >&5 +echo "$as_me: error: TCPD(libwrap0-dev) protection not supported!" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_tcpd=$sm_have_tcpd; + +#------------------------------------------------------------------- +# +# Check for presence of IPV6 headers +# +sm_have_ipv6=no; +if test $sm_enable_ipv6 != no; then + +for ac_header in netinet/ip6.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_ipv6=yes + +else + sm_have_ipv6=no +fi + +done + + + if test $ac_cv_header_netinet_ip6_h = yes ; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include <netdb.h> + #if defined(AI_DEFAULT) + sm_have_ipv6=yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_have_ipv6=yes" >/dev/null 2>&1; then + sm_have_ipv6=yes +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include <bind/netdb.h> + #if defined(AI_DEFAULT) + sm_have_ipv6=yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_have_ipv6=yes" >/dev/null 2>&1; then + sm_have_ipv6=yes +fi +rm -f conftest* + + +fi +rm -f conftest* + + if test $sm_have_ipv6 = no; then + { { echo "$as_me:$LINENO: error: Your level of netdb precludes IPv6 support" >&5 +echo "$as_me: error: Your level of netdb precludes IPv6 support" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; + + if test $sm_have_ipv6 = yes; then + +for ac_func in getaddrinfo +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + sm_have_ipv6=yes + +else + sm_have_ipv6=no +fi +done + + if test $sm_have_ipv6 = no; then + { { echo "$as_me:$LINENO: error: IPv6 support requires getaddrinfo" >&5 +echo "$as_me: error: IPv6 support requires getaddrinfo" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; + + if test $sm_have_ipv6 = yes; then + v2i 8.10.0; + if test $sm_version_math -ge $sm_version_test; then + sm_features="$sm_features, IPv6"; + # Needed by sendmail, libmilter, maybe others + sm_envdef="$sm_envdef -DNETINET6"; + # Need following if using bind headers + if test ! -z "$resolve_inc"; then + sm_envdef="$sm_envdef -DNEEDSGETIPNODE=0"; + fi; + fi; + elif test $sm_enable_ipv6 = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate IPv6 package" >&5 +echo "$as_me: WARNING: Could not locate IPv6 package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate IPv6 package" >&5 +echo "$as_me: error: Could not locate IPv6 package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_ipv6=$sm_have_ipv6; + +#------------------------------------------------------------------- +# +# Check for presence of maillock headers +# +sm_have_maillock=no; +if test $sm_enable_maillock != no; then + +for ac_header in maillock.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_maillock=yes + +else + sm_have_maillock=no +fi + +done + + + if test $ac_cv_header_maillock_h = yes ; then + { echo "$as_me:$LINENO: checking for main in -llockfile" >&5 +echo $ECHO_N "checking for main in -llockfile... $ECHO_C" >&6; } +if test "${ac_cv_lib_lockfile_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llockfile $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_lockfile_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_lockfile_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_lockfile_main" >&5 +echo "${ECHO_T}$ac_cv_lib_lockfile_main" >&6; } +if test $ac_cv_lib_lockfile_main = yes; then + sm__have_maillock=yes + +else + sm_have_maillock=no +fi + + + if test $sm_have_maillock != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -llockfile (liblockfile-dev)" >&5 +echo "$as_me: WARNING: Could not find -llockfile (liblockfile-dev)" >&2;} + fi; + fi; + + if test $sm_have_maillock = yes; then + sm_features="$sm_features, LockFile"; + sm_badepends="$sm_badepends, liblockfile-dev"; + sm_mail_local_envdef="$sm_mail_local_envdef -DMAILLOCK"; + sm_mail_local_libs="$sm_mail_local_libs -llockfile"; + elif test $sm_enable_maillock = auto; then + { echo "$as_me:$LINENO: WARNING: Could not locate liblockfile-dev package" >&5 +echo "$as_me: WARNING: Could not locate liblockfile-dev package" >&2;} + else + { { echo "$as_me:$LINENO: error: Could not locate liblockfile-dev package" >&5 +echo "$as_me: error: Could not locate liblockfile-dev package" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_maillock=$sm_have_maillock; + +#------------------------------------------------------------------- +# +# Check for presence of SFIO headers +# Note: required for TLS and security layer of SASL on 8.11) +# Note: SFIO is *only* used if required, but we allow the checks +# on any version (for header test) - just issue no messages +# unless needed +# +sm_have_sfio=no; +if test $sm_enable_sfio != no; then + CPPFLAGS_SAVE="$CPPFLAGS"; + CPPFLAGS="-I/usr/include/sfio" + +for ac_header in sfio/stdio.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_sfio=yes + +else + sm_have_sfio=no +fi + +done + + CPPFLAGS="$CPPFLAGS_SAVE"; + + if test $ac_cv_header_sfio_stdio_h = yes ; then + { echo "$as_me:$LINENO: checking for main in -lsfio" >&5 +echo $ECHO_N "checking for main in -lsfio... $ECHO_C" >&6; } +if test "${ac_cv_lib_sfio_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsfio $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_sfio_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_sfio_main=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_sfio_main" >&5 +echo "${ECHO_T}$ac_cv_lib_sfio_main" >&6; } +if test $ac_cv_lib_sfio_main = yes; then + sm_have_sfio=yes + +else + sm_have_sfio=no +fi + + + if test $sm_have_sfio != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -lsfio (sfio-dev)" >&5 +echo "$as_me: WARNING: Could not find -lsfio (sfio-dev)" >&2;} + fi; + fi; + + # SFIO is only required for TLS/SASL on 8.11, ignore it otherwise + # when using it, however, it hits *everything*, put it in the front! + if test "$sm_version_major" = "8.11"; then + if test $sm_have_sfio = yes; then + sm_badepends="$sm_badepends, sfio-dev"; + sm_incdirs="-I/usr/include/sfio $sm_incdirs"; + sm_envdef="-DSFIO $sm_envdef"; + sm_libs="-lsfio $sm_libs"; + elif test $sm_enable_sfio = auto; then + { echo "$as_me:$LINENO: WARNING: SFIO, and therefore TLS not supported!" >&5 +echo "$as_me: WARNING: SFIO, and therefore TLS not supported!" >&2;} + else + { { echo "$as_me:$LINENO: error: SFIO, and therefore TLS not supported!" >&5 +echo "$as_me: error: SFIO, and therefore TLS not supported!" >&2;} + { (exit 1); exit 1; }; } + fi; + else + sm_have_sfio=no; + fi; + fi; +sm_enable_sfio=$sm_have_sfio; + +#------------------------------------------------------------------- +# +# Check for presence of SASL headers (for SMTP auth) +# +sm_have_auth=no; +sm_auth_lib='?'; +if test $sm_enable_auth != no; then + + +for ac_header in sasl/sasl.h sasl.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + if test $ac_cv_header_sasl_sasl_h = yes \ + -o $ac_cv_header_sasl_h = yes; then + sm_have_auth=yes; + else + sm_have_auth=no; + fi; + + if test $sm_have_auth = yes; then + { echo "$as_me:$LINENO: checking sasl version" >&5 +echo $ECHO_N "checking sasl version... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if defined(HAVE_SASL_SASL_H) + #include <sasl/sasl.h> + #elif defined(HAVE_SASL_H) + #include <sasl.h> + #endif + #if SASL_VERSION_MAJOR >= 2 + sm_auth_lib=2 + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sm_auth_lib=2" >/dev/null 2>&1; then + sm_auth_lib=2 +else + sm_auth_lib=1 +fi +rm -f conftest* + + { echo "$as_me:$LINENO: result: $sm_auth_lib" >&5 +echo "${ECHO_T}$sm_auth_lib" >&6; } + if test "X$sm_auth_lib" = "X"; then + { echo "$as_me:$LINENO: WARNING: SASL version unknown, omitting support!" >&5 +echo "$as_me: WARNING: SASL version unknown, omitting support!" >&2;} + sm_have_auth=no; + fi; + fi; + + # < 8.12.4 can't handle saslv2+ + v2i 8.12.4; # FIXME: need ldap & saslv2 1st !!! + if test $sm_version_math -lt $sm_version_test; then + if test $sm_auth_lib = 2; then + { echo "$as_me:$LINENO: WARNING: <8.12.4 & saslv$sm_auth_lib: trying saslv1" >&5 +echo "$as_me: WARNING: <8.12.4 & saslv$sm_auth_lib: trying saslv1" >&2;} + sm_auth_lib=1; + fi; + fi; + + if test $sm_auth_lib = 2; then + junk='sasl2'; + else + junk='sasl'; + fi; + + as_ac_Lib=`echo "ac_cv_lib_$junk''_sasl_client_init" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for sasl_client_init in -l$junk" >&5 +echo $ECHO_N "checking for sasl_client_init in -l$junk... $ECHO_C" >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$junk $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sasl_client_init (); +int +main () +{ +return sasl_client_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_Lib=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Lib=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval echo '${'$as_ac_Lib'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + sm_have_auth=yes + +else + sm_have_auth=no +fi + + + if test $sm_have_auth != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -l${junk} (lib${junk}-dev)" >&5 +echo "$as_me: WARNING: Could not find -l${junk} (lib${junk}-dev)" >&2;} + fi; + + if test $sm_have_auth = yes; then + sm_features="$sm_features, SMTP AUTH(SASL)"; + sm_badepends="$sm_badepends, lib${junk}-dev"; + sm_suggests="$sm_suggests, ${junk}-bin"; + sm_suggests="$sm_suggests, lib${junk}-modules"; + sm_suggests="$sm_suggests | lib${junk}-modules-plain"; + sm_suggests="$sm_suggests | lib${junk}-digestmd5-plain"; + sm_suggests="$sm_suggests | lib${junk}-digestmd5-des"; + sm_sendmail_envdef="$sm_sendmail_envdef -DSASL"; + if test $ac_cv_header_sasl_sasl_h = yes; then + sm_sendmail_envdef="$sm_sendmail_envdef -I/usr/include/sasl"; + fi; + if test "$sm_version_major" = "8.12"; then + :; + elif test "$sm_version_major" = "8.11"; then + sm_ffr="$sm_ffr -D_FFR_UNSAFE_SASL=1"; + sm_ffr="$sm_ffr -D_FFR_SASL_OPTS=1"; + sm_ffr="$sm_ffr -D_FFR_DEFAUTHINFO_MECHS=1"; + elif test "$sm_version_major" = "8.10"; then + sm_ffr="$sm_ffr -D_FFR_UNSAFE_SASL=1"; + sm_ffr="$sm_ffr -D_FFR_SASL_OPTS=1"; + sm_ffr="$sm_ffr -D_FFR_DEFAUTHINFO_MECHS=1"; + fi; + sm_sendmail_libs="$sm_sendmail_libs -l${junk}"; + elif test $sm_enable_auth = auto; then + { echo "$as_me:$LINENO: WARNING: SMTP authentication not supported!" >&5 +echo "$as_me: WARNING: SMTP authentication not supported!" >&2;} + else + { { echo "$as_me:$LINENO: error: SMTP authentication not supported!" >&5 +echo "$as_me: error: SMTP authentication not supported!" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_auth=$sm_have_auth; + + if test x$sm_enable_auth = xyes; then + SM_ENABLE_AUTH_TRUE= + SM_ENABLE_AUTH_FALSE='#' +else + SM_ENABLE_AUTH_TRUE='#' + SM_ENABLE_AUTH_FALSE= +fi + + +#------------------------------------------------------------------- +# +# Check for presence of SSL headers +# +sm_have_tls=no; +if test $sm_enable_tls != no; then + +for ac_header in openssl/ssl.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 + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ------------------------------------------------------------ ## +## Report this to bug/reportbug or sendmail@packages.debian.org ## +## ------------------------------------------------------------ ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + sm_have_tls=yes + +else + sm_have_tls=no +fi + +done + + + if test $ac_cv_header_openssl_ssl_h = yes; then + { echo "$as_me:$LINENO: checking for SSL_library_init in -lssl" >&5 +echo $ECHO_N "checking for SSL_library_init in -lssl... $ECHO_C" >&6; } +if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lssl -lcrypto $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SSL_library_init (); +int +main () +{ +return SSL_library_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_ssl_SSL_library_init=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_ssl_SSL_library_init=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_library_init" >&5 +echo "${ECHO_T}$ac_cv_lib_ssl_SSL_library_init" >&6; } +if test $ac_cv_lib_ssl_SSL_library_init = yes; then + sm_have_tls=yes + +else + sm_have_tls=no + +fi + + + if test $sm_have_tls != yes; then + { echo "$as_me:$LINENO: WARNING: Could not find -lssl (libssl-dev)" >&5 +echo "$as_me: WARNING: Could not find -lssl (libssl-dev)" >&2;} + fi; + fi; + + # SFIO is required for TLS/SSL support on 8.11 + if test $sm_have_tls = yes; then + if [ $sm_have_sfio != yes ] \ + && [ "$sm_version_major" = '8.11' ]; then + { echo "$as_me:$LINENO: WARNING: SFIO is required for SSL privacy protection!" >&5 +echo "$as_me: WARNING: SFIO is required for SSL privacy protection!" >&2;} + sm_have_tls=no; + fi; + fi; + + if test $sm_have_tls = yes; then + v2i 8.11.0; + if test $sm_version_math -ge $sm_version_test; then + sm_features="$sm_features, STARTTLS(SSL)"; + sm_badepends="$sm_badepends, libssl-dev"; + sm_suggests="$sm_suggests, openssl"; + sm_sendmail_envdef="$sm_sendmail_envdef -DSTARTTLS"; + sm_sendmail_libs="$sm_sendmail_libs -lcrypto -lssl"; + sm_ffr="$sm_ffr -D_FFR_TLS_1"; + sm_ffr="$sm_ffr -D_FFR_DEAL_WITH_ERROR_SSL"; + fi; + v2i 8.13.0; + if test $sm_version_math -lt $sm_version_test; then + v2i 8.12.0; + if test $sm_version_math -ge $sm_version_test; then + sm_ffr="$sm_ffr -D_FFR_SMTP_SSL"; + fi; + fi; + elif test $sm_enable_tls = auto; then + { echo "$as_me:$LINENO: WARNING: SSL/TLS privacy protection not supported!" >&5 +echo "$as_me: WARNING: SSL/TLS privacy protection not supported!" >&2;} + else + { { echo "$as_me:$LINENO: error: SSL/TLS privacy protection not supported!" >&5 +echo "$as_me: error: SSL/TLS privacy protection not supported!" >&2;} + { (exit 1); exit 1; }; } + fi; + fi; +sm_enable_tls=$sm_have_tls; + if test x$sm_enable_tls = xyes; then + SM_ENABLE_TLS_TRUE= + SM_ENABLE_TLS_FALSE='#' +else + SM_ENABLE_TLS_TRUE='#' + SM_ENABLE_TLS_FALSE= +fi + + +#------------------------------------------------------------------- +# Any requisite variable cleanup +#------------------------------------------------------------------- +sm_databases=$(echo "${sm_databases}" | sed -e 's/^, //'); +sm_features=$(echo "${sm_features}" | sed -e 's/^, //'); +sm_recommends=$(echo "${sm_recommends}" | sed -e 's/^, //'); + +#------------------------------------------------------------------- +# Add any FFRs to sendmail_ENVDEF +#------------------------------------------------------------------- +sm_sendmail_envdef="$sm_sendmail_envdef $sm_ffr"; + +#------------------------------------------------------------------- +# Below 8.10.0, there aren't separate variables per component... munge +# hell yeah, the output is butt-ugly (duplicates, ordering), but too bad! +# its not like (sane) people will be looking at these files anyway... +#------------------------------------------------------------------- +v2i 8.10.0; +if test $sm_version_math -lt $sm_version_test; then + sm_envdef="$sm_envdef $sm_sendmail_envdef"; + sm_envdef="$sm_envdef $sm_mail_local_envdef"; + sm_envdef="$sm_envdef $sm_rmail_envdef"; + sm_envdef="$sm_envdef $sm_smrsh_envdef"; + sm_libs="$sm_libs $sm_sendmail_libs"; + sm_libs="$sm_libs $sm_mail_local_libs"; + fi; + + +#------------------------------------------------------------------- +# Fini - define configuration files, and commands upon them +#------------------------------------------------------------------- +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files build/autoconf.mk" + +ac_config_files="$ac_config_files build/autoconf.pl" + +ac_config_files="$ac_config_files build/autoconf.sh" + +ac_config_files="$ac_config_files build/debian/changelog.sh" + +ac_config_files="$ac_config_files build/debian/changelog:build/debian/changelog.in" + +ac_config_files="$ac_config_files build/update_chaos" + +ac_config_files="$ac_config_files build/site.config.m4" + +ac_config_files="$ac_config_files build/debian/control.m4" + +ac_config_files="$ac_config_files libmilter${sm_libmilter_version}.dirs:./build/debian/libmilter.dirs.in" + +ac_config_files="$ac_config_files libmilter${sm_libmilter_version}.links:./build/debian/libmilter.links.in" + +ac_config_files="$ac_config_files libmilter${sm_libmilter_version}.lintian-overrides:./build/debian/libmilter.lintian-overrides.in" + +ac_config_files="$ac_config_files libmilter${sm_libmilter_version}.postrm:./build/debian/libmilter.postrm.in" + +ac_config_files="$ac_config_files libmilter${sm_libmilter_version}.preinst:./build/debian/libmilter.preinst.in" + +ac_config_files="$ac_config_files libmilter-dev.dirs:./build/debian/libmilter-dev.dirs.in" + +ac_config_files="$ac_config_files libmilter-dev.links:./build/debian/libmilter-dev.links.in" + +ac_config_files="$ac_config_files libmilter-dev.postrm:./build/debian/libmilter-dev.postrm.in" + +ac_config_files="$ac_config_files libmilter-dev.preinst:./build/debian/libmilter-dev.preinst.in" + +ac_config_files="$ac_config_files rmail.dirs:./build/debian/rmail.dirs.in" + +ac_config_files="$ac_config_files rmail.postrm:./build/debian/rmail.postrm.in" + +ac_config_files="$ac_config_files rmail.preinst:./build/debian/rmail.preinst.in" + +ac_config_files="$ac_config_files sendmail.dirs:./build/debian/sendmail.dirs.in" + +ac_config_files="$ac_config_files sendmail-base.dirs:./build/debian/sendmail-base.dirs.in" + +ac_config_files="$ac_config_files sendmail-base.postinst:./build/debian/sendmail-base.postinst.in" + +ac_config_files="$ac_config_files sendmail-base.postrm:./build/debian/sendmail-base.postrm.in" + +ac_config_files="$ac_config_files sendmail-base.preinst:./build/debian/sendmail-base.preinst.in" + +ac_config_files="$ac_config_files sendmail-base.prerm:./build/debian/sendmail-base.prerm.in" + +ac_config_files="$ac_config_files sendmail-doc.dirs:./build/debian/sendmail-doc.dirs.in" + +ac_config_files="$ac_config_files sendmail-doc.postrm:./build/debian/sendmail-doc.postrm.in" + +ac_config_files="$ac_config_files sendmail-doc.preinst:./build/debian/sendmail-doc.preinst.in" + +ac_config_files="$ac_config_files sendmail-cf.dirs:./build/debian/sendmail-cf.dirs.in" + +ac_config_files="$ac_config_files sendmail-cf.postrm:./build/debian/sendmail-cf.postrm.in" + +ac_config_files="$ac_config_files sendmail-cf.preinst:./build/debian/sendmail-cf.preinst.in" + +ac_config_files="$ac_config_files sendmail.cron.daily:./build/debian/sendmail.cron.daily.in" + +ac_config_files="$ac_config_files sendmail-bin.dirs:./build/debian/sendmail-bin.dirs.in" + +ac_config_files="$ac_config_files sendmail.init.d:./build/debian/sendmail.init.d.in:./local/sendmail.in" + +ac_config_files="$ac_config_files sendmail-bin.postinst:./build/debian/sendmail-bin.postinst.in" + +ac_config_files="$ac_config_files sendmail-bin.postrm:./build/debian/sendmail-bin.postrm.in" + +ac_config_files="$ac_config_files sendmail-bin.preinst:./build/debian/sendmail-bin.preinst.in" + +ac_config_files="$ac_config_files sendmail-bin.prerm:./build/debian/sendmail-bin.prerm.in" + +ac_config_files="$ac_config_files sendmail-bin.suid:./build/debian/sendmail-bin.suid.in" + +ac_config_files="$ac_config_files sensible-mda.dirs:./build/debian/sensible-mda.dirs.in" + +ac_config_files="$ac_config_files sensible-mda.postrm:./build/debian/sensible-mda.postrm.in" + +ac_config_files="$ac_config_files sensible-mda.preinst:./build/debian/sensible-mda.preinst.in" + +ac_config_files="$ac_config_files cf/Makefile" + +ac_config_files="$ac_config_files cf/debian/autoconf.m4" + +ac_config_files="$ac_config_files cf/debian/sendmail.mc" + +ac_config_files="$ac_config_files cf/debian/submit.mc" + +ac_config_files="$ac_config_files cf/domain/debian-msp.m4" + +ac_config_files="$ac_config_files cf/domain/debian-mta.m4" + +ac_config_files="$ac_config_files cf/hack/debian_auth.m4" + +ac_config_files="$ac_config_files cf/hack/virthost_by_ip.m4" + +ac_config_files="$ac_config_files cf/ostype/debian.m4" + +ac_config_files="$ac_config_files examples/Makefile" + +ac_config_files="$ac_config_files examples/dhcp3/dhclient-exit-hooks.d/sendmail" + +ac_config_files="$ac_config_files examples/network/if-down.d/sendmail" + +ac_config_files="$ac_config_files examples/network/if-up.d/sendmail" + +ac_config_files="$ac_config_files examples/ppp/ip-down.d/sendmail" + +ac_config_files="$ac_config_files examples/ppp/ip-up.d/sendmail" + +ac_config_files="$ac_config_files examples/resolvconf/update-libc.d/sendmail" + +ac_config_files="$ac_config_files examples/sasl/sasl.m4" + +ac_config_files="$ac_config_files examples/tls/starttls.m4" + +ac_config_files="$ac_config_files local/Makefile" + +ac_config_files="$ac_config_files local/Parse_conf.pm" + +ac_config_files="$ac_config_files local/Parse_mc.pm" + +ac_config_files="$ac_config_files local/dynamic" + +ac_config_files="$ac_config_files local/parse_mc" + +ac_config_files="$ac_config_files local/sendmailconfig" + +ac_config_files="$ac_config_files local/sendmail" + +ac_config_files="$ac_config_files local/update_auth" + +ac_config_files="$ac_config_files local/update_authm4" + +ac_config_files="$ac_config_files local/update_conf" + +ac_config_files="$ac_config_files local/update_db" + +ac_config_files="$ac_config_files local/update_ldap" + +ac_config_files="$ac_config_files local/update_mc" + +ac_config_files="$ac_config_files local/update_mk" + +ac_config_files="$ac_config_files local/update_smrsh" + +ac_config_files="$ac_config_files local/update_sys" + +ac_config_files="$ac_config_files local/update_tls" + +ac_config_files="$ac_config_files local/update_tlsm4" + +ac_config_files="$ac_config_files local/bug/sendmail/script" + +ac_config_files="$ac_config_files sensible_mda/Makefile" + +ac_config_files="$ac_config_files sensible_mda/sensible-mda.c" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${SM_ENABLE_LDAP_TRUE}" && test -z "${SM_ENABLE_LDAP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"SM_ENABLE_LDAP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"SM_ENABLE_LDAP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${SM_ENABLE_AUTH_TRUE}" && test -z "${SM_ENABLE_AUTH_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"SM_ENABLE_AUTH\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"SM_ENABLE_AUTH\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${SM_ENABLE_TLS_TRUE}" && test -z "${SM_ENABLE_TLS_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"SM_ENABLE_TLS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"SM_ENABLE_TLS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Sendmail $as_me 8.14.1, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration commands: +$config_commands + +Report bugs to <bug-autoconf@gnu.org>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +Sendmail config.status 8.14.1 +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "build/autoconf.mk") CONFIG_FILES="$CONFIG_FILES build/autoconf.mk" ;; + "build/autoconf.pl") CONFIG_FILES="$CONFIG_FILES build/autoconf.pl" ;; + "build/autoconf.sh") CONFIG_FILES="$CONFIG_FILES build/autoconf.sh" ;; + "build/debian/changelog.sh") CONFIG_FILES="$CONFIG_FILES build/debian/changelog.sh" ;; + "build/debian/changelog") CONFIG_FILES="$CONFIG_FILES build/debian/changelog:build/debian/changelog.in" ;; + "build/update_chaos") CONFIG_FILES="$CONFIG_FILES build/update_chaos" ;; + "build/site.config.m4") CONFIG_FILES="$CONFIG_FILES build/site.config.m4" ;; + "build/debian/control.m4") CONFIG_FILES="$CONFIG_FILES build/debian/control.m4" ;; + "libmilter${sm_libmilter_version}.dirs") CONFIG_FILES="$CONFIG_FILES libmilter${sm_libmilter_version}.dirs:./build/debian/libmilter.dirs.in" ;; + "libmilter${sm_libmilter_version}.links") CONFIG_FILES="$CONFIG_FILES libmilter${sm_libmilter_version}.links:./build/debian/libmilter.links.in" ;; + "libmilter${sm_libmilter_version}.lintian-overrides") CONFIG_FILES="$CONFIG_FILES libmilter${sm_libmilter_version}.lintian-overrides:./build/debian/libmilter.lintian-overrides.in" ;; + "libmilter${sm_libmilter_version}.postrm") CONFIG_FILES="$CONFIG_FILES libmilter${sm_libmilter_version}.postrm:./build/debian/libmilter.postrm.in" ;; + "libmilter${sm_libmilter_version}.preinst") CONFIG_FILES="$CONFIG_FILES libmilter${sm_libmilter_version}.preinst:./build/debian/libmilter.preinst.in" ;; + "libmilter-dev.dirs") CONFIG_FILES="$CONFIG_FILES libmilter-dev.dirs:./build/debian/libmilter-dev.dirs.in" ;; + "libmilter-dev.links") CONFIG_FILES="$CONFIG_FILES libmilter-dev.links:./build/debian/libmilter-dev.links.in" ;; + "libmilter-dev.postrm") CONFIG_FILES="$CONFIG_FILES libmilter-dev.postrm:./build/debian/libmilter-dev.postrm.in" ;; + "libmilter-dev.preinst") CONFIG_FILES="$CONFIG_FILES libmilter-dev.preinst:./build/debian/libmilter-dev.preinst.in" ;; + "rmail.dirs") CONFIG_FILES="$CONFIG_FILES rmail.dirs:./build/debian/rmail.dirs.in" ;; + "rmail.postrm") CONFIG_FILES="$CONFIG_FILES rmail.postrm:./build/debian/rmail.postrm.in" ;; + "rmail.preinst") CONFIG_FILES="$CONFIG_FILES rmail.preinst:./build/debian/rmail.preinst.in" ;; + "sendmail.dirs") CONFIG_FILES="$CONFIG_FILES sendmail.dirs:./build/debian/sendmail.dirs.in" ;; + "sendmail-base.dirs") CONFIG_FILES="$CONFIG_FILES sendmail-base.dirs:./build/debian/sendmail-base.dirs.in" ;; + "sendmail-base.postinst") CONFIG_FILES="$CONFIG_FILES sendmail-base.postinst:./build/debian/sendmail-base.postinst.in" ;; + "sendmail-base.postrm") CONFIG_FILES="$CONFIG_FILES sendmail-base.postrm:./build/debian/sendmail-base.postrm.in" ;; + "sendmail-base.preinst") CONFIG_FILES="$CONFIG_FILES sendmail-base.preinst:./build/debian/sendmail-base.preinst.in" ;; + "sendmail-base.prerm") CONFIG_FILES="$CONFIG_FILES sendmail-base.prerm:./build/debian/sendmail-base.prerm.in" ;; + "sendmail-doc.dirs") CONFIG_FILES="$CONFIG_FILES sendmail-doc.dirs:./build/debian/sendmail-doc.dirs.in" ;; + "sendmail-doc.postrm") CONFIG_FILES="$CONFIG_FILES sendmail-doc.postrm:./build/debian/sendmail-doc.postrm.in" ;; + "sendmail-doc.preinst") CONFIG_FILES="$CONFIG_FILES sendmail-doc.preinst:./build/debian/sendmail-doc.preinst.in" ;; + "sendmail-cf.dirs") CONFIG_FILES="$CONFIG_FILES sendmail-cf.dirs:./build/debian/sendmail-cf.dirs.in" ;; + "sendmail-cf.postrm") CONFIG_FILES="$CONFIG_FILES sendmail-cf.postrm:./build/debian/sendmail-cf.postrm.in" ;; + "sendmail-cf.preinst") CONFIG_FILES="$CONFIG_FILES sendmail-cf.preinst:./build/debian/sendmail-cf.preinst.in" ;; + "sendmail.cron.daily") CONFIG_FILES="$CONFIG_FILES sendmail.cron.daily:./build/debian/sendmail.cron.daily.in" ;; + "sendmail-bin.dirs") CONFIG_FILES="$CONFIG_FILES sendmail-bin.dirs:./build/debian/sendmail-bin.dirs.in" ;; + "sendmail.init.d") CONFIG_FILES="$CONFIG_FILES sendmail.init.d:./build/debian/sendmail.init.d.in:./local/sendmail.in" ;; + "sendmail-bin.postinst") CONFIG_FILES="$CONFIG_FILES sendmail-bin.postinst:./build/debian/sendmail-bin.postinst.in" ;; + "sendmail-bin.postrm") CONFIG_FILES="$CONFIG_FILES sendmail-bin.postrm:./build/debian/sendmail-bin.postrm.in" ;; + "sendmail-bin.preinst") CONFIG_FILES="$CONFIG_FILES sendmail-bin.preinst:./build/debian/sendmail-bin.preinst.in" ;; + "sendmail-bin.prerm") CONFIG_FILES="$CONFIG_FILES sendmail-bin.prerm:./build/debian/sendmail-bin.prerm.in" ;; + "sendmail-bin.suid") CONFIG_FILES="$CONFIG_FILES sendmail-bin.suid:./build/debian/sendmail-bin.suid.in" ;; + "sensible-mda.dirs") CONFIG_FILES="$CONFIG_FILES sensible-mda.dirs:./build/debian/sensible-mda.dirs.in" ;; + "sensible-mda.postrm") CONFIG_FILES="$CONFIG_FILES sensible-mda.postrm:./build/debian/sensible-mda.postrm.in" ;; + "sensible-mda.preinst") CONFIG_FILES="$CONFIG_FILES sensible-mda.preinst:./build/debian/sensible-mda.preinst.in" ;; + "cf/Makefile") CONFIG_FILES="$CONFIG_FILES cf/Makefile" ;; + "cf/debian/autoconf.m4") CONFIG_FILES="$CONFIG_FILES cf/debian/autoconf.m4" ;; + "cf/debian/sendmail.mc") CONFIG_FILES="$CONFIG_FILES cf/debian/sendmail.mc" ;; + "cf/debian/submit.mc") CONFIG_FILES="$CONFIG_FILES cf/debian/submit.mc" ;; + "cf/domain/debian-msp.m4") CONFIG_FILES="$CONFIG_FILES cf/domain/debian-msp.m4" ;; + "cf/domain/debian-mta.m4") CONFIG_FILES="$CONFIG_FILES cf/domain/debian-mta.m4" ;; + "cf/hack/debian_auth.m4") CONFIG_FILES="$CONFIG_FILES cf/hack/debian_auth.m4" ;; + "cf/hack/virthost_by_ip.m4") CONFIG_FILES="$CONFIG_FILES cf/hack/virthost_by_ip.m4" ;; + "cf/ostype/debian.m4") CONFIG_FILES="$CONFIG_FILES cf/ostype/debian.m4" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "examples/dhcp3/dhclient-exit-hooks.d/sendmail") CONFIG_FILES="$CONFIG_FILES examples/dhcp3/dhclient-exit-hooks.d/sendmail" ;; + "examples/network/if-down.d/sendmail") CONFIG_FILES="$CONFIG_FILES examples/network/if-down.d/sendmail" ;; + "examples/network/if-up.d/sendmail") CONFIG_FILES="$CONFIG_FILES examples/network/if-up.d/sendmail" ;; + "examples/ppp/ip-down.d/sendmail") CONFIG_FILES="$CONFIG_FILES examples/ppp/ip-down.d/sendmail" ;; + "examples/ppp/ip-up.d/sendmail") CONFIG_FILES="$CONFIG_FILES examples/ppp/ip-up.d/sendmail" ;; + "examples/resolvconf/update-libc.d/sendmail") CONFIG_FILES="$CONFIG_FILES examples/resolvconf/update-libc.d/sendmail" ;; + "examples/sasl/sasl.m4") CONFIG_FILES="$CONFIG_FILES examples/sasl/sasl.m4" ;; + "examples/tls/starttls.m4") CONFIG_FILES="$CONFIG_FILES examples/tls/starttls.m4" ;; + "local/Makefile") CONFIG_FILES="$CONFIG_FILES local/Makefile" ;; + "local/Parse_conf.pm") CONFIG_FILES="$CONFIG_FILES local/Parse_conf.pm" ;; + "local/Parse_mc.pm") CONFIG_FILES="$CONFIG_FILES local/Parse_mc.pm" ;; + "local/dynamic") CONFIG_FILES="$CONFIG_FILES local/dynamic" ;; + "local/parse_mc") CONFIG_FILES="$CONFIG_FILES local/parse_mc" ;; + "local/sendmailconfig") CONFIG_FILES="$CONFIG_FILES local/sendmailconfig" ;; + "local/sendmail") CONFIG_FILES="$CONFIG_FILES local/sendmail" ;; + "local/update_auth") CONFIG_FILES="$CONFIG_FILES local/update_auth" ;; + "local/update_authm4") CONFIG_FILES="$CONFIG_FILES local/update_authm4" ;; + "local/update_conf") CONFIG_FILES="$CONFIG_FILES local/update_conf" ;; + "local/update_db") CONFIG_FILES="$CONFIG_FILES local/update_db" ;; + "local/update_ldap") CONFIG_FILES="$CONFIG_FILES local/update_ldap" ;; + "local/update_mc") CONFIG_FILES="$CONFIG_FILES local/update_mc" ;; + "local/update_mk") CONFIG_FILES="$CONFIG_FILES local/update_mk" ;; + "local/update_smrsh") CONFIG_FILES="$CONFIG_FILES local/update_smrsh" ;; + "local/update_sys") CONFIG_FILES="$CONFIG_FILES local/update_sys" ;; + "local/update_tls") CONFIG_FILES="$CONFIG_FILES local/update_tls" ;; + "local/update_tlsm4") CONFIG_FILES="$CONFIG_FILES local/update_tlsm4" ;; + "local/bug/sendmail/script") CONFIG_FILES="$CONFIG_FILES local/bug/sendmail/script" ;; + "sensible_mda/Makefile") CONFIG_FILES="$CONFIG_FILES sensible_mda/Makefile" ;; + "sensible_mda/sensible-mda.c") CONFIG_FILES="$CONFIG_FILES sensible_mda/sensible-mda.c" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +build!$build$ac_delim +build_cpu!$build_cpu$ac_delim +build_vendor!$build_vendor$ac_delim +build_os!$build_os$ac_delim +host!$host$ac_delim +host_cpu!$host_cpu$ac_delim +host_vendor!$host_vendor$ac_delim +host_os!$host_os$ac_delim +target!$target$ac_delim +target_cpu!$target_cpu$ac_delim +target_vendor!$target_vendor$ac_delim +target_os!$target_os$ac_delim +SET_MAKE!$SET_MAKE$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +am__isrc!$am__isrc$ac_delim +CYGPATH_W!$CYGPATH_W$ac_delim +PACKAGE!$PACKAGE$ac_delim +VERSION!$VERSION$ac_delim +ACLOCAL!$ACLOCAL$ac_delim +AUTOCONF!$AUTOCONF$ac_delim +AUTOMAKE!$AUTOMAKE$ac_delim +AUTOHEADER!$AUTOHEADER$ac_delim +MAKEINFO!$MAKEINFO$ac_delim +install_sh!$install_sh$ac_delim +STRIP!$STRIP$ac_delim +INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim +mkdir_p!$mkdir_p$ac_delim +AWK!$AWK$ac_delim +am__leading_dot!$am__leading_dot$ac_delim +AMTAR!$AMTAR$ac_delim +am__tar!$am__tar$ac_delim +am__untar!$am__untar$ac_delim +MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim +MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim +MAINT!$MAINT$ac_delim +ac_version!$ac_version$ac_delim +am_version!$am_version$ac_delim +SM_VERS!$SM_VERS$ac_delim +SM_DATE!$SM_DATE$ac_delim +SM_MINVERS!$SM_MINVERS$ac_delim +SM_MAXVERS!$SM_MAXVERS$ac_delim +SM_CPYRT!$SM_CPYRT$ac_delim +sm_date!$sm_date$ac_delim +sm_time!$sm_time$ac_delim +sm_utc!$sm_utc$ac_delim +sm_version!$sm_version$ac_delim +sm_version_v!$sm_version_v$ac_delim +sm_version_r!$sm_version_r$ac_delim +sm_version_major!$sm_version_major$ac_delim +sm_version_minor!$sm_version_minor$ac_delim +sm_version_beta!$sm_version_beta$ac_delim +sm_version_math!$sm_version_math$ac_delim +sm_revision!$sm_revision$ac_delim +sm_custom!$sm_custom$ac_delim +sm_custom_s!$sm_custom_s$ac_delim +buildtree!$buildtree$ac_delim +sm_dist_name!$sm_dist_name$ac_delim +sm_dist_vers!$sm_dist_vers$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS <conf$$subs.sed +rm -f conf$$subs.sed +cat >>$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +DEBIAN!$DEBIAN$ac_delim +DEBIAN_DH!$DEBIAN_DH$ac_delim +DEB_BUILD_ARCH!$DEB_BUILD_ARCH$ac_delim +DEB_BUILD_GNU_CPU!$DEB_BUILD_GNU_CPU$ac_delim +DEB_BUILD_GNU_SYSTEM!$DEB_BUILD_GNU_SYSTEM$ac_delim +DEB_BUILD_GNU_TYPE!$DEB_BUILD_GNU_TYPE$ac_delim +DEB_HOST_ARCH!$DEB_HOST_ARCH$ac_delim +DEB_HOST_GNU_CPU!$DEB_HOST_GNU_CPU$ac_delim +DEB_HOST_GNU_SYSTEM!$DEB_HOST_GNU_SYSTEM$ac_delim +DEB_HOST_GNU_TYPE!$DEB_HOST_GNU_TYPE$ac_delim +sm_build_arch!$sm_build_arch$ac_delim +sm_host_arch!$sm_host_arch$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +DEPDIR!$DEPDIR$ac_delim +am__include!$am__include$ac_delim +am__quote!$am__quote$ac_delim +AMDEP_TRUE!$AMDEP_TRUE$ac_delim +AMDEP_FALSE!$AMDEP_FALSE$ac_delim +AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim +CCDEPMODE!$CCDEPMODE$ac_delim +am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim +am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim +CPP!$CPP$ac_delim +LN_S!$LN_S$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +sm_incdirs!$sm_incdirs$ac_delim +sm_mapdef!$sm_mapdef$ac_delim +sm_envdef!$sm_envdef$ac_delim +sm_libs!$sm_libs$ac_delim +sm_editmap_envdef!$sm_editmap_envdef$ac_delim +sm_editmap_libs!$sm_editmap_libs$ac_delim +sm_libmilter_envdef!$sm_libmilter_envdef$ac_delim +sm_libmilter_libs!$sm_libmilter_libs$ac_delim +sm_libmilter_version!$sm_libmilter_version$ac_delim +sm_libsm_envdef!$sm_libsm_envdef$ac_delim +sm_libsm_libs!$sm_libsm_libs$ac_delim +sm_libsmdb_envdef!$sm_libsmdb_envdef$ac_delim +sm_libsmdb_libs!$sm_libsmdb_libs$ac_delim +sm_libsmutil_envdef!$sm_libsmutil_envdef$ac_delim +sm_libsmutil_libs!$sm_libsmutil_libs$ac_delim +sm_mail_local_envdef!$sm_mail_local_envdef$ac_delim +sm_mail_local_libs!$sm_mail_local_libs$ac_delim +sm_mailstats_envdef!$sm_mailstats_envdef$ac_delim +sm_mailstats_libs!$sm_mailstats_libs$ac_delim +sm_makemap_envdef!$sm_makemap_envdef$ac_delim +sm_makemap_libs!$sm_makemap_libs$ac_delim +sm_praliases_envdef!$sm_praliases_envdef$ac_delim +sm_praliases_libs!$sm_praliases_libs$ac_delim +sm_rmail_envdef!$sm_rmail_envdef$ac_delim +sm_rmail_libs!$sm_rmail_libs$ac_delim +sm_sendmail_envdef!$sm_sendmail_envdef$ac_delim +sm_sendmail_libs!$sm_sendmail_libs$ac_delim +sm_smrsh_envdef!$sm_smrsh_envdef$ac_delim +sm_smrsh_libs!$sm_smrsh_libs$ac_delim +sm_vacation_envdef!$sm_vacation_envdef$ac_delim +sm_vacation_libs!$sm_vacation_libs$ac_delim +sm_databases!$sm_databases$ac_delim +sm_features!$sm_features$ac_delim +sm_badepends!$sm_badepends$ac_delim +sm_depends!$sm_depends$ac_delim +sm_recommends!$sm_recommends$ac_delim +sm_suggests!$sm_suggests$ac_delim +sm_newdb_lib!$sm_newdb_lib$ac_delim +sm_ldap_lib!$sm_ldap_lib$ac_delim +sm_hesiod_parms!$sm_hesiod_parms$ac_delim +sm_ffr!$sm_ffr$ac_delim +sm_m4_ffr!$sm_m4_ffr$ac_delim +sm_enable_shm!$sm_enable_shm$ac_delim +sm_enable_milter!$sm_enable_milter$ac_delim +sm_enable_regex!$sm_enable_regex$ac_delim +sm_enable_ndbm!$sm_enable_ndbm$ac_delim +sm_enable_newdb!$sm_enable_newdb$ac_delim +sm_enable_nis!$sm_enable_nis$ac_delim +sm_enable_nisplus!$sm_enable_nisplus$ac_delim +sm_enable_ldap!$sm_enable_ldap$ac_delim +SM_ENABLE_LDAP_TRUE!$SM_ENABLE_LDAP_TRUE$ac_delim +SM_ENABLE_LDAP_FALSE!$SM_ENABLE_LDAP_FALSE$ac_delim +sm_enable_bind!$sm_enable_bind$ac_delim +sm_enable_hesiod!$sm_enable_hesiod$ac_delim +sm_enable_tcpd!$sm_enable_tcpd$ac_delim +sm_enable_ipv6!$sm_enable_ipv6$ac_delim +sm_enable_maillock!$sm_enable_maillock$ac_delim +sm_enable_sfio!$sm_enable_sfio$ac_delim +sm_enable_auth!$sm_enable_auth$ac_delim +sm_auth_lib!$sm_auth_lib$ac_delim +SM_ENABLE_AUTH_TRUE!$SM_ENABLE_AUTH_TRUE$ac_delim +SM_ENABLE_AUTH_FALSE!$SM_ENABLE_AUTH_FALSE$ac_delim +sm_enable_tls!$sm_enable_tls$ac_delim +SM_ENABLE_TLS_TRUE!$SM_ENABLE_TLS_TRUE$ac_delim +SM_ENABLE_TLS_FALSE!$SM_ENABLE_TLS_FALSE$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS <conf$$subs.sed +rm -f conf$$subs.sed +cat >>$CONFIG_STATUS <<_ACEOF +CEOF$ac_eof +_ACEOF + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +LIBOBJS!$LIBOBJS$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 2; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS <conf$$subs.sed +rm -f conf$$subs.sed +cat >>$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + + + :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 +echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + "Makefile":F) chmod a+x ./Makefile ;; + "build/debian/changelog.sh":F) + echo 'creating ./build/debian/changelog.in'; + chmod ug+x ./build/debian/changelog.sh; + ./build/debian/changelog.sh; ;; + "build/debian/changelog":F) + cp build/debian/changelog ./; ;; + "build/update_chaos":F) + echo 'Updating Build setup'; + chmod ug+x ./build/update_chaos; + (cd ../ && ./debian/build/update_chaos); ;; + "build/debian/control.m4":F) + echo 'creating ./control'; + m4 ./build/debian/control.m4 > ./build/debian/control; + cp ./build/debian/control ./; ;; + "libmilter${sm_libmilter_version}.postrm":F) chmod a+x ./libmilter${sm_libmilter_version}.postrm ;; + "libmilter${sm_libmilter_version}.preinst":F) chmod a+x ./libmilter${sm_libmilter_version}.preinst ;; + "libmilter-dev.postrm":F) chmod a+x ./libmilter-dev.postrm ;; + "libmilter-dev.preinst":F) chmod a+x ./libmilter-dev.preinst ;; + "rmail.postrm":F) chmod a+x ./rmail.postrm ;; + "rmail.preinst":F) chmod a+x ./rmail.preinst ;; + "sendmail-base.postinst":F) chmod a+x ./sendmail-base.postinst ;; + "sendmail-base.postrm":F) chmod a+x ./sendmail-base.postrm ;; + "sendmail-base.preinst":F) chmod a+x ./sendmail-base.preinst ;; + "sendmail-base.prerm":F) chmod a+x ./sendmail-base.prerm ;; + "sendmail-doc.postrm":F) chmod a+x ./sendmail-doc.postrm ;; + "sendmail-doc.preinst":F) chmod a+x ./sendmail-doc.preinst ;; + "sendmail-cf.postrm":F) chmod a+x ./sendmail-cf.postrm ;; + "sendmail-cf.preinst":F) chmod a+x ./sendmail-cf.preinst ;; + "sendmail.cron.daily":F) chmod a+x ./sendmail.cron.daily ;; + "sendmail.init.d":F) chmod a+x ./sendmail.init.d ;; + "sendmail-bin.postinst":F) chmod a+x ./sendmail-bin.postinst ;; + "sendmail-bin.postrm":F) chmod a+x ./sendmail-bin.postrm ;; + "sendmail-bin.preinst":F) chmod a+x ./sendmail-bin.preinst ;; + "sendmail-bin.prerm":F) chmod a+x ./sendmail-bin.prerm ;; + "sensible-mda.postrm":F) chmod a+x ./sensible-mda.postrm ;; + "sensible-mda.preinst":F) chmod a+x ./sensible-mda.preinst ;; + "cf/Makefile":F) chmod a+x ./cf/Makefile ;; + "examples/Makefile":F) chmod a+x ./examples/Makefile ;; + "examples/dhcp3/dhclient-exit-hooks.d/sendmail":F) chmod a+x ./examples/dhcp3/dhclient-exit-hooks.d/sendmail ;; + "examples/network/if-down.d/sendmail":F) chmod a+x ./examples/network/if-down.d/sendmail ;; + "examples/network/if-up.d/sendmail":F) chmod a+x ./examples/network/if-up.d/sendmail ;; + "examples/ppp/ip-down.d/sendmail":F) chmod a+x ./examples/ppp/ip-down.d/sendmail ;; + "examples/ppp/ip-up.d/sendmail":F) chmod a+x ./examples/ppp/ip-up.d/sendmail ;; + "examples/resolvconf/update-libc.d/sendmail":F) chmod a+x ./examples/resolvconf/update-libc.d/sendmail ;; + "local/Makefile":F) chmod a+x ./local/Makefile ;; + "local/Parse_conf.pm":F) chmod a+x ./local/Parse_conf.pm ;; + "local/Parse_mc.pm":F) chmod a+x ./local/Parse_mc.pm ;; + "local/dynamic":F) chmod a+x ./local/dynamic ;; + "local/parse_mc":F) chmod a+x ./local/parse_mc ;; + "local/sendmailconfig":F) chmod a+x ./local/sendmailconfig ;; + "local/sendmail":F) chmod a+x ./local/sendmail ;; + "local/update_auth":F) chmod a+x ./local/update_auth ;; + "local/update_authm4":F) chmod a+x ./local/update_authm4 ;; + "local/update_conf":F) chmod a+x ./local/update_conf ;; + "local/update_db":F) chmod a+x ./local/update_db ;; + "local/update_ldap":F) chmod a+x ./local/update_ldap ;; + "local/update_mc":F) chmod a+x ./local/update_mc ;; + "local/update_mk":F) chmod a+x ./local/update_mk ;; + "local/update_smrsh":F) chmod a+x ./local/update_smrsh ;; + "local/update_sys":F) chmod a+x ./local/update_sys ;; + "local/update_tls":F) chmod a+x ./local/update_tls ;; + "local/update_tlsm4":F) chmod a+x ./local/update_tlsm4 ;; + "local/bug/sendmail/script":F) chmod a+x ./local/bug/sendmail/script ;; + "sensible_mda/Makefile":F) chmod a+x ./sensible_mda/Makefile ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/debian/configure.ac b/debian/configure.ac new file mode 100644 index 0000000..235018f --- /dev/null +++ b/debian/configure.ac @@ -0,0 +1,1750 @@ +#------------------------------------------------------------------------------ +# +# $Sendmail: ./configure.ac,v 8.14.1 2007/10/04 21:42:00 cowboy Exp $ +# +# Copyright (c) 1998-2007 Richard Nelson. All Rights Reserved. +# +# Debian configure file for building Sendmail +# Note: this file supports Sendmail 8.7.6 - 8.14.1 +# and has been tested on autoconf 2.12, 2.13, 2.50, 2.52, 2.53 +# +# Note: Most of this file is vanilla 2.12, but the copyright and +# ac_init portion are dual-pathed to better support 2.50+ +# +#------------------------------------------------------------------------------ +define([_SM_CPYRT], [2007])dnl +define([_SM_VERS], [8.14.1])dnl +define([_SM_DATE], [2007-10-04 21:42:00])dnl +define([_SM_MAXVERS],[9.0.0])dnl +define([_SM_MINVERS],[8.7.6])dnl + +dnl #------------------------------------------------------------------- +dnl # Obtain version of GNU Autoconf and automake (don't look) +dnl #------------------------------------------------------------------- +ifdef([AC_COPYRIGHT], +[define([_ac_version], m4_PACKAGE_VERSION)] +,[define([_ac_version], AC_ACVERSION)]) +m4_ifdef([AM_AUTOMAKE_VERSION],[dnl +dnl m4_define([_MY_TMP_], m4_defn([AM_AUTOMAKE_VERSION]))dnl +dnl delete a char $2 from a string $1 if it is there +dnl m4_define([_DELCHAR_],[m4_define([_IDX_],[m4_index([$1],[$2])])[]m4_define([_I_],[m4_eval(_IDX_ >= 0)])[]m4_if(_I_,[1],[m4_substr([$1],0,_IDX_)[]m4_substr([$1],m4_eval(_IDX_+1))],[$1])])dnl +dnl delete a char $2 (and everything before it from a string $1 if it is there +dnl m4_define([_DELPFX_],[m4_define([_IDX_],[m4_index([$1],[$2])])[]m4_define([_I_],[m4_eval(_IDX_ >= 0)])[]m4_if(_I_,[1],[m4_substr([$1],m4_eval(_IDX_+1))],[$1])])dnl +dnl m4_define([_am_version], [_DELCHAR_(_DELPFX_(_MY_TMP_,["]),["])])dnl +],[dnl +define([_am_version],[<=1.5]) +])dnl + +dnl #------------------------------------------------------------------- +dnl # Redefine AC_{COPYRIGHT,INIT_BINSH} to provide RCS IDs and copyright +dnl # notice at top of generated configure script. Prints simple copyright. +dnl #------------------------------------------------------------------- +ifdef([AC_COPYRIGHT], +[AC_COPYRIGHT( +[[# +# $]Sendmail[$ +# from] translit([$Sendmail: ./configure.ac,v] _SM_VERS _SM_DATE [$], $")] [ +# +cat <<EOF + + Copyright (c) 1998-_SM_CPYRT Richard Nelson. All Rights Reserved. + + Sendmail _SM_VERS + Generated by Autoconf _ac_version, Automake _am_version + + Debian configure script for building Sendmail + Note: this file supports Sendmail _SM_MINVERS - _SM_MAXVERS + and has been tested on autoconf 2.12, 2.13, 2.50, 2.52, 2.53 + + +EOF +])], +[define([AC_INIT_BINSH], +[[#! /bin/sh +# $]Sendmail[$ +# from] translit([$Sendmail: ./configure.ac,v] _SM_VERS _SM_DATE [$], $")] [ +# +cat <<EOF + + Copyright (c) 1998-_SM_CPYRT Richard Nelson. All Rights Reserved. + + Sendmail _SM_VERS + Generated by Autoconf _ac_version, Automake _am_version + + Debian configure script for building Sendmail + Note: this file supports Sendmail _SM_MINVERS - _SM_MAXVERS + and has been tested on autoconf 2.12, 2.13, 2.50, 2.52, 2.53 + +EOF +])dnl]) + +#------------------------------------------------------------------- +# Configure.in for Sendmail +#------------------------------------------------------------------- +AC_REVISION([$Revision: ]_SM_VERS[ $]) +define([AC_INIT_BINSH],)dnl +ifdef([AC_COPYRIGHT],[ +AC_INIT([Sendmail],_SM_VERS,[bug/reportbug or sendmail@packages.debian.org]) +AC_CONFIG_SRCDIR([./build/site.config.m4.in])dnl +],[ +AC_INIT(./build/site.config.m4.in) +[PACKAGE='Sendmail';] # For earlier automake versions +[PACKAGE_NAME='Sendmail';] +AC_SUBST(PACKAGE_NAME) AC_SUBST(PACKAGE_STRING) +])dnl +AC_CONFIG_AUX_DIR([./build])dnl +AC_CANONICAL_SYSTEM +AC_ARG_PROGRAM +AC_PROG_MAKE_SET +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE +ac_version="_ac_version"; +am_version="_am_version"; +AC_SUBST(ac_version) AC_SUBST(am_version) +ifdef([AM_AUTOMAKE_VERSION],[ +[am_version="$am__api_version";] +],[ +[am_version='<=1.5';] +])dnl + + +dnl #------------------------------------------------------------------- +dnl # Set current, min, max versions supported +dnl #------------------------------------------------------------------- +SM_VERS='_SM_VERS'; +SM_DATE='_SM_DATE'; +SM_MINVERS='_SM_MINVERS'; +SM_MAXVERS='_SM_MAXVERS'; +SM_CPYRT='_SM_CPYRT'; +AC_SUBST([SM_VERS]) AC_SUBST([SM_DATE]) +AC_SUBST([SM_MINVERS]) AC_SUBST([SM_MAXVERS]) +AC_SUBST([SM_CPYRT]) + +dnl #------------------------------------------------------------------- +dnl # Set default prefix to the FHS standard location: /usr/ +dnl #------------------------------------------------------------------- +AC_PREFIX_DEFAULT([/usr]) + +#------------------------------------------------------------------- +# Determine date/time of build +#------------------------------------------------------------------- +#sm_date=[`date --iso-8601=seconds`]; # <== Not valid on older systems !!! +sm_date=[`date +%Y-%m-%dT%H:%M:%S%z`]; +sm_utc=[$(expr "$sm_date" : '.*T.*\([+-].*\)');] +sm_time=[$(expr "$sm_date" : '.*T\(.*\)[+-]');] +sm_date=[$(expr "$sm_date" : '\(.*\)T');] +AC_SUBST(sm_date) AC_SUBST(sm_time) AC_SUBST(sm_utc) + +#------------------------------------------------------------------- +# Determine sendmail version +#------------------------------------------------------------------- +if test -f ../build-tree/*/sendmail/version.c; then + version_file='../build-tree/*/sendmail/version.c'; + sm_version=[`sed -ne "s/char[[:space:]]*Version\[\] = \"\([^\"]*\)\";/\1/p"] $version_file`; +else + curr_dir=[$(echo `pwd` | sed -e 's/\/debian$//' -);] + version=[$(expr "${curr_dir}" : '.*-\([0-9.].*\)');] + beta_version=[$(expr "${curr_dir}" : '.*[+~]\([0-9.].*\)');] + if test -z "$beta_version"; then + sm_version="$version"; + else + sm_version="$beta_version"; + fi; + fi; +if test -z "$sm_version"; then + version_file='./build/version.c'; + if test -f $version_file; then + sm_version=[`sed -ne "s/char[[:space:]]*Version\[\] = \"\([^\"]*\)\";/\1/p" $version_file`;] + fi; + fi; + +if test -z "$sm_version"; then + AC_MSG_ERROR([could not determine Sendmail version]) + fi; +[PACKAGE_VERSION="${sm_version}"; +PACKAGE_STRING="${PACKAGE_NAME} ${PACKAGE_VERSION}";] + +# +# break the version into pieces for easier comparisons +# v,r = separate components (8.12.0.Beta7 = 8 12) +# major = 1st two components (8.9.3 -> 8.9) +# minor = last component (8.9.3 -> 3) +# beta = suffix for beta version (8.12.0.Beta7 -> 7) +# math = for numeric (<, >=, etc.) comparisons +# 9.0.0 = 589824 (9.0 = 589824) +# 8.14.1 = 527873 (8.14 = 527872) +# 8.13.1 = 527617 (8.13 = 527616) +# 8.12.11 = 527371 (8.12 = 527360) +# 8.11.7 = 527111 (8.11 = 527104) +# 8.10.2 = 526850 (8.10 = 526848) +# 8.9.3 = 526595 (8.9 = 526592) +# 8.8.8 = 526344 (8.8 = 526336) +# 8.7.6 = 526086 (8.7 = 526080) +v2i () {[ + sm_version_test=`expr 65536 \* $(expr "$1" : '\([0-9]*\)') + \ + 256 \* $(expr "$1" : '[0-9]*\.\([0-9]*\)') + \ + $(expr "$1" : '[0-9]*\.[0-9]*\.\([0-9]*\)')`; + #echo "v2i($1)=$sm_version_test"; + ]}; +i2v () {[ + val=$1; + major=`expr $val / 65536`; + val=`expr $val % 65536`; + minor=`expr $val / 256`; + val=`expr $val % 256`; + result="$major.$minor.$val"; + #echo "i2v($1)=$result"; + #return $result; + ]}; +sm_version_v=[`expr $sm_version : '\([0-9]*\)'`]; +sm_version_r=[`expr $sm_version : '[0-9]*\.\([0-9]*\)'`]; +sm_version_major=["$sm_version_v.$sm_version_r"]; +sm_version_minor=[`expr $sm_version : '[0-9]*\.[0-9]*\.\([0-9]*\)'`]; +sm_version_beta=[`expr $sm_version : '[0-9]*\.[0-9]*\.[0-9]*\.Beta\([0-9]*\)'`]; +sm_version_math=[`expr 65536 \* $sm_version_v \ + + 256 \* $sm_version_r \ + + $sm_version_minor`]; +AC_SUBST(sm_version) AC_SUBST(sm_version_v) AC_SUBST(sm_version_r) +AC_SUBST(sm_version_major) AC_SUBST(sm_version_minor) +AC_SUBST(sm_version_beta) AC_SUBST(sm_version_math) + +#------------------------------------------------------------------- +# Configuration for Sendmail +#------------------------------------------------------------------- +#checks for programs +#checks for libraries +#checks for header files +#checks for typedefs +#checks for structures +#checks for compiler characteristics +#checks for library functions +#checks for system services + +#------------------------------------------------------------------- +# Initialize variables +#------------------------------------------------------------------- +# +# Initialize variables - value is one of: +# no: don't even try to include support for +# yes: require support for +# auto: support if present, warn if not +# +#------------------------------------------------------------------- +AC_ARG_WITH(buildtree, [[ --with-buildtree=.......Build directory [.]]], + [buildtree="$withval"], [buildtree='.']) +AC_ARG_WITH(revision, [[ --with-revision=........Package revision ['']]], + [sm_revision="$withval"], [sm_revision='']) +AC_ARG_WITH(custom, [[ --with-custom=..........Custom package name ['']]], + [sm_custom="$withval"], [sm_custom='']) +AC_ARG_ENABLE(regex, [[ --enable-regex=.........Allow REGEX maps [auto]]], + [sm_enable_regex="$enableval"], [sm_enable_regex=auto]) +AC_ARG_ENABLE(ndbm, [[ --enable-ndbm=..........Allow NDBM maps [auto]]], + [sm_enable_ndbm="$enableval"], [sm_enable_ndbm=auto]) +AC_ARG_ENABLE(newdb, [[ --enable-newdb=.........Allow NEWDB maps [auto]]], + [sm_enable_newdb="$enableval"], [sm_enable_newdb=auto]) +AC_ARG_ENABLE(nis, [[ --enable-nis=...........Allow NIS maps [auto]]], + [sm_enable_nis="$enableval"], [sm_enable_nis=auto]) +AC_ARG_ENABLE(nisplus, [[ --enable-nisplus=.......Allow NISPLUS maps [auto]]], + [sm_enable_nisplus="$enableval"], [sm_enable_nisplus=auto]) +AC_ARG_ENABLE(ldap, [[ --enable-ldap=..........Allow LDAP maps [auto]]], + [sm_enable_ldap="$enableval"], [sm_enable_ldap=auto]) +AC_ARG_ENABLE(hesiod, [[ --enable-hesiod=........Allow HESIOD maps [auto]]], + [sm_enable_hesiod="$enableval"], [sm_enable_hesiod=auto]) +AC_ARG_ENABLE(tcpd, [[ --enable-tcpd=..........Allow TCP wrappers [auto]]], + [sm_enable_tcpd="$enableval"], [sm_enable_tcpd=auto]) +AC_ARG_ENABLE(bind, [[ --enable-bind=..........Allow BIND usage [auto]]], + [sm_enable_bind="$enableval"], [sm_enable_bind=auto]) +AC_ARG_ENABLE(ipv6, [[ --enable-ipv6=..........Allow IPv6 usage [auto]]], + [sm_enable_ipv6="$enableval"], [sm_enable_ipv6=auto]) +AC_ARG_ENABLE(maillock,[[ --enable-maillock=......Allow maillock [auto]]], + [sm_enable_maillock="$enableval"], [sm_enable_maillock=auto]) +AC_ARG_ENABLE(milter, [[ --enable-milter=........Allow milter [auto]]], + [sm_enable_milter="$enableval"], [sm_enable_milter=auto]) +AC_ARG_ENABLE(sfio, [[ --enable-sfio=..........Allow SFIO usage [auto]]], + [sm_enable_sfio="$enableval"], [sm_enable_sfio=auto]) +AC_ARG_ENABLE(auth, [[ --enable-auth=..........Allow SMTP auth [auto]]], + [sm_enable_auth="$enableval"], [sm_enable_auth=auto]) +AC_ARG_ENABLE(tls, [[ --enable-tls=...........Allow TLS/SSL [auto]]], + [sm_enable_tls="$enableval"], [sm_enable_tls=auto]) +AC_ARG_ENABLE(shm, [[ --enable-shm=...........Allow shared memory [auto]]], + [sm_enable_shm="$enableval"], [sm_enable_shm=auto]) + +#------------------------------------------------------------------- +# Resolve variables for sendmail Makefiles and .m4 where +# exec_prefix=${prefix} will not work... +#------------------------------------------------------------------- +#eval PACKAGE_VERSION="${PACKAGE_VERSION}" +#eval PACKAGE_STRING="${PACKAGE_STRING}" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' +eval prefix="${prefix}"; +eval exec_prefix="${exec_prefix}"; +eval bindir="${bindir}"; +eval sbindir="${sbindir}"; +eval libexecdir="${libexecdir}"; +eval sysconfdir="${sysconfdir}"; +eval sharedstatedir="${sharedstatedir}"; +eval localstatedir="${localstatedir}"; +eval libdir="${libdir}"; +eval includedir="${includedir}"; +eval oldincludedir="${oldincludedir}"; +eval datarootdir="${datarootdir}"; +eval datadir="${datadir}"; +eval infodir="${infodir}"; +eval mandir="${mandir}"; +eval docdir="${docdir}"; +eval srcdir="${srcdir}"; + +AC_SUBST(sm_revision) +test -n "$sm_custom" && sm_custom_s="+${sm_custom}"; +AC_SUBST(sm_custom) AC_SUBST(sm_custom_s) +eval buildtree="${buildtree}"; AC_SUBST(buildtree) + +#------------------------------------------------------------------- +# Determine Distribution and version to build for +#------------------------------------------------------------------- +sm_dist_name=''; AC_SUBST(sm_dist_name) +sm_dist_vers=''; AC_SUBST(sm_dist_vers) +DEBIAN=''; AC_SUBST(DEBIAN) +DEBIAN_DH=''; AC_SUBST(DEBIAN_DH) +AC_MSG_CHECKING(for Debian) +if test ! -f /etc/debian_version ; then + DEBIAN='no'; + AC_MSG_RESULT(["$DEBIAN"]) +else + DEBIAN='yes'; + sm_dist_name='Debian'; + sm_dist_vers=`cat /etc/debian_version`; + # Determine which level of debhelper we're building with + DEBIAN_DH='1'; + if test -x /usr/bin/dh_testversion; then + # Must run this test above the debian directory + if (cd .. && dh_testversion 4.1.0 2>/dev/null); then + DEBIAN_DH='4.1'; + elif (cd .. && dh_testversion 4.0.0 2>/dev/null); then + DEBIAN_DH='4'; + elif (cd .. && dh_testversion 3.0.0 2>/dev/null); then + DEBIAN_DH='3'; + elif (cd .. && dh_testversion 2.0.40 2>/dev/null); then + DEBIAN_DH='2'; + else + DEBIAN_DH='1'; + fi; + fi; + if test -x /usr/bin/dpkg-architecture; then + eval `dpkg-architecture -s`; + fi; + sm_build_arch="$DEB_BUILD_ARCH" + sm_host_arch="$DEB_HOST_ARCH" + AC_SUBST(DEB_BUILD_ARCH) AC_SUBST(DEB_BUILD_GNU_CPU) + AC_SUBST(DEB_BUILD_GNU_SYSTEM) AC_SUBST(DEB_BUILD_GNU_TYPE) + AC_SUBST(DEB_HOST_ARCH) AC_SUBST(DEB_HOST_GNU_CPU) + AC_SUBST(DEB_HOST_GNU_SYSTEM) AC_SUBST(DEB_HOST_GNU_TYPE) + AC_MSG_RESULT([$DEBIAN, using debhelper v$DEBIAN_DH]) + fi; + +#------------------------------------------------------------------- +# Announce our presence... +#------------------------------------------------------------------- +AC_SUBST(sm_build_arch) AC_SUBST(sm_host_arch) +echo "" +echo "Sendmail ${sm_version}${sm_custom_s}${sm_revision} (${sm_version_math}) \ +on ${sm_dist_name} ${sm_dist_vers} ${sm_build_arch}/${sm_host_arch}."; +echo "Generated by Autoconf ${ac_version}, Automake ${am_version}."; +echo ""; + +#------------------------------------------------------------------- +# Required programs +# cc, cpp +# install +# egrep +# std includes +#------------------------------------------------------------------- +dnl AC_CANONICAL_HOST +AC_PROG_CC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_LN_S +ifdef([AC_PROG_EGREP], +[AC_PROG_EGREP] +) +AC_HEADER_STDC + +#------------------------------------------------------------------- +# Variables used in site.config.m4.in to set corresponding Build vars +#------------------------------------------------------------------- +# Global +sm_incdirs=''; AC_SUBST(sm_incdirs) +sm_mapdef=''; AC_SUBST(sm_mapdef) +sm_envdef=''; AC_SUBST(sm_envdef) +sm_libs=''; AC_SUBST(sm_libs) +# editmap +sm_editmap_envdef=''; AC_SUBST(sm_editmap_envdef) +sm_editmap_libs=''; AC_SUBST(sm_editmap_libs) +# libmilter +sm_libmilter_envdef='-fPIC'; AC_SUBST(sm_libmilter_envdef) +sm_libmilter_libs=''; AC_SUBST(sm_libmilter_libs) +sm_libmilter_version=0; AC_SUBST(sm_libmilter_version) +# libsm +sm_libsm_envdef='-fPIC'; AC_SUBST(sm_libsm_envdef) +sm_libsm_libs=''; AC_SUBST(sm_libsm_libs) +# libsmdb +sm_libsmdb_envdef=''; AC_SUBST(sm_libsmdb_envdef) +sm_libsmdb_libs=''; AC_SUBST(sm_libsmdb_libs) +# libsmutil +sm_libsmutil_envdef='-fPIC'; AC_SUBST(sm_libsmutil_envdef) +sm_libsmutil_libs=''; AC_SUBST(sm_libsmutil_libs) +# mail.local +sm_mail_local_envdef=''; AC_SUBST(sm_mail_local_envdef) +sm_mail_local_libs=''; AC_SUBST(sm_mail_local_libs) +# mailstats +sm_mailstats_envdef=''; AC_SUBST(sm_mailstats_envdef) +sm_mailstats_libs=''; AC_SUBST(sm_mailstats_libs) +# makemap +sm_makemap_envdef=''; AC_SUBST(sm_makemap_envdef) +sm_makemap_libs=''; AC_SUBST(sm_makemap_libs) +# praliases +sm_praliases_envdef=''; AC_SUBST(sm_praliases_envdef) +sm_praliases_libs=''; AC_SUBST(sm_praliases_libs) +# rmail +sm_rmail_envdef=''; AC_SUBST(sm_rmail_envdef) +sm_rmail_libs=''; AC_SUBST(sm_rmail_libs) +# sendmail +sm_sendmail_envdef=''; AC_SUBST(sm_sendmail_envdef) +sm_sendmail_libs=''; AC_SUBST(sm_sendmail_libs) +# smrsh +sm_smrsh_envdef=''; AC_SUBST(sm_smrsh_envdef) +sm_smrsh_libs=''; AC_SUBST(sm_smrsh_libs) +# vacation +sm_vacation_envdef=''; AC_SUBST(sm_vacation_envdef) +sm_vacation_libs=''; AC_SUBST(sm_vacation_libs) + +#------------------------------------------------------------------- +# Auxilliary variables +#------------------------------------------------------------------- +sm_databases=''; AC_SUBST(sm_databases) +sm_features=''; AC_SUBST(sm_features) +sm_badepends=''; AC_SUBST(sm_badepends) +sm_depends=''; AC_SUBST(sm_depends) +sm_recommends=''; AC_SUBST(sm_recommends) +sm_suggests=''; AC_SUBST(sm_suggests) +sm_newdb_lib=''; AC_SUBST(sm_newdb_lib) +sm_ldap_lib=''; AC_SUBST(sm_ldap_lib) +sm_hesiod_parms=''; AC_SUBST(sm_hesiod_parms) +sm_ffr=''; AC_SUBST(sm_ffr) +sm_m4_ffr=''; AC_SUBST(sm_m4_ffr) + +#------------------------------------------------------------------- +# Override default/specified values +#------------------------------------------------------------------- +# Change pid from /var/run to /var/run/sendmail/mta to alleviate clutter +sm_sendmail_envdef="$sm_sendmail_envdef \ +-D_PATH_SENDMAILPID=\\\"${localstatedir}/run/sendmail/mta/sendmail.pid\\\""; +# Set paths for smrsh +sm_smrsh_envdef="$sm_smrsh_envdef \ +-DCMDDIR=\\\"${sysconfdir}/mail/smrsh\\\""; +sm_smrsh_envdef="$sm_smrsh_envdef -DPATH=\\\"/usr/bin:/bin\\\""; +# +# Everything we'll build on has strerror(3) +# sm_envdef="$sm_envdef -DHASSTRERROR=1"; +# +# The next two require a patch to {include/sm,sendmail,src}/conf.h +# and would give duplicate definition warnings if left herein +#sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; +sm_envdef="$sm_envdef -DHASFCHMOD=1 -DHASSETRLIMIT=1"; +# +# Back by request... +#sm_envdef="$sm_envdef -DPICKY_HELO_CHECK"; +# +# flock() doens't work over NFS and there's a rumour of b0rkedness in +# Linux 2.4.x kernels ;( +sm_envdef="$sm_envdef -DHASFLOCK=0"; +sm_libsm_envdef="$sm_libsm_envdef -DHAVE_NANOSLEEP=1"; +sm_ffr="$sm_ffr -D_FFR_QUEUE_SCHED_DBG"; # %%%%%% TESTING %%%%%%%% +# +# version specific setup +if test "$sm_version_major" = "8.14"; then + sm_ffr="$sm_ffr -D_FFR_SKIP_DOMAINS"; + sm_mapdef="$sm_mapdef -DSOCKETMAP"; + sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; + sm_ffr="$sm_ffr -D_FFR_GROUPREADABLEAUTHINFOFILE"; + sm_ffr="$sm_ffr -D_FFR_DAEMON_NETUNIX"; + sm_ffr="$sm_ffr -D_FFR_NO_PIPE"; + sm_ffr="$sm_ffr -D_FFR_SHM_STATUS"; + sm_ffr="$sm_ffr -D_FFR_RHS"; + sm_ffr="$sm_ffr -D_FFR_MAIL_MACRO"; + sm_m4_ffr="$sm_m4_ffr [define(\`_FFR_MAIL_MACRO')]"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.13"; then + sm_ffr="$sm_ffr -D_FFR_SKIP_DOMAINS"; + sm_mapdef="$sm_mapdef -DSOCKETMAP"; + sm_ffr="$sm_ffr -D_FFR_BLOCK_PROXIES"; + sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; + sm_ffr="$sm_ffr -D_FFR_GROUPREADABLEAUTHINFOFILE"; + sm_ffr="$sm_ffr -D_FFR_CONTROL_MSTAT"; + sm_ffr="$sm_ffr -D_FFR_DAEMON_NETUNIX"; + sm_ffr="$sm_ffr -D_FFR_NO_PIPE"; + sm_ffr="$sm_ffr -D_FFR_SHM_STATUS"; + sm_ffr="$sm_ffr -D_FFR_RHS"; + sm_ffr="$sm_ffr -D_FFR_MAIL_MACRO"; + sm_ffr="$sm_ffr -D_FFR_HELONAME"; + sm_m4_ffr="$sm_m4_ffr [define(\`_FFR_MAIL_MACRO')]"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.12"; then + sm_envdef="$sm_envdef -DUSESETEUID=1 -DHASGETUSERSHELL=1"; + # + # Note: There is a problem with both <=2.2.19 and <=2.4.2-acx in + # that setitimer() sometimes looses events, this is mentioned + # in the man page, but seems to hit even in non-pathologically + # heavy loading. So, we revert back to alarm() - which, thusfar + # has proven stable. + # Note: This actually seems to have been a sendmail issue fixed in 8.12.3 + sm_envdef="$sm_envdef -DSM_CONF_SETITIMER=0"; + # + sm_ffr="$sm_ffr -D_FFR_MAX_FORWARD_ENTRIES=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; + sm_ffr="$sm_ffr -D_FFR_CONTROL_MSTAT"; + sm_ffr="$sm_ffr -D_FFR_GROUPREADABLEAUTHINFOFILE"; + sm_ffr="$sm_ffr -D_FFR_DAEMON_NETUNIX"; + sm_ffr="$sm_ffr -D_FFR_SHM_STATUS"; + sm_ffr="$sm_ffr -D_FFR_RHS"; + sm_ffr="$sm_ffr -D_FFR_MAIL_MACRO"; + sm_m4_ffr="$sm_m4_ffr [define(\`_FFR_MAIL_MACRO')]"; + sm_ffr="$sm_ffr -D_FFR_NO_PIPE"; + sm_ffr="$sm_ffr -D_FFR_QUARANTINE"; + sm_ffr="$sm_ffr -D_FFR_DEAL_WITH_ERROR_SSL"; + sm_mailstats_envdef="$sm_mailstats_envdef -D_FFR_QUARANTINE"; + sm_vacation_envdef="$sm_vaction_envdef -D_FFR_RETURN_ADDR"; +elif test "$sm_version_major" = "8.11"; then + sm_vacation_envdef="$sm_vaction_envdef -D_FFR_DEBUG=1"; + sm_vacation_envdef="$sm_vaction_envdef -D_FFR_LISTDB=1"; + sm_ffr="$sm_ffr -D_FFR_TESTMODE_DROP_PRIVS=1"; + sm_ffr="$sm_ffr -D_FFR_ADDR_TYPE=1"; + sm_ffr="$sm_ffr -D_FFR_ARITH=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUE_FILE_MODE=1"; + sm_ffr="$sm_ffr -D_FFR_MAX_FORWARD_ENTRIES=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.10"; then + sm_ffr="$sm_ffr -D_FFR_ADDR_TYPE=1"; + sm_ffr="$sm_ffr -D_FFR_ARITH=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUE_FILE_MODE=1"; + sm_ffr="$sm_ffr -D_FFR_MAX_FORWARD_ENTRIES=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUEDELAY=1"; +elif test "$sm_version_major" = "8.9"; then + sm_ffr="$sm_ffr -D_FFR_MAX_MIME_HEADER_LENGTH=1"; + sm_ffr="$sm_ffr -D_FFR_MAX_HEADERS_LENGTH=1"; + sm_ffr="$sm_ffr -D_FFR_MAXRCPT_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_DSN_RRT_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_CONTROL_SOCKET=1"; + sm_ffr="$sm_ffr -D_FFR_TRUSTED_USER=1"; + sm_ffr="$sm_ffr -D_FFR_MAP_SYSLOG=1"; + sm_ffr="$sm_ffr -D_DONT_PROBE_INTERFACES_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_PIDFILE_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_DEADLETTERDROP_OPTION=1"; + sm_ffr="$sm_ffr -D_FFR_QUEUE_FILE_MODE=1"; + fi; + +# 8.12.5+ +v2i 8.12.5; +if test $sm_version_math -ge $sm_version_test; then + :; +else + sm_mail_local_envdef="$sm_mail_local_envdef \ +-D_PATH_MAILDIR=\\\"${localstatedir}/mail\\\""; + sm_rmail_envdef="$sm_rmail_envdef \ +-D_PATH_SENDMAIL=\\\"${sbindir}/sendmail\\\""; + sm_vacation_envdef="$sm_vacation_envdef \ +-D_PATH_SENDMAIL=\\\"${sbindir}/sendmail\\\""; + fi; + +# 8.12.0+ +v2i 8.12.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + :; + fi; + +# 8.11.0+ +v2i 8.11.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + sm_enable_tls=no; + fi; + +# 8.10.0+ +v2i 8.10.0; +if test $sm_version_math -ge $sm_version_test; then + # SRCROUTE works quite well with glibc 2.1+ (should test for this...) + sm_sendmail_envdef="$sm_sendmail_envdef -DIP_SRCROUTE=1"; + # Allow setting Hostname from $j... + sm_ffr="$sm_ffr -D_FFR_RESET_MACRO_GLOBALS"; + sm_mail_local_envdef="$sm_mail_local_envdef -DCONTENTLENGTH"; + # Note: the next line is commented to *prevent* mode 660 files in /var/mail + #sm_mail_local_envdef="$sm_mail_local_envdef -DMAILGID=8"; +else + sm_enable_milter=no; + sm_enable_auth=no; + sm_enable_ipv6=no; + sm_sendmail_envdef="$sm_sendmail_envdef \ +-D_PATH_VARTMP=\\\"${localstatedir}/lib/sendmail\\\""; + sm_sendmail_envdef="$sm_sendmail_envdef \ +-D_PATH_SENDMAILCF=\\\"${sysconfdir}/mail/sendmail.cf\\\""; + fi; + +# 8.9.0+ +v2i 8.9.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + :; + fi; + +# 8.8.0+ +v2i 8.8.0; +if test $sm_version_math -ge $sm_version_test; then + :; +else + sm_enable_ldap=no; + sm_enable_tcpd=no; + fi; + +# Shared memory support (on 8.12, but needs a recent kernel) +# Note: there is a race condition where sometimes sendmail can't +# use shared memory because the prior pid didn't delete it +# but we override the linux default for performance reasons +# (or rather we would, if most users weren't on kernels that +# don't properly support it - < 2.2.19 or 2.4.1) +# *ANY* arch still on a 2.2.x; x<19 must *NOT* enable this... +if test "$sm_enable_shm" != "no"; then + v2i 8.12.0; + if test $sm_version_math -lt $sm_version_test; then + sm_enable_shm=no; + fi; + if test "arm" = "${sm_host_arch}"; then + sm_enable_shm=no; + fi; + fi; +if test "$sm_enable_shm" != "no"; then + sm_enable_shm=yes; + fi; +AC_SUBST(sm_enable_shm) + +# Milter (_FFR_ on 8.10, 8.11, native on 8.12+) +if test "$sm_enable_milter" != "no"; then + sm_libmilter_envdef="$sm_libmilter_envdef -DSM_CONF_POLL=1"; + sm_libmilter_version=0; + v2i 8.14.0; + if test $sm_version_math -ge $sm_version_test; then + sm_libmilter_version=1; + fi; + v2i 8.10.0; + if test $sm_version_math -ge $sm_version_test; then + sm_enable_milter=yes; + v2i 8.12.0; + if test $sm_version_math -ge $sm_version_test; then + sm_libmilter_envdef="$sm_libmilter_envdef -D_FFR_MULTILINE"; + v2i 8.13.0; + if test $sm_version_math -lt $sm_version_test; then + sm_sendmail_envdef="$sm_sendmail_envdef -DMILTER"; + sm_libmilter_envdef="$sm_libmilter_envdef \ +-D_FFR_MILTER_ROOT_UNSAFE"; + fi; + sm_libmilter_libs="$sm_libmilter_libs" + else + sm_libmilter_envdef="$sm_libmilter_envdef -D_FFR_MILTER"; + sm_sendmail_envdef="$sm_sendmail_envdef -D_FFR_MILTER"; + fi; + v2i 8.11.0; + if test $sm_version_math -ge $sm_version_test; then + sm_libmilter_envdef="$sm_libmilter_envdef -D_FFR_SMFI_PROGRESS"; + fi; + fi; + fi; +AC_SUBST(sm_enable_milter) + +# SFIO (required for TLS and security layer of SASL on 8.11) +# We'll let it go through here on any version (to check headers), but +# issue no messages unless needed... +if test "$sm_enable_tls" != "no"; then + if test $sm_enable_sfio != no; then + sm_enable_sfio=auto; + elif test $sm_enable_tls = yes; then + if test "$sm_version_major" = "8.11"; then + AC_MSG_ERROR([SFIO is disabled, but you asked for TLS]) + fi; + elif test $sm_enable_tls = auto; then + if test "$sm_version_major" = "8.11"; then + AC_MSG_WARN([SFIO is disabled, not trying TLS]) + fi; + fi; +elif test $sm_enable_sfio != no; then + if test "$sm_version_major" = "8.11"; then + AC_MSG_WARN([TLS is disabled, no need for SFIO]) + fi; + sm_enable_sfio=no; + fi; + +#------------------------------------------------------------------- +# +# Check for presence of REGEX headers +# +sm_have_regex=no; +if test $sm_enable_regex != no; then + AC_CHECK_HEADERS(regex.h, + [sm_have_regex=yes] + ,[sm_have_regex=no]) + + if test $ac_cv_header_regex_h = yes ; then + AC_CHECK_FUNC(regfree, + : + ,AC_MSG_ERROR([POSIX regex required.]) + ) + fi; + + if test $sm_have_regex = yes; then + sm_databases="$sm_databases, REGEX"; + sm_mapdef="$sm_mapdef -DMAP_REGEX"; + elif test $sm_enable_regex = auto; then + AC_MSG_WARN([Could not locate REGEX package]) + else + AC_MSG_ERROR([Could not locate REGEX package]) + fi; + fi; +sm_enable_regex=$sm_have_regex; AC_SUBST(sm_enable_regex) + +#------------------------------------------------------------------- +# +# Check for presence of NDBM headers +# +sm_have_ndbm=no; +if test $sm_enable_ndbm != no; then + AC_CHECK_HEADERS(ndbm.h db1/ndbm.h, + [sm_have_ndbm=yes] + ,[sm_have_ndbm=no]) + + if test $sm_have_ndbm != no; then + AC_EGREP_CPP(DBM_PAGFNO_NOT_AVAILABLE,[ + #if defined(HAVE_DB1_NDBM_H) + #include <db1/ndbm.h> + #elif defined(HAVE_NDBM_H) + #include <ndbm.h> + #endif + dbm_pagfno(0); + ], [sm_have_ndbm=no]) + + if test $sm_have_ndbm = no; then + AC_MSG_WARN([DB emulation of ndbm not sufficient, -lndbm ignored]) + fi; + fi; + + if test $sm_have_ndbm != no; then + AC_CHECK_LIB(ndbm, main, + [sm_have_ndmb=yes] + ,[sm_have_ndmb=no]) + + if test $sm_have_ndbm = no; then + AC_MSG_WARN([Could not find -lndbm]) + fi; + fi; + + # only libsmdb and sendmail #include <ndbm.h>, but libsmdb is needed + # by most of the other components + if test $sm_have_ndbm = yes; then + sm_databases="$sm_databases, DBM"; + sm_mapdef="$sm_mapdef -DNDBM"; + sm_editmap_libs="$sm_editmap_libs -lndbm"; + sm_makemap_libs="$sm_makemap_libs -lndbm"; + sm_praliases_libs="$sm_praliases_libs -lndbm"; + sm_sendmail_libs="$sm_sendmail_libs -lndbm"; + sm_vacation_libs="$sm_vacation_libs -lndbm"; + elif test $sm_enable_ndbm = auto; then + AC_MSG_WARN([Could not locate NDBM package]) + else + AC_MSG_ERROR([Could not locate NDBM package]) + fi; + fi; +sm_enable_ndbm=$sm_have_ndbm; AC_SUBST(sm_enable_ndbm) + +#------------------------------------------------------------------- +# +# Check for presence of NEWDB headers (and determine version) +# +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_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 + sm_have_newdb=yes; + fi; + + if test $sm_have_newdb = yes; then + AC_MSG_CHECKING([newdb version]) + AC_EGREP_CPP(sm_newdb_lib=4,[ + #if defined(HAVE_DB4_DB_H) + #include <db4/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #if DB_VERSION_MAJOR >= 4 + sm_newdb_lib=4 + #endif + ], [sm_newdb_lib=db4], [ + AC_EGREP_CPP(sm_newdb_lib=3,[ + #if defined(HAVE_DB3_DB_H) + #include <db3/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #if DB_VERSION_MAJOR >= 3 + sm_newdb_lib=3 + #endif + ], [sm_newdb_lib=db3], [ + AC_EGREP_CPP(sm_newdb_lib=2,[ + #if defined(HAVE_DB2_DB_H) + #include <db2/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #if DB_VERSION_MAJOR >= 2 + sm_newdb_lib=2 + #endif + ], [sm_newdb_lib=db2], [ + AC_EGREP_CPP(sm_newdb_lib=1,[ + #if defined(HAVE_DB1_DB_H) + #include <db1/db.h> + #elif defined(HAVE_DB_H) + #include <db.h> + #endif + #ifndef DB_VERSION_MAJOR + #define DB_VERSION_MAJOR 1 + #endif + #if DB_VERSION_MAJOR >= 1 + sm_newdb_lib=1 + #endif + ], [sm_newdb_lib=db1]) + ]) + ]) + ]) + # < 8.10.x can't handle db3+ + v2i 8.10.0; + if test $sm_version_math -lt $sm_version_test; then + #if t[ $ac_cv_header_db3_db_185_h = yes ] \ + #|| [ $ac_cv_header_db_185_h = yes ]; then + # sm_use_185=yes; + #else + ac_cv_header_db4_db_h=no; + ac_cv_header_db3_db_h=no; + if [[ $sm_newdb_lib = db4 ]] \ + || [[ $sm_newdb_lib = db3 ]]; then + if test $ac_cv_header_db2_db_h = yes; then + AC_MSG_WARN([<8.10.0 & $sm_newdb_lib: trying db2]) + sm_newdb_lib=db2; + else + AC_MSG_WARN([<8.10.0 & $sm_newdb_lib: trying db1]) + sm_newdb_lib=db1; + fi; + fi; + # fi; + fi; + # < 8.9.0 can't handle db2+ ???? + v2i 8.9.0; + if test $sm_version_math -lt $sm_version_test; then + ac_cv_header_db4_db_h=no; + ac_cv_header_db3_db_h=no; + ac_cv_header_db2_db_h=no; + if test $sm_newdb_lib = db2; then + AC_MSG_WARN([<8.9.0 & $sm_newdb_lib: trying db1]) + sm_newdb_lib=db1; + fi; + fi; + AC_MSG_RESULT([$sm_newdb_lib]) + if test "X$sm_newdb_lib" = "X"; then + AC_MSG_WARN([NEWDB version unknown, omitting support!]) + sm_have_newdb=no; + fi; + fi; + + # Check first for a library matching the db version (-ldb4, etc) + # then check to see if -ldb will work + if test $sm_have_newdb != no; then + sm_old_libs="$LIBS"; + 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 + elif test $sm_newdb_lib = db3; then + AC_CHECK_LIB($sm_newdb_lib, db_create, [:], [ + AC_CHECK_LIB(db, db_create, + [sm_newdb_lib='db'], [sm_have_newdb=no])dnl + ])dnl + elif test $sm_newdb_lib = db2; then + AC_CHECK_LIB($sm_newdb_lib, db_open, [:], [ + AC_CHECK_LIB(db, db_open, + [sm_newdb_lib='db'], [sm_have_newdb=no])dnl + ])dnl + else + AC_CHECK_LIB($sm_newdb_lib, dbopen, [:], [ + AC_CHECK_LIB(db, dbopen, + [sm_newdb_lib='db'], [sm_have_newdb=no])dnl + ])dnl + fi; + if test $sm_newdb_lib = db; then + AC_CHECK_LIB($sm_newdb_lib, dbopen, [:], [ + AC_CHECK_LIB(db, dbopen, + [sm_newdb_lib='db'], [sm_have_newdb=no])dnl + ])dnl + fi; + LIBS="$sm_old_libs"; + + if test $sm_have_newdb != yes; then + AC_MSG_WARN([Could not find -l$sm_newdb_lib (or -ldb)]) + fi; + fi; + + # only libsmdb and sendmail #include <db.h>, but libsmdb is needed + # by most of the other components + if test $sm_have_newdb = yes; then + if test \( $ac_cv_header_db4_db_h = yes -a $sm_newdb_lib = db4 \) \ + -o \( $ac_cv_header_db3_db_h = yes -a $sm_newdb_lib = db3 \) \ + -o \( $ac_cv_header_db2_db_h = yes -a $sm_newdb_lib = db2 \) \ + -o \( $ac_cv_header_db1_db_h = yes -a $sm_newdb_lib = db1 \); then + sm_libsmdb_envdef="$sm_libsmdb_envdef -I/usr/include/$sm_newdb_lib"; + sm_sendmail_envdef="$sm_sendmail_envdef -I/usr/include/$sm_newdb_lib"; + fi; + if test $sm_use_185 = yes; then + : + #sm_libsmdb_envdef="$sm_libsmdb_envdef -Ddb.h db_185.h"; + #sm_sendmail_envdef="$sm_sendmail_envdef -Ddb.h db_185.h"; + fi; + junk=$(echo "${sm_newdb_lib}" | sed -e 's/^db\(-\)\?//'); + sm_databases="$sm_databases, DB"; + if test $junk != 1; then + sm_badepends="$sm_badepends, libdb${junk}-dev"; + fi; + sm_mapdef="$sm_mapdef -DNEWDB"; + junk=$(echo "${sm_newdb_lib}" | sed -e 's/^db//'); + sm_newdb_lib="-ldb${junk}"; + sm_editmap_libs="$sm_editmap_libs $sm_newdb_lib"; + sm_makemap_libs="$sm_makemap_libs $sm_newdb_lib"; + sm_praliases_libs="$sm_praliases_libs $sm_newdb_lib"; + sm_sendmail_libs="$sm_sendmail_libs $sm_newdb_lib"; + sm_vacation_libs="$sm_vacation_libs $sm_newdb_lib"; + elif test $sm_enable_newdb = auto; then + AC_MSG_WARN([Could not locate NEWDB (libdb{4,3,2,1,}-dev) package]) + else + AC_MSG_ERROR([Could not locate NEWDB (libdb{4,3,2,1,}-dev) package]) + fi; + fi; +sm_enable_newdb=$sm_have_newdb; AC_SUBST(sm_enable_newdb) +AC_SUBST(sm_newdb_lib) + +#------------------------------------------------------------------- +# +# Check for presence of NIS headers +# +sm_have_nis=no; +if test $sm_enable_nis != no; then + AC_CHECK_HEADERS(rpcsvc/ypclnt.h, + [sm_have_nis=yes] + ,[sm_have_nis=no]) + + if test $sm_have_nis = yes; then + AC_CHECK_LIB(nsl, main, + [sm_have_nis=yes] + ,[sm_have_nis=no]) + + if test $sm_have_nis != yes; then + AC_MSG_WARN([Could not find -lnsl]) + fi; + fi; + + if test $sm_have_nis = yes; then + sm_databases="$sm_databases, NIS"; + sm_mapdef="$sm_mapdef -DNIS"; + sm_sendmail_libs="$sm_sendmail_libs -lnsl"; + elif test $sm_enable_nis = auto; then + AC_MSG_WARN([Could not locate NIS package]) + else + AC_MSG_ERROR([Could not locate NIS package]) + fi; + fi; +sm_enable_nis=$sm_have_nis; AC_SUBST(sm_enable_nis) + +#------------------------------------------------------------------- +# +# Check for presence of NISPLUS headers +# +sm_have_nisplus=no; +if test $sm_enable_nisplus != no; then + AC_CHECK_HEADERS(rpcsvc/nis.h, + [sm_have_nisplus=yes] + ,[sm_have_nisplus=no]) + + if [[ $sm_have_nisplus = yes ]] \ + && [[ $sm_have_nis = no ]]; then + AC_CHECK_LIB(nsl, main, + [sm_have_nis=yes] + ,[sm_have_nis=no]) + + if test $sm_have_nis != yes; then + AC_MSG_WARN([Could not find -lnsl]) + fi; + fi; + + if test $sm_have_nisplus = yes; then + sm_databases="$sm_databases, NIS+"; + sm_mapdef="$sm_mapdef -DNISPLUS"; + if test $sm_have_nis != yes; then + sm_sendmail_libs="$sm_sendmail_libs -lnsl"; + fi; + elif test $sm_enable_nisplus = auto; then + AC_MSG_WARN([Could not locate NISPLUS package]) + else + AC_MSG_ERROR([Could not locate NISPLUS package]) + fi; + fi; +sm_enable_nisplus=$sm_have_nisplus; AC_SUBST(sm_enable_nisplus) + +#------------------------------------------------------------------- +# +# Check for presence of LDAP headers (support OpenLDAP v2/v1, Umich) +# +sm_have_ldap=no; +sm_have_ldap_init=no; +sm_have_ldap_memfree=no; +sm_ldap_inc=; +sm_ldap_lib=; +sm_ldap_pkg=; +if test $sm_enable_ldap != no; then + AC_CHECK_HEADERS(ldap.h umich-ldap/ldap.h) + + if test $ac_cv_header_ldap_h = yes; then + AC_CHECK_LIB(ldap, main, + [sm_have_ldap=yes] + ,[sm_have_ldap=no] + ,[-llber]) + AC_CHECK_LIB(ldap, ldap_init, + [sm_have_ldap_init=yes] + ,[sm_have_ldap_init=no] + ,[-llber]) + AC_CHECK_LIB(ldap, ldap_memfree, + [sm_have_ldap_memfree=yes] + ,[sm_have_ldap_memfree=no] + ,[-llber]) + + if test $sm_have_ldap = yes; then + AC_CHECK_LIB(lber, main, + [sm_have_ldap=yes] + ,[sm_have_ldap=no]) + fi; + + if test $sm_have_ldap = yes; then + AC_MSG_CHECKING([for openldap package]) + AC_EGREP_CPP([sm_ldap_version=3], [ + #if defined(HAVE_LDAP_H) + #include <ldap.h> + #if defined(LDAP_VERSION3) + sm_ldap_version=3 + #else + sm_ldap_version=2 + #endif + #endif + ], sm_ldap_pkg="libldap2-dev" + , sm_ldap_pkg="libopenldap-dev") + AC_MSG_RESULT([$sm_ldap_pkg]) + fi; + + if test $sm_have_ldap = yes; then + sm_badepends="$sm_badepends, $sm_ldap_pkg" + sm_ldap_lib="-lldap -llber"; + else + AC_MSG_WARN([Could not find OpenLDAP -lldap or -llber]) + fi; + fi; + + if [[ "X$ac_cv_header_umich_ldap_ldap_h" = Xyes ]] \ + && [[ $sm_have_ldap != yes ]]; then + AC_CHECK_LIB(umich_ldap, main, + [sm_have_ldap=yes] + ,[sm_have_ldap=no] + ,[-lumich_lber]) + + if test $sm_have_ldap = yes; then + AC_CHECK_LIB(umich_lber, main, + [sm_have_ldap=yes] + ,[sm_have_ldap=no]) + fi; + + if test $sm_have_ldap = yes; then + sm_badepends="$sm_badepends, umich-libldap-dev"; + sm_ldap_inc="-I/usr/include/umich-ldap"; + sm_ldap_lib="-lumich_ldap -lumich_lber"; + else + AC_MSG_WARN([Could not find UMich -lldap or -llber]) + fi; + fi; + + if test $sm_have_ldap = yes; then + # + # sendmail/conf.h includes LDAP, so everything does... + sm_databases="$sm_databases, LDAP"; + sm_mapdef="$sm_mapdef -DLDAPMAP"; + sm_incdirs="$sm_incdirs $sm_ldap_inc"; + #sm_libs="$sm_libs $sm_ldap_lib"; + sm_editmap_libs="$sm_editmap_libs $sm_ldap_lib"; + sm_libsm_libs="$sm_libsm_libs $sm_ldap_lib"; + sm_mail_local_libs="$sm_mail_local_libs $sm_ldap_lib"; + sm_mailstats_libs="$sm_mailstats_libs $sm_ldap_lib"; + sm_makemap_libs="$sm_makemap_libs $sm_ldap_lib"; + sm_praliases_libs="$sm_praliases_libs $sm_ldap_lib"; + sm_rmail_libs="$sm_rmail_libs $sm_ldap_lib"; + sm_sendmail_libs="$sm_sendmail_libs $sm_ldap_lib"; + sm_smrsh_libs="$sm_smrsh_libs $sm_ldap_lib"; + sm_vacation_libs="$sm_vacation_libs $sm_ldap_lib"; + sm_libsm_envdef="$sm_libsm_envdef -D_LDAP_EXAMPLE_"; + if test $sm_have_ldap_init = yes; then + sm_libsm_envdef="$sm_libsm_envdef -DLDAP_REFERRALS"; + sm_sendmail_envdef="$sm_sendmail_envdef -DLDAP_REFERRALS"; + sm_libsm_envdef="$sm_libsm_envdef -D_FFR_LDAP_URI"; + sm_sendmail_envdef="$sm_sendmail_envdef -D_FFR_LDAP_URI"; + sm_libsm_envdef="$sm_libsm_envdef -D_FFR_LDAP_SETVERSION"; + sm_sendmail_envdef="$sm_sendmail_envdef -D_FFR_LDAP_SETVERSION"; + fi; + if test $sm_have_ldap_memfree = yes; then + sm_libsm_envdef="$sm_libsm_envdef -DSM_CONF_LDAP_MEMFREE"; + fi; + elif test $sm_enable_ldap = auto; then + AC_MSG_WARN([Could not locate LDAP (libldap2-dev) package]) + else + AC_MSG_ERROR([Could not locate LDAP (libldap2-dev) package]) + fi; + fi; +sm_enable_ldap=$sm_have_ldap; AC_SUBST(sm_enable_ldap) +AM_CONDITIONAL(SM_ENABLE_LDAP, test x$sm_enable_ldap = xyes) + +#------------------------------------------------------------------- +# +# Check for presence of resolve(and/or bind) headers +# if found, enable other maps dependant upon resolver libraries +# +# Since GLIBC 2.2.1 has mucked with resolv.h, we must build w/bind 8.2.2p7 +# Unfortunately, this will fsck up HESIOD (bind 8.2 only has partial support) +# It also messed with openLDAP - making it not work ;( +# +# We're now using resolv.h - as it seems to be working (w/sendmail changes) +# +sm_have_resolve=no; +sm_have_bind=no; +resolve_lib=''; +resolve_inc=''; +#if test $sm_enable_resolv != no; then + AC_CHECK_HEADERS(resolv.h bind/resolv.h) + if test $ac_cv_header_resolv_h = yes; then + sm_have_resolve=yes; + fi; + if test $ac_cv_header_bind_resolv_h = yes; then + sm_have_bind=yes; + fi; + + if test $ac_cv_header_resolv_h = yes; then + AC_CHECK_LIB(resolv, __res_query, + [sm_have_resolve=yes] + , [AC_CHECK_LIB(resolv, res_query, + [sm_have_resolve=yes] + ,[sm_have_resolve=no])] + ) + + if test $sm_have_resolve = yes; then + resolve_inc=''; + resolve_lib='-lresolv'; + else + AC_MSG_WARN([Could not find -lresolv]) + fi; + fi; + + if test $ac_cv_header_bind_resolv_h = yes; then + AC_CHECK_LIB(bind, __res_query, + [sm_have_bind=yes] + ,[sm_have_bind=no]) + + if test $sm_have_bind = yes; then + if test $sm_enable_bind = yes; then + sm_badepends="$sm_badepends, bind-dev"; + resolve_inc='-I/usr/include/bind'; + resolve_lib='-lbind -lresolv'; + else + sm_have_bind=no; + fi; + else + AC_MSG_WARN([Could not find -lbind (bind-dev)]) + fi; + fi; + + if test $sm_have_resolve = yes; then + v2i 8.12.0; + if test $sm_version_math -ge $sm_version_test; then + sm_databases="$sm_databases, DNS"; + fi; + #sm_incdirs="$sm_incdirs $resolve_inc"; + #sm_libs="$sm_libs "$resolve_lib"; + sm_sendmail_envdef="$sm_sendmail_envdef $resolve_inc"; + sm_sendmail_libs="$sm_sendmail_libs $resolve_lib"; + else + AC_MSG_ERROR([Could not locate RESOLV package]) + fi; +# fi; +sm_enable_bind=$sm_have_bind; AC_SUBST(sm_enable_bind) + +#------------------------------------------------------------------- +# +# Check for presence of HESIOD headers +# Note: if using libhesiod, we should have HES_GETMAILHOST +# if using libbind, it doesn't have HES_GETMAILHOST ;-{ +# +sm_have_hesiod=no; +sm_hesiod_parms=''; +if test $sm_enable_hesiod != no; then + AC_CHECK_HEADERS(hesiod.h bind/hesiod.h) + if test $ac_cv_header_hesiod_h = yes; then + sm_have_hesiod=yes; + elif [[ $ac_cv_header_bind_hesiod_h = yes ]] \ + && [[ $sm_have_bind = yes ]]; then + sm_have_hesiod=yes; + fi; + + if test $sm_have_hesiod = yes; then + AC_MSG_CHECKING([for hes_getmailhost]) + CPPFLAGS_SAVE="$CPPFLAGS"; + CPPFLAGS="$resolve_inc"; + AC_EGREP_CPP([hes_getmailhost\(], [ + #include <hesiod.h> + ], sm_hesiod_parms="-DHES_GETMAILHOST") + CPPFLAGS="$CPPFLAGS_SAVE"; + if test -z "$sm_hesiod_parms"; then + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi; + fi; + + if test $sm_have_hesiod = yes; then + sm_databases="$sm_databases, HESIOD"; + sm_badepends="$sm_badepends, libhesiod-dev"; + sm_mapdef="$sm_mapdef -DHESIOD"; + sm_libsmutil_envdef="$sm_libsmutil_envdef $resolve_inc"; + sm_sendmail_envdef="$sm_sendmail_envdef $sm_hesiod_parms"; + # Need following if not using bind headers + if test -z "$resolve_inc"; then + sm_sendmail_libs="$sm_sendmail_libs -lhesiod"; + fi; + elif test $sm_enable_hesiod = auto; then + AC_MSG_WARN([Could not locate HESIOD (libhesiod-dev) package]) + else + AC_MSG_ERROR([Could not locate HESIOD (libhesiod-dev) package]) + fi; + fi; +sm_enable_hesiod=$sm_have_hesiod; AC_SUBST(sm_enable_hesiod) + +#------------------------------------------------------------------- +# +# Check for presence of TCP Wrapper headers +# +sm_have_tcpd=no; +if test $sm_enable_tcpd != no; then + AC_CHECK_HEADERS(tcpd.h, + [sm_have_tcpd=yes] + ,[sm_have_tcpd=no]) + + if test $ac_cv_header_tcpd_h = yes ; then + AC_TRY_COMPILE([ + int allow_severity = 0; + int deny_severity = 0; + ] + ,[hosts_access()] + ,[sm_have_tcpd=yes] + ,[sm_have_tcpd=no]) + fi; + + if test $sm_have_tcpd = yes; then + AC_CHECK_LIB(wrap, main, + [sm_have_tcpd=yes] + ,[sm_have_tcpd=no]) + + if test $sm_have_tcpd != yes; then + AC_MSG_WARN([Could not find -lwrap (libwrap0-dev)]) + fi; + fi; + + if test $sm_have_tcpd = yes; then + sm_features="$sm_features, TCPWrappers"; + sm_badepends="$sm_badepends, libwrap0-dev"; + sm_sendmail_envdef="$sm_sendmail_envdef -DTCPWRAPPERS"; + sm_sendmail_libs="$sm_sendmail_libs -lwrap"; + elif test $sm_enable_tcpd = auto; then + AC_MSG_WARN([TCPD(libwrap0-dev) protection not supported!]) + else + AC_MSG_ERROR([TCPD(libwrap0-dev) protection not supported!]) + fi; + fi; +sm_enable_tcpd=$sm_have_tcpd; AC_SUBST(sm_enable_tcpd) + +#------------------------------------------------------------------- +# +# Check for presence of IPV6 headers +# +sm_have_ipv6=no; +if test $sm_enable_ipv6 != no; then + AC_CHECK_HEADERS(netinet/ip6.h, + [sm_have_ipv6=yes] + ,[sm_have_ipv6=no]) + + if test $ac_cv_header_netinet_ip6_h = yes ; then + AC_EGREP_CPP(sm_have_ipv6=yes, [ + #include <netdb.h> + #if defined(AI_DEFAULT) + sm_have_ipv6=yes + #endif + ], sm_have_ipv6=yes, [ + AC_EGREP_CPP(sm_have_ipv6=yes, [ + #include <bind/netdb.h> + #if defined(AI_DEFAULT) + sm_have_ipv6=yes + #endif + ], sm_have_ipv6=yes, + ,[sm_have_ipv6=no]) + ]) + if test $sm_have_ipv6 = no; then + AC_MSG_ERROR([Your level of netdb precludes IPv6 support]) + fi; + fi; + + if test $sm_have_ipv6 = yes; then + AC_CHECK_FUNCS(getaddrinfo, + [sm_have_ipv6=yes] + ,[sm_have_ipv6=no]) + if test $sm_have_ipv6 = no; then + AC_MSG_ERROR([IPv6 support requires getaddrinfo]) + fi; + fi; + + if test $sm_have_ipv6 = yes; then + v2i 8.10.0; + if test $sm_version_math -ge $sm_version_test; then + sm_features="$sm_features, IPv6"; + # Needed by sendmail, libmilter, maybe others + sm_envdef="$sm_envdef -DNETINET6"; + # Need following if using bind headers + if test ! -z "$resolve_inc"; then + sm_envdef="$sm_envdef -DNEEDSGETIPNODE=0"; + fi; + fi; + elif test $sm_enable_ipv6 = auto; then + AC_MSG_WARN([Could not locate IPv6 package]) + else + AC_MSG_ERROR([Could not locate IPv6 package]) + fi; + fi; +sm_enable_ipv6=$sm_have_ipv6; AC_SUBST(sm_enable_ipv6) + +#------------------------------------------------------------------- +# +# Check for presence of maillock headers +# +sm_have_maillock=no; +if test $sm_enable_maillock != no; then + AC_CHECK_HEADERS(maillock.h, + [sm_have_maillock=yes] + ,[sm_have_maillock=no]) + + if test $ac_cv_header_maillock_h = yes ; then + AC_CHECK_LIB(lockfile, main, + [sm__have_maillock=yes] + ,[sm_have_maillock=no]) + + if test $sm_have_maillock != yes; then + AC_MSG_WARN([Could not find -llockfile (liblockfile-dev)]) + fi; + fi; + + if test $sm_have_maillock = yes; then + sm_features="$sm_features, LockFile"; + sm_badepends="$sm_badepends, liblockfile-dev"; + sm_mail_local_envdef="$sm_mail_local_envdef -DMAILLOCK"; + sm_mail_local_libs="$sm_mail_local_libs -llockfile"; + elif test $sm_enable_maillock = auto; then + AC_MSG_WARN([Could not locate liblockfile-dev package]) + else + AC_MSG_ERROR([Could not locate liblockfile-dev package]) + fi; + fi; +sm_enable_maillock=$sm_have_maillock; AC_SUBST(sm_enable_maillock) + +#------------------------------------------------------------------- +# +# Check for presence of SFIO headers +# Note: required for TLS and security layer of SASL on 8.11) +# Note: SFIO is *only* used if required, but we allow the checks +# on any version (for header test) - just issue no messages +# unless needed +# +sm_have_sfio=no; +if test $sm_enable_sfio != no; then + CPPFLAGS_SAVE="$CPPFLAGS"; + CPPFLAGS="-I/usr/include/sfio" + AC_CHECK_HEADERS(sfio/stdio.h, + [sm_have_sfio=yes] + ,[sm_have_sfio=no]) + CPPFLAGS="$CPPFLAGS_SAVE"; + + if test $ac_cv_header_sfio_stdio_h = yes ; then + AC_CHECK_LIB(sfio, main, + [sm_have_sfio=yes] + ,[sm_have_sfio=no]) + + if test $sm_have_sfio != yes; then + AC_MSG_WARN([Could not find -lsfio (sfio-dev)]) + fi; + fi; + + # SFIO is only required for TLS/SASL on 8.11, ignore it otherwise + # when using it, however, it hits *everything*, put it in the front! + if test "$sm_version_major" = "8.11"; then + if test $sm_have_sfio = yes; then + sm_badepends="$sm_badepends, sfio-dev"; + sm_incdirs="-I/usr/include/sfio $sm_incdirs"; + sm_envdef="-DSFIO $sm_envdef"; + sm_libs="-lsfio $sm_libs"; + elif test $sm_enable_sfio = auto; then + AC_MSG_WARN([SFIO, and therefore TLS not supported!]) + else + AC_MSG_ERROR([SFIO, and therefore TLS not supported!]) + fi; + else + sm_have_sfio=no; + fi; + fi; +sm_enable_sfio=$sm_have_sfio; AC_SUBST(sm_enable_sfio) + +#------------------------------------------------------------------- +# +# Check for presence of SASL headers (for SMTP auth) +# +sm_have_auth=no; +sm_auth_lib='?'; +if test $sm_enable_auth != no; then + AC_CHECK_HEADERS(sasl/sasl.h sasl.h) + + if test $ac_cv_header_sasl_sasl_h = yes \ + -o $ac_cv_header_sasl_h = yes; then + sm_have_auth=yes; + else + sm_have_auth=no; + fi; + + if test $sm_have_auth = yes; then + AC_MSG_CHECKING([sasl version]) + AC_EGREP_CPP(sm_auth_lib=2,[ + #if defined(HAVE_SASL_SASL_H) + #include <sasl/sasl.h> + #elif defined(HAVE_SASL_H) + #include <sasl.h> + #endif + #if SASL_VERSION_MAJOR >= 2 + sm_auth_lib=2 + #endif + ], [sm_auth_lib=2], [sm_auth_lib=1]) + AC_MSG_RESULT([$sm_auth_lib]) + if test "X$sm_auth_lib" = "X"; then + AC_MSG_WARN([SASL version unknown, omitting support!]) + sm_have_auth=no; + fi; + fi; + + # < 8.12.4 can't handle saslv2+ + v2i 8.12.4; # FIXME: need ldap & saslv2 1st !!! + if test $sm_version_math -lt $sm_version_test; then + if test $sm_auth_lib = 2; then + AC_MSG_WARN([<8.12.4 & saslv$sm_auth_lib: trying saslv1]) + sm_auth_lib=1; + fi; + fi; + + if test $sm_auth_lib = 2; then + junk='sasl2'; + else + junk='sasl'; + fi; + + AC_CHECK_LIB($junk, sasl_client_init, + [sm_have_auth=yes] + ,[sm_have_auth=no]) + + if test $sm_have_auth != yes; then + AC_MSG_WARN([Could not find -l${junk} (lib${junk}-dev)]) + fi; + + if test $sm_have_auth = yes; then + sm_features="$sm_features, SMTP AUTH(SASL)"; + sm_badepends="$sm_badepends, lib${junk}-dev"; + sm_suggests="$sm_suggests, ${junk}-bin"; + sm_suggests="$sm_suggests, lib${junk}-modules"; + sm_suggests="$sm_suggests | lib${junk}-modules-plain"; + sm_suggests="$sm_suggests | lib${junk}-digestmd5-plain"; + sm_suggests="$sm_suggests | lib${junk}-digestmd5-des"; + sm_sendmail_envdef="$sm_sendmail_envdef -DSASL"; + if test $ac_cv_header_sasl_sasl_h = yes; then + sm_sendmail_envdef="$sm_sendmail_envdef -I/usr/include/sasl"; + fi; + if test "$sm_version_major" = "8.12"; then + :; + elif test "$sm_version_major" = "8.11"; then + sm_ffr="$sm_ffr -D_FFR_UNSAFE_SASL=1"; + sm_ffr="$sm_ffr -D_FFR_SASL_OPTS=1"; + sm_ffr="$sm_ffr -D_FFR_DEFAUTHINFO_MECHS=1"; + elif test "$sm_version_major" = "8.10"; then + sm_ffr="$sm_ffr -D_FFR_UNSAFE_SASL=1"; + sm_ffr="$sm_ffr -D_FFR_SASL_OPTS=1"; + sm_ffr="$sm_ffr -D_FFR_DEFAUTHINFO_MECHS=1"; + fi; + sm_sendmail_libs="$sm_sendmail_libs -l${junk}"; + elif test $sm_enable_auth = auto; then + AC_MSG_WARN([SMTP authentication not supported!]) + else + AC_MSG_ERROR([SMTP authentication not supported!]) + fi; + fi; +sm_enable_auth=$sm_have_auth; AC_SUBST(sm_enable_auth) +AC_SUBST(sm_auth_lib) +AM_CONDITIONAL(SM_ENABLE_AUTH, test x$sm_enable_auth = xyes) + +#------------------------------------------------------------------- +# +# Check for presence of SSL headers +# +sm_have_tls=no; +if test $sm_enable_tls != no; then + AC_CHECK_HEADERS(openssl/ssl.h, + [sm_have_tls=yes] + ,[sm_have_tls=no]) + + if test $ac_cv_header_openssl_ssl_h = yes; then + AC_CHECK_LIB(ssl, SSL_library_init, + [sm_have_tls=yes] + ,[sm_have_tls=no] + ,[-lcrypto]) + + if test $sm_have_tls != yes; then + AC_MSG_WARN([Could not find -lssl (libssl-dev)]) + fi; + fi; + + # SFIO is required for TLS/SSL support on 8.11 + if test $sm_have_tls = yes; then + if [[ $sm_have_sfio != yes ]] \ + && [[ "$sm_version_major" = '8.11' ]]; then + AC_MSG_WARN([SFIO is required for SSL privacy protection!]) + sm_have_tls=no; + fi; + fi; + + if test $sm_have_tls = yes; then + v2i 8.11.0; + if test $sm_version_math -ge $sm_version_test; then + sm_features="$sm_features, STARTTLS(SSL)"; + sm_badepends="$sm_badepends, libssl-dev"; + sm_suggests="$sm_suggests, openssl"; + sm_sendmail_envdef="$sm_sendmail_envdef -DSTARTTLS"; + sm_sendmail_libs="$sm_sendmail_libs -lcrypto -lssl"; + sm_ffr="$sm_ffr -D_FFR_TLS_1"; + sm_ffr="$sm_ffr -D_FFR_DEAL_WITH_ERROR_SSL"; + fi; + v2i 8.13.0; + if test $sm_version_math -lt $sm_version_test; then + v2i 8.12.0; + if test $sm_version_math -ge $sm_version_test; then + sm_ffr="$sm_ffr -D_FFR_SMTP_SSL"; + fi; + fi; + elif test $sm_enable_tls = auto; then + AC_MSG_WARN([SSL/TLS privacy protection not supported!]) + else + AC_MSG_ERROR([SSL/TLS privacy protection not supported!]) + fi; + fi; +sm_enable_tls=$sm_have_tls; AC_SUBST(sm_enable_tls) +AM_CONDITIONAL(SM_ENABLE_TLS, test x$sm_enable_tls = xyes) + +#------------------------------------------------------------------- +# Any requisite variable cleanup +#------------------------------------------------------------------- +sm_databases=$(echo "${sm_databases}" | sed -e 's/^, //'); +sm_features=$(echo "${sm_features}" | sed -e 's/^, //'); +sm_recommends=$(echo "${sm_recommends}" | sed -e 's/^, //'); + +#------------------------------------------------------------------- +# Add any FFRs to sendmail_ENVDEF +#------------------------------------------------------------------- +sm_sendmail_envdef="$sm_sendmail_envdef $sm_ffr"; + +#------------------------------------------------------------------- +# Below 8.10.0, there aren't separate variables per component... munge +# hell yeah, the output is butt-ugly (duplicates, ordering), but too bad! +# its not like (sane) people will be looking at these files anyway... +#------------------------------------------------------------------- +v2i 8.10.0; +if test $sm_version_math -lt $sm_version_test; then + sm_envdef="$sm_envdef $sm_sendmail_envdef"; + sm_envdef="$sm_envdef $sm_mail_local_envdef"; + sm_envdef="$sm_envdef $sm_rmail_envdef"; + sm_envdef="$sm_envdef $sm_smrsh_envdef"; + sm_libs="$sm_libs $sm_sendmail_libs"; + sm_libs="$sm_libs $sm_mail_local_libs"; + fi; + + +#------------------------------------------------------------------- +# Fini - define configuration files, and commands upon them +#------------------------------------------------------------------- +AC_CONFIG_FILES([Makefile], [chmod a+x ./Makefile]) +AC_CONFIG_FILES([build/autoconf.mk]) +AC_CONFIG_FILES([build/autoconf.pl]) +AC_CONFIG_FILES([build/autoconf.sh]) +AC_CONFIG_FILES([build/debian/changelog.sh],[ + echo 'creating ./build/debian/changelog.in'; + chmod ug+x ./build/debian/changelog.sh; + ./build/debian/changelog.sh;]) +AC_CONFIG_FILES([build/debian/changelog:build/debian/changelog.in],[ + cp build/debian/changelog ./;]) +AC_CONFIG_FILES([build/update_chaos],[ + echo 'Updating Build setup'; + chmod ug+x ./build/update_chaos; + (cd ../ && ./debian/build/update_chaos);]) +AC_CONFIG_FILES([build/site.config.m4]) +AC_CONFIG_FILES([build/debian/control.m4],[ + echo 'creating ./control'; + m4 ./build/debian/control.m4 > ./build/debian/control; + cp ./build/debian/control ./;]) +dnl AC_CONFIG_FILES([rules:./build/rules.in], [chmod a+x ./rules]) +AC_CONFIG_FILES([libmilter${sm_libmilter_version}.dirs:./build/debian/libmilter.dirs.in]) +AC_CONFIG_FILES([libmilter${sm_libmilter_version}.links:./build/debian/libmilter.links.in]) +AC_CONFIG_FILES([libmilter${sm_libmilter_version}.lintian-overrides:./build/debian/libmilter.lintian-overrides.in]) +AC_CONFIG_FILES([libmilter${sm_libmilter_version}.postrm:./build/debian/libmilter.postrm.in], + [chmod a+x ./libmilter${sm_libmilter_version}.postrm]) +AC_CONFIG_FILES([libmilter${sm_libmilter_version}.preinst:./build/debian/libmilter.preinst.in], + [chmod a+x ./libmilter${sm_libmilter_version}.preinst]) +AC_CONFIG_FILES([libmilter-dev.dirs:./build/debian/libmilter-dev.dirs.in]) +AC_CONFIG_FILES([libmilter-dev.links:./build/debian/libmilter-dev.links.in]) +AC_CONFIG_FILES([libmilter-dev.postrm:./build/debian/libmilter-dev.postrm.in], + [chmod a+x ./libmilter-dev.postrm]) +AC_CONFIG_FILES([libmilter-dev.preinst:./build/debian/libmilter-dev.preinst.in], + [chmod a+x ./libmilter-dev.preinst]) +AC_CONFIG_FILES([rmail.dirs:./build/debian/rmail.dirs.in]) +AC_CONFIG_FILES([rmail.postrm:./build/debian/rmail.postrm.in], + [chmod a+x ./rmail.postrm]) +AC_CONFIG_FILES([rmail.preinst:./build/debian/rmail.preinst.in], + [chmod a+x ./rmail.preinst]) +AC_CONFIG_FILES([sendmail.dirs:./build/debian/sendmail.dirs.in]) +AC_CONFIG_FILES([sendmail-base.dirs:./build/debian/sendmail-base.dirs.in]) +AC_CONFIG_FILES([sendmail-base.postinst:./build/debian/sendmail-base.postinst.in], + [chmod a+x ./sendmail-base.postinst]) +AC_CONFIG_FILES([sendmail-base.postrm:./build/debian/sendmail-base.postrm.in], + [chmod a+x ./sendmail-base.postrm]) +AC_CONFIG_FILES([sendmail-base.preinst:./build/debian/sendmail-base.preinst.in], + [chmod a+x ./sendmail-base.preinst]) +AC_CONFIG_FILES([sendmail-base.prerm:./build/debian/sendmail-base.prerm.in], + [chmod a+x ./sendmail-base.prerm]) +AC_CONFIG_FILES([sendmail-doc.dirs:./build/debian/sendmail-doc.dirs.in]) +AC_CONFIG_FILES([sendmail-doc.postrm:./build/debian/sendmail-doc.postrm.in], + [chmod a+x ./sendmail-doc.postrm]) +AC_CONFIG_FILES([sendmail-doc.preinst:./build/debian/sendmail-doc.preinst.in], + [chmod a+x ./sendmail-doc.preinst]) +AC_CONFIG_FILES([sendmail-cf.dirs:./build/debian/sendmail-cf.dirs.in]) +AC_CONFIG_FILES([sendmail-cf.postrm:./build/debian/sendmail-cf.postrm.in], + [chmod a+x ./sendmail-cf.postrm]) +AC_CONFIG_FILES([sendmail-cf.preinst:./build/debian/sendmail-cf.preinst.in], + [chmod a+x ./sendmail-cf.preinst]) +AC_CONFIG_FILES([sendmail.cron.daily:./build/debian/sendmail.cron.daily.in], + [chmod a+x ./sendmail.cron.daily]) +AC_CONFIG_FILES([sendmail-bin.dirs:./build/debian/sendmail-bin.dirs.in]) +AC_CONFIG_FILES([sendmail.init.d:./build/debian/sendmail.init.d.in:./local/sendmail.in], + [chmod a+x ./sendmail.init.d]) +AC_CONFIG_FILES([sendmail-bin.postinst:./build/debian/sendmail-bin.postinst.in], + [chmod a+x ./sendmail-bin.postinst]) +AC_CONFIG_FILES([sendmail-bin.postrm:./build/debian/sendmail-bin.postrm.in], + [chmod a+x ./sendmail-bin.postrm]) +AC_CONFIG_FILES([sendmail-bin.preinst:./build/debian/sendmail-bin.preinst.in], + [chmod a+x ./sendmail-bin.preinst]) +AC_CONFIG_FILES([sendmail-bin.prerm:./build/debian/sendmail-bin.prerm.in], + [chmod a+x ./sendmail-bin.prerm]) +AC_CONFIG_FILES([sendmail-bin.suid:./build/debian/sendmail-bin.suid.in]) +AC_CONFIG_FILES([sensible-mda.dirs:./build/debian/sensible-mda.dirs.in]) +AC_CONFIG_FILES([sensible-mda.postrm:./build/debian/sensible-mda.postrm.in], + [chmod a+x ./sensible-mda.postrm]) +AC_CONFIG_FILES([sensible-mda.preinst:./build/debian/sensible-mda.preinst.in], + [chmod a+x ./sensible-mda.preinst]) +AC_CONFIG_FILES([cf/Makefile], [chmod a+x ./cf/Makefile]) +AC_CONFIG_FILES([cf/debian/autoconf.m4]) +AC_CONFIG_FILES([cf/debian/sendmail.mc]) +AC_CONFIG_FILES([cf/debian/submit.mc]) +AC_CONFIG_FILES([cf/domain/debian-msp.m4]) +AC_CONFIG_FILES([cf/domain/debian-mta.m4]) +AC_CONFIG_FILES([cf/hack/debian_auth.m4]) +AC_CONFIG_FILES([cf/hack/virthost_by_ip.m4]) +AC_CONFIG_FILES([cf/ostype/debian.m4]) +AC_CONFIG_FILES([examples/Makefile], [chmod a+x ./examples/Makefile]) +AC_CONFIG_FILES([examples/dhcp3/dhclient-exit-hooks.d/sendmail], + [chmod a+x ./examples/dhcp3/dhclient-exit-hooks.d/sendmail]) +AC_CONFIG_FILES([examples/network/if-down.d/sendmail], + [chmod a+x ./examples/network/if-down.d/sendmail]) +AC_CONFIG_FILES([examples/network/if-up.d/sendmail], + [chmod a+x ./examples/network/if-up.d/sendmail]) +AC_CONFIG_FILES([examples/ppp/ip-down.d/sendmail], + [chmod a+x ./examples/ppp/ip-down.d/sendmail]) +AC_CONFIG_FILES([examples/ppp/ip-up.d/sendmail], + [chmod a+x ./examples/ppp/ip-up.d/sendmail]) +AC_CONFIG_FILES([examples/resolvconf/update-libc.d/sendmail], + [chmod a+x ./examples/resolvconf/update-libc.d/sendmail]) +AC_CONFIG_FILES([examples/sasl/sasl.m4]) +AC_CONFIG_FILES([examples/tls/starttls.m4]) +AC_CONFIG_FILES([local/Makefile], [chmod a+x ./local/Makefile]) +AC_CONFIG_FILES([local/Parse_conf.pm], [chmod a+x ./local/Parse_conf.pm]) +AC_CONFIG_FILES([local/Parse_mc.pm], [chmod a+x ./local/Parse_mc.pm]) +AC_CONFIG_FILES([local/dynamic], [chmod a+x ./local/dynamic]) +AC_CONFIG_FILES([local/parse_mc], [chmod a+x ./local/parse_mc]) +AC_CONFIG_FILES([local/sendmailconfig], [chmod a+x ./local/sendmailconfig]) +AC_CONFIG_FILES([local/sendmail], [chmod a+x ./local/sendmail]) +AC_CONFIG_FILES([local/update_auth], [chmod a+x ./local/update_auth]) +AC_CONFIG_FILES([local/update_authm4], [chmod a+x ./local/update_authm4]) +AC_CONFIG_FILES([local/update_conf], [chmod a+x ./local/update_conf]) +AC_CONFIG_FILES([local/update_db], [chmod a+x ./local/update_db]) +AC_CONFIG_FILES([local/update_ldap], [chmod a+x ./local/update_ldap]) +AC_CONFIG_FILES([local/update_mc], [chmod a+x ./local/update_mc]) +AC_CONFIG_FILES([local/update_mk], [chmod a+x ./local/update_mk]) +AC_CONFIG_FILES([local/update_smrsh], [chmod a+x ./local/update_smrsh]) +AC_CONFIG_FILES([local/update_sys], [chmod a+x ./local/update_sys]) +AC_CONFIG_FILES([local/update_tls], [chmod a+x ./local/update_tls]) +AC_CONFIG_FILES([local/update_tlsm4], [chmod a+x ./local/update_tlsm4]) +AC_CONFIG_FILES([local/bug/sendmail/script], + [chmod a+x ./local/bug/sendmail/script]) +AC_CONFIG_FILES([sensible_mda/Makefile], [chmod a+x ./sensible_mda/Makefile]) +AC_CONFIG_FILES([sensible_mda/sensible-mda.c]) +AC_OUTPUT diff --git a/debian/configure.options b/debian/configure.options new file mode 100644 index 0000000..f120564 --- /dev/null +++ b/debian/configure.options @@ -0,0 +1,132 @@ +#`configure' configures Sendmail 8.14.1 to adapt to many kinds of systems. +# +#Usage: ./configure [OPTION]... [VAR=VALUE]... +# +#To assign environment variables (e.g., CC, CFLAGS...), specify them as +#VAR=VALUE. See below for descriptions of some of the useful variables. +# +#Defaults for the options are specified in brackets. +# +#Configuration: +# -h, --help display this help and exit +# --help=short display options specific to this package +# --help=recursive display the short help of all the included packages +# -V, --version display version information and exit +# -q, --quiet, --silent do not print `checking...' messages +# --cache-file=FILE cache test results in FILE [disabled] +# -C, --config-cache alias for `--cache-file=config.cache' +# -n, --no-create do not create output files +# --srcdir=DIR find the sources in DIR [configure dir or `..'] +# +#Installation directories: +# --prefix=PREFIX install architecture-independent files in PREFIX +# [/usr] +# --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX +# [PREFIX] +# +#By default, `make install' will install all the files in +#`/usr/bin', `/usr/lib' etc. You can specify +#an installation prefix other than `/usr' using `--prefix', +#for instance `--prefix=$HOME'. +# +#For better control, use the options below. +# +#Fine tuning of the installation directories: +# --bindir=DIR user executables [EPREFIX/bin] +# --sbindir=DIR system admin executables [EPREFIX/sbin] +# --libexecdir=DIR program executables [EPREFIX/libexec] +# --sysconfdir=DIR read-only single-machine data [PREFIX/etc] +# --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] +# --localstatedir=DIR modifiable single-machine data [PREFIX/var] +# --libdir=DIR object code libraries [EPREFIX/lib] +# --includedir=DIR C header files [PREFIX/include] +# --oldincludedir=DIR C header files for non-gcc [/usr/include] +# --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] +# --datadir=DIR read-only architecture-independent data [DATAROOTDIR] +# --infodir=DIR info documentation [DATAROOTDIR/info] +# --localedir=DIR locale-dependent data [DATAROOTDIR/locale] +# --mandir=DIR man documentation [DATAROOTDIR/man] +# --docdir=DIR documentation root [DATAROOTDIR/doc/sendmail] +--docdir="\$${datarootdir}/doc" +# --htmldir=DIR html documentation [DOCDIR] +# --dvidir=DIR dvi documentation [DOCDIR] +# --pdfdir=DIR pdf documentation [DOCDIR] +# --psdir=DIR ps documentation [DOCDIR] +# +#Program names: +# --program-prefix=PREFIX prepend PREFIX to installed program names +# --program-suffix=SUFFIX append SUFFIX to installed program names +# --program-transform-name=PROGRAM run sed PROGRAM on installed program names +# +#System types: +# --build=BUILD configure for building on BUILD [guessed] +# --host=HOST cross-compile to build programs to run on HOST [BUILD] +# --target=TARGET configure for building compilers for TARGET [HOST] +# +#Optional Features: +# --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) +# --enable-FEATURE[=ARG] include FEATURE [ARG=yes] +# --enable-maintainer-mode enable make rules and dependencies not useful +# (and sometimes confusing) to the casual installer +# --enable-regex=.........Allow REGEX maps [auto] +--enable-regex=yes +# --enable-ndbm=..........Allow NDBM maps [auto] +--enable-ndbm=no +# --enable-newdb=.........Allow NEWDB maps [auto] +--enable-newdb=yes +# --enable-nis=...........Allow NIS maps [auto] +--enable-nis=auto +# --enable-nisplus=.......Allow NISPLUS maps [auto] +--enable-nisplus=auto +# --enable-ldap=..........Allow LDAP maps [auto] +--enable-ldap=yes +# --enable-hesiod=........Allow HESIOD maps [auto] +--enable-hesiod=no +# --enable-tcpd=..........Allow TCP wrappers [auto] +--enable-tcpd=yes +# --enable-bind=..........Allow BIND usage [auto] +--enable-bind=no +# --enable-ipv6=..........Allow IPv6 usage [auto] +--enable-ipv6=auto +# --enable-maillock=......Allow maillock [auto] +--enable-maillock=yes +# --enable-milter=........Allow milter [auto] +--enable-milter=yes +# --enable-sfio=..........Allow SFIO usage [auto] +--enable-sfio=no +# --enable-auth=..........Allow SMTP auth [auto] +--enable-auth=yes +# --enable-tls=...........Allow TLS/SSL [auto] +--enable-tls=yes +# --enable-shm=...........Allow shared memory [auto] +--enable-shm=yes +# --disable-dependency-tracking speeds up one-time build +# --enable-dependency-tracking do not reject slow dependency extractors +# +#Optional Packages: +# --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] +# --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) +# --with-buildtree=.......Build directory [.] +--with-buildtree=${DEB_SRCDIR} +# --with-revision=........Package revision [''] +--with-revision=${version_debian} +# --with-custom=..........Custom package name [''] +# +#Some influential environment variables: +# CC C compiler command +# CFLAGS C compiler flags +# LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a +# nonstandard directory <lib dir> +# LIBS libraries to pass to the linker, e.g. -l<library> +# CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if +# you have headers in a nonstandard directory <include dir> +# CPP C preprocessor +# +#Use these variables to override the choices made by `configure' or to help +#it to find libraries and programs with nonstandard names/locations. +# +#Report bugs to <bug/reportbug or sendmail@packages.debian.org>. +# +# Don't touch these! +--srcdir=${SRC_DIR} +${SM_CONF_OPT} diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..37f24c7 --- /dev/null +++ b/debian/control @@ -0,0 +1,192 @@ +Source: sendmail +Priority: extra +Section: mail +Maintainer: Richard A Nelson (Rick) <cowboy@debian.org> +Standards-Version: 3.7.2 +Build-Depends-Indep: groff, bsdmainutils +Build-Depends: make (>> 3.79.1-14), m4, cdbs, patchutils, dh-buildinfo, debhelper (>= 5), linux-libc-dev (>= 2.6.21-3) | linux-kernel-headers, groff, bsdmainutils , libdb4.6-dev, libldap2-dev, libwrap0-dev, liblockfile-dev, libsasl2-dev, libssl-dev +Build-Conflicts: libbind-dev, bind-dev, fakeroot (<< 0.4.5) +Homepage: http://www.sendmail.org + +Package: sendmail-bin +Architecture: any +Section: mail +Replaces: mail-transport-agent +Provides: mail-transport-agent +Conflicts: mail-transport-agent +Depends: sendmail-base, sendmail-cf, ${shlibs:Depends}, ${perl:Depends} +Recommends: +Suggests: sendmail-doc, , sasl2-bin, libsasl2-modules | libsasl2-modules-plain | libsasl2-digestmd5-plain | libsasl2-digestmd5-des, openssl, cyrus-common +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for Debian. + It is suitable for handling sophisticated mail configurations, + although this means that its configuration can also be complex. + . + Fortunately, simple thing can be done easily, and complex things + are possible, even if not easily understood ;) Sendmail is the *ONLY* + MTA with a Turing complete language to control *ALL* aspects of delivery! + . + Sendmail provides Security and SPAM/UCE/UBE protection via several means. + . + Sendmail includes *no* Mail User Agents (MUA), you'll have to + pick from the plethora of available MUAs (mutt, vm, etc.) + . + This package supports REGEX, DB, NIS, NIS+, LDAP, DNS maps, + and has enabled TCPWrappers, IPv6, LockFile, SMTP AUTH(SASL), STARTTLS(SSL). + . +Homepage: http://www.sendmail.org + +Package: rmail +Architecture: any +Section: mail +Conflicts: sendmail (<< 8.13.1-7), postfix, exim, exim-tls, exim4-daemon-custom, exim4-daemon-heavy, exim4-daemon-light, courier-mta, smail, zmailer +Depends: sendmail-bin | mail-transport-agent, ${shlibs:Depends} +Description: MTA->UUCP remote mail handler + Rmail handles mail received via uucp and passes it to the local + sendmail (or workalike). + . + This version comes from the sendmail source package and the only + change is the call to sendmail (from -obq to -obi). + . +Homepage: http://www.sendmail.org + +Package: sensible-mda +Architecture: any +Section: mail +Depends: sendmail-bin | mail-transport-agent, procmail | maildrop | deliver, ${shlibs:Depends} +Description: Mail Delivery Agent wrapper + Sensible-mda is a Debian addition in the sendmail package and has been + split out in hopes that it might be useful for other MTA packages. + . + Sensible-mda is called by the MTA, and will in turn call whichever of + the following MDAs that it finds (in this order): + procmail, maildrop, deliver, mail.local + +Package: libmilter1 +Architecture: any +Section: libs +Depends: ${shlibs:Depends} +Description: Sendmail Mail Filter API (Milter) + The Sendmail Mail Filter API (Milter) is designed to allow third-party + programs access to mail messages as they are being processed in order + to filter meta-information(headers) and content. + . + The Debian Sendmail package is built to support libmilter. + . + This package contains libmilter.so + . +Homepage: http://www.sendmail.org + +Package: libmilter1-dbg +Architecture: any +Section: libs +Depends: libmilter1 (= ${binary:Version}), ${shlibs:Depends} +Description: Sendmail Mail Filter API (Milter) + The Sendmail Mail Filter API (Milter) is designed to allow third-party + programs access to mail messages as they are being processed in order + to filter meta-information(headers) and content. + . + The Debian Sendmail package is built to support libmilter. + . + This package contains debugging information for libmilter.so + . +Homepage: http://www.sendmail.org + +Package: libmilter-dev +Architecture: any +Section: libdevel +Depends: libmilter1 (= ${binary:Version}) +Suggests: sendmail-doc +Description: Sendmail Mail Filter API (Milter) + The Sendmail Mail Filter API (Milter) is designed to allow third-party + programs access to mail messages as they are being processed in order + to filter meta-information (headers) and content. + . + The Debian Sendmail package is built to support libmilter. + . + This is the libmilter static library and include files for development. + . + The documentation on building a Milter is in the sendmail-doc package. + . +Homepage: http://www.sendmail.org + +Package: sendmail-doc +Architecture: all +Section: doc +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for + Debian. It is suitable for handling sophisticated mail + configurations, although this means that its configuration + can also be complex. + . + Don't try anything fancy in sendmail without using this for guidance. + . + Because of the complexity, you may find yourself wanting to peruse + the documentation files included herein. The main files are: + cf.README.gz -- A reference for all things in sendmail.{mc,cf} + op.{ps,txt}.gz -- The care and feeding of Sendmail. + faq.txt.gz -- Sendmail FAQ, current as of the package date. + . + Other files include the references for smrsh and libmilter. + . +Homepage: http://www.sendmail.org + +Package: sendmail +Architecture: all +Section: mail +Replaces: sendmail-tls +Depends: sendmail-base, sendmail-bin, sendmail-cf, sensible-mda +Suggests: sendmail-doc, rmail +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for Debian. + It is suitable for handling sophisticated mail configurations, + although this means that its configuration can also be complex. + . + Fortunately, simple thing can be done easily, and complex things + are possible, even if not easily understood ;) Sendmail is the *ONLY* + MTA with a Turing complete language to control *ALL* aspects of delivery! + . + Sendmail provides Security and SPAM/UCE/UBE protection via several means. + . + Sendmail includes *no* Mail User Agents (MUA), you'll have to + pick from the plethora of available MUAs (mutt, vm, etc.) + . + This package supports REGEX, DB, NIS, NIS+, LDAP, DNS maps, + and has enabled TCPWrappers, IPv6, LockFile, SMTP AUTH(SASL), STARTTLS(SSL). + . + This package is to make installation/upgrading easier (Do NOT delete it) + . +Homepage: http://www.sendmail.org + +Package: sendmail-base +Architecture: all +Section: mail +Depends: m4, make, adduser, ${perl:Depends} +Suggests: sendmail-doc, ca-certificates, logcheck, logrotate, resolvconf +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for + Debian. It is suitable for handling sophisticated mail + configurations, although this means that its configuration + can also be complex. + . + This package contains the base, architecture independent, portions + of the sendmail packages. + . +Homepage: http://www.sendmail.org + +Package: sendmail-cf +Architecture: all +Section: mail +Suggests: sendmail-doc +Depends: m4 +Description: powerful, efficient, and scalable Mail Transport Agent + Sendmail is an alternative Mail Transport Agent (MTA) for + Debian. It is suitable for handling sophisticated mail + configurations, although this means that its configuration + can also be complex. + . + This package contains the .m4 (configuration files) for the + sendmail packages. + . +Homepage: http://www.sendmail.org + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..5dfd6ed --- /dev/null +++ b/debian/copyright @@ -0,0 +1,91 @@ +This is the Debian Linux prepackaged version of Sendmail, a powerful mail +transport agent. + +This package was put together by Robert Leslie <rob@mars.org>, was +maintained by Johnie Ingram <johnie@debian.org>, and is now being +maintained by Richard Nelson <cowboy@debian.org>. The sources were +were obtained from: + + ftp://ftp.sendmail.org/pub/sendmail/ + + The following copyright applies to this software: + + SENDMAIL LICENSE + +The following license terms and conditions apply, unless a different +license is obtained from Sendmail, Inc., 6425 Christie Ave, Fourth Floor, +Emeryville, CA 94608, USA, or by electronic mail at license@sendmail.com. + +License Terms: + +Use, Modification and Redistribution (including distribution of any +modified or derived work) in source and binary forms is permitted only if +each of the following conditions is met: + +1. Redistributions qualify as "freeware" or "Open Source Software" under + one of the following terms: + + (a) Redistributions are made at no charge beyond the reasonable cost of + materials and delivery. + + (b) Redistributions are accompanied by a copy of the Source Code or by an + irrevocable offer to provide a copy of the Source Code for up to three + years at the cost of materials and delivery. Such redistributions + must allow further use, modification, and redistribution of the Source + Code under substantially the same terms as this license. For the + purposes of redistribution "Source Code" means the complete compilable + and linkable source code of sendmail including all modifications. + +2. Redistributions of source code must retain the copyright notices as they + appear in each source code file, these license terms, and the + disclaimer/limitation of liability set forth as paragraph 6 below. + +3. Redistributions in binary form must reproduce the Copyright Notice, + these license terms, and the disclaimer/limitation of liability set + forth as paragraph 6 below, in the documentation and/or other materials + provided with the distribution. For the purposes of binary distribution + the "Copyright Notice" refers to the following language: + "Copyright (c) 1998-2004 Sendmail, Inc. All rights reserved." + +4. Neither the name of Sendmail, Inc. nor the University of California nor + the names of their contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. The name "sendmail" is a trademark of Sendmail, Inc. + +5. All redistributions must comply with the conditions imposed by the + University of California on certain embedded code, whose copyright + notice and conditions for redistribution are as follows: + + (a) Copyright (c) 1988, 1993 The Regents of the University of + California. All rights reserved. + + (b) Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + (i) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (ii) Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + (iii) Neither the name of the University nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +6. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY + SENDMAIL, INC. AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + NO EVENT SHALL SENDMAIL, INC., THE REGENTS OF THE UNIVERSITY OF + CALIFORNIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +$Revision: 8.13 $, Last updated $Date: 2004/05/11 23:57:57 $ diff --git a/debian/examples/Makefile.in b/debian/examples/Makefile.in new file mode 100644 index 0000000..1dee680 --- /dev/null +++ b/debian/examples/Makefile.in @@ -0,0 +1,653 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = examples +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)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)" \ + "$(DESTDIR)$(sysconfdir)" +dist_sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_sbin_SCRIPTS) +SOURCES = +DIST_SOURCES = +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(dist_man_MANS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +nobase_dist_sysconfDATA_INSTALL = $(install_sh_DATA) +DATA = $(nobase_dist_sysconf_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBIAN = @DEBIAN@ +DEBIAN_DH = @DEBIAN_DH@ +DEB_BUILD_ARCH = @DEB_BUILD_ARCH@ +DEB_BUILD_GNU_CPU = @DEB_BUILD_GNU_CPU@ +DEB_BUILD_GNU_SYSTEM = @DEB_BUILD_GNU_SYSTEM@ +DEB_BUILD_GNU_TYPE = @DEB_BUILD_GNU_TYPE@ +DEB_HOST_ARCH = @DEB_HOST_ARCH@ +DEB_HOST_GNU_CPU = @DEB_HOST_GNU_CPU@ +DEB_HOST_GNU_SYSTEM = @DEB_HOST_GNU_SYSTEM@ +DEB_HOST_GNU_TYPE = @DEB_HOST_GNU_TYPE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SM_CPYRT = @SM_CPYRT@ +SM_DATE = @SM_DATE@ +SM_MAXVERS = @SM_MAXVERS@ +SM_MINVERS = @SM_MINVERS@ +SM_VERS = @SM_VERS@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_version = @ac_version@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +am_version = @am_version@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +buildtree = @buildtree@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sm_auth_lib = @sm_auth_lib@ +sm_badepends = @sm_badepends@ +sm_build_arch = @sm_build_arch@ +sm_custom = @sm_custom@ +sm_custom_s = @sm_custom_s@ +sm_databases = @sm_databases@ +sm_date = @sm_date@ +sm_depends = @sm_depends@ +sm_dist_name = @sm_dist_name@ +sm_dist_vers = @sm_dist_vers@ +sm_editmap_envdef = @sm_editmap_envdef@ +sm_editmap_libs = @sm_editmap_libs@ +sm_enable_auth = @sm_enable_auth@ +sm_enable_bind = @sm_enable_bind@ +sm_enable_hesiod = @sm_enable_hesiod@ +sm_enable_ipv6 = @sm_enable_ipv6@ +sm_enable_ldap = @sm_enable_ldap@ +sm_enable_maillock = @sm_enable_maillock@ +sm_enable_milter = @sm_enable_milter@ +sm_enable_ndbm = @sm_enable_ndbm@ +sm_enable_newdb = @sm_enable_newdb@ +sm_enable_nis = @sm_enable_nis@ +sm_enable_nisplus = @sm_enable_nisplus@ +sm_enable_regex = @sm_enable_regex@ +sm_enable_sfio = @sm_enable_sfio@ +sm_enable_shm = @sm_enable_shm@ +sm_enable_tcpd = @sm_enable_tcpd@ +sm_enable_tls = @sm_enable_tls@ +sm_envdef = @sm_envdef@ +sm_features = @sm_features@ +sm_ffr = @sm_ffr@ +sm_hesiod_parms = @sm_hesiod_parms@ +sm_host_arch = @sm_host_arch@ +sm_incdirs = @sm_incdirs@ +sm_ldap_lib = @sm_ldap_lib@ +sm_libmilter_envdef = @sm_libmilter_envdef@ +sm_libmilter_libs = @sm_libmilter_libs@ +sm_libmilter_version = @sm_libmilter_version@ +sm_libs = @sm_libs@ +sm_libsm_envdef = @sm_libsm_envdef@ +sm_libsm_libs = @sm_libsm_libs@ +sm_libsmdb_envdef = @sm_libsmdb_envdef@ +sm_libsmdb_libs = @sm_libsmdb_libs@ +sm_libsmutil_envdef = @sm_libsmutil_envdef@ +sm_libsmutil_libs = @sm_libsmutil_libs@ +sm_m4_ffr = @sm_m4_ffr@ +sm_mail_local_envdef = @sm_mail_local_envdef@ +sm_mail_local_libs = @sm_mail_local_libs@ +sm_mailstats_envdef = @sm_mailstats_envdef@ +sm_mailstats_libs = @sm_mailstats_libs@ +sm_makemap_envdef = @sm_makemap_envdef@ +sm_makemap_libs = @sm_makemap_libs@ +sm_mapdef = @sm_mapdef@ +sm_newdb_lib = @sm_newdb_lib@ +sm_praliases_envdef = @sm_praliases_envdef@ +sm_praliases_libs = @sm_praliases_libs@ +sm_recommends = @sm_recommends@ +sm_revision = @sm_revision@ +sm_rmail_envdef = @sm_rmail_envdef@ +sm_rmail_libs = @sm_rmail_libs@ +sm_sendmail_envdef = @sm_sendmail_envdef@ +sm_sendmail_libs = @sm_sendmail_libs@ +sm_smrsh_envdef = @sm_smrsh_envdef@ +sm_smrsh_libs = @sm_smrsh_libs@ +sm_suggests = @sm_suggests@ +sm_time = @sm_time@ +sm_utc = @sm_utc@ +sm_vacation_envdef = @sm_vacation_envdef@ +sm_vacation_libs = @sm_vacation_libs@ +sm_version = @sm_version@ +sm_version_beta = @sm_version_beta@ +sm_version_major = @sm_version_major@ +sm_version_math = @sm_version_math@ +sm_version_minor = @sm_version_minor@ +sm_version_r = @sm_version_r@ +sm_version_v = @sm_version_v@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: Makefile,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Rules file for Sendmail @sm_version@@sm_revision@(@sm_version_math@) +# on @sm_dist_name@ @sm_dist_vers@ +# via Debhelper V@DEBIAN_DH@ +# +# Note: the .in file supports Sendmail @SM_MINVERS@ - @SM_MAXVERS@ +# on Debian slink, potato, woody, testing, sid, ... +# but the generated file is customized to the version noted above. +# +# Richard Nelson <cowboy@debian.org> @sm_date@ @sm_time@ (@sm_utc@) +#------------------------------------------------------------------------------ +# +# Shipped programs +# +dist_sbin_SCRIPTS = checksendmail/checksendmail +# +# Shipped manpages +# +dist_man_MANS = checksendmail/checksendmail.8 +# +# Shipped data +# +# Installed example subdirectories +EXAMPLES_DIRS = amavis db dhcp3 \ + ldap logcheck milter network \ + pam.d ppp resolvconf sasl tls + +# +# Sigh... I wanted to use sysconf_SCRIPTS, but automake says NO! +nobase_dist_sysconf_DATA = dhcp3/dhclient-exit-hooks.d/sendmail \ + logcheck/ignore.d.paranoid/sendmail \ + logcheck/ignore.d.server/sendmail \ + logcheck/ignore.d.workstation/sendmail \ + logcheck/violations.ignore.d/logcheck-sendmail \ + network/if-down.d/sendmail network/if-post-down.d/sendmail \ + network/if-up.d/sendmail pam.d/smtp ppp/ip-down.d/sendmail \ + ppp/ip-up.d/sendmail resolvconf/update-libc.d/sendmail +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_sbinSCRIPTS: $(dist_sbin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(dist_sbin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ + $(dist_sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_sbin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ + rm -f "$(DESTDIR)$(sbindir)/$$f"; \ + done +install-man8: $(man8_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ + done +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ + done +install-nobase_dist_sysconfDATA: $(nobase_dist_sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @$(am__vpath_adj_setup) \ + list='$(nobase_dist_sysconf_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__vpath_adj) \ + echo " $(nobase_dist_sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \ + $(nobase_dist_sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \ + done + +uninstall-nobase_dist_sysconfDATA: + @$(NORMAL_UNINSTALL) + @$(am__vpath_adj_setup) \ + list='$(nobase_dist_sysconf_DATA)'; for p in $$list; do \ + $(am__vpath_adj) \ + echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +install-dvi: install-dvi-am + +install-exec-am: install-dist_sbinSCRIPTS \ + install-nobase_dist_sysconfDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook + +install-html: install-html-am + +install-info: install-info-am + +install-man: install-man8 + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_sbinSCRIPTS uninstall-man \ + uninstall-nobase_dist_sysconfDATA + +uninstall-man: uninstall-man8 + +.MAKE: install-am install-data-am install-exec-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-hook install-dist_sbinSCRIPTS install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man8 install-nobase_dist_sysconfDATA \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_sbinSCRIPTS uninstall-man uninstall-man8 \ + uninstall-nobase_dist_sysconfDATA + +# +# Local customisation... not automake friendly +# +install-data-hook: + $(INSTALL) -d ${DESTDIR}${pkgdatadir}/examples; + for dir in ${EXAMPLES_DIRS}; do \ + $(INSTALL) -d ${DESTDIR}${pkgdatadir}/examples/$$dir; \ + find $$dir -type f \ + ! -name '*.in' -a ! -name '*.am' -a ! -name '*.old' \ + | xargs -ri \ + $(INSTALL_DATA) '{}' ${DESTDIR}${pkgdatadir}/examples/'{}'; \ + done; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/milter/Makefile; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/dhcp3/dhclient-exit-hooks.d/sendmail; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/network/if-down.d/sendmail; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/network/if-post-down.d/sendmail; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/network/if-up.d/sendmail; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/ppp/ip-down.d/sendmail; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/ppp/ip-up.d/sendmail; + chmod a+rx ${DESTDIR}${pkgdatadir}/examples/resolvconf/update-libc.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/dhcp3/dhclient-exit-hooks.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/network/if-down.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/network/if-post-down.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/network/if-up.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/ppp/ip-down.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/ppp/ip-up.d/sendmail; + chmod a+rx ${DESTDIR}${sysconfdir}/resolvconf/update-libc.d/sendmail; + $(INSTALL_DATA) checksendmail/address.resolve \ + ${DESTDIR}${sysconfdir}/mail/; +install-exec-hook: + sed -e "s?/etc/sendmail.cf?${sysconfdir}/mail/sendmail.cf?g" \ + -e "s?address.resolve?${sysconfdir}/mail/address.resolve?g" \ + checksendmail/checksendmail \ + > ${DESTDIR}${sbindir}/checksendmail; + chmod 0755 ${DESTDIR}${sbindir}/checksendmail; + if [ -f ${top_srcdir}/../${buildtree}/contrib/buildvirtuser ]; then \ + $(INSTALL_SCRIPT) ${top_srcdir}/../${buildtree}/contrib/buildvirtuser \ + ${DESTDIR}${pkgdatadir}/; \ + fi; + sed 's?/bin/perl?/usr/bin/perl?g' \ + ${top_srcdir}/../${buildtree}/contrib/passwd-to-alias.pl \ + > ${DESTDIR}${pkgdatadir}/examples/passwd-to-alias; + chmod 0755 ${DESTDIR}${pkgdatadir}/examples/passwd-to-alias; + sed -e 's?/usr/local/bin/perl?/usr/bin/perl?g' \ + -e "s?/etc/sendmail.cf?${sysconfdir}/mail/sendmail.cf?g" \ + ${top_srcdir}/../${buildtree}/contrib/etrn.pl \ + > ${DESTDIR}${sbindir}/etrn; + chmod 0755 ${DESTDIR}${sbindir}/etrn; + if [ -f ${top_srcdir}/../${buildtree}/contrib/etrn.0 ]; then \ + sed -e 's?/usr/local/bin/perl?/usr/bin/perl?g' \ + -e 's?etrn(1M)?etrn(8)?g' \ + ${top_srcdir}/../${buildtree}/contrib/etrn.0 \ + > ${DESTDIR}${mandir}/man8/etrn.8; \ + else \ + sed -e 's?/usr/local/bin/perl?/usr/bin/perl?g' \ + -e 's?etrn(1M)?etrn(8)?g' \ + ${top_srcdir}/../${buildtree}/contrib/etrn.pl \ + > ${DESTDIR}${mandir}/man8/etrn.8; \ + fi; + sed -e 's?/usr/local/bin/perl?/usr/bin/perl?g' \ + ${top_srcdir}/../${buildtree}/contrib/expn.pl \ + > ${DESTDIR}${bindir}/expn; + chmod 0755 ${DESTDIR}${bindir}/expn; + sed -e 's?/usr/local/bin/perl?/usr/bin/perl?g' \ + ${top_srcdir}/../${buildtree}/contrib/expn.pl \ + > ${DESTDIR}${mandir}/man1/expn.1; + sed -e 's?/usr/local/bin/perl?/usr/bin/perl?g' \ + -e 's?/usr/sbin/sendmail -q30m -bd?/etc/init.d/sendmail start?g' \ + ${top_srcdir}/../${buildtree}/contrib/smcontrol.pl \ + > ${DESTDIR}${pkgdatadir}/smcontrol.pl; + chmod 0755 ${DESTDIR}${pkgdatadir}/smcontrol.pl; + $(INSTALL_SCRIPT) ${top_srcdir}/../${buildtree}/contrib/doublebounce.pl \ + ${DESTDIR}${pkgdatadir}; + if [ -f ${top_srcdir}/../${buildtree}/contrib/qtool.pl ]; then \ + sed -e 's?/usr/bin/env perl?/usr/bin/perl?g' \ + ${top_srcdir}/../${buildtree}/contrib/qtool.pl \ + > ${DESTDIR}${pkgdatadir}/qtool.pl; \ + chmod 0755 ${DESTDIR}${datadir}/sendmail/qtool.pl; \ + $(INSTALL_DATA) ${top_srcdir}/../${buildtree}/contrib/qtool.8 \ + ${DESTDIR}${mandir}/man8/; \ + fi; +# +# Debian targets, phase out (this needs to be treated as -arch, not -indep) +# +.PHONY: build-indep build-arch +.PHONY: install-indep install-arch +build-indep: +build-arch: +install-indep: install +install-arch: +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/examples/amavis-doc/README b/debian/examples/amavis-doc/README new file mode 100644 index 0000000..c2e3d86 --- /dev/null +++ b/debian/examples/amavis-doc/README @@ -0,0 +1,8 @@ +The files herein are from Jean-Paul Stewart <jps@maxlingua.com> + +To add to the sendmail/examples directory: + 1) place new amavis-doc.tar.gz in this directory + 2) tar -xzf amavis-doc.tar.gz + 3) mv amavis-doc/amavis-doc.lyx ./ + 4) rm ../amavis/* + 5) mv amavis-doc/* ../amavis/ diff --git a/debian/examples/amavis-doc/amavis-doc.lyx b/debian/examples/amavis-doc/amavis-doc.lyx new file mode 100644 index 0000000..180015b --- /dev/null +++ b/debian/examples/amavis-doc/amavis-doc.lyx @@ -0,0 +1,904 @@ +#LyX 1.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 218 +\textclass linuxdoc +\language english +\inputencoding default +\fontscheme default +\graphics default +\paperfontsize 10 +\spacing single +\papersize Default +\paperpackage a4 +\use_geometry 0 +\use_amsmath 0 +\paperorientation portrait +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\quotes_times 2 +\papercolumns 1 +\papersides 1 +\paperpagestyle default + +\layout Title +\added_space_top vfill \added_space_bottom vfill +How to Install Amavis-milter for Debian Sendmail +\layout Author + +Jean-Paul Stewart <jps@maxlingua.com> +\layout Date + +23.10.2001 +\layout Abstract + +This document provides a step-by-step guide to the installation and configuratio +n of the Amavis antivirus software available from +\begin_inset LatexCommand \url{http://www.amavis.org/} + +\end_inset + + on the Debian GNU/Linux operating system. + It has been adapted from the documentation available there. + Amavis supports many different methods of implementation. + I have chosen to implement Amavis-libmilter as the interface between Amavis + and Sendmail. + Another option with Amavis + Sendmail, which I am not describing here, + involves employing Amavis as a sort of intermediate local delivery agent. + Please be advised that this software requires an existing CLI antivirus + scanning engine and database. + The selection and procurement of such software is not discussed in this + document. + There is ample information available at the amavis.org site. + These installation examples make extensive use of the outstanding Sendmail + and libmilter-dev Debian packages maintained by Richard +\begin_inset Quotes eld +\end_inset + +cowboy +\begin_inset Quotes erd +\end_inset + + Nelson. + Thanks Cowboy! Thank you Amavis developers! +\layout Standard + + +\begin_inset LatexCommand \tableofcontents{} + +\end_inset + + +\layout Section + +Software Dependencies +\layout Enumerate + +At a minimum you need to be running the Debian 3.0 (Woody) distribution from + +\begin_inset LatexCommand \url{http://www.debian.org/} + +\end_inset + +. + Older versions of Debian do not provide an adequate sendmail package (they + lack the libmilter API). +\layout Enumerate + +Obviously, sendmail needs to be installed on your system. +\layout Enumerate + +As mentioned in the abstract, you will have to obtain your own antiviral + engine from an independent vendor. +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +file +\begin_inset Quotes erd +\end_inset + + package. +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +arc +\begin_inset Quotes erd +\end_inset + + utility. + It is not available as a Debian package. + You can obtain the source code for this program at +\begin_inset LatexCommand \url{ftp://metalab.unc.edu/pub/Linux/utils/compress/arc521.tar.Z} + +\end_inset + +. + +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +bzip2 +\begin_inset Quotes erd +\end_inset + + package. +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +lha +\begin_inset Quotes erd +\end_inset + + package. +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +unarj +\begin_inset Quotes erd +\end_inset + + package. +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +unrar +\begin_inset Quotes erd +\end_inset + + package. +\layout Enumerate + +The +\begin_inset Quotes eld +\end_inset + +zoo +\begin_inset Quotes erd +\end_inset + + package. +\layout Enumerate + +You may need to install a few perl modules. + The required modules are +\layout Itemize + +IO-stringy +\layout Itemize + +Syslog +\layout Itemize + +MailTools +\layout Itemize + +MIME-Base64 +\layout Itemize + +MIME-tools +\layout Itemize + +Convert-UUlib +\layout Itemize + +Convert-TNEF +\layout Itemize + +Compress-Zlib +\layout Itemize + +Archive-Tar +\layout Itemize + +Archive-Zip +\layout Itemize + +libnet +\layout Section + +Installing the Software Dependencies +\layout Standard + +Update your distribution files with the usual: +\layout Verbatim + +apt-get update +\layout Standard + +and install file, bzip2, lha, unarj, unrar, and zoo in one shot with: +\layout Verbatim + +apt-get install file bzip2 lha unarj unrar zoo +\layout Standard + +Install all the perl modules in one shot with: +\layout Verbatim + +apt-get install libio-stringy-perl libunix-syslog-perl libmailtools-perl + libmime-base64-perl libmime-perl libconvert-uulib-perl libconvert-tnef-perl + libcompress-zlib-perl libarchive-tar-perl libarchive-zip-perl libnet-perl +\layout Standard + +Installing the +\begin_inset Quotes eld +\end_inset + +arc +\begin_inset Quotes erd +\end_inset + + utility is much more of a hassle. + Furthermore, it is an unmaintained old MS-DOS port with a non-free license. + I will describe what I did to compile it on a Intel platform (suggestions + on better ways to do this are appreciated). + The next few steps assume that you have the GNU +\begin_inset Quotes eld +\end_inset + +make +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +gcc +\begin_inset Quotes erd +\end_inset + + packges installed on your system. + If this is not the case then try: +\layout Verbatim + +apt-get install make gcc +\layout Standard + +Let's create a temporary directory somewhere so that we can make a mess + in it. + Since my login is +\begin_inset Quotes eld +\end_inset + +jps +\begin_inset Quotes erd +\end_inset + +, I made a directory named +\begin_inset Quotes eld +\end_inset + +/home/jps/tmp/ +\begin_inset Quotes erd +\end_inset + +. + Copy the arc521.tar.Z file into your new temporary diretory and type: +\layout Verbatim + +uncompress arc521.tar.Z; tar xf arc521.tar +\layout Standard + +or something equivalent to uncompress and untar the archive. + This will create a bunch of files. + We need to delete some lines from the file named +\begin_inset Quotes eld +\end_inset + +arcdos.c +\begin_inset Quotes erd +\end_inset + +. + It is probably set to be read-only, so type: +\layout Verbatim + +chmod u+w arcdos.c +\layout Standard + +Open arcdos.c for editing and delete (or comment out) lines 35-38 inclusive. + (It is the definition of a structure that begins with +\begin_inset Quotes eld +\end_inset + +struct timeval +\begin_inset Quotes erd +\end_inset + + on line 35 and ends with +\begin_inset Quotes eld +\end_inset + +}; +\begin_inset Quotes erd +\end_inset + + on line 38). + We are done with that, so close the file. + Now type: +\layout Verbatim + +make +\layout Standard + +This command WILL FAIL with a bunch of warnings and an error message complaining + about +\begin_inset Quotes eld +\end_inset + +tmclock.o +\begin_inset Quotes erd +\end_inset + +, but it accomplished some necessary things anyway. + Now open the file named +\begin_inset Quotes eld +\end_inset + +Makefile +\begin_inset Quotes erd +\end_inset + + for editing. + Go to the line that says +\begin_inset Quotes eld +\end_inset + +System = -DBSD=1 +\begin_inset Quotes erd +\end_inset + +. + It should be on line 31. + Change the line so that it says: +\layout Verbatim + +System = -DSYSV=1 +\layout Standard + +Close the Makefile and run make again by typing: +\layout Verbatim + +make +\layout Standard + +That should compile the +\begin_inset Quotes eld +\end_inset + +arc +\begin_inset Quotes erd +\end_inset + + utility successfully. + You can ignore the warnings about +\begin_inset Quotes eld +\end_inset + +mktemp +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +mkstemp +\begin_inset Quotes erd +\end_inset + +. + There should now be an executable program with the name of +\begin_inset Quotes eld +\end_inset + +arc +\begin_inset Quotes erd +\end_inset + + in your temporary directory. + As root, copy this file to +\begin_inset Quotes eld +\end_inset + +/usr/local/bin +\begin_inset Quotes erd +\end_inset + + or the usual place where you keep home-cooked binaries. + Just make sure that it is in your path. + Test this by typing +\begin_inset Quotes eld +\end_inset + +arc +\begin_inset Quotes erd +\end_inset + + and see if the arc usage guide scrolls up your terminal. + You can delete all the files in your temporary directory now, but leave + the directory itself because we will be using it later. + Aren't .deb packages so much easier? +\layout Section + +Example Installation of an Antivirus Scanner +\layout Standard + +I am using a Linux commandline scanner from NAI Associates, Inc. + You will have to avail yourself of the documentation at +\begin_inset LatexCommand \url{http://www.amavis.org/} + +\end_inset + + if you don't know where to obtain a scanner. + For example, you could place your scanner binary along with its' data files + in a directory named +\begin_inset Quotes eld +\end_inset + +/usr/local/share/av +\begin_inset Quotes erd +\end_inset + +. + Then create a symlink to the binary in the +\begin_inset Quotes eld +\end_inset + +/usr/local/bin +\begin_inset Quotes erd +\end_inset + + directory. + This way, the command to execute the scanner is in your path, and the Amavis + configure script will find it. + For a more advanced configuration (once you have the easy stuff out of + the way), take a look at the example start-stop script at the end of this + document. +\layout Section + +Obtaining the Libmilter Sourcecode and Libraries +\layout Standard + +In order to be able to build Amavis with the libmilter interface, you need + to have the Sendmail's libmilter sourcecode and libraries available. + Don't worry, this is very easy with Debian. + The following command will dowload everything required to your system: +\layout Verbatim + +apt-get install libmilter-dev +\layout Section + +Obtaining the Amavis Sourcecode +\layout Subsection + +Checking the latest copy out of CVS +\layout Standard + +\begin_float footnote +\layout Standard + +As of October 23, 2001; the CVS copy might not compile. + Skip to the next section if you don't want to fool around. +\end_float +Now that we have extracted the libmilter files, the next step is to obtain + the latest copy of the Amavis sourcecode. + We will retrieve this code from the Amavis CVS repository at +\begin_inset LatexCommand \url{http://sourceforge.net/} + +\end_inset + +. + If you do not already have the CVS package installed on your system, you + can obtain it with the command: +\layout Verbatim + +apt-get install cvs +\layout Verbatim + +cvs -d:pserver:anonymous@cvs.amavis.sourceforge.net:/cvsroot/amavis login +\layout Standard + +You will be logging in anonymously, so just press enter at the password + prompt. + If CVS gives you a hard time about +\begin_inset Quotes eld +\end_inset + +$HOME/.cvspass +\begin_inset Quotes erd +\end_inset + + not existing, then simply type: +\layout Verbatim + +touch $HOME/.cvspass +\layout Standard + +and issue the command once more. + With these preliminaries out of the way we can download the actual source + with: +\layout Verbatim + +cvs -z3 -d:pserver:anonymous@cvs.amavis.sourceforge.net:/cvsroot/amavis co + amavis +\layout Standard + +This will create a subdirectory named +\begin_inset Quotes eld +\end_inset + +amavis +\begin_inset Quotes erd +\end_inset + + in your temporary directory. + Please skip to section titled +\begin_inset Quotes eld +\end_inset + +Building Amavis +\begin_inset Quotes erd +\end_inset + +. +\layout Subsection + +If the CVS copy blows chunks +\layout Standard + +If you are like me, and the CVS copy died hideously during +\begin_inset Quotes eld +\end_inset + +./configure +\begin_inset Quotes erd +\end_inset + +, then download the the +\begin_inset Quotes eld +\end_inset + +official +\begin_inset Quotes erd +\end_inset + + CVS snapshot from +\begin_inset LatexCommand \url{http://sourceforge.net/projects/amavis/} + +\end_inset + +. + The available version at the time of this writing was +\begin_inset Quotes eld +\end_inset + +amavisd-snaphot-20010714 +\begin_inset Quotes erd +\end_inset + +. + You can dowload this as a tarball. + Copy this file into your temporary directory and run: +\layout Verbatim + +tar zxf <filename> +\layout Standard + +That should give you a nice directory of sourcecode. +\layout Section + +Building Amavis +\layout Standard + +Regardless of the method you used to obtain it, please change to your new + amavis sourcecode directory and type the following command to build Amavis + with libmilter: +\layout Verbatim + +LDFLAGS= +\begin_inset Quotes erd +\end_inset + +-L/usr/lib/libmilter +\begin_inset Quotes erd +\end_inset + + ./configure --with-amavisuser=amavis --prefix=/usr/local --with-runtime-dir=/var +/local/amavis --enable-milter --with-sendmail-source=/usr/include/libmilter +\layout Standard + +Then simply run make by typing: +\layout Verbatim + +make +\layout Standard + +This will create, among other things, the amavisd perl script and the amavis-mil +ter binary in your +\begin_inset Quotes eld +\end_inset + +<amavis-sourcecode-directory>/amavis/ +\begin_inset Quotes erd +\end_inset + + directory. + If the previous steps failed for any reason, go to the section titled +\begin_inset Quotes eld +\end_inset + +If the CVS copy blows chunks +\begin_inset Quotes erd +\end_inset + + and rerun the +\begin_inset Quotes eld +\end_inset + +Building Amavis +\begin_inset Quotes erd +\end_inset + + section from the beginning. +\layout Section + +Installing and Running Amavis +\layout Standard + +Hopefully we passed the correct options to the Amavis configure script so + that when we install it, the Debian file system policy won't be violated. + That would be bad karma. + Create a user named +\begin_inset Quotes eld +\end_inset + +amavis +\begin_inset Quotes erd +\end_inset + + with: +\layout Verbatim + +useradd amavis +\layout Standard + +From the amavis-sourcecode-directory type: +\layout Verbatim + +make install +\layout Standard + +If everythiny worked, the install script should have +\layout Itemize + +copied the amavisd perl script to /usr/local/sbin +\layout Itemize + +copied the amavis-milter binary to /usr/local/sbin +\layout Itemize + +created the /var/local/amavis directory with owner amavis and mode 2700 + or 0700 +\layout Itemize + +created a file named /etc/amavisd.conf +\layout Standard + +Now you will need to create an alias in /etc/aliases or /etc/mail/aliases + (or wherever you keep your mail aliases) for the +\begin_inset Quotes eld +\end_inset + +virusalert +\begin_inset Quotes erd +\end_inset + + email address that Amavis will try and send virus reports to. + Generally, this should be the system administrator. +\layout Standard + +Don't forget to rebuild the aliases file by issuing: +\layout Verbatim + +newaliases +\layout Standard + +Finally, open up the /etc/mail/sendmail.mc file for editing and insert the + following two lines anywhere after the line the begins with +\begin_inset Quotes eld +\end_inset + +## Custom configurations +\begin_inset Quotes erd +\end_inset + + (it is near the bottom): +\layout Verbatim + +define(`_FFR_MILTER', `1')dnl +\layout Verbatim + +INPUT_MAIL_FILTER(`milter-amavis', `S=local:/var/local/amavis/amavis-milter.sock, + T=S:10m;R:10m;E:10m')dnl +\layout Standard + +After you close the /etc/mail/sendmail.mc file, start-up amavis-milter and + amavisd with the following three commands: +\layout Verbatim + +rm -rf /var/local/amavis/amavis-milter.sock +\layout Verbatim + +nohup /usr/local/sbin/amavis-milter -p /var/local/amavis/amavis-milter.sock + & +\layout Verbatim + +/usr/local/sbin/amavisd +\layout Standard + +Now that Amavis is ready and running, you can fire-up your new sendmail + configuration with: +\layout Verbatim + +sendmailconfig +\layout Standard + +This command will recreate the /etc/mail/sendmail.cf file from the /etc/mail/send +mail.mc file and reload the sendmail daemon. + An alternate approach is to delete the /etc/mail/sendmail.cf file, run +\begin_inset Quotes eld +\end_inset + +make +\begin_inset Quotes erd +\end_inset + + in the /etc/mail directory, and restart sendmail with +\begin_inset Quotes eld +\end_inset + +/etc/init.d/sendmail restart +\begin_inset Quotes erd +\end_inset + + (or whatever it is that you use). +\layout Section + +An Example Startup script +\layout Code + +#!/bin/sh +\layout Code + +# /etc/init.d/amavis-ramdisk +\layout Code + +# Script to run Amavis from a ram disk. +\layout Code + +\layout Code + +# I keep my antiviral scanner and data files on a ramdisk for speed. +\layout Code + +AVDIR="/usr/local/share/av.original" +\layout Code + +RAMDISK="/usr/local/share/av.ramdisk" +\layout Code + +AMAVISBIN="/usr/local/sbin" +\layout Code + +AMAVISSOCK="/var/local/amavis" +\layout Code + +[ -d $AVDIR -a -d $RAMDISK ] || exit 0 +\layout Code + +case "$1" in +\layout Code + +start) +\layout Code + + mke2fs /dev/ram0 > /dev/null 2>&1 +\layout Code + + mount /dev/ram0 $RAMDISK +\layout Code + + cp $AVDIR/* $RAMDISK +\layout Code + + if [ -S $AMAVISSOCK/amavis-milter.sock ]; then +\layout Code + + rm -rf $AMAVISSOCK/amavis-milter.sock +\layout Code + + fi +\layout Code + + if [ -S $AMAVISSOCK/amavisd.sock ]; then +\layout Code + + rm -rf $AMAVISSOCK/amavisd.sock +\layout Code + + fi +\layout Code + + nohup $AMAVISBIN/amavis-milter -p $AMAVISSOCK/amavis-milter.sock & +\layout Code + + $AMAVISBIN/amavisd +\layout Code + +;; +\layout Code + +stop) +\layout Code + + kill -9 `ps x | grep amavisd | grep -v grep | awk '{print $1}'`2> /dev/null +\layout Code + + kill -9 `ps x | grep amavis-milter | grep -v grep | awk '{print $1}'` + 2> /dev/null +\layout Code + + # I need to sleep for some reason :( +\layout Code + + sleep 2umount /dev/ram0 +\layout Code + +;; +\layout Code + +*) +\layout Code + + echo "Usage: /etc/init.d/amavis-ramdisk {start|stop}" +\layout Code + + exit 1 +\layout Code + +;; +\layout Code + +esac +\layout Code + +exit 0 +\layout Standard + +Don't forget to update your antivirus data files regularly. + +\layout Quote + +Send all comments and corrections to <jps@maxlingua.com>. + Support free software! +\the_end diff --git a/debian/examples/amavis/amavis-doc-1.html b/debian/examples/amavis/amavis-doc-1.html new file mode 100644 index 0000000..f893635 --- /dev/null +++ b/debian/examples/amavis/amavis-doc-1.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Software Dependencies</TITLE> + <LINK HREF="amavis-doc-2.html" REL=next> + + <LINK HREF="amavis-doc.html#toc1" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-2.html">Next</A> +Previous +<A HREF="amavis-doc.html#toc1">Contents</A> +<HR> +<H2><A NAME="s1">1.</A> <A HREF="amavis-doc.html#toc1">Software Dependencies</A></H2> + +<P> +<OL> +<LI>At a minimum you need to be running the Debian 3.0 (Woody) distribution +from +<A HREF="http://www.debian.org/"></A> +. Older versions of Debian do not provide an adequate sendmail +package (they lack the libmilter API).</LI> +<LI>Obviously, sendmail needs to be installed on your system.</LI> +<LI>As mentioned in the abstract, you will have to obtain your own +antiviral engine from an independent vendor.</LI> +<LI>The " +file" +package.</LI> +<LI>The " +arc" +utility. It is not available as a Debian package. You +can obtain the source code for this program at +<A HREF="ftp://metalab.unc.edu/pub/Linux/utils/compress/arc521.tar.Z"></A> +. </LI> +<LI>The " +bzip2" +package.</LI> +<LI>The " +lha" +package.</LI> +<LI>The " +unarj" +package.</LI> +<LI>The " +unrar" +package.</LI> +<LI>The " +zoo" +package.</LI> +<LI>You may need to install a few perl modules. The required modules +are</LI> +</OL> +</P> +<P> +<UL> +<LI>IO-stringy</LI> +<LI>Syslog</LI> +<LI>MailTools</LI> +<LI>MIME-Base64</LI> +<LI>MIME-tools</LI> +<LI>Convert-UUlib</LI> +<LI>Convert-TNEF</LI> +<LI>Compress-Zlib</LI> +<LI>Archive-Tar</LI> +<LI>Archive-Zip</LI> +<LI>libnet</LI> +</UL> +</P> +<HR> +<A HREF="amavis-doc-2.html">Next</A> +Previous +<A HREF="amavis-doc.html#toc1">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-2.html b/debian/examples/amavis/amavis-doc-2.html new file mode 100644 index 0000000..17d2694 --- /dev/null +++ b/debian/examples/amavis/amavis-doc-2.html @@ -0,0 +1,138 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Installing the Software Dependencies</TITLE> + <LINK HREF="amavis-doc-3.html" REL=next> + <LINK HREF="amavis-doc-1.html" REL=previous> + <LINK HREF="amavis-doc.html#toc2" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-3.html">Next</A> +<A HREF="amavis-doc-1.html">Previous</A> +<A HREF="amavis-doc.html#toc2">Contents</A> +<HR> +<H2><A NAME="s2">2.</A> <A HREF="amavis-doc.html#toc2">Installing the Software Dependencies</A></H2> + +<P>Update your distribution files with the usual:</P> +<P> +<PRE> +apt-get update +</PRE> +</P> +<P>and install file, bzip2, lha, unarj, unrar, and zoo in one shot +with:</P> +<P> +<PRE> +apt-get install file bzip2 lha unarj unrar zoo +</PRE> +</P> +<P>Install all the perl modules in one shot with:</P> +<P> +<PRE> +apt-get install libio-stringy-perl libunix-syslog-perl libmailtools-perl libmime-base64-perl libmime-perl libconvert-uulib-perl libconvert-tnef-perl libcompress-zlib-perl libarchive-tar-perl libarchive-zip-perl libnet-perl +</PRE> +</P> +<P>Installing the " +arc" +utility is much more of a hassle. Furthermore, +it is an unmaintained old MS-DOS port with a non-free license. I +will describe what I did to compile it on a Intel platform (suggestions +on better ways to do this are appreciated). The next few steps assume +that you have the GNU " +make" +and " +gcc" +packges installed on your +system. If this is not the case then try:</P> +<P> +<PRE> +apt-get install make gcc +</PRE> +</P> +<P>Let's create a temporary directory somewhere so that we can make +a mess in it. Since my login is " +jps" +, I made a directory named " +/home/jps/tmp/" +. +Copy the arc521.tar.Z file into your new temporary diretory and type:</P> + +<P> +<PRE> +uncompress arc521.tar.Z; tar xf arc521.tar +</PRE> +</P> +<P>or something equivalent to uncompress and untar the archive. +This will create a bunch of files. We need to delete some lines from +the file named " +arcdos.c" +. It is probably set to be read-only, so +type:</P> +<P> +<PRE> +chmod u+w arcdos.c +</PRE> +</P> +<P>Open arcdos.c for editing and delete (or comment out) lines 35-38 +inclusive. (It is the definition of a structure that begins with +" +struct timeval" +on line 35 and ends with " +};" +on line 38). +We are done with that, so close the file. Now type:</P> +<P> +<PRE> +make +</PRE> +</P> +<P>This command WILL FAIL with a bunch of warnings and an error +message complaining about " +tmclock.o" +, but it accomplished some necessary +things anyway. Now open the file named " +Makefile" +for editing. Go +to the line that says " +System = -DBSD=1" +. It should be on line 31. +Change the line so that it says:</P> +<P> +<PRE> +System = -DSYSV=1 +</PRE> +</P> +<P>Close the Makefile and run make again by typing:</P> +<P> +<PRE> +make +</PRE> +</P> +<P>That should compile the " +arc" +utility successfully. You can ignore +the warnings about " +mktemp" +and " +mkstemp" +. There should now be an +executable program with the name of " +arc" +in your temporary directory. +As root, copy this file to " +/usr/local/bin" +or the usual place where +you keep home-cooked binaries. Just make sure that it is in your +path. Test this by typing " +arc" +and see if the arc usage guide scrolls +up your terminal. You can delete all the files in your temporary +directory now, but leave the directory itself because we will be +using it later. Aren't .deb packages so much easier? </P> +<HR> +<A HREF="amavis-doc-3.html">Next</A> +<A HREF="amavis-doc-1.html">Previous</A> +<A HREF="amavis-doc.html#toc2">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-3.html b/debian/examples/amavis/amavis-doc-3.html new file mode 100644 index 0000000..eeb89d1 --- /dev/null +++ b/debian/examples/amavis/amavis-doc-3.html @@ -0,0 +1,38 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Example Installation of an Antivirus Scanner</TITLE> + <LINK HREF="amavis-doc-4.html" REL=next> + <LINK HREF="amavis-doc-2.html" REL=previous> + <LINK HREF="amavis-doc.html#toc3" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-4.html">Next</A> +<A HREF="amavis-doc-2.html">Previous</A> +<A HREF="amavis-doc.html#toc3">Contents</A> +<HR> +<H2><A NAME="s3">3.</A> <A HREF="amavis-doc.html#toc3">Example Installation of an Antivirus Scanner</A></H2> + +<P>I am using a Linux commandline scanner from NAI Associates, Inc. +You will have to avail yourself of the documentation at +<A HREF="http://www.amavis.org/"></A> +if you +don't know where to obtain a scanner. For example, you could place +your scanner binary along with its' data files in a directory named +" +/usr/local/share/av" +. Then create a symlink to the binary in the +" +/usr/local/bin" +directory. This way, the command to execute the +scanner is in your path, and the Amavis configure script will find +it. For a more advanced configuration (once you have the easy stuff +out of the way), take a look at the example start-stop script at +the end of this document.</P> +<HR> +<A HREF="amavis-doc-4.html">Next</A> +<A HREF="amavis-doc-2.html">Previous</A> +<A HREF="amavis-doc.html#toc3">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-4.html b/debian/examples/amavis/amavis-doc-4.html new file mode 100644 index 0000000..c9e338e --- /dev/null +++ b/debian/examples/amavis/amavis-doc-4.html @@ -0,0 +1,31 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Obtaining the Libmilter Sourcecode and Libraries</TITLE> + <LINK HREF="amavis-doc-5.html" REL=next> + <LINK HREF="amavis-doc-3.html" REL=previous> + <LINK HREF="amavis-doc.html#toc4" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-5.html">Next</A> +<A HREF="amavis-doc-3.html">Previous</A> +<A HREF="amavis-doc.html#toc4">Contents</A> +<HR> +<H2><A NAME="s4">4.</A> <A HREF="amavis-doc.html#toc4">Obtaining the Libmilter Sourcecode and Libraries</A></H2> + +<P>In order to be able to build Amavis with the libmilter interface, +you need to have the Sendmail's libmilter sourcecode and libraries +available. Don't worry, this is very easy with Debian. The following +command will dowload everything required to your system:</P> +<P> +<PRE> +apt-get install libmilter-dev +</PRE> +</P> +<HR> +<A HREF="amavis-doc-5.html">Next</A> +<A HREF="amavis-doc-3.html">Previous</A> +<A HREF="amavis-doc.html#toc4">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-5.html b/debian/examples/amavis/amavis-doc-5.html new file mode 100644 index 0000000..7d5186c --- /dev/null +++ b/debian/examples/amavis/amavis-doc-5.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Obtaining the Amavis Sourcecode</TITLE> + <LINK HREF="amavis-doc-6.html" REL=next> + <LINK HREF="amavis-doc-4.html" REL=previous> + <LINK HREF="amavis-doc.html#toc5" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-6.html">Next</A> +<A HREF="amavis-doc-4.html">Previous</A> +<A HREF="amavis-doc.html#toc5">Contents</A> +<HR> +<H2><A NAME="s5">5.</A> <A HREF="amavis-doc.html#toc5">Obtaining the Amavis Sourcecode</A></H2> + +<H2><A NAME="ss5.1">5.1</A> <A HREF="amavis-doc.html#toc5.1">Checking the latest copy out of CVS</A> +</H2> + +<P> +<BLOCKQUOTE>As of October 23, 2001; the CVS copy might not compile. Skip +to the next section if you don't want to fool around. </BLOCKQUOTE> +Now that we have extracted the libmilter files, the next step +is to obtain the latest copy of the Amavis sourcecode. We will retrieve +this code from the Amavis CVS repository at +<A HREF="http://sourceforge.net/"></A> +. If you do not already +have the CVS package installed on your system, you can obtain it +with the command:</P> +<P> +<PRE> +apt-get install cvs +cvs -d:pserver:anonymous@cvs.amavis.sourceforge.net:/cvsroot/amavis login +</PRE> +</P> +<P>You will be logging in anonymously, so just press enter at the +password prompt. If CVS gives you a hard time about " +$HOME/.cvspass"</P> +<P>not existing, then simply type:</P> +<P> +<PRE> +touch $HOME/.cvspass +</PRE> +</P> +<P>and issue the command once more. With these preliminaries out +of the way we can download the actual source with:</P> +<P> +<PRE> +cvs -z3 -d:pserver:anonymous@cvs.amavis.sourceforge.net:/cvsroot/amavis co amavis +</PRE> +</P> +<P>This will create a subdirectory named " +amavis" +in your temporary +directory. Please skip to section titled " +Building Amavis" +.</P> +<H2><A NAME="ss5.2">5.2</A> <A HREF="amavis-doc.html#toc5.2">If the CVS copy blows chunks</A> +</H2> + +<P>If you are like me, and the CVS copy died hideously during " +./configure" +, +then download the the " +official" +CVS snapshot from +<A HREF="http://sourceforge.net/projects/amavis/"></A> +. The available +version at the time of this writing was " +amavisd-snaphot-20010714" +. +You can dowload this as a tarball. Copy this file into your temporary +directory and run:</P> +<P> +<PRE> +tar zxf <filename> +</PRE> +</P> +<P>That should give you a nice directory of sourcecode.</P> +<HR> +<A HREF="amavis-doc-6.html">Next</A> +<A HREF="amavis-doc-4.html">Previous</A> +<A HREF="amavis-doc.html#toc5">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-6.html b/debian/examples/amavis/amavis-doc-6.html new file mode 100644 index 0000000..f3c2041 --- /dev/null +++ b/debian/examples/amavis/amavis-doc-6.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Building Amavis</TITLE> + <LINK HREF="amavis-doc-7.html" REL=next> + <LINK HREF="amavis-doc-5.html" REL=previous> + <LINK HREF="amavis-doc.html#toc6" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-7.html">Next</A> +<A HREF="amavis-doc-5.html">Previous</A> +<A HREF="amavis-doc.html#toc6">Contents</A> +<HR> +<H2><A NAME="s6">6.</A> <A HREF="amavis-doc.html#toc6">Building Amavis</A></H2> + +<P>Regardless of the method you used to obtain it, please change +to your new amavis sourcecode directory and type the following command +to build Amavis with libmilter:</P> +<P> +<PRE> +LDFLAGS=" +-L/usr/lib/libmilter" + ./configure --with-amavisuser=amavis --prefix=/usr/local --with-runtime-dir=/var/local/amavis --enable-milter --with-sendmail-source=/usr/include/libmilter +</PRE> +</P> +<P>Then simply run make by typing:</P> +<P> +<PRE> +make +</PRE> +</P> +<P>This will create, among other things, the amavisd perl script +and the amavis-milter binary in your " +<amavis-sourcecode-directory>/amavis/"</P> +<P>directory. If the previous steps failed for any reason, go to the +section titled " +If the CVS copy blows chunks" +and rerun the " +Building +Amavis" +section from the beginning.</P> +<HR> +<A HREF="amavis-doc-7.html">Next</A> +<A HREF="amavis-doc-5.html">Previous</A> +<A HREF="amavis-doc.html#toc6">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-7.html b/debian/examples/amavis/amavis-doc-7.html new file mode 100644 index 0000000..5997841 --- /dev/null +++ b/debian/examples/amavis/amavis-doc-7.html @@ -0,0 +1,96 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: Installing and Running Amavis</TITLE> + <LINK HREF="amavis-doc-8.html" REL=next> + <LINK HREF="amavis-doc-6.html" REL=previous> + <LINK HREF="amavis-doc.html#toc7" REL=contents> +</HEAD> +<BODY> +<A HREF="amavis-doc-8.html">Next</A> +<A HREF="amavis-doc-6.html">Previous</A> +<A HREF="amavis-doc.html#toc7">Contents</A> +<HR> +<H2><A NAME="s7">7.</A> <A HREF="amavis-doc.html#toc7">Installing and Running Amavis</A></H2> + +<P>Hopefully we passed the correct options to the Amavis configure +script so that when we install it, the Debian file system policy +won't be violated. That would be bad karma. Create a user named " +amavis"</P> +<P>with:</P> +<P> +<PRE> +useradd amavis +</PRE> +</P> +<P>From the amavis-sourcecode-directory type:</P> +<P> +<PRE> +make install +</PRE> +</P> +<P>If everythiny worked, the install script should have</P> +<P> +<UL> +<LI>copied the amavisd perl script to /usr/local/sbin</LI> +<LI>copied the amavis-milter binary to /usr/local/sbin</LI> +<LI>created the /var/local/amavis directory with owner amavis and +mode 2700 or 0700</LI> +<LI>created a file named /etc/amavisd.conf</LI> +</UL> +</P> +<P>Now you will need to create an alias in /etc/aliases or /etc/mail/aliases +(or wherever you keep your mail aliases) for the " +virusalert" +email +address that Amavis will try and send virus reports to. Generally, +this should be the system administrator.</P> +<P>Don't forget to rebuild the aliases file by issuing:</P> +<P> +<PRE> +newaliases +</PRE> +</P> +<P>Finally, open up the /etc/mail/sendmail.mc file for editing and +insert the following two lines anywhere after the line the begins +with " +## Custom configurations" +(it is near the bottom):</P> +<P> +<PRE> +define(`_FFR_MILTER', `1')dnl +INPUT_MAIL_FILTER(`milter-amavis', `S=local:/var/local/amavis/amavis-milter.sock, T=S:10m;R:10m;E:10m')dnl +</PRE> +</P> +<P>After you close the /etc/mail/sendmail.mc file, start-up amavis-milter +and amavisd with the following three commands:</P> +<P> +<PRE> +rm -rf /var/local/amavis/amavis-milter.sock +nohup /usr/local/sbin/amavis-milter -p /var/local/amavis/amavis-milter.sock & +/usr/local/sbin/amavisd +</PRE> +</P> +<P>Now that Amavis is ready and running, you can fire-up your new +sendmail configuration with:</P> +<P> +<PRE> +sendmailconfig +</PRE> +</P> +<P>This command will recreate the /etc/mail/sendmail.cf file from +the /etc/mail/sendmail.mc file and reload the sendmail daemon. An +alternate approach is to delete the /etc/mail/sendmail.cf file, run +" +make" +in the /etc/mail directory, and restart sendmail with " +/etc/init.d/sendmail +restart" +(or whatever it is that you use).</P> +<HR> +<A HREF="amavis-doc-8.html">Next</A> +<A HREF="amavis-doc-6.html">Previous</A> +<A HREF="amavis-doc.html#toc7">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc-8.html b/debian/examples/amavis/amavis-doc-8.html new file mode 100644 index 0000000..6d36780 --- /dev/null +++ b/debian/examples/amavis/amavis-doc-8.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail: An Example Startup script</TITLE> + <LINK HREF="amavis-doc-7.html" REL=previous> + <LINK HREF="amavis-doc.html#toc8" REL=contents> +</HEAD> +<BODY> +Next +<A HREF="amavis-doc-7.html">Previous</A> +<A HREF="amavis-doc.html#toc8">Contents</A> +<HR> +<H2><A NAME="s8">8.</A> <A HREF="amavis-doc.html#toc8">An Example Startup script</A></H2> + +<P> +<HR> +<PRE> +#!/bin/sh +# /etc/init.d/amavis-ramdisk +# Script to run Amavis from a ram disk. + +# I keep my antiviral scanner and data files on a ramdisk for speed. +AVDIR="/usr/local/share/av.original" +RAMDISK="/usr/local/share/av.ramdisk" +AMAVISBIN="/usr/local/sbin" +AMAVISSOCK="/var/local/amavis" +[ -d $AVDIR -a -d $RAMDISK ] || exit 0 +case "$1" in +start) + mke2fs /dev/ram0 > /dev/null 2>&1 + mount /dev/ram0 $RAMDISK + cp $AVDIR/* $RAMDISK + if [ -S $AMAVISSOCK/amavis-milter.sock ]; then + rm -rf $AMAVISSOCK/amavis-milter.sock + fi + if [ -S $AMAVISSOCK/amavisd.sock ]; then + rm -rf $AMAVISSOCK/amavisd.sock + fi + nohup $AMAVISBIN/amavis-milter -p $AMAVISSOCK/amavis-milter.sock & + $AMAVISBIN/amavisd +;; +stop) + kill -9 `ps x | grep amavisd | grep -v grep | awk '{print $1}'`2> /dev/null + kill -9 `ps x | grep amavis-milter | grep -v grep | awk '{print $1}'` 2> /dev/null + # I need to sleep for some reason :( + sleep 2umount /dev/ram0 +;; +*) + echo "Usage: /etc/init.d/amavis-ramdisk {start|stop}" + exit 1 +;; +esac +exit 0 +</PRE> +<HR> +</P> +<P>Don't forget to update your antivirus data files regularly. </P> +<P> +<BLOCKQUOTE> +Send all comments and corrections to <jps@maxlingua.com>. +Support free software! +</BLOCKQUOTE> +</P> + + +<HR> +Next +<A HREF="amavis-doc-7.html">Previous</A> +<A HREF="amavis-doc.html#toc8">Contents</A> +</BODY> +</HTML> diff --git a/debian/examples/amavis/amavis-doc.html b/debian/examples/amavis/amavis-doc.html new file mode 100644 index 0000000..181738d --- /dev/null +++ b/debian/examples/amavis/amavis-doc.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<HTML> +<HEAD> + <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.10"> + <TITLE>How to Install Amavis-milter for Debian Sendmail</TITLE> + <LINK HREF="amavis-doc-1.html" REL=next> + + +</HEAD> +<BODY> +<A HREF="amavis-doc-1.html">Next</A> +Previous +Contents +<HR> +<H1>How to Install Amavis-milter for Debian Sendmail</H1> + +<H2>Jean-Paul Stewart <jps@maxlingua.com></H2>23.10.2001 +<HR> +<EM>This document provides a step-by-step guide to the installation + and configuration of the Amavis antivirus software available from + +<A HREF="http://www.amavis.org/"></A> + on the Debian GNU/Linux operating system. It has been adapted from + the documentation available there. Amavis supports many different + methods of implementation. I have chosen to implement Amavis-libmilter + as the interface between Amavis and Sendmail. Another option with + Amavis + Sendmail, which I am not describing here, involves employing + Amavis as a sort of intermediate local delivery agent. Please be + advised that this software requires an existing CLI antivirus scanning + engine and database. The selection and procurement of such software + is not discussed in this document. There is ample information available + at the amavis.org site. These installation examples make extensive + use of the outstanding Sendmail and libmilter-dev Debian packages + maintained by Richard " +cowboy" + Nelson. Thanks Cowboy! Thank you Amavis + developers!</EM> +<HR> +<P> +<H2><A NAME="toc1">1.</A> <A HREF="amavis-doc-1.html">Software Dependencies</A></H2> + +<P> +<H2><A NAME="toc2">2.</A> <A HREF="amavis-doc-2.html">Installing the Software Dependencies</A></H2> + +<P> +<H2><A NAME="toc3">3.</A> <A HREF="amavis-doc-3.html">Example Installation of an Antivirus Scanner</A></H2> + +<P> +<H2><A NAME="toc4">4.</A> <A HREF="amavis-doc-4.html">Obtaining the Libmilter Sourcecode and Libraries</A></H2> + +<P> +<H2><A NAME="toc5">5.</A> <A HREF="amavis-doc-5.html">Obtaining the Amavis Sourcecode</A></H2> + +<UL> +<LI><A NAME="toc5.1">5.1</A> <A HREF="amavis-doc-5.html#ss5.1">Checking the latest copy out of CVS</A> +<LI><A NAME="toc5.2">5.2</A> <A HREF="amavis-doc-5.html#ss5.2">If the CVS copy blows chunks</A> +</UL> +<P> +<H2><A NAME="toc6">6.</A> <A HREF="amavis-doc-6.html">Building Amavis</A></H2> + +<P> +<H2><A NAME="toc7">7.</A> <A HREF="amavis-doc-7.html">Installing and Running Amavis</A></H2> + +<P> +<H2><A NAME="toc8">8.</A> <A HREF="amavis-doc-8.html">An Example Startup script</A></H2> + +<HR> +<A HREF="amavis-doc-1.html">Next</A> +Previous +Contents +</BODY> +</HTML> diff --git a/debian/examples/checksendmail/BSDI/BSDI_CONTRIB b/debian/examples/checksendmail/BSDI/BSDI_CONTRIB new file mode 100644 index 0000000..97871d5 --- /dev/null +++ b/debian/examples/checksendmail/BSDI/BSDI_CONTRIB @@ -0,0 +1,18 @@ +Software Package: + checksendmail + +Release/Version: + Dated 7/11/90. + +Retrieved from: + N/A. + +Bug reports: + This software package is maintained by the software contributor, + not BSDI. Please send any bug reports to both support@BSDI.COM + and polk@bsdi.com. + +Comments: + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +Modifications to this version made by BSDI: diff --git a/debian/examples/checksendmail/BSDI/Makefile b/debian/examples/checksendmail/BSDI/Makefile new file mode 100644 index 0000000..101ba4e --- /dev/null +++ b/debian/examples/checksendmail/BSDI/Makefile @@ -0,0 +1,15 @@ +# BSDI $Id: Makefile,v 1.3 1995/01/07 05:34:35 donn Exp $ + +MAN8= checksendmail.0 + +all checksendmail: ${MAN8} + +clean depend tags: + +install: maninstall + install -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ + ${.CURDIR}/checksendmail.perl ${DESTDIR}${BINDIR}/checksendmail + install -c -o ${BINOWN} -g ${BINGRP} -m 0444 \ + ${.CURDIR}/address.resolve ${DESTDIR}/usr/contrib/lib/ + +.include <bsd.prog.mk> diff --git a/debian/examples/checksendmail/BSDI/address.resolve b/debian/examples/checksendmail/BSDI/address.resolve new file mode 100644 index 0000000..01f3011 --- /dev/null +++ b/debian/examples/checksendmail/BSDI/address.resolve @@ -0,0 +1,27 @@ + +# BSDI $Id: address.resolve,v 1.1.1.1 1994/01/13 21:15:30 polk Exp $ + +# Sample address resolution file for checksendmail(8) + +# local addresses +user +user@hilltop +user@hilltop.BSDI.COM +hilltop!polk + +# within-domain addresses +user@bsdi.com +user@ibapah +user@ibapah.bsdi.com +ibapah!user + +# faraway addresses +user@xxxxxxx.com +user@xxxxxxx.dom +site!user + +# addresses with routing, etc. +site1!site2!user +user@xxxxxxx.dom@bar.dom +site!user@xxxxxxx.dom +site!user@uunet.uu.net diff --git a/debian/examples/checksendmail/BSDI/checksendmail.8 b/debian/examples/checksendmail/BSDI/checksendmail.8 new file mode 100644 index 0000000..b129c35 --- /dev/null +++ b/debian/examples/checksendmail/BSDI/checksendmail.8 @@ -0,0 +1,223 @@ +.\" BSDI $Id: checksendmail.8,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ +.Dd January 12, 1994 +.Dt CHECKSENDMAIL 8 +.Os +.Sh NAME +.Nm checksendmail +.Nd verify sendmail address transformations. +.Sh SYNOPSIS +.Nm checksendmail +.Op Fl C Ar file.cf +.Op Fl r Ar resolve +.Op Fl T Ar test.address +.Op Fl b Ar sendmail_binary +.Sh DESCRIPTION +.Pp +The +.Nm checksendmail +program is a +.Xr perl +script that aids the testing of +.Xr sendmail 8 's +various configuration files. +.Nm checksendmail +passes typical addresses (supplied in input files) through +.Xr sendmail +and prints the results of the resolution and transformation routines. +.Pp +The input files contain a list of addresses, one per line. +For example: +.Bd -literal -offset indent +user +user@site +user@site.com +.Ed +.Pp +The input file can contain comments started with a +.Em # +and blank lines. +.Sh OPTIONS +.Pp +.Bl -tag -width Fl -compact -offset left +.It Fl C Ar file.cf +Use the +.Xr sendmail +configuration file +.Ar file.cf +instead of the default +.Pa /etc/sendmail.cf +file. +.It Fl r Ar resolve +Use +.Ar resolve +as the input file for the addresses to be used for mail resolving. Defaults +to +.Ar address.resolve . +.It Fl T Ar test.address +Use +.Ar test.address +as the single address to test. Cannot be used in conjunction with +file setting flags. +.It Fl B Ar sendmail_binary +Use the specified +.Ar sendmail_binary +as the path to invoke sendmail (instead of +.Pa /usr/sbin/sendmail ) . +.El +.Sh EXAMPLES +.Pp +The following command will pass the addresses in +.Ar address.resolve +through +.Xr sendmail +using the configuration information in +.Ar myconfig.cf . +.Bd -literal -offset left +example% cat address.resolve +user +user@site +user@site.com +example% checksendmail \-C myconfig.cf +config file: myconfig.cf resolve file: address.resolve +towhom file: address.resolve fromwhom file: address.resolve +Mail address resolution +user --(ether )--> user[rmtc] +user@site --(ether )--> user@site[rmtc] +user@site.com --(ether )--> user@site.com[rmtc] +`To' address transformations for mailer ether: +user ----> user +user@site ----> user@site +user@site.com ----> user@site.com +`From' address transformations for mailer ether: +user ----> user +user@site ----> user +user@site.com ----> user +.Ed +.Pp +The first section of the output shows how the addresses in the input +files are resolved by +.Xr sendmail 8 . +Consider the following output line: +.Pp +.Dl user@site.com --(ether )--> user@site.com[rmtc] +.Pp +The input address +.Em user@site.com +resolves to use the +.Em ether +mailer. That mailer is directed to send the mail to +to the user +.Em user@site.com +at site +.Em rmtc +(as indicated in the square brackets). +.Pp +The two later sections of output show how the addresses specified as +the +.Em To +and +.Em From +address are transformed in the text of the +headers. In the example above, the +.Em To +addresses are untouched. +The +.Em From +addresses, however, all lose their machine information on +the way through the mailer: +.Pp +.Dl user@site ----> user +.Pp +This may be desirable when using a configuration file on a +workstation which is to be hidden as a mailhost from the rest of the +network. +.Pp +The following is a set of addresses used at one site for the purposes of +testing address resolution. Comments after the addresses detail why +particular addresses are present: +.Bl -tag -width "user@machine.com" -compact -offset indent +.It user +Standard trivial address +.It user@rmtc +qualified at one level +.It user@rmtc.central +qualified at two levels +.It user@rmtc.central.sun.com +qualified all the way +.It rmtc!user +local but specified as uucp +.It user@summit +a workstation (normally delivered locally, though) +.It user@summit.central +same but more qualified +.It user@summit.central.sun.com +same but fully qualified +.It summit!user +same but specified as uucp +.It user@prisma +Backward compatibility tests +.It user@prisma.com +.It prisma!user +.It user@central +Superior domain testing +.It user@machine.central +more qualified, but unknown +.It user@summit.central +more qualified and known +.It user@eng +name in faraway domain +.It user@machine.eng +unknown machine in faraway domain +.It user@summit.eng +local machine, far away domain +.It user@hoback +far away machine +.It user@machine +apparently local but unknown machine +.It user@sun.com +Standard trivial address +.It user@machine.dom.sun.com +fully qualified but unknown machine +.It user@foo.com +standard, known, really far away domain +.It user@foo.dom +standard, unknown, really far away domain +.It site!user +Single level uucp +.It site1!site2!user +Double level uucp +.It user@foo.dom@bar.dom +Trickier address +.It site!user@foo.dom +Mixed uucp/domain +.It site!user@uunet.uu.net +Mixed double uucp/domain +.El +.Sh NOTES +Note that +.Nm checksendmail +is a +.Xr perl +script. If your site does not have +.Xr perl 1 , +it can be obtained via anonymous +.Xr ftp +from +.Em ftp.uu.net . +.Pp +.Xr sendmail +requires that the user have access to directory specified by the +.Em OQ +parameter in the configuration file (normally +.Pa /usr/spool/mqueue ) . +.Nm checksendmail +verifies that the user has access to this directory before allowing the +test to continue. +.Sh AUTHORS +.Bd -literal +Gene Kim +Rob Kolstad +Jeff Polk +.Ed +.Sh "SEE ALSO" +.Xr sendmail 8 diff --git a/debian/examples/checksendmail/BSDI/checksendmail.perl b/debian/examples/checksendmail/BSDI/checksendmail.perl new file mode 100644 index 0000000..a8e9e11 --- /dev/null +++ b/debian/examples/checksendmail/BSDI/checksendmail.perl @@ -0,0 +1,377 @@ +#!/usr/bin/perl + +# BSDI $Id: checksendmail.perl,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ + +# checksendmail +# +# The checksendmail program is a perl script that aids the testing +# of sendmail's various configuration filse. checksendmail +# passes typical addresses (supplied in input files) through +# sendmail and prints the result of the resolution and +# transformation routines. +# +# Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90 + +# -- -C config file +# -- -r resolve_addresses_file +# -- -T test one address +# -- -b sendmail binary + +# XXX deficiencies: ``/etc/sendmail'' should be a parameter + +# defaults: + $resolve = "address.resolve"; + $cffile = "/etc/sendmail.cf"; + $sendmail = "/usr/sbin/sendmail"; + +sub usage { + die "Usage: checksendmail [-C cffile.cf] [-r resolve_addrs_file [-T one\@test.addr\n"; +} + +for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) { + if ($ARGV[1] eq "-C") + { + shift @ARGV; + if ($#ARGV >= 1) {$cffile = $ARGV[1]; } + else { &usage(); } + } + elsif ($ARGV[1] eq "-r") + { + if ($setfile & 1) { die "Can only set `resolve' once"; } + shift @ARGV; + if ($#ARGV < 1) { &usage(); } + $resolve = $ARGV[1]; + $setfile += 1; + } + elsif ($ARGV[1] eq "-T") + { + if ($setfile) { die "Can't set other files and use -T"; } + shift @ARGV; + if ($#ARGV < 1) { &usage(); } + open (OUT, ">/tmp/csm.in$$") || + die "Can't open >/tmp/csm.in$$"; + $resolve = "/tmp/csm.in$$"; + print OUT "$ARGV[1]\n"; + close (OUT); + $setfile = 7; + } + elsif ($ARGV[1] eq "-b") + { + shift @ARGV; + if ($#ARGV >= 1) {$sendmail = $ARGV[1]; } + else { &usage(); } + } + else { &usage(); } +} + +if (!-e $cffile) { die "Can't find configuration file $cffile\n"; } +if (!-e $resolve) { die "Can't find name file $resolve\n"; } + +# make sure the user can access the ../mqueue directory + +$maildir = `grep ^OQ $cffile`; +chop $maildir; +$maildir =~ s/^OQ//; +if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) { + warn "checksendmail: can't access $maildir! trying anyway...\n"; +} + +chop($hostname = `hostname`); +chop($pwd = `pwd`); +print "system: $hostname\t\tcurrent dir: $pwd\n"; +print "config file: $cffile\t\tresolve file: $resolve\n"; + +sub handler { # 1st argument is signal name + local($sig) = @_; + print STDERR "Caught a SIG$sig--shutting down\n"; + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + exit(0); +} + +$SIG{'INT'} = 'handler'; +$SIG{'QUIT'} = 'handler'; + + +# glean the mailers used from the rule 0 tests + +sub parseresolve +{ + while (<MAIL>) + { + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + if (/^>/) # INPUT LINE! (and last output is done) + { + chop; + if ($prevline) { # OUTPUT LINE! + &printparseresolve; + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + else { chop; } + $prevline = $_; + } + &printparseresolve; +} + +sub printparseresolve { + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; + # Don't strip spaces off error messages + $prevline =~ s/ *([.!%<>]) */$1/g; + $prevline =~ s/ +([;?\$])/$1/g; + $prevline =~ s/([#\@:]) +/$1/g; + +# non-Sun test mode delimiters -> easily-readable style +# Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu + $prevline =~ s/\^V/\$#/; + $prevline =~ s/\^W/\$@/; + $prevline =~ s/\^X/\$:/; + + #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET + @t = split( '\$', $prevline); + $address = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 1; $i <= $#t; $i++) + { + if (substr($t[$i], 0, 1) eq ":") + { $address = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "@") + { $remote = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "#") + { $mailer = substr($t[$i], 1,999); + $mailer =~ tr/A-Z/a-z/; } + } + printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer, + $address, $remote); + if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";} +} + +# Parse output of sendmail name resolution + +sub parseaddress +{ +## ADDRESS TEST MODE +## Enter <ruleset> <address> +## > rewrite: ruleset 3 input: "user" + + open(MAIL, $_[0]) || die "Can't open $_[0]...\n"; + local ($k, $address, $prevline, $mailer, $remote, $input); + print $_[1]; # the title + + $done = 0; + while (<MAIL>) + { + if (/^> *$/) { $done = 1; } + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + chop; + if (/^>/) # INPUT LINE! (and last output is done) + { + if ($prevline) { # OUTPUT LINE! + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; +#> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#> + printf("%-27.27s ----> %s\n", $input, $prevline); + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + last if $done; + $prevline = $_; + } + close(MAIL); +} + + +# pass names from resolve files to sendmail + +open(IN, $resolve) || die "can't open $resolve\n"; +open(OUT, ">/tmp/csm$$") || die "can't open >/tmp/csm$$\n"; +while (<IN>) +{ + /^$/ && next; + /^#/ && next; + print OUT "3,0 $_"; + chop; + $allinput .= " $_"; +} +close(OUT); +close(IN); +$sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|"; +open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n"; +print "Mail address resolution (rule 0)\n\n"; +&parseresolve(); + +# calculate $f + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,4"; + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\n\$f address header transformations\n\n"); + +# Get the R= and S= special rulesets from the configuration + +open(FID, "grep ^M $cffile|"); +while (<FID>) +{ +# Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h + chop; + $thisline = $_; $thisline =~ s/M//; $thisline =~ s/,.*//; + $thisline =~ tr/A-Z/a-z/; + $sendrule = $_; $sendrule =~ s/.*S=//; $sendrule =~ s/,.*//; + if ($sendrule=~q!/!) { + ($esendrule, $hsendrule) = split (q!/!, $sendrule); + } + else { $esendrule = $hsendrule = $sendrule; } + $recvrule = $_; $recvrule =~ s/.*R=//; $recvrule =~ s/,.*//; + if ($recvrule=~q!/!) { + ($erecvrule, $hrecvrule) = split (q!/!, $recvrule); + } + else { $erecvrule = $hrecvrule = $recvrule; } + $esendrules{$thisline} = $esendrule; + $hsendrules{$thisline} = $hsendrule; + $erecvrules{$thisline} = $erecvrule; + $hrecvrules{$thisline} = $hrecvrule; +} +close(FID); + +# pass names from various mailers through sendmail + +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($erecvrules{$i} == 0) { + print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + @namelist = split(/ /, $allinput); + $rules = "3,2,$erecvrules{$i},4"; + foreach (@namelist) { + print OUT "$rules $_\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(OUT); + $note = ""; + if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; } + &parseaddress ("/tmp/csm$$", "\n\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n\n"); +} +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($hrecvrules{$i} == 0) { + print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + if ($hrecvrules{$i} ne $erecvrules{$i}) { + open (OUT, $sendmailprog); + @namelist = split(/ /, $allinput); + $rules = "3,2,$hrecvrules{$i},4"; + foreach (@namelist) { + print OUT "$rules $_\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\n`To' header address transformations for mailer $i [$rules]:\n\n"); + } +} + +# pass names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($esendrules{$i} == 0) { + print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,$esendrules{$i},4"; + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n\n"); +} +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($hsendrules{$i} == 0) { + print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,$hsendrules{$i},4"; + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\n`From' address header transformations for mailer $i [$rules]:\n\n"); +} +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($esendrules{$i} == 0) { + print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n\n\$g address transformations for mailer $i [$rules]:\n\n"); +} + +unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; +unlink("/tmp/csm.in$$"); + diff --git a/debian/examples/checksendmail/BSDI_CONTRIB b/debian/examples/checksendmail/BSDI_CONTRIB new file mode 100644 index 0000000..97871d5 --- /dev/null +++ b/debian/examples/checksendmail/BSDI_CONTRIB @@ -0,0 +1,18 @@ +Software Package: + checksendmail + +Release/Version: + Dated 7/11/90. + +Retrieved from: + N/A. + +Bug reports: + This software package is maintained by the software contributor, + not BSDI. Please send any bug reports to both support@BSDI.COM + and polk@bsdi.com. + +Comments: + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +Modifications to this version made by BSDI: diff --git a/debian/examples/checksendmail/address.resolve b/debian/examples/checksendmail/address.resolve new file mode 100644 index 0000000..2de8a60 --- /dev/null +++ b/debian/examples/checksendmail/address.resolve @@ -0,0 +1,15 @@ +# addresses to be delivered locally +root +postmaster +user +user@mailhub +user@mailhub.gadget.com +user@gadget.com + +# Addresses to be forwarded with SMTP to firewall +user@firewall +user@firewall.gadget.com + +# Addresses to be forwarded with SMTP to harker.com +user@harker.com +harker!user diff --git a/debian/examples/checksendmail/checksendmail b/debian/examples/checksendmail/checksendmail new file mode 100644 index 0000000..349d025 --- /dev/null +++ b/debian/examples/checksendmail/checksendmail @@ -0,0 +1,868 @@ +#!/usr/bin/perl + +# BSDI $Id: checksendmail.perl,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ + +# checksendmail +# +# The checksendmail program is a perl script that aids the testing +# of sendmail's various configuration filse. checksendmail +# passes typical addresses (supplied in input files) through +# sendmail and prints the result of the resolution and +# transformation routines. +# +# Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90 +# Modified by Robert Harker, 11/14/00 + +# -- -a show aliasing of local addresses +# -- -d preceed each line with ruleset sequence summary +# -- -C config_file +# -- -b sendmail_binary +# -- -l log_file of results of tests +# -- -r resolve_addresses_file +# -- -T test one address + +# defaults: + $resolve = "address.resolve"; + $cffile = "/etc/mail/sendmail.cf"; + +# Pre-create tmp files (so can use safely) + use Fcntl; + foreach ("/tmp/csm$$", "/tmp/csm.in$$") { + die "Can't pre-create $_" + unless sysopen(T,$_,O_RDWR|O_CREAT|O_EXCL,0600) + and close(T); + }; + +sub usage { + die "Usage: checksendmail [-C cffile.cf] [-b sendmail_binary] [-l log_file]\n\t\t\t\t[-a] [-d] [-r resolve_addrs_file || -T one\@test.addr]\n$errormsg\n"; +} + +for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) { + if ($ARGV[1] eq "-C") + { + if ($setcffile & 1) { die "Can only set `cffile.cf' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$cffile = $ARGV[1]; } + else { + $errormsg = "No sendmail.cf file given for -C flag\n"; + &usage(); + } + $setcffile += 1; + } + elsif ($ARGV[1] eq "-r") + { + if ($setfile & 1) { die "Can only set `resolve' once"; } + shift @ARGV; + if ($#ARGV < 1) { + $errormsg = "No resolve_addrs_file given for -r flag\n"; + &usage(); + } + $resolve = $ARGV[1]; + $setfile += 1; + } + elsif ($ARGV[1] eq "-T") + { + if ($setfile) { die "Can't set other files and use -T"; } + shift @ARGV; + if ($#ARGV < 1) { + $errormsg = "No one\@test.addr given for -T flag\n"; + &usage(); + } + open (OUT, ">/tmp/csm.in$$") || + die "Can't open >/tmp/csm.in$$"; + $resolve = "/tmp/csm.in$$"; + print OUT "$ARGV[1]\n"; + close (OUT); + $setfile = 7; + } + elsif ($ARGV[1] eq "-b") + { + if ($setbin & 1) { die "Can only set `sendmail_binary' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$sendmail = $ARGV[1]; } + else { + $errormsg = "No sendmail_binary file given for -b flag\n"; + &usage(); + } + $setbin += 1; + } + elsif ($ARGV[1] eq "-l") + { + if ($setlog & 1) { die "Can only set `log_file' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$logfile = $ARGV[1]; } + else { + $errormsg = "No log_file file given for -l flag\n"; + &usage(); + } + $setlog += 1; + } + elsif ($ARGV[1] eq "-a") + { + $doaliasing += 1; + } + elsif ($ARGV[1] eq "-d") + { + $dorspath += 1; + } + else { &usage(); } +} + +# Figure out where the sendmail binary is +if (! $setbin & 1) { + foreach $i ("/usr/sbin/sendmail", "/usr/libexec/sendmail", "/usr/lib/sendmail") + { + # test if binary exists and is executable + if ((-e $i) && (-x $i)) { + $sendmail = $i; + last; + } + } +} + + +# Figure out the version of sendmail and the location of the sendmail.cf file +# sendmail -d0.10 -bv root +# ("-bv root" is just to give sendmail something to chew on) + +$binversion = `$sendmail -d0.10 -bv root | grep "^Version "`; +chop $binversion; +$binversion =~ s/^Version //; + +# Get the major relase number from the sendmail version +$binver = $binversion; +$binver =~ s/^8\.//; +$binver =~ s/\..+//; + +# if the cf file was not set on the command line, +# find out where the binary looks for it +if ( ! -e $cffile ) { + $cffile = `$sendmail -d0.10 -bv root | grep "Def Conf file:"`; + chop $cffile; + $cffile =~ s/ //g; + $cffile =~ s/ //g; + $cffile =~ s/^DefConffile://; +} + +if (!-e $cffile) { die "Can't find configuration file $cffile\n"; } + +if (!-e $resolve) { die "Can't find name file $resolve\n"; } + +# Figure out the version of the sendmail.cf file +# Look for the V line +$cfversion = `grep "^V" $cffile`; +chop $cfversion; +# if $cfversion is empty, then the configuration is sendmail 5, not sendmail 8 +$cfversion =~ s/^$/V0/; + +# Get the version number from the V line +$cfver = $cfversion; +$cfver =~ s/^V//; +$cfver =~ s'/.+''; + +# check that the binary is a higher version than config file +if ( $binver < $cfver + 1) { + die "$cffile version ($cfversion) is more advanced than $sendmail version ($binversion)\n"; +} + +# figure out where the mqueue directory is +if ( $cfver <= 6 ) { + $maildir = `grep "^OQ" $cffile`; + chop $maildir; + $maildir =~ s/^OQ//; +} else { + $maildir = `grep "^O QueueDirectory" $cffile`; + chop $maildir; + $maildir =~ s/^O QueueDirectory=//; +} + +# make sure the user can access the ../mqueue directory +if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) { + if ($doaliasing & 1) { + die "checksendmail: can't access $maildir! can't use checksendmail's -a flag\n"; + } else { + warn "checksendmail: can't access $maildir! trying anyway...\n"; + } +} + +chop($hostname = `hostname`); +chop($pwd = `pwd`); +print "system: $hostname\t\tcurrent dir: $pwd\n"; +print "resolve file: $resolve\n"; +print "sendmail binary: $sendmail\t\tsendmail version: $binversion\n"; +print "config file: $cffile\t\tconfig file version: $cfversion\n\n"; +if ($setlog & 1) { + print "log file: $logfile\n\n"; + # now print to the log file + open (LOG , ">$logfile") || die "Can't open >$logfile"; + print LOG "system: $hostname\t\tcurrent dir: $pwd\n"; + print LOG "resolve file: $resolve\n"; + print LOG "sendmail binary: $sendmail\t\tsendmail version: $binversion\n"; + print LOG "config file: $cffile\t\tconfig file version: $cfversion\n"; + print LOG "log file: $logfile\n\n"; +} + +sub handler { # 1st argument is signal name + local($sig) = @_; + print STDERR "Caught a SIG$sig--shutting down\n"; + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + if ($setlog & 1) { + close(LOG); + } + exit(0); +} + +$SIG{'INT'} = 'handler'; +$SIG{'QUIT'} = 'handler'; + + + +# glean the mailers used from the rule 0 tests + +sub parseresolve +{ + while (<MAIL>) + { + # now print to the log file + if ($setlog & 1) { + print LOG $_; + } + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + if (/^Warning: .cf file is out of date/) { next; } + + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if (/^>/) # INPUT LINE! (and last output is done) + { + chop; + if ($prevline) { # OUTPUT LINE! + &printparseresolve; + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + else { chop; } + $prevline = $_; + } else { + # format of /parse output is: + # Parsing envelope recipient address + # rewrite: ruleset 3 input: harker @ harker . com + if ($prevrule eq "Parsing envelope recipient address\n" ) + { + chop; + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + $prevrule = $_; + } + elsif (/^mailer /) + { + $prevrule = $_; + &printparseresolve; + } + else + { + $prevrule = $_; + } + } + } + #&printparseresolve; +} + +sub printparseresolve { + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($input eq "") { return;} + + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; + # Don't strip spaces off error messages + $prevline =~ s/ *([.!%<>]) */$1/g; + $prevline =~ s/ +([;?\$])/$1/g; + $prevline =~ s/([#\@:]) +/$1/g; + +# non-Sun test mode delimiters -> easily-readable style +# Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu + $prevline =~ s/\^V/\$#/; + $prevline =~ s/\^W/\$@/; + $prevline =~ s/\^X/\$:/; + + #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET + @t = split( '\$', $prevline); + $address = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 1; $i <= $#t; $i++) + { + if (substr($t[$i], 0, 1) eq ":") + { $address = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "@") + { $remote = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "#") + { $mailer = substr($t[$i], 1,999); + $mailer =~ tr/A-Z/a-z/; } + } + } else { + # the binary is at least 8.7 then use result of /parse + chop; + s/,//g; + + # mailer esmtp, host harker.com., user harker@harker.com + @t = split( ' ', $_); + $address = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 0; $i <= $#t; $i++) + { + if ($t[$i] eq "user") + { $address = $t[++$i]; } + if ($t[$i] eq "host") + { $remote = $t[++$i]; } + if ($t[$i] eq "mailer") + { $mailer = $t[++$i]; + $mailer =~ tr/A-Z/a-z/; } + } + } + printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer, + $address, $remote); + # now print to the log file + if ($setlog & 1) { + printf LOG ("%-27.27s --(%-6.6s)--> %s[%s]\n\n", $input, $mailer, + $address, $remote); + } + + if ($doaliasing & 1) { + # If the address resolved to the local mailer, + # then expand the username as an alias + if ( $mailer eq "local") + { + $setalias = $aliasfound = 0; + $laddress = $address; + $sendmailprog = "$sendmail -bv -C$cffile $laddress|"; + open(LOCAL, $sendmailprog) || + die "can't exec $sendmailprog...\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "\n$sendmailprog\n"; + } + while (<LOCAL>) + { + # now print to the log file + if ($setlog & 1) { + print LOG $_; + } + chop; + if (/unknown/) + { + $aliasfound = 1; + printf("\t\t aliased to --(error )--> %s\n", $_); + # now print to the log file + if ($setlog & 1) { + printf LOG ("\t\t aliased to --(error )--> %s\n\n", $_); + } + next; + } + s/,//g; + @l = split( ' ', $_); + $aladdress = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 1; $i <= $#l; $i++) + { + # ./sendmail -bv -C./sendmail.cf j.murphy + # j.murphy@pop.mcit.com... deliverable: mailer mciesmtp, + # host pop.mcit.com, user j.murphy@pop.mcit.com + if ($l[$i] eq "user") { $aladdress = $l[++$i]; } + if ($l[$i] eq "host") { $remote = $l[++$i]; } + if ($l[$i] eq "mailer") { $mailer = $l[++$i]; } + } + if (("$laddress" eq "$aladdress") && ($aliasfound == 0)) { + $selfalias = 1; + next; + } + printf("\t\t aliased to --(%-6.6s)--> %s[%s]\n", + $mailer, $aladdress, $remote); + # now print to the log file + if ($setlog & 1) { + printf LOG ("\t\t aliased to --(%-6.6s)--> %s[%s]\n\n", + $mailer, $aladdress, $remote); + } + if ("$laddress" ne "$aladdress") { + $aliasfound = 1; + $envsenderaddrs .= " $aladdress"; + } + if ($mailer ne "XXX") { $themailers{$mailer}=1;} + } + close(LOCAL); + if ($selfalias == 1 && $aliasfound == 1) { + printf("\t\t aliased to --(%-6.6s)--> %s[%s]\n", + $mailer, $aladdress, $remote); + # now print to the log file + if ($setlog & 1) { + printf LOG ("\t\t aliased to --(%-6.6s)--> %s[%s]\n\n", + $mailer, $aladdress, $remote); + } + } + # now print a blank line to the log file + if ($setlog & 1) { + print LOG "\n"; + } + } else { + $envsenderaddrs .= " $address"; + } + } + + if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";} +} + +# Parse output of sendmail name resolution + +sub parseaddress +{ +## ADDRESS TEST MODE +## Enter <ruleset> <address> +## > rewrite: ruleset 3 input: "user" + + open(MAIL, $_[0]) || die "Can't open $_[0]...\n"; + local ($k, $address, $prevline, $mailer, $remote, $input); + print $_[1]; # the title + # now print to the log file + if ($setlog & 1) { + print LOG "\n$_[1]"; # the title + } + + $done = 0; + while (<MAIL>) + { + # now print to the log file + if ($setlog & 1) { + print LOG $_; + } + if (/^> *$/) { $done = 1; } + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + if (/^Warning: .cf file is out of date/) { next; } + if (/^$/) { next; } + chop; + # rewrite $rules to be just a slash if it starts with a / + $rules =~ s'/.+'/'; + # if the binary is less than 8.7 then use result of ruleset 4 + if ( $binver <= 6 || $rules ne "/" ) { + if (/^>/) # INPUT LINE! (and last output is done) + { + if ($prevline) { # OUTPUT LINE! + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; +#> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#> + printf("%s%-24.24s ----> %s\n", $rspath, $input, $prevline); + # now print to the log file + if ($setlog & 1) { + printf LOG ("%s%-24.24s ----> %s\n", $rspath, $input, $prevline); + } + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + last if $done; + $prevline = $_; + } else { + # format of /try output is: + # Trying envelope recipient address harker for mailer esmtp + # ... + # Rcode = 0, addr = harker@mailhub.gadget.com + # remove extra ">" from "> >" lines + s/^> >/>/; + if (/^> Trying/) # INPUT LINE! (and last output is done) + { + chop; + s/> Trying .+ address //; + s/ for mailer .+//; + s/ //g; + s/"//g; + $input = $_; + $prevrule = $_; + } + elsif (/^Rcode = /) + { + $prevrule = $_; + # Rcode = 0, addr = harker@mailhub.gadget.com + s/^Rcode = .+ addr = //; + printf("%s%-24.24s ----> %s\n", $rspath, $input, $_); + # now print to the log file + if ($setlog & 1) { + printf LOG ("%s%-24.24s ----> %s\n\n", $rspath, $input, $_); + } + } + else + { + $prevrule = $_; + } + } + } + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; + } + close(MAIL); +} + + +# if the binary is less than 8.7 then use result of ruleset 4 +if ( $binver <= 6 ) { + print "Mail address resolution (rule 0)\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "Mail address resolution (rule 0)\n"; + } +} else { + print "Mail address resolution (/parse)\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "Mail address resolution (/parse)\n"; + } +} +# pass names from resolve files to sendmail + +open(IN, $resolve) || die "can't open $resolve\n"; +open(OUT, ">/tmp/csm$$") || die "can't open >/tmp/csm$$\n"; +while (<IN>) +{ + /^$/ && next; + /^#/ && next; + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver == 5 ) { + $rules = "0 $_"; + } elsif ( $binver <= 6 ) { + $rules = "3,0 $_"; + } else { + $rules = "/parse $_"; + } + print OUT $rules; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules"; + } + chop; + $allinput .= " $_"; +} + $allinput =~ s/^ //; +close(OUT); +close(IN); +$sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|"; +open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n"; +&parseresolve(); + +# calculate $f + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + open (IN, $resolve); + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "1,4"; + } else { + $rules = "3,1,4"; + } + if ($dorspath & 1) { $rspath = "\$f: "; } + + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $address\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; # stuff last line into sendmail + } + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\$f address header transformations\n"); + +# Get the R= and S= special rulesets from the configuration +# now print to the log file +if ($setlog & 1) { + print LOG "\nGet the R= and S= mailer specific rulesets\n"; +} + +open(FID, "grep ^M $cffile|"); +while (<FID>) +{ +# Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h + chop; + $thisline = $_; + $thisline =~ s/M//; + $thisline =~ s/,.*//; + $thisline =~ tr/A-Z/a-z/; + $sendrule = $_; + $sendrule =~ s/.*S=//; + $sendrule =~ s/,.*//; + if ($sendrule=~q!/!) { + ($esendrule, $hsendrule) = split (q!/!, $sendrule); + } else { + $esendrule = $hsendrule = $sendrule; + } + $recvrule = $_; + $recvrule =~ s/.*R=//; + $recvrule =~ s/,.*//; + if ($recvrule=~q!/!) { + ($erecvrule, $hrecvrule) = split (q!/!, $recvrule); + } else { + $erecvrule = $hrecvrule = $recvrule; + } + $esendrules{$thisline} = $esendrule; + $hsendrules{$thisline} = $hsendrule; + $erecvrules{$thisline} = $erecvrule; + $hrecvrules{$thisline} = $hrecvrule; + # now print to the log file + if ($setlog & 1) { + print LOG "mailer: $thisline\t->\tesendrule = $esendrule, hsendrule = $hsendrule, + erecvrule = $erecvrule, hrecvrule = $hrecvrule\n"; + } +} +# now print to the log file +if ($setlog & 1) { + print LOG "\n"; +} +close(FID); + +# pass envelope recipient names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i ER: "; } + + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($erecvrules{$i} == 0) { + print "\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$erecvrules{$i},4"; + } else { + $rules = "3,2,$erecvrules{$i},4"; + } + } else { + print OUT "/tryflags ER\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags ER\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; # stuff last line into the log + } + close(OUT); + $note = ""; + if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; } + &parseaddress ("/tmp/csm$$", "\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n"); +} + +# pass header recipient names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i HR: "; } + + # only run the header ruleset if the mailer uses split env/hdr rulesets + if ($hrecvrules{$i} ne $erecvrules{$i}) { + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($hrecvrules{$i} == 0) { + print "\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$hrecvrules{$i},4"; + } else { + $rules = "3,2,$hrecvrules{$i},4"; + } + } else { + print OUT "/tryflags HR\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags HR\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; # stuff last line into the log + } + close(OUT); + &parseaddress ("/tmp/csm$$", "\n`To' header address transformations for mailer $i [$rules]:\n"); + } +} + +# pass envelope sender names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i ES: "; } + + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($esendrules{$i} == 0) { + print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$esendrules{$i},4"; + } else { + $rules = "3,2,$esendrules{$i},4"; + } + } else { + print OUT "/tryflags ES\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags ES\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n"); +} + +# pass header sender names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i HS: "; } + + # only run the header ruleset if the mailer uses split env/hdr rulesets + if ($hsendrules{$i} ne $esendrules{$i}) { + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($hsendrules{$i} == 0) { + print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$hsendrules{$i},4"; + } else { + $rules = "3,2,$hsendrules{$i},4"; + } + } else { + print OUT "/tryflags HS\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags HR\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n`From' address header transformations for mailer $i [$rules]:\n"); + } +} + +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "\$g: "; } + + # if the binary is 8.9 or below then check if the mailer + # specific ruleset exists + if ( $binver <= 9 ) { + # if the binary is less than 8.7 then use result of ruleset 0 + if ($esendrules{$i} == 0) { + print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + } else { + $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + } + open (IN, $resolve); + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n\$g address transformations for mailer $i [$rules]:\n"); +} + +unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; +unlink("/tmp/csm.in$$"); + +exit; diff --git a/debian/examples/checksendmail/checksendmail-BSDI.patch b/debian/examples/checksendmail/checksendmail-BSDI.patch new file mode 100644 index 0000000..35b4b2e --- /dev/null +++ b/debian/examples/checksendmail/checksendmail-BSDI.patch @@ -0,0 +1,1240 @@ +diff -c 'BSDI/checksendmail.perl' 'checksendmail' +Index: ./BSDI/checksendmail.perl +Prereq: 1.1.1.1 +*** ./BSDI/checksendmail.perl Mon Jan 15 12:49:25 2001 +--- ./checksendmail Mon Apr 14 15:57:56 2003 +*************** +*** 4,45 **** + + # checksendmail + # +! # The checksendmail program is a perl script that aids the testing + # of sendmail's various configuration filse. checksendmail + # passes typical addresses (supplied in input files) through + # sendmail and prints the result of the resolution and + # transformation routines. + # + # Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90 + +! # -- -C config file + # -- -r resolve_addresses_file + # -- -T test one address +- # -- -b sendmail binary +- +- # XXX deficiencies: ``/etc/sendmail'' should be a parameter + + # defaults: + $resolve = "address.resolve"; +! $cffile = "/etc/sendmail.cf"; +! $sendmail = "/usr/sbin/sendmail"; + + sub usage { +! die "Usage: checksendmail [-C cffile.cf] [-r resolve_addrs_file [-T one\@test.addr\n"; + } + + for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) { + if ($ARGV[1] eq "-C") + { + shift @ARGV; + if ($#ARGV >= 1) {$cffile = $ARGV[1]; } +! else { &usage(); } + } + elsif ($ARGV[1] eq "-r") + { + if ($setfile & 1) { die "Can only set `resolve' once"; } + shift @ARGV; +! if ($#ARGV < 1) { &usage(); } + $resolve = $ARGV[1]; + $setfile += 1; + } +--- 4,62 ---- + + # checksendmail + # +! # The checksendmail program is a perl script that aids the testing + # of sendmail's various configuration filse. checksendmail + # passes typical addresses (supplied in input files) through + # sendmail and prints the result of the resolution and + # transformation routines. + # + # Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90 ++ # Modified by Robert Harker, 11/14/00 + +! # -- -a show aliasing of local addresses +! # -- -d preceed each line with ruleset sequence summary +! # -- -C config_file +! # -- -b sendmail_binary +! # -- -l log_file of results of tests + # -- -r resolve_addresses_file + # -- -T test one address + + # defaults: + $resolve = "address.resolve"; +! $cffile = "/etc/mail/sendmail.cf"; +! +! # Pre-create tmp files (so can use safely) +! use Fcntl; +! foreach ("/tmp/csm$$", "/tmp/csm.in$$") { +! die "Can't pre-create $_" +! unless sysopen(T,$_,O_RDWR|O_CREAT|O_EXCL,0600) +! and close(T); +! }; + + sub usage { +! die "Usage: checksendmail [-C cffile.cf] [-b sendmail_binary] [-l log_file]\n\t\t\t\t[-a] [-d] [-r resolve_addrs_file || -T one\@test.addr]\n$errormsg\n"; + } + + for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) { + if ($ARGV[1] eq "-C") + { ++ if ($setcffile & 1) { die "Can only set `cffile.cf' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$cffile = $ARGV[1]; } +! else { +! $errormsg = "No sendmail.cf file given for -C flag\n"; +! &usage(); +! } +! $setcffile += 1; + } + elsif ($ARGV[1] eq "-r") + { + if ($setfile & 1) { die "Can only set `resolve' once"; } + shift @ARGV; +! if ($#ARGV < 1) { +! $errormsg = "No resolve_addrs_file given for -r flag\n"; +! &usage(); +! } + $resolve = $ARGV[1]; + $setfile += 1; + } +*************** +*** 47,53 **** + { + if ($setfile) { die "Can't set other files and use -T"; } + shift @ARGV; +! if ($#ARGV < 1) { &usage(); } + open (OUT, ">/tmp/csm.in$$") || + die "Can't open >/tmp/csm.in$$"; + $resolve = "/tmp/csm.in$$"; +--- 64,73 ---- + { + if ($setfile) { die "Can't set other files and use -T"; } + shift @ARGV; +! if ($#ARGV < 1) { +! $errormsg = "No one\@test.addr given for -T flag\n"; +! &usage(); +! } + open (OUT, ">/tmp/csm.in$$") || + die "Can't open >/tmp/csm.in$$"; + $resolve = "/tmp/csm.in$$"; +*************** +*** 57,91 **** + } + elsif ($ARGV[1] eq "-b") + { + shift @ARGV; + if ($#ARGV >= 1) {$sendmail = $ARGV[1]; } +! else { &usage(); } + } + else { &usage(); } + } + + if (!-e $cffile) { die "Can't find configuration file $cffile\n"; } + if (!-e $resolve) { die "Can't find name file $resolve\n"; } + +! # make sure the user can access the ../mqueue directory + +! $maildir = `grep ^OQ $cffile`; +! chop $maildir; +! $maildir =~ s/^OQ//; + if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) { +! warn "checksendmail: can't access $maildir! trying anyway...\n"; + } + + chop($hostname = `hostname`); + chop($pwd = `pwd`); + print "system: $hostname\t\tcurrent dir: $pwd\n"; +! print "config file: $cffile\t\tresolve file: $resolve\n"; + + sub handler { # 1st argument is signal name + local($sig) = @_; + print STDERR "Caught a SIG$sig--shutting down\n"; + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + exit(0); + } + +--- 77,215 ---- + } + elsif ($ARGV[1] eq "-b") + { ++ if ($setbin & 1) { die "Can only set `sendmail_binary' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$sendmail = $ARGV[1]; } +! else { +! $errormsg = "No sendmail_binary file given for -b flag\n"; +! &usage(); +! } +! $setbin += 1; +! } +! elsif ($ARGV[1] eq "-l") +! { +! if ($setlog & 1) { die "Can only set `log_file' once"; } +! shift @ARGV; +! if ($#ARGV >= 1) {$logfile = $ARGV[1]; } +! else { +! $errormsg = "No log_file file given for -l flag\n"; +! &usage(); +! } +! $setlog += 1; +! } +! elsif ($ARGV[1] eq "-a") +! { +! $doaliasing += 1; +! } +! elsif ($ARGV[1] eq "-d") +! { +! $dorspath += 1; + } + else { &usage(); } + } + ++ # Figure out where the sendmail binary is ++ if (! $setbin & 1) { ++ foreach $i ("/usr/sbin/sendmail", "/usr/libexec/sendmail", "/usr/lib/sendmail") ++ { ++ # test if binary exists and is executable ++ if ((-e $i) && (-x $i)) { ++ $sendmail = $i; ++ last; ++ } ++ } ++ } ++ ++ ++ # Figure out the version of sendmail and the location of the sendmail.cf file ++ # sendmail -d0.10 -bv root ++ # ("-bv root" is just to give sendmail something to chew on) ++ ++ $binversion = `$sendmail -d0.10 -bv root | grep "^Version "`; ++ chop $binversion; ++ $binversion =~ s/^Version //; ++ ++ # Get the major relase number from the sendmail version ++ $binver = $binversion; ++ $binver =~ s/^8\.//; ++ $binver =~ s/\..+//; ++ ++ # if the cf file was not set on the command line, ++ # find out where the binary looks for it ++ if ( ! -e $cffile ) { ++ $cffile = `$sendmail -d0.10 -bv root | grep "Def Conf file:"`; ++ chop $cffile; ++ $cffile =~ s/ //g; ++ $cffile =~ s/ //g; ++ $cffile =~ s/^DefConffile://; ++ } ++ + if (!-e $cffile) { die "Can't find configuration file $cffile\n"; } ++ + if (!-e $resolve) { die "Can't find name file $resolve\n"; } + +! # Figure out the version of the sendmail.cf file +! # Look for the V line +! $cfversion = `grep "^V" $cffile`; +! chop $cfversion; +! # if $cfversion is empty, then the configuration is sendmail 5, not sendmail 8 +! $cfversion =~ s/^$/V0/; +! +! # Get the version number from the V line +! $cfver = $cfversion; +! $cfver =~ s/^V//; +! $cfver =~ s'/.+''; +! +! # check that the binary is a higher version than config file +! if ( $binver < $cfver + 1) { +! die "$cffile version ($cfversion) is more advanced than $sendmail version ($binversion)\n"; +! } +! +! # figure out where the mqueue directory is +! if ( $cfver <= 6 ) { +! $maildir = `grep "^OQ" $cffile`; +! chop $maildir; +! $maildir =~ s/^OQ//; +! } else { +! $maildir = `grep "^O QueueDirectory" $cffile`; +! chop $maildir; +! $maildir =~ s/^O QueueDirectory=//; +! } + +! # make sure the user can access the ../mqueue directory + if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) { +! if ($doaliasing & 1) { +! die "checksendmail: can't access $maildir! can't use checksendmail's -a flag\n"; +! } else { +! warn "checksendmail: can't access $maildir! trying anyway...\n"; +! } + } + + chop($hostname = `hostname`); + chop($pwd = `pwd`); + print "system: $hostname\t\tcurrent dir: $pwd\n"; +! print "resolve file: $resolve\n"; +! print "sendmail binary: $sendmail\t\tsendmail version: $binversion\n"; +! print "config file: $cffile\t\tconfig file version: $cfversion\n\n"; +! if ($setlog & 1) { +! print "log file: $logfile\n\n"; +! # now print to the log file +! open (LOG , ">$logfile") || die "Can't open >$logfile"; +! print LOG "system: $hostname\t\tcurrent dir: $pwd\n"; +! print LOG "resolve file: $resolve\n"; +! print LOG "sendmail binary: $sendmail\t\tsendmail version: $binversion\n"; +! print LOG "config file: $cffile\t\tconfig file version: $cfversion\n"; +! print LOG "log file: $logfile\n\n"; +! } + + sub handler { # 1st argument is signal name + local($sig) = @_; + print STDERR "Caught a SIG$sig--shutting down\n"; + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); ++ if ($setlog & 1) { ++ close(LOG); ++ } + exit(0); + } + +*************** +*** 93,157 **** + $SIG{'QUIT'} = 'handler'; + + + # glean the mailers used from the rule 0 tests + + sub parseresolve + { + while (<MAIL>) + { +! if (/^ADDRESS TEST MODE/) { next; } +! if (/^Enter <ruleset>/) { next; } +! if (/^>/) # INPUT LINE! (and last output is done) +! { +! chop; +! if ($prevline) { # OUTPUT LINE! + &printparseresolve; +! } +! s/> *[0-9,]* *//g; +! s/.*input: *//; +! s/ //g; +! s/"//g; +! $input = $_; +! } +! else { chop; } +! $prevline = $_; + } +! &printparseresolve; + } + + sub printparseresolve { +! $prevline =~ s/.*returns: *//; +! $prevline =~ s/"//g; +! $prevline =~ s/ //g; +! # Don't strip spaces off error messages +! $prevline =~ s/ *([.!%<>]) */$1/g; +! $prevline =~ s/ +([;?\$])/$1/g; +! $prevline =~ s/([#\@:]) +/$1/g; + + # non-Sun test mode delimiters -> easily-readable style + # Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu +! $prevline =~ s/\^V/\$#/; +! $prevline =~ s/\^W/\$@/; +! $prevline =~ s/\^X/\$:/; +! +! #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET +! @t = split( '\$', $prevline); +! $address = "XXX"; +! $remote = "XXX"; +! $mailer = "XXX"; +! for ($i = 1; $i <= $#t; $i++) +! { +! if (substr($t[$i], 0, 1) eq ":") +! { $address = substr($t[$i], 1,999); } +! if (substr($t[$i], 0, 1) eq "@") +! { $remote = substr($t[$i], 1,999); } +! if (substr($t[$i], 0, 1) eq "#") +! { $mailer = substr($t[$i], 1,999); +! $mailer =~ tr/A-Z/a-z/; } +! } +! printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer, +! $address, $remote); +! if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";} + } + + # Parse output of sendmail name resolution +--- 217,426 ---- + $SIG{'QUIT'} = 'handler'; + + ++ + # glean the mailers used from the rule 0 tests + + sub parseresolve + { + while (<MAIL>) + { +! # now print to the log file +! if ($setlog & 1) { +! print LOG $_; +! } +! if (/^ADDRESS TEST MODE/) { next; } +! if (/^Enter <ruleset>/) { next; } +! if (/^Warning: .cf file is out of date/) { next; } +! +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver <= 6 ) { +! if (/^>/) # INPUT LINE! (and last output is done) +! { +! chop; +! if ($prevline) { # OUTPUT LINE! +! &printparseresolve; +! } +! s/> *[0-9,]* *//g; +! s/.*input: *//; +! s/ //g; +! s/"//g; +! $input = $_; +! } +! else { chop; } +! $prevline = $_; +! } else { +! # format of /parse output is: +! # Parsing envelope recipient address +! # rewrite: ruleset 3 input: harker @ harker . com +! if ($prevrule eq "Parsing envelope recipient address\n" ) +! { +! chop; +! s/> *[0-9,]* *//g; +! s/.*input: *//; +! s/ //g; +! s/"//g; +! $input = $_; +! $prevrule = $_; +! } +! elsif (/^mailer /) +! { +! $prevrule = $_; + &printparseresolve; +! } +! else +! { +! $prevrule = $_; +! } +! } + } +! #&printparseresolve; + } + + sub printparseresolve { +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver <= 6 ) { +! if ($input eq "") { return;} +! +! $prevline =~ s/.*returns: *//; +! $prevline =~ s/"//g; +! $prevline =~ s/ //g; +! # Don't strip spaces off error messages +! $prevline =~ s/ *([.!%<>]) */$1/g; +! $prevline =~ s/ +([;?\$])/$1/g; +! $prevline =~ s/([#\@:]) +/$1/g; + + # non-Sun test mode delimiters -> easily-readable style + # Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu +! $prevline =~ s/\^V/\$#/; +! $prevline =~ s/\^W/\$@/; +! $prevline =~ s/\^X/\$:/; +! +! #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET +! @t = split( '\$', $prevline); +! $address = "XXX"; +! $remote = "XXX"; +! $mailer = "XXX"; +! for ($i = 1; $i <= $#t; $i++) +! { +! if (substr($t[$i], 0, 1) eq ":") +! { $address = substr($t[$i], 1,999); } +! if (substr($t[$i], 0, 1) eq "@") +! { $remote = substr($t[$i], 1,999); } +! if (substr($t[$i], 0, 1) eq "#") +! { $mailer = substr($t[$i], 1,999); +! $mailer =~ tr/A-Z/a-z/; } +! } +! } else { +! # the binary is at least 8.7 then use result of /parse +! chop; +! s/,//g; +! +! # mailer esmtp, host harker.com., user harker@harker.com +! @t = split( ' ', $_); +! $address = "XXX"; +! $remote = "XXX"; +! $mailer = "XXX"; +! for ($i = 0; $i <= $#t; $i++) +! { +! if ($t[$i] eq "user") +! { $address = $t[++$i]; } +! if ($t[$i] eq "host") +! { $remote = $t[++$i]; } +! if ($t[$i] eq "mailer") +! { $mailer = $t[++$i]; +! $mailer =~ tr/A-Z/a-z/; } +! } +! } +! printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer, +! $address, $remote); +! # now print to the log file +! if ($setlog & 1) { +! printf LOG ("%-27.27s --(%-6.6s)--> %s[%s]\n\n", $input, $mailer, +! $address, $remote); +! } +! +! if ($doaliasing & 1) { +! # If the address resolved to the local mailer, +! # then expand the username as an alias +! if ( $mailer eq "local") +! { +! $setalias = $aliasfound = 0; +! $laddress = $address; +! $sendmailprog = "$sendmail -bv -C$cffile $laddress|"; +! open(LOCAL, $sendmailprog) || +! die "can't exec $sendmailprog...\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "\n$sendmailprog\n"; +! } +! while (<LOCAL>) +! { +! # now print to the log file +! if ($setlog & 1) { +! print LOG $_; +! } +! chop; +! if (/unknown/) +! { +! $aliasfound = 1; +! printf("\t\t aliased to --(error )--> %s\n", $_); +! # now print to the log file +! if ($setlog & 1) { +! printf LOG ("\t\t aliased to --(error )--> %s\n\n", $_); +! } +! next; +! } +! s/,//g; +! @l = split( ' ', $_); +! $aladdress = "XXX"; +! $remote = "XXX"; +! $mailer = "XXX"; +! for ($i = 1; $i <= $#l; $i++) +! { +! # ./sendmail -bv -C./sendmail.cf j.murphy +! # j.murphy@pop.mcit.com... deliverable: mailer mciesmtp, +! # host pop.mcit.com, user j.murphy@pop.mcit.com +! if ($l[$i] eq "user") { $aladdress = $l[++$i]; } +! if ($l[$i] eq "host") { $remote = $l[++$i]; } +! if ($l[$i] eq "mailer") { $mailer = $l[++$i]; } +! } +! if (("$laddress" eq "$aladdress") && ($aliasfound == 0)) { +! $selfalias = 1; +! next; +! } +! printf("\t\t aliased to --(%-6.6s)--> %s[%s]\n", +! $mailer, $aladdress, $remote); +! # now print to the log file +! if ($setlog & 1) { +! printf LOG ("\t\t aliased to --(%-6.6s)--> %s[%s]\n\n", +! $mailer, $aladdress, $remote); +! } +! if ("$laddress" ne "$aladdress") { +! $aliasfound = 1; +! $envsenderaddrs .= " $aladdress"; +! } +! if ($mailer ne "XXX") { $themailers{$mailer}=1;} +! } +! close(LOCAL); +! if ($selfalias == 1 && $aliasfound == 1) { +! printf("\t\t aliased to --(%-6.6s)--> %s[%s]\n", +! $mailer, $aladdress, $remote); +! # now print to the log file +! if ($setlog & 1) { +! printf LOG ("\t\t aliased to --(%-6.6s)--> %s[%s]\n\n", +! $mailer, $aladdress, $remote); +! } +! } +! # now print a blank line to the log file +! if ($setlog & 1) { +! print LOG "\n"; +! } +! } else { +! $envsenderaddrs .= " $address"; +! } +! } +! +! if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";} + } + + # Parse output of sendmail name resolution +*************** +*** 162,202 **** + ## Enter <ruleset> <address> + ## > rewrite: ruleset 3 input: "user" + +! open(MAIL, $_[0]) || die "Can't open $_[0]...\n"; +! local ($k, $address, $prevline, $mailer, $remote, $input); +! print $_[1]; # the title + + $done = 0; +! while (<MAIL>) +! { + if (/^> *$/) { $done = 1; } +! if (/^ADDRESS TEST MODE/) { next; } +! if (/^Enter <ruleset>/) { next; } +! chop; +! if (/^>/) # INPUT LINE! (and last output is done) +! { +! if ($prevline) { # OUTPUT LINE! +! $prevline =~ s/.*returns: *//; +! $prevline =~ s/"//g; +! $prevline =~ s/ //g; + #> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" + #rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" + #> +! printf("%-27.27s ----> %s\n", $input, $prevline); +! } +! s/> *[0-9,]* *//g; +! s/.*input: *//; +! s/ //g; +! s/"//g; +! $input = $_; +! } +! last if $done; +! $prevline = $_; +! } + close(MAIL); + } + + + # pass names from resolve files to sendmail + + open(IN, $resolve) || die "can't open $resolve\n"; +--- 431,540 ---- + ## Enter <ruleset> <address> + ## > rewrite: ruleset 3 input: "user" + +! open(MAIL, $_[0]) || die "Can't open $_[0]...\n"; +! local ($k, $address, $prevline, $mailer, $remote, $input); +! print $_[1]; # the title +! # now print to the log file +! if ($setlog & 1) { +! print LOG "\n$_[1]"; # the title +! } + + $done = 0; +! while (<MAIL>) +! { +! # now print to the log file +! if ($setlog & 1) { +! print LOG $_; +! } + if (/^> *$/) { $done = 1; } +! if (/^ADDRESS TEST MODE/) { next; } +! if (/^Enter <ruleset>/) { next; } +! if (/^Warning: .cf file is out of date/) { next; } +! if (/^$/) { next; } +! chop; +! # rewrite $rules to be just a slash if it starts with a / +! $rules =~ s'/.+'/'; +! # if the binary is less than 8.7 then use result of ruleset 4 +! if ( $binver <= 6 || $rules ne "/" ) { +! if (/^>/) # INPUT LINE! (and last output is done) +! { +! if ($prevline) { # OUTPUT LINE! +! $prevline =~ s/.*returns: *//; +! $prevline =~ s/"//g; +! $prevline =~ s/ //g; + #> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" + #rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" + #> +! printf("%s%-24.24s ----> %s\n", $rspath, $input, $prevline); +! # now print to the log file +! if ($setlog & 1) { +! printf LOG ("%s%-24.24s ----> %s\n", $rspath, $input, $prevline); +! } +! } +! s/> *[0-9,]* *//g; +! s/.*input: *//; +! s/ //g; +! s/"//g; +! $input = $_; +! } +! last if $done; +! $prevline = $_; +! } else { +! # format of /try output is: +! # Trying envelope recipient address harker for mailer esmtp +! # ... +! # Rcode = 0, addr = harker@mailhub.gadget.com +! # remove extra ">" from "> >" lines +! s/^> >/>/; +! if (/^> Trying/) # INPUT LINE! (and last output is done) +! { +! chop; +! s/> Trying .+ address //; +! s/ for mailer .+//; +! s/ //g; +! s/"//g; +! $input = $_; +! $prevrule = $_; +! } +! elsif (/^Rcode = /) +! { +! $prevrule = $_; +! # Rcode = 0, addr = harker@mailhub.gadget.com +! s/^Rcode = .+ addr = //; +! printf("%s%-24.24s ----> %s\n", $rspath, $input, $_); +! # now print to the log file +! if ($setlog & 1) { +! printf LOG ("%s%-24.24s ----> %s\n\n", $rspath, $input, $_); +! } +! } +! else +! { +! $prevrule = $_; +! } +! } +! } +! # now print to the log file +! if ($setlog & 1) { +! print LOG "\n"; +! } + close(MAIL); + } + + ++ # if the binary is less than 8.7 then use result of ruleset 4 ++ if ( $binver <= 6 ) { ++ print "Mail address resolution (rule 0)\n"; ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "Mail address resolution (rule 0)\n"; ++ } ++ } else { ++ print "Mail address resolution (/parse)\n"; ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "Mail address resolution (/parse)\n"; ++ } ++ } + # pass names from resolve files to sendmail + + open(IN, $resolve) || die "can't open $resolve\n"; +*************** +*** 205,377 **** + { + /^$/ && next; + /^#/ && next; +! print OUT "3,0 $_"; + chop; + $allinput .= " $_"; + } + close(OUT); + close(IN); + $sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|"; + open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n"; +- print "Mail address resolution (rule 0)\n\n"; + &parseresolve(); + + # calculate $f + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + open (IN, $resolve); +! $rules = "3,1,4"; + while (<IN>) { +! chop; +! /^$/ && next; +! /^#/ && next; + $address = $_; +! print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); +! &parseaddress ("/tmp/csm$$", "\n\n\$f address header transformations\n\n"); + + # Get the R= and S= special rulesets from the configuration + + open(FID, "grep ^M $cffile|"); + while (<FID>) + { + # Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h + chop; +! $thisline = $_; $thisline =~ s/M//; $thisline =~ s/,.*//; + $thisline =~ tr/A-Z/a-z/; +! $sendrule = $_; $sendrule =~ s/.*S=//; $sendrule =~ s/,.*//; +! if ($sendrule=~q!/!) { +! ($esendrule, $hsendrule) = split (q!/!, $sendrule); +! } +! else { $esendrule = $hsendrule = $sendrule; } +! $recvrule = $_; $recvrule =~ s/.*R=//; $recvrule =~ s/,.*//; +! if ($recvrule=~q!/!) { +! ($erecvrule, $hrecvrule) = split (q!/!, $recvrule); +! } +! else { $erecvrule = $hrecvrule = $recvrule; } + $esendrules{$thisline} = $esendrule; + $hsendrules{$thisline} = $hsendrule; + $erecvrules{$thisline} = $erecvrule; + $hrecvrules{$thisline} = $hrecvrule; + } + close(FID); + +! # pass names from various mailers through sendmail +! + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! if ($erecvrules{$i} == 0) { +! print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } +- open (OUT, $sendmailprog); + @namelist = split(/ /, $allinput); +- $rules = "3,2,$erecvrules{$i},4"; + foreach (@namelist) { +! print OUT "$rules $_\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(OUT); + $note = ""; + if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; } +! &parseaddress ("/tmp/csm$$", "\n\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n\n"); + } + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! if ($hrecvrules{$i} == 0) { +! print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; +! next; +! } + if ($hrecvrules{$i} ne $erecvrules{$i}) { +! open (OUT, $sendmailprog); +! @namelist = split(/ /, $allinput); +! $rules = "3,2,$hrecvrules{$i},4"; +! foreach (@namelist) { +! print OUT "$rules $_\n"; +! } +! print OUT "\n"; # stuff last line into sendmail +! close(OUT); +! &parseaddress ("/tmp/csm$$", "\n\n`To' header address transformations for mailer $i [$rules]:\n\n"); + } + } + +! # pass names from various mailers through sendmail + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! if ($esendrules{$i} == 0) { +! print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } +- open (OUT, $sendmailprog); +- open (IN, $resolve); +- $rules = "3,1,$esendrules{$i},4"; +- while (<IN>) { +- chop; +- /^$/ && next; +- /^#/ && next; +- $address = $_; +- print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} +! &parseaddress ("/tmp/csm$$", "\n\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n\n"); + } + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +- if ($hsendrules{$i} == 0) { +- print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; +- next; +- } + open (OUT, $sendmailprog); +! open (IN, $resolve); +! $rules = "3,1,$hsendrules{$i},4"; +! while (<IN>) { +! chop; +! /^$/ && next; +! /^#/ && next; +! $address = $_; +! print OUT "$rules $address\n"; + } +- print OUT "\n"; # stuff last line into sendmail +- close(IN); +- close(OUT); +- &parseaddress ("/tmp/csm$$", "\n\n`From' address header transformations for mailer $i [$rules]:\n\n"); + } + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! if ($esendrules{$i} == 0) { +! print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } +- open (OUT, $sendmailprog); + open (IN, $resolve); +- $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + while (<IN>) { +! chop; +! /^$/ && next; +! /^#/ && next; + $address = $_; +! print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} +! &parseaddress ("/tmp/csm$$", "\n\n\$g address transformations for mailer $i [$rules]:\n\n"); + } + + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + +--- 543,868 ---- + { + /^$/ && next; + /^#/ && next; +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver == 5 ) { +! $rules = "0 $_"; +! } elsif ( $binver <= 6 ) { +! $rules = "3,0 $_"; +! } else { +! $rules = "/parse $_"; +! } +! print OUT $rules; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "$rules"; +! } + chop; + $allinput .= " $_"; + } ++ $allinput =~ s/^ //; + close(OUT); + close(IN); + $sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|"; + open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n"; + &parseresolve(); + + # calculate $f + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + open (IN, $resolve); +! # sendmail 5 automatically runs ruleset 3 +! if ( $binver == 5 ) { +! $rules = "1,4"; +! } else { +! $rules = "3,1,4"; +! } +! if ($dorspath & 1) { $rspath = "\$f: "; } +! + while (<IN>) { +! chop; +! /^$/ && next; +! /^#/ && next; + $address = $_; +! print OUT "$rules $address\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "$rules $address\n"; +! } + } + print OUT "\n"; # stuff last line into sendmail ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "\n"; # stuff last line into sendmail ++ } + close(IN); + close(OUT); +! &parseaddress ("/tmp/csm$$", "\n\$f address header transformations\n"); + + # Get the R= and S= special rulesets from the configuration ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "\nGet the R= and S= mailer specific rulesets\n"; ++ } + + open(FID, "grep ^M $cffile|"); + while (<FID>) + { + # Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h + chop; +! $thisline = $_; +! $thisline =~ s/M//; +! $thisline =~ s/,.*//; + $thisline =~ tr/A-Z/a-z/; +! $sendrule = $_; +! $sendrule =~ s/.*S=//; +! $sendrule =~ s/,.*//; +! if ($sendrule=~q!/!) { +! ($esendrule, $hsendrule) = split (q!/!, $sendrule); +! } else { +! $esendrule = $hsendrule = $sendrule; +! } +! $recvrule = $_; +! $recvrule =~ s/.*R=//; +! $recvrule =~ s/,.*//; +! if ($recvrule=~q!/!) { +! ($erecvrule, $hrecvrule) = split (q!/!, $recvrule); +! } else { +! $erecvrule = $hrecvrule = $recvrule; +! } + $esendrules{$thisline} = $esendrule; + $hsendrules{$thisline} = $hsendrule; + $erecvrules{$thisline} = $erecvrule; + $hrecvrules{$thisline} = $hrecvrule; ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "mailer: $thisline\t->\tesendrule = $esendrule, hsendrule = $hsendrule, ++ erecvrule = $erecvrule, hrecvrule = $hrecvrule\n"; ++ } ++ } ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "\n"; + } + close(FID); + +! # pass envelope recipient names from various mailers through sendmail + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! open (OUT, $sendmailprog); +! if ($dorspath & 1) { $rspath = "$i ER: "; } +! +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver <= 6 ) { +! if ($erecvrules{$i} == 0) { +! print "\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; ++ } ++ # sendmail 5 automatically runs ruleset 3 ++ if ( $binver == 5 ) { ++ $rules = "2,$erecvrules{$i},4"; ++ } else { ++ $rules = "3,2,$erecvrules{$i},4"; ++ } ++ } else { ++ print OUT "/tryflags ER\n"; ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "/tryflags ER\n"; ++ } ++ $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { +! print OUT "$rules $_\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "$rules $_\n"; +! } + } + print OUT "\n"; # stuff last line into sendmail ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "\n"; # stuff last line into the log ++ } + close(OUT); + $note = ""; + if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; } +! &parseaddress ("/tmp/csm$$", "\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n"); + } ++ ++ # pass header recipient names from various mailers through sendmail + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! open (OUT, $sendmailprog); +! if ($dorspath & 1) { $rspath = "$i HR: "; } +! +! # only run the header ruleset if the mailer uses split env/hdr rulesets + if ($hrecvrules{$i} ne $erecvrules{$i}) { +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver <= 6 ) { +! if ($hrecvrules{$i} == 0) { +! print "\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; +! next; +! } +! # sendmail 5 automatically runs ruleset 3 +! if ( $binver == 5 ) { +! $rules = "2,$hrecvrules{$i},4"; +! } else { +! $rules = "3,2,$hrecvrules{$i},4"; +! } +! } else { +! print OUT "/tryflags HR\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "/tryflags HR\n"; +! } +! $rules = "/try $i"; +! } +! @namelist = split(/ /, $allinput); +! foreach (@namelist) { +! print OUT "$rules $_\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "$rules $_\n"; +! } +! } +! print OUT "\n"; # stuff last line into sendmail +! # now print to the log file +! if ($setlog & 1) { +! print LOG "\n"; # stuff last line into the log +! } +! close(OUT); +! &parseaddress ("/tmp/csm$$", "\n`To' header address transformations for mailer $i [$rules]:\n"); + } + } + +! # pass envelope sender names from various mailers through sendmail + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! open (OUT, $sendmailprog); +! if ($dorspath & 1) { $rspath = "$i ES: "; } +! +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver <= 6 ) { +! if ($esendrules{$i} == 0) { +! print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; ++ } ++ # sendmail 5 automatically runs ruleset 3 ++ if ( $binver == 5 ) { ++ $rules = "2,$esendrules{$i},4"; ++ } else { ++ $rules = "3,2,$esendrules{$i},4"; ++ } ++ } else { ++ print OUT "/tryflags ES\n"; ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "/tryflags ES\n"; ++ } ++ $rules = "/try $i"; ++ } ++ @namelist = split(/ /, $allinput); ++ foreach (@namelist) { ++ print OUT "$rules $_\n"; ++ # now print to the log file ++ if ($setlog & 1) { ++ print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} +! &parseaddress ("/tmp/csm$$", "\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n"); + } ++ ++ # pass header sender names from various mailers through sendmail + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); +! if ($dorspath & 1) { $rspath = "$i HS: "; } +! +! # only run the header ruleset if the mailer uses split env/hdr rulesets +! if ($hsendrules{$i} ne $esendrules{$i}) { +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ( $binver <= 6 ) { +! if ($hsendrules{$i} == 0) { +! print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; +! next; +! } +! # sendmail 5 automatically runs ruleset 3 +! if ( $binver == 5 ) { +! $rules = "2,$hsendrules{$i},4"; +! } else { +! $rules = "3,2,$hsendrules{$i},4"; +! } +! } else { +! print OUT "/tryflags HS\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "/tryflags HR\n"; +! } +! $rules = "/try $i"; +! } +! @namelist = split(/ /, $allinput); +! foreach (@namelist) { +! print OUT "$rules $_\n"; +! # now print to the log file +! if ($setlog & 1) { +! print LOG "$rules $_\n"; +! } +! } +! print OUT "\n"; # stuff last line into sendmail +! close(IN); +! close(OUT); +! &parseaddress ("/tmp/csm$$", "\n`From' address header transformations for mailer $i [$rules]:\n"); + } + } ++ + foreach $i (keys %themailers) + { + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; +! open (OUT, $sendmailprog); +! if ($dorspath & 1) { $rspath = "\$g: "; } +! +! # if the binary is 8.9 or below then check if the mailer +! # specific ruleset exists +! if ( $binver <= 9 ) { +! # if the binary is less than 8.7 then use result of ruleset 0 +! if ($esendrules{$i} == 0) { +! print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; ++ } ++ } ++ # sendmail 5 automatically runs ruleset 3 ++ if ( $binver == 5 ) { ++ $rules = "1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? ++ } else { ++ $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + } + open (IN, $resolve); + while (<IN>) { +! chop; +! /^$/ && next; +! /^#/ && next; + $address = $_; +! print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} +! &parseaddress ("/tmp/csm$$", "\n\$g address transformations for mailer $i [$rules]:\n"); + } + + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + ++ exit; diff --git a/debian/examples/checksendmail/checksendmail-harker.patch b/debian/examples/checksendmail/checksendmail-harker.patch new file mode 100644 index 0000000..879e188 --- /dev/null +++ b/debian/examples/checksendmail/checksendmail-harker.patch @@ -0,0 +1,22 @@ +diff -c 'harker/checksendmail' 'checksendmail' +Index: ./harker/checksendmail +Prereq: 1.1.1.1 +*** ./harker/checksendmail Mon Apr 14 15:44:43 2003 +--- ./checksendmail Mon Apr 14 15:57:56 2003 +*************** +*** 25,30 **** +--- 25,38 ---- + $resolve = "address.resolve"; + $cffile = "/etc/mail/sendmail.cf"; + ++ # Pre-create tmp files (so can use safely) ++ use Fcntl; ++ foreach ("/tmp/csm$$", "/tmp/csm.in$$") { ++ die "Can't pre-create $_" ++ unless sysopen(T,$_,O_RDWR|O_CREAT|O_EXCL,0600) ++ and close(T); ++ }; ++ + sub usage { + die "Usage: checksendmail [-C cffile.cf] [-b sendmail_binary] [-l log_file]\n\t\t\t\t[-a] [-d] [-r resolve_addrs_file || -T one\@test.addr]\n$errormsg\n"; + } diff --git a/debian/examples/checksendmail/checksendmail.8 b/debian/examples/checksendmail/checksendmail.8 new file mode 100644 index 0000000..229f229 --- /dev/null +++ b/debian/examples/checksendmail/checksendmail.8 @@ -0,0 +1,246 @@ +.\" BSDI $Id: checksendmail.8,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ +.Dd November 14, 2000 +.Dt CHECKSENDMAIL 8 +.Os +.Sh NAME +.Nm checksendmail +.Nd verify sendmail address transformations. +.Sh SYNOPSIS +.Nm checksendmail +.Op Fl a +.Op Fl d +.Op Fl b +.Op Fl C Ar file.cf +.Op Fl b Ar sendmail_binary +.Op Fl l Ar log_file +.Op Fl r Ar resolve +.Op Fl T Ar test.address + +.Sh DESCRIPTION +.Pp +The +.Nm checksendmail +program is a +.Xr perl +script that aids the testing of +.Xr sendmail 8 's +various configuration files. +.Nm checksendmail +passes typical addresses (supplied in input files) through +.Xr sendmail +and prints the results of the resolution and transformation routines. +.Pp +The input files contain a list of addresses, one per line. +For example: +.Bd -literal -offset indent +user +user@site +user@site.com +.Ed +.Pp +The input file can contain comments started with a +.Em # +and blank lines. +.Sh OPTIONS +.Pp +.Bl -tag -width Fl -compact -offset left +.It Fl a +Show aliasing of local addresses in +mail address resolution phase of testing +.It Fl d +Preceed each address translation line with ruleset sequence summary +.It Fl C Ar file.cf +Use the +.Xr sendmail +configuration file +.Ar file.cf +instead of the default +.Pa /etc/sendmail.cf +file. +.It Fl b Ar sendmail_binary +Use the specified +.Ar sendmail_binary +as the path to invoke sendmail (instead of +.Pa /usr/sbin/sendmail ) . +.It Fl l Ar log_file +Log +.Xr sendmail +address test mode debugging output to +.Ar log_file +.It Fl r Ar resolve +Use +.Ar resolve +as the input file for the addresses to be used for mail resolving. Defaults +to +.Ar address.resolve . +.It Fl T Ar test.address +Use +.Ar test.address +as the single address to test. Cannot be used in conjunction with +file setting flags. +.El +.Sh EXAMPLES +.Pp +The following command will pass the addresses in +.Ar address.resolve +through +.Xr sendmail +using the configuration information in +.Ar myconfig.cf . +.Bd -literal -offset left +example% cat address.resolve +user +user@site +user@site.com + +example% checksendmail \-C myconfig.cf +system: myhost.gadget.com current dir: /tmp/Checksendmail +resolve file: address.resolve +sendmail binary: /usr/sbin/sendmail sendmail version: 8.9.3 +config file: /etc/sendmail.cf config file version: V8/Berkeley + +Mail address resolution +user --(ether )--> user[rmtc] +user@site --(ether )--> user@site[rmtc] +user@site.com --(ether )--> user@site.com[rmtc] + +`To' address transformations for mailer ether: +user ----> user +user@site ----> user@site +user@site.com ----> user@site.com + +`From' address transformations for mailer ether: +user ----> user +user@site ----> user +user@site.com ----> user +.Ed +.Pp +The first section of the output shows how the addresses in the input +files are resolved by +.Xr sendmail 8 . +Consider the following output line: +.Pp +.Dl user@site.com --(ether )--> user@site.com[rmtc] +.Pp +The input address +.Em user@site.com +resolves to use the +.Em ether +mailer. That mailer is directed to send the mail to +to the user +.Em user@site.com +at site +.Em rmtc +(as indicated in the square brackets). +.Pp +The two later sections of output show how the addresses specified as +the +.Em To +and +.Em From +address are transformed in the text of the +headers. In the example above, the +.Em To +addresses are untouched. +The +.Em From +addresses, however, all lose their machine information on +the way through the mailer: +.Pp +.Dl user@site ----> user +.Pp +This may be desirable when using a configuration file on a +workstation which is to be hidden as a mailhost from the rest of the +network. +.Pp +The following is a set of addresses used at one site for the purposes of +testing address resolution. Comments after the addresses detail why +particular addresses are present: +.Bl -tag -width "user@machine.com" -compact -offset indent +.It user +Standard trivial address +.It user@rmtc +qualified at one level +.It user@rmtc.central +qualified at two levels +.It user@rmtc.central.sun.com +qualified all the way +.It rmtc!user +local but specified as uucp +.It user@summit +a workstation (normally delivered locally, though) +.It user@summit.central +same but more qualified +.It user@summit.central.sun.com +same but fully qualified +.It summit!user +same but specified as uucp +.It user@prisma +Backward compatibility tests +.It user@prisma.com +.It prisma!user +.It user@central +Superior domain testing +.It user@machine.central +more qualified, but unknown +.It user@summit.central +more qualified and known +.It user@eng +name in faraway domain +.It user@machine.eng +unknown machine in faraway domain +.It user@summit.eng +local machine, far away domain +.It user@hoback +far away machine +.It user@machine +apparently local but unknown machine +.It user@sun.com +Standard trivial address +.It user@machine.dom.sun.com +fully qualified but unknown machine +.It user@foo.com +standard, known, really far away domain +.It user@foo.dom +standard, unknown, really far away domain +.It site!user +Single level uucp +.It site1!site2!user +Double level uucp +.It user@foo.dom@bar.dom +Trickier address +.It site!user@foo.dom +Mixed uucp/domain +.It site!user@uunet.uu.net +Mixed double uucp/domain +.El +.Sh NOTES +Note that +.Nm checksendmail +is a +.Xr perl +script. If your site does not have +.Xr perl 1 , +it can be obtained via anonymous +.Xr ftp +from +.Em ftp.uu.net . +.Pp +.Xr sendmail +requires that the user have access to directory specified by the +.Em OQ +parameter in the configuration file (normally +.Pa /usr/spool/mqueue ) . +.Nm checksendmail +verifies that the user has access to this directory before allowing the +test to continue. +.Sh AUTHORS +.Bd -literal +Gene Kim +Rob Kolstad +Jeff Polk +.Ed +.Pp +Modified by Robert Harker +.Sh "SEE ALSO" +.Xr sendmail 8 diff --git a/debian/examples/checksendmail/checksendmail.perl b/debian/examples/checksendmail/checksendmail.perl new file mode 100644 index 0000000..a8e9e11 --- /dev/null +++ b/debian/examples/checksendmail/checksendmail.perl @@ -0,0 +1,377 @@ +#!/usr/bin/perl + +# BSDI $Id: checksendmail.perl,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ + +# checksendmail +# +# The checksendmail program is a perl script that aids the testing +# of sendmail's various configuration filse. checksendmail +# passes typical addresses (supplied in input files) through +# sendmail and prints the result of the resolution and +# transformation routines. +# +# Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90 + +# -- -C config file +# -- -r resolve_addresses_file +# -- -T test one address +# -- -b sendmail binary + +# XXX deficiencies: ``/etc/sendmail'' should be a parameter + +# defaults: + $resolve = "address.resolve"; + $cffile = "/etc/sendmail.cf"; + $sendmail = "/usr/sbin/sendmail"; + +sub usage { + die "Usage: checksendmail [-C cffile.cf] [-r resolve_addrs_file [-T one\@test.addr\n"; +} + +for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) { + if ($ARGV[1] eq "-C") + { + shift @ARGV; + if ($#ARGV >= 1) {$cffile = $ARGV[1]; } + else { &usage(); } + } + elsif ($ARGV[1] eq "-r") + { + if ($setfile & 1) { die "Can only set `resolve' once"; } + shift @ARGV; + if ($#ARGV < 1) { &usage(); } + $resolve = $ARGV[1]; + $setfile += 1; + } + elsif ($ARGV[1] eq "-T") + { + if ($setfile) { die "Can't set other files and use -T"; } + shift @ARGV; + if ($#ARGV < 1) { &usage(); } + open (OUT, ">/tmp/csm.in$$") || + die "Can't open >/tmp/csm.in$$"; + $resolve = "/tmp/csm.in$$"; + print OUT "$ARGV[1]\n"; + close (OUT); + $setfile = 7; + } + elsif ($ARGV[1] eq "-b") + { + shift @ARGV; + if ($#ARGV >= 1) {$sendmail = $ARGV[1]; } + else { &usage(); } + } + else { &usage(); } +} + +if (!-e $cffile) { die "Can't find configuration file $cffile\n"; } +if (!-e $resolve) { die "Can't find name file $resolve\n"; } + +# make sure the user can access the ../mqueue directory + +$maildir = `grep ^OQ $cffile`; +chop $maildir; +$maildir =~ s/^OQ//; +if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) { + warn "checksendmail: can't access $maildir! trying anyway...\n"; +} + +chop($hostname = `hostname`); +chop($pwd = `pwd`); +print "system: $hostname\t\tcurrent dir: $pwd\n"; +print "config file: $cffile\t\tresolve file: $resolve\n"; + +sub handler { # 1st argument is signal name + local($sig) = @_; + print STDERR "Caught a SIG$sig--shutting down\n"; + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + exit(0); +} + +$SIG{'INT'} = 'handler'; +$SIG{'QUIT'} = 'handler'; + + +# glean the mailers used from the rule 0 tests + +sub parseresolve +{ + while (<MAIL>) + { + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + if (/^>/) # INPUT LINE! (and last output is done) + { + chop; + if ($prevline) { # OUTPUT LINE! + &printparseresolve; + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + else { chop; } + $prevline = $_; + } + &printparseresolve; +} + +sub printparseresolve { + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; + # Don't strip spaces off error messages + $prevline =~ s/ *([.!%<>]) */$1/g; + $prevline =~ s/ +([;?\$])/$1/g; + $prevline =~ s/([#\@:]) +/$1/g; + +# non-Sun test mode delimiters -> easily-readable style +# Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu + $prevline =~ s/\^V/\$#/; + $prevline =~ s/\^W/\$@/; + $prevline =~ s/\^X/\$:/; + + #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET + @t = split( '\$', $prevline); + $address = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 1; $i <= $#t; $i++) + { + if (substr($t[$i], 0, 1) eq ":") + { $address = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "@") + { $remote = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "#") + { $mailer = substr($t[$i], 1,999); + $mailer =~ tr/A-Z/a-z/; } + } + printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer, + $address, $remote); + if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";} +} + +# Parse output of sendmail name resolution + +sub parseaddress +{ +## ADDRESS TEST MODE +## Enter <ruleset> <address> +## > rewrite: ruleset 3 input: "user" + + open(MAIL, $_[0]) || die "Can't open $_[0]...\n"; + local ($k, $address, $prevline, $mailer, $remote, $input); + print $_[1]; # the title + + $done = 0; + while (<MAIL>) + { + if (/^> *$/) { $done = 1; } + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + chop; + if (/^>/) # INPUT LINE! (and last output is done) + { + if ($prevline) { # OUTPUT LINE! + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; +#> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#> + printf("%-27.27s ----> %s\n", $input, $prevline); + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + last if $done; + $prevline = $_; + } + close(MAIL); +} + + +# pass names from resolve files to sendmail + +open(IN, $resolve) || die "can't open $resolve\n"; +open(OUT, ">/tmp/csm$$") || die "can't open >/tmp/csm$$\n"; +while (<IN>) +{ + /^$/ && next; + /^#/ && next; + print OUT "3,0 $_"; + chop; + $allinput .= " $_"; +} +close(OUT); +close(IN); +$sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|"; +open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n"; +print "Mail address resolution (rule 0)\n\n"; +&parseresolve(); + +# calculate $f + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,4"; + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\n\$f address header transformations\n\n"); + +# Get the R= and S= special rulesets from the configuration + +open(FID, "grep ^M $cffile|"); +while (<FID>) +{ +# Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h + chop; + $thisline = $_; $thisline =~ s/M//; $thisline =~ s/,.*//; + $thisline =~ tr/A-Z/a-z/; + $sendrule = $_; $sendrule =~ s/.*S=//; $sendrule =~ s/,.*//; + if ($sendrule=~q!/!) { + ($esendrule, $hsendrule) = split (q!/!, $sendrule); + } + else { $esendrule = $hsendrule = $sendrule; } + $recvrule = $_; $recvrule =~ s/.*R=//; $recvrule =~ s/,.*//; + if ($recvrule=~q!/!) { + ($erecvrule, $hrecvrule) = split (q!/!, $recvrule); + } + else { $erecvrule = $hrecvrule = $recvrule; } + $esendrules{$thisline} = $esendrule; + $hsendrules{$thisline} = $hsendrule; + $erecvrules{$thisline} = $erecvrule; + $hrecvrules{$thisline} = $hrecvrule; +} +close(FID); + +# pass names from various mailers through sendmail + +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($erecvrules{$i} == 0) { + print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + @namelist = split(/ /, $allinput); + $rules = "3,2,$erecvrules{$i},4"; + foreach (@namelist) { + print OUT "$rules $_\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(OUT); + $note = ""; + if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; } + &parseaddress ("/tmp/csm$$", "\n\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n\n"); +} +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($hrecvrules{$i} == 0) { + print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + if ($hrecvrules{$i} ne $erecvrules{$i}) { + open (OUT, $sendmailprog); + @namelist = split(/ /, $allinput); + $rules = "3,2,$hrecvrules{$i},4"; + foreach (@namelist) { + print OUT "$rules $_\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\n`To' header address transformations for mailer $i [$rules]:\n\n"); + } +} + +# pass names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($esendrules{$i} == 0) { + print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,$esendrules{$i},4"; + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n\n"); +} +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($hsendrules{$i} == 0) { + print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,$hsendrules{$i},4"; + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\n`From' address header transformations for mailer $i [$rules]:\n\n"); +} +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + if ($esendrules{$i} == 0) { + print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + open (OUT, $sendmailprog); + open (IN, $resolve); + $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n\n\$g address transformations for mailer $i [$rules]:\n\n"); +} + +unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; +unlink("/tmp/csm.in$$"); + diff --git a/debian/examples/checksendmail/harker/address.resolve b/debian/examples/checksendmail/harker/address.resolve new file mode 100644 index 0000000..2de8a60 --- /dev/null +++ b/debian/examples/checksendmail/harker/address.resolve @@ -0,0 +1,15 @@ +# addresses to be delivered locally +root +postmaster +user +user@mailhub +user@mailhub.gadget.com +user@gadget.com + +# Addresses to be forwarded with SMTP to firewall +user@firewall +user@firewall.gadget.com + +# Addresses to be forwarded with SMTP to harker.com +user@harker.com +harker!user diff --git a/debian/examples/checksendmail/harker/checksendmail b/debian/examples/checksendmail/harker/checksendmail new file mode 100644 index 0000000..6a265bd --- /dev/null +++ b/debian/examples/checksendmail/harker/checksendmail @@ -0,0 +1,860 @@ +#!/usr/bin/perl + +# BSDI $Id: checksendmail.perl,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ + +# checksendmail +# +# The checksendmail program is a perl script that aids the testing +# of sendmail's various configuration filse. checksendmail +# passes typical addresses (supplied in input files) through +# sendmail and prints the result of the resolution and +# transformation routines. +# +# Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90 +# Modified by Robert Harker, 11/14/00 + +# -- -a show aliasing of local addresses +# -- -d preceed each line with ruleset sequence summary +# -- -C config_file +# -- -b sendmail_binary +# -- -l log_file of results of tests +# -- -r resolve_addresses_file +# -- -T test one address + +# defaults: + $resolve = "address.resolve"; + $cffile = "/etc/mail/sendmail.cf"; + +sub usage { + die "Usage: checksendmail [-C cffile.cf] [-b sendmail_binary] [-l log_file]\n\t\t\t\t[-a] [-d] [-r resolve_addrs_file || -T one\@test.addr]\n$errormsg\n"; +} + +for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) { + if ($ARGV[1] eq "-C") + { + if ($setcffile & 1) { die "Can only set `cffile.cf' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$cffile = $ARGV[1]; } + else { + $errormsg = "No sendmail.cf file given for -C flag\n"; + &usage(); + } + $setcffile += 1; + } + elsif ($ARGV[1] eq "-r") + { + if ($setfile & 1) { die "Can only set `resolve' once"; } + shift @ARGV; + if ($#ARGV < 1) { + $errormsg = "No resolve_addrs_file given for -r flag\n"; + &usage(); + } + $resolve = $ARGV[1]; + $setfile += 1; + } + elsif ($ARGV[1] eq "-T") + { + if ($setfile) { die "Can't set other files and use -T"; } + shift @ARGV; + if ($#ARGV < 1) { + $errormsg = "No one\@test.addr given for -T flag\n"; + &usage(); + } + open (OUT, ">/tmp/csm.in$$") || + die "Can't open >/tmp/csm.in$$"; + $resolve = "/tmp/csm.in$$"; + print OUT "$ARGV[1]\n"; + close (OUT); + $setfile = 7; + } + elsif ($ARGV[1] eq "-b") + { + if ($setbin & 1) { die "Can only set `sendmail_binary' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$sendmail = $ARGV[1]; } + else { + $errormsg = "No sendmail_binary file given for -b flag\n"; + &usage(); + } + $setbin += 1; + } + elsif ($ARGV[1] eq "-l") + { + if ($setlog & 1) { die "Can only set `log_file' once"; } + shift @ARGV; + if ($#ARGV >= 1) {$logfile = $ARGV[1]; } + else { + $errormsg = "No log_file file given for -l flag\n"; + &usage(); + } + $setlog += 1; + } + elsif ($ARGV[1] eq "-a") + { + $doaliasing += 1; + } + elsif ($ARGV[1] eq "-d") + { + $dorspath += 1; + } + else { &usage(); } +} + +# Figure out where the sendmail binary is +if (! $setbin & 1) { + foreach $i ("/usr/sbin/sendmail", "/usr/libexec/sendmail", "/usr/lib/sendmail") + { + # test if binary exists and is executable + if ((-e $i) && (-x $i)) { + $sendmail = $i; + last; + } + } +} + + +# Figure out the version of sendmail and the location of the sendmail.cf file +# sendmail -d0.10 -bv root +# ("-bv root" is just to give sendmail something to chew on) + +$binversion = `$sendmail -d0.10 -bv root | grep "^Version "`; +chop $binversion; +$binversion =~ s/^Version //; + +# Get the major relase number from the sendmail version +$binver = $binversion; +$binver =~ s/^8\.//; +$binver =~ s/\..+//; + +# if the cf file was not set on the command line, +# find out where the binary looks for it +if ( ! -e $cffile ) { + $cffile = `$sendmail -d0.10 -bv root | grep "Def Conf file:"`; + chop $cffile; + $cffile =~ s/ //g; + $cffile =~ s/ //g; + $cffile =~ s/^DefConffile://; +} + +if (!-e $cffile) { die "Can't find configuration file $cffile\n"; } + +if (!-e $resolve) { die "Can't find name file $resolve\n"; } + +# Figure out the version of the sendmail.cf file +# Look for the V line +$cfversion = `grep "^V" $cffile`; +chop $cfversion; +# if $cfversion is empty, then the configuration is sendmail 5, not sendmail 8 +$cfversion =~ s/^$/V0/; + +# Get the version number from the V line +$cfver = $cfversion; +$cfver =~ s/^V//; +$cfver =~ s'/.+''; + +# check that the binary is a higher version than config file +if ( $binver < $cfver + 1) { + die "$cffile version ($cfversion) is more advanced than $sendmail version ($binversion)\n"; +} + +# figure out where the mqueue directory is +if ( $cfver <= 6 ) { + $maildir = `grep "^OQ" $cffile`; + chop $maildir; + $maildir =~ s/^OQ//; +} else { + $maildir = `grep "^O QueueDirectory" $cffile`; + chop $maildir; + $maildir =~ s/^O QueueDirectory=//; +} + +# make sure the user can access the ../mqueue directory +if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) { + if ($doaliasing & 1) { + die "checksendmail: can't access $maildir! can't use checksendmail's -a flag\n"; + } else { + warn "checksendmail: can't access $maildir! trying anyway...\n"; + } +} + +chop($hostname = `hostname`); +chop($pwd = `pwd`); +print "system: $hostname\t\tcurrent dir: $pwd\n"; +print "resolve file: $resolve\n"; +print "sendmail binary: $sendmail\t\tsendmail version: $binversion\n"; +print "config file: $cffile\t\tconfig file version: $cfversion\n\n"; +if ($setlog & 1) { + print "log file: $logfile\n\n"; + # now print to the log file + open (LOG , ">$logfile") || die "Can't open >$logfile"; + print LOG "system: $hostname\t\tcurrent dir: $pwd\n"; + print LOG "resolve file: $resolve\n"; + print LOG "sendmail binary: $sendmail\t\tsendmail version: $binversion\n"; + print LOG "config file: $cffile\t\tconfig file version: $cfversion\n"; + print LOG "log file: $logfile\n\n"; +} + +sub handler { # 1st argument is signal name + local($sig) = @_; + print STDERR "Caught a SIG$sig--shutting down\n"; + unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; + unlink("/tmp/csm.in$$"); + if ($setlog & 1) { + close(LOG); + } + exit(0); +} + +$SIG{'INT'} = 'handler'; +$SIG{'QUIT'} = 'handler'; + + + +# glean the mailers used from the rule 0 tests + +sub parseresolve +{ + while (<MAIL>) + { + # now print to the log file + if ($setlog & 1) { + print LOG $_; + } + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + if (/^Warning: .cf file is out of date/) { next; } + + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if (/^>/) # INPUT LINE! (and last output is done) + { + chop; + if ($prevline) { # OUTPUT LINE! + &printparseresolve; + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + else { chop; } + $prevline = $_; + } else { + # format of /parse output is: + # Parsing envelope recipient address + # rewrite: ruleset 3 input: harker @ harker . com + if ($prevrule eq "Parsing envelope recipient address\n" ) + { + chop; + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + $prevrule = $_; + } + elsif (/^mailer /) + { + $prevrule = $_; + &printparseresolve; + } + else + { + $prevrule = $_; + } + } + } + #&printparseresolve; +} + +sub printparseresolve { + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($input eq "") { return;} + + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; + # Don't strip spaces off error messages + $prevline =~ s/ *([.!%<>]) */$1/g; + $prevline =~ s/ +([;?\$])/$1/g; + $prevline =~ s/([#\@:]) +/$1/g; + +# non-Sun test mode delimiters -> easily-readable style +# Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu + $prevline =~ s/\^V/\$#/; + $prevline =~ s/\^W/\$@/; + $prevline =~ s/\^X/\$:/; + + #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET + @t = split( '\$', $prevline); + $address = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 1; $i <= $#t; $i++) + { + if (substr($t[$i], 0, 1) eq ":") + { $address = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "@") + { $remote = substr($t[$i], 1,999); } + if (substr($t[$i], 0, 1) eq "#") + { $mailer = substr($t[$i], 1,999); + $mailer =~ tr/A-Z/a-z/; } + } + } else { + # the binary is at least 8.7 then use result of /parse + chop; + s/,//g; + + # mailer esmtp, host harker.com., user harker@harker.com + @t = split( ' ', $_); + $address = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 0; $i <= $#t; $i++) + { + if ($t[$i] eq "user") + { $address = $t[++$i]; } + if ($t[$i] eq "host") + { $remote = $t[++$i]; } + if ($t[$i] eq "mailer") + { $mailer = $t[++$i]; + $mailer =~ tr/A-Z/a-z/; } + } + } + printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer, + $address, $remote); + # now print to the log file + if ($setlog & 1) { + printf LOG ("%-27.27s --(%-6.6s)--> %s[%s]\n\n", $input, $mailer, + $address, $remote); + } + + if ($doaliasing & 1) { + # If the address resolved to the local mailer, + # then expand the username as an alias + if ( $mailer eq "local") + { + $setalias = $aliasfound = 0; + $laddress = $address; + $sendmailprog = "$sendmail -bv -C$cffile $laddress|"; + open(LOCAL, $sendmailprog) || + die "can't exec $sendmailprog...\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "\n$sendmailprog\n"; + } + while (<LOCAL>) + { + # now print to the log file + if ($setlog & 1) { + print LOG $_; + } + chop; + if (/unknown/) + { + $aliasfound = 1; + printf("\t\t aliased to --(error )--> %s\n", $_); + # now print to the log file + if ($setlog & 1) { + printf LOG ("\t\t aliased to --(error )--> %s\n\n", $_); + } + next; + } + s/,//g; + @l = split( ' ', $_); + $aladdress = "XXX"; + $remote = "XXX"; + $mailer = "XXX"; + for ($i = 1; $i <= $#l; $i++) + { + # ./sendmail -bv -C./sendmail.cf j.murphy + # j.murphy@pop.mcit.com... deliverable: mailer mciesmtp, + # host pop.mcit.com, user j.murphy@pop.mcit.com + if ($l[$i] eq "user") { $aladdress = $l[++$i]; } + if ($l[$i] eq "host") { $remote = $l[++$i]; } + if ($l[$i] eq "mailer") { $mailer = $l[++$i]; } + } + if (("$laddress" eq "$aladdress") && ($aliasfound == 0)) { + $selfalias = 1; + next; + } + printf("\t\t aliased to --(%-6.6s)--> %s[%s]\n", + $mailer, $aladdress, $remote); + # now print to the log file + if ($setlog & 1) { + printf LOG ("\t\t aliased to --(%-6.6s)--> %s[%s]\n\n", + $mailer, $aladdress, $remote); + } + if ("$laddress" ne "$aladdress") { + $aliasfound = 1; + $envsenderaddrs .= " $aladdress"; + } + if ($mailer ne "XXX") { $themailers{$mailer}=1;} + } + close(LOCAL); + if ($selfalias == 1 && $aliasfound == 1) { + printf("\t\t aliased to --(%-6.6s)--> %s[%s]\n", + $mailer, $aladdress, $remote); + # now print to the log file + if ($setlog & 1) { + printf LOG ("\t\t aliased to --(%-6.6s)--> %s[%s]\n\n", + $mailer, $aladdress, $remote); + } + } + # now print a blank line to the log file + if ($setlog & 1) { + print LOG "\n"; + } + } else { + $envsenderaddrs .= " $address"; + } + } + + if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";} +} + +# Parse output of sendmail name resolution + +sub parseaddress +{ +## ADDRESS TEST MODE +## Enter <ruleset> <address> +## > rewrite: ruleset 3 input: "user" + + open(MAIL, $_[0]) || die "Can't open $_[0]...\n"; + local ($k, $address, $prevline, $mailer, $remote, $input); + print $_[1]; # the title + # now print to the log file + if ($setlog & 1) { + print LOG "\n$_[1]"; # the title + } + + $done = 0; + while (<MAIL>) + { + # now print to the log file + if ($setlog & 1) { + print LOG $_; + } + if (/^> *$/) { $done = 1; } + if (/^ADDRESS TEST MODE/) { next; } + if (/^Enter <ruleset>/) { next; } + if (/^Warning: .cf file is out of date/) { next; } + if (/^$/) { next; } + chop; + # rewrite $rules to be just a slash if it starts with a / + $rules =~ s'/.+'/'; + # if the binary is less than 8.7 then use result of ruleset 4 + if ( $binver <= 6 || $rules ne "/" ) { + if (/^>/) # INPUT LINE! (and last output is done) + { + if ($prevline) { # OUTPUT LINE! + $prevline =~ s/.*returns: *//; + $prevline =~ s/"//g; + $prevline =~ s/ //g; +#> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net" +#> + printf("%s%-24.24s ----> %s\n", $rspath, $input, $prevline); + # now print to the log file + if ($setlog & 1) { + printf LOG ("%s%-24.24s ----> %s\n", $rspath, $input, $prevline); + } + } + s/> *[0-9,]* *//g; + s/.*input: *//; + s/ //g; + s/"//g; + $input = $_; + } + last if $done; + $prevline = $_; + } else { + # format of /try output is: + # Trying envelope recipient address harker for mailer esmtp + # ... + # Rcode = 0, addr = harker@mailhub.gadget.com + # remove extra ">" from "> >" lines + s/^> >/>/; + if (/^> Trying/) # INPUT LINE! (and last output is done) + { + chop; + s/> Trying .+ address //; + s/ for mailer .+//; + s/ //g; + s/"//g; + $input = $_; + $prevrule = $_; + } + elsif (/^Rcode = /) + { + $prevrule = $_; + # Rcode = 0, addr = harker@mailhub.gadget.com + s/^Rcode = .+ addr = //; + printf("%s%-24.24s ----> %s\n", $rspath, $input, $_); + # now print to the log file + if ($setlog & 1) { + printf LOG ("%s%-24.24s ----> %s\n\n", $rspath, $input, $_); + } + } + else + { + $prevrule = $_; + } + } + } + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; + } + close(MAIL); +} + + +# if the binary is less than 8.7 then use result of ruleset 4 +if ( $binver <= 6 ) { + print "Mail address resolution (rule 0)\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "Mail address resolution (rule 0)\n"; + } +} else { + print "Mail address resolution (/parse)\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "Mail address resolution (/parse)\n"; + } +} +# pass names from resolve files to sendmail + +open(IN, $resolve) || die "can't open $resolve\n"; +open(OUT, ">/tmp/csm$$") || die "can't open >/tmp/csm$$\n"; +while (<IN>) +{ + /^$/ && next; + /^#/ && next; + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver == 5 ) { + $rules = "0 $_"; + } elsif ( $binver <= 6 ) { + $rules = "3,0 $_"; + } else { + $rules = "/parse $_"; + } + print OUT $rules; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules"; + } + chop; + $allinput .= " $_"; +} + $allinput =~ s/^ //; +close(OUT); +close(IN); +$sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|"; +open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n"; +&parseresolve(); + +# calculate $f + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + open (IN, $resolve); + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "1,4"; + } else { + $rules = "3,1,4"; + } + if ($dorspath & 1) { $rspath = "\$f: "; } + + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $address\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; # stuff last line into sendmail + } + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n\$f address header transformations\n"); + +# Get the R= and S= special rulesets from the configuration +# now print to the log file +if ($setlog & 1) { + print LOG "\nGet the R= and S= mailer specific rulesets\n"; +} + +open(FID, "grep ^M $cffile|"); +while (<FID>) +{ +# Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h + chop; + $thisline = $_; + $thisline =~ s/M//; + $thisline =~ s/,.*//; + $thisline =~ tr/A-Z/a-z/; + $sendrule = $_; + $sendrule =~ s/.*S=//; + $sendrule =~ s/,.*//; + if ($sendrule=~q!/!) { + ($esendrule, $hsendrule) = split (q!/!, $sendrule); + } else { + $esendrule = $hsendrule = $sendrule; + } + $recvrule = $_; + $recvrule =~ s/.*R=//; + $recvrule =~ s/,.*//; + if ($recvrule=~q!/!) { + ($erecvrule, $hrecvrule) = split (q!/!, $recvrule); + } else { + $erecvrule = $hrecvrule = $recvrule; + } + $esendrules{$thisline} = $esendrule; + $hsendrules{$thisline} = $hsendrule; + $erecvrules{$thisline} = $erecvrule; + $hrecvrules{$thisline} = $hrecvrule; + # now print to the log file + if ($setlog & 1) { + print LOG "mailer: $thisline\t->\tesendrule = $esendrule, hsendrule = $hsendrule, + erecvrule = $erecvrule, hrecvrule = $hrecvrule\n"; + } +} +# now print to the log file +if ($setlog & 1) { + print LOG "\n"; +} +close(FID); + +# pass envelope recipient names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i ER: "; } + + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($erecvrules{$i} == 0) { + print "\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$erecvrules{$i},4"; + } else { + $rules = "3,2,$erecvrules{$i},4"; + } + } else { + print OUT "/tryflags ER\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags ER\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; # stuff last line into the log + } + close(OUT); + $note = ""; + if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; } + &parseaddress ("/tmp/csm$$", "\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n"); +} + +# pass header recipient names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i HR: "; } + + # only run the header ruleset if the mailer uses split env/hdr rulesets + if ($hrecvrules{$i} ne $erecvrules{$i}) { + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($hrecvrules{$i} == 0) { + print "\nCan't find recv rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$hrecvrules{$i},4"; + } else { + $rules = "3,2,$hrecvrules{$i},4"; + } + } else { + print OUT "/tryflags HR\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags HR\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + # now print to the log file + if ($setlog & 1) { + print LOG "\n"; # stuff last line into the log + } + close(OUT); + &parseaddress ("/tmp/csm$$", "\n`To' header address transformations for mailer $i [$rules]:\n"); + } +} + +# pass envelope sender names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i ES: "; } + + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($esendrules{$i} == 0) { + print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$esendrules{$i},4"; + } else { + $rules = "3,2,$esendrules{$i},4"; + } + } else { + print OUT "/tryflags ES\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags ES\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n"); +} + +# pass header sender names from various mailers through sendmail +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "$i HS: "; } + + # only run the header ruleset if the mailer uses split env/hdr rulesets + if ($hsendrules{$i} ne $esendrules{$i}) { + # if the binary is less than 8.7 then use result of ruleset 0 + if ( $binver <= 6 ) { + if ($hsendrules{$i} == 0) { + print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "2,$hsendrules{$i},4"; + } else { + $rules = "3,2,$hsendrules{$i},4"; + } + } else { + print OUT "/tryflags HS\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "/tryflags HR\n"; + } + $rules = "/try $i"; + } + @namelist = split(/ /, $allinput); + foreach (@namelist) { + print OUT "$rules $_\n"; + # now print to the log file + if ($setlog & 1) { + print LOG "$rules $_\n"; + } + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + &parseaddress ("/tmp/csm$$", "\n`From' address header transformations for mailer $i [$rules]:\n"); + } +} + +foreach $i (keys %themailers) +{ + $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$"; + open (OUT, $sendmailprog); + if ($dorspath & 1) { $rspath = "\$g: "; } + + # if the binary is 8.9 or below then check if the mailer + # specific ruleset exists + if ( $binver <= 9 ) { + # if the binary is less than 8.7 then use result of ruleset 0 + if ($esendrules{$i} == 0) { + print "\nCan't find send rule for `$i', skipping this mailer <-------------------\n"; + next; + } + } + # sendmail 5 automatically runs ruleset 3 + if ( $binver == 5 ) { + $rules = "1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + } else { + $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431??? + } + open (IN, $resolve); + while (<IN>) { + chop; + /^$/ && next; + /^#/ && next; + $address = $_; + print OUT "$rules $address\n"; + } + print OUT "\n"; # stuff last line into sendmail + close(IN); + close(OUT); + $note = ""; + if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";} + &parseaddress ("/tmp/csm$$", "\n\$g address transformations for mailer $i [$rules]:\n"); +} + +unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$"; +unlink("/tmp/csm.in$$"); + +exit; diff --git a/debian/examples/checksendmail/harker/checksendmail.8 b/debian/examples/checksendmail/harker/checksendmail.8 new file mode 100644 index 0000000..229f229 --- /dev/null +++ b/debian/examples/checksendmail/harker/checksendmail.8 @@ -0,0 +1,246 @@ +.\" BSDI $Id: checksendmail.8,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $ +.Dd November 14, 2000 +.Dt CHECKSENDMAIL 8 +.Os +.Sh NAME +.Nm checksendmail +.Nd verify sendmail address transformations. +.Sh SYNOPSIS +.Nm checksendmail +.Op Fl a +.Op Fl d +.Op Fl b +.Op Fl C Ar file.cf +.Op Fl b Ar sendmail_binary +.Op Fl l Ar log_file +.Op Fl r Ar resolve +.Op Fl T Ar test.address + +.Sh DESCRIPTION +.Pp +The +.Nm checksendmail +program is a +.Xr perl +script that aids the testing of +.Xr sendmail 8 's +various configuration files. +.Nm checksendmail +passes typical addresses (supplied in input files) through +.Xr sendmail +and prints the results of the resolution and transformation routines. +.Pp +The input files contain a list of addresses, one per line. +For example: +.Bd -literal -offset indent +user +user@site +user@site.com +.Ed +.Pp +The input file can contain comments started with a +.Em # +and blank lines. +.Sh OPTIONS +.Pp +.Bl -tag -width Fl -compact -offset left +.It Fl a +Show aliasing of local addresses in +mail address resolution phase of testing +.It Fl d +Preceed each address translation line with ruleset sequence summary +.It Fl C Ar file.cf +Use the +.Xr sendmail +configuration file +.Ar file.cf +instead of the default +.Pa /etc/sendmail.cf +file. +.It Fl b Ar sendmail_binary +Use the specified +.Ar sendmail_binary +as the path to invoke sendmail (instead of +.Pa /usr/sbin/sendmail ) . +.It Fl l Ar log_file +Log +.Xr sendmail +address test mode debugging output to +.Ar log_file +.It Fl r Ar resolve +Use +.Ar resolve +as the input file for the addresses to be used for mail resolving. Defaults +to +.Ar address.resolve . +.It Fl T Ar test.address +Use +.Ar test.address +as the single address to test. Cannot be used in conjunction with +file setting flags. +.El +.Sh EXAMPLES +.Pp +The following command will pass the addresses in +.Ar address.resolve +through +.Xr sendmail +using the configuration information in +.Ar myconfig.cf . +.Bd -literal -offset left +example% cat address.resolve +user +user@site +user@site.com + +example% checksendmail \-C myconfig.cf +system: myhost.gadget.com current dir: /tmp/Checksendmail +resolve file: address.resolve +sendmail binary: /usr/sbin/sendmail sendmail version: 8.9.3 +config file: /etc/sendmail.cf config file version: V8/Berkeley + +Mail address resolution +user --(ether )--> user[rmtc] +user@site --(ether )--> user@site[rmtc] +user@site.com --(ether )--> user@site.com[rmtc] + +`To' address transformations for mailer ether: +user ----> user +user@site ----> user@site +user@site.com ----> user@site.com + +`From' address transformations for mailer ether: +user ----> user +user@site ----> user +user@site.com ----> user +.Ed +.Pp +The first section of the output shows how the addresses in the input +files are resolved by +.Xr sendmail 8 . +Consider the following output line: +.Pp +.Dl user@site.com --(ether )--> user@site.com[rmtc] +.Pp +The input address +.Em user@site.com +resolves to use the +.Em ether +mailer. That mailer is directed to send the mail to +to the user +.Em user@site.com +at site +.Em rmtc +(as indicated in the square brackets). +.Pp +The two later sections of output show how the addresses specified as +the +.Em To +and +.Em From +address are transformed in the text of the +headers. In the example above, the +.Em To +addresses are untouched. +The +.Em From +addresses, however, all lose their machine information on +the way through the mailer: +.Pp +.Dl user@site ----> user +.Pp +This may be desirable when using a configuration file on a +workstation which is to be hidden as a mailhost from the rest of the +network. +.Pp +The following is a set of addresses used at one site for the purposes of +testing address resolution. Comments after the addresses detail why +particular addresses are present: +.Bl -tag -width "user@machine.com" -compact -offset indent +.It user +Standard trivial address +.It user@rmtc +qualified at one level +.It user@rmtc.central +qualified at two levels +.It user@rmtc.central.sun.com +qualified all the way +.It rmtc!user +local but specified as uucp +.It user@summit +a workstation (normally delivered locally, though) +.It user@summit.central +same but more qualified +.It user@summit.central.sun.com +same but fully qualified +.It summit!user +same but specified as uucp +.It user@prisma +Backward compatibility tests +.It user@prisma.com +.It prisma!user +.It user@central +Superior domain testing +.It user@machine.central +more qualified, but unknown +.It user@summit.central +more qualified and known +.It user@eng +name in faraway domain +.It user@machine.eng +unknown machine in faraway domain +.It user@summit.eng +local machine, far away domain +.It user@hoback +far away machine +.It user@machine +apparently local but unknown machine +.It user@sun.com +Standard trivial address +.It user@machine.dom.sun.com +fully qualified but unknown machine +.It user@foo.com +standard, known, really far away domain +.It user@foo.dom +standard, unknown, really far away domain +.It site!user +Single level uucp +.It site1!site2!user +Double level uucp +.It user@foo.dom@bar.dom +Trickier address +.It site!user@foo.dom +Mixed uucp/domain +.It site!user@uunet.uu.net +Mixed double uucp/domain +.El +.Sh NOTES +Note that +.Nm checksendmail +is a +.Xr perl +script. If your site does not have +.Xr perl 1 , +it can be obtained via anonymous +.Xr ftp +from +.Em ftp.uu.net . +.Pp +.Xr sendmail +requires that the user have access to directory specified by the +.Em OQ +parameter in the configuration file (normally +.Pa /usr/spool/mqueue ) . +.Nm checksendmail +verifies that the user has access to this directory before allowing the +test to continue. +.Sh AUTHORS +.Bd -literal +Gene Kim +Rob Kolstad +Jeff Polk +.Ed +.Pp +Modified by Robert Harker +.Sh "SEE ALSO" +.Xr sendmail 8 diff --git a/debian/examples/db/access b/debian/examples/db/access new file mode 100644 index 0000000..af43fef --- /dev/null +++ b/debian/examples/db/access @@ -0,0 +1,139 @@ +# /etc/mail/access +# Copyright (c) 1998,2004 Richard Nelson <cowboy@debian.org>. +# Time-stamp: <1998/10/27 10:00:00 cowboy> +# GPL'd config file, please feed any gripes, suggestions, etc. to me +# +# Function: +# Access Control for this smtp server - determines: +# * Who we accept mail from +# * Who we accept relaying from +# * Who we will not send to +# +# Usage: +# FEATURE(access_db[, type [-o] /etc/mail/access])dnl +# makemap hash access < access +# +# Format: +# lhs: +# email addr <user@[host.domain]> +# domain name unless FEATURE(relay_hosts_only) is used, +# then this is a fqdn - and relay-domains ($=R) +# must also be fqdns. +# network number must end on an octet boundary, or +# you're stuck going the longwinded way ;-{ +# rhs: +# OK accept mail even if other rules in the +# running ruleset would reject it. +# RELAY Allow domain to relay through your SMTP +# server. RELAY also serves an implicit +# OK for the other checks. +# REJECT reject the sender/recipient with a general +# purpose message that can be customized. +# confREJECT_MSG [550 Access denied] will be issued +# DISCARD discard the message completely using +# the $#discard mailer. +# ### any text where ### is an RFC 821 compliant error code +# and "any text" is a message to return for +# the command +# Examples: +# spammer@aol.com REJECT +# FREE.STEALTH.MAILER@ 550 Spam not accepted +# +# Notes: +# With FEATURE(blacklist_recipients) this is also possible: +# badlocaluser 550 Mailbox disabled for this username +# host.mydomain.com 550 That host does not accept mail +# user@otherhost.mydomain.com 550 Mailbox disabled for this recipient +# +# Related: +# define(`confREJECT_MSG', `550 Access denied')dnl +# define(`confCR_FILE', `-o /etc/mail/relay-domains')dnl <<- $=R +# FEATURE(relay_hosts_only)dnl +# FEATURE(relay_entire_domain)dnl <<- relays any host in the $=m class +# FEATURE(relay_based_on_MX)dnl <<- relaying for boxes MX'd to you +# FEATURE(blacklist_recipients)dnl +# FEATURE(rbl[,alternate server])dnl +# FEATURE(orbs[,alternate server])dnl <<- Debian addition +# FEATURE(orca[,alternate server])dnl <<- Debian addition +# FEATURE(accept_unqualified_senders)dnl +# FEATURE(accept_unresolvable_domains)dnl +# +# Local addresses 10.x.x.x, 127.x.x.x, 172.16-31.x.x 192.168.x.x can relay +# Note Well! You *must* make sure these address can't be spoofed externally +# Note, outbound relaying is controlled by connection and/or auth +# If you're not firewalled, and you don't have a lan, comment these out +# If you're not firewalled, and you have a lan, get firewalled *NOW* +# GreetPause - delay to check for spammers +# Client Connection rate (and #) control +Connect:localhost RELAY +GreetPause:localhost 0 +ClientRate:localhost 0 +ClientConn:localhost 0 +#Connect:10 RELAY +#GreetPause:10 0 +#ClientRate:10 0 +#ClientConn:10 0 +Connect:127 RELAY +GreetPause:127 0 +ClientRate:127 0 +ClientConn:127 0 +Connect:[IPv6:::1] RELAY +GreetPause:[IPv6:::1] 0 +ClientRate:[IPv6:::1] 0 +ClientConn:[IPv6:::1] 0 +#Connect:172.16 RELAY +#Connect:172.17 RELAY +#Connect:172.18 RELAY +#Connect:172.19 RELAY +#Connect:172.20 RELAY +#Connect:172.21 RELAY +#Connect:172.22 RELAY +#Connect:172.23 RELAY +#Connect:172.24 RELAY +#Connect:172.25 RELAY +#Connect:172.26 RELAY +#Connect:172.27 RELAY +#Connect:172.28 RELAY +#Connect:172.29 RELAY +#Connect:172.30 RELAY +#Connect:172.31 RELAY +#Connect:192.168 RELAY +#GreetPause:192.168 0 +#ClientRate:192.168 0 +#ClientConn:192.168 0 +# Defaults +GreetPause: 5000 +ClientRate: 10 +ClientConn: 10 +# +# Don't offer AUTH on local network +#SRV_Features:192.168.1 A +# +# Hosts with to allow relaying +# +# +# Hosts that validly forward to me +#GreetPause:<ip> 0 +#ClientRate:<ip> 30 +#ClientConn:<ip> 0 +# +# Whitelisted users +# +Spam:postmaster@ FRIEND +Spam:abuse@ FRIEND +Spam:spam@ FRIEND +# +# Blacklisted users +# +#Connect:rampellsoft.com 554 Email directly, not through didtheyreadit.com +reject@ REJECT +#cyberpromo.com REJECT +#From:MAILER-DAEMON@store2.netvisao.pt REJECT +# +# Block invalid IPs +# +Connect:0 REJECT +Connect:169.254 REJECT +Connect:192.0.2 REJECT +Connect:224 REJECT +Connect:255 REJECT diff --git a/debian/examples/db/aliases b/debian/examples/db/aliases new file mode 100644 index 0000000..8e99427 --- /dev/null +++ b/debian/examples/db/aliases @@ -0,0 +1,15 @@ +# +# Mail aliases for sendmail +# +# You must run newaliases(1) after making changes to this file. +# + +# Required aliases +postmaster: root +MAILER-DAEMON: postmaster + +# Common aliases +abuse: postmaster +spam: postmaster + +# Other aliases diff --git a/debian/examples/db/domaintable b/debian/examples/db/domaintable new file mode 100644 index 0000000..82b3ff7 --- /dev/null +++ b/debian/examples/db/domaintable @@ -0,0 +1,26 @@ +# /etc/mail/domaintable +# Copyright (c) 1998, Richard Nelson <cowboy@debian.org>. +# Time-stamp: <1998/10/27 10:00:00 cowboy> +# GPL'd config file, please feed any gripes, suggestions, etc. to me +# +# Function: +# Specify a mapping from old host name to new host name. +# Commonly used to support old (or merged) domain names. +# The host name in the lhs will be rewritten to that in the rhs +# +# Usage: +# FEATURE(domaintable[, type [-o] /etc/mail/domaintable])dnl +# makemap hash domaintable < domaintable +# +# Format: +# old fqdn new fqdn +# +# Examples: +# debian.com debian.org +# .debian.com %0.debian.org +# +# Notes: +# +# Related: +# +#.cv.lexington.ibm.com %0.lexington.ibm.com diff --git a/debian/examples/db/genericstable b/debian/examples/db/genericstable new file mode 100644 index 0000000..44bf03c --- /dev/null +++ b/debian/examples/db/genericstable @@ -0,0 +1,36 @@ +# /etc/mail/genericstable +# Copyright (c) 1998, Richard Nelson <cowboy@debian.org>. +# Time-stamp: <1998/10/27 10:00:00 cowboy> +# GPL'd config file, please feed any gripes, suggestions, etc. to me +# +# Function: +# Cause certain addresses originating locally (unqualified), or +# from a domain in $=G to be rewritten based upon the map below. +# This mapping may change both the user and domain name. +# +# Usage: +# FEATURE(genericstable[, type [-o] /etc/mail/genericstable])dnl +# makemap hash genericstable < genericstable +# +# Format: +# localuser realuser@realdomain <<- implied $j or masq domain +# user@host realuser@realhost <<- tried first +# user[@host] realuser[@realhost] +# +# Examples: +# +# Notes: +# * Masquerading is *required* for genericstable support! +# * Then genericstable should only be enabled if needed as it +# causes every sender to be looked up in the database +# * Members of $=w are *not* automatically placed in $=G +# * For local mail, FEATURE(always_add_domain) is necessary +# +# Related: +# EXPOSED_USER(root uucp)dnl <<- these are exempt from masquerading +# FEATURE(allmasquerade)dnl <<- rewrite recipient addrs too +# FEATURE(always_add_domain)dnl <<- add domain to unqualified names +# FEATURE(limited_masquerade)dnl <<- only masq domains in $=M +# FEATURE(masquerade_envelope)dnl <<- rewrite envelope return address too +# GENERICS_DOMAIN_FILE(`/etc/mail/sendmail.cG')dnl <<- masq From: +# diff --git a/debian/examples/db/mailertable b/debian/examples/db/mailertable new file mode 100644 index 0000000..79d950f --- /dev/null +++ b/debian/examples/db/mailertable @@ -0,0 +1,50 @@ +# /etc/mail/mailertable +# Copyright (c) 1998, Richard Nelson <cowboy@debian.org>. +# Time-stamp: <1998/10/27 10:00:00 cowboy> +# GPL'd config file, please feed any gripes, suggestions, etc. to me +# +# Function: +# Specify a mapping from old host name to new host name. +# Commonly used to support old (or merged) domain names. +# The host name in the lhs will be rewritten to that in the rhs +# +# Usage: +# FEATURE(mailertable[, type [-o] /etc/mail/mailertable])dnl +# makemap hash mailertable < mailertable +# +# Format: +# Local recipients: +# <address> local:user +# <address> local: <<- will use same user +# Error messages: +# badhost error:nohost mail to %0 is prohibited +# .baddomain error:nohost mail to %1%0 is prohibited +# +# Examples: +# Local recipients: +# <address> local:user +# <address> local: <<- will use same user +# Error messages: +# badhost error:nohost mail to %0 is prohibited +# .baddomain error:nohost mail to %1%0 is prohibited +# +# Notes: +# +# Related: +# +# Address rewrites for hosts *NOT IN* class $w +# Direct delivery, %0 is left side +# friend.dom smtp:[%0]:[some.smart.host] +# Direct deliver of domain, smarthost as second choice +# .friend.dom smtp:[%1%0]:[some.smart.host] +# Default route, via smarthost +# . smtp:[some.smart.host] +# +badhost error:nohost mail to %0 is prohibited +.baddomain error:nohost mail to %1%0 is prohibited +# +# Sites we deliver directly to, bypassing SMARTHOST: +# +# Sites that use DUL: Dialup User Lists (or equivalent) +#aol.com esmtp:[relay] +#primenet.com esmtp:[relay] diff --git a/debian/examples/db/relay-domains b/debian/examples/db/relay-domains new file mode 100644 index 0000000..c16b9de --- /dev/null +++ b/debian/examples/db/relay-domains @@ -0,0 +1,35 @@ +# /etc/mail/relay-domains +# Copyright (c) 1998, Richard Nelson <cowboy@debian.org>. +# Time-stamp: <1998/10/27 10:00:00 cowboy> +# GPL'd config file, please feed any gripes, suggestions, etc. to me +# +# Function: +# Control what hosts are allowed to relay (or be a relay) +# +# Usage: +# define(`confCR_FILE', `[-o ]/etc/mail/relay-domains')dnl +# RELAY_DOMAIN_FILE(`/etc/mail/relay-domains %[^\#]')dnl +# +# Format: +# lhs: +# +# Notes: +# Class $=R +# These are domains unless FEATURE(relay_hosts_only) is used, +# then these names must be fully qualified host names! +# +# Related: +# FEATURE(relay_hosts_only)dnl +# FEATURE(relay_entire_domain)dnl <<- relays any host in the $=m class +# FEATURE(relay_based_on_MX)dnl <<- relaying for boxes MX'd to you +# FEATURE(access_db)dnl +# EATURE(blacklist_recipients)dnl +# FEATURE(rbl[,alternate server])dnl +# FEATURE(orbs[,alternate server])dnl <<- Debian addition +# FEATURE(accept_unqualified_senders)dnl +# FEATURE(accept_unresolvable_domains)dnl +# +# Hosts that I will relay to: +# +# Hosts that can relay to me: +# diff --git a/debian/examples/db/sendmail.cM b/debian/examples/db/sendmail.cM new file mode 100644 index 0000000..8806f3b --- /dev/null +++ b/debian/examples/db/sendmail.cM @@ -0,0 +1,32 @@ +# /etc/mail/sendmail.cM +# Copyright (c) 1998, Richard Nelson <cowboy@debian.org>. +# Time-stamp: <1998/10/27 10:00:00 cowboy> +# GPL'd config file, please feed any gripes, suggestions, etc. to me +# +# Function: +# Specify mail domains, which when relayed, will be rewritten +# to appear as the MASQUERADE_AS address +# +# Usage: +# MASQUERADE_DOMAIN_FILE(`[-o ]/etc/mail/sendmail.cM')dnl +# +# Format: +# fqdn +# +# Examples: +# debian.org +# +# Notes: +# Class=$M +# +# Related: +# EXPOSED_USER(root uucp)dnl <<- these are exempt from masquerading +# FEATURE(allmasquerade)dnl <<- rewrite recipient addrs too +# FEATURE(always_add_domain)dnl <<- add domain to unqualified names +# FEATURE(limited_masquerade)dnl <<- only masq domains in $=M +# FEATURE(masquerade_entire_domain)dnl <<- masq all hosts under domain +# FEATURE(masquerade_envelope)dnl <<- rewrite envelope return address too +# GENERICS_DOMAIN_FILE(`/etc/mail/sendmail.cG')dnl <<- masq From: +# +# Local names +# diff --git a/debian/examples/db/userdb b/debian/examples/db/userdb new file mode 100644 index 0000000..9d4d915 --- /dev/null +++ b/debian/examples/db/userdb @@ -0,0 +1,10 @@ +#User names and the inbound(maildrop)/outbound(mailname) addresses +#dest machine/domain names must also be in sendmail.cG for masquerading +# NOTE: do NOT use FEATURE(stickyhost) with userdb +# NOTE: be carefull with local delivery, defeats plussed users +# +# NOTE: Combined with virtusertable and/or aliases, Genericstable +# can do everything the userdb can and more (and the difference +# is growing bigger). The userdb is basically obsolete. +#:default:mailname badlands.org +#cowboy:mailname cowboy@vnet.ibm.com diff --git a/debian/examples/db/virtusertable b/debian/examples/db/virtusertable new file mode 100644 index 0000000..3512635 --- /dev/null +++ b/debian/examples/db/virtusertable @@ -0,0 +1,8 @@ +# Address rewrites for incomming mail +# user@realdomain (must be in $w) localuser (may be an alias) +# info@foo.com foo-info +# info@bar.com bar-info +# @baz.org jane@elsewhere.net +# @foo.org %1@elsewhere.com +# @bar.org error:nouser User unknown +# diff --git a/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.1.old b/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.1.old new file mode 100644 index 0000000..ba6b98c --- /dev/null +++ b/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.1.old @@ -0,0 +1,158 @@ +#!/bin/sh +# +# This script is called when dhcp connects to the network. +# +# Here is where we'll start sendmail if needed, and will +# run the queue in either case. +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# NOTE: The dhcp DNS name is used as the peer name in /etc/mail/peers. +# +# Exit by default, check for validity before commenting out the next line: +exit 0; + +provider_m4='/etc/mail/provider.m4'; +#provider_m4='provider.m4'; +dialup_m4='/etc/mail/dialup.m4'; +#dialup_m4='dialup.m4'; + +update_sendmail() { + # Build a new sendmail.cf from sendmail.mc, including our address. + m4 /etc/mail/sendmail.mc \ + > /etc/mail/sendmail.cf.pnew; + chmod 0644 /etc/mail/sendmail.cf.pnew; + chown mail:mail /etc/mail/sendmail.cf.pnew; + mv -f /etc/mail/sendmail.cf.pnew /etc/mail/sendmail.cf; + + # Purge any latent host status that might cause us to *NOT* send mail + AM='-Am'; + if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then + AM=''; + fi; + sendmail $AM -bH -O Timeout.hoststatus=1s; + + # Start/reload sendmail as needed + /etc/init.d/sendmail reload; # may be up, or down + + # Process the sendmail queue + # (background so as to not defer other ip-up work) + runq & + }; + +update_provider() { + # Add smarthost information (if any)... + # But not if provider.m4 is a link ! + local domain; + domain="$1"; + if [ -f /etc/mail/peers/$domain -a ! -L $provider_m4 ]; then + cat <<-EOT > $provider_m4; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic provider updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/provider.m4')dnl + # + # Provider information from /etc/mail/peers/$domain + EOT + cat /etc/mail/peers/$domain >> $provider_m4; + cat <<-EOT >> $provider_m4; + #------------------------------------------------------------ + EOT + fi; + }; + +find_host() { + # Determine our fqdn from our ISP + local addr; + addr="$1"; + maxloop=20; + cntr=0; + host=''; + until (test ! -z "$host"); do + cntr=$(($cntr+1)); + rev=$(host $addr); + host=$(echo "$rev" | grep '^Name:' | awk '{print $2}'); + if [ -z "$host" ]; then + host=${rev##*domain name pointer }; + host=${host%.}; + fi; + test=$(echo $host | cut -d ' ' -f 1); + if [ "$host" != "**" ]; then + break; + elif (($cntr > $maxloop)); then + host=''; + break; + fi; + done; + echo "addr=$addr, name=$host"; + }; + +update_host() { + local host ip; + ip="$1"; + find_host "$ip"; + if [ ! -z "$host" ]; then + cat <<-EOT > $dialup_m4; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic host/ip updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/dialup.m4')dnl + # + # Chose one of the following two options: + # * Add our true hostname as a Virtual Host (we'll accept + # mail for it, but keep our local name for SMTP AUTH, etc) + C{VirtHost}$host + # + # * Define our true hostname (from our ISP) - becomes \$j + dnl define(\`confDOMAIN_NAME', \`$host')dnl + # + # Make sure we accept mail as this name (for bounces, etc) + Cw$host + Cw$ip + # Add our hostname to class G for genericstable support + CG$host + #------------------------------------------------------------ + EOT + fi; + }; + +# No need to continue if we're called with an unsupported option +if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \ + && [ "$reason" != REBIND ] && [ "$reason" != REBOOT ] \ + && [ "$reason" != EXPIRE ] && [ "$reason" != FAIL ] + then + return; + fi; + +# Flag to denote changed have been made; +changed=0; + +# If the domain name has changed, update the provider information +if [ "$new_domain_name" != "$old_domain_name" ]; then + changed=1; + update_provider "$new_domain_name"; + fi; + +# If the ip address has changed, update the host information +if [ "$new_ip_address" != "$oldnew_ip_address" ]; then + changed=1; + update_host "$new_ip_address"; + fi; + +# If anything has been changed, update sendmail.cf and reload +if [ $changed -eq 1 ]; then + update_sendmail; + fi; + +exit 0; + diff --git a/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.in b/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.in new file mode 100644 index 0000000..c517033 --- /dev/null +++ b/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.in @@ -0,0 +1,49 @@ +#!/bin/sh +# +# This script is called when a dhcp event occurs. +# +# Here is where we'll start/stop sendmail if needed. +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# NOTE: The dhcp DNS name is used as the peer name in /etc/mail/peers. +# + +# No need to continue if we're called with an unsupported option +case "$reason" in + EXPIRE|FAIL|RELEASE|STOP) #down... and TIMEOUT too ??? + ;; + BOUND|RENEW|REBIND|REBOOT|TIMEOUT) #up... why TIMEOUT here ??? + ;; + *) + return; + ;; + esac; + +# Bring in some script functions to handle dynamic configuration +. @datadir@/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$interface" "$reason"; + +# If the domain name has changed, update the provider information +if [ "$new_domain_name" != "$old_domain_name" ]; then + update_provider "$new_domain_name"; + fi; + +# If the ip address has changed, update the host information +if [ "$new_ip_address" != "$oldnew_ip_address" ]; then + update_host "$new_ip_address"; + fi; + +# If anything has been changed, update sendmail.cf and reload +# Actually, we'll delay the reload because we'll be hit in a moment +# to handle the change by /etc/network/if-up.d/sendmail +update_sendmail "dhcp" Delayed; + +return; + diff --git a/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.md5sum b/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.md5sum new file mode 100644 index 0000000..d18e257 --- /dev/null +++ b/debian/examples/dhcp3/dhclient-exit-hooks.d/sendmail.md5sum @@ -0,0 +1 @@ +2adc5e32474fb128ee6c7b4425d06a58 sendmail diff --git a/debian/examples/ldap/sendmail.schema.v1 b/debian/examples/ldap/sendmail.schema.v1 new file mode 100644 index 0000000..a1cf73e --- /dev/null +++ b/debian/examples/ldap/sendmail.schema.v1 @@ -0,0 +1,60 @@ +# Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. +# All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# $Id: sendmail.schema,v 8.6 2001/02/14 05:03:22 gshapiro Exp $ +# +# sendmail specific schemas +# + +attribute sendmailMTAMapName cis +attribute sendmailMTAMapHost cis +attribute sendmailMTAMapDescription cis + +attribute sendmailMTAMapKey cis +attribute sendmailMTAMapValue cis +attribute sendmailMTAMapObjectDescription cis + +objectClass sendmailMTAMap + requires + objectClass, + sendmailMTAMapName, + sendmailMTAMapHost, + allows + sendmailMTAMapDescription + +objectClass sendmailMTAMapObject + requires + objectClass, + sendmailMTAMapKey, + sendmailMTAMapValue + allows + sendmailMTAMapObjectDescription + +# +# The default aliases LDAP schema is used when the AliasFile option is set +# to something like: +# +# O AliasFile=ldap: +# +# That schema is simply: +# + +attribute sendmailMTAAliasHost cis +attribute sendmailMTAAliasDescription cis + +attribute sendmailMTAAliasKey cis +attribute sendmailMTAAliasValue cis + +objectClass sendmailMTAAlias + requires + objectClass, + sendmailMTAAliasHost, + sendmailMTAAliasKey, + sendmailMTAAliasValue + allows + sendmailMTAAliasDescription + diff --git a/debian/examples/ldap/sendmail.schema.v2 b/debian/examples/ldap/sendmail.schema.v2 new file mode 100644 index 0000000..a532f8b --- /dev/null +++ b/debian/examples/ldap/sendmail.schema.v2 @@ -0,0 +1,269 @@ +# Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers. +# All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# $Id: sendmail.schema,v 8.21 2002/11/20 23:13:50 gshapiro Exp $ + +# Note that this schema is experimental at this point as it has had little +# public review. Therefore, it may change in future versions. Feedback +# via sendmail@sendmail.org is encouraged. + +# OID arcs for Sendmail +# enterprise: 1.3.6.1.4.1 +# sendmail: enterprise.6152 +# sendmail-at: sendmail.3.1 +# sendmail-oc: sendmail.3.2 + +########################################################################### +# +# The Sendmail MTA attributes and objectclass +# +########################################################################### + +# attribute sendmailMTACluster cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.10 + NAME 'sendmailMTACluster' + DESC 'cluster name associated with a set of MTAs' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# attribute sendmailMTAHost cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.11 + NAME 'sendmailMTAHost' + DESC 'host name associated with a MTA cluster' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +#objectClass sendmailMTA +# requires +# objectClass +# allows +# sendmailMTACluster, +# sendmailMTAHost, +# Description + +objectclass ( 1.3.6.1.4.1.6152.10.3.2.10 + NAME 'sendmailMTA' + SUP top STRUCTURAL + DESC 'Sendmail MTA definition' + MAY ( sendmailMTACluster $ sendmailMTAHost $ Description ) ) + +########################################################################### +# +# The Sendmail MTA shared attributes +# +########################################################################### + +# attribute sendmailMTAKey cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.13 + NAME 'sendmailMTAKey' + DESC 'key (left hand side) of an aliases or map entry' + EQUALITY caseIgnoreMatch + SUBSTR caseIgnoreSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) + +########################################################################### +# +# The Sendmail MTA Map attributes and objectclasses +# +########################################################################### + +# attribute sendmailMTAMapName cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.14 + NAME 'sendmailMTAMapName' + DESC 'identifier for the particular map' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} SINGLE-VALUE ) + +# attribute sendmailMTAMapValue cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.16 + NAME 'sendmailMTAMapValue' + DESC 'value (right hand side) of a map entry' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +# attribute sendmailMTAMapSearch cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.24 + NAME 'sendmailMTAMapSearch' + DESC 'recursive search for values of a map entry' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +# attribute sendmailMTAMapURL cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.25 + NAME 'sendmailMTAMapURL' + DESC 'recursive search URL for values of a map entry' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +#objectClass sendmailMTAMap +# requires +# objectClass, +# sendmailMTAMapName, +# allows +# sendmailMTACluster, +# sendmailMTAHost, +# Description + +objectclass ( 1.3.6.1.4.1.6152.10.3.2.11 + NAME 'sendmailMTAMap' + SUP sendmailMTA STRUCTURAL + DESC 'Sendmail MTA map definition' + MUST sendmailMTAMapName + MAY ( sendmailMTACluster $ sendmailMTAHost $ Description ) ) + +#objectClass sendmailMTAObject +# requires +# objectClass, +# sendmailMTAMapName, +# sendmailMTAKey, +# allows +# sendmailMTACluster, +# sendmailMTAHost, +# sendmailMTAMapValue, +# sendmailMTAMapSearch, +# sendmailMTAMapURL, +# Description + +objectclass ( 1.3.6.1.4.1.6152.10.3.2.12 + NAME 'sendmailMTAMapObject' + SUP sendmailMTAMap STRUCTURAL + DESC 'Sendmail MTA map object' + MUST ( sendmailMTAMapName $ sendmailMTAKey ) + MAY ( sendmailMTACluster $ sendmailMTAHost $ + sendmailMTAMapValue $ sendmailMTAMapSearch $ + sendmailMTAMapURL $ Description ) ) + + +########################################################################### +# +# The Sendmail MTA Alias attributes and objectclasses +# +########################################################################### + +# attribute sendmailMTAAliasGrouping cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.18 + NAME 'sendmailMTAAliasGrouping' + DESC 'name that identifies a particular aliases grouping' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) + +# attribute sendmailMTAAliasValue cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.20 + NAME 'sendmailMTAAliasValue' + DESC 'value (right hand side) of an alias' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +# attribute sendmailMTAAliasSearch cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.26 + NAME 'sendmailMTAAliasSearch' + DESC 'recursive search for values of an alias' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +# attribute sendmailMTAAliasURL cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.27 + NAME 'sendmailMTAAliasURL' + DESC 'recursive search URL for values of an alias' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +#objectClass sendmailMTAAlias +# requires +# objectClass, +# allows +# sendmailMTAAliasGrouping, +# sendmailMTACluster, +# sendmailMTAHost, +# Description + +objectclass ( 1.3.6.1.4.1.6152.10.3.2.13 + NAME 'sendmailMTAAlias' + SUP sendmailMTA STRUCTURAL + DESC 'Sendmail MTA alias definition' + MAY ( sendmailMTAAliasGrouping $ + sendmailMTACluster $ sendmailMTAHost $ Description ) ) + +#objectClass sendmailMTAAliasObject +# requires +# objectClass, +# sendmailMTAKey, +# allows +# sendmailMTAAliasGrouping, +# sendmailMTACluster, +# sendmailMTAHost, +# sendmailMTAAliasValue, +# sendmailMTAAliasSearch, +# sendmailMTAAliasURL, +# Description + +objectclass ( 1.3.6.1.4.1.6152.10.3.2.14 + NAME 'sendmailMTAAliasObject' + SUP sendmailMTAAlias STRUCTURAL + DESC 'Sendmail MTA alias object' + MUST sendmailMTAKey + MAY ( sendmailMTAAliasGrouping $ sendmailMTACluster $ + sendmailMTAHost $ sendmailMTAAliasValue $ + sendmailMTAAliasSearch $ sendmailMTAAliasURL $ Description ) ) + +########################################################################### +# +# The Sendmail MTA Class attributes and objectclass +# +########################################################################### + +# attribute sendmailMTAClassName cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.22 + NAME 'sendmailMTAClassName' + DESC 'identifier for the class' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} SINGLE-VALUE ) + +# attribute sendmailMTAClassValue cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.23 + NAME 'sendmailMTAClassValue' + DESC 'member of a class' + EQUALITY caseIgnoreMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) + +# attribute sendmailMTAClassSearch cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.28 + NAME 'sendmailMTAClassSearch' + DESC 'recursive search for members of a class' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +# attribute sendmailMTAClassURL cis +attributetype ( 1.3.6.1.4.1.6152.10.3.1.29 + NAME 'sendmailMTAClassURL' + DESC 'recursive search URL for members of a class' + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) + +#objectClass sendmailMTAClass +# requires +# objectClass, +# sendmailMTAClassName, +# allows +# sendmailMTACluster, +# sendmailMTAHost, +# sendmailMTAClassValue, +# sendmailMTAClassSearch, +# sendmailMTAClassURL, +# Description + +objectclass ( 1.3.6.1.4.1.6152.10.3.2.15 + NAME 'sendmailMTAClass' + SUP sendmailMTA STRUCTURAL + DESC 'Sendmail MTA class definition' + MUST sendmailMTAClassName + MAY ( sendmailMTACluster $ sendmailMTAHost $ + sendmailMTAClassValue $ sendmailMTAClassSearch $ + sendmailMTAClassURL $ Description ) ) diff --git a/debian/examples/logcheck/ignore.d.paranoid/sendmail b/debian/examples/logcheck/ignore.d.paranoid/sendmail new file mode 100644 index 0000000..a82adc8 --- /dev/null +++ b/debian/examples/logcheck/ignore.d.paranoid/sendmail @@ -0,0 +1,21 @@ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: starting daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: restarting +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: rejecting connections on daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: accepting connections again for daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* User unknown +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: alias database .* rebuilt +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* aliases, longest +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: from= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: split: +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* lost input channel +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* message-id= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* return to sender +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* stat= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* timeout waiting +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: Milter (add|change|delete) .*: +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: Milter: data, discard +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: discarded +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: AUTH= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: (PLAIN|CRAM-MD5|DIGEST-MD5) set secret +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: DIGEST-MD5: failed .* later in exchange +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: STARTTLS=(server|client), .* verify=(OK|NO) diff --git a/debian/examples/logcheck/ignore.d.server/sendmail b/debian/examples/logcheck/ignore.d.server/sendmail new file mode 100644 index 0000000..573344b --- /dev/null +++ b/debian/examples/logcheck/ignore.d.server/sendmail @@ -0,0 +1,27 @@ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: starting daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: restarting +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: rejecting connections on daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: accepting connections again for daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* User unknown +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: alias database .* rebuilt +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* aliases, longest +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: from= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: split: +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* lost input channel +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* message-id= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* return to sender +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* stat= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* timeout waiting +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: Milter: data, discard +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: discarded +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: AUTH= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: (PLAIN|CRAM-MD5|DIGEST-MD5) set secret +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: DIGEST-MD5: failed .* later in exchange +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: STARTTLS=(server|client), .* verify=(OK|NO) +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: no secret in database$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: [[:alnum:]]+: [[:alnum:]]+: DSN: Return receipt$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: [[:alnum:]]+: collect: premature EOM: unexpected close$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: [[:alnum:]]+: collect: unexpected close on connection from (\[[0-9.]+\]|[._[:alnum:]-]+), sender=<[^>]+>$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: DIGEST-MD5 (server|client) step [[:alnum:]]+$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: [[:alnum:]]+: Milter (add|change|delete|message).*: .*$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: [[:alnum:]]+\[[0-9]+\]:.*$ diff --git a/debian/examples/logcheck/ignore.d.workstation/sendmail b/debian/examples/logcheck/ignore.d.workstation/sendmail new file mode 100644 index 0000000..d8bd8d0 --- /dev/null +++ b/debian/examples/logcheck/ignore.d.workstation/sendmail @@ -0,0 +1,21 @@ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: starting daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: restarting +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: rejecting connections on daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: accepting connections again for daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* User unknown +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: alias database .* rebuilt +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* aliases, longest +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: from= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: split: +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* lost input channel +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* message-id= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* return to sender +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* stat= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* timeout waiting +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: Milter add: +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: Milter: data, discard +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*: discarded +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: AUTH= +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: (PLAIN|CRAM-MD5|DIGEST-MD5) set secret +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: DIGEST-MD5: failed .* later in exchange +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: STARTTLS= diff --git a/debian/examples/logcheck/violations.ignore.d/local.sendmail b/debian/examples/logcheck/violations.ignore.d/local.sendmail new file mode 100644 index 0000000..83abd67 --- /dev/null +++ b/debian/examples/logcheck/violations.ignore.d/local.sendmail @@ -0,0 +1 @@ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .* did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA$ diff --git a/debian/examples/logcheck/violations.ignore.d/logcheck-sendmail b/debian/examples/logcheck/violations.ignore.d/logcheck-sendmail new file mode 100644 index 0000000..a501752 --- /dev/null +++ b/debian/examples/logcheck/violations.ignore.d/logcheck-sendmail @@ -0,0 +1,13 @@ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: alias database .* rebuilt +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*stat=(Refused|Deferred) +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: gethostbyaddr\(.*\) failed: +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: rejecting connections on daemon +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: DIGEST-MD5: failed .* later in exchange +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=450 4\.7\.1 <[^>]+>... Relaying temporarily denied. Cannot resolve PTR record for [0-9\.]+$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=451 4\.1\.8 Domain of sender address [^ ]+ does not resolve$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=550 5\.7\.1 (<[^>]+>... )?Access denied$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=550 5\.7\.1 <[^>]+>... Relaying denied. Proper authentication required.$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=550 5\.7\.1 <[^>]+>... Relaying denied. IP name lookup failed \[[0-9\.]+\]$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=550 5\.7\.1 <[^>]+>... Relaying denied. IP name (lookup )?possibly forged \[[0-9\.]+\]$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: .*reject=553 5\.1\.8 <[^>]+>... Relaying temporarily denied. Cannot resolve PTR record for [0-9\.]+$ +^\w{3} [ :0-9]{11} [._[:alnum:]-]+ (sendmail|sm-(mta|msp|que))\[[0-9]+\]: [[:alnum:]]+: Milter (add|change|delete|message).*:.*$ diff --git a/debian/examples/milter/Makefile b/debian/examples/milter/Makefile new file mode 100644 index 0000000..69f5e93 --- /dev/null +++ b/debian/examples/milter/Makefile @@ -0,0 +1,25 @@ +#!/usr/bin/make -f +SHELL= /bin/sh + +# Define standard compile/install flags +CC = gcc +CFLAGS = -O2 -Wall +INSTALL = install +INCLS = -I. +DEFS = +CFLAGS += $(DEFS) $(INCLS) +LDFLAGS = +LIBS = /usr/lib/libmilter/libmilter.a \ + /usr/lib/libmilter/libsm.a \ + -lldap -llber \ + -lbind \ + -pthread + +all: sample + +sample: sample.c + @rm -f $@ + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $? $(LIBS) + +clean: + rm -rf sample *~ diff --git a/debian/examples/milter/sample.c b/debian/examples/milter/sample.c new file mode 100644 index 0000000..4e063ad --- /dev/null +++ b/debian/examples/milter/sample.c @@ -0,0 +1,236 @@ + +/* A trivial filter that logs all email to a file. */ + +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sysexits.h> +#include <unistd.h> + +#include "libmilter/mfapi.h" +#include "strl.h" /*RAN*/ + +typedef int bool; + +#ifndef FALSE +# define FALSE 0 +#endif /* ! FALSE*/ +#ifndef TRUE +# define TRUE 1 +#endif /* ! TRUE*/ + +struct mlfiPriv +{ + char *mlfi_fname; + FILE *mlfi_fp; +}; + +#define MLFIPRIV ((struct mlfiPriv *) smfi_getpriv(ctx)) + +extern sfsistat mlfi_cleanup(SMFICTX *, bool); + +sfsistat +mlfi_envfrom(ctx, envfrom) + SMFICTX *ctx; + char **envfrom; +{ + struct mlfiPriv *priv; + int fd; + + /* allocate some private memory */ + priv = malloc(sizeof *priv); + if (priv == NULL) + { + /* can't accept this message right now */ + return SMFIS_TEMPFAIL; + } + memset(priv, '\0', sizeof *priv); + + /* open a file to store this message */ + priv->mlfi_fname = strdup("/tmp/msg.XXXXXXXX"); + if (priv->mlfi_fname == NULL) + { + free(priv); + return SMFIS_TEMPFAIL; + } + if ((fd = mkstemp(priv->mlfi_fname)) < 0 || + (priv->mlfi_fp = fdopen(fd, "w+")) == NULL) + { + free(priv->mlfi_fname); + free(priv); + return SMFIS_TEMPFAIL; + } + + /* save the private data */ + smfi_setpriv(ctx, priv); + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +mlfi_header(ctx, headerf, headerv) + SMFICTX *ctx; + char *headerf; + char *headerv; +{ + /* write the header to the log file */ + fprintf(MLFIPRIV->mlfi_fp, "%s: %s\r\n", headerf, headerv); + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +mlfi_eoh(ctx) + SMFICTX *ctx; +{ + /* output the blank line between the header and the body */ + fprintf(MLFIPRIV->mlfi_fp, "\r\n"); + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +mlfi_body(ctx, bodyp, bodylen) + SMFICTX *ctx; + u_char *bodyp; + size_t bodylen; +{ + /* output body block to log file */ + if (fwrite(bodyp, bodylen, 1, MLFIPRIV->mlfi_fp) <= 0) + { + /* write failed */ + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +mlfi_eom(ctx) + SMFICTX *ctx; +{ + return mlfi_cleanup(ctx, TRUE); +} + +sfsistat +mlfi_close(ctx) + SMFICTX *ctx; +{ + return SMFIS_ACCEPT; +} + +sfsistat +mlfi_abort(ctx) + SMFICTX *ctx; +{ + return mlfi_cleanup(ctx, FALSE); +} + +sfsistat +mlfi_cleanup(ctx, ok) + SMFICTX *ctx; + bool ok; +{ + sfsistat rstat = SMFIS_CONTINUE; + struct mlfiPriv *priv = MLFIPRIV; + char *p; + char host[512]; + char hbuf[1024]; + + if (priv == NULL) + return rstat; + + /* close the archive file */ + if (priv->mlfi_fp != NULL && fclose(priv->mlfi_fp) == EOF) + { + /* failed; we have to wait until later */ + rstat = SMFIS_TEMPFAIL; + (void) unlink(priv->mlfi_fname); + } + else if (ok) + { + /* add a header to the message announcing our presence */ + if (gethostname(host, sizeof host) < 0) + strlcpy(host, "localhost", sizeof host); + p = strrchr(priv->mlfi_fname, '/'); + if (p == NULL) + p = priv->mlfi_fname; + else + p++; + snprintf(hbuf, sizeof hbuf, "%s@%s", p, host); + smfi_addheader(ctx, "X-Archived", hbuf); + } + else + { + /* message was aborted -- delete the archive file */ + (void) unlink(priv->mlfi_fname); + } + + /* release private memory */ + free(priv->mlfi_fname); + free(priv); + smfi_setpriv(ctx, NULL); + + /* return status */ + return rstat; +} + +struct smfiDesc smfilter = +{ + "SampleFilter", /* filter name */ + SMFI_VERSION, /* version code -- do not change */ + SMFIF_ADDHDRS, /* flags */ + NULL, /* connection info filter */ + NULL, /* SMTP HELO command filter */ + mlfi_envfrom, /* envelope sender filter */ + NULL, /* envelope recipient filter */ + mlfi_header, /* header filter */ + mlfi_eoh, /* end of header */ + mlfi_body, /* body block filter */ + mlfi_eom, /* end of message */ + mlfi_abort, /* message aborted */ + mlfi_close /* connection cleanup */ +}; + + +int +main(argc, argv) + int argc; + char *argv[]; +{ + int c; + const char *args = "p:"; + + /* Process command line options */ + while ((c = getopt(argc, argv, args)) != -1) + { + switch (c) + { + case 'p': + if (optarg == NULL || *optarg == '\0') + { + (void) fprintf(stderr, "Illegal conn: %s\n", + optarg); + exit(EX_USAGE); + } + (void) smfi_setconn(optarg); + break; + + } + } + if (smfi_register(smfilter) == MI_FAILURE) + { + fprintf(stderr, "smfi_register failed\n"); + exit(EX_UNAVAILABLE); + } + return smfi_main(); +} + +/* eof */ + diff --git a/debian/examples/milter/strl.h b/debian/examples/milter/strl.h new file mode 100644 index 0000000..f3c8cdb --- /dev/null +++ b/debian/examples/milter/strl.h @@ -0,0 +1,17 @@ +/*-------------------------------------------------------------------*/ +/* strl.h: include file for functions in strl.c */ +/* buried in the bottom of include/sendmail/sendmail.h */ +/* extracted and placed herein. */ +/* */ +/* referenced by: ./sample.c */ +/* defined by: /usr/lib/libmilter/libsm.a */ +/* */ +/* Richard Nelson <cowboy@debian.org> */ +/*-------------------------------------------------------------------*/ + +#define strlcpy sm_strlcpy +#define strlcat sm_strlcat + +extern size_t sm_strlcpy __P((char *, const char *, size_t)); +extern size_t sm_strlcat __P((char *, const char *, size_t)); + diff --git a/debian/examples/network/if-down.d/sendmail.1.old b/debian/examples/network/if-down.d/sendmail.1.old new file mode 100644 index 0000000..88e719e --- /dev/null +++ b/debian/examples/network/if-down.d/sendmail.1.old @@ -0,0 +1,57 @@ +#!/bin/sh +# +# This script is called when ppp disconnects from the network. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# Exit by default, check for validity before commenting out the next line: +exit 0; + +# Purge any latent host status that might cause us to *NOT* send mail +AM='-Am'; +if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then + AM=''; + fi; +sendmail $AM -bH -O Timeout.hoststatus=1s; + +# New mail will only be queued +file="/etc/mail/dialup.m4"; +if [ -f "$file" ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/dialup.m4')dnl + # + # sendmail is to only queue messages until connected again + define(\`confDELIVERY_MODE', \`deferred')dnl + # + # Allow the queue to age without carping every four hours + define(\`confTO_QUEUEWARN',\`1d')dnl + # + # Don't keep host status while the network is down + define(\`confHOST_STATUS_DIRECTORY')dnl + #------------------------------------------------------------ + EOT + fi; + +# Build a new sendmail.cf from sendmail.mc, including our address. +# NOTE: The following line (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4') +m4 /etc/mail/sendmail.mc \ + > /etc/mail/sendmail.cf.pnew; +chmod 0644 /etc/mail/sendmail.cf.pnew; +chown mail:mail /etc/mail/sendmail.cf.pnew; +mv -f /etc/mail/sendmail.cf.pnew /etc/mail/sendmail.cf; + +# Stop/reload sendmail daemon as needed +/etc/init.d/sendmail reload; diff --git a/debian/examples/network/if-down.d/sendmail.in b/debian/examples/network/if-down.d/sendmail.in new file mode 100644 index 0000000..254445b --- /dev/null +++ b/debian/examples/network/if-down.d/sendmail.in @@ -0,0 +1,42 @@ +#!/bin/sh +# +# This script is called when a network device goes down. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# + +# These variables are for the use of the scripts run by run-parts +#IFACE=; +#IF_ADDRESS=; +#IF_PROVIDER=; + +if [ ! -z "$IFACE" ]; then + addr=$IF_ADDRESS; + provider=$IF_PROVIDER; + iface=$IFACE; +else + addr=$1; + provider=$2; + iface=$3; + fi; + +if [ -z "$provider" ]; then + exit 0; + fi; + +# Bring in some script functions to handle dynamic configuration +. @datadir@/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$iface" "STOP"; + +# If anything has been changed, update sendmail.cf and reload +update_sendmail "ifupdown"; + +exit 0; diff --git a/debian/examples/network/if-down.d/sendmail.md5sum b/debian/examples/network/if-down.d/sendmail.md5sum new file mode 100644 index 0000000..6afd10a --- /dev/null +++ b/debian/examples/network/if-down.d/sendmail.md5sum @@ -0,0 +1 @@ +fb749db92b73eca0480702c59f6b09ed sendmail diff --git a/debian/examples/network/if-post-down.d/sendmail b/debian/examples/network/if-post-down.d/sendmail new file mode 100644 index 0000000..5cb9322 --- /dev/null +++ b/debian/examples/network/if-post-down.d/sendmail @@ -0,0 +1,42 @@ +#!/bin/sh +# +# This script is called when a network device goes down. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# + +# These variables are for the use of the scripts run by run-parts +#IFACE=; +#IF_ADDRESS=; +#IF_PROVIDER=; + +if [ ! -z "$IFACE" ]; then + addr=$IF_ADDRESS; + provider=$IF_PROVIDER; + iface=$IFACE; +else + addr=$1; + provider=$2; + iface=$3; + fi; + +if [ -z "$provider" ]; then + exit 0; + fi; + +# Bring in some script functions to handle dynamic configuration +. /usr/share/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$iface" "STOP"; + +# If anything has been changed, update sendmail.cf and reload +update_sendmail "ifupdown"; + +exit 0; diff --git a/debian/examples/network/if-post-down.d/sendmail.1.old b/debian/examples/network/if-post-down.d/sendmail.1.old new file mode 100644 index 0000000..88e719e --- /dev/null +++ b/debian/examples/network/if-post-down.d/sendmail.1.old @@ -0,0 +1,57 @@ +#!/bin/sh +# +# This script is called when ppp disconnects from the network. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# Exit by default, check for validity before commenting out the next line: +exit 0; + +# Purge any latent host status that might cause us to *NOT* send mail +AM='-Am'; +if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then + AM=''; + fi; +sendmail $AM -bH -O Timeout.hoststatus=1s; + +# New mail will only be queued +file="/etc/mail/dialup.m4"; +if [ -f "$file" ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/dialup.m4')dnl + # + # sendmail is to only queue messages until connected again + define(\`confDELIVERY_MODE', \`deferred')dnl + # + # Allow the queue to age without carping every four hours + define(\`confTO_QUEUEWARN',\`1d')dnl + # + # Don't keep host status while the network is down + define(\`confHOST_STATUS_DIRECTORY')dnl + #------------------------------------------------------------ + EOT + fi; + +# Build a new sendmail.cf from sendmail.mc, including our address. +# NOTE: The following line (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4') +m4 /etc/mail/sendmail.mc \ + > /etc/mail/sendmail.cf.pnew; +chmod 0644 /etc/mail/sendmail.cf.pnew; +chown mail:mail /etc/mail/sendmail.cf.pnew; +mv -f /etc/mail/sendmail.cf.pnew /etc/mail/sendmail.cf; + +# Stop/reload sendmail daemon as needed +/etc/init.d/sendmail reload; diff --git a/debian/examples/network/if-post-down.d/sendmail.in b/debian/examples/network/if-post-down.d/sendmail.in new file mode 100644 index 0000000..254445b --- /dev/null +++ b/debian/examples/network/if-post-down.d/sendmail.in @@ -0,0 +1,42 @@ +#!/bin/sh +# +# This script is called when a network device goes down. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# + +# These variables are for the use of the scripts run by run-parts +#IFACE=; +#IF_ADDRESS=; +#IF_PROVIDER=; + +if [ ! -z "$IFACE" ]; then + addr=$IF_ADDRESS; + provider=$IF_PROVIDER; + iface=$IFACE; +else + addr=$1; + provider=$2; + iface=$3; + fi; + +if [ -z "$provider" ]; then + exit 0; + fi; + +# Bring in some script functions to handle dynamic configuration +. @datadir@/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$iface" "STOP"; + +# If anything has been changed, update sendmail.cf and reload +update_sendmail "ifupdown"; + +exit 0; diff --git a/debian/examples/network/if-post-down.d/sendmail.md5sum b/debian/examples/network/if-post-down.d/sendmail.md5sum new file mode 100644 index 0000000..6afd10a --- /dev/null +++ b/debian/examples/network/if-post-down.d/sendmail.md5sum @@ -0,0 +1 @@ +fb749db92b73eca0480702c59f6b09ed sendmail diff --git a/debian/examples/network/if-up.d/sendmail.1.old b/debian/examples/network/if-up.d/sendmail.1.old new file mode 100644 index 0000000..cae3e1f --- /dev/null +++ b/debian/examples/network/if-up.d/sendmail.1.old @@ -0,0 +1,130 @@ +#!/bin/sh +# +# This script is called when ppp connects to the network. +# +# Here is where we'll start sendmail if needed, and will +# run the queue in either case. +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# ALSO: make sure ipparam is specified somewhere in the ppp options; +# it will be used as the name of a file in /etc/mail/peers +# +# Exit by default, check for validity before commenting out the next line: +exit 0; + +# Define our domain name (from PPP) for sendmail. + +# These variables are for the use of the scripts run by run-parts +#PPP_IFACE="$1"; +#PPP_TTY="$2"; +#PPP_SPEED="$3"; +#PPP_LOCAL="$4"; +#PPP_REMOTE="$5"; +#PPP_IPPARAM="$6"; + +if [ ! -z "$PPP_LOCAL" ]; then + addr=$PPP_LOCAL; + provider=$PPP_IPPARAM; +else + addr=$1; + provider=$2; + fi; + +# Determine our fqdn from our ISP +maxloop=20; +cntr=0; +name=""; +until (test ! -z "$name"); do + cntr=$(($cntr+1)); + rev=$(host $addr); + name=$(echo "$rev" | grep '^Name:' | awk '{print $2}'); + if [ -z "$name" ]; then + name=${rev##*domain name pointer }; + name=${name%.}; + fi; + test=$(echo $name | cut -d ' ' -f 1); + if [ "$name" != "**" ]; then + break; + elif (($cntr > $maxloop)); then + name=''; + break; + fi; + done; +echo "addr=$addr, name=$name"; + +file="/etc/mail/dialup.m4"; +#file="dialup.m4"; +if [ ! -z "$name" ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/dialup.m4')dnl + # + # Chose one of the following options: + # * Add our true hostname as a Virtual Host (we'll accept + # mail for it, but keep our local name for SMTP AUTH, etc) + dnl C{VirtHost}$name + # * Define our true hostname (from our ISP) becomes \$j + dnl define(\`confDOMAIN_NAME', \`$name')dnl + # + # Make sure we accept mail as this name (for bounces, etc) + Cw$name + # Add our hostname to class G for genericstable support + CG$name + #------------------------------------------------------------ + EOT + fi; + +# Add smarthost information (if any)... But not if provider.m4 is a link ! +file="/etc/mail/provider.m4"; +#file="provider.m4"; +if [ -f /etc/mail/peers/$provider -a ! -L $file ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/provider.m4')dnl + # + # Provider information from /etc/mail/peers/$provider + EOT + cat /etc/mail/peers/$provider >> $file; + cat <<-EOT >> $file; + #------------------------------------------------------------ + EOT + fi; +#exit 0 + +# Build a new sendmail.cf from sendmail.mc, including our address. +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +m4 /etc/mail/sendmail.mc \ + > /etc/mail/sendmail.cf.pnew; +chmod 0644 /etc/mail/sendmail.cf.pnew; +chown mail:mail /etc/mail/sendmail.cf.pnew; +mv -f /etc/mail/sendmail.cf.pnew /etc/mail/sendmail.cf; + +# Purge any latent host status that might cause us to *NOT* send mail +AM='-Am'; +if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then + AM=''; + fi; +sendmail $AM -bH -O Timeout.hoststatus=1s; + +# Start/reload sendmail as needed +/etc/init.d/sendmail reload; # may be up, or down + +# Process the sendmail queue (background so as to not defer other ip-up work) +runq & diff --git a/debian/examples/network/if-up.d/sendmail.in b/debian/examples/network/if-up.d/sendmail.in new file mode 100644 index 0000000..f0d58d1 --- /dev/null +++ b/debian/examples/network/if-up.d/sendmail.in @@ -0,0 +1,63 @@ +#!/bin/sh +# +# This script is called when a network device comes up. +# +# Here is where we'll start sendmail if needed. +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# ALSO: make sure to use a 'provider <isp>' tag in /etc/network/interfaces +# it will be used as the name of a file in /etc/mail/peers +# If you don't use provider, we'll use DNS_DOMAIN, or lacking that, +# the first entry in DNS_SEARCH +# + + +# These variables are for the use of the scripts run by run-parts +#IFACE=; <-- ifupdown +#IF_ADDRESS=; <-- ifupdown +#IF_PROVIDER=; <-- sendmail specific +#IF_DNS_DOMAIN=; <-- resolvconf +#IF_DNS_SEARCH=; <-- resolvconf + +if [ ! -z "$IFACE" ]; then + addr=$IF_ADDRESS; + if [ -n "$IF_PROVIDER" ]; then + provider="$IF_PROVIDER"; + elif [ -n "$IF_DNS_DOMAIN" ]; then + provider="$IF_DNS_DOMAIN"; + elif [ -n "$IF_DNS_SEARCH" ]; then + provider=$(echo "$IF_DNS_SEARCH" | /usr/bin/cut -d' ' -f 1); + fi; + iface=$IFACE; +else + addr=$1; + provider=$2; + iface=$3; + fi; + +# Bring in some script functions to handle dynamic configuration +. @datadir@/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$iface" "BOUND"; + +# If the domain name has changed, update the provider information +if [ -n "$provider" ]; then + update_provider "$provider"; + fi; + +# If the ip address has changed, update the host information +if [ -n "$addr" ]; then + update_host "$addr"; + fi; + +# If anything has been changed, update sendmail.cf and reload +update_sendmail "ifupdown"; + +exit 0; + diff --git a/debian/examples/network/if-up.d/sendmail.md5sum b/debian/examples/network/if-up.d/sendmail.md5sum new file mode 100644 index 0000000..d8e607f --- /dev/null +++ b/debian/examples/network/if-up.d/sendmail.md5sum @@ -0,0 +1 @@ +2b0ad0f52c1c7562311b6a4f49340072 sendmail diff --git a/debian/examples/pam.d/smtp b/debian/examples/pam.d/smtp new file mode 100644 index 0000000..1412137 --- /dev/null +++ b/debian/examples/pam.d/smtp @@ -0,0 +1,15 @@ +#%PAM-1.0 +#------------------------------------------------------------------------ +# +# /etc/pam.d/smtp +# +# Copyright (c) 2000-2003 Richard Nelson. All Rights Reserved. +# Version: 2.0.1 +# Time-stamp: <2003/05/06 12:00:00 cowboy> +# +# PAM configuration file used by SASL to authenticate a PLAIN password. +# +#------------------------------------------------------------------------ +@include common-auth +@include common-account +#@include common-password diff --git a/debian/examples/pam.d/smtp.md5sum b/debian/examples/pam.d/smtp.md5sum new file mode 100644 index 0000000..4ceae1c --- /dev/null +++ b/debian/examples/pam.d/smtp.md5sum @@ -0,0 +1 @@ +44980f7978afc8051a84b3414e628613 smtp diff --git a/debian/examples/ppp/ip-down.d/sendmail.1.old b/debian/examples/ppp/ip-down.d/sendmail.1.old new file mode 100644 index 0000000..88e719e --- /dev/null +++ b/debian/examples/ppp/ip-down.d/sendmail.1.old @@ -0,0 +1,57 @@ +#!/bin/sh +# +# This script is called when ppp disconnects from the network. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# Exit by default, check for validity before commenting out the next line: +exit 0; + +# Purge any latent host status that might cause us to *NOT* send mail +AM='-Am'; +if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then + AM=''; + fi; +sendmail $AM -bH -O Timeout.hoststatus=1s; + +# New mail will only be queued +file="/etc/mail/dialup.m4"; +if [ -f "$file" ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/dialup.m4')dnl + # + # sendmail is to only queue messages until connected again + define(\`confDELIVERY_MODE', \`deferred')dnl + # + # Allow the queue to age without carping every four hours + define(\`confTO_QUEUEWARN',\`1d')dnl + # + # Don't keep host status while the network is down + define(\`confHOST_STATUS_DIRECTORY')dnl + #------------------------------------------------------------ + EOT + fi; + +# Build a new sendmail.cf from sendmail.mc, including our address. +# NOTE: The following line (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4') +m4 /etc/mail/sendmail.mc \ + > /etc/mail/sendmail.cf.pnew; +chmod 0644 /etc/mail/sendmail.cf.pnew; +chown mail:mail /etc/mail/sendmail.cf.pnew; +mv -f /etc/mail/sendmail.cf.pnew /etc/mail/sendmail.cf; + +# Stop/reload sendmail daemon as needed +/etc/init.d/sendmail reload; diff --git a/debian/examples/ppp/ip-down.d/sendmail.in b/debian/examples/ppp/ip-down.d/sendmail.in new file mode 100644 index 0000000..71f42b6 --- /dev/null +++ b/debian/examples/ppp/ip-down.d/sendmail.in @@ -0,0 +1,47 @@ +#!/bin/sh +# +# This script is called when ppp disconnects from the network. +# +# Here is where we'll stop sendmail if needed +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# + +# These variables are for the use of the scripts run by run-parts +#PPP_IFACE="$1"; +#PPP_TTY="$2"; +#PPP_SPEED="$3"; +#PPP_LOCAL="$4"; +#PPP_REMOTE="$5"; +#PPP_IPPARAM="$6"; + +if [ ! -z "$PPP_LOCAL" ]; then + addr=$PPP_LOCAL; + provider=$PPP_IPPARAM; + iface=$PPP_IFACE; +else + addr=$1; + provider=$2; + iface=$3; + fi; + +if [ -z "$provider" ]; then + exit 0; + fi; + +# Bring in some script functions to handle dynamic configuration +. @datadir@/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$iface" "STOP"; + +# If anything has been changed, update sendmail.cf and reload +# Actually, we'll delay the reload because we'll be hit in a moment +# to handle the change by /etc/network/if-up.d/sendmail +update_sendmail "ppp" Delayed; + +exit 0; diff --git a/debian/examples/ppp/ip-down.d/sendmail.md5sum b/debian/examples/ppp/ip-down.d/sendmail.md5sum new file mode 100644 index 0000000..6afd10a --- /dev/null +++ b/debian/examples/ppp/ip-down.d/sendmail.md5sum @@ -0,0 +1 @@ +fb749db92b73eca0480702c59f6b09ed sendmail diff --git a/debian/examples/ppp/ip-up.d/sendmail.1.old b/debian/examples/ppp/ip-up.d/sendmail.1.old new file mode 100644 index 0000000..cae3e1f --- /dev/null +++ b/debian/examples/ppp/ip-up.d/sendmail.1.old @@ -0,0 +1,130 @@ +#!/bin/sh +# +# This script is called when ppp connects to the network. +# +# Here is where we'll start sendmail if needed, and will +# run the queue in either case. +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# ALSO: make sure ipparam is specified somewhere in the ppp options; +# it will be used as the name of a file in /etc/mail/peers +# +# Exit by default, check for validity before commenting out the next line: +exit 0; + +# Define our domain name (from PPP) for sendmail. + +# These variables are for the use of the scripts run by run-parts +#PPP_IFACE="$1"; +#PPP_TTY="$2"; +#PPP_SPEED="$3"; +#PPP_LOCAL="$4"; +#PPP_REMOTE="$5"; +#PPP_IPPARAM="$6"; + +if [ ! -z "$PPP_LOCAL" ]; then + addr=$PPP_LOCAL; + provider=$PPP_IPPARAM; +else + addr=$1; + provider=$2; + fi; + +# Determine our fqdn from our ISP +maxloop=20; +cntr=0; +name=""; +until (test ! -z "$name"); do + cntr=$(($cntr+1)); + rev=$(host $addr); + name=$(echo "$rev" | grep '^Name:' | awk '{print $2}'); + if [ -z "$name" ]; then + name=${rev##*domain name pointer }; + name=${name%.}; + fi; + test=$(echo $name | cut -d ' ' -f 1); + if [ "$name" != "**" ]; then + break; + elif (($cntr > $maxloop)); then + name=''; + break; + fi; + done; +echo "addr=$addr, name=$name"; + +file="/etc/mail/dialup.m4"; +#file="dialup.m4"; +if [ ! -z "$name" ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/dialup.m4')dnl + # + # Chose one of the following options: + # * Add our true hostname as a Virtual Host (we'll accept + # mail for it, but keep our local name for SMTP AUTH, etc) + dnl C{VirtHost}$name + # * Define our true hostname (from our ISP) becomes \$j + dnl define(\`confDOMAIN_NAME', \`$name')dnl + # + # Make sure we accept mail as this name (for bounces, etc) + Cw$name + # Add our hostname to class G for genericstable support + CG$name + #------------------------------------------------------------ + EOT + fi; + +# Add smarthost information (if any)... But not if provider.m4 is a link ! +file="/etc/mail/provider.m4"; +#file="provider.m4"; +if [ -f /etc/mail/peers/$provider -a ! -L $file ]; then + cat <<-EOT > $file; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic updates from $0 + # + # NOTE: the following line *MUST* be in /etc/mail/sendmail.mc + dnl include(\`/etc/mail/provider.m4')dnl + # + # Provider information from /etc/mail/peers/$provider + EOT + cat /etc/mail/peers/$provider >> $file; + cat <<-EOT >> $file; + #------------------------------------------------------------ + EOT + fi; +#exit 0 + +# Build a new sendmail.cf from sendmail.mc, including our address. +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +m4 /etc/mail/sendmail.mc \ + > /etc/mail/sendmail.cf.pnew; +chmod 0644 /etc/mail/sendmail.cf.pnew; +chown mail:mail /etc/mail/sendmail.cf.pnew; +mv -f /etc/mail/sendmail.cf.pnew /etc/mail/sendmail.cf; + +# Purge any latent host status that might cause us to *NOT* send mail +AM='-Am'; +if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then + AM=''; + fi; +sendmail $AM -bH -O Timeout.hoststatus=1s; + +# Start/reload sendmail as needed +/etc/init.d/sendmail reload; # may be up, or down + +# Process the sendmail queue (background so as to not defer other ip-up work) +runq & diff --git a/debian/examples/ppp/ip-up.d/sendmail.in b/debian/examples/ppp/ip-up.d/sendmail.in new file mode 100644 index 0000000..191b9a8 --- /dev/null +++ b/debian/examples/ppp/ip-up.d/sendmail.in @@ -0,0 +1,57 @@ +#!/bin/sh +# +# This script is called when ppp connects to the network. +# +# Here is where we'll start sendmail if needed. +# +# Written By Richard Nelson <cowboy@debian.org> +# +# NOTE: The following lines (without the #) must be in /etc/mail/sendmail.mc: +# include(`/etc/mail/dialup.m4')dnl +# include(`/etc/mail/provider.m4')dnl +# +# ALSO: make sure ipparam is specified somewhere in the ppp options; +# it will be used as the name of a file in /etc/mail/peers +# + +# Define our domain name (from PPP) for sendmail. + +# These variables are for the use of the scripts run by run-parts +#PPP_IFACE="$1"; +#PPP_TTY="$2"; +#PPP_SPEED="$3"; +#PPP_LOCAL="$4"; +#PPP_REMOTE="$5"; +#PPP_IPPARAM="$6"; + +if [ ! -z "$PPP_LOCAL" ]; then + addr=$PPP_LOCAL; + provider=$PPP_IPPARAM; + iface=$PPP_IFACE; +else + addr=$1; + provider=$2; + iface=$3; + fi; + +if [ -z "$provider" ]; then + exit 0; + fi; + +# Bring in some script functions to handle dynamic configuration +. @datadir@/sendmail/dynamic; + +# Note the interface that just changed +update_interface "$iface" "BOUND"; + +# If the domain name has changed, update the provider information +update_provider "$provider"; + +# If the ip address has changed, update the host information +update_host "$addr"; + +# If anything has been changed, update sendmail.cf and reload +update_sendmail "ppp"; + +exit 0; + diff --git a/debian/examples/ppp/ip-up.d/sendmail.md5sum b/debian/examples/ppp/ip-up.d/sendmail.md5sum new file mode 100644 index 0000000..d8e607f --- /dev/null +++ b/debian/examples/ppp/ip-up.d/sendmail.md5sum @@ -0,0 +1 @@ +2b0ad0f52c1c7562311b6a4f49340072 sendmail diff --git a/debian/examples/resolvconf/update-libc.d/sendmail.in b/debian/examples/resolvconf/update-libc.d/sendmail.in new file mode 100644 index 0000000..31a1638 --- /dev/null +++ b/debian/examples/resolvconf/update-libc.d/sendmail.in @@ -0,0 +1,13 @@ +#!/bin/sh + +# Make sendmail aware of changes to resolv.conf +# so that we can reset the statistics for unresolvable hostnames + +# Bring in some script functions to handle dynamic configuration +. /usr/share/sendmail/dynamic; + +# Note the interface that just changed - unfortunately, we know not how :( +update_resolv; + +# If anything has been changed, update sendmail.cf and reload +update_sendmail; diff --git a/debian/examples/sasl/Sendmail.conf.1 b/debian/examples/sasl/Sendmail.conf.1 new file mode 100644 index 0000000..5456864 --- /dev/null +++ b/debian/examples/sasl/Sendmail.conf.1 @@ -0,0 +1,20 @@ +#Currently configurable parameters: +#- srvtab (for KERBEROS_V4): [/etc/srvtab] path +# where to find the srvtab +# +#- pwcheck_method: [PAM] one of {PAM, kerberos_v4, passwd, shadow, sasldb} +# how to check plaintext passwords. +# +#- auto_transition: [false] +# if true, automatically add secrets to the secret database when +# PLAIN or check_password is used, so in the future the user can +# use the more secure mechanisms. +# +#*** For a more detailed guide on configuring SASL, please look at +#doc/sysadmin.html. +# +auto_transition: true +#pwcheck_method: sasldb +#pwcheck_method: saslauthd +#pwcheck_method: PAM +pwcheck_method: PAM diff --git a/debian/examples/sasl/Sendmail.conf.2 b/debian/examples/sasl/Sendmail.conf.2 new file mode 100644 index 0000000..81f2a0e --- /dev/null +++ b/debian/examples/sasl/Sendmail.conf.2 @@ -0,0 +1,28 @@ +#Currently configurable parameters: +#- srvtab (for KERBEROS_V4): [/etc/srvtab] path +# where to find the srvtab +# +#- pwcheck_method: [PAM] one of {PAM, kerberos_v4, passwd, shadow, sasldb} +# how to check plaintext passwords. +# +#- auto_transition: [false] +# if true, automatically add secrets to the secret database when +# PLAIN or check_password is used, so in the future the user can +# use the more secure mechanisms. +# +#*** For a more detailed guide on configuring SASL, please look at +#doc/sysadmin.html. +# +pwcheck_method: saslauthd +# +# If you need plain text, the following converts plain to more secure +# and allow plaintext from pam/ldap/etc +#auto_transition: true +#pwcheck_method: auxprop saslauthd +#auxprop_plugin: sasldb +# +# How paranoid are you ? +allowanonymouslogin: 0 +allowplaintext: 1 +mech_list: EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN + diff --git a/debian/examples/sasl/sasl.m4.in b/debian/examples/sasl/sasl.m4.in new file mode 100644 index 0000000..f1afcf8 --- /dev/null +++ b/debian/examples/sasl/sasl.m4.in @@ -0,0 +1,81 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: sasl.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2003-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# sasl.m4 m4 file to support user->MTA, MSP->MTA, and MTA->MTA +# encryption and/or authentication. +# +# To use this file, add this line to sendmail.mc and possibly submit.mc: +# `include(`@sysconfdir@/mail/sasl/sasl.m4')dnl' +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +VERSIONID(`$Id: sasl.m4, v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(`sm_version', `dnl' , +`include(`@datadir@/sendmail/cf/debian/autoconf.m4')')dnl +dnl # +dnl #--------------------------------------------------------------------- +dnl # SMTP AUTH (SASL) support (sendmail 8.10.0 +) +dnl # PLAIN/LOGIN needed to support SASL auth via PAM ;( +dnl # if this bothers you, you allow them only in conjunction w/STARTTLS ! +dnl #--------------------------------------------------------------------- +ifelse(eval(sm_version_math >= 526848), `1', `dnl +ifelse(sm_enable_auth, `yes', `dnl +dnl # +dnl # Set a more reasonable timeout on negotiation +dnl # +define(`confTO_AUTH', `2m')dnl # , def=10m +dnl # +dnl # Do not touch anything above this line... +dnl # +dnl # Available Authentication methods +dnl # +define(`confAUTH_MECHANISMS',dnl +`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl +dnl # +dnl # These, we will trust for relaying +dnl # +TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN') +dnl # +dnl # for 8.12.0+, add EXTERNAL as an available & trusted mech (w/STARTTLS) +dnl # and allow sharing of /etc/sasldb(2) file, allow group read/write +dnl # +ifelse(eval(sm_version_math >= 527360), `1', `dnl +define(`confAUTH_MECHANISMS',dnl +`EXTERNAL 'defn(`confAUTH_MECHANISMS'))dnl +TRUST_AUTH_MECH(`EXTERNAL') +define(`confDONT_BLAME_SENDMAIL',dnl +defn(`confDONT_BLAME_SENDMAIL')`,GroupReadableSASLDBFile,GroupWritableSASLDBFile')dnl +')dnl +dnl # +dnl # To support SMTP AUTH in `sendmail -bs' : +dnl # Sigh: SASLV1 MSP AUTH does not work in -bs mode (/etc/sasldb !o+r) +dnl # so, we have the MSP not use Auth (or ETRN) +dnl # SASLV2 (w/saslauth) chose to prohibit user authentication - it can +dnl # be made to work by: +dnl # 1) changing /etc/sasldb2 {root,sasl,smmta}:smmsp 0660 +dnl # 2) dpkg-statoverride --remove /var/run/saslauthd +dnl # 3) dpkg-statoverride --add root sasl 711 /var/run/saslauthd +dnl # +ifelse(eval(sm_auth_lib < 2), `1', `dnl +ifdef(`DEBIAN_MSP', `dnl +ifelse(defn(`_DPO_'), `', `dnl +DAEMON_OPTIONS(`Name=NoMTA, Addr=0.0.0.0, M=EA')dnl +')')')dnl +dnl # +dnl # Define the REALM passed to sasl (8.13.0+) +ifelse(eval(sm_version_math >= 527616), `1', `dnl +dnl define(`confAUTH_REALM', `')dnl # Fill this in and uncomment it +')dnl +dnl # +dnl # Do not touch anything below this line... +')')dnl diff --git a/debian/examples/sasl/saslpasswd.conf.1 b/debian/examples/sasl/saslpasswd.conf.1 new file mode 100644 index 0000000..bc9a86e --- /dev/null +++ b/debian/examples/sasl/saslpasswd.conf.1 @@ -0,0 +1,17 @@ +#Currently configurable parameters: +#- srvtab (for KERBEROS_V4): [/etc/srvtab] path +# where to find the srvtab +# +#- pwcheck_method: [PAM] one of {PAM, kerberos_v4, passwd, shadow, sasldb} +# how to check plaintext passwords. +# +#- auto_transition: [false] +# if true, automatically add secrets to the secret database when +# PLAIN or check_password is used, so in the future the user can +# use the more secure mechanisms. +# +#*** For a more detailed guide on configuring SASL, please look at +#doc/sysadmin.html. +# +auto_transition: true +pwcheck_method: sasldb diff --git a/debian/examples/sasl/saslpasswd.conf.2 b/debian/examples/sasl/saslpasswd.conf.2 new file mode 100644 index 0000000..e2f849b --- /dev/null +++ b/debian/examples/sasl/saslpasswd.conf.2 @@ -0,0 +1,21 @@ +#Currently configurable parameters: +#- srvtab (for KERBEROS_V4): [/etc/srvtab] path +# where to find the srvtab +# +#- pwcheck_method: [PAM] one of {PAM, kerberos_v4, passwd, shadow, sasldb} +# how to check plaintext passwords. +# +#- auto_transition: [false] +# if true, automatically add secrets to the secret database when +# PLAIN or check_password is used, so in the future the user can +# use the more secure mechanisms. +# +#*** For a more detailed guide on configuring SASL, please look at +#doc/sysadmin.html. +# +#auto_transition: true +pwcheck_method: saslauthd +#auxprop_plugin: sasldb +allowanonymouslogin: 0 +allowplaintext: 1 +mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 diff --git a/debian/examples/tls/starttls.m4.in b/debian/examples/tls/starttls.m4.in new file mode 100644 index 0000000..dd45c0a --- /dev/null +++ b/debian/examples/tls/starttls.m4.in @@ -0,0 +1,61 @@ +divert(-1)dnl +#----------------------------------------------------------------------------- +# $Sendmail: starttls.m4,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 2002-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# starttls.m4 m4 file to support user->MTA, MSP->MTA, and MTA->MTA +# encryption and/or authentication. +# +# To use this file, add this line to sendmail.mc and possibly submit.mc: +# `include(`@sysconfdir@/mail/tls/starttls.m4')dnl' +# +#----------------------------------------------------------------------------- +# +divert(0)dnl +VERSIONID(`$Id: starttls.m4,v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp $') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(`sm_version', `dnl', +`include(`@datadir@/sendmail/cf/debian/autoconf.m4')dnl') +dnl # +dnl # Check to see if inclusion is valid (version >= 8.11.0, tls enabled) +ifelse(eval(sm_version_math >= 527104), `1', `dnl +ifelse(sm_enable_tls, `yes', `dnl +dnl # +dnl # To support shared keyfiles, we need it to be group readable +dnl # +define(`confDONT_BLAME_SENDMAIL',dnl + defn(`confDONT_BLAME_SENDMAIL')`,GroupReadableKeyFile')dnl +dnl # +dnl # Set a more reasonable timeout on negotiation +dnl # +define(`confTO_STARTTLS', `2m')dnl # , def=10m +dnl # +dnl # Do not touch anything above this line... +dnl # +dnl # CA directory - CA certs should be herein +define(`confCACERT_PATH', `@sysconfdir@/ssl/certs')dnl +dnl # +dnl # CA file (may be the same as client/server certificate) +define(`confCACERT', `@sysconfdir@/mail/tls/sendmail-server.crt')dnl +dnl # +dnl # Server certificate/key (can be in the same file, and shared w/client) +dnl # NOTE: The key must *NOT* be encrypted !!! +define(`confSERVER_CERT', `@sysconfdir@/mail/tls/sendmail-server.crt')dnl +define(`confSERVER_KEY', `@sysconfdir@/mail/tls/sendmail-common.key')dnl +dnl # +dnl # Clien certificate/key (can be in the same file, and shared w/server) +dnl # NOTE: The key must *NOT* be encrypted !!! +define(`confCLIENT_CERT', `@sysconfdir@/mail/tls/sendmail-client.crt')dnl +define(`confCLIENT_KEY', `@sysconfdir@/mail/tls/sendmail-common.key')dnl +dnl # +dnl # Optional settings +define(`confTLS_SRV_OPTIONS', `V')dnl # do not request user certs +dnl # +dnl # Do not touch anything below this line... +')')dnl diff --git a/debian/faq.txt b/debian/faq.txt new file mode 100644 index 0000000..4738894 --- /dev/null +++ b/debian/faq.txt @@ -0,0 +1,3747 @@ + + Frequently Asked Questions + +Last updated April 3, 2007 + _________________________________________________________________ + +Top 5 - the most frequently asked questions about sendmail + + 1. Local config error: see 4.5 + 2. Relaying denied: see 3.27 + 3. Directory permissions: see 3.33 + 4. Virtual hosting: see 3.7 & 3.28 + 5. POP / IMAP: see 4.19 + _________________________________________________________________ + +Table of Contents + + * 0. Plain-text version now available. + * 1. COPYRIGHT NOTICE / REDISTRIBUTION REQUIREMENTS + * 2. INTRODUCTION / MISCELLANEOUS + + 2.1 What is this newsgroup? + + 2.2 What is the scope of this FAQ? + + 2.3 Where can I find the latest version of this FAQ? + + 2.4 Where can I send comments, questions and bug reports? + + 2.5 Where can I ask email-related DNS questions? + + 2.6 How can I subscribe to these newsgroups? + + 2.7 Which version of sendmail should I run? + + 2.8 What is the latest release of sendmail? + + 2.9 Where can I find it? + + 2.10 What are the differences between Version 8 and other + versions? + + 2.11 What's the best platform for running sendmail? + + 2.12 What is BIND and where can I get the latest version? + + 2.13 What is smrsh and where can I get it? + + 2.14 What is smap and where can I get it? + + 2.15 What is TCP-Wrappers and where can I get it? + + 2.16 Why won't db 1.85 build on my machine? + + 2.17 What is makemap and where can I get it? + * 3. VERSION 8 SPECIFIC ISSUES + + 3.1 How do I make all my addresses appear to be from a single + host? + + 3.2 How do I rewrite my "From:" lines to read + ``First_Last@My.Domain'' or ``Different_Name@My.Domain''? + + 3.3 But what about fully-qualified addresses, such as those + from Pine or FEATURE(always_add_domain)? + + 3.4 So what was the user database feature intended for? + + 3.5 Why the hostility toward using full names for email + addresses? + + 3.6 deprecated + + 3.7 How do I manage several (virtual) domains? + + 3.8 There are four UUCP mailers listed in the configuration + files. Which one should I use? + + 3.9 deprecated + + 3.10 How do I solve "collect: I/O error on connection" or + "reply: read error from host.name" errors? + + 3.11 Why can't my users forward their mail to a program? + + 3.12 Why do connections to the SMTP port take such a long + time? + + 3.13 Why do I get "unknown mailer error 5 -- mail: options + MUST PRECEDE recipients" errors? + + 3.14 Why does version 8 sendmail panic my SunOS box? + + 3.15 Why does the Unix From line get mysteriously munged when + I send to an alias? + + 3.16 Why doesn't MASQUERADE_AS (or the user database) work + for envelope addresses as well as header addresses? + + 3.17 How do I run version 8 sendmail and support the MAIL11V3 + protocol? + + 3.18 Why do messages disappear from my queue unsent? + + 3.19 When is sendmail going to support RFC 2047 MIME header + encoding? + + 3.20 Why can't I get mail to some places, but instead always + get the error "reply: read error from name.of.remote.host"? + + 3.21 Why doesn't "FEATURE(xxx)" work? + + 3.22 How do I configure sendmail not to use DNS? + + 3.23 How do I get all my queued mail delivered to my Unix box + from my ISP? + + 3.24 Why do I get the error message unable to write + /etc/mail/sendmail.pid? + + 3.25 Why can't I compile sendmail with Berkeley DB 2.X? + + 3.26 What operating systems has Berkeley sendmail been ported + to? + + 3.27 How do I prevent Relaying Denied errors for my clients? + + 3.28 Why isn't virtual hosting working, even after I added a + Kvirtuser line to sendmail.cf ? + + 3.29 How can I add a header specifying the actual recipient + when having multiple users in a virtual domain go to a single + mailbox? + + 3.30 What do I do when Build fails because groff was not + found? + + 3.31 What does "class hash not available" mean? + + 3.32 How do I configure majordomo with sendmail 8.9 without + relaxing the DontBlameSendmail option? + + 3.33 How do I configure my system in general with sendmail + 8.9? + + 3.34 What does "foo not available for sendmail programs" + mean? + + 3.35 How do I add a footer/signature to all (outgoing) e-mail + messages? + + 3.36 What does "Cannot open hash database ... Invalid + argument" mean? + + 3.37 What does "parse error before `NDBM'" mean? + + 3.38 What does "may be forged" mean? + + 3.39 How do I send using an alternate port? + + 3.40 Why can't I use BerkeleyDB 4.1.x? + + 3.41 How do I use CIDR notation in the access map (or other + places)? + + 3.42 Why isn't CIDR notation directly supported by sendmail? + + 3.43 What does "Need to recompile with -DNEWDB for hash + support" mean? + + 3.44 I disabled sendmail on some machines which don't receive + mail, but since upgrading to 8.12 they can't send mail + either; why? + * 4. GENERAL SENDMAIL ISSUES + + 4.1 Should I use a wildcard MX for my domain? + + 4.2 How can I set up an auto-responder? + + 4.3 How can I get sendmail to deliver local mail to + $HOME/.mail instead of into /usr/spool/mail (or /usr/mail)? + + 4.4 Why does it deliver the mail interactively when I'm + trying to get it to go into queue only mode? + + 4.5 How can I solve "MX list for hostname points back to + hostname" and "config error: mail loops back to myself" + messages? + + 4.6 Why does my sendmail process sometimes hang when + connecting over a SLIP/PPP link? + + 4.7 How can I summarize the statistics generated by sendmail + in the syslog? + + 4.8 How can I check my sendmail.cf to ensure that it's + re-writing addresses correctly? + + 4.9 What is procmail, and where can I get it? + + 4.10 How can I solve "cannot alias non-local names" errors? + + 4.11 Is sendmail Year 2000 (Y2K) compliant? + + 4.12 How can I batch remote mail to be sent using my ISP + while delivering local mail immediately? + + 4.13 What does "unknown mailer error 1" mean? + + 4.14 How do I queue mail for another domain? + + 4.15 How do I create attachments with sendmail? + + 4.16 How do I find sendmail's version number? + + 4.17 How do I handle user names with upper-case characters? + + 4.18 What does "NOQUEUE: Null connection from ..." mean? + + 4.19 How do I configure sendmail for POP/IMAP/... ? + + 4.20 How can I automatically copy messages based on sender or + recipient addresses? + + 4.21 How can I send mail to all users? + + 4.22 Why can't I receive external mail? + + 4.23 How do I restrict attachments with sendmail? + + 4.24 Can I get sendmail to verify an entire e-mail address + instead of just the domain? + * 5. VENDOR/OS SPECIFIC SENDMAIL ISSUES + + 5.1 Sun Microsystems SunOS/Solaris 1.x/2.x + o 5.1.1 How can I solve "line 273: replacement $3 out of + bounds" errors? + o 5.1.2 How can I solve "line 445: bad ruleset 96 (50 + max)" errors? + o 5.1.3 Why does version 8 sendmail (< 8.7.5) sometimes + hang under Solaris 2.5? + o 5.1.4 Why can't I use SunOS/Solaris to get email to + certain large sites? + o 5.1.5 Why do I have trouble compiling on Solaris? + o 5.1.6 How does 8.X compare to 8.X+Sun? + + 5.2 IBM AIX + o 5.2.1 The system resource controller always reports + sendmail as "inoperative". What's wrong? + o 5.2.2 Why can't I use AIX to get email to some sites? + o 5.2.3 Why can't I get sendmail 8.7.1 to use MX records + with AIX 3.2.5? + + 5.3 Linux + o 5.3.1 Red Hat + # 5.3.1.1 Why do I have so many sendmail problems + after configuring sendmail with linuxconf? + # 5.3.1.2 I built sendmail.cf from sendmail.mc and it + works until the next reboot of the machine. What is + going on? + # 5.3.1.3 Why can't I receive mail with Red Hat 7.1 + and later? + o 5.3.2 SuSE + # 5.3.2.1 Where is the sendmail.mc file on SuSE + Linux? + * 6. ADDITIONAL INFORMATION SOURCES (RFC 1807 bibliography format) + + 6.1 Reference material devoted exclusively to sendmail + + 6.2 Reference material with chapters or sections on sendmail + + 6.3 Reference material on subjects related to sendmail + + 6.4 World-wide web index pages on sendmail + + 6.5 World-wide web index pages Internet email in general + + 6.6 Online tutorials for sendmail + + 6.7 Online archives of mailing lists and Usenet newsgroups, + relating to Internet email + * 7. THANKS! + + sendmail.org 1. COPYRIGHT NOTICE / REDISTRIBUTION REQUIREMENTS + + The entire contents of this document are copyright 1997 - 2000 by the + Sendmail Consortium, all rights reserved. + + This document may be freely distributed for non-profit purposes + (including, but not limited to: posting to mailing lists, Usenet + newsgroups, and world-wide-web pages; inclusion on CD-ROM or other + distribution media; and insertion into text retrieval systems), so + long as it is the latest version available at the time, all parts are + distributed together, and it is kept completely intact without + editing, changes, deletions, or additions. Non-profit redistribution + in accordance with these guidelines does not require contact with or + approval from the copyright holder. + + Redistribution of this document for profit without express prior + permission is not allowed. At the very least, expect to provide the + copyright holder a free copy of the product (exactly as it would be + sold to customers, all distribution media intact), or a percentage of + the gross revenue from said product and sufficient proof that the + integrity and completeness requirements set for non-profit + distribution will be met. + + In the event that the copyright holder discovers a redistributed + version that is not in compliance with the above requirements, he will + make a good-faith effort to get it corrected or removed, and failing + that, at least note its deprecated status in a new version. Legal + action will likely be taken against redistribution for profit that is + not in compliance with the above requirements. + + + sendmail.org + + 2. INTRODUCTION / MISCELLANEOUS + + * 2.1 What is this newsgroup? + * 2.2 What is the scope of this FAQ? + * 2.3 Where can I find the latest version of this FAQ? + * 2.4 Where can I send comments, questions and bug reports? + * 2.5 Where can I ask email-related DNS questions? + * 2.6 How can I subscribe to these newsgroups? + * 2.7 Which version of sendmail should I run? + * 2.8 What is the latest release of sendmail? + * 2.9 Where can I find it? + * 2.10 What are the differences between Version 8 and other + versions? + * 2.11 What's the best platform for running sendmail? + * 2.12 What is BIND and where can I get the latest version? + * 2.13 What is smrsh and where can I get it? + * 2.14 What is smap and where can I get it? + * 2.15 What is TCP-Wrappers and where can I get it? + * 2.16 Why won't db 1.85 build on my machine? + * 2.17 What is makemap and where can I get it? + _________________________________________________________________ + +Q2.1 -- What is this newsgroup? + + Date: May 28, 1996 + + The Usenet newsgroup comp.mail.sendmail is dedicated to the discussion + of the program named "sendmail" in all its various forms. It is most + commonly found on computers running a flavor of the Operating System + known as Unix, or derived from Unix. + + This program has been ported to other OSes, but those versions have + typically been ported by a particular vendor and are considered + proprietary. There are many versions of sendmail, but the original + author (Eric Allman) is continuing development on a particular version + typically referred to as "Version Eight" or sometimes just "V8". This + is considered by many to be the One True Version. This is also the + version that this FAQ is centered around. + + If you have a question that amounts to "How do I send mail to my + friend?", then you're in the wrong newsgroup. You should first check + with your System or E-Mail Administrator(s), BBS SysOp(s), etc... + before you post your question publicly, since the answer will likely + be very highly dependent on what software and hardware you have. You + also don't want to embarrass yourself publicly, nor do you want to + annoy the kinds of people who are likely to be the counterparts of + your System or E-Mail Administrator(s), BBS SysOp(s), etc.... If + asking them doesn't do you any good, make sure you read this FAQ and + the other mail-related FAQs at the archive sites listed below. + + If you have a question about another program similar to sendmail + (technically referred to as an "SMTP MTA"), an SMTP Gateway package, + or a LAN email package, then you should see if there is another group + in the comp.mail hierarchy that more closely matches the particular + program you want to ask a question about. For example, the SMTP MTA + known as Smail has comp.mail.smail dedicated to it. The Mail User + Agent (MUA) Eudora has two newsgroups dedicated to it + (comp.mail.eudora.mac and comp.mail.eudora.ms-windows), depending on + which hardware platform you use. If there isn't a more appropriate + newsgroup, try comp.mail.misc. Again, make sure your question isn't + already addressed in one of the mail-related FAQs or other available + documentation. See the IMC website (more info below) for a good list + of mail-related FAQs. + + If you have a question about an older or vendor-proprietary version of + sendmail, be prepared for a lot of answers that amount to "Get V8". + Version 8 isn't a panacea, but it does solve many problems known to + plague previous versions, as well as having many new features that + make it much easier to administer large or complex sites. In many + cases, it makes at least possible what was previously virtually + impossible, and relatively easy the previously difficult. + + There are, of course, many alternative programs that have sprung up in + an attempt to answer one or another weakness or perceived fault of + sendmail, but so far, none of them have had the kind of success it + would require to unseat it as the de facto standard program for + sending Internet mail. Obviously, this forum should not be used to + discuss the merits of any of the alternative programs versus sendmail. + These kinds of discussions should be taken to comp.mail.misc, or you + should agitate to get a new newsgroup or newsgroup hierarchy created + where that sort of thing is acceptable (or even the norm, such as a + comp.mail.advocacy or news:comp.mail.mta.advocacy newsgroup). + _________________________________________________________________ + +Subject: Q2.2 -- What is the scope of this FAQ? + + Date: April 9, 1997 + + This FAQ is strongly centered around version 8 sendmail, for many + reasons. First and foremost, this is the area of most interest on the + part of the maintainers of this FAQ. Secondly, version 8 is where most + of the additional development is being concentrated. Version 8 + sendmail is also the best documented of all SMTP MTAs, by virtue of + the book by Bryan Costales (see entry + sendmail-faq//book/ISBN/1-56592-222-0 in Q6.1). + + Other versions of sendmail get mentioned in passing, and some + interesting interactions between version 8 and various OSes is also + covered. + + This FAQ is aimed primarily at the experienced Unix System + Administrator/Postmaster/DNS Domain Administrator. If you're looking + for introductory texts, see the references in Q6.1. + _________________________________________________________________ + +Q2.3 -- Where can I find the latest version of this FAQ? + + Date: February 20, 1998 + + We post changes as they occur to the sendmail FAQ support page at + http://www.sendmail.org/faq/. + _________________________________________________________________ + +Q2.4 -- Where can I send comments, questions and bug reports? + + Date: April 26, 2006 + + First, please refer to our E-mail Addresses page + (http://www.sendmail.org/misc/email-addresses.php), which has a more + complete answer. + + Next, if you have a question about sendmail, then please post it to + the Usenet group comp.mail.sendmail. This newsgroup is dedicated to + sendmail. Please make sure you check the usual resources before + posting and follow the netiquette. Also, if you do not have access to + an NNTP server, you might want to use Google Groups. + + Finally, e-mail addresses to contact sendmail.org are (do not send + questions about sendmail to these addresses, see above instead; + replace YYYY with the current year, e.g., 2006, in all of these + addresses): + * < sendmail-YYYY (at) support.sendmail.org > for contributing + patches, feature requests, and general comments but not questions + how to use, install, or configure sendmail; + * < sendmail-bugs-YYYY (at) support.sendmail.org > to report + implementation bugs; + * < sendmail-faq-YYYY (at) support.sendmail.org > only for comments + / questions about the FAQ. Please mark your mail clearly with + "FAQ: item" where item is the entry in the faq to which you are + referring. If it is a general comment about the FAQ, use "FAQ: + general", if it is an addition, use "FAQ: new". + * < sendmail-security-YYYY (at) support.sendmail.org > (use this + only to report security related bugs or problems in sendmail). + Please do not use this to ask about problems with your + configuration, including how to stop spam, how to set up your own + certificate authority, how to make sendmail work with S/MIME, etc. + All such questions should be asked in comp.mail.sendmail. Also, + please do not tell us that you were able to forge mail by using + telnet to connect to port 25; this is fundamental to the Internet + design for SMTP, and not a sendmail bug. Please use PGP for + encryption to send mail to this address. + * < sendmail-mirror-YYYY (at) support.sendmail.org > for updates + about a mirror (e.g., a new mirror or an address change). + * < webmaster-YYYY (at) support.sendmail.org > for comments about + the website. + + Note: remove all spaces in those addresses and replace "(at)" with "@" + (without the quotes). + + If you post a message to comp.mail.sendmail and send it to one of the + above addresses, please clearly indicate so at the top of your + message. + + Also, please don't send HTML or graphics; plain text is sufficient. + _________________________________________________________________ + +Q2.5 -- Where can I ask email-related DNS questions? + + Date: March 23, 1996 + + Depending on how deeply they get into the DNS, they can be asked here. + However, you'll probably be told that you should send them to the + Usenet newsgroup comp.protocols.tcp-ip.domains (DNS in general) or to + the Info-BIND mailing list (if the question is specific to that + program). + _________________________________________________________________ + +Q2.6 -- How can I subscribe to these? + + Date: June 19, 1997 + + For comp.protocols.tcp-ip.domains, you have to be on Usenet. They + don't have a news-to-mail gateway yet (I'm working on this), but they + do have a FAQ. + + Questions from all levels of experience can be found on this newsgroup + (as well as people to answer them), so don't be shy about asking a + question you think may be too simple. + + Some more information from the BIND 8.1 src/README file: + + CAPTION: Kits, Questions, Comments, and Bug Reports + + URL Purpose + ftp.isc.org/isc/bind/src/cur current non-test release + ftp.isc.org/isc/bind/src/testing latest public test kit + _________________________________________________________________ + + comp.protocols.dns.bind using BIND + comp.protocols.dns.ops DNS operations in general + comp.protocols.dns.std DNS standards in general + _________________________________________________________________ + + bind-users-request@vix.com gw'd to c.p.d.bind + namedroppers-request@internic.net gw'd to c.p.d.std + bind-workers-request@vix.com code warriors only please + _________________________________________________________________ + + www.isc.org/bind.html the BIND home page + bind-bugs@isc.org bug reports + _________________________________________________________________ + +Q2.7 -- Which version of sendmail should I run? + + Date: April 8, 1997 + Updated: March 7, 2000 + + If you're concerned at all about the security of your machines, you + should make sure you're at least running a recent release of version 8 + sendmail (either from your vendor or the public version detailed in + Q2.8). + + Check the CERT Alerts and Summaries to make sure that you're running a + version that is free of known security holes. Just because the + sendmail program provided by your vendor isn't listed doesn't mean + that you're not vulnerable, however. If your particular vendor or + version isn't listed, check with your vendor and on the appropriate + Internet mailing lists and Usenet newsgroups to verify. + + If nothing else, the most recent public version is usually a pretty + good bet, although you should check comp.mail.sendmail to see if + anyone has posted recent comments that haven't yet been folded into a + new release. + + That said, you need to look at what the primary function is for the + machine. If its primary function is to run some CAD/CAM package on the + desk of an engineer, then there's probably not much sense in replacing + the vendor-supplied version of sendmail (assuming it's secure, + according to the CERT Alerts and Summaries). Just set the machine up + to forward all outbound mail to a central mail relay, and then worry + about making that central mail relay the best it can be. Also arrange + to have all their inbound mail pass through a central Mail eXchanger + (probably the same machine as the central Mail Relay), for the same + reasons. + + If the primary function for a machine is to act as that central Mail + Relay/Mail eXchanger, then we *strongly* recommend the best version of + sendmail you can get, and in our opinion that is the latest release of + version 8. IDA sendmail is also pretty good, but virtually everything + it does, version 8 does better, and version 8 has the additional + advantage of having continued development as well. + + If fighting spam is a concern, then by all means upgrade to 8.10.X . + 8.9.X has good anti-spam features, but 8.10.X has even more features, + and the anti-spam ones are more flexible than those in 8.9.X . + + However, keep in mind that version 8 still hasn't been ported (so far + as we know) to some of the older (and perhaps more esoteric) + platforms, and if you're stuck using one of them, you may not have + much choice. + + Some vendors have started shipping (or announced that they will soon + ship) version 8 sendmail pre-configured for their machines. + Unfortunately, in most cases this means you get a pre-compiled binary + and a sendmail.cf file (that may need a bit of tweaking), but not much + else of the "standard" version 8 sendmail installation kit. Silicon + Graphics (SGI) and Hewlett-Packard are known to already be shipping + version 8 sendmail in this fashion. + + Sun Microsystems did the same with SunOS 5.5, 5.5.1 and 5.6, shipping + a version based on 8.6 with their own proprietary config files. Recent + patches for 5.5.1 and 5.6, however, upgrade to a version based on + 8.8.8 with a sendmail.cf that is only slightly tweaked. More + importantly, a cf hierarchy is available under /usr/lib/mail/. More + details are available at the Sun migration page. + _________________________________________________________________ + +Q2.8 -- What is the latest release of sendmail? + + Date: October 24, 1997 + Updated: April 3, 2007 + + For version 8 sendmail, there are six release trees. + + For those people who, for whatever reason, are unable or unwilling to + upgrade to version 8.14.x, releases of versions 8.13, 8.12, 8.11, 8.10 + and 8.9 sendmail are still available but are not being updated. The + last release of version 8.9 sendmail was 8.9.3; the last release of + 8.10 was 8.10.2; the last release of 8.11 was 8.11.6; the last release + of 8.12 was 8.12.11; the last release of 8.13 was 8.13.8 . + + Version 8.14.1 was released on April 3, 2007. + Version 8.14.0 was released on January 31, 2007. + Version 8.13.8 was released on August 9, 2006. + Version 8.13.7 was released on June 14, 2006. + Version 8.13.6 was released on March 22, 2006. + Version 8.13.5 was released on September 16, 2005. + Version 8.13.4 was released on March 27, 2005. + Version 8.13.3 was released on January 11, 2005. + Version 8.13.2 was released on December 15, 2004. + Version 8.13.1 was released on July 30, 2004. + Version 8.13.0 was released on June 20, 2004. + Version 8.12.11 was released on January 18, 2004. + Version 8.12.10 was released on September 17, 2003. + Version 8.12.9 was released on March 29, 2003. + Version 8.12.8 was released on March 3, 2003. + Version 8.12.7 was released on December 29, 2002. + Version 8.12.6 was released on August 26, 2002. + Version 8.12.5 was released on June 25, 2002. + Version 8.12.4 was released on June 3, 2002. + Version 8.12.3 was released on April 5, 2002. + Version 8.12.2 was released on January 13, 2002. + Version 8.12.1 was released on October 1, 2001. + Version 8.12.0 was released on September 8, 2001. + Version 8.11.6 was released on August 20, 2001. + Version 8.11.5 was released on July 31, 2001. + Version 8.11.4 was released on May 28, 2001. + Version 8.11.3 was released on February 27, 2001. + Version 8.11.2 was released on December 29, 2000. + Version 8.11.1 was released on September 28, 2000. + Version 8.11.0 was released on July 19, 2000. + Version 8.10.2 was released on June 7, 2000. + Version 8.10.1 was released on April 7, 2000. + Version 8.10.0 was released on March 7, 2000. + Version 8.9.3 was released on February 4, 1999. + Version 8.9.2 was released on December 31, 1998. + Version 8.9.1 was released on July 2, 1998. + Version 8.9.0 was released on May 20, 1998. + + On machines exposed directly to the Internet, you should either + already be running sendmail 8.14.1 or plan on upgrading in the + immediate future. 8.14.1 is considered "stable", has fixes included + that will not be found in any previous release, and therefore + supercedes all previous releases. + + There is no further support for previous releases of sendmail. + _________________________________________________________________ + +Q2.9 -- Where can I find it? + + Date: January 21, 1997 + Updated: March 7, 2000 + + By anonymous FTP from ftp.sendmail.org in /pub/sendmail, or (in URL + form) via ftp://ftp.sendmail.org/pub/sendmail/. If you care, there + should be files in this directory that end with the extension ".sig" + which you can check with PGP to make sure that corresponding archives + haven't been modified. You'll need to have the PGP signing key of + Sendmail.ORG on your public keyring to be able to verify these + archives with their associated .sig files. + + There are no other known official version 8 sendmail mirrors. + + Check the sendmail home page at http://www.sendmail.org/ for + late-breaking updates and other useful information. + + If you want to be notified regarding future updates to sendmail and + other items of potential interest, you may want to subscribe to the + sendmail-announce mailing list. Address your subscription requests to + "majordomo@lists.sendmail.org" with "subscribe sendmail-announce" as + the body of the message. + _________________________________________________________________ + +Q2.10 -- What are the differences between Version 8 and other versions? + + Date: March 23, 1996 + + See doc/changes/changes.{me,ps} in the distribution. See also + RELEASE_NOTES at the top level. + _________________________________________________________________ + +Q2.11 -- What's the best platform for running sendmail? + + Date: April 8, 1997 + + Generally speaking, I adhere to the old axiom that you should choose + what software you want to run first, then choose the platform + (hardware and OS) that best runs this software. By this token, if + sendmail is the software, then a recent version of BSD Unix would + probably be best, since sendmail was developed at UC Berkeley on BSD + Unix. FreeBSD and BSD/OS are two known implementations of BSD Unix for + Intel-based PC's (among other hardware platforms), and this would make + them the most "native" OSes for sendmail. FreeBSD is freely available + by anonymous ftp or on CD-ROM, and BSD/OS is a commercial product. + + However, not everyone has this kind of "luxury". If you're on a + homogeneous network (i.e., completely composed of only one type of + hardware and OS), then you should probably be running the same OS as + the rest of the machines on the network, regardless of the axiom + stated above. You may have other problems, but you should at least be + able to get some local support on the OS for your machine. + + Either way, if the primary function of the machine is to handle + "large" quantities of mail (for whatever value you define "large" to + be), I strongly recommend getting the latest stable release of version + 8 sendmail. + + You may be surprised to find that it is easier for you to support only + one version of sendmail across all the various platforms than it is to + try to support multiple versions of sendmail, each unique for their + particular platform. In that case, the easy solution is to put version + 8 sendmail everywhere, and not have to worry about vendor-specific + problems with older versions. + + For more information on BSD Unix in general, see the Usenet newsgroups + under comp.unix.bsd, comp.bugs.4bsd, comp.os.386bsd. For more + information on BSD/OS, see the BSD newsgroups mentioned above, or the + BSD/OS Home Page at http://www.bsdi.com/. For more information on + FreeBSD, see the Usenet newsgroups under news:comp.unix.bsd.freebsd, + or the FreeBSD Home Page at http://www.freebsd.org/. + _________________________________________________________________ + +Q2.12 -- What is BIND and where can I get the latest version? + + Date: June 24, 1997 + + BIND stands for "Berkeley Internet Name Daemon", and is the Internet + de-facto standard program for turning host names into IP addresses. + + The BIND Home Page is at http://www.isc.org/bind.html, which provides + pointers to the most recent release of BIND. In May of 1997, the first + production version of BIND-8 was released. The ISC has deprecated + BIND-4 other than for security related patches. No new features or + portability changes will be added to BIND-4. You should be using + BIND-8. + + Note that there are bugs in older resolver libraries, which can cause + problems getting to large sites (that list more than five IP addresses + for a particular name), or represent a huge security hole as they do + not check the returned data to see if it will fit in the amount of + space pre-allocated for it. + + If at all possible, you should get the most recent "release" version + of BIND and make a serious attempt to integrate it into your + configuration, since virtually all vendor-provided resolver libraries + are woefully out of date. + + Note that since the release of BIND version 8.1, many people building + sendmail have experienced problems compiling and linking with the new + BIND include files and libraries under /usr/local/. A section in our + Compiling Sendmail page explains this. + _________________________________________________________________ + +Q2.13 -- What is smrsh and where can I get it? + + Date: July 9, 1996 + Updated: July 1, 2000 + + smrsh is a restricted shell utility that provides the ability to + specify, through a configuration, an explicit list of executable + programs. When used in conjunction with sendmail, smrsh effectively + limits sendmail's scope of program execution to only those programs + specified in smrsh's configuration. + + smrsh has been written with portability in mind, and uses traditional + Unix library utilities. As such, smrsh should compile on most Unix C + compilers. + + The purpose for restricting the list of programs that can be executed + in this manner is to keep mail messages (either through an alias or + the .forward file in a user's home directory) from being sent to + arbitrary programs which are not necessarily known to be sufficiently + paranoid in checking their input, and can therefore be easily + subverted (this is related to, but different from, the /etc/shells + feature discussed in Q3.11). + + More information regarding the CERT-CC can be found at their web site, + http://www.cert.org. For more information on CERT Alerts and CERT + Summaries, see their advisories and summaries, respectively. + + You can find smrsh in the most recent sendmail source archive. Other + very useful programs can be found in + http://www.cert.org/other_sources/tool_sources.html. + _________________________________________________________________ + +Q2.14 -- What is smap and where can I get it? + + Date: July 5, 1996 + + Smap (and smapd) are tools out of the Trusted Information Systems + (TIS) Firewall Toolkit (fwtk). They were originally written by + firewall expert Marcus Ranum under contract to TIS, and TIS is + continuing what maintenance there is. Here is a link to the toolkit. + Support questions regarding the toolkit may be sent to + fwall-support@tis.com, while you may join their mailing list + fwall-users@tis.com by sending electronic mail to + fwall-users-request@tis.com. + + The concept of smap and smapd is that sendmail is a huge, monolithic + setuid root program that is virtually impossible to verify as being + "correct" and free from bugs (historically, sendmail has been rather + buggy and an easy mark for system crackers to exploit, although with + the advent of version 8 sendmail, this becomes much more difficult). + In contrast, smap and smapd are very small (only a few hundred lines + long), and relatively easy to verify as being correct and functioning + as designed (however, as you will see later, we can question their + design). According to the theory, it is therefore safer and "better" + to run smap and smapd as "wrappers" around sendmail, which would no + longer need to be run setuid root. + + Unfortunately, smap and smapd have a few problems of their own, and + don't appear to have been updated since late March 1996. There have + been conflicting reports of incompatibilities between smapd and + sendmail 8.7.y (both cannot be run on the same machine, although if + you're running sendmail 8.6.x and smap/smapd on the local machine, + people on the outside can still use sendmail 8.7.y to talk to you). + + For further information on smap and smapd, see the documentation that + comes with the TIS Firewall Toolkit. + + For more information on firewalls, see the Firewalls FAQ at + http://www.interhack.net/pubs/fwfaq/ + _________________________________________________________________ + +Q2.15 -- What is TCP-Wrappers and where can I get it? + + Date: April 8, 1997 + Updated: April 2, 2001 + + TCP-Wrappers is another security enhancement package. The theory is + that you take programs being run under inetd (see /etc/inetd.conf) and + before you run the program to do the real work (ftpd, telnetd, + etc...), you first run the connection attempt through a package that + checks to see if the IP address of the source packet is coming from a + host known to be either good or bad (you may filter connection + attempts by source host name, domain name, raw IP address, port they + are attempting to connect to; and either allow known good connections + through thus refusing unknown connections, or accept all connections + except those known to be bad). + + The practice of TCP-Wrappers actually follows the theory quite well. + It is a very useful and important tool in the System Administrator's + Bag of Things To Help You Secure Your Machine From Crackers, Spammers, + Junkmailers, and Other Undesirables. However, it only works for + programs that communicate via TCP packets (not UDP, such as NFS) + started up out of inetd. It does not work for RPC-based services, and + programs that start up a daemon outside of inetd and just leave it + running obviously don't benefit beyond the initial connection that + gets the daemon started (however, see the FTP URL below for other + packages that can help secure RPC and portmapper-based services). + + However, most sendmail installations tend to start up a daemon and + leave it running at all times. If you did run sendmail out of inetd, + you'd lose the benefit of the load average checking code that is + executed only in daemon mode, and for systems that handle a lot of + mail, this is vitally important. + + You can get TCP-Wrappers from ftp://ftp.porcupine.org/pub/security/, a + site that has a whole host of other useful security tools, such as + securelib, portmap, satan, cops, crack, etc... You can also find + pointers to many other useful security tools at + http://ciac.llnl.gov/ciac/SecurityTools.html, and the COAST Archive at + http://www.cerias.purdue.edu/coast/ is a veritable cornucopia of all + things security related. + + For the adventurous, you can get a source patch for version 8 sendmail + (created for 8.7.6, but, with work, applicable to older releases) that + will take the core TCP-Wrappers code and integrate it into the daemon, + so that you get the best of both worlds. However, this isn't as + smoothly integrated as it should be, is not for the faint-of-heart, + and is certainly not officially supported by the original author of + sendmail (Eric Allman). This functionality is integrated in a + different fashion into version 8.8.5 sendmail. + + You should be able to find the unsupported patch at + ftp://ftp.porcupine.org/pub/security/sendmail-tcpd.patch. + _________________________________________________________________ + +Q2.16 -- Why won't db 1.85 build on my machine? + + Date: April 8, 1997 + Updated: May 20, 1997 + URL Updated: July 27, 1999 + + As of release 8.9.X of sendmail, db 1.85 is no longer needed, as + support for db 2.X is included (starting with 2.3.16). More details + are given at Q3.25. The rest of this answer only applies if you have + not yet upgraded to 8.9.X . + + The db 1.85 package as available from + http://www.sleepycat.com/register.html provides Irix support up to + Irix 4.05F, but 5.{2,3} need a slightly patched version, as does HP-UX + 10.20. Some vendors also provide db standard with their OS (DEC Unix + 4.0, for example). + + A tarball incorporating these changes for Irix 5.x is available at + ftp://ftp.his.com/pub/brad/sendmail/irix5.tar.gz. This will extract + into ./db.1.85/PORT/irix.5.2, with a symbolic link created from + ./db.1.85/PORT/irix.5.3 to this same directory. Make sure you extract + this archive into the same directory where you extracted the db 1.85 + archive as available from ftp.cs.berkeley.edu. (see Q3.5 for more + information on getting the db 1.85 package). An ASCII context diff of + this same patch is at + ftp://ftp.his.com/pub/brad/sendmail/irix4-5.diff. + + A version of db 1.85 that has supposedly been patched to compile under + Irix 6.2 has been made available at + http://reality.sgi.com/ariel/freeware/#db, but I haven't had a chance + to download and check it out yet. + + The context diffs required to get db 1.85 working under HP-UX 10.20 + are available at ftp://ftp.his.com/pub/brad/sendmail/hpux.10.20.diff. + A tarball incorporating these changes is available at + ftp://ftp.his.com/pub/brad/sendmail/hp-ux.10.20.tar.gz. This will + extract into ./db.1.85/PORT/hpux.10.20, so make sure you extract this + archive into the same directory where you extracted the db 1.85 + archive as available from ftp.cs.berkeley.edu. + _________________________________________________________________ + +Q2.17 -- What is makemap and where can I get it? + + Date: August 30, 1996 + + The program "makemap" is used to build the databases used by version 8 + sendmail, for things like the UserDB, mailertables, etc.... + + It is distributed as part of the basic operating system from some + vendors, but source code for it is also included at the root level of + the sendmail archive (at least, it is for sendmail 8.6.12 and 8.7.5, + and presumably will continue to be as newer releases come out). + However, it is not considered a "supported" part of version 8 + sendmail. Just like the other source provided in the archive, the + Makefile will likely need some tweaking for your specific site. + + It turns out that Irix 5.3 doesn't appear to have the dbm or ndbm + libraries, but to compile makemap.c, you need to have -DNDBM on the + "DBMDEF=" line (some necessary things are defined only in + /usr/include/ndbm.h). Try just leaving off "-lndbm" from the "LIBS=" + line in the Makefile for makemap. + + If you plan on using makemap with db 1.85 on an SGI machine running a + version of Irix later than 4.x, see Q2.16 for some additional steps to + get db 1.85 compiled on your machine. + + + sendmail.org + + 3. VERSION 8 SPECIFIC ISSUES + + * 3.1 How do I make all my addresses appear to be from a single + host? + * 3.2 How do I rewrite my "From:" lines to read + ``First_Last@My.Domain'' or ``Different_Name@My.Domain''? + * 3.3 But what about fully-qualified addresses, such as those from + Pine or FEATURE(always_add_domain)? + * 3.4 So what was the user database feature intended for? + * 3.5 Why the hostility toward using full names for email addresses? + * 3.6 (deprecated) + * 3.7 How do I manage several (virtual) domains? + * 3.8 There are four UUCP mailers listed in the configuration files. + Which one should I use? + * 3.9 (deprecated) + * 3.10 How do I solve "collect: I/O error on connection" or "reply: + read error from host.name" errors? + * 3.11 Why can't my users forward their mail to a program? + * 3.12 Why do connections to the SMTP port take such a long time? + * 3.13 Why do I get "unknown mailer error 5 -- mail: options MUST + PRECEDE recipients" errors? + * 3.14 Why does version 8 sendmail panic my SunOS box? + * 3.15 Why does the Unix From line get mysteriously munged when I + send to an alias? + * 3.16 Why doesn't MASQUERADE_AS (or the user database) work for + envelope addresses as well as header addresses? + * 3.17 How do I run version 8 sendmail and support the MAIL11V3 + protocol? + * 3.18 Why do messages disappear from my queue unsent? + * 3.19 When is sendmail going to support RFC 2047 MIME header + encoding? + * 3.20 Why can't I get mail to some places, but instead always get + the error "reply: read error from name.of.remote.host"? + * 3.21 Why doesn't "FEATURE(xxx)" work? + * 3.22 How do I configure sendmail not to use DNS? + * 3.23 How do I get all my queued mail delivered to my Unix box from + my ISP? + * 3.24 Why do I get the error message unable to write + /etc/mail/sendmail.pid on Solaris 2.x? + * 3.25 Why can't I compile sendmail with Berkeley DB 2.X? + * 3.26 What operating systems has Berkeley sendmail been ported to? + * 3.27 How do I prevent Relaying Denied errors for my clients? + * 3.28 Why isn't virtual hosting working, even after I added a + Kvirtuser line to sendmail.cf ? + * 3.29 How can I add a header specifying the actual recipient when + having multiple users in a virtual domain go to a single mailbox? + * 3.30 What do I do when Build fails because groff was not found? + * 3.31 What does "class hash not available" mean? + * 3.32 How do I configure majordomo with sendmail 8.9 without + relaxing the DontBlameSendmail option? + * 3.33 How do I configure my system in general with sendmail 8.9? + * 3.34 What does "foo not available for sendmail programs" mean? + * 3.35 How do I add a footer/signature to all (outgoing) e-mail + messages? + * 3.36 What does "Cannot open hash database ... Invalid argument" + mean? + * 3.37 What does "parse error before `NDBM'" mean? + * 3.38 What does "may be forged" mean? + * 3.39 How do I send using an alternate port? + * 3.40 Why can't I use BerkeleyDB 4.1.x? + * 3.41 How do I use CIDR notation in the access map (or other + places)? + * 3.42 Why isn't CIDR notation directly supported by sendmail? + * 3.43 What does "Need to recompile with -DNEWDB for hash support" + mean? + * 3.44 I disabled sendmail on some machines which don't receive + mail, but since upgrading to 8.12 they can't send mail either; + why? + _________________________________________________________________ + +Q3.1 -- How do I make all my addresses appear to be from a single host? + + This question is answered in detail at the configuration Masquerading + and Relaying page. + _________________________________________________________________ + +Q3.2 -- How do I rewrite my From: lines to read ``First_Last@My.Domain''' or +``Different_Name@My.Domain''? + + Date: September 23, 1997 + Updated: November 8, 1999 + + Use the generics table, as described in steps 6 and 7 of the Virtual + Hosting page. + _________________________________________________________________ + +Q3.3 -- But what about fully-qualified addresses, such as those from Pine or +FEATURE(always_add_domain)? + + Date: July 19, 1996 + Updated: November 8, 1999 + Updated: January 25, 2000 + + Note: this question used to be "How do I get the user database to work + with Pine or with FEATURE(always_add_domain)?" But the user database + is no longer the recommended solution for this problem, so the + question has been clarified appropriately. + + The proper solution is to use the generics table, as described in + steps 6 and 7 of the Virtual Hosting page. The important thing to note + is that the host/domain part of the fully-qualified address must be + specified via GENERICS_DOMAIN() or GENERICS_DOMAIN_FILE(). + _________________________________________________________________ + +Q3.4 -- So what was the user database feature intended for? + + Date: May 12, 1997 + + The intent was to have all information for a given user (where the + user is the unique login name, not an inherently non-unique full name) + in one place. This would include phone numbers, addresses, and so + forth. The "maildrop" feature is because Berkeley does not use a + centralized mail server (there are a number of reasons for this that + are mostly historic), and so we need to know where each user gets his + or her mail delivered -- i.e., the mail drop. + + UC Berkeley is (was) in the process of setting up their environment so + that mail sent to an unqualified "name" goes to that person's + preferred maildrop; mail sent to "name@host" goes to that host. The + purpose of "FEATURE(notsticky)" is to cause "name@host" to be looked + up in the user database for delivery to the maildrop. + _________________________________________________________________ + +Q3.5 -- Why the hostility toward using full names for email addresses? + + Date: May 12, 1997 + Updated: April 7, 2004 + + Because full names are not unique. For example, the computer community + has two Peter Deutsches. At one time, Bell Labs had two Stephen R. + Bournes with offices a few doors apart. You can create alternative + addresses (e.g., Stephen_R_Bourne_2), but that's even worse -- which + one of them has to have their name desecrated in this way? And you can + bet that one of them will get most of the other person's email. + Moreover, at institutions with high turnover (such as universities), a + given name may refer to different people at different times, which can + again lead to mail going to the wrong person. + + So called "full names" are just an attempt to create longer versions + of unique names. Rather that lulling people into a sense of security, + I'd rather that it be clear that these handles are arbitrary. People + should use good user agents that have alias mappings so that they can + attach arbitrary names for their personal use to those with whom they + correspond (such as the MH alias file). + + The problem is even worse outside of America, where non-ASCII + characters (e.g., characters with umlauts or the Norwegian Ø) are used + in names. Since non-ASCII characters cannot be used in the SMTP + envelope or e-mail headers, the full names are mangled anyway. + + Even worse is fuzzy matching in email -- this can make good addresses + turn bad. For example, Eric Allman is currently (to the best of our + knowledge) the only ``Allman'' at Berkeley, so mail sent to + <Allman@Berkeley.EDU> should get to him. But if another Allman ever + appears, this address could suddenly become ambiguous. He's been the + only Allman at Berkeley for over fifteen years -- to suddenly have + this "good address" bounce mail because it is ambiguous would be a + heinous wrong. + + Directory services should be as fuzzy as possible (within reason, of + course). Mail services should be unique. + _________________________________________________________________ + +Q3.6 -- has been deprecated. + _________________________________________________________________ + +Q3.7 -- How do I manage several (virtual) domains? + + This question is answered in detail at the Virtual Hosting page. + _________________________________________________________________ + +Q3.8 -- There are four UUCP mailers listed in the configuration files. Which +one should I use? + + This question is answered in detail at the configuration Using UUCP + Mailers page. + _________________________________________________________________ + +Q3.9 -- has been deprecated. + _________________________________________________________________ + +Q3.10 -- How do I solve "collect: I/O error on connection" or "reply: read +error from host.name" errors? + + Date: April 8, 1997 + Updated: May 9, 2000 + Updated: June 8, 2002 + Updated: March 2, 2003 + + If you are just getting occasional such messages, they're probably due + to a temporary network problem, or the remote host crashing or + otherwise abruptly terminating the connection. If you are getting a + lot of these from a single host, there is probably some + incompatibility between 8.x and that host (see Q3.12 and Q3.20). If + you get a lot of them in general, you may have network problems that + are causing connections to get reset. + + Note that this problem is sometimes caused by incompatible values of + the MTU (Maximum Transmission Unit) size on a SLIP or PPP connection. + Be sure that your MTU size is configured to be the same value as what + your ISP has configured for your connection. If you are still having + problems, then have your ISP configure your MTU size for 1500 (the + maximum value), and you configure your MTU size similarly. + + Another possibility is that you have a router/firewall filtering out + all incoming ICMP messages, while your OS is doing "Path MTU + discovery" (e.g. modern TCP/IP stacks do this by default). Path MTU + discovery relies on certain ICMP messages being allowed through back + to the host originating the traffic - see our tip on Path MTU + Discovery and RFC 1191 for the details. + + Lastly, here is part of a post from comp.mail.sendmail about a SCO + 7.1.0 specific bug which may produce similar problems. + + Subject: Re: Recipient mail server times out sendmail connection + Date: 5 Jun 2002 21:37:02 -0700 + From: maillist@screamingplants.com (ike) + + I ran a packet sniffer on mail traffic that was causing problems + and found that the tcp checksums for large packets were all off by + 14. I found out later that there is a network bug in the OS (SCO + 7.1.0). After applying a few patches, the problem appears to have + been resolved. + _________________________________________________________________ + +Q3.11 -- Why can't my users forward their mail to a program? + + Date: July 9, 1996 + Updated: November 19, 1999 + + I just upgraded to version 8 sendmail and now when my users try to + forward their mail to a program they get an "illegal shell" or "cannot + mail to programs" message and their mail is not delivered. What's + wrong? + + In order for people to be able to run a program from their .forward + file, version 8 sendmail insists that their shell (that is, the shell + listed for that user in the passwd entry) be a "valid" shell, meaning + a shell listed in /etc/shells. If /etc/shells does not exist, a + default list is used, typically consisting of /bin/sh and /bin/csh. + + This is to support environments that may have NFS-shared directories + mounted on machines on which users do not have login permission. For + example, many people make their file server inaccessible for + performance or security reasons; although users have directories, + their shell on the server is /usr/local/etc/nologin or some such. If + you allowed them to run programs anyway you might as well let them log + in. + + If you are willing to let users run programs from their .forward file + even though they cannot telnet or rsh in (as might be reasonable if + you run smrsh to control the list of programs they can run) then add + the line: + + /SENDMAIL/ANY/SHELL/ + + to /etc/shells. This must be typed exactly as indicated, in caps, with + the trailing slash. + + NOTA BENE: DO NOT list /usr/local/etc/nologin in /etc/shells -- this + will open up other security problems. + + IBM AIX does not use /etc/shells -- a list of allowable login shells + is contained, along with many other login parameters, in + /etc/security/login.cfg. You can copy the information in the "shells=" + stanza into a /etc/shells on your system so sendmail will have + something to use. Do NOT add "/usr/lib/uucp/uucico" or any other + non-login shell into /etc/shells. + + Also note that there are some weird things that AFS throws into the + mix, and these can keep a program from running or running correctly + out of .forward files or the system-wide aliases. + + See also "smrsh" in Q2.13 and Q3.34, and "directory permissions" in + Q3.33. + _________________________________________________________________ + +Q3.12 -- Why do connections to the SMTP port take such a long time? + + Date: November 24, 1996 + Updated: August 29, 2001 + + I just upgraded to version 8 sendmail and suddenly connections to the + SMTP port take a long time. What is going wrong? + + It's probably something weird in your TCP implementation that makes + the IDENT code act oddly. On most systems version 8 sendmail tries to + do a ``callback'' to the connecting host to get a validated user name + (see RFC 1413 for detail). If the connecting host does not support + such a service it will normally fail quickly with "Connection + refused", but certain kinds of packet filters and certain TCP + implementations just time out. + + To test this (pre-8.7.y sendmail), set the IDENT timeout to zero + using: + + define(`confREAD_TIMEOUT',`Ident=0')dnl + + in the .mc file used by m4 to generate your sendmail.cf file. + Alternatively, if you don't use m4, you can put ``OrIdent=0'' in the + configuration file (we recommend the m4 solution, since that makes + maintenance much easier for people who don't understand sendmail + re-write rules, or after you've been away from it for a while). Either + way, this will completely disable all use of the IDENT protocol. + + For version 8.7.y sendmail (and above), you should instead use: + + define(`confTO_IDENT',`0s')dnl + + Another possible problem is that you have your name server and/or + resolver configured improperly. Make sure that all "nameserver" + entries in /etc/resolv.conf point to functional servers. If you are + running your own server, make certain that all the servers listed in + your root cache are up to date (this file is usually called something + like "/var/namedb/root.cache"; see your /etc/named.boot file to get + your value). Either of these can cause long delays. + + You may also wish to check out our tips on how to set up DNS for your + private address space. + _________________________________________________________________ + +Q3.13 -- Why do I get "unknown mailer error 5 -- mail: options MUST PRECEDE +recipients" errors? + + Date: March 23, 1996 + + I just upgraded to version 8 sendmail and suddenly I get errors such + as ``unknown mailer error 5 -- mail: options MUST PRECEDE + recipients.'' What is going wrong? + + You need OSTYPE(systype) in your .mc file, where "systype" is set + correctly for your hardware & OS combination -- otherwise the + configurations use a default that probably disagrees with your local + mail system. See the configuration OSTYPE page for details. + + If this is on a Sun workstation, you might also want to take a look at + the local mailer flags in the Sun-supplied sendmail.cf and compare + them to the local mailer flags generated for your version 8 + sendmail.cf. If they differ, you might try changing the V8 flags to + match the Sun flags. + _________________________________________________________________ + +Q3.14 -- Why does version 8 sendmail panic my SunOS box? + + Date: March 24, 1996 + Updated: November 4, 1997 + + Sendmail 8.7.y panics SunOS 4.1.3_U1 (at least for 1 <= y <= 3) and + SunOS 4.1.3, and sendmail 8.6.x seems fine on both machines (at least + for 9 <= x <= 12). + + The problem is that a kernel patch is missing, specifically 100584-08 + (4.1.3), 102010-05 (4.1.3_U1), or 102517 (4.1.4). This should be + available from your hardware vendor through your support contract or + their online support facilities (including being available on the + SunSolve CD). + _________________________________________________________________ + +Q3.15 -- Why does the Unix From line get mysteriously munged when I send to an +alias? + + Date: December 3, 1997 + + ``It's not a bug, it's a feature.'' This happens when you have an + owner-list alias and you send to list. V8 propagates the owner + information into the SMTP envelope sender field (which appears as the + Unix From line [sometimes incorrectly referred to as the From-space + "header"] on Unix mail or as the Return-Path: header) so that + downstream errors are properly returned to the mailing list owner + instead of to the sender. In order to make this appear as sensible as + possible to end users, I recommend making the owner point to a + "request" address -- for example: + list: :include:/path/name/list.list + owner-list: list-request + list-request: eric + + This will make message sent to list come out as being "From + list-request" instead of "From eric". + _________________________________________________________________ + +Q3.16 -- Why doesn't MASQUERADE_AS (or the user database) work for envelope +addresses as well as header addresses? + + Date: November 24, 1996 + + Believe it or not, this is intentional. The interpretation of the + standards by the version 8 sendmail development group was that this + was an inappropriate rewriting, and that if the rewriting were + incorrect at least the envelope would contain a valid return address. + + If you're using version 8.7.y sendmail (or later), you can use + FEATURE(masquerade_envelope) + + in your sendmail.mc file to change this behavior. This is discussed in + greater detail at the configuration Masquerading and Relaying page. + _________________________________________________________________ + +Q3.17 -- How do I run version 8 sendmail and support the MAIL11V3 protocol? + + Date: March 23, 1996 + URL updated: November 15, 2002 + + Get the reimplementation of the mail11 protocol by Keith Moore from + ftp://gatekeeper.dec.com/pub/misc/vixie/ (with contributions from Paul + Vixie). + _________________________________________________________________ + +Q3.18 -- Why do messages disappear from my queue unsent? + + Date: March 23, 1996 + + When I look in the queue directory I see that qf* files have been + renamed to Qf*, and sendmail doesn't see these. What's wrong? + + If you look closely you should find that the Qf files are owned by + users other than root. Since sendmail runs as root it refuses to + believe information in non-root-owned qf files, and it renames them to + Qf to get them out of the way and make it easy for you to find. The + usual cause of this is twofold: first, you have the queue directory + world writable (which is probably a mistake -- this opens up other + security problems) and someone is calling sendmail with an "unsafe" + flag, usually a -o flag that sets an option that could compromise + security. When sendmail sees this it gives up setuid root permissions. + + The usual solution is to not use the problematic flags. If you must + use them, you have to write a special queue directory and have them + processed by the same uid that submitted the job in the first place. + _________________________________________________________________ + +Q3.19 -- When is sendmail going to support RFC 2047 MIME header encoding? + + Date: March 23, 1996 + Updated: September 5, 1999 + + This is considered to be a MUA issue rather than an MTA issue. + + Quoth Eric Allman: + + The primary reason is that the information necessary to do the + encoding (that is, 8->7 bit) is unknown to the MTA. In specific, + the character set used to encode names in headers is _NOT_ + necessarily the same as used to encode the body (which is already + encoded in MIME in the charset parameter of the Content-Type: + header). Furthermore, it is perfectly reasonable for, say, a Swede + to be living and working in Korea, or a Russian living and working + in Germany, and want their name to be encoded in their native + character set; it could even be that the sender was Japanese, the + recipient Russian, and the body encoded in ISO 8859-1. If all I + have are 8-bit characters, I can't choose the charset properly. + + Similarly, when doing 7->8 bit conversions, I don't want to throw + away this information, as it is necessary for proper presentation + to the end user. + _________________________________________________________________ + +Q3.20 -- Why can't I get mail to some places, but instead always get the error +"reply: read error from name.of.remote.host"? + + Date: January 17, 1997 + + This is usually caused by a bug in the remote host's mail server, or + Mail Transport Agent (MTA). The "EHLO" command of ESMTP causes the + remote server to drop the SMTP connection. There are several MTAs that + have this problem, but one of the most common server implementations + can be identified by the "220 All set, fire away" greeting it gives + when you telnet to its SMTP port. + + To work around this problem, you can configure sendmail to use a + mailertable with an entry telling sendmail to use plain SMTP when + talking to that host: + + name.of.remote.host smtp:name.of.remote.host + + Sites which must run a host with this broken SMTP implementation + should do so by having a site running sendmail or some other reliable + (and reasonably modern) SMTP MTA act as an MX server for the problem + host. + + There is also a problem wherein some TCP/IP implementations are + broken, and if any connection attempt to a remote end gets a + "connection refused", then *all* connections to that site will get + closed. Of course, if you try to use the IDENT protocol across a + firewall (at either end), this is highly likely to result in the same + apparent kind of "read error". + + The fix is simple -- on those machines with broken TCP/IP + implementations, do not attempt to use IDENT. When compiling newer + releases of version 8 sendmail, the compiler should automatically + detect whether you're on a machine that is known to have this kind of + TCP/IP networking problem, and make sure that sendmail does not + attempt to use IDENT. If you've since patched your machine so that it + no longer has this problem, you'll need to go back in and explicitly + configure sendmail for support of IDENT, if you want that feature. + _________________________________________________________________ + +Q3.21 -- Why doesn't "FEATURE(xxx)" work? + + Date: January 17, 1996 + + When creating m4 Master Config (".mc") files for version 8 sendmail, + many FEATURE() macros simply change the definition of internal + variables that are referenced in the MAILER() definitions. + + To make sure that everything works as desired, you need to make sure + that OSTYPE() macros are put at the very beginning of the file, + followed by FEATURE() and HACK() macros, local definitions, and at the + very bottom, the MAILER() definitions. See the configuration + Introduction and Example page for more details. + _________________________________________________________________ + +Q3.22 -- How do I configure sendmail not to use DNS? + + Date: March 24, 1997 + Updated: April 6, 2000 + Updated: June 4, 2002 + Updated: January 14, 2004 + + In situations where you're behind a firewall, or across a dial-up + line, there are times when you need to make sure that programs (such + as sendmail) do not use the DNS at all. + + With older releases of version 8 sendmail (8.7 and earlier), you + needed to recompile the binary and make sure that "NAMED_BIND" was + turned off in src/conf.h. + + With versions 8.8 and later, you change the service switch file to + omit "DNS" and use only NIS, files, and other map types as + appropriate. More information about the service switch file can be + found under the ServiceSwitchFile option in §5.6 (Options) of the + Installation and Operation Guide and all of §4.9 (Name Server Access). + + And note that you'll need to forward all your outbound mail to another + machine as a "relay" (one that does use DNS, and understands how to + properly use MX records, etc...), otherwise you won't be able to get + mail to any site(s) other than the one(s) you configure in your + /etc/hosts file (or whatever). The use of a smart host is one way to + do this; the following in your .mc will do: +define(`SMART_HOST', `name.of.smart.host')dnl + + Also, starting with 8.9, it may help to include the following in your + .mc file: +FEATURE(`accept_unresolvable_domains')dnl +FEATURE(`accept_unqualified_senders')dnl + + And starting with 8.12, changes to submit.cf are required as well; the + following in your submit.mc can minimize the problem: +define(`confDIRECT_SUBMISSION_MODIFIERS', `C')dnl + _________________________________________________________________ + +Q3.23 -- How do I get all my queued mail delivered to my Unix box from my ISP? + + Date: June 6, 1997 + Updated: October 8, 1998 + + In the contrib directory of the sendmail distribution is a Perl script + called etrn.pl. Assuming you're running sendmail or some other SMTP + MTA on some sort of a Unix host, and your ISP uses version 8.8 + sendmail and they queue all mail for your domain (as opposed to + stuffing it all in one file that you need to download via POP3 or some + such), the command + etrn.pl mail.myisp.com mydomain.com + + will do the trick. You can learn about Perl at the Perl Language Home + Page. The O'Reilly book is also very helpful. + + If you don't have Perl, something like the following script should do + the trick: + #!/bin/sh + telnet mail.myisp.com. 25 << __EOF__ + EHLO me.mydomain.com + ETRN mydomain.com + QUIT + __EOF__ + + Note that this is indented for readability, and the real script would + have column position #1 of the file be the first printable character + in each line. + + Of course, you'll have to fill in the appropriate details for + "mail.myisp.com", "mydomain.com", etc.... + + If your ISP doesn't use version 8.8 sendmail, you may have to cobble + together alternative solutions. They may have a "ppplogin" script that + is executed every time your machines dials them up, and if so, you may + be able to have them modified this script so as to put a "sendmail + -qRmydomain.com" in it (which is effectively what the "ETRN" command + does, but in a safer fashion). + + Alternatively, they may have a hacked finger daemon, so that you'd put + "finger mydomain.com@theirhost.theirdomain.com" in your script. Or, + they may have some other solution for you. However, only they would be + able to answer what solutions they have available to them. + + Obviously, the easiest and most "standard" solution is to have them + upgrade their system to the most recent stable release of version 8 + sendmail. See Q2.8 to find out what exact version this is. + _________________________________________________________________ + +Q3.24 -- Why do I get the error message unable to write /etc/mail/sendmail.pid? + + Date: August 6, 1997 + + sendmail checks if it has write access to the directory in which it + wants to create a file without granting special privileges to 'root'. + To have sendmail run properly, the directories /etc, /etc/mail, and/or + /var/run should be owned by root and be writable by its owner. + _________________________________________________________________ + +Q3.25 -- Why can't I compile sendmail with Berkeley DB 2.X? + + Date: August 12, 1997 + Updated: May 20, 1998 + + sendmail 8.8 only supports Berkeley DB 1.85. It will not work with + newer Berkeley DB versions, even in compatibility mode + + Sendmail 8.9, however, does include support for Berkeley DB 2.X, + starting with 2.3.16 . + _________________________________________________________________ + +Q3.26 -- What operating systems has Berkeley sendmail been ported to? + + Date: December 18, 1997 + Updated: September 9, 1999 + + Berkeley sendmail 8.9.3 supports most known flavors of UNIX, + including: +386BSD A-UX AIX Altos +BSD-OS BSD43 CLIX CSOS +ConvexOS Dell DomainOS Dynix +EWS-UX_V FreeBSD HP-UX IRIX +ISC KSR LUNA Linux +Mach386 NCR.MP-RAS NEWS-OS NeXT +NetBSD NonStop-UX OSF1 OpenBSD +PTX Paragon PowerUX RISCos +SCO SINIX SMP_DC.OSx.NILE Solaris +SVR4 SunOS Titan ULTRIX +UMAX UNICOS UNIX_SV.4.x.i386 +UX4800 UXPDS Utah dgux +maxion uts.systemV + + Also, a Windows NT version is available from Sendmail, Inc.. + _________________________________________________________________ + +Q3.27 -- How do I prevent Relaying Denied errors for my clients? + + Date: April 12, 1998 + Last updated: June 19, 2000 + + You need to add the fully-qualified host name and/or IP address of + each client to class R, the set of relay-allowed domains. For version + 8.8.X, this is typically defined by the file /etc/sendmail.cR ; for + 8.9.X, it is typically /etc/mail/relay-domains . Note: if your DNS is + problematic, you should list the IP address (e.g., 1.2.3.4); in + general, however, this should not be necessary. + + Once you've updated the appropriate file, SIGHUP your sendmail daemon + and you should be OK. + + Further details are available on our Allowing controlled SMTP relaying + in Sendmail 8.9 page. + _________________________________________________________________ + +Q3.28 -- Why isn't virtual hosting working, even after I added a Kvirtuser line +to sendmail.cf? + + Date: April 12, 1998 + + Just adding the proper Kvirtuser line to sendmail.cf is not enough to + enable the virtual user table feature, a key ingredient for virtual + hosting. You need to use the m4 technique FEATURE(virtusertable); + detailed instructions are provided at our Virtual Hosting with + Sendmail page. + _________________________________________________________________ + +Q3.29 -- How can I add a header specifying the actual recipient when having +multiple users in a virtual domain go to a single mailbox? + + Date: July 2, 1998 + Updated: June 21, 2002 + Fixed typo: October 10, 2003 + Updated URL: April 6, 2004 + + Stuffing multiple user's mail into a single mail box is not a good + method of distributing user mail but if you must do this, the + following solution should allow a tool like fetchmail to separate the + messages for individual users. + 1. Use FEATURE(local_procmail) in your .mc file so procmail (which + you must install separately) will deliver mail to the mailbox. + 2. Use FEATURE(virtusertable) to create a virtual user table entry + for the domain as follows: +@domain.com domuser+%1 + where domuser is the username of the mailbox you will be using. + Note that "domuser" must be an actual username, *not* an alias. + It may be necessary to append "@localhost", as follows +@domain.com domuser+%1@localhost + 3. Put this in the respective domuser's $HOME/.procmailrc: +DOMAIN=domain.com +ENV_TO=$1 + +:0f +* ENV_TO ?? . +| formail -i "X-Envelope-To: $ENV_TO@$DOMAIN" + +:0fE +| formail -i "X-Envelope-To: UNKNOWN" + This will insert an X-Envelope-To header with the original + envelope recipient address when the message is delivered the + normal way via the virtusertable, and UNKNOWN if for some reason + it was sent directly to domuser. + You may be tempted to eliminate variable ENV_TO and use $1 + directly. It won't work, so don't bother. + FEATURE(local_procmail) causes sendmail to deliver email to + procmail directly. A .forward file is not only unnecessary, it + would prevent procmail from setting $1 with the necessary text, so + don't use one. + You may need to replace formail with /usr/local/bin/formail or + some such, depending on whether procmail can find it or not. + + Another possible solution from Andrzej Filip. + _________________________________________________________________ + +Q3.30 -- What do I do when Build fails because groff was not found? + + Date: September 24, 1998 + + You can get groff from ftp://ftp.gnu.org/pub/gnu/. But it's not a big + deal, because: + 1. You've already successfully built the sendmail binary to get this + far. + 2. You can just use the preformatted man pages anyway: +% cp *.0 obj* + _________________________________________________________________ + +Q3.31 -- What does "class hash not available" mean? + + Date: September 24, 1998 + + You've built sendmail and/or makemap without NEWDB specified in your + DBMDEF configuration, but you specified the class hash in sendmail.cf + or on a makemap command. The class hash requires NEWDB support, for + which you need the Berkeley database. Please refer to the Database + Definitions section of our Compiling Sendmail web page. + _________________________________________________________________ + +Q3.32 -- How do I configure majordomo with sendmail 8.9 without relaxing the +DontBlameSendmail option? + + Date: January 26, 1999 + Updated: October 30, 2001 + + We have had some queries about this, as majordomo apparently suggests + some configuration values which sendmail 8.9 does not like. Here is + what one expert suggests: + + The sendmail.cf contains: +O AliasFile=/etc/aliases, /etc/majordomo.aliases +O DontBlameSendmail=Safe + + /etc/aliases contains the general majordomo aliases: +# Majordomo +majordomo: "|/usr/local/lib/majordomo/wrapper majordomo" +owner-majordomo: postmaster +majordomo-owner: postmaster + + /etc/majordomo.aliases contains the majordomo lists of the form: +wookie: "|/usr/local/lib/majordomo/wrapper resend -l wookie wookie-list" +wookie-list: :include:/usr/local/lib/majordomo/lists/wookie +owner-wookie: head-wookie +wookie-approval: owner-wookie +wookie-request: "|/usr/local/lib/majordomo/wrapper majordomo -l wookie" + + The various directory owners/groups/permissions: +drwxr-xr-x 20 root root 1024 Dec 1 15:20 / +drwxr-xr-x 25 root root 3072 Jan 26 01:26 /etc +drwxr-xr-x 20 root root 1024 Feb 4 1998 /usr +drwxr-xr-x 18 root root 1024 Jan 16 18:40 /usr/local +drwxr-xr-x 5 root root 1024 Feb 6 1996 /usr/local/lib +lrwxrwxrwx 1 root root 16 Dec 1 10:01 /usr/local/lib/majordomo + -> majordomo-1.94.4 +drwxr-x--x 5 majordom majordom 1024 Jan 25 23:12 /usr/local/lib/majordomo +-1.94.4 +drwxr-xr-x 2 majordom majordom 32768 Jan 26 00:49 /usr/local/lib/majordomo +-1.94.4/lists +-rw-rw-r-- 1 majordom majordom 655 Nov 3 17:03 /usr/local/lib/majordomo +-1.94.4/lists/wookie +-rw-rw---- 1 majordom majordom 14588 Jan 19 10:28 /usr/local/lib/majordomo +-1.94.4/lists/wookie.config +-rw-rw-r-- 1 majordom majordom 23 Jan 14 1997 /usr/local/lib/majordomo +-1.94.4/lists/wookie.info + + Now the differences that make this work that may not be the same as + instructed by the majordomo instructions: + 1. Put the majordomo.aliases file in /etc, not in the majordomo + install directory (/usr/local/lib/majordomo). If you can't move + the aliases file out of the majordomo directory, you'll need to + create the database backing file by hand the first time as root: + # touch /usr/local/lib/majordomo/aliases + # newaliases -OAliasFile=/usr/local/lib/majordomo/aliases + + 2. Make the permissions on /usr/local/lib/majordomo 0751, not 0775. + 3. Make the permissions on /usr/local/lib/majordomo/Log 0664, owned + by majordom, group majordom. + 4. /usr/local/lib/majordomo/lists is mode 0755, owner majordom, group + majordom. + 5. The permissions/owners for the lists should be as shown above. + These permissions/ownership allow majordom to continue to manage + the lists. + _________________________________________________________________ + +Q3.33 -- How do I configure my system in general with sendmail 8.9? + + Date: May 24, 1999 + + The following is taken directly from the DIRECTORY PERMISSIONS section + of the top-level README file in the sendmail distribution. + + Sendmail often gets blamed for many problems that are actually the + result of other problems, such as overly permissive modes on + directories. For this reason, sendmail checks the modes on system + directories and files to determine if can have been trusted. For + sendmail to run without complaining, you MUST execute the following + command: + chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue + chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue + + You will probably have to tweak this for your environment (for + example, some systems put the spool directory into /usr/spool instead + of /var/spool and use /etc/mail for aliases file instead of /etc). If + you set the RunAsUser option in your sendmail.cf, the + /var/spool/mqueue directory will have to be owned by the RunAsUser + user. As a general rule, after you have compiled sendmail, run the + command + sendmail -v -bi + + to initialize the alias database. If it gives messages such as + WARNING: writable directory /etc + WARNING: writable directory /usr/spool/mqueue + + then the directories listed have inappropriate write permissions and + should be secured to avoid various possible security attacks. + + Beginning with sendmail 8.9, these checks have become more strict to + prevent users from being able to access files they would normally not + be able to read. In particular, .forward and :include: files in unsafe + directory paths (directory paths which are group or world writable) + will no longer be allowed. This would mean that if user joe's home + directory was writable by group staff, sendmail would not use his + .forward file. This behavior can be altered, at the expense of system + security, by setting the DontBlameSendmail option. For example, to + allow .forward files in group writable directories: + O DontBlameSendmail=forwardfileingroupwritabledirpath + + Or to allow them in both group and world writable directories: + O DontBlameSendmail=forwardfileinunsafedirpath + + Items from these unsafe .forward and :include: files will be marked as + unsafe addresses -- the items can not be deliveries to files or + programs. This behavior can also be altered via DontBlameSendmail: + O DontBlameSendmail=forwardfileinunsafedirpath, + forwardfileinunsafedirpathsafe + + The first flag allows the .forward file to be read, the second allows + the items in the file to be marked as safe for file and program + delivery. + + Other files affected by this strengthened security include class files + (i.e. Fw /etc/sendmail.cw), persistent host status files, and the + files specified by the ErrorHeader and HelpFile options. Similar + DontBlameSendmail flags are available for the class, ErrorHeader, and + HelpFile files. + + If you have an unsafe configuration of .forward and :include: files, + you can make it safe by finding all such files, and doing a "chmod + go-w $FILE" on each. Also, do a "chmod go-w $DIR" for each directory + in the file's path. + _________________________________________________________________ + +Q3.34 -- What does "foo not available for sendmail programs" mean? + + Date: September 24, 1999 + + It means that you are using smrsh, the sendmail restricted shell; see + Q2.13 for details on this. To fix this problem, you need to create a + sym-link from smrsh's directory for restricted programs to the program + foo. The default location of this directory for restricted programs is + /usr/adm/sm.bin in the Open Source version, but vendor versions + differ. For example, RedHat Linux 6.0 uses /etc/smrsh, and Solaris 8 + uses /var/adm/sm.bin . If you don't know the directory for your OS, + first check the smrsh man page, then if that fails, try: + % strings /path/to/smrsh | grep ^/ + + where /path/to/smrsh is the P= argument on the Mprog line in + sendmail.cf . + + So for example: + % cd /usr/adm/sm.bin + % ln -s /usr/bin/vacation + + would allow the vacation program to be run from a user's .forward file + or an alias which uses the "|program" syntax. + + Finally, if you want to disable use of smrsh, remove the + FEATURE(`smrsh') line from the .mc file used to build sendmail.cf; see + cf/README for details on this. + _________________________________________________________________ + +Q3.35 -- How do I add a footer/signature to all (outgoing) e-mail messages? + + Date: October 9, 2000 + Updated: August 1, 2001 + Updated: May 16, 2002 + Updated: February 22, 2003 + + This is quite complicated. At first sight it might be simple: just + "cat" some text (taken from a file or whatever) to the end of an + e-mail message passing through sendmail. However, there is a big + problem: what about structured e-mail messages, i.e., MIME messages? + These can be arbitrarily complex and just "cat"ting a footer to the + end of the body can break the MIME structure. (A MIME aware MUA will + just not show such a footer, so it's pretty useless in any case.) But + signed messages (think: PGP) will break. Another problem is the + character set used by the mime part to which the disclaimer is added + needs to match the actual character set of the disclaimer itself. + Hence, there is no easy solution to this problem! + + If you know enough about MIME and some C programming, then take a look + at sendmail 8.11 (or later) and libmilter/README. It now offers the + functionality to achieve this goal. + + Some open source milters are capable of adding footers, e.g. + MIMEDefang. + _________________________________________________________________ + +Q3.36 -- What does "Cannot open hash database ... Invalid argument" mean? + + Date: January 3, 2001 + Updated: February 8, 2001 + + It's an error returned from the Berkeley DB library. It normally means + that the db file was built with a different version of Berkeley DB + than the one sendmail is currently using. You need to recompile + makemap with the same version of Berkeley DB that sendmail was + compiled with, and re-make your maps with that new version of makemap. + + From a typical Unix 'errno' man page: + + 22 EINVAL Invalid argument. Some invalid argument was supplied. + + From the Berkeley DB 2.x 'db_open' man page (1.x 'dbopen' is similar): + +EINVAL + ... + + There is a mismatch between the version number of file and the + software. + + Berkeley DB 3.x uses a special errno value for this - from its + 'db_open' man page: + +DB_OLD_VERSION + The database cannot be opened without being first upgraded. + + Unfortunately this isn't specifically handled by sendmail upto and + including 8.11.2, resulting in an error message that says something + like "Error -30990" instead of "Invalid argument". + + Here is a table mapping versions of Berkeley DB with the corresponding + sendmail versions in which they are supported: + + Berkeley DB Sendmail + 0.X - 1.4 (OLD_NEWDB) 8.1 - 8.8.8 + 1.5 and later 1.X 8.1 and later + 2.0.0-2.6.3 8.9.0 and later + 2.6.4 and later 2.X 8.9.2 and later + 3.0 and later 3.X 8.10.0 and later + _________________________________________________________________ + +Q3.37 -- What does "parse error before `NDBM'" mean? + + Date: April 21, 2001 + + This error is generally accompanied by a message indicating which file + it occurred in, and which line number of that file, usually: +ERROR NDBM or NEWDB must be defined. + + You are supposed to read that line, and do something about it. + + Normally, on Linux and the various BSDs, NEWDB is used, whereas on the + "commercial" Unix variants (Solaris, HP-UX, possibly others), NDBM is + used. Perhaps you failed to install the required libraries when you + installed your system. + + Please refer to 3.31 and the Database Definitions section of our + Compiling Sendmail web page for further details. + _________________________________________________________________ + +Q3.38 -- What does "may be forged" mean? + + Date: November 12, 2001 + + After sendmail does a hostname look-up on the IP address of the + connecting client, the IP addresses of that hostname are looked up. If + the client IP address does not appear in that list, then the may be + forged tag is added. + _________________________________________________________________ + +Q3.39 -- How do I send using an alternate port? + + Date: May 5, 2002 + Updated: January 10, 2004 + + The port used for outgoing SMTP connections can be changed via the + respective *_MAILER_ARGS macros for the various SMTP mailers. In a + default configuration, sendmail uses either the relay mailer (for e.g. + SMART_HOST when no mailer is specified) or the esmtp mailer (when + sending directly to the MX of the recipient domain). + + So, if you want all outgoing SMTP connections to use port 2525, you + can use this in your .mc file: + define(`RELAY_MAILER_ARGS', `TCP $h 2525') + define(`ESMTP_MAILER_ARGS', `TCP $h 2525') + + If you want to use an alternate port only for specific destinations, + change (e.g.) only the RELAY_MAILER_ARGS, and make sure the relay + mailer is not used for anything else. E.g. you can have sendmail use + port 2525 only when sending to your domain with this in your .mc file: + FEATURE(`mailertable') + define(`confRELAY_MAILER', `esmtp') + define(`RELAY_MAILER_ARGS', `TCP $h 2525') + + and then in your mailertable: + yourdomain.com relay:mail.yourdomain.com + + This will force sendmail to use port 2525 for connections to + yourdomain.com. Of course, change 2525 to whatever alternate port + number you wish to use. + _________________________________________________________________ + +Q3.40 -- Why can't I use BerkeleyDB 4.1.x? + + Date: November 15, 2002 + Updated: December 29, 2002 + + SleepyCat changed the API from Berkeley DB 4.0 to 4.1. Hence it is not + supported in sendmail 8.12.6. Moreover, the semantics of the open() + call have been changed, hence sendmail doesn't work with DB 4.1.x (x + <= 24), even if the "obvious" API changes are made. + + However, with the release of Berkeley DB 4.1.25 and sendmail 8.12.7, + things should work again with these versions (or greater, when the + time comes). + _________________________________________________________________ + +Q3.41 -- How do I use CIDR notation in the access map (or other places)? + + Date: December 3, 2002 + + Use contrib/cidrexpand to pre-process the data into a format that is + supported by sendmail. For example: +cidrexpand < access | makemap hash access + _________________________________________________________________ + +Q3.42 -- Why isn't CIDR notation directly supported by sendmail? + + Date: December 3, 2002 + + Because it is in general very expensive to do this. Here's an + explanation from Per Hedeland: + + And not just more complex, it would have to do many more + (comparatively expensive) lookups - there's no way, given (e.g.) + the IP address 66.205.192.123, to find the matching + "66.205.192.0/19" with a single lookup in a general key/value + hashed map. The code would have to look for "66.205.192.123", + "66.205.192.122/31", "66.205.192.120/30", "66.205.192.120/29", etc, + etc - 14 lookups to find a /19, 32 to establish a non-match. + + which is 8 times more than the available octet boundary lookup. + + I haven't done any measurements, but I wouldn't be surprised if + even in the absolute worst case, that your map is 128 times bigger + than it "needs" to be, the time for a single lookup won't even + double - i.e. you'll lose already on the second lookup. + _________________________________________________________________ + +Q3.43 -- What does "Need to recompile with -DNEWDB for hash support" mean? + + Date: December 24, 2002 + + See Q3.31. This is the newer form of the same error message, updated + to be more informative and clueful. The actual line of code contains: + "%s: Need to recompile with -D%s for %s support\n" + + where the first %s gets replaced by the name of the program (generally + makemap), the second %s gets replaced by the name of the macro which + needs to be defined (see the Database Definitions section of our + Compiling Sendmail web page for the full list), and the third %s gets + replaced by the argument to makemap which could not be handled. + _________________________________________________________________ + +Q3.44 -- I disabled sendmail on some machines which don't receive mail, but +since upgrading to 8.12 they can't send mail either; why? + + Date: January 13, 2003 + Updated: October 19, 2005 + + 8.12 uses a new paradigm: the binary is no longer setuid-root; to make + this work, there are now two queues, a "main" queue and a client-only + queue. To match these, there are two config files: one for the main + queue (sendmail.cf) and one for the client-only queue (submit.cf). + There are also two sendmail processes which need to run: a daemon and + a client queue runner. In the default configuration of sendmail, the + client queue runner must be able to submit mail to the daemon on the + local SMTP port. If the daemon is not listening on the SMTP port, the + mail remains in the client-only queue. If you don't want to accept + mail from other machines, you should add some or all of the following + lines to your .mc file: +FEATURE(`no_default_msa')dnl +DAEMON_OPTIONS(`NAME=NoMTA4, Family=inet, Addr=127.0.0.1')dnl +DAEMON_OPTIONS(`Name=MSA4, Family=inet, Addr=127.0.0.1, Port=587, M=E')dnl +DAEMON_OPTIONS(`NAME=NoMTA6, Family=inet6, Addr=::1')dnl +DAEMON_OPTIONS(`Name=MSA6, Family=inet6, Addr=::1, Port=587, M=E')dnl + + Use the FEATURE line regardless, then if your machine has IPv4 + addresses configured, use the first two DAEMON_OPTIONS lines; + likewise, use the second two DAEMON_OPTIONS lines if it has IPv6 + addresses configured, and all four if both types of addresses are + configured. Then build a new .cf file from your .mc file, install it + as /etc/mail/sendmail.cf and start sendmail. + + In some cases, however, it might be better instead to modify + submit.mc, to use +FEATURE(`msp', `smart_host')dnl + + instead of the default +FEATURE(`msp', `[127.0.0.1]')dnl + + This has the advantage that you don't have to run a daemon on the + local host, but a disadvantage of introducing a dependency on the + smart_host machine. Which of the two solutions is better for you + depends on whether or not your network architecture has such a + smart_host, how reliable you deem that smart_host to be, and how + inconvenient running a daemon locally would be. + + + sendmail.org + + 4. GENERAL SENDMAIL ISSUES + + * 4.1 Should I use a wildcard MX for my domain? + * 4.2 How can I set up an auto-responder? + * 4.3 How can I get sendmail to deliver local mail to $HOME/.mail + instead of into /usr/spool/mail (or /usr/mail)? + * 4.4 Why does it deliver the mail interactively when I'm trying to + get it to go into queue only mode? + * 4.5 How can I solve "MX list for hostname points back to hostname" + and "config error: mail loops back to myself" messages? + * 4.6 Why does my sendmail process sometimes hang when connecting + over a SLIP/PPP link? + * 4.7 How can I summarize the statistics generated by sendmail in + the syslog? + * 4.8 How can I check my sendmail.cf to ensure that it's re-writing + addresses correctly? + * 4.9 What is procmail, and where can I get it? + * 4.10 How can I solve "cannot alias non-local names" errors? + * 4.11 Is sendmail Year-2000 (Y2K) compliant? + * 4.12 How can I batch remote mail to be sent using my ISP while + delivering local mail immediately? + * 4.13 What does "unknown mailer error 1" mean? + * 4.14 How do I queue mail for another domain? + * 4.15 How do create attachments with sendmail? + * 4.16 How do I find sendmail's version number? + * 4.17 How do I handle user names with upper-case characters? + * 4.18 What does "NOQUEUE: Null connection from ..." mean? + * 4.19 How do I configure sendmail for POP/IMAP/... ? + * 4.20 How can I automatically copy messages based on sender or + recipient addresses? + * 4.21 How can I send mail to all users? + * 4.22 Why can't I receive external mail? + * 4.23 How do restrict attachments with sendmail? + * 4.24 Can I get sendmail to verify an entire e-mail address instead + of just the domain? + _________________________________________________________________ + +Q4.1 -- Should I use a wildcard MX for my domain? + + Date: July 9, 1996 + Updated: November 5, 1997 + + If at all possible, no. + + Wildcard MX records have lots of semantic "gotcha"s. For example, they + will match a host "unknown.your.domain" -- if you don't explicitly + test for unknown hosts in your domain, you will get "MX list for + hostname points back to hostname" or "config error: mail loops back to + myself". + + See RFCs 1535, 1536, and 1912 (updates RFC 1537) for more detail and + other related (or common) problems. See also _DNS and BIND_ by Albitz + and Liu. + + They can also cause your system to add your domain to outgoing FQDNs + in a desperate attempt to get the mail to where it's supposed to go, + but because *.your.domain is valid due to the wildcard MX, delivery to + not.real.domain.your.domain will get dumped on you, and you may even + find yourself in a loop as the domain keeps getting tacked on time + after time after time (the "config error: mail loops back to myself" + problem). + + Wildcard MX records are just a bad idea, plain and simple. They don't + work the way you'd expect, and virtually no one gets them right. Avoid + them at all costs. + _________________________________________________________________ + +Q4.2 -- How can I set up an auto-responder? + + Date: March 23, 1996 + Updated: February 16, 1999 + Updated: July 30, 2002 + + This is a local mailer issue, not a sendmail issue. Depending on what + you're doing, look at procmail (see Q4.9), ftpmail, Majordomo or of + course vacation, which is part of the sendmail (8.10.0 and later) + distribution. + + The latest version of Majordomo can be found at + ftp://ftp.greatcircle.com/pub/majordomo/. It is written in Perl and + requires either Perl 4.036, and appears to run with only minor tweaks + under 5.001a or later. Make sure to check out the web interface for + Majordomo called LWGate at + http://www.netspace.org/users/dwb/lwgate.html. The latest versions of + Perl (both 4.x and 5.x) can be found in + http://www.metronet.com/perlinfo/src/. More information about Perl can + be found at http://www.metronet.com/perlinfo/perl5.html + + The latest version of ftpmail can be found at + ftp://src.doc.ic.ac.uk/packages/ftpmail or any comp.sources.misc + archive (volume 37). + _________________________________________________________________ + +Subject: Q4.3 -- How can I get sendmail to deliver local mail to $HOME/.mail +instead of into /usr/spool/mail (or /usr/mail)? + + Date: July 9, 1996 + Updated: January 7, 1999 + + Again, this is a local mailer issue, not a sendmail issue. Either + modify your local mailer (source code will be required) or change the + program called in the "local" mailer configuration description to be a + new program that does this local delivery. One program that is capable + of doing this is procmail (see Q4.9), although there are probably many + others as well. + _________________________________________________________________ + +Subject: Q4.4 -- Why does it deliver the mail interactively when I'm trying to +get it to go into queue only mode? + + Date: March 23, 1996 + Updated: August 14, 2000 + + Or, I'm trying to use the "don't deliver to expensive mailer" flag, + and it delivers the mail interactively anyway. I can see it does it: + here's the output of "sendmail -v foo@somehost" (or Mail -v or + equivalent). + + The -v flag to sendmail (which is implied by the -v flag to Mail and + other programs in that family) tells sendmail to watch the + transaction. Since you have explicitly asked to see what's going on, + it assumes that you do not want to to auto-queue, and turns that + feature off. Remove the -v flag and use a "tail -f" of the log instead + to see what's going on. + + If you are trying to use the "don't deliver to expensive mailer" flag + (mailer flag "e"), be sure you also turn on global option + "HoldExpensive" (whose old one-character name was "c") -- otherwise it + ignores the mailer flag. + _________________________________________________________________ + +Subject: Q4.5 -- How can I solve "MX list for hostname points back to hostname" +and "config error: mail loops back to myself" messages? + + Date: January 17, 1997 + Updated: May 8, 2000 + Updated: January 24, 2002 + + I'm getting these error messages: + 553 MX list for domain.net points back to relay.domain.net + 554 <user@domain.net>... Local configuration error + + How can I solve this problem? + + You have asked mail to a domain (e.g., domain.net) to be forwarded to + a specific host (in this case, relay.domain.net) by using an MX + record, but the relay machine doesn't recognize itself as domain.net. + Add domain.net to /etc/mail/local-host-names [known as + /etc/sendmail.cw prior to version 8.10] (if you are using + FEATURE(`use_cw_file')) or add "Cw domain.net" to your configuration + file. + + There are a couple of additional cases where you don't actually want + local delivery, and thus adding domain.net to class w is not the right + fix: + * When relay.domain.net should just be acting as a forwarder, e.g. a + firewall/gateway box. The proper fix could be to set up a + mailertable entry for domain.net. + * When relay.domain.net is a secondary (etc.) MX, and the MX + mistakenly points to a CNAME or other "non-canonical" name [this + gives "config error: mail loops back to me (MX problem?)"]. The + proper fix is to point the MX at the actual name, a "work-around" + to add the MX target to class w. + + IMPORTANT: When making changes to your configuration file, be sure you + kill and restart the sendmail daemon (for any change in the + configuration, not just this one): + kill -HUP `head -1 /var/run/sendmail.pid` + + Note: You can also get this error message (MX loops ...) when two + sendmail systems talk to each other, and both have the same value of + $j . The best solution is "don't do that." + _________________________________________________________________ + +Subject: Q4.6 -- Why does my sendmail process sometimes hang when connecting +over a SLIP/PPP link? + + Date: March 23, 1996 + + I'm connected to the network via a SLIP/PPP link. Sometimes my + sendmail process hangs (although it looks like part of the message has + been transfered). Everything else works. What's wrong? + + Most likely, the problem isn't sendmail at all, but the low level + network connection. It's important that the MTU (Maximum Transfer + Unit) for the SLIP connection be set properly at both ends. If they + disagree, large packets will be trashed and the connection will hang. + _________________________________________________________________ + +Subject: Q4.7 -- How can I summarize the statistics generated by sendmail in +the syslog? + + Date: April 9, 1997 + Updated: January 4, 1999 + Updated: March 27, 2000 + Updated: July 13, 2000 + Updated: May, 2001 + Updated: August, 2001 + Updated: November, 2001 + Updated: May, 2006 + + This question is addressed on pages 445-449 of _sendmail, 2nd Ed_ (see + page 319 of first edition) by Bryan Costales (see entry + sendmail-faq//book/ISBN/1-56592-222-0 in Q6.1). + + To see what else is available today, check the Comprehensive Perl + Archive Network. For more information, see the comp.lang.perl.* FAQs + at ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/lang/perl/. + + If you're interested in using these kinds of tools to help you do some + near real-time monitoring of your system, you might be interested in + MEWS (Mail Early Warning System). From the README: + If you've ever written a perl script to parse sendmail + log files looking for errors, MEWS might be of interest to + you. If you've ever thought about writing a perl script to + munge sendmail log files, cringed a little and hurriedly + came up with an excuse not to do it, read on. + + If you don't have a Solaris 2.5 machine, you can probably + stop reading here. + + The Mail Early Warning System (MEWS) gives postmasters + immediate notification of trouble spots on your mail + backbone. It only works with sendmail. + + To explain it in a nutshell, whenever sendmail returns a + 4xx or 5xx SMTP code, with the MEWS modifications, it also + sends the code over UDP to a daemon which then replays the + error message to interested parties. The man pages go into + a little bit more detail. + + If this sounds like something you might be interested in getting more + details about, you can find the MEWS archive at + ftp://ftp.qualcomm.com/pub/people/eamonn/mews.tar.Z. + + Here's an update from Stephane Lentz on June 29, 2000: + * anteater - written in C++ (+ STL lib), fast, really promising (you + can add modules) + * mreport - written in C, works fine on small logs but not with big + hubs' log (all data are stored into memory) + + See also John Oliver's sendmail tools page for pointers to several + related scripts. (May 25, 2001) + + Brad Knowles's links for popstats, smtpstats and syslog_stats have + been revived at a new location. (May 29, 2001) + + Two new links (November 12, 2001): + * Counterpane: Log Analysis Resources + * LogReport + _________________________________________________________________ + +Subject: Q4.8 -- How can I check my sendmail.cf to ensure that it's re-writing +addresses correctly? + + Date: June 3, 2002 + + Sendmail's test mode is best for this. See the Sendmail Installation + and Operation Guide, § 3.8 (Testing Configuration files); here is a + short sample: +% sendmail -bt -C /path/to/test/sendmail.cf +ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) +Enter <ruleset> <address> +> /tryflags hs +> /try esmtp user@domain.com +Trying header sender address user@domain.com for mailer esmtp +... +> /quit +% + _________________________________________________________________ + +Subject: Q4.9 -- What is procmail, and where can I get it? + + Date: April 8, 1997 + Updated: February 28, 1999 + + The program "procmail" is a replacement for the local mailer + (variously called /bin/mail, /usr/bin/mail, mail.local, rmail, + etc...). It has been ported to run on virtually every Unix-like OS + you're likely to run into, and has a whole host of features. It is + typically about 30% faster performing the job of the local mailer than + programs such as /bin/mail or /usr/bin/mail, it has been hammered on + widely to make it extremely secure (much more so than most local + mailers) and very robust. Procmail is also capable of helping you put + a quota on a user's mailbox through the standard Unix quota mechanism + (see Q4.3). + + In short, whatever you've got, you're almost guaranteed that procmail + is better (if nothing else, the author has been able to focus lots of + time and energy into making it the best and fastest tool available, + while most system vendors just throw something together as fast as + they can and move on to the whole rest of the OS). + + However, this only begins to scratch the surface of what procmail is + capable of. It's most important feature is the fact that it gives you + a standard way to create rules (procmail calls them "recipes") to + process your mail before the messages get put into your mailbox, and + for that feature alone, it is one of the most important tools any + administrator can have in their repertoire. By filtering out or + automatically dealing with 80% of your daily cruft, it lets you spend + more time on the hard 20%. + + Note that recent releases of version 8 sendmail natively support using + procmail as an alternate local mailer (see "FEATURE(local_procmail)" + for version 8.7 and above). They also support procmail as an + additional local mailer, if you're concerned about flat-out replacing + your current local mailer with procmail (see "MAILER(procmail)" in + version 8.7 and above). + + You can also install procmail as a user and run it out of your + .forward file, although this tends to be a bit slower and less + efficient. + + More information about procmail can be found at + http://www.procmail.org/ and the latest version can be found at + ftp://ftp.procmail.org/pub/procmail/. + + Procmail is also the core to a mailing list management package called + "SmartList", so if you've already got procmail, adding SmartList may + be a good option. Some listowners prefer Majordomo, Listserv, or one + of those other programs, but SmartList has more than a few adherents + as well. Your personal tastes will dictate whether you swear by + SmartList or at it. + _________________________________________________________________ + +Subject: Q4.10 -- How can I solve "cannot alias non-local names" errors? + + Date: March 24, 1997 + + I upgraded from my vendor's sendmail to the latest version and now I'm + getting these error messages when I run "newaliases": +/etc/aliases: line 13: MAILER-DAEMON... cannot alias non-local names +/etc/aliases: line 14: postmaster... cannot alias non-local names + + How can I solve this problem? + + Your local mailer doesn't have the "A" flag specified. Edit the Mlocal + line in sendmail.cf and add "A" to the flags listed after "F=". + + Better yet, if you're running a recent version of sendmail that uses + m4 to generate .cf files from .mc files, regenerate your sendmail.cf + and see if that fixes the problem. Remember to install the new + sendmail.cf and restart the sendmail daemon. + _________________________________________________________________ + +Subject: Q4.11 -- Is sendmail Year-2000 (Y2K) compliant? + + Date: April 24, 1997 + Updated: July 7, 1999 + + Please refer to the Sendmail Year 2000 Readiness Disclosure page. + _________________________________________________________________ + +Subject: Q4.12 -- How can I batch remote mail to be sent using my ISP while +delivering local mail immediately? + + Date: October 14, 1997 + Updated: February 9, 1999 + Updated: May 19, 2004 + + First, you need to get sendmail not to use DNS on your local machine + so your host doesn't trying to connect to your ISP for a DNS query. + See Q3.22 for more information. + + You also need to designate a "smart host" or external relay to handle + all mail that you can't deliver locally (this would be your ISP's + mailhost). + + You need to configure it so that the smtp mailer is considered + "expensive" by adding the F=e mailer flag and tell sendmail not to + connect to expensive mailers by default by setting the HoldExpensive + option to True. + + You need to add mydomain.com to the sendmail.cw file or the Cw line in + the sendmail.cf. See Q4.5. + + Finally, you need to run a program periodically to check in with your + ISP and get them to deliver any mail they may have queued for you. See + Q3.23. + + Andrzej Filip offers a different solution based on use of the dsmtp + mailer (introduced in 8.10) instead of expensive mailers. + _________________________________________________________________ + +Subject: Q4.13 -- What does "unknown mailer error 1" mean? + + Date: September 24, 1998 + + In general, sendmail does not perform final delivery of messages, but + relies on a local delivery agent instead. Such an agent, mail.local, + is provided with the sendmail distribution. Any such agent that + sendmail invokes for message delivery, as specified on an M line in + sendmail.cf, must exit with code 0 (success), or one of the failure + codes noted in src/sysexits.h. These generally run in the range 64 - + 78, so 1 would be out of range, and lead to sendmail generating the + above error. + _________________________________________________________________ + +Subject: Q4.14 -- How do I queue mail for another domain? + + Date: April 28, 1999 + Updated: December 21, 2000 + Updated: May 19, 2004 + + Situation: Your system mailserver.my.domain should act as a backup + mailserver for mailserver.destination.domain. The client wants to + receive mail for the address user@destination.domain. This requires: + 1. MX Records: +destination.domain. IN MX 10 mailserver.destination.domain. +destination.domain. IN MX 20 mailserver.my.domain. +mailserver.destination.domain. IN MX 10 mailserver.destination.domain. +mailserver.destination.domain. IN MX 20 mailserver.my.domain. + The last two records are there "just in case" (someone forgot + masquerading). + Make sure you use the real names of all systems. + mailserver.my.domain must know its own name, otherwise you'll get + the famous mail loops back to myself error. + Instead of using MX records that point to + mailserver.destination.domain, you can use the + FEATURE(mailertable) on mailserver.my.domain as explained in + cf/README for routing e-mails. + 2. On your system: do nothing unless you have anti-relay rules + installed (which you really should have!). In this case, add + destination.domain to the required files (8.9) (or for 8.8). Don't + add destination.domain or mailserver.destination.domain to class w + on your system! + If you want finer-grained control, then instead of updating + /etc/mail/relay-domains, add the following to /etc/mail/access, as + the access map entries allows relaying only "To:" a domain, while + relay-domains allows both directions. +To:destination.domain RELAY + 3. sendmail on your system will try to deliver mail during queue + runs, however, the client may trigger delivery by using the ETRN + command. + _________________________________________________________________ + +Subject: Q4.15 -- How do I create attachments with sendmail? + + Date: May 26, 1999 + + You don't. Sendmail is a mail transfer agent (MTA). Creating e-mail + messages, including adding attachments or signatures, is the function + of a mail user agent (MUA). Some popular MUAs include mutt, elm, exmh, + Netscape, Eudora and Pine. Some specialized packages (metamail, some + Perl modules, etc.) can also be used to create messages with + attachments. + _________________________________________________________________ + +Subject: Q4.16 -- How do I find sendmail's version number? + + Date: August 2, 1999 + Updated: July 19, 2000 + Updated: December 28, 2001 + + To find out which version is actually running, from without, telnet to + the SMTP port (port 25). The daemon usually announces its name and + version number, as in +thishost% telnet that.host 25 +Trying IP_addr... +Connected to that.host. +Escape character is '^]'. +220 that.host ESMTP Sendmail 8.12.1/8.12.1; Fri, 28 Dec 2001 11:39:34 -0800 +QUIT + + To query a binary on your local host, the following command should + display its version number, along with some extra configuration + information, possibly including the configuration version number: +% echo \$Z | /usr/sbin/sendmail -bt -d0 +Version 8.12.1 + Compiled with: MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND + NETINET NETUNIX NEWDB NIS QUEUE SCANF SMTP USERDB XDEBUG + +============ SYSTEM IDENTITY (after readcf) ============ + (short domain name) $w = knecht + (canonical domain name) $j = knecht.Sendmail.ORG + (subdomain name) $m = Sendmail.ORG + (node name) $k = knecht.Sendmail.ORG +======================================================== + +ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) +Enter <ruleset> <address> +> 8.12.1 +% + + Adjust the pathname as needed; /usr/lib and /usr/sbin are the most + common locations. + _________________________________________________________________ + +Subject: Q4.17 -- How do I handle user names with upper-case characters? + + Date: November 18, 1999 + Updated: August 8, 2001 + + You really shouldn't, because upper case characters in user names are + contrary to the Unix tradition. If you do, then e-mail addresses will + be case sensitive, so that mail to <USER@your.host> will bounce + instead of being delivered to <user@your.host>. As this is contrary to + the expectations of many, it is not recommended. + + But if you insist on doing so anyway, and you have version 8.10, put + the following in your .mc file: +MODIFY_MAILER_FLAGS(`LOCAL', `+u')dnl + + If you don't have 8.10, you will need to redefine the + LOCAL_MAILER_FLAGS m4 variable, but the initial value varies from OS + to OS, so this is yet another reason not to mess with this flag. + + Another hack is the creation of aliases for Uppercase local users in + the form: +# lowercase version to real one +uppercase: Uppercase + + It will make sendmail deliver messages to uppercase local recipients + in a case insensitive manner. + _________________________________________________________________ + +Subject: Q4.18 -- What does "NOQUEUE: Null connection from ..." mean? + + Date: February 24, 2000 + Updated: March 12, 2000 + + An entry like: +NOQUEUE: Null connection from host.domain [IP.AD.DD.RESS] + + in the logfile means that host.domain connected to your MTA but + neither initiated transmission of a message (by issuing the MAIL + command), nor used any of the commands that are logged separately + (EXPN/VRFY/ETRN). Unless this happens very often, you can ignore this. + If it happens very often, it's either someone playing around or it's a + network problem. + + Note 1: The significant part of the message isn't the NOQUEUE, but the + "Null connection from ...". In particular, NOQUEUE isn't an error + indication, but just a "place-holder" when no queue ID has been + assigned, typically because message collection hasn't started (yet). + It can occur in other messages too, and there too the significant part + is what comes after the NOQUEUE. + + Note 2: In 8.10, the text which led to the confusion has been changed + to: "... did not issue MAIL/EXPN/VRFY/ETRN during connection to ...". + _________________________________________________________________ + +Subject: Q4.19 -- How do I configure sendmail for POP/IMAP/... ? + + Date: March 12, 2000 + + You don't. Sendmail is a mail transfer agent whose primary purpose is + to send and receive e-mail (primarily via SMTP). Sendmail does not + implement any remote access protocols such as POP or IMAP. But if you + want to learn more about these and other (non-sendmail) e-mail related + things, please refer to our Other (Non-Sendmail) E-Mail Related Links + page. + _________________________________________________________________ + +Subject: Q4.20 -- How can I automatically copy messages based on sender or +recipient addresses? + + Date: June 30, 2000 + Updated: February 27, 2001 + Updated: June 5, 2001 + Updated: February 13, 2003 + + It would require custom programming. You could either write a mail + filter using the new Milter API in sendmail 8.10 and later (see + libmilter/README) or you could look at some of these other unsupported + hints: + * Axel Reinhold's logall.c module + * Message-Id: <33AA593A.4B701C3F@syntegra.nl> + * the procmailrc man page + + Note that no such feature has been added to sendmail. When asked about + this one of the sendmail developers said it was "because we still + believe a bit in privacy." + _________________________________________________________________ + +Subject: Q4.21 -- How can I send mail to all users? + + Date: December 12, 2000 + + There is no magic short-cut for this. But it is not hard to set up: + create an aliases entry +alluser: :include:/etc/mail/allusers + + Don't forget to run 'newaliases'. Then list your users, one per line, + in the file '/etc/mail/allusers'. You might be able to do that with + awk -F: '$3 > 100 { print $1 }' /etc/passwd > /etc/mail/allusers + _________________________________________________________________ + +Subject: Q4.22 -- Why can't I receive external mail? + + Date: December 4, 2002 + Updated: August 16, 2004 + + Several vendors have changed the way that sendmail is run. They + decided that most people need a client-only version of sendmail. So it + is listening only on the localhost interface. Check the system + documentation on how to change your .mc file. Here is a partial table + of where some vendors ship their sendmail configuration hierarchy: + + sendmail distribution ./cf + Solaris 7,8,9 /usr/lib/mail + Solaris 10 /etc/mail/cf + Red Hat 6.2 /usr/lib/sendmail-cf + Red Hat 7 /usr/share/sendmail-cf + Slackware 7.1 /usr/src/sendmail/cf + + But you should check for yourself on your own system. When in doubt, + do a find for "proto.m4", then go up the tree one level. When you find + the .mc file, look for the string "DAEMON_OPTIONS" and for the comment + lines near that string. + + See also 5.3.1.3 for discussion about this problem as it relates + specifically to Red Hat 7.1 and later. + _________________________________________________________________ + +Subject: Q4.23 -- How do I restrict attachments with sendmail? + + Date: May 19, 2004 + + sendmail itself does not look at the content of a message, so it is + not in a position to strip attachments. You need a filtering package + that works with sendmail. You might want to look at www.milter.org for + some open source solutions that use our "milter" facility. There's + also something called MIMEDefang that can do it. You can also get + commercial products to do it (see www.sendmail.com for example). + _________________________________________________________________ + +Subject: Q4.24 -- Can I get sendmail to verify an entire e-mail address instead +of just the domain? + + Date: May 19, 2004 + + If the e-mail comes from example.com, you have to look up the MX or A + records for example.com to figure out which mail server to ask if the + user is valid. The DNS could be slow or unresponsive. The remote + server could be slow or unresponsive. + + If you were to make such checks, a bad guy could bombard you with mail + claiming to come from hotmail.com users, and then suddenly you would + be connection-bombing Hotmail's mail servers asking them about the + recipients the bad guy is claiming to be. + + The only safe way to do this is to verify that the sender exists when + the sender claims to be in your domain. Naturally you are then in a + position to confirm or deny the sender is valid. + + + sendmail.org + + 5. VENDOR/OS SPECIFIC SENDMAIL ISSUES + + * 5.1 Sun Microsystems SunOS/Solaris 1.x/2.x + + 5.1.1 How can I solve "line 273: replacement $3 out of + bounds" errors? + + 5.1.2 How can I solve "line 445: bad ruleset 96 (50 max)" + errors? + + 5.1.3 Why does version 8 sendmail (< 8.7.5) sometimes hang + under Solaris 2.5? + + 5.1.4 Why can't I use SunOS/Solaris to get email to certain + large sites? + + 5.1.5 Why do I have trouble compiling on Solaris? + + 5.1.6 How does 8.X compare to 8.X+Sun? + * 5.2 IBM AIX + + 5.2.1 The system resource controller always reports sendmail + as "inoperative". What's wrong? + + 5.2.2 Why can't I use AIX to get email to some sites? + + 5.2.3 Why can't I get sendmail 8.7.1 to use MX records with + AIX 3.2.5? + * 5.3 Linux + + 5.3.1 Red Hat + o 5.3.1.1 Why do I have so many sendmail problems after + configuring sendmail with linuxconf? + o 5.3.1.2 I built sendmail.cf from sendmail.mc and it + works until the next reboot of the machine. What is + going on? + o 5.3.1.3 Why can't I receive mail with Red Hat 7.1 and + later? + + 5.3.2 SuSE + o 5.3.2.1 Where is the sendmail.cf file on SuSe Linux? + _________________________________________________________________ + +5.1 -- Sun Microsystems SunOS/Solaris 1.x/2.x + _________________________________________________________________ + + Q5.1.1 -- How can I solve "line 273: replacement $3 out of bounds" errors? + + Date: March 23, 1996 + + When I use sendmail V8 with a Sun config file I get lines like: + /etc/sendmail.cf: line 273: replacement $3 out of bounds + + the line in question reads: + R$*<@$%y>$* $1<@$2.LOCAL>$3 user@ether + + what does this mean? How do I fix it? + + V8 doesn't recognize the Sun "$%y" syntax, so as far as it is + concerned, there is only a $1 and a $2 (but no $3) in this line. Read + Rick McCarty's paper on "Converting Standard Sun Config Files to + Sendmail Version 8", in the contrib directory (file + "converting.sun.configs") in the latest version 8 sendmail + distribution for a full discussion of how to do this. + _________________________________________________________________ + + Q5.1.2 -- How can I solve "line 445: bad ruleset 96 (50 max)" errors? + + Date: March 23, 1996 + + When I use sendmail V8 on a Sun, I sometimes get lines like: + /etc/sendmail.cf: line 445: bad ruleset 96 (50 max) + + what does this mean? How do I fix it? + + You're somehow trying to start up the old Sun sendmail (or + sendmail.mx) with a version 8 sendmail config file, which Sun's + sendmail doesn't like. Check your /etc/rc.local, any procedures that + have been created to stop and re-start the sendmail processes, etc.... + Make sure that you've switched everything over to using the new + sendmail. To keep this problem from ever happening again, try the + following (make sure you're logged in as root): + mv /usr/lib/sendmail /usr/lib/sendmail.old + ln -s /usr/local/lib/sendmail.v8 /usr/lib/sendmail + mv /usr/lib/sendmail.mx /usr/lib/sendmail.mx.old + ln -s /usr/local/lib/sendmail.v8 /usr/lib/sendmail.mx + chmod 0000 /usr/lib/sendmail.old + chmod 0000 /usr/lib/sendmail.mx.old + + Assuming, of course, that you have installed sendmail V8 in + /usr/local/lib/sendmail.v8. + _________________________________________________________________ + + Q5.1.3 -- Why does version 8 sendmail (< 8.7.5) sometimes hang under Solaris + 2.5? + + Date: May 23, 1996 + + In moving from Solaris 2.4 to Solaris 2.5, the kernel changed its name + and is now in /kernel/genunix instead of /kernel/unix, so _PATH_UNIX + in conf.h is pointing to the wrong place. + + If you can't upgrade to the latest release of sendmail 8.8.z, the next + best thing to do is change _PATH_UNIX in conf.h (in the solaris2 part) + to point to the generic interface /dev/ksyms, like so: + # define _PATH_UNIX "/dev/ksyms" + _________________________________________________________________ + + Q5.1.4 -- Why can't I use SunOS/Solaris to get email to certain large sites? + + Date: November 24, 1996 + + This is most likely a problem in your resolver libraries (DNS, + /etc/hosts, NIS, etc...). Older Sun (and Solaris?) resolver libraries + allocated enough room for only five IP addresses for each host name, + and if any program ever ran across a name with more than five IP + addresses for it, the program would crash. + + For example, this would keep you from getting mail to CompuServe, + since (at the time of this writing) they list eleven IP addresses for + mx1.compuserve.com (one of the named MXes for compuserve.com). + + This will affect you even if you use version 8 sendmail, since it's a + problem in the resolver libraries, and not in sendmail itself. + + You should either get patches to the resolver libraries from Sun, or + the latest version of BIND (see Q2.12) and install their resolver + library routines. Between the two, installing BIND is a bit more work, + but it typically gives you much more up-to-date code to help you + resist attacks to your systems, more capable programs to be used for + serving the DNS (including support for IPv6 and several other + features), and some very useful utility programs. + _________________________________________________________________ + + Q5.1.5 -- Why do I have trouble compiling on Solaris? + + Date: October 20, 1997 + + Many people have experienced compilation problems on Solaris, with the + compiler typically complaining about tm_zone or TopFrame. The Solaris + section of our Compiling Sendmail page explains these. + _________________________________________________________________ + + Q5.1.6 -- How does 8.X compare to 8.X+Sun? + + Date: August 29, 1998 + + With a Vn/Berkeley config file, they're identical. There are a few + minor differences between 8.X with a Vn/Berkeley config file and + 8.X+Sun with the same config file, but the V line changed to Vn/Sun. + But most differences are the backwards compatibility hacks needed for + 8.X+Sun to support old V1/Sun config files. + + There are three web pages which discuss these in detail: Berkeley + migration (from SMI-8.6 to 8.X), Sun migration (from SMI-8.6 to + 8.X+Sun), and Differences (5 sections comparing and contrasting config + files and binaries). + _________________________________________________________________ + +5.2 -- IBM AIX + _________________________________________________________________ + + Q5.2.1 -- The system resource controller always reports sendmail as + "inoperative". What's wrong? + + Date: July 5, 1996 + Updated: January 30, 2002 + + When I use version 8 sendmail on an IBM RS/6000 running AIX, the + system resource controller always reports sendmail as "inoperative", + even though it's actually running. What's wrong? + + When running as a daemon, sendmail detaches from its parent process, + fooling the SRC into thinking that sendmail has exited. To fix this, + issue the commands: + kill `head -1 /etc/sendmail.pid` + chssys -s sendmail -f 9 -n 15 -S -a "-bD" + startsrc -s sendmail -a "-bd -q30m" + # your sendmail args may vary + + Now the SRC should report the correct status of sendmail. + + For more information, read up on the System Resource Controller, the + lssrc command and the chssys command in the online AIX documentation. + _________________________________________________________________ + + Q5.2.2 -- Why can't I use AIX to get email to some sites? + + Date: April 8, 1997 + + When I use IBM's sendmail on an IBM RS/6000 running AIX trying to get + to certain sites, it seems that I can get to some of them and not + others. What's wrong? + + There are two possible problems here: + + 1) Your version of sendmail is not configured to recognize MX records + in the DNS. Search through your sendmail.cf looking for "OK MX" or "OK + ALL". Older configurations had this line commented out, and this will + cause mail from you to some sites to fail (because those sites have MX + records, but no A records in their DNS for the specific Fully + Qualified Domain Name you're trying to mail to). + + For more information, see the comp.unix.aix FAQ + ftp://rtfm.mit.edu/pub/usenet/news.answers/aix-faq/. + + 2) There is a negative caching bug in AIX 3.2.5 with /usr/sbin/named + executables that are less than 103000 bytes long. Ask your IBM + representative to give you PMP 3251, or the most recent patch that + fixes this problem for your particular configuration and version of + the OS. + _________________________________________________________________ + + Q5.2.3 -- Why can't I get sendmail 8.7.1 to use MX records with AIX 3.2.5? + + Date: July 5, 1996 + + IBM, in their infinite wisdom, provided a header file that would + easily mis-compile. This resulted in the struct{} for the DNS query to + be mis-allocated, and MX processing would barf. + + Fix 1) upgrade to 8.7.5 - this has a code fix for this problem. + + Fix 2) Install the BIND 4.9.4 libraries and include files and tweak + the Makefile.AIX to use them - I *think* these Get It Right (if not, + at least it'll die during compile rather than failing weirdly at + runtime). + + Fix 3) Hack Makefile.AIX to pass a -DBIT_ZERO_ON_LEFT to cause the + headers to use the right #ifdefs. + _________________________________________________________________ + +5.3 -- Linux + _________________________________________________________________ + + 5.3.1 -- Red Hat + _________________________________________________________________ + + 5.3.1.1 -- Why do I have so many sendmail problems after configuring + sendmail with linuxconf? + + Date: June 15, 2000 + Updated: September 27, 2000 + + Do not edit sendmail.cf with linuxconf. This tool and its module + "mailconf" are broken and based on very old rulesets from 8.8.7 . You + will have many troubles if you do this. First make sure that the + sendmail-cf RPM is installed. Then create your own myhost.mc file in + /usr/lib/sendmail-cf/cf: + % cd /usr/lib/sendmail-cf/cf + % cp redhat.mc myhost.mc + (Edit myhost.mc) + % m4 ../m4/cf.m4 myhost.mc > myhost.cf + (Test this new myhost.cf; once it's known good, install it:) + (If 8.9.x or earlier:) + % cp myhost.cf /etc/sendmail.cf + % chown root /etc/sendmail.cf + (If 8.10.x or later:) + % cp myhost.cf /etc/mail/sendmail.cf + % chown root /etc/mail/sendmail.cf + + See /usr/doc/sendmail/README.cf (or just README) for features and + detailed instructions how to do this. + _________________________________________________________________ + + 5.3.1.2 -- I built sendmail.cf from sendmail.mc and it works until the next + reboot of the machine. What is going on? + + Date: June 15, 2000 + + If you have used linuxconf's module "mailconf" just once, it will + rewrite your sendmail.cf on every reboot if it sees that sendmail.cf + is changed from linuxconf. The solution is to remove the mailconf + module from linuxconf. Turn on linuxconf and go to item + Control files and systems > Configure Linuxconf modules + + Scroll down to "Module path -> mailconf" and turn off the button "this + module is active", then click "Accept" and "quit" to quit linuxconf. + + This will disable linuxconf's control of sendmail. Build sendmail.cf + again from sendmail.mc (see 5.3.1), and restart sendmail. + _________________________________________________________________ + + 5.3.1.3 -- Why can't I receive mail with Red Hat 7.1 and later? + + Date: May 3, 2001 + Updated: June 11, 2001 + Updated: December 4, 2002 + + Red Hat, like some other vendors, changed the way that sendmail is + run. (See 4.22 for a more general discussion of this problem.) They + decided that most people need a client-only version of sendmail. So it + is listening only on the localhost interface. Check the RH + documentation on how to change that: + + Make sure that you have installed the "sendmail-cf" package on your + system -- it should be on your install media. + + Then check the file "sendmail.mc" (probably in "/etc/mail"). Look for + the string "DAEMON_OPTIONS" and for the comment lines near that + string. + + Also note that Red Hat 7.1 and later build sendmail with tcpwrapper + support, and provide a hosts.deny file that rejects all external mail. + The sendmail:ALL addition to hosts.allow fixes this. + _________________________________________________________________ + + 5.3.2 -- SuSE + _________________________________________________________________ + + 5.3.2.1 -- Where is the sendmail.mc file on SuSE Linux? + + Date: May 5, 2002 + + On SuSE Linux systems there is no real sendmail.mc file. This file is + generated 'on the fly' by SuSEconfig using several variables in + /etc/rc.config and /etc/rc.config.d/sendmail.rc.config (SuSE <= 7.3) + or /etc/sysconfig/sendmail (SuSE >= 8.0). + + SuSEconfig executes the script /sbin/conf.d/SuSEconfig.sendmail to a) + build a temorary .mc file b) execute m4 to generate /etc/sendmail.cf + and c) delete the temporary .mc file afterwards. + + To make customisations you cannot achieve by modifying the variables + in the configuration files mentioned above (using YaST or YaST2), you + have two options: + 1. Use /etc/mail/linux.mc (or /etc/mail/linux.nullclient.mc) as a + starting point. Both files contain several helpful comments. + 2. To get a .mc file based on your current configuration, modify + /sbin/conf.d/SuSEconfig.sendmail to keep the temporary .mc file + and execute SuSEconfig afterwards. Then use that copy as starting + point. + + In both cases you have to build your /etc/sendmail.cf (note: SuSE + still uses /etc not /etc/mail as suggested in the manual) using the m4 + macroprocessor: +m4 your.mc.file > /etc/sendmail.cf + + Then reload sendmail with "rcsendmail reload". + + To prevent SuSEconfig from overiding your new sendmail.cf in future + runs, set the variable "SENDMAIL_TYPE" in + /etc/rc.config.d/sendmail.rc.config to "no" (SuSE Linux <= 7.3). On + systems >= 8.0 you probably will have to set an "exit" command atop of + the file /sbin/conf.d/SuSEconfig.sendmail to do the same. SuSE 8.0 + does not know the SENDMAIL_TYPE variable. + + + sendmail.org + + 6. ADDITIONAL INFORMATION SOURCES (RFC 1807 bibliography format) + + * 6.1 Reference material devoted exclusively to sendmail + * 6.2 Reference material with chapters or sections on sendmail + * 6.3 Reference material on subjects related to sendmail + * 6.4 World-wide web index pages on sendmail + * 6.5 World-wide web index pages Internet email in general + * 6.6 Online tutorials for sendmail + * 6.7 Online archives of mailing lists and Usenet newsgroups, + relating to Internet email + _________________________________________________________________ + +Q6 -- Additional information sources + + Date: April 8, 1997 + Updated: July 20, 2002 + + This probably isn't in strict RFC 1807 format, but I'm getting closer. + Unfortunately, the format detailed in RFC 1807 was never intended to + be used in this fashion, so I'm doing a bit of square-peg fitting into + round holes. + + Note that the publisher ids that I've assigned should not be + misconstrued to imply that I have actually published all these + documents, it's just that I need some sort of reasonable entry for the + RFC 1807 "ID" field, and in lieu of information to the contrary + indicating what the actual publishers have registered, I have assigned + my own, independent, "third-party" IDs. Hopefully, the bibliographic + entries below make it obvious who the real publishers of the various + documents are. + _________________________________________________________________ + +6.1 Reference material devoted exclusively to sendmail + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/reference/1 + ENTRY:: March 23, 1996 + TYPE:: Reference manual, available online in printable format + REVISION:: July 19, 2002 + TITLE:: Sendmail Installation and Operation Guide + AUTHOR:: Allman, Eric + AUTHOR:: Shapiro, Gregory + AUTHOR:: Aßmann, Claus + CONTACT:: <sendmail-questions@Sendmail.ORG> + DATE:: July 20, 2002 + PAGES:: 100 + RETRIEVAL:: Contents of manual is in doc/op/op.ps of sendmail source + archive + KEYWORD:: version 8.12.5 sendmail + LANGUAGE:: English + NOTES:: {g|n}roff "me" macro format version is in doc/op/op.me + See: URL:http://www.sendmail.org/ + + ABSTRACT:: + + The documentation written by Eric Allman himself, comes with the + sendmail distribution. It is absolutely necessary to have this guide + at hand at all times. Section one tells how to do an installation. + Section two explains day to day information you should know to run a + mail system. Tuning, queue management and features for access control + are all documented in this guide. The file in doc/op/op.me (nroff "me" + macro format) may have a different number of pages depending on the + type of device it is printed on, etc.... + + Check the sendmail home page for late-breaking updates and other + useful information. + + If you want to be notified regarding future updates to sendmail and + other items of potential interest, you may want to subscribe to the + sendmail-announce mailing list. Address your subscription requests to + "majordomo@lists.sendmail.org" with "subscribe sendmail-announce" as + the body of the message. + + END:: sendmail-faq//online/reference/1 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/1-56592-222-0 + ENTRY:: March 23, 1996 + REVISION:: April 8, 1997; Updated entire entry re: 2nd Ed. + TYPE:: Reference book, hardcopy + TITLE:: sendmail + AUTHOR:: Costales, Bryan + AUTHOR:: Allman, Eric + CONTACT:: Bryan Costales <bcx@BCX.COM> + O'Reilly & Associates, Inc. + 103 Morris Street, Suite A + Sebastapol, CA 95472 + Order by phone: 800-998-9938 (US/Canada inquiries) + 800-889-8969 (US/Canada credit card orders) + 707-829-0515 (local/overseas) + DATE:: January, 1997 + PAGES:: 1021 + COPYRIGHT:: Copyright (c) 1997 O'Reilly & Associates, Inc. All rights + reserved. + LANGUAGE:: English + NOTES:: See: URL:http://www.ora.com/catalog/sendmail2/ + + ABSTRACT:: + + The definitive reference for version 8 sendmail (specifically, version + 8.8). If you can have only one book on the subject of sendmail, this + one is it. + + Bryan provides his consulting to the world in the form of his book, + unless you're willing to compensate him for his services as well. Like + Eric, you should make sure you've exhausted all other courses of + action before you spend any of his valuable time. + + END:: sendmail-faq//book/ISBN/1-56592-222-0 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/1-55558-127-7 + ENTRY:: March 23, 1996 + TYPE:: Reference book, hardcopy + REVISION:: Sep 9, 1996; fixed typo + TITLE:: Sendmail: Theory and Practice + AUTHOR:: Avolio, Frederick M. + AUTHOR:: Vixie, Paul A. + CONTACT:: Fred Avolio <fma@al.org>, Paul Vixie <vix@al.org> + Digital Press + 225 Wildwood Avenue + Woburn, MA 01801, USA + Ordering Info: voice 1 800 366 2665 + fax 1 800 446 6520 + DATE:: 1994 + PAGES:: 262 + COPYRIGHT:: Copyright (c) by 1995 Butterworth-Heinemann + LANGUAGE:: English + NOTES:: See: URL:http://www.vix.com/vix/smtap/ + + ABSTRACT:: + + Centers more on IDA sendmail (at least partly because version 8 didn't + exist when they began the book). Written more like a college Sophomore + or Junior level textbook. + + While you'll probably never let the Costales book out of your grubby + little hands (especially if you do much work with version 8 sendmail), + this is a book you'll probably read once or maybe twice, learn some + very valuable things, but then likely put on a shelf and not read or + reference again (unless you have to write up a bibliographic entry for + it). Makes a better introduction to sendmail for management types, + especially if you don't want them getting their hands on too much + "dangerous" technical information. Also a *lot* smaller and less + imposing. + + If possible, I recommend getting both, but if you can only get one, + get Costales unless you're going to be working exclusively with IDA + sendmail, in which case Avolio & Vixie will probably be more useful. + + Note that Paul Vixie is extremely busy working on further development + of BIND, the Internet de facto standard program for serving the DNS, + upon which all Internet services depend, mail being only one of them. + Like Eric and Bryan, he's also very busy. Unless you're willing to + compensate him for his services, please let him get real work done. + + END:: sendmail-faq//book/ISBN/1-55558-127-7 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/1-56592-278-6 + ENTRY:: April 14, 1999 + REVISION:: + TYPE:: Pocket size reference, hardcopy + TITLE:: sendmail Desktop Reference + AUTHOR:: Costales, Bryan + AUTHOR:: Allman, Eric + CONTACT:: Bryan Costales <bcx@BCX.COM> + O'Reilly & Associates, Inc. + 103 Morris Street, Suite A + Sebastapol, CA 95472 + Order by phone: 800-998-9938 (US/Canada inquiries) + 800-889-8969 (US/Canada credit card orders) + 707-829-0515 (local/overseas) + DATE:: June, 1997 + PAGES:: 68 + COPYRIGHT:: Copyright (c) 1997 O'Reilly & Associates, Inc. All rights + reserved. + LANGUAGE:: English + NOTES:: See: URL:http://www.ora.com/catalog/sendmailqr/ + + ABSTRACT:: + + A companion to the sendmail book. This small guide fits in pocket and + saves you having to carry the thousand page book in your briefcase. + For detail or tutorial information, see the full sendmail book. There + are sections on the config file, databases and configuring with m4. + There are extensive cross-references to the full sendmail book. + + END:: sendmail-faq//book/ISBN/1-56592-278-6 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/0-7821-2737-1 + ENTRY:: July 19, 2002 + TYPE:: Reference book, hardcopy + TITLE:: Linux Sendmail Administration + AUTHOR:: Hunt, Craig + CONTACT:: SYBEX, Inc. + 1151 Marina Village Parkway + Alameda, CA 94501 + Order on-line: www.sybex.com + also: Bookpool.com (www.bookpoolcom) + DATE:: February 2001 + PAGES:: 457 + LANGUAGE:: English + + ABSTRACT:: + + This book is useful whether you run Linux or some other Unix version. + It attempts to simplify sendmail by covering only configuration + options usually needed, which reduces some complexity for new sendmail + administrators. Covered are: using the m4 language to build a sendmail + configuration, using sendmail databases such as access maps, testing + and debugging and using sendmail authentication techniques. Covers + some things not in the Costales book (the "Bat Book") which was last + updated for sendmail 8.8. + + END:: sendmail-faq//book/ISBN/0-7821-2737-1 + END:: sendmail-faq//book/ISBN/0-321-11570-8 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/0-321-11570-8 + ENTRY:: October 12, 2002 + REVISION:: + TYPE:: Reference book, hardcopy + TITLE:: sendmail Performance Tuning + AUTHOR:: Christenson, Nick + CONTACT:: Nick Christenson <npc@acm.org> + Addison-Wesley Professional + 75 Arlington St., Suite 300 + Boston, MA 02116 USA + Order on the web at: + http://www.pearsonptg.com/book_detail/0,3771,0321115708,00.html + DATE:: September, 2002 + PAGES:: 256 + COPYRIGHT:: Copyright (c) 2003 by Pearson Eduction, Inc., All rights + reserved. + LANGUAGE:: English + NOTES:: See: URL:http://www.jetcafe.org/~npc/book/sendmail/ + + ABSTRACT:: + + As email traffic continues to increase, system administrators must be + able to guarantee that their email servers can deliver reliable + performance today and bear larger loads tomorrow. "sendmail + Performance Tuning" is a practical guide to building, tuning, and + testing email servers based on sendmail to function more efficiently, + handle more messages, and resist both accidental and malicious + load-related incidents. + + END:: sendmail-faq//book/ISBN/0-321-11570-8 + _________________________________________________________________ + +6.2 Reference material with chapters or sections on sendmail + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/0-13-151051-7 + ENTRY:: March 23, 1996 + TYPE:: Reference book, hardcopy + REVISION:: May 23, 1996; Updated abstract. + TITLE:: Unix System Administration Handbook, Second Edition + AUTHOR:: Nemeth, Evi + AUTHOR:: Snyder, Garth + AUTHOR:: Seebass, Scott + AUTHOR:: Hein, Trent R. + CONTACT:: <sa-book@admin.com> + Prentice-Hall, Inc. + Upper Saddle River, New Jersey 07458 + DATE:: January, 1995 + PAGES:: 780 + COPYRIGHT:: Copyright (c) 1995 by Prentice Hall PTR + LANGUAGE:: English + NOTES:: See: URL:http://www.admin.com/ + + ABSTRACT:: + + Still the best hands-on Unix System Administration book around. Covers + far more than just sendmail, but the sixty-four pages (pages 455-518 + in the third printing) it does devote are very well written and quite + useful. Also provides a version of Rob Kolstad's checksendmail script + on the accompanying CD-ROM. + + Note that Eric Allman and Marshall Kirk McKusick wrote the Foreword + for the Second Edition. This should give you at least an inkling as to + how essential this book is, even for experienced Unix administrators. + + END:: sendmail-faq//book/ISBN/0-13-151051-7 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/0-201-58629=0 + ENTRY:: March 23, 1996 + TYPE:: Reference book, hardcopy + REVISION:: March 27, 1996; Changed ID format to include ISBN, + moved URL to NOTES field from OTHER_ACCESS field, + also updated ABSTRACT + REVISION:: March 29, 1996; Updated ID, PAGES, COPYRIGHT, and ABSTRACT + TITLE:: Practical Internetworking With TCP/IP and UNIX + AUTHOR:: Carl-Mitchell, Smoot + AUTHOR:: Quarterman, John S. + CONTACT:: <tic@tic.com> + Addison Wesley Publishing Company + Computer Science & Engineering Division + One Jacob Way + Reading, MA 01867 + USA + Orders: voice://800-822-6339 (USA) + fax://617-942-1117 + DATE:: 1993 + PAGES:: 476 + COPYRIGHT:: Copyright (c) 1993 by Addison-Wesley Publishing + Company, Inc. + LANGUAGE:: English + NOTES:: See URL:http://heg-school.aw.com/cseng/authors/mitchell/ + practical/practical.html + + ABSTRACT:: + + Devotes 50 pages (most of chapter 8) to discussion of sendmail. As far + as TCP/IP networking books go that also happen to discuss sendmail, it + seems well-written and clear (better than I recall Hunt's book being), + but rather dated in the face of books devoted to the topic and all the + recent development activity in the sendmail community. Forget about + the references, though. The newest sendmail-related reference listed + is dated 1983, ten years before the date on this book and most + certainly wildly out-of-date now. + + There are other books written on the subject of Internetworking with + TCP/IP (most notably Comer), but this particular book seems to have a + unique mix of theory (if perhaps a bit dated) and practical advice. + Other books tend to have lots of one or the other, or split their + theory and nitty-gritty details into separate books in a series (like + Comer). + + Assuming that an update will be coming out soon, it probably deserves + a place on the shelf of most System or Network Administrators, right + next to _Internetworking with TCP/IP_ by Comer, _Managing Internet + Information Services_ by Liu, et. al., _DNS and BIND_ by Albitz and + Liu, _Unix System Administration_ by Nemeth, et. al., and last, but + certainly not least, _sendmail_ by Costales. However, it deserves this + place more because of the non-sendmail related material, as opposed to + what sendmail-related material there is. + + END:: sendmail-faq//book/ISBN/0-201-58629-0 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/1-56592-322-7 + ENTRY:: April 14, 1999 + TYPE:: Reference book, hardcopy + REVISION:: July 20, 2002 + TITLE:: TCP/IP Network Administration 3rd Edition + AUTHOR:: Hunt, Craig + CONTACT:: O'Reilly & Associates, Inc. + 1005 Gravenstein Highway North + Sebastapol, CA 95472 + Bookstores Carrying O'Reilly Books: + www.oreilly.com/sales/bookstores + also: Bookpool.com (www.bookpool.com) + DATE:: April, 2002 + PAGES:: 725 + LANGUAGE:: English + NOTES:: See: URL:http://www.ora.com/catalog/tcp3/ + + ABSTRACT:: + + Chapter 10 consists of 50 pages devoted to sendmail. Appendix E is a + 60 page sendmail reference which covers compiling sendmail, m4 + compiler options, sendmail command line arguments, and sendmail + configuration. A very good treatment of sendmail, less daunting and + more current than the 2nd edition Costales book. The introductary + chapters of the book are also helpful in understanding the big picture + of network services. + + END:: sendmail-faq//book/ISBN/1-56592-322-7 + _________________________________________________________________ + +6.3 Reference material on subjects related to sendmail + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/1-56592-512-2 + ENTRY:: April 14, 1999 + TYPE:: Reference book, hardcopy + REVISION:: April 14, 1999; Updated entire entry for 3rd Ed. + TITLE:: DNS and BIND 3rd Edition + AUTHOR:: Albitz, Paul + AUTHOR:: Liu, Cricket + CONTACT:: O'Reilly & Associates, Inc. + 103 Morris Street, Suite A + Order by phone: 800-998-9938 (US/Canada inquiries) + 800-889-8969 (US/Canada credit card orders) + 707-829-0515 (local/overseas) + DATE:: September, 1998 + PAGES:: 502 + COPYRIGHT:: Copyright (c) 1998 O'Reilly & Associates, Inc. All rights + reserved. + LANGUAGE:: English + NOTES:: See: URL:http://www.ora.com/catalog/dns3/ + + ABSTRACT:: + + As definitive as Costales is on sendmail, this book is on the subject + of the Domain Name System (DNS) and the most common server software + for the DNS, namely BIND. + + The third edition deals with the new 8.1.2 version of BIND as well as + the older 4.9 versions. Wherever there is a difference in behavior of + the versions, the book points out which version does what. Anyone + still using the first edition should strongly consider replacing it + now since the new features will be the basis for the next generation + of name servers. + + Since the sending of Internet mail is so very heavily dependent on the + DNS, it obviously also belongs on the shelf of any Postmaster or + System Administrator whose site does Internet email. That means + virtually every administrator of every site on the Internet. + + END:: sendmail-faq//book/ISBN/1-56592-512-2 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//book/ISBN/1-56592-153-4 + ENTRY:: April 8, 1997 + TYPE:: Reference book, hardcopy + TITLE:: Using & Managing UUCP + AUTHOR:: Ravin, Ed + AUTHOR:: O'Reilly, Tim + AUTHOR:: Dougherty, Dale + AUTHOR:: Todino, Grace + CONTACT:: O'Reilly & Associates, Inc. + 103 Morris Street, Suite A + Order by phone: 800-998-9938 (US/Canada inquiries) + 800-889-8969 (US/Canada credit card orders) + 707-829-0515 (local/overseas) + DATE:: September, 1996 + PAGES:: 424 + LANGUAGE:: English + NOTES:: See: URL:http://www.ora.com/catalog/umuucp/ + + ABSTRACT:: + + Replaces _Managing UUCP and Usenet_ by Todino and O'Reilly as the + definitive book for using, installing, and managing UUCP. + + The general assumption with version 8 sendmail is that virtually no + one uses UUCP to send email anymore, but if that assumption isn't true + for you, then you probably need this book. + + END:: sendmail-faq//book/ISBN/1-56592-153-4 + _________________________________________________________________ + +6.4 World-wide web index/resource pages on sendmail + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/index/10 + ENTRY:: March 23, 1996 + TYPE:: Online sendmail index + REVISION:: April 14, 1999; updated to sendmail.org address + TITLE:: sendmail FAQ Support Page + AUTHOR:: Beck, John + CONTACT:: John Beck <sendmail+faq@sendmail.org> +OTHER_ACCESS:: URL:http://www.sendmail.org/faq/ + LANGUAGE:: English + + ABSTRACT:: + + Support Page for this FAQ. + + END:: sendmail-faq//online/index/10 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/index/17 + ENTRY:: March 25, 1996 + TYPE:: Online sendmail index + REVISION:: April 14, 1999; updated to sendmail.org address + TITLE:: comp.mail.sendmail Most Frequently Asked Questions Support Page + AUTHOR:: Aßmann, Claus + CONTACT:: Claus Aßmann <ca@sendmail.org> +OTHER_ACCESS:: URL:http://www.sendmail.org/~ca/email/english.html + LANGUAGE:: English + + ABSTRACT:: + + Most Frequently Asked Questions on comp.mail.sendmail and their + answers. Also has some links to a few other resources. + + END:: sendmail-faq//online/index/17 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/resources/22 + ENTRY:: November 24, 1996 + TITLE:: IICONS Sendmail Resources + AUTHOR:: Caloca, Paul + CONTACT:: Paul Caloca <pcaloca@iicons.com> + COPYRIGHT:: Copyright (c) 1996 Paul Caloca. All Rights Reserved. +OTHER_ACCESS:: URL:http://www.iicons.com/sendmail/index.html + LANGUAGE:: English + + ABSTRACT:: + + Provides information on how to compile Sendmail and the NEWDB db.1.85 + for Solaris 2. Also has a section on which Sun patches update Solaris + 2 to BIND 4.9.3. + + Has pointers to some non-Sun/Solaris sendmail resources, especially + including CERT Advisories related to sendmail. + + END:: sendmail-faq//online/index/22 + _________________________________________________________________ + +6.5 World-wide web index pages and other reference on Internet email in general + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/index/12 + ENTRY:: March 23, 1996 + TYPE:: Online general Internet email index + REVISION:: March 27, 1996; moved URL from RETRIEVAL field to + OTHER_ACCESS field. + TITLE:: Internet Mail Consortium web site + CORP-AUTHOR:: Internet Mail Consortium + CONTACT:: <info@imc.org> +OTHER_ACCESS:: URL:http://www.imc.org/ + LANGUAGE:: English + + ABSTRACT:: + + If it has to do with Internet email, you'll probably find it here or a + link to it from here. + + They have or have information on email-related Usenet FAQs, RFCs, + Internet Drafts (documents that are in the process of becoming RFCs), + IETF Working Groups, security standards, and are running a few + email-related mailing lists. + + Tends to be focussed on the standards issues. + + If you care about Internet email, you should make it your duty in life + to check this site frequently. + + END:: sendmail-faq//online/index/12 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/index/13 + ENTRY:: March 23, 1996 + TYPE:: Online general Internet email index + REVISION:: August 20, 1996; Updated URL. + TITLE:: Email References + AUTHOR:: Wohler, Bill + CONTACT:: Bill Wohler <wohler@worldtalk.com> +OTHER_ACCESS:: URL:http://www.worldtalk.com/html/msg_resources/email_ref.html + LANGUAGE:: English + + ABSTRACT:: + + The most exhaustive index site I know of for Internet email related + documents outside of the Internet Mail Consortium. + + Also has pointers to other organizations that relate to Internet + email, such as the Electronic Messaging Association and the European + Electronic Messaging Association. + + Tends to be focussed on the server and standards issues. + + END:: sendmail-faq//online/index/13 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/index/14 + ENTRY:: March 23, 1996 + TYPE:: Online general Internet email index + REVISION:: June 28, 1996; Added acronym for SMTPRD + TITLE:: SMTP Resources Directory (SMTPRD) + AUTHOR:: Salamon, Andras + AUTHOR:: Knowles, Brad + CONTACT:: Andras Salamon <smtprd@dns.net> +OTHER_ACCESS:: URL:http://www.dns.net/smtprd/ + LANGUAGE:: English + + ABSTRACT:: + + Another good index site, but still very much in the early phases of + gestation. Based very heavily on the DNS Resources Directory, also by + Andras Salamon. + + A well-rounded site, for the amount of material it covers so far. + + END:: sendmail-faq//online/index/14 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/index/15 + ENTRY:: March 23, 1996 + TYPE:: Online general Internet email index + REVISION:: March 27, 1996; moved URL from RETRIEVAL field to + OTHER_ACCESS field. + TITLE:: E-Mail Web Resources + AUTHOR:: Wall, Matt + CONTACT:: Matt Wall <wall+@cmu.edu> +OTHER_ACCESS:: URL:http://andrew2.andrew.cmu.edu/cyrus/email/email.html + LANGUAGE:: English + + ABSTRACT:: + + Another good index site, tends to be more focussed on client side and + LAN email packages. Also lists some email services, which no one else + that I've seen appears to have taken the time to catalog. + + Excellent side-by-side feature comparison of various MUAs and their + compliance with various Internet protocols. + + END:: sendmail-faq//online/index/15 + _________________________________________________________________ + +6.6 Online tutorials for sendmail + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/tutorial/9 + ENTRY:: March 23, 1996 + TYPE:: Online sendmail tutorial + REVISION:: March 27, 1996; moved URL from RETRIEVAL field to + OTHER_ACCESS field. + REVISION:: August 29, 1998; updated URL. + TITLE:: Sendmail V8: A (Smoother) Engine Powers Network Email + AUTHOR:: Reich, Richard + CONTACT:: Richard Reich <richard@reich.com> + DATE:: February 8, 1996 + COPYRIGHT:: Copyright (c) 1995 The McGraw-Hill Companies, Inc. + All Rights Reserved. +OTHER_ACCESS:: URL:http://www.networkcomputing.com/unixworld/tutorial/ + 008/008.txt.html + LANGUAGE:: English + NOTES:: UnixWorld Online: Tutorial: Article No. 008 + + ABSTRACT:: + + Good technical introduction. Some useful references. Notably does not + reference this FAQ as a place to get more information. + + END:: sendmail-faq//online/article/9 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/tutorial/16 + ENTRY:: March 23, 1996 + TYPE:: Online sendmail tutorial + REVISION:: March 27, 1996; moved URL from RETRIEVAL field to + OTHER_ACCESS field. + TITLE:: Sendmail -- Care and Feeding + AUTHOR:: Quinton, Reg + CONTACT:: Reg Quinton <reggers@julian.uwo.ca> + Computing and Communications Services + The University of Western Ontario + London, Ontario N6A 5B7 + Canada + DATE:: March 24, 1992 +OTHER_ACCESS:: URL:ftp://ftp.sterling.com/mail/sendmail/uwo-course/ + sendmail.txt.Z + LANGUAGE:: English + NOTES:: Postscript version also available. See ftp://ftp.sterling.com/ + mail/sendmail/uwo-course/sendmail.ps.Z + + ABSTRACT:: + + Dated. Only here until I find better. + + END:: sendmail-faq//online/tutorial/16 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/tutorial/21 + ENTRY:: March 27, 1996 + TYPE:: Online sendmail tutorial + REVISION:: August 29, 1998; updated URL. + TITLE:: Explosion in a Punctuation Factory + AUTHOR:: Bryan Costales + CONTACT:: Becca Thomas <editor@unixworld.com> + DATE:: January 1994 + COPYRIGHT:: Copyright (c) 1995 The McGraw-Hill Companies, Inc. + All Rights Reserved. +OTHER_ACCESS:: URL:http://www.networkcomputing.com/unixworld/tutorial/ + 01/01.txt.html + LANGUAGE:: English + + ABSTRACT:: + + Good introduction on how sendmail re-write rules work. + + END:: sendmail-faq//online/article/21 + _________________________________________________________________ + +6.7 Online archives of mailing lists and Usenet newsgroups, relating to +Internet email + + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/archive/18 + ENTRY:: March 25, 1996 + TYPE:: Online Usenet newgroup archive + REVISION:: March 27, 1996; moved URL from RETRIEVAL field to + OTHER_ACCESS field. + TITLE:: DejaNews +OTHER_ACCESS:: URL:http://www.dejanews.com + LANGUAGE:: English + NOTES:: Archives/indexes only Usenet news. + + ABSTRACT:: + + The first, and still most focussed, Usenet news archive/index site. + Others archive/index news as well as other things, but none that I've + seen do it better. + + Go to "Power Search" then "Query Filter" if you wish to restrict the + newsgroups you search on to something like just comp.mail.sendmail and + not all newsgroups. + + END:: sendmail-faq//online/archive/18 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/archive/19 + ENTRY:: March 25, 1996 + TYPE:: Online Usenet newgroup archive + REVISION:: March 27, 1996; moved URL from RETRIEVAL field to + OTHER_ACCESS field. + TITLE:: AltaVista +OTHER_ACCESS:: URL:http://www.altavista.digital.com + LANGUAGE:: English + NOTES:: Archives/indexes Usenet news and World-wide web pages. + + ABSTRACT:: + + One of the leading indexes of world-wide web pages, and their + archive/index of Usenet news is obviously secondary. + + END:: sendmail-faq//online/archive/19 + BIB-VERSION:: CS-TR-v2.1 + ID:: sendmail-faq//online/archive/20 + ENTRY:: March 16, 2001 + TYPE:: Online Usenet newgroup archive + REVISION:: + TITLE:: Google Advance Search +OTHER_ACCESS:: URL:http://www.google.com/advanced_search + LANGUAGE:: English + + ABSTRACT:: + + Google has acquired DejaNews. This is the search tool for news + archive. It works very well and you can see a whole thread in one web + screen which makes it quick and easy to read responses which follow + any question. + + END:: sendmail-faq//online/archive/20 + + + sendmail.org 7. THANKS! + + Special thanks to: + + Eric Allman The core of the material here comes from his FAQ for + version 8.6.9 sendmail. I couldn't even have gotten started were it + not for him. And if he hadn't written sendmail, there obviously + wouldn't even be a FAQ. Heck, there might not even be an Internet. + Paul Southworth Provides FAQ posting services, useful comments on + various sections, and the mailclient-faq. I couldn't have kept doing + this were it not for his help. + Ed Ravin Virtually all the material regarding the use of sendmail on + AIX is his, and most of it has been carried over verbatim. + + Thanks also to: + + Neil Hoggarth, Andras Salamon, Johan Svensson, Christopher X. + Candreva, Bill Wohler, Matthew Wall, Henry W. Farkas, Claus Assmann, + Curt Sampson, Rebecca Lasher, Jim Davis, David Keegel, Betty Lee, + Alain Durand, Walter Schweizer, Christophe Wolfhugel, Al Gilman, + Valdis Kletnieks, John Gardiner Myers, Paul DuBois, Adam Bentley, Dave + Sill, Dave Wreski, Paul Caloca, Eamonn Coleman, Michael Fuhr, Betty + Lee, Derrell Lipman, Era Eriksson, Richard Troxel, and the readers and + posters of comp.mail.sendmail. + diff --git a/debian/libmilter0.dirs b/debian/libmilter0.dirs new file mode 100644 index 0000000..a0e05a3 --- /dev/null +++ b/debian/libmilter0.dirs @@ -0,0 +1,5 @@ +./DEBIAN +./usr/lib/libmilter +./usr/share/doc/sendmail/libmilter0 +./usr/share/bug +./usr/share/lintian/overrides diff --git a/debian/libmilter0.links b/debian/libmilter0.links new file mode 100644 index 0000000..4968d51 --- /dev/null +++ b/debian/libmilter0.links @@ -0,0 +1 @@ +usr/share/bug/sendmail usr/share/bug/libmilter0 diff --git a/debian/libmilter0.lintian-overrides b/debian/libmilter0.lintian-overrides new file mode 100644 index 0000000..f4df27b --- /dev/null +++ b/debian/libmilter0.lintian-overrides @@ -0,0 +1,4 @@ +libmilter0: description-synopsis-starts-with-a-capital-letter +libmilter0: postinst-has-useless-call-to-ldconfig +libmilter0: postrm-has-useless-call-to-ldconfig +libmilter0: non-dev-pkg-with-shlib-symlink diff --git a/debian/libmilter0.postrm b/debian/libmilter0.postrm new file mode 100644 index 0000000..bce8f3f --- /dev/null +++ b/debian/libmilter0.postrm @@ -0,0 +1,53 @@ +#!/bin/sh -e +# +# Debian post removal script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +# Removal of a package: +# 1) prerm remove +# 2) The package's files are removed (except conffiles). +# 3) postrm remove +# 4) All the maintainer scripts except the postrm are removed. +# 5) The conffiles and any backup files +# (~-files, #*# files, %-files, .dpkg-{old,new,tmp}, etc.) are removed. +# 6) postrm purge +# 7) The package's file list is removed +# +set -e; + +PACKAGE=libmilter0; + +case "$1" in + remove) + # /usr/share/doc/$PACKAGE is a symlink to /usr/share/doc/sendmail + rm -f /usr/share/doc/sendmail/$PACKAGE 2>/dev/null || true; + rmdir /usr/share/doc/sendmail/sendmail 2>/dev/null || true; + ;; + + purge) + ;; + + upgrade) + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "$PACKAGE postrm called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/libmilter0.preinst b/debian/libmilter0.preinst new file mode 100644 index 0000000..6de8cea --- /dev/null +++ b/debian/libmilter0.preinst @@ -0,0 +1,55 @@ +#!/bin/sh -e +# +# Debian pre install script +# +# Install of already installed package: +# 1) Upgrade of package: +# new-preinst upgrade old-version +# *) new-postrm abort-upgrade old-version +# 2) package had some configuration files from a previous version installed +# new-preinst install old-version +# *) new-postrm abort-install old-version +# 3) Otherwise (i.e., the package was completely purged) +# new-preinst install +# *) new-postrm abort-install +# +set -e; + +PACKAGE=libmilter0; + +case "$1" in + install) + # DPKG doesn't overwrite directories with symlinks... + if [ -d /usr/share/doc/sendmail/$PACKAGE ]; then + rm -rf /usr/share/doc/sendmail/$PACKAGE; + fi; + if [ ! -d /usr/share/doc/sendmail/sendmail ]; then + mkdir -p /usr/share/doc/sendmail/sendmail; + chmod a+rx /usr/share/doc/sendmail/sendmail; + fi; + ln -sf sendmail /usr/share/doc/sendmail/$PACKAGE; + ;; + + upgrade) + # DPKG doesn't overwrite directories with symlinks... + if [ -d /usr/share/doc/sendmail/$PACKAGE ]; then + rm -rf /usr/share/doc/sendmail/$PACKAGE; + fi; + if [ ! -d /usr/share/doc/sendmail/sendmail ]; then + mkdir -p /usr/share/doc/sendmail/sendmail; + chmod a+rx /usr/share/doc/sendmail/sendmail; + fi; + ln -sf sendmail /usr/share/doc/sendmail/$PACKAGE; + ;; + + abort-upgrade) + ;; + + *) + echo "$PACKAGE preinst called with unknown argument \`$1'" >&2; + exit 1; + ;; + esac; + +#DEBHELPER# +exit 0; diff --git a/debian/local/Makefile.in b/debian/local/Makefile.in new file mode 100644 index 0000000..cbd9fec --- /dev/null +++ b/debian/local/Makefile.in @@ -0,0 +1,691 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = local +DIST_COMMON = $(dist_man_MANS) $(dist_pkgdata_SCRIPTS) \ + $(dist_sbin_SCRIPTS) $(nobase_dist_data_DATA) \ + $(nobase_dist_sysconf_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Parse_conf.pm.in \ + $(srcdir)/Parse_mc.pm.in $(srcdir)/dynamic.in \ + $(srcdir)/parse_mc.in $(srcdir)/sendmail.in \ + $(srcdir)/sendmailconfig.in $(srcdir)/update_auth.in \ + $(srcdir)/update_authm4.in $(srcdir)/update_conf.in \ + $(srcdir)/update_db.in $(srcdir)/update_ldap.in \ + $(srcdir)/update_mc.in $(srcdir)/update_mk.in \ + $(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)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs +CONFIG_CLEAN_FILES = Parse_conf.pm Parse_mc.pm dynamic parse_mc \ + sendmailconfig sendmail update_auth update_authm4 update_conf \ + update_db update_ldap update_mc update_mk update_smrsh \ + update_sys update_tls update_tlsm4 +am__installdirs = "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(sbindir)" \ + "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(datadir)" \ + "$(DESTDIR)$(sysconfdir)" +dist_pkgdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +dist_sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_pkgdata_SCRIPTS) $(dist_sbin_SCRIPTS) +SOURCES = +DIST_SOURCES = +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(dist_man_MANS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +nobase_dist_dataDATA_INSTALL = $(install_sh_DATA) +nobase_dist_sysconfDATA_INSTALL = $(install_sh_DATA) +DATA = $(nobase_dist_data_DATA) $(nobase_dist_sysconf_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBIAN = @DEBIAN@ +DEBIAN_DH = @DEBIAN_DH@ +DEB_BUILD_ARCH = @DEB_BUILD_ARCH@ +DEB_BUILD_GNU_CPU = @DEB_BUILD_GNU_CPU@ +DEB_BUILD_GNU_SYSTEM = @DEB_BUILD_GNU_SYSTEM@ +DEB_BUILD_GNU_TYPE = @DEB_BUILD_GNU_TYPE@ +DEB_HOST_ARCH = @DEB_HOST_ARCH@ +DEB_HOST_GNU_CPU = @DEB_HOST_GNU_CPU@ +DEB_HOST_GNU_SYSTEM = @DEB_HOST_GNU_SYSTEM@ +DEB_HOST_GNU_TYPE = @DEB_HOST_GNU_TYPE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SM_CPYRT = @SM_CPYRT@ +SM_DATE = @SM_DATE@ +SM_MAXVERS = @SM_MAXVERS@ +SM_MINVERS = @SM_MINVERS@ +SM_VERS = @SM_VERS@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_version = @ac_version@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +am_version = @am_version@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +buildtree = @buildtree@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sm_auth_lib = @sm_auth_lib@ +sm_badepends = @sm_badepends@ +sm_build_arch = @sm_build_arch@ +sm_custom = @sm_custom@ +sm_custom_s = @sm_custom_s@ +sm_databases = @sm_databases@ +sm_date = @sm_date@ +sm_depends = @sm_depends@ +sm_dist_name = @sm_dist_name@ +sm_dist_vers = @sm_dist_vers@ +sm_editmap_envdef = @sm_editmap_envdef@ +sm_editmap_libs = @sm_editmap_libs@ +sm_enable_auth = @sm_enable_auth@ +sm_enable_bind = @sm_enable_bind@ +sm_enable_hesiod = @sm_enable_hesiod@ +sm_enable_ipv6 = @sm_enable_ipv6@ +sm_enable_ldap = @sm_enable_ldap@ +sm_enable_maillock = @sm_enable_maillock@ +sm_enable_milter = @sm_enable_milter@ +sm_enable_ndbm = @sm_enable_ndbm@ +sm_enable_newdb = @sm_enable_newdb@ +sm_enable_nis = @sm_enable_nis@ +sm_enable_nisplus = @sm_enable_nisplus@ +sm_enable_regex = @sm_enable_regex@ +sm_enable_sfio = @sm_enable_sfio@ +sm_enable_shm = @sm_enable_shm@ +sm_enable_tcpd = @sm_enable_tcpd@ +sm_enable_tls = @sm_enable_tls@ +sm_envdef = @sm_envdef@ +sm_features = @sm_features@ +sm_ffr = @sm_ffr@ +sm_hesiod_parms = @sm_hesiod_parms@ +sm_host_arch = @sm_host_arch@ +sm_incdirs = @sm_incdirs@ +sm_ldap_lib = @sm_ldap_lib@ +sm_libmilter_envdef = @sm_libmilter_envdef@ +sm_libmilter_libs = @sm_libmilter_libs@ +sm_libmilter_version = @sm_libmilter_version@ +sm_libs = @sm_libs@ +sm_libsm_envdef = @sm_libsm_envdef@ +sm_libsm_libs = @sm_libsm_libs@ +sm_libsmdb_envdef = @sm_libsmdb_envdef@ +sm_libsmdb_libs = @sm_libsmdb_libs@ +sm_libsmutil_envdef = @sm_libsmutil_envdef@ +sm_libsmutil_libs = @sm_libsmutil_libs@ +sm_m4_ffr = @sm_m4_ffr@ +sm_mail_local_envdef = @sm_mail_local_envdef@ +sm_mail_local_libs = @sm_mail_local_libs@ +sm_mailstats_envdef = @sm_mailstats_envdef@ +sm_mailstats_libs = @sm_mailstats_libs@ +sm_makemap_envdef = @sm_makemap_envdef@ +sm_makemap_libs = @sm_makemap_libs@ +sm_mapdef = @sm_mapdef@ +sm_newdb_lib = @sm_newdb_lib@ +sm_praliases_envdef = @sm_praliases_envdef@ +sm_praliases_libs = @sm_praliases_libs@ +sm_recommends = @sm_recommends@ +sm_revision = @sm_revision@ +sm_rmail_envdef = @sm_rmail_envdef@ +sm_rmail_libs = @sm_rmail_libs@ +sm_sendmail_envdef = @sm_sendmail_envdef@ +sm_sendmail_libs = @sm_sendmail_libs@ +sm_smrsh_envdef = @sm_smrsh_envdef@ +sm_smrsh_libs = @sm_smrsh_libs@ +sm_suggests = @sm_suggests@ +sm_time = @sm_time@ +sm_utc = @sm_utc@ +sm_vacation_envdef = @sm_vacation_envdef@ +sm_vacation_libs = @sm_vacation_libs@ +sm_version = @sm_version@ +sm_version_beta = @sm_version_beta@ +sm_version_major = @sm_version_major@ +sm_version_math = @sm_version_math@ +sm_version_minor = @sm_version_minor@ +sm_version_r = @sm_version_r@ +sm_version_v = @sm_version_v@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: Makefile,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# @configure_input@ +# +# Rules file for Sendmail @sm_version@@sm_revision@(@sm_version_math@) +# on @sm_dist_name@ @sm_dist_vers@ +# via Debhelper V@DEBIAN_DH@ +# +# Note: the .in file supports Sendmail @SM_MINVERS@ - @SM_MAXVERS@ +# on Debian slink, potato, woody, testing, sid, ... +# but the generated file is customized to the version noted above. +# +# Richard Nelson <cowboy@debian.org> @sm_date@ @sm_time@ (@sm_utc@) +#------------------------------------------------------------------------------ +# +# Shipped programs +# +nobase_dist_data_DATA = \ + bug/sendmail/control \ + bug/sendmail/script + +dist_pkgdata_SCRIPTS = \ + Parse_conf.pm \ + Parse_mc.pm \ + dynamic \ + parse_mc \ + sendmail \ + update_auth update_authm4 \ + update_conf \ + update_db \ + update_ldap \ + update_mc \ + update_mk \ + update_notices \ + update_sendmail \ + update_smrsh \ + update_sys \ + update_tcpd \ + update_tls update_tlsm4 + +dist_sbin_SCRIPTS = \ + sendmailconfig + +# +# Shipped manpages +# +dist_man_MANS = \ + runq.sendmail.8 \ + sendmailconfig.8 + +# +# Shipped data +# +nobase_dist_sysconf_DATA = \ + mail/service.switch \ + mail/service.switch-nodns \ + mail/peers/provider + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu local/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu local/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +Parse_conf.pm: $(top_builddir)/config.status $(srcdir)/Parse_conf.pm.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +Parse_mc.pm: $(top_builddir)/config.status $(srcdir)/Parse_mc.pm.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +dynamic: $(top_builddir)/config.status $(srcdir)/dynamic.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +parse_mc: $(top_builddir)/config.status $(srcdir)/parse_mc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +sendmailconfig: $(top_builddir)/config.status $(srcdir)/sendmailconfig.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +sendmail: $(top_builddir)/config.status $(srcdir)/sendmail.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_auth: $(top_builddir)/config.status $(srcdir)/update_auth.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_authm4: $(top_builddir)/config.status $(srcdir)/update_authm4.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_conf: $(top_builddir)/config.status $(srcdir)/update_conf.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_db: $(top_builddir)/config.status $(srcdir)/update_db.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_ldap: $(top_builddir)/config.status $(srcdir)/update_ldap.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_mc: $(top_builddir)/config.status $(srcdir)/update_mc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_mk: $(top_builddir)/config.status $(srcdir)/update_mk.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_smrsh: $(top_builddir)/config.status $(srcdir)/update_smrsh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_sys: $(top_builddir)/config.status $(srcdir)/update_sys.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_tls: $(top_builddir)/config.status $(srcdir)/update_tls.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +update_tlsm4: $(top_builddir)/config.status $(srcdir)/update_tlsm4.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-dist_pkgdataSCRIPTS: $(dist_pkgdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" + @list='$(dist_pkgdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_pkgdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + $(dist_pkgdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_pkgdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_pkgdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done +install-dist_sbinSCRIPTS: $(dist_sbin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(dist_sbin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ + $(dist_sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_sbin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ + rm -f "$(DESTDIR)$(sbindir)/$$f"; \ + done +install-man8: $(man8_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ + done +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ + done +install-nobase_dist_dataDATA: $(nobase_dist_data_DATA) + @$(NORMAL_INSTALL) + test -z "$(datadir)" || $(MKDIR_P) "$(DESTDIR)$(datadir)" + @$(am__vpath_adj_setup) \ + list='$(nobase_dist_data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__vpath_adj) \ + echo " $(nobase_dist_dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(datadir)/$$f'"; \ + $(nobase_dist_dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(datadir)/$$f"; \ + done + +uninstall-nobase_dist_dataDATA: + @$(NORMAL_UNINSTALL) + @$(am__vpath_adj_setup) \ + list='$(nobase_dist_data_DATA)'; for p in $$list; do \ + $(am__vpath_adj) \ + echo " rm -f '$(DESTDIR)$(datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(datadir)/$$f"; \ + done +install-nobase_dist_sysconfDATA: $(nobase_dist_sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @$(am__vpath_adj_setup) \ + list='$(nobase_dist_sysconf_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__vpath_adj) \ + echo " $(nobase_dist_sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \ + $(nobase_dist_sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \ + done + +uninstall-nobase_dist_sysconfDATA: + @$(NORMAL_UNINSTALL) + @$(am__vpath_adj_setup) \ + list='$(nobase_dist_sysconf_DATA)'; for p in $$list; do \ + $(am__vpath_adj) \ + echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(datadir)" "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_pkgdataSCRIPTS install-man \ + install-nobase_dist_dataDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +install-dvi: install-dvi-am + +install-exec-am: install-dist_sbinSCRIPTS \ + install-nobase_dist_sysconfDATA + +install-html: install-html-am + +install-info: install-info-am + +install-man: install-man8 + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_pkgdataSCRIPTS uninstall-dist_sbinSCRIPTS \ + uninstall-man uninstall-nobase_dist_dataDATA \ + uninstall-nobase_dist_sysconfDATA + +uninstall-man: uninstall-man8 + +.MAKE: install-am install-data-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-hook install-dist_pkgdataSCRIPTS \ + install-dist_sbinSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man8 \ + install-nobase_dist_dataDATA install-nobase_dist_sysconfDATA \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_pkgdataSCRIPTS uninstall-dist_sbinSCRIPTS \ + uninstall-man uninstall-man8 uninstall-nobase_dist_dataDATA \ + uninstall-nobase_dist_sysconfDATA + +# +# Local customisation... not automake friendly (should all be SCRIPTS) :( +# +install-data-hook: + chmod a+x ${DESTDIR}${datadir}/bug/sendmail/script; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/hoststat; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/mailstats; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/mailq; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/newaliases; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/purgestat; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/runq; + ${LN_S} sendmail ${DESTDIR}${pkgdatadir}/status; +# +# Debian targets, phase out +# +.PHONY: build-indep build-arch +.PHONY: install-indep install-arch +build-indep: +build-arch: +install-indep: install +install-arch: +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/local/Parse_conf.pm.in b/debian/local/Parse_conf.pm.in new file mode 100644 index 0000000..917eae2 --- /dev/null +++ b/debian/local/Parse_conf.pm.in @@ -0,0 +1,962 @@ +#!/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 +# +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/Parse_mc.pm.in b/debian/local/Parse_mc.pm.in new file mode 100644 index 0000000..e21d61d --- /dev/null +++ b/debian/local/Parse_mc.pm.in @@ -0,0 +1,1084 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------ +# +# $Sendmail: Parse_mc.pm,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Parse Sendmail config for databases +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * for "define(xxx,...)"; "define(xxx," must be on same line, but the +# rest may be split across multiple lines +# * assumes makemap dbtype /etc/mail/database < /etc/mail/database +# +# Notes (to self): +# * changes made herein *must* be reflected in +# parse_mc,update_mk,update_db,debian.m4 +# * userdb can also have multiple databases and then a forward! +# * undefine support +# * include support (also for OSTYPE, DOMAIN, SITE, etc) +# * F and K lines +# +#------------------------------------------------------------------------ +# +# Package/Module declaration +package Parse_mc; +require Exporter; +@ISA = qw(Exporter); +#@EXPORT = qw(read_mc write_dbs read_dbs); +@EXPORT_OK = qw(read_mc write_dbs read_dbs + names_dbs restart_dbs entry_dbs format_dbs); +$VERSION = '2.0002'; +# +# 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 + +# Version of this program +#($main::MYNAME = $main::0) =~ s|.*/||; +#$main::Author = "Richard Nelson"; +#$main::AuthorMail = "cowboy\@debian.org"; +#$main::Version = '$Revision: 2.00 $ '; +$Parse_mc::program_name = 'Parse_mc.pm'; +$Parse_mc::program_version = '@sm_version@'; +$Parse_mc::program_date = '@sm_date@ @sm_time@ cowboy'; +$Parse_mc::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($<))[$[] || "Unknown!!"; +my $hostname = hostname(); +my $directory = getcwd(); + +$Parse_mc::Conffile = "@sysconfdir@/mail/databases"; +$Parse_mc::input_files = "@sysconfdir@/mail/sendmail.mc"; +$Parse_mc::database_file = "@sysconfdir@/mail/databases"; + +my $debug; + +# +# List of FEATURE()s, and their default file names (in path ${smdb_loc}) +my %smdb_features = ( + access_db => 'access' + ,authinfo => 'authinfo' + ,bitdomain => 'bitdomain' + ,domaintable => 'domaintable' + ,genericstable => 'genericstable' + ,mailertable => 'mailertable' + ,use_cw_file => 'use_cw_file' + ,use_ct_file => 'use_ct_file' + ,uucpdomain => 'uudomain' + ,virtusertable => 'virtusertable' + ); + +# List of classes, and a flag to note if it is reasonable to parse it +my %smdb_classes = ( + '' => 1 # Default, no class + ,'-' => 1 # ditto + ,bestmx => 0 # Lookup best MX record for host + ,btree => 1 # NEWDB + ,dbm => 1 # NDBM + ,dequote => 0 # Remove quotes + ,dnsmap => 0 # DNSMAP + ,hash => 1 # NEWDB + ,hesiod => 1 # HESIOD + ,host => 0 # Internal hostname lookup + ,implicit => 0 # Search for alias database + ,ldap => 0 # LDAPMAP + ,nis => 1 # NIS + ,nisplus => 1 # NISPLUS + ,null => 0 # Always returns false + ,program => 1 # Run an external program + ,sequence => 0 # Search a series of maps + ,stab => 0 # Internal alias + ,switch => 0 # Internal alias auto-build + ,text => 1 # Lookup in flat text file + ,userdb => 1 # Lookup in userdb + ,user => 1 # lookup passwd + ,newaliases => 1 # for internal usage (of this script) + ); + +# +#------------------------------------------------------------------------------ +# Prefill entries based upon Sendmail/Debian defaults +# Yeah, this is long winded, but it needs to be said... +#------------------------------------------------------------------------------ +my $smdb_loc = "@sysconfdir@/mail/"; +my $smdb_type = 'hash'; +my %smdb_hash = ( +# ----------- Database defaults + 'MAIL_SETTINGS_DIR' => + ['-','-',["${smdb_loc}"],'-'] + ,'DATABASE_MAP_TYPE' => + ["${smdb_type}",'-',['-'],'-'] +# ----------- General stuff + ,'sendmail.cf' => + ['m4','-',["${smdb_loc}sendmail.mc"],'-'] + + ,'ALIAS_FILE' => + ['newaliases','-',["${smdb_loc}aliases"],'-'] +# ,'CANONIFY_DOMAIN_FILE' => +# ['-','-',["${smdb_loc}canonify_domains"],'%[^\\#]'] +# ,'EXPOSED_USER_FILE' => +# ['-','-',["${smdb_loc}exposed_users"],'%[^\\#]'] + ,'HELP_FILE' => + ['-','-',["${smdb_loc}helpfile"],'-'] +# ,'GENERICS_DOMAIN_FILE' => +# ['-','-',["${smdb_loc}generic-domains"],'%[^\\#]'] +# ,'MASQUERADE_DOMAIN_FILE' => +# ['-,'-',["${smdb_loc}masquerade-domains"],'%[^\\#]'] + ,'MSP_STATUS_FILE' => + ['-','-',["@localstatedir@/lib/sendmail/sm-client.st"],'-'] + ,'MSP_QUEUE_DIR' => + ['-','-',["@localstatedir@/spool/mqueue-client"],'-'] + ,'QUEUE_DIR' => + ['-','-',["@localstatedir@/spool/mqueue"],'-'] +# ,'RELAY_DOMAIN_FILE' => +# ['-','-',["${smdb_loc}relay-domains"],'%[^\\#]'] + ,'STATUS_FILE' => + ['-','-',["@localstatedir@/lib/sendmail/sendmail.st"],'-'] +# ,'VIRTUSER_DOMAIN_FILE' => +# ['-','-',["${smdb_loc}virtual-domains"],'%[^\\#]'] + ,'confCONTROL_SOCKET_NAME' => + ['-','-',["@localstatedir@/run/sendmail/smcontrol"],'-'] + ,'confCR_FILE' => + ['-','-o',["${smdb_loc}relay-domains"],'%[^\\#]'] + ,'confCT_FILE' => + ['-','-',["${smdb_loc}trusted-users"],'%[^\\#]'] + ,'confCW_FILE' => + ['-','-',["${smdb_loc}local-host-names"],'%[^\\#]'] + ,'confDEAD_LETTER_DROP' => + ['-','-',["@localstatedir@/lib/sendmail/dead.letter"],'-'] +# ,'confDEF_AUTH_INFO' => # Deprecated, use authinfo rules instead +# ['-','-',["${smdb_loc}default-auth-info"],'-'] + ,'confEBINDIR' => + ['-','-',["@libexecdir@"],'-'] +# ,'confERROR_MESSAGE' => # No default +# ['-','-',["${smdb_loc}error-header"],'-'] + ,'confHOSTS_FILE' => + ['-','-',["@sysconfdir@/hosts"],'-'] + ,'confHOST_STATUS_DIRECTORY' => + ['-','-',["@localstatedir@/lib/sendmail/host_status"],'-'] + ,'confPID_FILE' => + ['-','-',["@localstatedir@/run/sendmail/mta/sendmail.pid"],'-'] + ,'confSERVICE_SWITCH_FILE' => + ['-','-',["${smdb_loc}service.switch"],'-'] +# ,'confUSERDB_SPEC' => +# ['btree','-o',["${smdb_loc}userdb"],'-'] +# ----------- STARTTLS + ,'confTO_STARTTLS' => + ['-','-',["2m"],'-'] + ,'confCACERT' => + ['-','-',["${smdb_loc}tls/sendmail-server.crt"],'-'] + ,'confCACERT_PATH' => + ['-','-',["@sysconfdir@/ssl/certs"],'-'] + ,'confCRL' => + ['-','-',[""],'-'] + ,'confCLIENT_CERT' => + ['-','-',["${smdb_loc}tls/sendmail-client.crt"],'-'] + ,'confCLIENT_KEY' => + ['-','-',["${smdb_loc}tls/sendmail-common.key"],'-'] + ,'confSERVER_CERT' => + ['-','-',["${smdb_loc}tls/sendmail-server.crt"],'-'] + ,'confSERVER_KEY' => + ['-','-',["${smdb_loc}tls/sendmail-common.key"],'-'] + ,'confTLS_SRV_OPTIONS' => + ['-','-',["V"],'-'] +# ----------- SMTP AUTH (SASL) + ,'confTO_AUTH' => + ['-','-',["2m"],'-'] + ,'confAUTH_MECHANISMS' => + ['-','-',["DIGEST-MD5 CRAM-MD5 NTLM LOGIN PLAIN"],"-"] + ,'TRUST_AUTH_MECH' => + ['-','-',["DIGEST-MD5 CRAM-MD5 NTLM LOGIN PLAIN"],"-"] + ,'confAUTH_REALM' => + ['-','-',[""],'-'] + , + ); +# +# +# Private entries +$smdb_hash{'databases'} = ['parse_mc','-',["${smdb_loc}sendmail.mc"],'-']; +$smdb_hash{'Makefile'} = ['update_mk','-',["${smdb_loc}databases"],'-']; +$smdb_hash{'crontab'} = ['update_conf','-',["${smdb_loc}sendmail.conf"],'-']; +$smdb_hash{'auth'} = ['update_auth','-',["${smdb_loc}sasl/sasl.m4"],'-']; +$smdb_hash{'tls'} = ['update_tls','-',["${smdb_loc}tls/starttls.m4"],'-']; +$smdb_hash{'include'} = ['-','-',[""],'-']; +# +# Conditional entries +if ( -s "${smdb_loc}submit.mc" ) { + $smdb_hash{'submit.cf'} = ['m4','-',["${smdb_loc}submit.mc"],'-']; + }; + +# +# Databases/files that require a sendmail restart when modified: +my %smdb_restart = ( + 'EXPOSED_USER_FILE' => 1 + ,'LOCAL_USER_FILE' => 1 + ,'CANONIFY_DOMAIN_FILE' => 1 + ,'GENERICS_DOMAIN_FILE' => 1 + ,'RELAY_DOMAIN_FILE' => 1 + ,'VIRTUSER_DOMAIN_FILE' => 1 + ,'LDAPROUTE_DOMAIN_FILE' => 1 + ,'LDAPROUTE_EQUIVALENT_FILE' => 1 + ,'MASQUERADE_DOMAIN_FILE' => 1 + ,'MASQUERADE_EXCEPTION_FILE' => 1 + ,'confCR_FILE' => 1 + ,'use_ct_file' => 1 + ,'use_cw_file' => 1 + ,'crontab' => 1 + ); + +$smdb_restart{'sendmail.cf'} = 1; +if ( -s "${smdb_loc}submit.mc" ) { + $smdb_restart{'submit.cf'} = 1; }; + +# Variables used in parsing lines +my $smdb_state_looking = 0; +my $smdb_state_start = 1; +my $smdb_state_done = 2; +my $smdb_state = $smdb_state_looking; +my $smdb_string = ''; +my @smdb_entry = (); +my $smdb_name = ''; +my $smdb_class = ''; +my @smdb_file = (); +my $smdb_flags = ''; +my $smdb_options = ''; +my $smdb_default = ''; + +my $QUEUE_GROUPS = 0; +my $INCLUDES = 0; + +#------------------------------------------------------------------------------ +# Finally, some code (almost) +#------------------------------------------------------------------------------ +1; # return (true); + +# +#------------------------------------------------------------------------------ +# Read *.mc/*.m4 files +#------------------------------------------------------------------------------ +sub read_mc { + my ($input_files) = @_; + my $ifh = new FileHandle; + + $input_files = $input_files || $Parse_mc::input_files; + $Parse_mc::input_files = $input_files; + $debug = $main::debug || ''; + + unless ( open($ifh, "<$input_files") ) { + warn("Could not open $input_files($!)\n"); + return; + }; +#print "Reading files:",$input_files,"\n"; + + #------------------------------------------------------------------ + # Main loop, iterate over all input lines + #------------------------------------------------------------------ + line: while (<$ifh>) { + next line if /^#/; # skip comments + next line if /^$/; # skip empty lines + chomp; # drop tailing \n + if (s/\\$//) { + $_ .= <>; + redo unless eof(); + }; +#print "=>",$_,"\n"; + + #-------------------------------------------------------------- + # Look for default database location + # define(MAIL_SETTINGS_DIR, @sysconfdir@/mail/)dnl # comment + #-------------------------------------------------------------- + if (/^\s*`?define\(\s*`?MAIL_SETTINGS_DIR/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + $smdb_loc = $smdb_file[$[]; + $smdb_class = '-'; + + &put_entry($ARGV, 'define'); + } + + #-------------------------------------------------------------- + # Look for default database type + # define(DATABASE_MAP_TYPE, hash)dnl # comment + #-------------------------------------------------------------- + elsif (/^\s*define\(\s*`?DATABASE_MAP_TYPE/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + $smdb_type = $smdb_file[$[]; + @smdb_file = ( $smdb_loc ); + $smdb_class = $smdb_type; + + &put_entry($ARGV, 'define'); + } + + # + #-------------------------------------------------------------- + # Look for define(confUSERDB specifications + # define(confUSERDB_SPEC, @sysconfdir@/mail/users.db)dnl # comment + #-------------------------------------------------------------- + elsif (/^\s*`?define\(\s*`?confUSERDB_SPEC/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + $smdb_flags = '-o'; + $smdb_class = 'btree'; + + &put_entry($ARGV, 'define'); + } + + #-------------------------------------------------------------- + # Look for all define(confC._FILE specifications + # define(confCR_FILE, -o /etc/mail/relay-domains %[^\#])dnl + # define(confCT_FILE, -o /etc/mail/sendmail.ct %[^\#])dnl + # define(confCW_FILE, -o /etc/mail/sendmail.cw %[^\#])dnl + #-------------------------------------------------------------- + elsif (/^\s*`?define\(\s*`?confC[RTW]_FILE/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + + &put_entry($ARGV, 'define'); + } + + #-------------------------------------------------------------- + # Look for all *_FILE( specifications + # EXPOSED_USER_FILE(/etc/mail/exposed-users %[^\#])dnl + # LOCAL_USER_FILE + # CANONIFY_DOMAIN_FILE + # GENERICS_DOMAIN_FILE(/etc/mail/generic-domains %[^\#])dnl + # RELAY_DOMAIN_FILE(/etc/mail/relay-domains %[^\#])dnl + # VIRTUSER_DOMAIN_FILE(/etc/mail/virtual-domains %[^\#])dnl + # LDAPROUTE_DOMAIN_FILE + # LDAPROUTE_EQUIVALENT_FILE + # MASQUERADE_DOMAIN_FILE(/etc/mail/masquerade-domains %[^\#])dnl + # MASQUERADE_EXCEPTION_FILE + #-------------------------------------------------------------- + elsif (/^\s*`?((EXPOSED|LOCAL)_USER|(CANONIFY|GENERICS|RELAY|VIRTUSER)_DOMAIN|LDAPROUTE_(DOMAIN|EQUIVALENT)|MASQUERADE_(DOMAIN|EXCEPTION))_FILE\(/ .. + /[^\)]*\)/) { + &parse_string($_, '('); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + + &put_entry($ARGV, ''); + } + + # + #-------------------------------------------------------------- + # Look for all define(conf* specifications + # define(confCONTROL_SOCKET_NAME,/var/run/sendmail/smcontrol)dnl + # define(confERROR_MESSAGE, MAIL_SETTINGS_DIRerror-header)dnl + # define(confSERVICE_SWITCH_FILE,/etc/mail/service.switch)dnl + # define(confPID_FILE, /var/run/sendmail/sendmail.pid)dnl + # define(confHOSTS_FILE, /etc/hosts)dnl + # define(confDEF_AUTH_INFO, /etc/mail/auth-info)dnl + # define(confDEAD_LETTER_DROP,/var/lib/sendmail/dead.letter)dnl + # define(confHOST_STATUS_DIRECTORY,/var/lib/sendmail/host_status)dnl + #-------------------------------------------------------------- + elsif (/^\s*`?define\(\s*`?conf(CONTROL_SOCKET_NAME|ERROR_MESSAGE|(SERVICE_SWITCH|PID|HOSTS)_FILE|DEF_AUTH_INFO|DEAD_LETTER_DROP|HOST_STATUS_DIRECTORY)/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + + &put_entry($ARGV, 'define'); + } + + #-------------------------------------------------------------- + # Look for all define(*_FILE specifications (No options here) + # define(ALIAS_FILE, @sysconfdir@/mail/aliases.private,...)dnl + # define(HELP_FILE, /etc/mail/helpfile)dnl + # define(STATUS_FILE, /var/lib/sendmail/sendmail.st)dnl + # define(QUEUE_DIR, /var/spool/mqueue/main*)dnl + # define(MSP_QUEUE_DIR, /var/spool/mqueue-client)dnl + #-------------------------------------------------------------- + elsif (/^\s*`?define\(\s*`?((ALIAS|HELP|STATUS)_FILE)|(MSP_)?QUEUE_DIR/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + + &put_entry($ARGV, 'define'); + } + + #-------------------------------------------------------------- + # Look for all queue definition specifications + # define(QUEUE_GROUP, ...)dnl + #-------------------------------------------------------------- + elsif (/^\s*`?QUEUE_GROUP\(/ .. /[^\)]*\)/) { + &parse_string($_, '('); + next line if ($smdb_state != $smdb_state_done); + + $smdb_string =~ /\s*([\w_]+).*P[^=]*=([^\*,\)]*).*/; + $smdb_name = 'QUEUE_GROUP'; + $smdb_class = '-'; # $1 + $smdb_flags = '-'; + @smdb_file = ($2); + $smdb_options = '-'; # Pull out other options? + + if ( $QUEUE_GROUPS == 0 ) { + &put_entry($ARGV, '', 0); + $QUEUE_GROUPS = 1; + } + else { + &put_entry($ARGV, '', 1); + }; + } + + #-------------------------------------------------------------- + # Look for all AUTH specifications + # define(confAUTH_MECHANISMS ...)dnl + # define(confAUTH_REALM ...)dnl + # TRUST_AUTH_MECH( ...)dnl + #-------------------------------------------------------------- + elsif (/^\s*`?define\(\s*`?confAUTH_(MECHANISMS|REALM)/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + next line if ($smdb_string =~ /.*defn\(/); + + &get_flags_name_opts; + + push(@smdb_file, split(' ',$smdb_options)) + if ($smdb_options ne '-'); + $smdb_options = '-'; + + &put_entry($ARGV, 'define'); + } + elsif (/^\s*`?TRUST_AUTH_MECH\(/ .. + /[^\)]*\)/) { + &parse_string($_, '('); + next line if ($smdb_state != $smdb_state_done); + + next line if ($smdb_string eq ' EXTERNAL'); + + &get_flags_name_opts; + + push(@smdb_file, split(' ',$smdb_options)); + $smdb_options = '-'; + + &put_entry($ARGV, ''); + } + + #-------------------------------------------------------------- + # Look for all TLS specifications + # define(confCACERT, ...)dnl + # define(confCACERT_PATH, ...)dnl + # define(confCRL, ...)dnl + # define(confCLIENT_CERT, ...)dnl + # define(confCLIENT_KEY, ...)dnl + # define(confSERVER_CERT, ...)dnl + # define(confSERVER_KEY, ...)dnl + # define(confTLS_SRV_OPTIONS, ...)dnl + #-------------------------------------------------------------- + elsif (/^\s*`?define\(\s*`?conf(TO_STARTTLS|CACERT|CRL|((SERVER|CLIENT)_(KEY|CERT))|TLS_SRV_OPTIONS)/ .. + /[^\)]*\)/) { + &parse_string($_, 'define'); + next line if ($smdb_state != $smdb_state_done); + + &get_flags_name_opts; + + &put_entry($ARGV, 'define'); + } + + # + #-------------------------------------------------------------- + # Locate all non-commented FEATURE macros + # FEATURE(name[, [type [flags] file][, ...]...])dnl #comment + #-------------------------------------------------------------- + elsif (/^\s*`?FEATURE\(/ .. /[^\)]*\)/) { + &parse_string($_, 'FEATURE'); + next line if ($smdb_state != $smdb_state_done); + + # ignore non-db features + next line if ( ! exists($smdb_features{$smdb_name}) ); + + &get_flags_name_opts; + + if ($smdb_name eq 'use_ct_file') { + &get_entry('confCT_FILE'); + } + elsif ($smdb_name eq 'use_cw_file') { + &get_entry('confCW_FILE'); + } + else { + @smdb_file = + ("${smdb_loc}$smdb_features{$smdb_name}") + if ($smdb_file[$[] eq '-' + and $smdb_class ne 'ldap'); + $smdb_class = $smdb_type + if ($smdb_class eq '-'); + }; + + &put_entry($ARGV, 'FEATURE'); + } + + elsif (/^\s*`?(OSTYPE|DOMAIN|include)\(/ .. /[^\)]*/) { + &parse_string($_, '('); + next line if ($smdb_state != $smdb_state_done); + + next line if ($smdb_name eq 'include' + and $smdb_string =~ /^\s*`?_CF_DIR/); + + $smdb_string =~ /\s*`?([^'\)\s]+)/; + $smdb_string = $1; + if ($smdb_name eq 'OSTYPE') { + $smdb_string = + "@datadir@/sendmail/cf/ostype/$smdb_string.m4"; + } + elsif ($smdb_name eq 'DOMAIN') { + $smdb_string = + "@datadir@/sendmail/cf/domain/$smdb_string.m4"; + }; + + $smdb_name = 'include'; + $smdb_class = '-'; # $1 + $smdb_flags = '-'; + @smdb_file = ($smdb_string); + $smdb_options = '-'; # Pull out other options? + + if ($INCLUDES == 0) { + &put_entry($ARGV, 'include', 0); + $INCLUDES = 1; + } + else { + &put_entry($ARGV, 'include', 1); + }; + &read_mc("$smdb_string"); + }; + }; + }; + +# +#------------------------------------------------------------------------------ +# Write out the accumulated information to a flat database file +#------------------------------------------------------------------------------ +sub write_dbs { + my ($database_file, $input_files) = @_; + my $ofh = new FileHandle; + + $database_file = $database_file || $Parse_mc::database_file; + $Parse_mc::database_file = $database_file; + 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); + $debug = $main::debug || ''; + + $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 automatically generated -- edit at your own risk +##### +##### Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +##### +##### file: ${database_file} +##### generated via: (${interp_pgm} ${interp_vrm}) +##### ${caller} +##### ${Parse_mc::program_name} ${Parse_mc::program_version} ${Parse_mc::program_date} +##### by: ${user}\@${hostname} +##### on: ${current_time} +##### in: ${directory} +##### input files: +EOT + foreach my $file ( split(' ', $Parse_mc::input_files) ) { + print $ofh <<"EOT"; +##### ${file} +EOT + } + print $ofh <<"EOT"; +##### +##### Used by: +##### update_{db,mk} +##### +##### The following databases are used by Debian Sendmail +##### +##### Format: +##### <df>:<map>:<flags>:<file>:<opts>: +##### Where: +##### <df> = define or FEATURE name +##### <map> = map type (-,text,btree,hash, etc.) +##### <flags> = map flags (-o for optional, etc.) +##### <file> = file name +##### <opts> = map options (%[^\\#] for sprintf, etc.) +##### +#################################################################### +EOT + + # + # delete unneeded elements + #delete $smdb_hash{"MAIL_SETTINGS_DIR"}; + #delete $smdb_hash{"DATABASE_MAP_TYPE"}; + #delete $smdb_hash{"confCT_FILE"}; + #delete $smdb_hash{"confCW_FILE"}; + + # print define(/FEATURE(/xxx( items + foreach $smdb_name (sort keys %smdb_hash) { + &get_entry($smdb_name); + foreach my $file ( @smdb_file ) { + print $ofh join(':', + $smdb_name + ,$smdb_class + ,$smdb_flags + ,$file + ,$smdb_options + ,'' + ), "\n"; + }; + }; + + close($ofh); + if ($database_file eq $Parse_mc::Conffile) { + chown '0', '0', "$database_file"; + chmod 0644, "$database_file"; + }; + }; + +# +#------------------------------------------------------------------------------ +# Read in the accumulated information from a flat database file +#------------------------------------------------------------------------------ +sub read_dbs { + my ($database_file, $input_files) = @_; + my $ifh = new FileHandle; + my $name = ''; + my @entry; + + $database_file = $database_file || $Parse_mc::database_file; + $Parse_mc::database_file = $database_file; + $debug = $main::debug || ''; + + unless ( open($ifh, "<$database_file") ) { + warn("Could not open $database_file($!), creating it.\n"); + &read_mc($input_files); + &write_dbs($database_file, $input_files); + # At this point, we have the data, don't need to re-read it... + return; + }; + + #------------------------------------------------------------------ + # Main loop, iterate over all input lines + #------------------------------------------------------------------ + line: while (<$ifh>) { + next line if /^#/; # skip comments + next line if /^$/; # skip empty lines + chomp; # drop tailing \n + + @entry = split(':', $_); + + # Accumulate file names and enter when complete + if ($name eq $entry[$[]) { + push @smdb_file, $entry[3]; + } + else { + if ($name ne '') { + &put_entry('', ''); + }; + $name = $entry[$[]; + $smdb_name = $entry[$[]; + $smdb_class = $entry[1]; + $smdb_flags = $entry[2]; + @smdb_file = $entry[3]; + $smdb_options = $entry[4]; + }; + }; + + # enter any remaining data + if ($name ne '') { + &put_entry('', ''); + }; + + close($ifh); + }; + +# +#------------------------------------------------------------------------------ +# Obtain the list of names in smdb_hash (in an ordered manor) +#------------------------------------------------------------------------------ +sub names_dbs { + + # We need a partial ordering here (psuedo dependancies) + my @names; + my %dbs = (); + foreach my $entry ('databases', 'Makefile', 'crontab', 'QUEUE_GROUP', + 'sendmail.cf', 'submit.cf') { + if (exists($smdb_hash{$entry})) { + $dbs{$entry} = ''; + push @names, $entry; + }; + }; + + # Now, add any remaining databases to the list (except aliases) + foreach my $entry (sort keys %smdb_hash) { + next if ($entry eq 'ALIAS_FILE'); + push @names, $entry + if (! exists($dbs{$entry})); + $dbs{$entry} = ''; + }; + + # Finally, add aliases... + my $entry = 'ALIAS_FILE'; + if (exists($smdb_hash{$entry})) { + push @names, $entry + if (! exists($dbs{$entry})); + $dbs{$entry} = ''; + }; + + return(@names); + }; + +#------------------------------------------------------------------------------ +# Obtain the list of names that require a sendmail restart +#------------------------------------------------------------------------------ +sub restart_dbs { + return(keys %smdb_restart); + }; + +#------------------------------------------------------------------------------ +# Obtain an individual database entry (returning a copy) +#------------------------------------------------------------------------------ +sub entry_dbs { + my ($name) = @_; + $smdb_name = $name; + &get_entry($smdb_name); + + # Return a local copy - so they can't change *MY* data... + my @entry = @smdb_entry; + return (@entry); + }; + +# +#------------------------------------------------------------------------------ +# Save the results of the database entry and reset the state +#------------------------------------------------------------------------------ +sub put_entry { + my ($file, $type, $multi_file) = @_; + + # Create entry record from data pieces/parts + if ($multi_file and exists($smdb_hash{$smdb_name})) { + @smdb_entry = @{$smdb_hash{$smdb_name}}; + } + else { + @smdb_entry = ('-', '-', [], '-'); + }; + $smdb_entry[$[] = $smdb_class; + $smdb_entry[1] = $smdb_flags; + push @{$smdb_entry[2]}, @smdb_file; + $smdb_entry[3] = $smdb_options; + + # Save lastmost entry + @{$smdb_hash{$smdb_name}} = @smdb_entry; + + # Minimal debugging + if ($debug) { + print STDERR "PUT: "; + if ($type ne '') { print STDERR "$type($smdb_name)" } + else { print STDERR "$smdb_name()" }; + print STDERR " => ", join(':' + , $smdb_class + , join(',', @{$smdb_entry[2]}) + , $smdb_options + , '' + ), "\n"; + }; + + # reset state + $smdb_state = $smdb_state_looking; + }; + +# +#------------------------------------------------------------------------------ +# Retrieve a database entry +#------------------------------------------------------------------------------ +sub get_entry { + my ($name) = @_; + + if (exists($smdb_hash{$name}) ) { + @smdb_entry = @{$smdb_hash{$name}}; + } + else { + @smdb_entry = ('-', '-', ['-'], '-'); + }; + + $smdb_class = $smdb_entry[$[]; + $smdb_flags = $smdb_entry[1]; + @smdb_file = @{$smdb_entry[2]}; + $smdb_options = $smdb_entry[3]; + + # Minimal debugging + if ($debug) { + print STDERR "GET: ", + "$name", + " => ", join(':' + , $smdb_class + , join(',', @{$smdb_entry[2]}) + , $smdb_options + , '' + ), "\n"; + }; + + }; + +# +# +sub format_dbs { + my ($name) = @_; + my $string = ''; + + &get_entry($name); + $string .= " $smdb_class" + if ($smdb_class ne '-' and $smdb_class ne ' '); + $string .= " $smdb_flags" + if ($smdb_flags ne '-' and $smdb_flags ne ' '); + $string .= join(',', @smdb_file); + $string .= " $smdb_options" + if ($smdb_options ne '-' and $smdb_options ne ' '); + + return $string; + }; + +# +#------------------------------------------------------------------------------ +# This function does most of the work in parsing a series of lines to +# construct a database entry - it manages the state machine and assorted +# global variables +#------------------------------------------------------------------------------ +sub parse_string { + my ($str, $type) = @_; + my $count = -1; + my @entry = ''; + my $pending_state = 0; + + # Strip trailing '?\)(dnl)?.*$ from string + if ($str =~ /\s*'?\s*\)/) { + $str =~ s/\s*'?\s*\)\s*(dnl)?.*$//; + $pending_state = $smdb_state_done; + }; + + # Strip trailing 'dnl .*' from string + if ($str =~ /dnl(\s+.*)?$/) { + $str =~ s/dnl(\s+.*)?$//; + }; + + # Strip leading `?define\(\s*`? from string + if (($type eq 'define') and + ($str =~ /^\s*`?define\(/)) { + $str =~ s/^\s*`?define\(\s*`?//; + $str =~ s/,/ /; + $smdb_state = $pending_state || $smdb_state_start; + $smdb_string = ''; + $count = (@entry = split(' ', $str)); + ($smdb_name = $entry[$[]) =~ tr/'//d; + shift(@entry); + $str = join(' ', @entry); + } + + # Strip leading `?FEATURE\(\s*`? from string + elsif (($type eq 'FEATURE') and + ($str =~ /^\s*`?FEATURE\(/)) { + $str =~ s/^\s*`?FEATURE\(\s*`?//; + $str =~ s/,/ /; + $smdb_state = $pending_state || $smdb_state_start; + $smdb_string = ''; + $count = (@entry = split(' ', $str)); + ($smdb_name = $entry[$[]) =~ tr/'//d; + shift(@entry); + $str = join(' ', @entry); + } + + # Strip leading `?[\w_]+\(\s*`? from string + elsif (($type eq '(') and + ($str =~ /^\s*`?[\w_]+\(/)) { + $str =~ s/\(/ /; + $smdb_state = $pending_state || $smdb_state_start; + $smdb_string = ''; + $count = (@entry = split(' ', $str)); + ($smdb_name = $entry[$[]) =~ tr/`'//d; + shift(@entry); + $str = join(' ', @entry); + } + else { + $smdb_state = $pending_state || $smdb_state; + }; + + # + # Strip quotes (` and ') from string + $str =~ tr/`'//d; + + # FEATURE( is the only one allowed to have only one argument + if ( ($type ne 'FEATURE' + and $type ne '(') + and $count == 1) { + $str = ''; + }; + + # Change imbedded MAIL_SETTINGS_DIR to $smdb_loc + if ($smdb_name ne 'MAIL_SETTINGS_DIR') { + $str =~ s/MAIL_SETTINGS_DIR/$smdb_loc/g + }; + + # Change imbedded DATABASE_MAP_TYPE to $smdb_type + if ($smdb_name ne 'DATABASE_MAP_TYPE') { + $str =~ s/DATABASE_MAP_TYPE/$smdb_type/g + }; + + # concatentate this string with any prior information + $smdb_string .= ' ' . $str unless($smdb_state == $smdb_state_looking); + + # Return + return; + }; + +# +#------------------------------------------------------------------------------ +# This function parses a line into flags (-o, etc.), name, options +#------------------------------------------------------------------------------ +sub get_flags_name_opts { + my @entry; + my $class = ''; + my $rest = ''; + my $multi_names = 0; + + $smdb_class = ''; + $smdb_flags = ''; + @smdb_file = (); + $smdb_options = ''; + + @entry = split(' ', $smdb_string); + + # Pull off any leading flags (including database type/class) + # Class specification: "[mapkey]@mapclass:mapspec" + # RELAY_DOMAIN_FILE(`@LDAP')dnl + # VIRTUSER_DOMAIN_FILE(`@ldap:-k + # (&(objectClass=virtHosts)(host=*)) -v host')dnl + # FEATURE(`genericstable', `LDAP')dnl + # FEATURE(`genericstable', `nis:realnames.by2mail')dnl + # define(`ALIAS_FILE', `ldap:')dnl + # define(`ALIAS_FILE', `ldap:-k + # (&(objectClass=mailGroup)(mail=%0)) -v mgrpRFC822MailMember')dnl + # but only if there are flags *and* a name... + if (@entry) { + ($class = lc($entry[$[])) =~ s/:.*//; + ($rest = $entry[$[]) =~ s/.*://; + $rest = '' if (lc($rest) eq 'ldap'); + if ($class =~ /^.*@/) { + $class =~ s/^.*@//; + if (exists($smdb_classes{$class})) { + $smdb_class = $class; + shift (@entry); + }; + } + elsif (exists($smdb_classes{$class})) { + $smdb_class = $class; + $rest = '' if ($rest eq $class); + shift (@entry); + @entry = split(' ', join(' ',$rest,@entry) ); + $#entry = -1 if ($smdb_class eq 'ldap'); + }; + FLAG_LOOP: while (@entry) { + if (substr($entry[$[], 0, 1) eq '-') { + if ($smdb_flags eq '') { + $smdb_flags = $entry[$[]; + } + else { + $smdb_flags .= ' ' . $entry[$[]; + }; + shift (@entry); + } + else { + last FLAG_LOOP; + }; + }; + }; +#print STDERR "$class($rest) ::= ",scalar @entry,join(' ','',@entry,''),"\n"; + $smdb_flags = $smdb_flags || '-'; + $smdb_class = $smdb_class || '-'; + + # + # A few special cases... + if ($smdb_name eq 'ALIAS_FILE' and $smdb_class eq '-') { + $smdb_class = 'newaliases'; + @entry = (join('',@entry)); + $multi_names = 1; + } + elsif ($smdb_name eq 'confUSERDB_SPEC') { + @entry = (join('',@entry)); + $multi_names = 1; + }; + + # Handle multi-files specially + if ( $multi_names == 1 ) { + @smdb_file = split(',', $entry[$[]); + $smdb_options = '-'; + } + else { + # Whats left should be a filename (or somesuch) and options + if (@entry >= 1) { # file name, possible options if /,/ + if ($smdb_classes{$smdb_class} != 1) { + @smdb_file = '-'; + } + else { + @smdb_file = $entry[$[]; + shift(@entry); + }; + if (@entry >= 1) { + $entry[$[] =~ s/^,//; + foreach my $ndx ($[ .. $#entry) { + $smdb_options .= ' ' + if ($ndx != 0 + and substr($entry[$ndx], 0, 1) ne ','); + $smdb_options .= $entry[$ndx]; + } + } + $#entry = -1; + }; + + # Check for possible options caught in the filename slot + if (@smdb_file >= 1 and index($smdb_file[$[], ',') != -1) { + @entry = split(/,/, $smdb_file[$[]); + @smdb_file = ( $entry[$[] ); + if (@entry >= 2) { + $smdb_options = join('', @entry[1..$#entry], + $smdb_options); + $#entry = -1; + }; + }; + $smdb_file[$[] = $smdb_file[$[] || '-'; + $smdb_file[$[] =~ s/\.db//; + $smdb_options = $smdb_options || '-'; + }; + + # Return + return; + }; + +__END__ diff --git a/debian/local/bug/sendmail/control b/debian/local/bug/sendmail/control new file mode 100644 index 0000000..5167d2d --- /dev/null +++ b/debian/local/bug/sendmail/control @@ -0,0 +1 @@ +report-with: sensible-mda rmail libmilter0 diff --git a/debian/local/bug/sendmail/script.in b/debian/local/bug/sendmail/script.in new file mode 100644 index 0000000..71a2c1b --- /dev/null +++ b/debian/local/bug/sendmail/script.in @@ -0,0 +1,53 @@ +#!/bin/sh +#----------------------------------------------------------------------------- +# $Sendmail: sendmail.bug,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Debian helper function script for Debian Sendmail bug reporting +# Note: this file supports @SM_MINVERS@ - @SM_MAXVERS@ +# +# Notes (to all): +# * +# +# Notes (to self): +# * +# +#----------------------------------------------------------------------------- +# +#set -e; +DEBUG=0; + +# reportbug #169495 +if [ -z "$YESNO" ]; then + YESNO=$"yYnN"; + fi; + +# Announce +printf "Ouput of $0:\n" >&3; + +# Show files in /etc/mail +printf "\nls -alR /etc/mail:\n" >&3; +ls -alR /etc/mail | grep -Eve '~$' >&3; + +# Extract the relevant portion of sendmail.conf +if [ -e @sysconfdir@/mail/sendmail.conf ]; then + printf "\nsendmail.conf:\n" >&3; + grep -ve '^#' "@sysconfdir@/mail/sendmail.conf" >&3; + fi; + +# Extract the relevant portion of sendmail.mc +if [ -e @sysconfdir@/mail/sendmail.mc ]; then + printf "\nsendmail.mc:\n" >&3; + grep -Eve '^(#|dnl|$)' "@sysconfdir@/mail/sendmail.mc" >&3; + fi; + +# Extract the relevant portion of submit.mc +if [ -e @sysconfdir@/mail/submit.mc ]; then + printf "\nsubmit.mc...\n" >&3; + grep -Eve '^(#|dnl|$)' "@sysconfdir@/mail/submit.mc" >&3; + fi; + +printf "\n" >&3; + +# vim:set ai et sts=4 sw=4 tw=0: diff --git a/debian/local/dynamic.in b/debian/local/dynamic.in new file mode 100644 index 0000000..82b6d7c --- /dev/null +++ b/debian/local/dynamic.in @@ -0,0 +1,435 @@ +#!/bin/sh +#------------------------------------------------------------------------ +# +# $Sendmail: dynamic,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Shell functions to handle dynamic network updates. +# Supports ppp, dhcp, ifup/down, etc. +# +# Copyright (c) 2004-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# This script is called from the following places: +# /etc/ppp/ip-down.d/sendmail #\ +# /etc/ppp/ip-up.d/sendmail # | These are deprecated +# /etc/dhcp3/dhclient-exit-hooks.d/sendmail #/ +# /etc/network/if-down.d/sendmail #standard +# /etc/network/if-post-down.d/sendmail #standard +# /etc/network/if-up.d/sendmail #standard +# /etc/resolvconf/update-libc.d/sendmail #More or less useless :( +# +# The other half of the logic is in /etc/mail/sendmail.conf +# +# DAEMON_NETMODE="Dynamic"; Keyword SMTP network mode +# static: Do not monitor any network interfaces for changes +# dynamic: Monitor one or more interfaces for changes +# +# DAEMON_NETIF="eth0"; 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. +# +# LOG_CMDS="No"; 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). +# +# HANDS_OFF="No"; 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 +# +#------------------------------------------------------------------------ +# + +# The files we may alter +provider_m4='@sysconfdir@/mail/m4/provider.m4'; +dialup_m4='@sysconfdir@/mail/m4/dialup.m4'; + +# Default values +SM_ignore=0; # Ignore any changes +SM_changed=0; # Something has changed, dunno what +SM_delay=0; # Expect another call soon, do work then +SM_interface=''; # The interface that changed +SM_state=''; # How the interface changed +SM_provider=''; # ISP/domain name/IPPARM/etc +SM_ip=''; # IP for the interface +SM_host=''; # Reverse FQDN of IP +SM_debug=1; # Of minimal value + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(/usr/bin/dirname $0)/update_sendmail ]; then + sm_path=$(/usr/bin/dirname $0); +else + sm_path=@datadir@/sendmail; + fi; + +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +DAEMON_NETMODE='Static'; +DAEMON_NETIF=''; +HANDS_OFF='No'; +LOG_CMDS='Yes'; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; + +# Record information on an interface and its status +update_interface() { + SM_interface="$1"; + SM_reason="$2"; + + # Translate DHCP style actions to a simple up/down + case "$SM_reason" in + DOWN|EXPIRE|FAIL|RELEASE|STOP) # and TIMEOUT too ??? + SM_state='down'; + ;; + UP|BOUND|RENEW|REBIND|REBOOT|TIMEOUT) # why TIMEOUT here ??? + SM_state='up'; + if [ "$SM_reason" = "BOUND" ]; then + SM_changed=1; + fi; + ;; + *) + SM_state='unknown'; + ;; + esac; + + # Mark what we're doing... + local msg="$SM_interface $SM_state $SM_provider $SM_ip $SM_host"; + if [ "$LOG_CMDS" != 'No' ]; then + /usr/bin/logger -i -p mail.debug -- "$0 (dynamic) update_interface: $msg"; + fi; + + # Do absolutely nothing if they say so... + if [ "$HANDS_OFF" != 'No' ]; then + SM_ignore=1; + fi; + if [ -z "$SM_interface" ]; then + SM_ignore=1; + fi; + + # Check to see if we care about this interface + if [ $SM_ignore -eq 0 ]; then + SM_ignore=1; + for if in $DAEMON_NETIF; do + if [ "$if" = "$SM_interface" ]; then + SM_ignore=0; + break; + fi; + done; + fi; + + if [ $SM_ignore -ne 0 ]; then + return; + fi; + }; + +# Record information about the upstream provider +update_provider() { + SM_provider="$1"; + + # Mark what we're doing... + local msg="$SM_interface $SM_state $SM_provider $SM_ip $SM_host"; + if [ "$LOG_CMDS" != 'No' ]; then + /usr/bin/logger -i -p mail.debug -- "$0 (dynamic) update_provider: $msg"; + fi; + + # Do absolutely nothing if they say so... + if [ "$HANDS_OFF" != 'No' ]; then + SM_ignore=1; + fi; + if [ $SM_ignore -ne 0 ]; then + return; + fi; + # Add smarthost information (if any)... + # But not if provider.m4 is a link ! + if [ -z "$SM_provider" ]; then + return; + fi; + if [ ! -e "@sysconfdir@/mail/peers/$SM_provider" ]; then + SM_provider='default'; + fi; + if [ -e "@sysconfdir@/mail/peers/$SM_provider" ] \ + && [ ! -L "$provider_m4" ]; then + SM_changed=1; + cat <<-EOT > "$provider_m4"; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic provider updates from $0: + # Device=$SM_interface + # State=$SM_state + # Provider=$SM_provider + # + # NOTE: The following line *MUST* be in @sysconfdir@/mail/sendmail.mc + #dnl include(\`@sysconfdir@/mail/provider.m4')dnl + # + # You may also need to include this file in submit.mc ! + # + # Provider information from @sysconfdir@/mail/peers/$SM_provider + EOT + cat "@sysconfdir@/mail/peers/$SM_provider" >> "$provider_m4"; + cat <<-EOT >> "$provider_m4"; + #------------------------------------------------------------ + EOT + fi; + }; + +# Record information on an ip/host +update_host() { + SM_ip="$1"; + + # Mark what we're doing... + local msg="$SM_interface $SM_state $SM_provider $SM_ip $SM_host"; + if [ "$LOG_CMDS" != 'No' ]; then + /usr/bin/logger -i -p mail.debug -- "$0 (dynamic) update_host: $msg"; + fi; + + # Do absolutely nothing if they say so... + if [ "$HANDS_OFF" != 'No' ]; then + SM_ignore=1; + fi; + if [ $SM_ignore -ne 0 ]; then + return; + fi; + if [ -z "$SM_ip" ]; then + return; + fi; + find_host; + if [ $SM_ignore -ne 0 ]; then + return; + fi; + # Add ip related information (if any)... + # But not if dialup.m4 is a link ! + if [ ! -L "$dialup_m4" ]; then + SM_changed=1; + cat <<-EOT > "$dialup_m4"; + LOCAL_CONFIG + #------------------------------------------------------------ + # + # Dynamic host/ip updates from $0: + # Device=$SM_interface + # State=$SM_state + # Provider=$SM_provider + # IP=$SM_ip + # Host=$SM_host + # + # NOTE: The following line *MUST* be in @sysconfdir@/mail/sendmail.mc + #dnl include(\`@sysconfdir@/mail/dialup.m4')dnl + # + # This should *NOT* be included in submit.mc ! + # + # Make sure we accept mail as this ip (for bounces, etc) + Cw$SM_ip + EOT + if [ -z "$SM_host" ]; then + cat <<-EOT >> "$dialup_m4"; + # + # Rats... FQDN lookup failed, your kit is incomplete :( + EOT + else + cat <<-EOT >> "$dialup_m4"; + # + # Define our true hostname (from our ISP) - becomes \$j + define(\`confDOMAIN_NAME', \`$SM_host')dnl + # + # Make sure we accept mail as this name (for bounces, etc) + Cw$SM_host + # + # Add our hostname to class G for genericstable support + CG$SM_host + #------------------------------------------------------------ + EOT + fi; + fi; + }; + +# DNS support changed, we may (or may not) have a new name +# but in any case, we may have stale host info in the queue +update_resolv() { + + # Mark what we're doing... + local msg="$SM_interface $SM_state $SM_provider $SM_ip $SM_host"; + if [ "$LOG_CMDS" != 'No' ]; then + /usr/bin/logger -i -p mail.debug -- "$0 (dynamic) update_resolv: $msg"; + fi; + + # Do absolutely nothing if they say so... + if [ "$HANDS_OFF" != 'No' ]; then + SM_ignore=1; + fi; + if [ $SM_ignore -ne 0 ]; then + return; + fi; + + # Ideally, we should re-check our IP if we didn't find the + # FQDN previously - but we need a state file to do that :( + # + # Hell, we don't even know what IF is, and if it is up or down :( + + #SM_interface='?'; #\ + #SM_state='up'; # \ + #SM_provider='?'; # | Need to get these from somewhere ! + #SM_ip='?'; # / + #SM_host='?'; #/ + #find_host; + + # Purge any latent host status that might cause us to *NOT* send mail + if [ -x @sysconfdir@/init.d/sendmail ]; then + @sysconfdir@/init.d/sendmail purgestat now + fi; + + # resolvconf is called as a DHCP pre-exit, so we'll defer any changes + SM_changed=0; + } + +# Attempt to locate our FQDN +find_host() { + # Determine our fqdn from our ISP + maxloop=30; + cntr=0; + SM_host=''; + until (test ! -z "$SM_host"); do + cntr=`expr $cntr + 1`; + if [ $cntr -gt $maxloop ]; then + SM_host=''; + break; + fi; + rev=$(host $SM_ip); + SM_host=$(echo "$rev" | grep '^Name:' | awk '{print $2}'); + if [ -z "$SM_host" ]; then + test=$(echo "$rev" | egrep -e 'not found:'); + if [ -n "$test" ]; then + continue; + else + SM_host=${rev##*domain name pointer }; + SM_host=${SM_host%.}; + fi; + fi; + test=$(echo $SM_host | cut -d ' ' -f 1); + # continue scanning if we get this: + # ;; connection timed out; no servers could be reached + if [ "$test" = ";;" ]; then + SM_host=''; + elif [ "$test" != "**" ]; then + break; + fi; + sleep 1s; + done; + + # See if we actually found a host ! + if [ -z "$SM_host" ]; then + # Drats, no host name :( + # We have a few choices - none pretty + # 1) Do not start sendmail + # 2) Use the info we have (ip) - but + # then we may not accept mail we should, + # accept mail we should not, + # and our ougoing name may be wrong + # 3) Use the last known hostname + # If it is not correct, we have the same + # exposurs as option 2 ! + # + # For the nonce, I choose option 2 + : + fi; + + if [ $SM_debug -ne 0 ]; then + echo "addr=$SM_ip, name=$SM_host"; + fi; + }; + +# If our state has changed in any way, update sendmail +update_sendmail() { + SM_caller="$1"; + SM_opts="$2"; + + # Mark what we're doing... + local msg="$SM_interface $SM_state $SM_provider $SM_ip $SM_host"; + if [ "$LOG_CMDS" != 'No' ]; then + /usr/bin/logger -i -p mail.debug -- "$0 (dynamic) update_sendmail: $msg"; + fi; + + # Do absolutely nothing if they say so... + if [ "$HANDS_OFF" != 'No' ]; then + SM_ignore=1; + fi; + if [ $SM_ignore -ne 0 ]; then + return; + fi; + + # Check for a delayed restart (for DHCP/PPP) + case "$SM_opts" in + [Dd]*) + if [ "$SM_state" = 'up' ]; then + SM_delay=1; + fi; + ;; + esac; + + if [ "$SM_state" = 'down' ]; then + SM_changed=1; + cat <<-EOT > "$dialup_m4"; + LOCAL_CONFIG + #------------------------------------------------------------ + # Dynamic host/ip updates from $0: + # Device=$SM_interface + # State=$SM_state + # Provider=$SM_provider + # IP=$SM_ip + # Host=$SM_host + # + # NOTE: The following line *MUST* be in @sysconfdir@/mail/sendmail.mc + #dnl include(\`@sysconfdir@/mail/dialup.m4')dnl + # This should *NOT* be included in submit.mc ! + # + # sendmail is to only queue messages until connected again + define(\`confDELIVERY_MODE', \`deferred')dnl + # + # Allow the queue to age without carping every four hours + define(\`confTO_QUEUEWARN',\`1d')dnl + # + # Don't keep host status while the network is down + define(\`confHOST_STATUS_DIRECTORY')dnl + #------------------------------------------------------------ + EOT + fi; + + if [ $SM_changed -eq 1 ]; then + # Build a new sendmail.cf from sendmail.mc, including our address. + /usr/bin/make -f @sysconfdir@/mail/Makefile sendmail.cf; + /usr/bin/make -f @sysconfdir@/mail/Makefile; + + # Purge any latent host status that might cause us to *NOT* send mail + # Reload sendmail, IFF already running + if [ -x @sysconfdir@/init.d/sendmail ]; then + @sysconfdir@/init.d/sendmail purgestat now + @sysconfdir@/init.d/sendmail reload-if-running; # up, or down + fi; + fi; + + # Process the sendmail queue + # (background so as to not defer other ip-up work) + # This can be fatal on IF ping-pongs :( + # runq & + }; + diff --git a/debian/local/mail/peers/provider b/debian/local/mail/peers/provider new file mode 100644 index 0000000..b9bc496 --- /dev/null +++ b/debian/local/mail/peers/provider @@ -0,0 +1,10 @@ +#/etc/mail/peers/provider +# +# Sample provider file for sendmail +# used to provide ISP information (masquerade_as, smarthost, etc.) +# +# This is what I use when connecting to mindspring.com: +# remove the leading dnl to activate +LOCAL_CONFIG +dnl define(`SMART_HOST', `mail.mindspring.com.')dnl +dnl MASQUERADE_AS(mindspring.com)dnl diff --git a/debian/local/mail/service.switch b/debian/local/mail/service.switch new file mode 100644 index 0000000..2a64668 --- /dev/null +++ b/debian/local/mail/service.switch @@ -0,0 +1,7 @@ +# /etc/mail/nsswitch.conf +# +# This is the format that sendmail expects (no colon after the service) +# +passwd files +hosts files dns +aliases files diff --git a/debian/local/mail/service.switch-nodns b/debian/local/mail/service.switch-nodns new file mode 100644 index 0000000..583b238 --- /dev/null +++ b/debian/local/mail/service.switch-nodns @@ -0,0 +1,8 @@ +# /etc/mail/nsswitch.conf +# +# This is the format that sendmail expects (no colon after the service) +# This file will prevent dns usage +# +passwd files +hosts files +aliases files diff --git a/debian/local/parse_mc.in b/debian/local/parse_mc.in new file mode 100644 index 0000000..c1a5e15 --- /dev/null +++ b/debian/local/parse_mc.in @@ -0,0 +1,95 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------ +# +# $Sendmail: parse_mc,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Parse Sendmail config for databases +# +# Copyright 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * for "define(xxx,...)"; "define(xxx," must be on same line, but the +# rest may be split across multiple lines +# * assumes makemap dbtype /etc/mail/database < /etc/mail/database +# +# Notes (to self): +# * +# +#------------------------------------------------------------------------ +# My first perl program (from my first awk program ;-}) +# +# Initialization of the perl environment +use strict; # be kosher +use Env; # A few environmental references +use integer; # Peformance +use Getopt::Long; # parameter handling + +# 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; +require Parse_conf; + +# Version of this program +#($main::MYNAME = $main::0) =~ s|.*/||; +#$main::Author = "Richard Nelson"; +#$main::AuthorMail = "cowboy\@debian.org"; +#$main::Version = '$Revision: 2.00 $ '; +$main::program_name = $0; +$main::program_version = '@sm_version@'; +$main::program_date = '@sm_date@ @sm_time@ cowboy'; +$main::debug = 0; + +# +#------------------------------------------------------------------------------ +# Finally, some code (almost) +#------------------------------------------------------------------------------ +# +# Argument handling... +$main::opt_help=''; +$main::opt_output_file=''; +$main::opt_input_file=''; +$main::opt_debug=''; +my @options = qw( + help|h + output-file|output_file|o:s + input-file|input_file|i:s@ + debug! + ); +my $result = GetOptions(@options); +if ( ! $result ) { + die "Terminating due to parameter error"; + }; +if ( $main::opt_help ) { + warn "$main::program_name $main::program_version $main::program_date\n"; + warn "$0 \n"; + warn " -help\n" if $main::opt_help; + warn " -debug\n" if $main::opt_debug; + 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; + }; + +${Parse_mc::database_file} = $main::opt_output_file + if $main::opt_output_file; +my $input_files = join(' ', @main::opt_input_file); +# $main::debug is used in parse_mc ! +$main::debug = $main::opt_debug || $main::debug; + +# Pull in some configuration data +&Parse_conf::read_conf(); +my ($ok, $value) = &Parse_conf::get_value('HANDS_OFF'); +if ($value ne '0') { + unlink "${Parse_mc::database_file}"; + exit; + }; + +# Let them know wtf is going on... +print STDOUT "Creating ${Parse_mc::database_file}...\n"; + +# Read the mc/m4 files +&Parse_mc::read_mc($input_files); + +# Write out the textual representation +&Parse_mc::write_dbs('', $input_files); + diff --git a/debian/local/runq.sendmail.8 b/debian/local/runq.sendmail.8 new file mode 100644 index 0000000..2e639e4 --- /dev/null +++ b/debian/local/runq.sendmail.8 @@ -0,0 +1,31 @@ +.TH RUNQ 8 "2000 August 29" "Debian Distribution" \" -*- nroff -*- +.SH NAME +runq \- run the sendmail queue +.SH SYNOPSIS +.B runq +.br +.B runq +.I sendmail options +.br +.B runq +{ \-\-help, \-\-version } +.SH DESCRIPTION +This +.B runq +command is a wrapper around sendmail which tells it to run the mail +queue in the background. +.SH OPTIONS +When called with exactly one argument, the following options are +handled internally: +.TP +.I "\-\-help" +Print a usage message on standard output and exit successfully. +.TP +.I "\-\-version" +Print version information on standard output then exit successfully. +.P +In other cases, the options are simply passed on to +.B sendmail -q. +.SH "SEE ALSO" +.LP +.BR sendmail (8). diff --git a/debian/local/sendmail.in b/debian/local/sendmail.in new file mode 100644 index 0000000..b190c32 --- /dev/null +++ b/debian/local/sendmail.in @@ -0,0 +1,1282 @@ +#!/bin/sh +#----------------------------------------------------------------------------- +# $Sendmail: sm_helper.sh,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Debian helper function script for Debian Sendmail +# Note: this file supports @SM_MINVERS@ - @SM_MAXVERS@ +# +# Notes (to all): +# * +# +# Notes (to self): +# * clean_queues fubar, esp wrt MSP +# +#----------------------------------------------------------------------------- +# +DEBUG=0; + +# Support stand-alone execution +if [ -z "$DAEMON" ]; then + PATH=/bin:/usr/bin:/sbin:/usr/sbin + DESC="Mail Transport Agent (MTA)" + NAME=sendmail + DAEMON=/usr/sbin/$NAME + DAEMON_ARGS="" + SCRIPTNAME=/etc/init.d/$NAME + + # Exit if the package is not installed + [ -x "$DAEMON" ] || exit 0 + + # Read configuration variable file if it is present + [ -r /etc/default/sendmail ] && . /etc/default/sendmail + + # Load the VERBOSE setting and other rcS variables + . /lib/init/vars.sh + + # Define LSB log_* functions. + . /lib/lsb/init-functions + fi; + +# Can't do this earlier, the lsb inclusion is unsafe :( +set -e; + +#------------------------------------------------------------------------------ +# Parameters for the sendmail daemon +# Do *NOT* touch these lines, instead, edit /etc/mail/sendmail.conf +# The _PARMS lines are listed in precedence order +#------------------------------------------------------------------------------ +Get_Parameters () { + + # Main configuration parameters in /etc/mail/sendmail.conf + DAEMON_MODE='Daemon'; + DAEMON_PARMS=''; + DAEMON_UID='root'; + QUEUE_MODE="$DAEMON_MODE"; + QUEUE_INTERVAL='10m'; + QUEUE_PARMS=''; + MSP_MODE="$QUEUE_MODE"; + MSP_INTERVAL="$QUEUE_INTERVAL"; + MSP_PARMS=""; + MISC_PARMS=''; + CRON_PARMS=''; + LOG_CMDS='No'; + + # Secondary (non-documented) parameters in /etc/mail/sendmail.conf + # Caveat Emptor: change these at your own risk - they impact several + # disjoint pieces parts... + SENDMAIL_ROOT='@localstatedir@/run/sendmail'; + MTA_DAEMON='@sbindir@/sendmail-mta'; + MTA_COMMAND='@sbindir@/sendmail-mta'; + MTA_A='-Am'; + MTAL_L='-L sm-mta'; + MTAL_L_QUEUE='-L sm-mta-queue'; + MTAL_L_RUNQ='-L sm-mta-runq'; + MTA_ROOT="${SENDMAIL_ROOT}/mta"; + MTAL_PIDFILE="${MTA_ROOT}/sendmail.pid"; + MTAL_SOCKET="${MTA_ROOT}/smsocket"; + MTAL_CNTL="${MTA_ROOT}/smcontrol"; + MTAQ_L='-L sm-que'; + MTAQ_L_RUNQ='-L sm-que-runq'; + MTAQ_PIDFILE="${MTA_ROOT}/queue.pid"; + MTAQ_SOCKET="${MTA_ROOT}/qusocket"; + MTAQ_CNTL="${MTA_ROOT}/qucontrol"; + MSP_DAEMON='@sbindir@/sendmail-msp'; + MSP_COMMAND='@sbindir@/sendmail-msp'; + MSP_A='-Ac'; + MSP_L='-L sm-msp'; + MSP_L_QUEUE='-L sm-msp-queue'; + MSP_ROOT="${SENDMAIL_ROOT}/msp"; + MSP_PIDFILE="${MSP_ROOT}/sendmail.pid"; + MSP_SOCKET="${MSP_ROOT}/smsocket"; + MSP_CNTL="${MSP_ROOT}/smcontrol"; + + # Pull in any user modified variables + if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; + + # These can't be user customized + SM_Get_Parameters='yes'; + PATH='/bin:/usr/bin:/sbin:/usr/sbin'; + STAMP_DIR="${SENDMAIL_ROOT}/stampdir"; + START_MTAL_CMD="start-stop-daemon \ + --pidfile $MTAL_PIDFILE \ + --exec $MTA_DAEMON \ + --startas $MTA_COMMAND \ + --start"; + STOP_MTAL_CMD="start-stop-daemon \ + --pidfile $MTAL_PIDFILE \ + --name sendmail-mta \ + --stop"; + SIGNAL_MTAL_CMD="start-stop-daemon \ + --pidfile $MTAL_PIDFILE \ + --name sendmail-mta \ + --stop"; + START_MTAQ_CMD="start-stop-daemon \ + --pidfile $MTAQ_PIDFILE \ + --make-pidfile \ + --exec $MTA_DAEMON \ + --startas $MTA_COMMAND \ + --start"; + STOP_MTAQ_CMD="start-stop-daemon \ + --pidfile $MTAQ_PIDFILE \ + --name sendmail-mta \ + --stop"; + SIGNAL_MTAQ_CMD="start-stop-daemon \ + --pidfile $MTAQ_PIDFILE \ + --name sendmail-mta \ + --stop"; + START_MSP_CMD="start-stop-daemon \ + --pidfile $MSP_PIDFILE \ + --exec $MSP_DAEMON \ + --startas $MSP_COMMAND \ + --chuid smmsp \ + --start"; + STOP_MSP_CMD="start-stop-daemon \ + --pidfile $MSP_PIDFILE \ + --name sendmail-msp \ + --stop"; + SIGNAL_MSP_CMD="start-stop-daemon \ + --pidfile $MSP_PIDFILE \ + --name sendmail-msp \ + --stop"; + NAME='sendmail'; + FLAGS='defaults 50'; + + # Sanitize some keyword entries + DAEMON_MODE=$(echo "$DAEMON_MODE" | tr '[:upper:]' '[:lower:]'); + QUEUE_MODE=$(echo "$QUEUE_MODE" | tr '[:upper:]' '[:lower:]'); + MSP_MODE=$(echo "$MSP_MODE" | tr '[:upper:]' '[:lower:]'); + + # See if we can share the listener and queue-runner daemon: + # * Both must be in daemon mode + # * They must have the same (possibly empty) parameters + if [ "$DAEMON_MODE" = "daemon" \ + -a \( \( "$QUEUE_MODE" = "cron" -o "$QUEUE_MODE" = "none" \) \ + -o \( "$QUEUE_MODE" != "cron" \ + -a "$QUEUE_MODE" != "none" \ + -a "$DAEMON_PARMS" = "$QUEUE_PARMS" \ + \) \ + \) ]; then + SPLIT_DAEMON=0; + else + SPLIT_DAEMON=1; + fi; + + # Version dependant support: + # 8.12.0+ M{TA,MSP}_A + if [ ! -f @datadir@/sendmail/cf/feature/msp.m4 ]; then + MTA_A=''; + MTAL_L=''; + MTAL_L_QUEUE=''; + MSP_A=''; + MSP_L=''; + MSP_L_QUEUE=''; + fi; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# enhanced sendmail startup +#------------------------------------------------------------------------------ +start_mta () { + local result; + result=0; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # If already running, don't start it... + if is_running mta; then + log_warning_msg 'MTA is already running.'; + return 1; + fi; + # + # Check if we're going to run a daemon (and how many): + daemon_check || result=$?; + if [ "$result" -ne 0 ]; then + return 0; + fi; + # + # Mark restarted for communication betwixt here and /etc/mail/Makefile + touch $STAMP_DIR/reload; + # + if [ "$DAEMON_MODE" = "daemon" ]; then + # + # Allow Unix (local) connections betwixt MSP/MTA: + touch $MTAL_SOCKET; + # + # We can only afford to clean the MTA queues if running daemon mode, + # otherwise, there is a chance that a cronjob might still be using + # the queue... Thats also why we don't clean the MSP queues herein. + #clean_queues; + # + # cd to a safe place to stash core files... + cd $MTA_ROOT; + CMD="$START_MTAL_CMD -- $MTAL_PARMS"; + if [ "$LOG_CMDS" = "Yes" ]; then + logger -i -p mail.debug -- "$0 $CMD"; + fi; + $CMD & + # + # Update permissions on smsocket + sleep 2; + chown $DAEMON_UID:smmsp $MTAL_SOCKET; + chmod 0666 $MTAL_SOCKET; + fi; + # + # Check for split daemon mode (separate listener/queue runner) + if [ "$SPLIT_DAEMON" -eq 1 ]; then + CMD="$START_MTAQ_CMD -- $MTAQ_PARMS"; + if [ "$LOG_CMDS" = "Yes" ]; then + logger -i -p mail.debug -- "$0 $CMD"; + fi; + $CMD & + sleep 2; + qp=`expr "${MTAQ_PARMS}" : '.*\(-qp[0-9]*[smhdw]\)'` || true; + if [ -z "$qp" ]; then + chmod 0664 $MTAQ_PIDFILE; + else + qc=`ps --no-headers -fCsendmail \ + | egrep -e 'Queue control' \ + | awk '{print $2}'`; + if [ -z "$qc" ]; then + rm -f $MTAQ_PIDFILE; + else + chmod 0664 $MTAQ_PIDFILE; + printf "$qc\n$MTA_COMMAND $MTAQ_PARMS" > $MTAQ_PIDFILE; + fi; + fi; + fi; + # + # if running split service, run the client queues (just to make sure) + if check_msp; then + $MSP_COMMAND -q $MSP_A $MSP_L_QUEUE $MSP_PARMS $MISC_PARMS; + fi; + return $result; + }; + +start_msp () { + local result; + result=0; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # If already running, don't start it... + if is_running msp; then + log_warning_msg 'MSP is already running.'; + return 1; + fi; + # + # Check to see if MSP mode is indeed available + if ! check_msp; then + return 0; + fi; + # + # Check if we're going to run a daemon: + if [ "$MSP_MODE" != 'daemon' ]; then + return 0; + fi; + # + # We can only afford to clean the MSP queues if running daemon mode, + # otherwise, there is a chance that a cronjob might still be using + # the queue... Thats also why we don't clean the MTA queues herein. + #clean_queues /var/spool/mqueue-client; + # + # cd to a safe place to stash core files... + cd $MSP_ROOT; + $START_MSP_CMD -- \ + $MSP_A $MSP_L -q${MSP_INTERVAL} $MSP_PARMS $MISC_PARMS & + return $result; + }; + +start_sendmail () { + local result; + # Update databases + make_databases; + result=0; + start_mta || result=$?; + if check_msp; then + start_msp || true; + fi; + return $result; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# enhanced sendmail reload +#------------------------------------------------------------------------------ +reload_mta () { + local result; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # Update databases + make_databases; + # + # reload (signal -HUP) is *much* better/faster than stop/start + # + # Mark restarted for communication betwixt here and /etc/mail/Makefile + touch $STAMP_DIR/reload; + # + # If not running, just start it... + if ! is_running mta; then + start_mta; + fi; + # + # Is running, must signal it... + result=0; + $SIGNAL_MTAL_CMD --signal HUP --oknodo --quiet || result=$?; + sleep 2; + chown $DAEMON_UID:smmta $MTAL_SOCKET; + chmod 0666 $MTAL_SOCKET; + # + # Check for split daemon mode (separate listener/queue runner) + if [ "$SPLIT_DAEMON" -eq 1 ]; then + $SIGNAL_MTAQ_CMD --signal HUP --oknodo --quiet || true; + fi; + return $result; + }; + +reload_msp () { + local result; + result=0; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # reload (signal -HUP) is *much* better/faster than stop/start + # + # If not running, just start it... + if ! is_running msp; then + start_msp; + fi; + # + # Is running, must signal it... + $SIGNAL_MSP_CMD --signal HUP --oknodo --quiet || result=$?; + return $result; + }; + +reload_sendmail () { + local result; + result=0; + reload_mta || result=$?; + if check_msp; then + reload_msp || true; + fi; + return $result; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# enhanced sendmail shutdown +#------------------------------------------------------------------------------ +stop_mta () { + local result cnt; + result=0; + stopped=0; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # If not running, don't stop it... + if ! is_running mta; then + return 0; + fi; + # + # Is running, must stop it... + $STOP_MTAL_CMD --signal TERM --quiet --oknodo > /dev/null; + # + # Now we have to wait until sendmail has _really_ stopped. + # + sleep 2; + if $STOP_MTAL_CMD --signal TERM --quiet > /dev/null; then + log_progress_msg ' Waiting .'; + cnt=0; + while $STOP_MTAL_CMD --signal TERM --quiet > /dev/null; do + cnt=`expr $cnt + 1`; + if [ $cnt -gt 60 ]; then + # + # Waited 120 seconds now. Fail. + # + echo -n ' Failed '; + stopped=1; + break; + fi; + sleep 2; + log_progress_msg '.'; + done; + echo -n ' Done '; + fi; + # + # Remove pidfile iff stopped + if ! $STOP_MTAL_CMD --signal TERM --quiet > /dev/null; then + rm -f "$MTAL_PIDFILE"; + fi + return $result; + }; + +stop_queue () { + local result cnt; + result=0; + stopped=0; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # If not running, don't stop it... + if ! is_running queue; then + return 0; + fi; + # + # Is running, must stop it... + $STOP_MTAQ_CMD --signal TERM --quiet --oknodo > /dev/null; + # + # Now we have to wait until sendmail has _really_ stopped. + # + sleep 2; + if $STOP_MTAQ_CMD --signal TERM --quiet > /dev/null; then + log_progress_msg ' Waiting .'; + cnt=0; + while $STOP_MTAQ_CMD --signal TERM --quiet > /dev/null; do + cnt=`expr $cnt + 1`; + if [ $cnt -gt 60 ]; then + # + # Waited 120 seconds now. Fail. + # + echo -n ' Failed '; + stopped=1; + break; + fi; + sleep 2; + log_progress_msg '.'; + done; + echo -n ' Done '; + fi; + # + # Remove pidfile iff stopped + if ! $STOP_MTAQ_CMD --signal TERM --quiet > /dev/null; then + rm -f "$MTAQ_PIDFILE"; + fi + return $result; + }; + +stop_msp () { + local result cnt; + result=0; + stopped=0; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # If not running, don't stop it... + if ! is_running msp; then + return 0; + fi; + # + # Is running, must stop it... + $STOP_MSP_CMD --signal TERM --quiet --oknodo > /dev/null; + # + # Now we have to wait until sendmail has _really_ stopped. + # + sleep 2; + if $STOP_MSP_CMD --signal TERM --quiet > /dev/null; then + log_progress_msg 'Waiting .'; + cnt=0; + while $STOP_MSP_CMD --signal TERM --quiet > /dev/null; do + cnt=`expr $cnt + 1`; + if [ $cnt -gt 60 ]; then + # + # Waited 120 seconds now. Fail. + # + echo -n ' Failed '; + stopped=1; + break; + fi; + sleep 2; + log_progress_msg '.'; + done; + echo -n ' Done '; + fi; + # + # Remove pidfile iff stopped + if ! $STOP_MSP_CMD --signal TERM --quiet > /dev/null; then + rm -f "$MSP_PIDFILE"; + fi; + return $result; + }; + +stop_sendmail () { + local result; + result=0; + if check_msp; then + stop_msp || true; + fi; + stop_mta || result=$?; + stop_queue || true; + return $result; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Check to see if sendmail is running +#------------------------------------------------------------------------------ +is_running () { + local result; + result=1; + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # Determine proper pidfile to check + who=$(echo "$1" | tr '[:upper:]' '[:lower:]'); + case $who in + mta) + PIDFILE="$MTAL_PIDFILE"; + ;; + queue) + PIDFILE="$MTAQ_PIDFILE"; + ;; + msp) + PIDFILE="$MSP_PIDFILE"; + ;; + *) + PIDFILE="$1"; + ;; + esac; + # + # If no pidfile, not running + # Extract pid/command and see if still running + # Remove pidfile if app didn't + # Also remove any control sockets + if [ -s $PIDFILE ]; then + PID=`head -n 1 $PIDFILE 2>/dev/null`; + COMMAND=`tail -n 1 $PIDFILE`; + if [ ! -z "`ps --no-heading $PID`" ]; then + result=0; + else + rm -f $PIDFILE; + case $who in + mta) + rm -f $MTAL_SOCKET $MTAL_CNTL; + ;; + queue) + rm -f $MTAQ_SOCKET $MTAQ_CNTL; + ;; + msp) + rm -f $MSP_SOCKET $MSP_CNTL; + esac; + fi; + fi; + return $result; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Check to see if running split service (MTA, MSP) +# Must be at 8.12.0+ for this support +#------------------------------------------------------------------------------ +check_msp () { + local result; + result=1; + if [ ! -f @datadir@/sendmail/cf/feature/msp.m4 ]; then + result=1; + elif [ -s @sysconfdir@/mail/submit.cf ] \ + && [ -s @sysconfdir@/mail/submit.mc ]; then + if grep -qEe "^[[:space:]]*\`?FEATURE\([[:space:]]*\`?msp" \ + @sysconfdir@/mail/submit.mc; then + result=0; + fi; + fi; + return $result; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Miscellaneous sendmail command support for MSP/MTA split +# mailstats, mailq, runq +#------------------------------------------------------------------------------ +newaliases () { + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + $MTA_COMMAND $MTA_A -bi $*; + }; + +hoststat () { + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + $MTA_COMMAND $MTA_A -bh $*; + }; + +purgestat () { + local parms; + parms=$(echo "$1" | tr '[:upper:]' '[:lower:]'); + case $parms in + n*) # Now + parms='-O Timeout.hoststatus=1s'; + shift; + ;; + *) + parms=''; + ;; + esac; + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + $MTA_COMMAND $MTA_A -bH $parms $*; + }; + +mailstats () { + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + # if running split service, show the client status first + if check_msp; then + echo 'MSP statistics...'; + #check if we have a status file for the MSP + statusfile=$(grep -Ee '^O StatusFile=/.*' \ + @sysconfdir@/mail/submit.cf | cut -d= -f2); + if [ -n $statusfile ]; then + @libexecdir@/mailstats -C \ + @sysconfdir@/mail/submit.cf $* || true; + fi; + echo 'MTA statistics...'; + fi; + # + # check if we have a status file for the MTA + statusfile=$(grep -Ee '^O StatusFile=/.*' \ + @sysconfdir@/mail/sendmail.cf | cut -d= -f2); + if [ -n $statusfile ]; then + @libexecdir@/mailstats $* || true; + fi; + }; + +mailq () { + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + # if running split service, show the client queues first + if check_msp; then + echo 'MSP Queue status...'; + # + # Check to see if shared memory is in use (8.12.0+) + if grep -qEe "^[[:space:]]*\`?define\(\`?confSHAREDMEMORYKEY'?[[:space:]]*,[[:space:]]*\`?0*[1-9]+[0-9]*'?[[:space:]]*\)" \ + @sysconfdir@/mail/submit.mc; then + $MSP_COMMAND -bP || true; + fi; + $MSP_COMMAND -bp $MSP_A $MISC_PARMS $* || true; + echo 'MTA Queue status...'; + fi; + # + # Check to see if shared memory is in use (8.12.0+) + if grep -qEe "^[[:space:]]*\`?define\(\`?confSHAREDMEMORYKEY'?[[:space:]]*,[[:space:]]*\`?0*[1-9]+[0-9]*'?[[:space:]]*\)" \ + @sysconfdir@/mail/sendmail.mc; then + $MTA_COMMAND -bP || true; + fi; + $MTA_COMMAND -bp $MTA_A $MISC_PARMS $* || true; + }; + +runq () { + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + # if running split service, run the client queues first + if check_msp; then + echo 'Running the MSP queue...'; + $MSP_COMMAND -q $MSP_A \ + $MSP_L_QUEUE $MSP_PARMS $MISC_PARMS $* || true; + echo 'Running the MTA queues...'; + fi; + if [ "$SPLIT_DAEMON" -eq 0 ]; then + $MTA_COMMAND -q $MTA_A \ + $MTAL_L_RUNQ $QUEUE_PARMS $MISC_PARMS $* || true; + else + $MTA_COMMAND -q $MTA_A \ + $MTAQ_L_RUNQ $QUEUE_PARMS $MISC_PARMS $* || true; + fi; + }; + +control () { + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + local parms; + parms="$*"; + if [ -z "$parms" ]; then + parms='help'; + fi; + if is_running mta; then + @datadir@/sendmail/smcontrol.pl $parms; + else + echo 'MTA: is not running'; + fi; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Print status of running job(s) +#------------------------------------------------------------------------------ +status () { + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + # if running split service, check the client status first + if check_msp; then + if is_running msp; then + echo "MSP: $PID $COMMAND"; + ps -fwp $PID; + if [ -S ${MSP_CNTL} ]; then + @datadir@/sendmail/smcontrol.pl \ + -f ${MSP_CNTL} status || true; + fi; + elif [ $MSP_MODE = 'cron' ]; then + echo "MSP: is run via cron ($MSP_INTERVAL)"; + elif [ $MSP_MODE = 'none' ]; then + echo 'MSP: is disabled'; + else + echo 'MSP: is not running'; + fi; + fi; + # + # Check MTA listener + if is_running mta; then + echo "MTA: $PID $COMMAND"; + ps -fwp $PID; + if [ -S ${MTAL_CNTL} ]; then + @datadir@/sendmail/smcontrol.pl \ + -f ${MTAL_CNTL} status || true; + fi; + elif [ $DAEMON_MODE = 'inetd' ]; then + echo 'MTA: is run via inetd'; + elif [ $DAEMON_MODE = 'none' ]; then + echo 'MTA: is disabled'; + else + echo 'MTA: is not running'; + fi; + # + # Check for split daemon mode (separate listener/queue runner) + if is_running queue; then + echo "QUE: $PID $COMMAND"; + ps -fwp $PID; + if [ -S ${MTAQ_CNTL} ]; then + @datadir@/sendmail/smcontrol.pl \ + -f ${MTAQ_CNTL} status || true; + fi; + elif [ $QUEUE_MODE = 'cron' ]; then + echo "QUE: is run via cron ($QUEUE_INTERVAL)"; + elif [ $QUEUE_MODE = 'none' ]; then + echo 'QUE: is disabled'; + elif [ "$SPLIT_DAEMON" -eq 0 ]; then + echo "QUE: Same as MTA"; + else + echo 'QUE: is not running'; + fi; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Cronjob handling +#------------------------------------------------------------------------------ +cron_mta () { + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + # If cron not needed, don't do queue running (though it wouldn't hurt) + if [ $QUEUE_MODE = 'cron' ]; then + # + # If running a split (MTA/MSP) setup, we need to make sure that + # messages not immediately accepted by the MTA get delivered. + # Only run the MSP queue if MSP_MODE=none + if check_msp; then + if [ $MSP_MODE = 'none' ]; then + # Make sure only *ONE* cronjob at a time + if [ ! -f $STAMP_DIR/cron_msp ]; then + touch $STAMP_DIR/cron_msp; + #clean_queues /var/spool/mqueue-client; + $MSP_COMMAND -qf $MSP_A $MSP_L_QUEUE \ + $MSP_PARMS $MISC_PARMS \ + $CRON_PARMS || true; + rm -f $STAMP_DIR/cron_msp; + fi; + fi; + fi; + + # Make sure only *ONE* cronjob at a time + if [ ! -f $STAMP_DIR/cron_mta ]; then + touch $STAMP_DIR/cron_mta; + $MTA_COMMAND -qf $MTA_A $MTAL_L_QUEUE \ + $QUEUE_PARMS $MISC_PARMS $CRON_PARMS || true; + rm -f $STAMP_DIR/cron_mta; + fi; + fi; + }; + +cron_msp () { + # + # Make sure @localstatedir@/run/sendmail/ exists + check_dirs; + # + # Obtain parameters IFF needed + if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; + # + # If cron not needed, don't do queue running (though it wouldn't hurt) + if [ $MSP_MODE = 'cron' ]; then + # + # If running a split (MTA/MSP) setup, we need to make sure that + # messages not immediately accepted by the MTA get delivered. + if check_msp; then + # Make sure only *ONE* cronjob at a time + if [ ! -f $STAMP_DIR/cron_msp ]; then + touch $STAMP_DIR/cron_msp; + #clean_queues /var/spool/mqueue-client; + $MSP_COMMAND -qf $MSP_A $MSP_L_QUEUE \ + $MSP_PARMS $MISC_PARMS \ + $CRON_PARMS || true; + rm -f $STAMP_DIR/cron_msp; + fi; + fi; + fi; + }; +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Determine how to run sendmail mta daemon +# * No daemon +# * As listener +# * As queue runner +# * As both listener and queue runner +#------------------------------------------------------------------------------ +daemon_check () { + local run_daemon; + # + # Skip daemon run for the following: + # * sendmail hasn't been configured + # * DAEMON_MODE = (none | inet) & QUEUE_MODE = (none | cron) + if [ ! -s @sysconfdir@/mail/sendmail.cf ] || \ + [ ! -s @sysconfdir@/mail/sendmail.mc ]; then + log_failure_msg 'Not configured, not started.'; + return 1; + fi; + + MTAL_PARMS="$MTA_A $MTAL_L"; + MTAQ_PARMS="$MTA_A $MTAQ_L"; + run_daemon=3; + + case "$DAEMON_MODE" in + none* | \ + inetd*) + run_daemon=`expr $run_daemon - 1`; + ;; + + daemon* | \ + *) + MTAL_PARMS="$MTAL_PARMS -bd $DAEMON_PARMS"; + ;; + esac; + + case "$QUEUE_MODE" in + none* | \ + cron*) + run_daemon=`expr $run_daemon - 1`; + ;; + + daemon* | \ + *) + # Check for split daemon mode (separate listener/queue runner) + if [ $SPLIT_DAEMON -eq 0 ]; then + if [ ! -z "$QUEUE_INTERVAL" ]; then + MTAL_PARMS="$MTAL_PARMS -q${QUEUE_INTERVAL}"; + fi; + MTAL_PARMS="$MTAL_PARMS $QUEUE_PARMS"; + else + if [ ! -z "$QUEUE_INTERVAL" ]; then + MTAQ_PARMS="$MTAQ_PARMS -q${QUEUE_INTERVAL}"; + fi; + MTAQ_PARMS="$MTAQ_PARMS $QUEUE_PARMS"; + fi; + ;; + esac; + + # Add any miscellanous (ie debugging) parameters + MTAL_PARMS="$MTAL_PARMS $MISC_PARMS"; + MTAQ_PARMS="$MTAQ_PARMS $MISC_PARMS"; + + # Add PidFile override for MTA queue runner + MTAQ_PARMS="$MTAQ_PARMS -O PidFile=$MTAQ_PIDFILE"; + MTAQ_PARMS="$MTAQ_PARMS -O ControlSocketName=$MTAQ_CNTL"; + + if [ $run_daemon -lt 2 ]; then + log_failure_msg 'listen/queue daemon not needed.'; + return 1; + fi; + return 0; + }; +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Simple routine to update the databases on start/refresh/restart +#------------------------------------------------------------------------------ +make_databases () { + # + # Life is so much simpler with make + if test -x /usr/bin/make -a -f /etc/mail/Makefile; then + /usr/bin/make all -s -C /etc/mail >/dev/null; + # + # Here, all I could do would be handle a *few* database - + # quite frankly, it isn't worth it, someone will want yet another + else + echo "No make, you'll have to rebuild your databases by hand :("; + fi; + } +#------------------------------------------------------------------------------ + + +#------------------------------------------------------------------------------ +# Clean sendmail queues (somewhat): does *not* support split qf/df/xf dirs. +# NOTE: This whole thing sucks with queue-groups, need to redo it!!! +# NOTE: Check for race conditions betwixt this code and queue-runners +#------------------------------------------------------------------------------ +clean_queues () { + local QUEUE_ROOT QUEUE QUIET + # Obtain queue root directory + if [ -z "$1" ]; then + QUEUE_ROOT=/var/spool/mqueue + QUEUE=/var/spool/mqueue + QUIET='' + else + QUEUE_ROOT="$1" + QUEUE="$1" + QUIET='1' + fi + # remove lock files left because of kill/crash + # rm -f $QUEUE/[lnx]f* doesn't work with a plethora of files ;-( + for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ + a b c d e f g h i j k l m n o p q r s t u v w x y z; do + rm -f $QUEUE/[lnx]f${i}* + done + # remove zero length qf files + #for qffile in $QUEUE/qf*; do + for qffile in $(find $QUEUE_ROOT -type f -name 'qf*'); do + if [ -r "$qffile" ] && [ ! -s "$qffile" ]; then + if [ ! -z "$QUIET" ]; then + echo -n "<zero: $qffile> "; fi + rm -f "$qffile" + fi + done + # rename tf files to be qf if the qf does not exist + for tffile in $QUEUE/tf*; do + qffile=`echo "$tffile" | sed 's/\/tf\([[:alnum:]]*\)$/\/qf\1/'` + if [ -r "$tffile" ] && [ ! -f "$qffile" ]; then + if [ ! -z "$QUIET" ]; then + echo -n "<recovering: $tffile> "; fi + mv "$tffile" "$qffile" + elif [ -f "$tffile" ]; then + echo -n "<extra: $tffile> " + rm -f "$tffile" + fi + done + # remove df files with no corresponding qf files + for dffile in $QUEUE/df*; do + qffile=`echo "$dffile" | sed 's/\/df\([[:alnum:]]*\)$/\/qf\1/'` + Dffile=`echo "$dffile" | sed 's/\/df\([[:alnum:]]*\)$/\/Df\1/'` + if [ -r "$dffile" ] && [ ! -f "$qffile" ]; then + if [ ! -s "$dffile" ]; then + rm -f "$dffile" + else + if [ ! -z "$QUIET" ]; then + echo -n "<incomplete: $dffile> "; fi + mv "$dffile" "$Dffile"; + fi + fi + done + # announce files that have been saved during disaster recovery + for xffile in $QUEUE/[A-Z]f*; do + if [ -f "$xffile" ]; then + if [ ! -z "$QUIET" ]; then + echo -n "<panic: $xffile> "; fi + fi + done + } +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# check_dirs: Make sure @localstatedir@/run/sendmail/{mta,msp,stampdir} exist +#------------------------------------------------------------------------------ +check_dirs () { + if [ ! -d "${SENDMAIL_ROOT}" ]; then + mkdir -p "${SENDMAIL_ROOT}"; + chown root:smmta "${SENDMAIL_ROOT}"; + chmod 02755 "${SENDMAIL_ROOT}"; + fi; + if [ ! -d "${MTA_ROOT}" ]; then + mkdir -p "${MTA_ROOT}"; + chown $DAEMON_UID:smmta "${MTA_ROOT}"; + chmod 02755 "${MTA_ROOT}"; + fi; + if [ ! -d "${MSP_ROOT}" ]; then + mkdir -p "${MSP_ROOT}"; + chown smmsp:smmsp "${MSP_ROOT}"; + chmod 02775 "${MSP_ROOT}"; + fi; + if [ ! -d "${STAMP_DIR}" ]; then + mkdir -p "${STAMP_DIR}"; + chown root:smmsp "${STAMP_DIR}"; + chmod 02775 "${STAMP_DIR}"; + fi; + } + +#------------------------------------------------------------------------------ +# Why are we here ? +#------------------------------------------------------------------------------ +# Some requisite initialization +if [ -z "$SM_Get_Parameters" ]; then + Get_Parameters; + fi; +if [ "$LOG_CMDS" = "Yes" ]; then + logger -i -p mail.debug -- "$0 $@"; + fi; + +#------------------------------------------------------------------------------ +# Handle being called via an alias +#------------------------------------------------------------------------------ +case $(basename $0) in + newaliases) + newaliases $*; + exit $?; + ;; + hoststat) + hoststat $*; + exit $?; + ;; + purgestat) + purgestat $*; + exit $?; + ;; + mailstats) + mailstats $*; + exit $?; + ;; + mailq) + mailq $*; + exit $?; + ;; + runq) + runq $*; + exit $?; + ;; + control|smcontrol) + control $*; + exit $?; + ;; + status) + status $* + exit $? + ;; + *) + : # Fall through and handle below + ;; + esac; + +#------------------------------------------------------------------------------ +# Handle being called via /etc/init.d/sendmail or directly +#------------------------------------------------------------------------------ +# Ok, why are we here... +case "$1" in + + #----------------------------------------------------------------------- + # Debian required/optional targets: + #----------------------------------------------------------------------- + start) + log_daemon_msg "Starting $DESC" "$NAME"; + start_sendmail; + log_end_msg $?; + ;; + + stop|force-stop) + log_daemon_msg "Stopping $DESC" "$NAME"; + stop_sendmail; + log_end_msg $?; + ;; + + restart) + log_daemon_msg "Restarting $DESC" "$NAME"; + # reload is equivalent (but faster) than stop/start ! + # but... it doesn't honor changes to /etc/mail/sendmail.conf + #reload_sendmail; + stop_sendmail; + start_sendmail; + log_end_msg $?; + ;; + + restart-if-running) + if ! is_running mta && ! is_running msp; then + echo 'Mail Transport Agent: sendmail is not running'; + else + $0 restart; + fi; + ;; + + reload-if-running) + if ! is_running mta && ! is_running msp; then + echo 'Mail Transport Agent: sendmail is not running'; + else + $0 reload; + fi; + ;; + + reload|force-reload) + log_daemon_msg "Reloading $DESC" "$NAME"; + reload_sendmail; + log_end_msg $?; + ;; + + #----------------------------------------------------------------------- + # Local targets (sendmail commands/aliases) for MSP/MTA split support + # These targets will pass along any provided parameters + #----------------------------------------------------------------------- + newaliases) + shift; + newaliases $*; + ;; + + hoststat) + shift; + hoststat $*; + ;; + + purgestat) + shift; + purgestat $*; + ;; + + mailstats) + shift; + mailstats $*; + ;; + + mailq) + shift; + mailq $*; + ;; + + runq) + shift; + runq $*; + ;; + + control|smcontrol) + shift; + control $*; + ;; + + #----------------------------------------------------------------------- + # Local targets for extended support/debugging + #----------------------------------------------------------------------- + status) + shift; + status $*; + ;; + + debug) + # + # If not running, can't debug + if is_running msp; then + echo -n 'Dumping MSP state...'; + $SIGNAL_MSP_CMD --signal USR1; + echo 'done.'; + fi; + if is_running mta; then + echo -n 'Dumping MTA state...'; + $SIGNAL_MTAL_CMD --signal USR1; + echo 'done.'; + fi; + ;; + + clean|clean_que*|clean-que*) + # + # If running, don't clean the queues... + if is_running mta; then + echo 'MTA is running, queue cleaning ill advised...'; + else + echo -n 'Cleaning up the queues...'; + clean_queues; + echo 'done.'; + fi; + ;; + + #----------------------------------------------------------------------- + # Local targets for cronjob support + #----------------------------------------------------------------------- + cron-msp) + cron_msp; + ;; + + cron-mta) + cron_mta; + ;; + + #----------------------------------------------------------------------- + # Default target - bitch and moan + #----------------------------------------------------------------------- + *) + echo "Invalid command <$1>"; + echo "Usage: $0 <command>"; + echo ' Where <command> is one of the following'; + echo ' start|stop|restart|restart-if-running'; + echo ' reload-if-running|reload|force-reload'; + echo ' newaliases|hoststat|purgestat|mailstats|mailq|runq|control'; + echo ' status|debug|clean'; + exit 1; + ;; + esac; + +exit 0; diff --git a/debian/local/sendmailconfig.8 b/debian/local/sendmailconfig.8 new file mode 100644 index 0000000..b2cd52c --- /dev/null +++ b/debian/local/sendmailconfig.8 @@ -0,0 +1,41 @@ +.TH SENDMAILCONFIG 8 21-Jan-1997 +.SH NAME +sendmailconfig \- configure sendmail for Debian systems +.SH SYNOPSIS +sendmailconfig [--no-reload] +.SH DESCRIPTION +.B sendmailconfig +is used to simplify the configuration of sendmail(8) for use on Debian +systems. +.PP +In the simplest case, you may run this program to (re)configure sendmail for +your Debian system at any time. It will modify the file /etc/mail/sendmail.mc +in order to create a working sendmail configuration which will be written to +the file /etc/mail/sendmail.cf. +.PP +For advanced configurations, you can modify the sendmail.mc file before +generating sendmail.cf. Future invokations of +.B sendmailconfig +will preserve these changes provided they are made at the end of the file. +.PP +Normally +.B sendmailconfig +will ask if you want to reload sendmail after making changes to its +configuration. The --no-reload option will avoid this question. +.SH FILES +.TP +/etc/mail/sendmail.mc +sendmail m4 input to generate sendmail.cf +.TP +/etc/mail/sendmail.cf +actual sendmail configuration file +.TP +/etc/mail/sendmail.cw +names for which we will accept mail in the standard configuration +.TP +/etc/mail/sendmail.ct +names of trusted users in the standard configuration +.SH SEE ALSO +sendmail(8) +.SH AUTHOR +Robert Leslie <rob@mars.org> diff --git a/debian/local/sendmailconfig.in b/debian/local/sendmailconfig.in new file mode 100644 index 0000000..2e980ad --- /dev/null +++ b/debian/local/sendmailconfig.in @@ -0,0 +1,688 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# $Sendmail: sendmailconfig,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Interactively configure Sendmail for Debian +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Robert Leslie <rob@mars.org>, +# Rick Nelson <cowboy@debian.org> +# +#----------------------------------------------------------------------------- +set -e; + +PATH='/usr/sbin:/usr/bin:/sbin:/bin'; +SENDMAIL_MC="@sysconfdir@/mail/sendmail.mc"; +SUBMIT_MC="@sysconfdir@/mail/submit.mc"; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; + +set +e; +reload="yes"; +umask 022; + +#------------------------------------------------------------------------------ + +while [ $# -gt 0 ]; do + case "$1" in + --no-reload) + reload=""; + shift; + ;; + + *) + echo "Usage: $0 [--no-reload]" >&2; + exit 1; + ;; + esac; + done; + +#------------------------------------------------------------------------------ + +descrip() { + echo ''; + echo "$1"; + echo "$1" | sed -e 's/./-/g'; + cat -; + echo ''; + }; + +yesno() { + local N='N' Y='Y'; + local q="$1" def=$(eval "echo -n \$$2"); + + while :; do + echo -n "$q? [$def] "; + read REPLY; + REPLY=$(echo -n "$REPLY" | sed -e "s/^\ *//" -e "s/^\t*//"); + test -n "$REPLY" || REPLY="$def"; + + case "$REPLY" in + [Yy]*) + echo yes > /dev/null; + eval "$2=\"Y\""; + return 0; + ;; + [Nn]*) + echo no > /dev/null; + eval "$2=\"N\""; + return 1; + ;; + esac; + done; + }; + +input() { + local q="$1" def=$(eval "echo -n \$$2"); + + echo -n "$q? [$def] "; + read REPLY + REPLY=$(echo "$REPLY" | sed -e 's/^[ ]*//' -e 's/[ ]*$//' | cat); + test -n "$REPLY" || REPLY="$def"; + + if [ "NONE" = "$3" ]; then + case "$REPLY" in + [Nn][Oo][Nn][Ee]*) + REPLY=''; + ;; + esac; + fi; + + eval "$2=\"$REPLY\""; + }; + +testconfig() { + CONFIG=$(grep -Ee "^[[:space:]]*$1" $SENDMAIL_MC 2>/dev/null); + }; + +makecf() { + if [ -x $sm_path/update_sendmail ]; then + echo "Updating sendmail environment ..."; + $sm_path/update_sendmail || true; + fi; + + if [ "$reload" ] && \ + yesno \ + "Reload the running sendmail now with the new configuration" Y + then + echo "Reloading sendmail ..."; + @sysconfdir@/init.d/sendmail reload >/dev/null; + fi; +} + +#------------------------------------------------------------------------------ + +if [ -f $SENDMAIL_MC ]; then + if yesno "Configure sendmail with the existing @sysconfdir@/mail/sendmail.conf" Y + then + if ! $sm_path/update_conf; then + echo "Correct @sysconfdir@/mail/sendmail.conf before continuing."; + exit 1; + fi; + else + echo "Edit @sysconfdir@/mail/sendmail.conf and reissue $0."; + exit 0; + fi; + if yesno "Configure sendmail with the existing $SENDMAIL_MC" Y + then + makecf; + exit 0; + fi; + fi; + +############################################################################### + +exec 3>$SENDMAIL_MC.new; +trap "rm -f $SENDMAIL_MC.new" 0; + +############################################################################### + +descrip "Sendmail Configuration" <<-EOT +By answering the following questions, you can configure sendmail for your +system. Default values are determined either by your existing configuration +or from common usage. +EOT + +echo -n "Press [ENTER] "; +read REPLY; + +cat @datadir@/sendmail/cf/debian/sendmail.mc >&3; +cp -a @datadir@/sendmail/cf/debian/submit.mc \ + $SUBMIT_MC.new; +echo "LOCAL_CONFIG" >&3; + +############################################################################### + +descrip "Mail Name" <<EOT +Your \`mail name' is the hostname portion of the address to be shown on +outgoing news and mail messages (following the username and @ sign). This +name will be used by other programs besides sendmail; it should be the single, +full domain name (FQDN) from which mail will appear to originate. +EOT + +mailname=$(cat @sysconfdir@/mailname 2>/dev/null || hostname --fqdn); +input "Mail name" mailname; + +echo "$mailname" >@sysconfdir@/mailname; + +############################################################################### + +descrip "Null Client" <<EOT +A special configuration known as the "null client" can be created for this +host if all mail should be forwarded to a central hub via a local SMTP-based +network. This may be a suitable configuration if you want to forward all of +your mail to your local Internet service provider (ISP) for delivery. + +To enable this option, give the name of the host to which all mail should be +forwarded. Otherwise leave the option empty to disable it. +To remove a prior name, use \`NONE'. +EOT + +nullclient="" +! testconfig "FEATURE\(\`?nullclient" || + nullclient=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *\([^)]*\).*/\1/'); + +input "Null client forward host" nullclient NONE; + +if [ ! -z "$nullclient" ]; then + echo "EXPOSED_USER(root uucp)dnl # users exempt from masquerading" >&3; + echo "LOCAL_USER(root)dnl" >&3; + echo "MASQUERADE_AS(\`$mailname')dnl" >&3; + echo "FEATURE(\`allmasquerade')dnl" >&3; + echo "FEATURE(\`masquerade_envelope')dnl" >&3; + echo "FEATURE(\`nullclient', $nullclient)dnl" >&3; + fi; + +if [ -z "$nullclient" ]; then + +############################################################################### +descrip "Smart Host" <<EOT +A "Smart Host" is one that can deliver mail to external machines. By using +a "Smart Host", we don't need DNS, or good connectivity ourselves. This is +most likely what you want if you have a dialup link, or sit behind a firewall. + +To enable this option, give the name of the host to which all non-local mail +should be forwarded. Otherwise leave the option empty. +To remove a prior name, use \`NONE'. +EOT + +smarthost=""; +#if [ -n "$nullclient" ]; then +# smarthost="$nullclient" +# fi +! testconfig "define\(\`?SMART_HOST" || + smarthost=$(echo -n "$CONFIG" | sed -e 's/[^:]*:*\([^)]*\).*/\1/'); +input "Smart Host:" smarthost NONE; + +if [ -n "$smarthost" ]; then + echo "define(\`SMART_HOST', $smarthost)dnl" >&3; + echo "MASQUERADE_AS(\`$mailname')dnl" >&3; + fi; +#if [ -n "$nullclient" ] && [ ! -z "$smarthost" ]; then +# echo "undefine(\`ALIAS_FILE')dnl" >&3 +# echo "define(\`confFORWARD_PATH', \`')dnl" >&3 +# echo "define(\`MAIL_HUB', \`$smarthost')dnl" >&3 +# echo "MASQUERADE_AS(\`$smarthost')dnl" >&3 +# echo "FEATURE(\`allmasquerade')dnl" >&3 +# echo "FEATURE(\`masquerade_envelope')dnl" >&3 +# fi +############################################################################### + +descrip "Address Canonification" <<EOT +Usually sendmail will canonify all addresses by consulting a name server and +resolving hosts to their fully qualified domain name (FQDN). Under special +circumstances you may want to disable this feature, for example if this +machine acts only as a mail gateway. +EOT + +test -z "$nullclient" || cat <<EOT +Since this host will be configured as a null client, this option controls +whether addresses will be qualified with \`$mailname' when +sent to the central hub via SMTP. Disabling this feature may cause mail to +appear to come from (and be qualified by the domain for) the hub machine +rather than this host. + +EOT + +nocanonify="N"; +! testconfig "FEATURE\(\`?nocanonify" || nocanonify="Y"; + +! yesno "Disable address canonification" nocanonify || \ + echo "FEATURE(\`nocanonify')dnl" >&3; + +############################################################################### + +#descrip "SMTP Mailer" <<EOT +#If you plan to exchange mail with other computers, you should enable the +#SMTP mailer. Even if you don't plan to exchange mail with other computers, +#it is still a good idea to enable this so local programs can use it. +#EOT + +smtp="Y"; +#if [ -f $SENDMAIL_MC ]; then +# testconfig "MAILER\(\`?smtp" || smtp="N"; +#fi; + +#yesno "Enable the SMTP mailer" smtp || true; + +############################################################################### + +descrip "Masquerade Envelope" <<EOT +If you want mail envelopes (as well as mail headers) to appear to come from +\`$mailname', you can enable this option. +EOT + +masqenvelope="Y"; +if [ -f $SENDMAIL_MC ]; then + testconfig "FEATURE\(\`?masquerade_envelope" || masqenvelope="N"; +fi; + +! yesno "Masquerade envelopes" masqenvelope || \ + echo "FEATURE(\`masquerade_envelope')dnl" >&3; + +############################################################################### + +descrip "All Masquerade" <<EOT +If enabled, this feature will cause recipient addresses to also appear to come +from \`$mailname'. Normally they get the local hostname. +Although this may be right for ordinary users, it can break local aliases. For +example, if you send to "localalias", the originating sendmail will find that +alias and send to all members, but send the message with +"To: localalias@$mailname". Since that alias likely does +not exist, replies will fail. Use this feature ONLY if you can guarantee that +the ENTIRE namespace of \`$mailname' supersets all the +local entries. If in doubt, it is safe to leave this option disabled. +EOT + +allmasquerade="N"; +! testconfig "FEATURE\(\`?allmasquerade" || allmasquerade="Y"; + +! yesno "All masquerade" allmasquerade || \ + echo "FEATURE(\`allmasquerade')dnl" >&3; + +############################################################################### + +descrip "Dont masquerade mail to local users" <<EOT +Send mail to local recipients without masquerading. +EOT + +local_no_masquerade="N"; +! testconfig "FEATURE\(\`?local_no_masquerade" || local_no_masquerade="Y"; + +! yesno "Dont masquerade local" local_no_masquerade || + echo "FEATURE(\`local_no_masquerade')dnl" >&3; + +############################################################################### + +descrip "Always Add Domain" <<EOT +If enabled, the local host domain is included even on locally delivered mail. +Normally it is not added unless it is already present. +EOT + +alwaysdomain="N"; +! testconfig "FEATURE\(\`?always_add_domain" || alwaysdomain="Y"; + +! yesno "Always add domain" alwaysdomain || \ + echo "FEATURE(\`always_add_domain')dnl" >&3; + +############################################################################### + +descrip "Mail Acceptance" <<EOT +Sendmail is usually configured to accept mail for your mail name +($mailname). However, under special circumstances you +may not wish sendmail to do this, particularly if (and disabling this option +generally requires that) mail for \`$mailname' is MXed +to another host. If in doubt, it is safe to leave this option enabled. +EOT + +acceptmailname="Y"; +if [ -f $SENDMAIL_MC ]; then + testconfig "^Cw.*$mailname" || acceptmailname="N"; +fi; + +yesno "Accept mail for \`$mailname'" acceptmailname || true; +test "N" = "$acceptmailname" || \ + echo "LOCAL_CONFIG +Cw$mailname" >&3; + +############################################################################### + +descrip "Alternate Names" <<EOT +In addition to the canonical mail name \`$mailname', you can +add any number of additional alternate names to recognize for receiving mail. +If other hosts are MXed to you for local mail, this is where you should list +them. This list is saved into the file @sysconfdir@/mail/local-host-names +so it can be changed later as needed. + +To answer this question, separate each alternate name with a space, or answer +\`NONE' to eliminate all alternate names. +EOT + +cw_file="@sysconfdir@/mail/local-host-names"; +altnames=$(cat "$cw_file" 2>/dev/null | tr -s '\n \t' ' ' | + sed -e 's/^ *//' -e 's/ *$//'); +input "Alternate names" altnames NONE; + +if [ -n "$altnames" ]; then + echo "$altnames" | tr -s ' \t' '\n' >$cw_file; +else + echo "localhost" >$cw_file; +fi; + chown root:smmsp $cw_file; + chmod 0644 $cw_file; + +echo "FEATURE(\`use_cw_file')dnl" >&3; + +############################################################################### + +descrip "Trusted Users" <<EOT +Sendmail allows a special group of users to set their envelope "From" address +using the -f option without generating a warning message. If you have +software such as Majordomo installed, you will want to include the usernames +from such software here. Note that "root", "daemon", and "uucp" are included +automatically and do not need to be specified. This list is saved into the +file @sysconfdir@/mail/trusted-users so it can be changed later as needed. + +To answer this question, separate each username with a space, or answer +\`NONE' to eliminate all usernames. +EOT + +ct_file="@sysconfdir@/mail/trusted-users"; +trusted=$(cat "$ct_file" 2>/dev/null | tr -s '\n \t' ' ' | + sed -e 's/^ *//' -e 's/ *$//'); +input "Trusted users" trusted NONE; + +if [ -n "$trusted" ]; then + echo "$trusted" | tr -s ' \t' '\n' >$ct_file; + chown root:smmsp $ct_file; + chmod 0644 $ct_file; +else + cat /dev/null >$ct_file; +fi; + +echo "FEATURE(\`use_ct_file')dnl" >&3; +echo "FEATURE(\`use_ct_file')dnl" >> $SUBMIT_MC.new; + +############################################################################### + +descrip "Redirect Feature" <<EOT +If enabled, this feature will allow you to alias old names to +<new-address>.REDIRECT, causing sendmail to return mail to the sender with +an error but indicating the recipient's new address. +EOT + +redirect="N"; +! testconfig "FEATURE\(\`?redirect" || redirect="Y"; + +! yesno "Enable redirect option" redirect || \ + echo "FEATURE(\`redirect')dnl" >&3; + +############################################################################### + +descrip "UUCP Addresses" <<EOT +Sendmail can be configured to be smart about UUCP addresses, or it can do +nothing special with UUCP addresses at all. If you care about UUCP, you will +need to do some additional configuration, perhaps outside of this script. + +*** NOTE *** If you use a smart host or do any kind of forwarding (ie +LUSER_RELAY and LOCAL_RELAY), it is important that you say "Yes" +here to prevent a multi-level relay hole - unless you know for *SURE* that +your smart-host does not deal with UUCP addresses. + +(Be safe and just say Y) +EOT + +uucp="Y"; +if [ -f $SENDMAIL_MC ]; then + testconfig "FEATURE\(\`?nouucp" || uucp="Y"; +fi; + +yesno "Enable UUCP addressing" uucp || \ + echo "FEATURE(\`nouucp', \`reject')dnl" >&3; + +############################################################################### + +descrip "Sticky Host" <<EOT +If enabled, mail sent to \`user@$mailname' is marked as +"sticky" -- that is, the local addresses aren't matched against UDB and don't +go through ruleset 5. This is used if you want a setup where \`user' is not +necessarily the same as \`user@$mailname', e.g., to make +a distinct domain-wide namespace. If in doubt, it is safe to leave this +option disabled. +EOT + +sticky="N"; +! testconfig "FEATURE\(\`?stickyhost" || sticky="Y"; + +! yesno "Enable sticky host option" sticky || \ + echo "FEATURE(\`stickyhost')dnl" >&3; + +############################################################################### + +descrip "DNS" <<EOT +If you are directly connected to the Internet and have access to a domain +name server, you should enable this option. +EOT + +dns="Y"; +! testconfig "FEATURE\(\`?nodns" || dns="N"; +! testconfig "HACK\(\`?nodns" || dns="N"; + +yesno "Enable DNS" dns || \ + echo "HACK(\`nodns')dnl" >&3; + +############################################################################### + +if [ Y = "$dns" ]; then + +############################################################################### + +descrip "Best MX is Local" <<EOT +If enabled, this option will cause sendmail to accept mail as though locally +addressed for any host that lists this machine as the best possible MX record. +This generates additional DNS traffic, but should be OK for low-to-medium +traffic hosts. N.B.: This feature is fundamentally incompatible with wildcard +MX records. If you have a wildcard MX record that matches your domain, you +cannot use this feature. +EOT + +bestmxlocal="N"; +! testconfig "FEATURE\(\`?bestmx_is_local" || bestmxlocal="Y"; + +! yesno "Assume best MX is local" bestmxlocal || \ + echo "FEATURE(\`bestmx_is_local')dnl" >&3; + +############################################################################### + +fi; # finished DNS configuration + +############################################################################### + +descrip "Mailertable" <<EOT +If enabled, this option causes sendmail to read mail routing rules from +the text file @sysconfdir@/mail/mailertable. This is needed for unusual mailers like +ifmail and fax programs. +More information is in @docdir@/sendmail-doc/op/op.txt.gz. +EOT + +mailertable="N"; +! testconfig "FEATURE\(\`?mailertable" || mailertable="Y"; + +! yesno "Enable the mailertable feature" mailertable || \ + echo "FEATURE(\`mailertable')dnl" >&3; + +############################################################################### + +descrip "Sendmail Restricted Shell" <<EOT +If enabled, this option causes sendmail to use the sendmail restricted shell +program (smrsh) instead of /bin/sh for mailing to programs. This improves your +ability to control what gets run via email; only those programs which appear +in a special directory can be run. If you enable this option, please carefully +read the smrsh(8) man page for further information. +EOT + +smrsh="Y"; +! testconfig "FEATURE\(\'?smrsh" || smrsh="Y"; + +! yesno "Use the Sendmail Restricted Shell (smrsh)" smrsh || \ + echo "FEATURE(\`smrsh', \`@libexecdir@/smrsh')dnl" >&3; + +############################################################################### + +#descrip "Mailer Name" <<EOT +#You can change the name used for internally generated outgoing messages. +#Usually this is \`MAILER-DAEMON' but it would not be unreasonable to change +#it to something such as \`postmaster'. +#EOT + +#daemon="MAILER-DAEMON"; +#! testconfig "define\(\`?confMAILER_NAME" || +# daemon=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/'); + +#input "Mailer name" daemon; + +#test "MAILER-DAEMON" = "$daemon" || +# echo "define(\`confMAILER_NAME', \`$daemon')dnl" >&3; + +############################################################################### + +#descrip "Me Too" <<EOT +#Sendmail normally excludes the sender address from group expansion. Enabling +#this option will cause the sender to be included. +#EOT + +#metoo="N"; +#! testconfig "define\(\`?confME_TOO.*True" || metoo="Y"; + +#! yesno "Enable me too option" metoo || +# echo "define(\`confME_TOO', True)dnl" >&3; + +############################################################################### + +descrip "Message Timeouts" <<EOT +Sendmail will issue a warning message to the sender if it can't deliver a +message within a reasonable amount of time. It will also send a failure +notification and give up trying to deliver the message if it can't deliver it +after an unreasonable amount of time. + +You can configure the message timeouts after which warning and failure +notifications are sent. Sendmail's defaults are 4 hours and 5 days (4h/5d), +respectively, but many people feel warnings after only 4 hours are premature. +EOT + +qw="4h"; +! testconfig "define\(\`?confTO_QUEUEWARN" || + qw=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/'); + +qr="5d"; +! testconfig "define\(\`?confTO_QUEUERETURN" || + qr=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/'); + +timeouts="$qw/$qr"; + +input "Message timeouts" timeouts; + +qw=$(expr "$timeouts" : '\([^/]*\)/'); +qr=$(expr "$timeouts" : '[^/]*/\(.*\)'); + +test "4h" = "$qw" || echo "define(\`confTO_QUEUEWARN', \`$qw')dnl" >&3; +test "5d" = "$qr" || echo "define(\`confTO_QUEUERETURN', \`$qr')dnl" >&3; + +############################################################################### +# Support dialup configuration +cat <<-EOT >&3 +dnl # +dnl # Dialup/LAN connection overrides +dnl # +include(\`@sysconfdir@/mail/m4/dialup.m4')dnl +include(\`@sysconfdir@/mail/m4/provider.m4')dnl +dnl # +EOT + +############################################################################### +echo "MAILER_DEFINITIONS" >&3 +echo "MAILER(local)dnl" >&3 + +test "N" = "$smtp" || echo "MAILER(smtp)dnl" >&3; + +############################################################################### + +if [ -e /etc/ifmail/config ] && \ + [ -e @datadir@/sendmail/cf/mailer/ifmail.m4 ]; +then + echo "MAILER(ifmail)dnl" >&3; +fi; + +############################################################################### + +fi; # finished non-"null client" configuration + + +############################################################################### + +echo "" >&3; +echo "LOCAL_CONFIG" >&3; +#if [ -z $nullclient ]; then +# echo "MASQUERADE_AS($mailname)dnl" >&3 +# fi + +if [ -f $SENDMAIL_MC ]; then + sed -n -e '/^## Custom/,$p' $SENDMAIL_MC >&3; +else + echo "## Custom configurations below (will be preserved)" >&3; +fi; + +descrip "Configuration Complete" <<EOT +Advanced configuration, such as alternate mailers, the use of mailertables, +Bitnet domains, and UUCP domains can be accomplished by manually editing the +$SENDMAIL_MC configuration file and rerunning +\`$0' to generate the appropriate @sysconfdir@/mail/sendmail.cf +file. (Local changes made at the end of $SENDMAIL_MC +will be preserved by \`$0'.) + +The m4 library files for sendmail configuration are kept in the +@datadir@/sendmail/cf directory. You may wish to review the +documentation in @docdir@/sendmail to assist in further customization. + +You may wish to customize your alias database; see the aliases(5) man page +for information on the format and use of the /etc/aliases file. +EOT + +############################################################################### + +exec 3>&-; + +if [ -f $SENDMAIL_MC ];then + echo "Saving old $SENDMAIL_MC as $SENDMAIL_MC.old ..."; + mv -f $SENDMAIL_MC $SENDMAIL_MC.old; + fi; + +chown root:smmsp $SENDMAIL_MC.new; +chmod 0644 $SENDMAIL_MC.new; +mv -f $SENDMAIL_MC.new $SENDMAIL_MC; +if [ ! -f @datadir@/sendmail/cf/feature/msp.m4 ]; then + chown root:smmsp $SUBMIT_MC.new; + chmod 0644 $SUBMIT_MC.new; + mv -f $SUBMIT_MC.new $SUBMIT_MC; + fi; +trap - 0; + +makecf; +exit 0; diff --git a/debian/local/socks_wrapper b/debian/local/socks_wrapper new file mode 100644 index 0000000..ad89379 --- /dev/null +++ b/debian/local/socks_wrapper @@ -0,0 +1,31 @@ +#!/bin/bash +# Richard Nelson <cowboy@debain.org> +# Socks5 support wrapper for sendmail + +DAEMON=/usr/sbin/sendmail.real +RUNSOCKS=/usr/bin/runsocks +BASENAME=$(basename $0) + +# Adjust command name based upon the presence of the socks5 wrapper +if [ -x $RUNSOCKS ]; then + COMMAND="$RUNSOCKS $DAEMON" +else + COMMAND="$DAEMON" + fi +#echo "$BASENAME command="$COMMAND + +# Exec the appropriate command +case "$BASENAME" in + # These don't need socks support, and must be called by name + "hoststat" | "mailq" | "newaliases" | "purgestat") + exec -a $BASENAME $DAEMON "$@" + ;; + # These need socks support + "sendmail") + exec -a $DAEMON $COMMAND "$@" + ;; + # Help... shouldn't be here + *) + echo "panic, $BASENAME is not a valid alias for sendmail." + ;; + esac diff --git a/debian/local/update_auth.in b/debian/local/update_auth.in new file mode 100644 index 0000000..9b2a58e --- /dev/null +++ b/debian/local/update_auth.in @@ -0,0 +1,349 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# $Sendmail: update_auth,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Sendmail support for SMTP AUTH (SASL) +# +# Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes: +# +#----------------------------------------------------------------------------- +set -e; + +NEW=0; +DEFAULT=0; +HOSTNAME=`hostname -s`; +HOSTFQDN=`hostname -f`; +DOMAINNAME=`hostname -d`; +SMUID=sendmail; +SMAID=sendmail; +SMPWD=sendmailpwd; +SMRLM="$HOSTNAME.$DOMAINNAME"; +SMMCH=''; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +# See what sendmail was linked with +if [ "@sm_enable_auth@" != "yes" ]; then + echo "SASL support not included in sendmail, skipping..."; + exit 0; +elif [ @sm_auth_lib@ -eq 2 ]; then + SASLDBLISTUSERS='/usr/sbin/sasldblistusers2'; + SASLPASSWD='/usr/sbin/saslpasswd2'; + SASLLIB='/usr/lib/sasl2'; + SASLSO='2'; + SASLDB='/etc/sasldb2'; + SASL_BIN='sasl2-bin'; + SASL_LIB='libsasl2'; + SASL='SASL2'; +elif [ @sm_auth_lib@ -eq 1 ]; then + SASLDBLISTUSERS='/usr/sbin/sasldblistusers'; + SASLPASSWD='/usr/sbin/saslpasswd'; + SASLLIB='/usr/lib/sasl'; + SASLSO='1'; + SASLDB='/etc/sasldb'; + SASL_BIN='sasl-bin'; + SASL_LIB='libsasl'; + SASL='SASL'; + fi; + +# Check if SASL is installed +if [ ! -d ${SASLLIB} ]; then + cat <<-EOT + + ${SASL} not installed, not configuring sendmail support. + + EOT + if [ "${SASLSO}" = '1' ]; then + cat <<-EOT + To install ${SASL}, get ${SASL_BIN}, ${SASL_LIB}-modules-plain, + ${SASL_LIB}-digestmd5-plain or ${SASL_LIB}-digestmd5-des. + EOT + else + cat <<-EOT + To install ${SASL}, get ${SASL_BIN} and ${SASL_LIB}-modules. + EOT + fi; + cat <<-EOT + + To enable sendmail ${SASL} support at a later date, invoke "$0" + + EOT + exit 0; + fi; + +# Check for sasl-bin (wherein resides saslpasswd) +if [ ! -x ${SASLPASSWD} ]; then + cat <<-EOT + ${SASL_BIN} not installed, not configuring sendmail support. + + To enable sendmail ${SASL} support at a later date, invoke "$0" + + EOT + exit 0; + fi; +#echo " "; +#echo "Creating/Updating ${SASL} information"; +touch @sysconfdir@/mail/tsasl; +if chown root:sasl @sysconfdir@/mail/tsasl 2>/dev/null; then + adduser smmta sasl 1>/dev/null 2>&1; + adduser smmsp sasl 1>/dev/null 2>&1; + fi; + rm @sysconfdir@/mail/tsasl; + +# See if we need to rename an existing SASL info file +if [ -f @sysconfdir@/mail/auth-info ] \ +&& [ ! -f @sysconfdir@/mail/default-auth-info ]; then + mv @sysconfdir@/mail/auth-info \ + @sysconfdir@/mail/default-auth-info; + fi; + +# Use exisisting SASL auth information +if [ -f @sysconfdir@/mail/default-auth-info ]; then + SMUID=$(head -n1 @sysconfdir@/mail/default-auth-info); + SMAID=$(head -n2 @sysconfdir@/mail/default-auth-info | tail -n1 -); + SMPWD=$(head -n3 @sysconfdir@/mail/default-auth-info | tail -n1 -); + SMRLM=$(head -n4 @sysconfdir@/mail/default-auth-info | tail -n1 -); + SMMCH=$(head -n5 @sysconfdir@/mail/default-auth-info | tail -n1 -); + fi; + +# Check for default settings, used in later test +if [ "$SMUID" = 'sendmail' ] \ +&& [ "$SMAID" = 'sendmail' ] \ +&& [ "$SMPWD" = 'sendmailpwd' ]; then + DEFAULT=1; + fi; + +# Create Default SASL auth information +if [ ! -f @sysconfdir@/mail/default-auth-info ]; then + cat <<-EOT > @sysconfdir@/mail/default-auth-info + $SMUID + $SMAID + $SMPWD + $SMRLM + $SMMCH + EOT + fi; + +# Create any missing SASL configuration files +if [ -d ${SASLLIB} ]; then + # SASL password configuration + if [ ! -f ${SASLLIB}/saslpasswd.conf ]; then + NEW=1; + cp @datadir@/sendmail/examples/sasl/saslpasswd.conf.${SASLSO} \ + ${SASLLIB}/saslpasswd.conf; + fi; + chown root:root ${SASLLIB}/saslpasswd.conf; + chmod 0640 ${SASLLIB}/saslpasswd.conf; + + # Sendmail SASL configuration + if [ -L ${SASLLIB}/Sendmail.conf ]; then + ln -sf @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} \ + ${SASLLIB}/Sendmail.conf; + else + if [ -f ${SASLLIB}/Sendmail.conf ]; then + mv ${SASLLIB}/Sendmail.conf \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; + fi; + ln -sf @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} \ + ${SASLLIB}/Sendmail.conf; + fi; + + # Make sure libraries are properly installed... + ( cd ${SASLLIB} && \ + if [ -L libanonymous.so.${SASLSO} ] && [ ! -L libanonymous.so ]; then \ + ln -s libanonymous.so.${SASLSO} libanonymous.so; \ + fi; \ + if [ -L libcrammd5.so.${SASLSO} ] && [ ! -L libcrammd5.so ]; then \ + ln -s libcrammd5.so.${SASLSO} libcrammd5.so; \ + fi; \ + if [ -L libdigestmd5.so.${SASLSO} ] && [ ! -L libdigestmd5.so ]; then \ + ln -s libdigestmd5.so.${SASLSO} libdigestmd5.so; \ + fi; \ + if [ -L libdigestmd5.so.0 ] && [ ! -L libdigestmd5.so ]; then \ + ln -s libdigestmd5.so.0 libdigestmd5.so; \ + fi; \ + if [ -L libgssapiv2.so.${SASLSO} ] && [ ! -L libgssapiv2.so ]; then \ + ln -s libgssapiv2.so.${SASLSO} libgssapiv2.so; \ + fi; \ + if [ -L liblogin.so.${SASLSO} ] && [ ! -L liblogin.so ]; then \ + ln -s liblogin.so.${SASLSO} liblogin.so; \ + fi; \ + if [ -L liblogin.so.0 ] && [ ! -L liblogin.so ]; then \ + ln -s liblogin.so.0 liblogin.so; \ + fi; \ + if [ -L libplain.so.${SASLSO} ] && [ ! -L libplain.so ]; then \ + ln -s libplain.so.${SASLSO} libplain.so; \ + fi; ) + fi; + +# Create/update sendmail SASL files +chown smmta:smmsp @sysconfdir@/mail/sasl; +chmod 0755 @sysconfdir@/mail/sasl; +if [ ! -f @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} ] \ +&& [ -f @sysconfdir@/mail/sasl/Sendmail.conf ]; then + mv @sysconfdir@/mail/sasl/Sendmail.conf \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; + fi; +if [ ! -f @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} ]; then + NEW=1; + cp @datadir@/sendmail/examples/sasl/Sendmail.conf.${SASLSO} \ + @sysconfdir@/mail/sasl/; + fi; +chown smmta:smmsp @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; +chmod 0640 @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; + +#--------------------------------------------------------------------------- +# Make sure prototype /etc/mail/sasl/sasl.m4 exists +$sm_path/update_authm4 || true; + +# Recommend PAM for sendmail authorization +if [ "${SASLSO}" = "2" ]; then + if grep -qEe '^[[:space:]]*auto_transition:[[:space:]]*false' \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; then + sed -e \ + 's?^[[:space:]]*auto_transition:.*$?auto_transition: true?' \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} \ + > @sysconfdir@/mail/sasl/Sendmail.conf.new; + fi; + if [ -f @sysconfdir@/mail/sasl/Sendmail.conf.new ]; then + chown smmta:smmsp @sysconfdir@/mail/sasl/Sendmail.conf.new; + chmod 0644 @sysconfdir@/mail/sasl/Sendmail.conf.new; + mv @sysconfdir@/mail/sasl/Sendmail.conf.new \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; + fi; + + cat <<-EOT + + Ah, you're setup with SASL${SASLSO} ! + + Unfortunately, there is no automagic way to migrate to ${SASLDB} :( + + You'll want to make sure /etc/default/saslauthd is setup to start, + and has at least MECHANISMS="pam" ! + + If you find out what more is needed, please let me know! + EOT +else + if ! grep -qEe "^[[:space:]]*pwcheck_method:[[:space:]]*PAM" \ + ${SASLLIB}/Sendmail.conf; then + cat <<-EOT + + It is *strongly* recommended that you use PAM as the authentication + method for sendmail via ${SASL}. Doing so will allow *all* your shell + users (those with an /etc/passwd entry) to automagically authenticate + themselves when using a MUA with ${SASL} support turned on. + + Do you wish to use PAM (Y|n)? + EOT + read yn; + yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//"); + test -n "$yn" || yn="Y"; + case "$yn" in + [Yy]*) + if grep -qEe '^[[:space:]]*pwcheck_method:' \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; then + sed -e \ + 's?^[[:space:]]*pwcheck_method:.*$?pwcheck_method: PAM?' \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} \ + > @sysconfdir@/mail/sasl/Sendmail.conf.new; + else + echo 'pwcheck_method: PAM' \ + | cat @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO} - \ + > @sysconfdir@/mail/sasl/Sendmail.conf.new; + fi; + if [ -f @sysconfdir@/mail/sasl/Sendmail.conf.new ]; then + chown smmta:smmsp @sysconfdir@/mail/sasl/Sendmail.conf.new; + chmod 0640 @sysconfdir@/mail/sasl/Sendmail.conf.new; + mv @sysconfdir@/mail/sasl/Sendmail.conf.new \ + @sysconfdir@/mail/sasl/Sendmail.conf.${SASLSO}; + fi; + ;; + esac; + fi; + fi; + +# Make sure default-auth-info is secure +if [ -f @sysconfdir@/mail/default-auth-info ]; then + chown smmta:smmsp @sysconfdir@/mail/default-auth-info; + chmod 0640 @sysconfdir@/mail/default-auth-info; + fi; + +# Create skeleton file, the saslpasswd command will get a failure ;-{ +if [ ! -f ${SASLDB} ]; then + NEW=1; + if [ -x ${SASLPASSWD} ]; then + ${SASLDBLISTUSERS} 1>/dev/null 2>&1 || true; + echo "$SMPWD" | ${SASLPASSWD} -p -c -u $SMRLM $SMAID \ + 1>/dev/null 2>&1 || true; + chown root:smmsp ${SASLDB}; + chmod 0660 ${SASLDB}; + else + echo "*** You do not have the ${SASL_BIN} package installed!"; + echo "*** Please install it and rerun $0"; + echo "*** Sendmail can't use ${SASL} until this is done..."; + fi; + fi; + +# Set SMTP auth password +if [ -x ${SASLPASSWD} ]; then + if [ $DEFAULT = 0 ]; then + echo "$SMPWD" | ${SASLPASSWD} -p -c -u $SMRLM $SMAID || true; + else + ${SASLPASSWD} -d -u $SMRLM $SMAID 1>/dev/null 2>&1 || true; + fi; + fi; + +# For sendmail, /etc/sasldb must be 0600 or (0640/0660 w/dontblamesendmail) +if [ -f ${SASLDB} ]; then + find ${SASLDB} -gid 0 -print | xargs -r chown root:smmsp; + find ${SASLDB} -gid 8 -print | xargs -r chown root:smmsp; + find ${SASLDB} -group smmsp -print | xargs -r chmod g+rw; + chmod g-x,o-rwx ${SASLDB}; + fi; + +# Tell them about the new wizbang features... +if [ $NEW -eq 1 ]; then + cat <<-EOT + + To enable sendmail to use SASLS, you need to: + 1) Add this line to @sysconfdir@/mail/sendmail.mc and optionally + to @sysconfdir@/mail/submit.mc: + include(\`@sysconfdir@/mail/sasl/sasl.m4')dnl + 2) Run sendmailconfig + 3) Restart sendmail + + ${SASL} is now minimally setup, there are a few ways to handle users: + *) Allow only shell users (default) + You're all set, nothing else to do ! + *) Allow users other than shell + Add users via ${SASLPASSWD} and make sure that the + realm you used matches what your users specify in their + netscape/outlook/mutt/etc profiles. + + If you need to authorize sendmail as a sender, also update + @sysconfdir@/mail/default-auth-info and rerun $0. + + EOT + fi; diff --git a/debian/local/update_authm4.in b/debian/local/update_authm4.in new file mode 100644 index 0000000..6c9bf03 --- /dev/null +++ b/debian/local/update_authm4.in @@ -0,0 +1,257 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------ +# +# $Sendmail: update_auth,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Create @sysconfdir@/mail/sasl/sasl.m4 for Debian Sendmail +# +# Copyright 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * +# +# Notes (to self): +# * +# +#------------------------------------------------------------------------ +# +# Initialization of the perl environment +use strict; # be kosher +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 + +# 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: 2.00 $ '; +$main::program_name = $0; +$main::program_version = '@sm_version@'; +$main::program_date = '@sm_date@ @sm_time@ cowboy'; +$main::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(); + +my $SASL_def = "@sysconfdir@/mail/sasl/sasl.m4"; + +# Hash of define names to filename +my %Def_Map; + +# +#------------------------------------------------------------------------------ +# Finally, some code (almost) +#------------------------------------------------------------------------------ +# +# Argument handling... +$main::opt_help=''; +$main::opt_output_file=''; +$main::opt_input_file=''; +$main::opt_debug=''; +my @options = qw( + help|h + output-file|output_file|o:s + input-file|input_file|i:s + debug! + ); +my $result = GetOptions(@options); +if ( ! $result ) { + die "Terminating due to parameter error"; + }; +if ( $main::opt_help ) { + warn "$main::program_name $main::program_version $main::program_date\n"; + warn "$0 \n"; + warn " -help\n" if $main::opt_help; + warn " -debug\n" if $main::opt_debug; + 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; + }; + +my $SASL = $main::opt_output_file || $SASL_def; +${Parse_mc::database_file} = $main::opt_input_file + if $main::opt_input_file; +# $main::debug is used in Parse_mc ! +$main::debug = $main::opt_debug || $main::debug; + +# Let them know wtf is going on... +print STDOUT "Creating ${SASL}...\n"; + +# Read the mc/m4 files +&Parse_mc::read_dbs($Parse_mc::database_file, ''); + +# Obtain SASL information from database +&get_data; + +# Write out the textual representation +&write_sasl; + + +# +#------------------------------------------------------------------------------ +# Obtain information from database +#------------------------------------------------------------------------------ +sub get_data { + my @names = ( + 'confTO_AUTH' + ,'TRUST_AUTH_MECH' + ,'confAUTH_MECHANISMS' + ,'confAUTH_REALM' + ); + + foreach my $entry (@names) { + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + my $file = join(' ',@{$files}); + $Def_Map{$entry} = ''; + $Def_Map{$entry} = $file if ($file ne '-'); + #$Def_Map{$entry} = &Parse_mc::format_dbs($entry); + }; + }; + + +# +#------------------------------------------------------------------------------ +# Create @sysconfdir@/mail/sasl/sasl.m4 +#------------------------------------------------------------------------------ +sub write_sasl { + my $ofh = new FileHandle; + + $SASL = '&STDOUT' if ($SASL eq '-'); + unless ( open($ofh, ">$SASL") ) { + warn("Could not open $SASL($!), using STDOUT.\n"); + open($ofh, ">&STDOUT"); + }; + $SASL = '-' if ($SASL eq '&STDOUT'); + + &write_m4($ofh); + + close $ofh; + if ($SASL eq $SASL_def) { + chown '0', '0', $SASL; + chmod 0744, $SASL; + }; + }; + + +# +#------------------------------------------------------------------------------ +# Write SASL m4 file +#------------------------------------------------------------------------------ +sub write_m4 { + my ($ofh) = @_; + + print $ofh <<"EOT"; +divert(-1)dnl +#################################################################### +##### This file is automagically generated -- edit at your own risk +##### +##### Copyright (c) 2002-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +##### +##### file: ${SASL} +##### AUTH Configuration for Debian Sendmail +##### generated via: (${interp_pgm} ${interp_vrm}) +##### ${main::program_name} +##### version: ${main::program_version} ${main::program_date} +##### by: ${user}\@${hostname} +##### on: ${current_time} +##### in: ${directory} +##### input files: ${Parse_mc::database_file} +##### +##### Usage: +##### 1) To get *ANY* AUTH support for sendmail you +##### A) *MUST* Add this line to @sysconfdir@/mail/sendmail.mc +##### \`include(\`@sysconfdir@/mail/sasl/sasl.m4\')dnl\' +##### B) *MAY* Add the same line to @sysconfdir@/mail/submit.mc +##### to get MSP<->MTA authentication/encryption +##### 2) You may modify the marked portions of this file. +##### If you need finer control of AUTH options, use the access +##### database. +##### +#################################################################### +divert(0)dnl +VERSIONID(\`\$Id: sasl.m4,v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp \$\') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(\`sm_version\', \`dnl\', +\`include(\`@datadir@/sendmail/cf/debian/autoconf.m4\')dnl\') +dnl # +dnl #--------------------------------------------------------------------- +dnl # SMTP AUTH (SASL) support (sendmail 8.10.0 +) +dnl # PLAIN/LOGIN needed to support SASL auth via PAM ;( +dnl # if this bothers you, you allow them only in conjunction w/STARTTLS ! +dnl #--------------------------------------------------------------------- +ifelse(eval(sm_version_math >= 526848), \`1\', \`dnl +ifelse(sm_enable_auth, \`yes\', \`dnl +dnl # +dnl # ...Do not touch anything above this line... +dnl # +dnl # Set a more reasonable timeout on negotiation +dnl # +define(\`confTO_AUTH\', \`$Def_Map{'confTO_AUTH'}\')dnl # <= EDIT +dnl # +dnl # Define the REALM passed to sasl (8.13.0+) +ifelse(eval(sm_version_math >= 527616), \`1\', \`dnl +define(`confAUTH_REALM', \`$Def_Map{'confAUTH_REALM'}\')dnl # <= EDIT +\')dnl +dnl # +dnl # Available Authentication methods +dnl # +define(\`confAUTH_MECHANISMS\',dnl +\`$Def_Map{'confAUTH_MECHANISMS'}\')dnl # <= EDIT +dnl # +dnl # These, we will trust for relaying +dnl # +TRUST_AUTH_MECH(\`$Def_Map{'TRUST_AUTH_MECH'}\')dnl # <= EDIT +dnl # +dnl # ...Do not touch anything below this line... +dnl # +dnl # +dnl # for 8.12.0+, add EXTERNAL as an available & trusted mech (w/STARTTLS) +dnl # and allow sharing of /etc/sasldb(2) file, allow group read/write +dnl # +ifelse(eval(sm_version_math >= 527360), \`1\', \`dnl +define(\`confAUTH_MECHANISMS\',dnl +\`EXTERNAL \'defn(\`confAUTH_MECHANISMS\'))dnl +TRUST_AUTH_MECH(\`EXTERNAL\') +dnl # +dnl # To support some SASL use, we need the DB to be group readable +dnl # +define(\`confDONT_BLAME_SENDMAIL\',dnl +defn(\`confDONT_BLAME_SENDMAIL\')\`,GroupReadableSASLDBFile,GroupWritableSASLDBFile\')dnl +\')dnl +dnl # +dnl # To support SMTP AUTH in \`sendmail -bs\' : +dnl # Sigh: SASLV1 MSP AUTH does not work in -bs mode (/etc/sasldb !o+r) +dnl # so, we have the MSP not use Auth (or ETRN) +dnl # SASLV2 (w/saslauth) chose to prohibit user authentication - it can +dnl # be made to work by: +dnl # 1) changing /etc/sasldb2 {root,sasl,smmta}:smmsp 0660 +dnl # 2) dpkg-statoverride --remove /var/run/saslauthd +dnl # 3) dpkg-statoverride --add root sasl 711 /var/run/saslauthd +dnl # +ifelse(eval(sm_auth_lib < 2), \`1\', \`dnl +ifdef(\`DEBIAN_MSP\', \`dnl +ifelse(defn(\`_DPO_\'), \`\', \`dnl +DAEMON_OPTIONS(\`Name=NoMTA, Addr=0.0.0.0, M=EA\')dnl +\')\')\')dnl +dnl # +\')\')dnl +EOT + }; + diff --git a/debian/local/update_conf.in b/debian/local/update_conf.in new file mode 100644 index 0000000..90d0550 --- /dev/null +++ b/debian/local/update_conf.in @@ -0,0 +1,539 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------ +# +# $Sendmail: update_conf,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Parse and update /etc/mail/sendmail.conf and reflect its values in +# /etc/cron.d/sendmail and /etc/inetd.conf. +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +#------------------------------------------------------------------------ +# +use strict; # be kosher +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_conf; +require Parse_mc; + +$main::program_name = $0; #'update_conf'; +$main::program_version = '@sm_version@'; +$main::program_date = '@sm_date@ @sm_time@ cowboy'; +$main::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(); + +my $Conffile = "@sysconfdir@/mail/sendmail.conf"; +my $output_file = ''; +my $ofh = new FileHandle; +my $debug = 0; + +# +#------------------------------------------------------------------------------ +# Global variables +#------------------------------------------------------------------------------ + +# +#------------------------------------------------------------------------------ +# Finally, some code (almost) +#------------------------------------------------------------------------------ + +# +# Argument handling... +$main::opt_help=''; +$main::opt_output_file=''; +$main::opt_input_file=''; +$main::opt_debug=''; +$main::opt_test=''; +my @options = qw( + help|h + output-file|output_file|o:s + input-file|input_file|i:s + debug! + test! + ); +my $result = GetOptions(@options); +if ( ! $result ) { + die "Terminating due to parameter error"; + }; +if ( $main::opt_help ) { + warn "$main::program_name $main::program_version $main::program_date\n"; + warn "$0 \n"; + warn " -help\n" if $main::opt_help; + warn " -debug\n" if $main::opt_debug; + 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; + }; + +if ( $main::opt_test ) { + &sm2cron_time(""); + &sm2cron_time("6s"); + &sm2cron_time("5m"); + &sm2cron_time("4h"); + &sm2cron_time("3d"); + &sm2cron_time("2w"); + &sm2cron_time("5w"); + &sm2cron_time("2w3d4h5m6s"); + &sm2cron_time("89s"); + &sm2cron_time("90m"); + exit 0; + }; + +$output_file = $main::opt_output_file if ($main::opt_output_file); +my $input_file = $main::opt_input_file || $Conffile; +# $main::debug is used in Parse_mc ! +$main::debug = $main::opt_debug || $main::debug; + +# Read /etc/mail/sendmail.conf (if extant) +&Parse_conf::read_config($Conffile); + +# [Re]write /etc/mail/sendmail.config +&Parse_conf::write_config($Conffile); + +my ($ok, $value) = &Parse_conf::get_value('HANDS_OFF'); +if ($value ne '0') { + unlink "@sysconfdir@/cron.d/sendmail"; + exit; + }; + +# Reflect settings in /etc/cron.d/sendmail +&write_crontab; +if ( $output_file eq '' ) { + chown '0', '0', "@sysconfdir@/cron.d/sendmail"; + chmod 0644, "@sysconfdir@/cron.d/sendmail"; + }; + +# Reflect settings in /etc/inetd.conf +&update_inetd; + +# Create/Delete files +&update_files; + +exit (0); + +# +#------------------------------------------------------------------------ +# Check for nullclient mode in /etc/mail/sendmail.mc +#------------------------------------------------------------------------ +sub check_nullclient { + my $nullclient = 0; + my $in_file = "@sysconfdir@/mail/sendmail.mc"; + if ( -r $in_file ) { + my $ifh; + unless ( open($ifh, "<$in_file") ) { + warn("Could not open $in_file($!), ignoring it.\n"); + }; + + line: while (<$ifh>) { + next line if /^$/; # skip empty lines + next line if /^#/; # skip comments + next line if /^dnl /; # skip comments + chomp; # drop tailing \n + + if (/^\s*FEATURE\(\s*`?nullclient/) { + $nullclient = 1; + last line; + }; + }; + }; + return $nullclient; + }; + +# +#------------------------------------------------------------------------ +# Compute time setting for Crontab entry (simplistic) +#------------------------------------------------------------------------ +sub sm2cron_time { + my $month = 0; + my $week = 0; + my $day = 0; + my $hour = 0; + my $minute = 0; + my $second = 0; + my $tmp = 0; + my $t = ''; + my $cron = ''; + + my ($sm) = @_; + my $seconds = 0; + if ($sm eq '') { + if ( $main::opt_test ) { + print "$cron = sm2cron_time($sm);\n"; + }; + return ($cron, $seconds); + }; + + # Convert sendmail time + # 1w2d3h4m5s + # 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); + + # 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 of hour (0-59) + $seconds = $seconds + ($minute * 60); + $tmp = $minute; + $minute = sprintf("%02d", $minute%60); + $hour = $hour + sprintf("%02d", ($tmp-$minute)/60); + if (0 < $hour + $day + $week + $month) { + $hour = $hour + 1 if ($minute >= 30); + $cron = "00 "; + } + 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); + if (0 < $day + $week + $month) { + $day = $hour + 1 if ($minute >= 30); + $cron = "$cron 00 "; + } + elsif ($hour != 0) { + $cron = "$cron */$hour"; + } + else { + $cron = "$cron * "; + }; + + # Day of month (1-31) + $tmp = $day; + $day = sprintf("%02d", $day%32); + $month = $month + sprintf("%02d", ($tmp-$day)/32); + if (0 < $month) { + $month = $month + 1 if ($day >= 15); + $cron = "$cron 01 "; + } + elsif ($day != 0) { + $cron = "$cron */$day"; + } + else { + $cron = "$cron * "; + }; + + # Month in year (1-12) + $month = sprintf("%02d", $month%12); + if (0 < $month) { + $cron = "$cron */$month"; + } + else { + $cron = "$cron * "; + }; + + $cron = "$cron *"; # Day of week (0-7) + + if ( $main::opt_test ) { + print "$cron = sm2cron_time($sm);\n"; + }; + return ($cron, $seconds); + }; + +# +#------------------------------------------------------------------------ +# Write updated cron file +#------------------------------------------------------------------------ +sub write_crontab { + my $var; + my $interval = ''; + my $cronint = ''; + my $test = "test -x @sysconfdir@/init.d/sendmail"; + my $command = ''; + my $ok = ''; + my $mailto = ''; + my $mmode = ''; + my $qmode = ''; + my $msp_line = ''; + my $mta_line = ''; + my $age_line = ''; + + ($ok, $mailto) = &Parse_conf::get_value('CRON_MAILTO'); + if ( ! $ok ) { + return; + }; + + my $out_file = $output_file || "@sysconfdir@/cron.d/sendmail"; + print STDOUT "Writing $out_file.\n"; + $out_file = '&STDOUT' if ($out_file eq '-'); + unless ( open($ofh, ">$out_file") ) { + warn("Could not open $out_file($!), using STDOUT\n"); + open($ofh, ">&STDOUT"); + }; + $out_file = '-' if ($out_file eq '&STDOUT'); + + print $ofh <<"EOT"; +#################################################################### +##### This file is automagically generated -- edit at your own risk +##### +##### file: ${out_file} +##### generated via: (${interp_pgm} ${interp_vrm}) +##### ${main::program_name} +##### version: ${main::program_version} ${main::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"; +##### +#################################################################### +#------------------------------------------------------------------------------ +# +# $out_file +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# Version: ${main::program_version} +# Time-stamp: <${main::program_date}> +# +# Sendmail crontab - Call sendmail at various times to do the following: +# 1) Age queues - move undelivered mail to a slower queue +# 2) Retry any mail queued by the message submission process +# 3) run the queues (deliver mail) if a standalone daemon is not desired +# +# Each processes is independant and guided by /etc/mail/sendmail.conf and +# {sendmail,submit}.mc files. +# +# There isn't anything here that should need touching. +# +# Any requisite queue/misc parameters must be set in /etc/mail/sendmail.conf +# and reflected herein via /usr/sbin/sendmailconfig (or more directly via +# ${main::program_name}). +# +#------------------------------------------------------------------------------ +# +# use default path, shell, home +#SHELL=/bin/sh +#PATH= +#HOME= +# send mail to this user, as `mail/smmsp` isn't real. +MAILTO=$mailto +# +# format of entries: +# m h dom mon dow user command +# +#------------------------------------------------------------------------------ +# Every so often, give sendmail a chance to run the MSP queues. +# +EOT + ($ok, $interval) = &Parse_conf::get_value('MSP_INTERVAL'); + ($cronint, $ok) = &sm2cron_time($interval); + $command = "$test && @datadir@/sendmail/sendmail cron-msp"; + ($ok, $mmode) = &Parse_conf::get_value('MSP_MODE'); + ($ok, $qmode) = &Parse_conf::get_value('QUEUE_MODE'); + if ($mmode eq 'Cron' + and ($interval ne '') + #or ($mmode eq 'None' and $qmode eq 'Cron') + ) { + $msp_line = + "$cronint\t\tsmmsp\t$command"; + } + else { + $msp_line = + "#$cronint\t\tsmmsp\t$command"; + }; + print $ofh "$msp_line\n"; + + print $ofh <<"EOT"; +# +#------------------------------------------------------------------------------ +# Every so often, give sendmail a chance to run the MTA queues. +# Will also run MSP queues if enabled +# +EOT + ($ok, $interval) = &Parse_conf::get_value('QUEUE_INTERVAL'); + ($cronint, $ok) = &sm2cron_time($interval); + $command = "$test && @datadir@/sendmail/sendmail cron-mta"; + if ($qmode eq 'Cron' + and ($interval ne '') + ) { + $mta_line = + "$cronint\t\troot\t$command"; + } + else { + $mta_line = + "#$cronint\t\troot\t$command"; + }; + print $ofh "$mta_line\n"; + + print $ofh <<"EOT"; +# +#------------------------------------------------------------------------------ +# Every so often, give sendmail a chance to age the queues. +# +EOT + ($ok, $var) = &Parse_conf::get_value('AGE_DATA'); + my $tmpval = eval $var; + if ($@) { + warn $@; + } + else { + $var = $tmpval; + }; + if (not ref $var) { + print $ofh "# No queue aging\n"; + } + elsif (@{$var} == 0) { + print $ofh "# No queue aging\n"; + } + else { + foreach my $entry (@{$var}) { + ($interval, $ok) = &sm2cron_time(@$entry[0]); + my $criteria = @$entry[1] || join('','-s ',$ok); + my $to = @$entry[2]; + my $from = @$entry[3]; + $command = "$test && @datadir@/sendmail/qtool.pl"; + $from = "@localstatedir@/spool/mqueue/$from" + if ($from !~ /^\//); + $to = "@localstatedir@/spool/mqueue/$to" + if ($to !~ /^\//); + $age_line = + "$interval\t\troot\t$command $criteria $to $from"; + print $ofh "$age_line >/dev/null\n"; + }; + }; + print $ofh <<"EOT"; +# +EOT + + close($ofh); + }; + +# +#------------------------------------------------------------------------ +# Update /etc/inetd.conf file +#------------------------------------------------------------------------ +sub update_inetd { + + # Don't try to write if we're debugging + if ($output_file ne '') { + return; + }; + + my ($ok, $mode) = &Parse_conf::get_value('DAEMON_MODE'); + if ( $ok and -x '/usr/sbin/update-inetd' ) { + if ( $mode eq 'Inetd' ) { + system 'update-inetd --group MAIL --enable smtp,smtps,submission' + } + else { + system 'update-inetd --group MAIL --disable smtp,smtps,submission' + }; + }; + + }; + +# +#------------------------------------------------------------------------ +# Update mail statistics information (create/delete files) +#------------------------------------------------------------------------ +sub update_files { + + # Don't try to write if we're debugging + if ($output_file ne '') { + return; + }; + + 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]; + ($ok, $stats) = &Parse_conf::get_value('DAEMON_HOSTSTATS'); + if ( $ok and $file ne '-' ) { + if ( $stats and ! -d $file) { + print STDOUT "Enabling HOST statistics file($file).\n"; + system "mkdir ${file}"; + my $gid = getgrnam('smmsp'); + chown '0', $gid, $file; + chmod 02755, $file; + } + elsif ( ! $stats and -d $file ) { + print STDOUT "Disabling HOST statistics file($file).\n"; + system "rm -rf ${file}"; + }; + }; + + # Obtain entry for STATUS_FILE + ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs('STATUS_FILE'); + $file = @{$files}[0]; + ($ok, $stats) = &Parse_conf::get_value('DAEMON_MAILSTATS'); + if ( $ok and $file ne '-' ) { + if ( $stats and ! -e $file) { + print STDOUT "Enabling MTA statistics file($file).\n"; + open 'STATS', ">$file"; + close 'STATS'; + my $gid = getgrnam('smmsp'); + chown '0', $gid, $file; + chmod 0640, $file; + } + elsif ( ! $stats and -e $file ) { + print STDOUT "Disabling MTA statistics file($file).\n"; + unlink $file; + }; + }; + + # Obtain entry for MSP_STATUS_FILE + ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs('MSP_STATUS_FILE'); + $file = @{$files}[0]; + ($ok, $stats) = &Parse_conf::get_value('MSP_MAILSTATS'); + if ( $ok and $file ne '-') { + if ( $stats and ! -e $file ) { + print STDOUT "Enabling MSP statistics file($file).\n"; + open 'STATS', ">$file"; + close 'STATS'; + my $gid = getgrnam('smmsp'); + chown '0', $gid, $file; + chmod 0660, $file; + } + elsif ( ! $stats and -e $file ) { + print STDOUT "Disabling MSP statistics file($file).\n"; + unlink $file; + }; + }; + + }; + diff --git a/debian/local/update_db.in b/debian/local/update_db.in new file mode 100644 index 0000000..d61016f --- /dev/null +++ b/debian/local/update_db.in @@ -0,0 +1,636 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# $Sendmail: update_db,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Update Sendmail databases for Debian +# +# Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * assumes makemap dbtype /etc/mail/database < /etc/mail/database +# +# Notes (to self): +# * changes made herein *must* be reflected in +# parse_mc,update_mk,update_db,debian.m4 +# * multiple db options not supported +# * userdb can also have multiple databases and then a forward! +# * need sendmail stop/start +# +#----------------------------------------------------------------------------- +set -e; + +# List of db files/features/etc +db_files="databases Makefile crontab QUEUE_GROUP sendmail.cf submit.cf \ + confCR_FILE confCT_FILE confCW_FILE confUSERDB_SPEC \ + access_db authinfo bitdomain domaintable \ + genericstable mailertable uucpdomain \ + use_cw_file use_ct_file virtusertable ALIAS_FILE"; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +# control amount of output +verbosity=0; + +# flag used to ensure only one newaliases command is run +newaliases_run=0; + +# flag used to indicate a dataset has been moved, may need another update +changed=0; + +# max return code +max_rc=0; +missing_rqd=0; +missing_opt=0; +missing_cre=0; +m4_errors=0; + +#------------------------------------------------------------- +# Initial update of sendmail.mc/databases +#------------------------------------------------------------- +initial () { + if [ $verbosity -gt 1 ]; then + echo "initial()"; + fi; + # Sigh... I wish this was in Perl... + $sm_path/parse_mc || true; + }; + +#------------------------------------------------------------- +# Handle found databases +#------------------------------------------------------------- +is_found () { + if [ $verbosity -gt 1 ]; then + echo "is_found: $dbfeat - $dbname"; + fi; + process=1; + + case "$dbfeat" in + ALIAS_FILE) + if [ -f @sysconfdir@/mail/aliases ] & [ ! -f /etc/aliases ]; then + echo "Moving @sysconfdir@/mail/aliases to /etc/aliases"; + mv @sysconfdir@/mail/aliases /etc/aliases; + ln -sf ../aliases @sysconfdir@/mail/aliases; + fi; + ;; + submit.cf) + if [ ! -f @datadir@/sendmail/cf/feature/msp.m4 ]; then + rm -f @sysconfdir@/mail/submit.cf 2>/dev/null; + rm -f @sysconfdir@/mail/submit.cf.errors 2>/dev/null; + process=0; + fi; + ;; + *) + ;; + esac; + }; + +#------------------------------------------------------------- +# Handle missing databases: +# moving /etc/xxx to /etc/mail/xxx +# rename /etc/mail/xxx to /etc/mail/yyy +#------------------------------------------------------------- +move_file () { + if [ -f $1 ]; then + if [ ! -L $1 ]; then + echo "Moving $1 to $dbname."; + mv $1 $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + if [ -f $1.db ]; then + mv -f /etc/$1.db $dbname.db; + fi; + if [ -f $1.pag ]; then + mv -f /etc/$1.pag $dbname.pag; + fi; + if [ -f $1.dir ]; then + mv -f /etc/$1.dir $dbname.dir; + fi; + changed=1; + process=1; + else + echo "$1 is a link, move it to $dbname"; + if [ "$dbopts" = "-o" ]; then + missing_opt=`expr $missing_opt + 1`; + else + missing_rqd=`expr $missing_rqd + 1`; + fi; + fi; + true; + else + false; + fi; + }; + +rename_file () { + if [ -f @sysconfdir@/mail/$1 ]; then + echo "Renaming @sysconfdir@/mail/$1 to $dbname."; + mv @sysconfdir@/mail/$1 $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + changed=1; + process=1; + true; + else + false; + fi; + }; + +is_not_found () { + if [ $verbosity -gt 1 ]; then + echo "is_not_found: $dbfeat - $dbname"; + fi; + + case "$dbfeat" in + databases|Makefile) + :; + ;; + use_cw_file|confCW_FILE) + if move_file /etc/local-host-names; then + :; + elif rename_file sendmail.cw; then + :; + elif move_file /etc/sendmail.cw; then + :; + else + missing_cre=`expr $missing_cre + 1`; + echo "Warning: $dbfeat source" \ + "file not found: $dbname"; + echo " it was created"; + echo "localhost" > $dbname; + echo `hostname -f` >> $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + fi; + ;; + use_ct_file|confCT_FILE) + if move_file /etc/trusted-users; then + :; + elif rename_file sendmail.ct; then + :; + elif move_file /etc/sendmail.ct; then + :; + else + missing_cre=`expr $missing_cre + 1`; + echo "Warning: $dbfeat source" \ + "file not found: $dbname"; + echo " it was created"; + touch $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + fi; + ;; + HELP_FILE) + if move_file /etc/sendmail.hf; then + :; + elif rename_file sendmail.hf; then + :; + else + echo "Error: $dbfeat source file not found: $dbname"; + missing_rqd=`expr $missing_rqd + 1`; + process=0; + fi; + ;; + ALIAS_FILE) + if [ -e /etc/$dbsname ]; then + echo "Linking /etc/$dbsname to $dbname"; + ln -sf ../$dbsname $dbname; + if [ -f /etc/$dbsname.db ]; then + mv /etc/$dbsname.db @sysconfdir@/mail; + fi; + if [ -f /etc/$dbsname.pag ]; then + mv /etc/$dbsname.pag @sysconfdir@/mail; + fi; + if [ -f /etc/$dbsname.dir ]; then + mv /etc/$dbsname.dir @sysconfdir@/mail; + fi; + elif [ "$dbopts" = "-o" ]; then + echo "Informational: $dbfeat source" \ + "file not found: $dbname"; + missing_opt=`expr $missing_opt + 1`; + process=0; + else + echo "Error: $dbfeat source file not found: $dbname"; + missing_rqd=`expr $missing_rqd + 1`; + process=0; + fi; + ;; + *.cf) + mcfile=$(echo "$dbsname" | sed -e 's/\..*//') + if move_file /etc/$dbsname; then + if [ -f @sysconfdir@/${mcfile}.cf ]; then + mv -f @sysconfdir@/${mcfile}.cf @sysconfdir@/mail/; + fi; + elif [ "$mcfile" = "sendmail" ]; then + cp @datadir@/sendmail/cf/debian/sendmail.mc \ + $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + elif [ "$mcfile" = "submit" ]; then + cp @datadir@/sendmail/cf/debian/submit.mc \ + $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + elif [ "$dbopts" = "-o" ]; then + echo "Informational: $dbfeat source" \ + "file not found: $dbname"; + missing_opt=`expr $missing_opt + 1`; + process=0; + else + echo "Error: $dbfeat source file not found: $dbname"; + missing_rqd=`expr $missing_rqd + 1`; + process=0; + fi; + ;; + QUEUE_GROUP) + echo "Warning: $dbfeat source" \ + "file not found: $dbname"; + echo " it was created"; + mkdir -p $dbname; + chown root:smmsp $dbname; + chmod 02750 $dbname; + ;; + crontab) + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + ;; + access_db) + missing_cre=`expr $missing_cre + 1`; + echo "Warning: $dbfeat source" \ + "file not found: $dbname"; + echo " it was created"; + cp @datadir@/sendmail/examples/db/access \ + @sysconfdir@/mail/; + chown root:root $dbname; + chmod 0644 $dbname; + ;; + *) + if move_file /etc/$dbsname; then + :; + elif [ "$dbopts" = "-o" ]; then + :; + else + missing_cre=`expr $missing_cre + 1`; + echo "Warning: $dbfeat source" \ + "file not found: $dbname"; + echo " it was created"; + touch $dbname; + chown root:smmsp $dbname; + chmod 0644 $dbname; + fi; + ;; + esac; + }; + +#------------------------------------------------------------- +# Handle empty databases +#------------------------------------------------------------- +is_empty () { + if [ $verbosity -gt 1 ]; then + echo "is_empty: $dbfeat - $dbname"; + fi; + if [ $process -eq 1 ]; then + if [ "$dbtype" != "-" ]; then + rm -f $dbname.db; + rm -f $dbname.pag; + rm -f $dbname.dir; + fi; + case "$dbfeat" in + databases|Makefile) + :; + ;; + access_db) + cp @datadir@/sendmail/examples/db/access \ + @sysconfdir@/mail/; + chown root:root $dbname; + chmod 0644 $dbname; + ;; + *) + echo "Informational: $dbfeat file empty: $dbname"; + if [ "$dbopts" = "-o" ]; then + process=0; + fi; + ;; + esac; + fi; + }; + +#------------------------------------------------------------- +# Handle no data (exists, but is only comments) databases +#------------------------------------------------------------- +is_comments () { + if [ $verbosity -gt 1 ]; then + echo "is_comments: $dbfeat - $dbname"; + fi; + if [ $process -eq 1 ] && [ -s "$dbname" ]; then + if [ "$dbtype" != "-" ]; then + rm -f $dbname.db; + rm -f $dbname.pag; + rm -f $dbname.dir; + fi; + case "$dbfeat" in + databases|Makefile) + :; + ;; + *) + echo "Informational: $dbfeat no data: $dbname"; + if [ "$dbopts" = "-o" ]; then + process=0; + fi; + ;; + esac; + fi; + }; + +#------------------------------------------------------------- +# Handle normal databases (exists, has data) +#------------------------------------------------------------- +is_normal () { + if [ $verbosity -gt 1 ]; then + echo "is_normal: $dbfeat - $dbname"; + fi; + + # Make sure sensitive databases are *not* generally readable + if [ "$dbsname" = "authinfo" ] \ + || [ "$dbsname" = "access" ]; then + chmod go-rwx $dbname; + fi; + + if [ $process -eq 1 ] && [ $max_rc -eq 0 ]; then + case "$dbtype" in + '-'|text|ldap) + :; + ;; + parse_mc) + $sm_path/parse_mc || true; + ;; + update_conf) + $sm_path/update_conf || true; + ;; + update_mk) + $sm_path/update_mk || true; + ;; + btree) + echo "Updating $dbname..."; + @sbindir@/makemap -d $dbtype $dbname.new.db < $dbname; + chown root:smmsp $dbname.new.db; + chmod 0644 $dbname.new.db; + mv -f $dbname.new.db $dbname.db; + ;; + dbm | btree | hash) + echo "Updating $dbname..."; + @sbindir@/makemap $dbtype $dbname.new.db < $dbname; + if [ "$dbsname" = "authinfo" ] \ + || [ "$dbsname" = "access" ]; then + chown smmta:smmsp $dbname.new.db; + chmod 0640 $dbname.new.db; + else + chown root:smmsp $dbname.new.db; + chmod 0640 $dbname.new.db; + fi; + mv -f $dbname.new.db $dbname.db; + ;; + newaliases) + echo "Updating $dbname..."; + if [ $newaliases_run -eq 0 ]; then + newaliases_run=1; + @libexecdir@/newaliases || true; + fi; + if [ -f $dbname.db ]; then + chown smmta:smmsp $dbname.db; + chmod 0640 $dbname.db; + fi; + ;; + m4) + mcfile=$(echo "$dbsname" | sed -e 's/\..*//'); + echo "Creating @sysconfdir@/mail/${mcfile}.cf..."; + rm -f @sysconfdir@/mail/${mcfile}.cf.errors; + m4 @sysconfdir@/mail/${mcfile}.mc \ + > @sysconfdir@/mail/${mcfile}.cf.new \ + 2> @sysconfdir@/mail/${mcfile}.cf.errors || true; + echo "### @sysconfdir@/mail/${mcfile}.mc ###" \ + >> @sysconfdir@/mail/${mcfile}.cf.new; + sed -e 's/^/# /' @sysconfdir@/mail/${mcfile}.mc \ + >> @sysconfdir@/mail/${mcfile}.cf.new; + chown root:smmsp @sysconfdir@/mail/${mcfile}.cf.new; + chmod 0644 @sysconfdir@/mail/${mcfile}.cf.new; + if [ ! -s @sysconfdir@/mail/${mcfile}.cf.errors ]; then + rm -f @sysconfdir@/mail/${mcfile}.cf.errors; + else + chown root:smmsp @sysconfdir@/mail/${mcfile}.cf.errors; + cat @sysconfdir@/mail/${mcfile}.cf.errors; + echo " "; + m4_errors=1; + fi; + # Can't tell if the errors are fatal or not ;-{ + mv -f @sysconfdir@/mail/${mcfile}.cf.new \ + @sysconfdir@/mail/${mcfile}.cf; + ;; + *) + echo "$dbtype map not done herein"; + ;; + esac; + fi; + }; + +#------------------------------------------------------------- +# Handle completion +#------------------------------------------------------------- +final () { + if [ $verbosity -gt 1 ]; then + echo "final()"; + fi; + }; + + +# status report if not for single database +if [ -z "$1" ]; then + echo "Checking {sendmail,submit}.mc and related databases..."; +else + db_files="$1"; + fi; + +initial; + +for file in $db_files; do \ + line=$(grep -Ee "^[[:space:]]*$file" \ + @sysconfdir@/mail/databases || true); + while ([ "$line" != "" ]); do + str=$(echo "$line" | cut -d " +" -f 1); + line=$(echo "$line" | cut -d " +" -f 2-); + + # Strip line back into four pieces: feature, type, opts, name + dbfeat=$(echo "$str" | cut -d ":" -f 1); + dbtype=$(echo "$str" | cut -d ":" -f 2); + dbopts=$(echo "$str" | cut -d ":" -f 3); + dbname=$(echo "$str" | cut -d ":" -f 4); + dbregx=$(echo "$str" | cut -d ":" -f 5); + if [ $(dirname "$dbname") = "@sysconfdir@/mail" ]; then + dbsname=$(basename "$dbname"); + elif [ $(dirname "$dbname") = "@sysconfdir@" ]; then + dbsname=$(basename "$dbname"); + else + dbsname="$dbname"; + fi; + if [ "$dbopts" = "-" ]; then + dbopts=""; + fi; + if [ "$dbregx" = "-" ]; then + dbregx=""; + fi; + + # Check to see if we're doing one, or all + if [ ! -z "$1" ]; then + if [ "$1" = "$dbfeat" ] \ + || [ "$1" = "$dbname" ] \ + || [ "$1" = "$dbsname" ]; then + :; + else + continue; + fi; + fi; + + # Check for special database types + case "$dbtype" in + ldap) + if [ $verbosity -gt 0 ]; then + echo "Skipping $dbname..."; + fi; + continue + ;; + dbm | btree | hash) + if [ ! -x @libexecdir@/makemap ]; then + echo "Delaying $dbname..."; + continue; + fi; + ;; + newaliases) + if [ ! -x @libexecdir@/newaliases ]; then + echo "Delaying $dbname..."; + continue; + fi; + ;; + *) + ;; + esac; + + # Kluge for aliases... + if [ "$dbname" = "ldap" ]; then + continue; + fi; + + process=1; + if [ $verbosity -gt 0 ]; then + echo "Processing $dbname..."; + fi; + + # Check for database existance + if [ -f "$dbname" ] || [ -d "$dbname" ]; then + is_found; + else + is_not_found; + fi; + + # Skip the rest for directories + if [ ! -d "$dbname" ]; then + + # Check for something in database + if [ ! -s "$dbname" ]; then + is_empty; + fi; + + # Check for real data (not just comments) + if [ $process -eq 1 ]; then + if ! grep -qEe "^[[:space:]]*[^$\#]" $dbname; then + is_comments; + fi; + fi; + + # Finally, assume a normal file... + is_normal; + fi; + + done; + done; + +final; + +# Final notices... +if [ $changed -ne 0 ]; then + echo " "; + echo "Informational: Some changes were made to file locations"; + echo " Make sure sendmail.cf is rebuilt"; + if [ $max_rc -lt 1 ]; then + max_rc=1; + fi; + fi; +if [ $missing_opt -ne 0 ]; then + echo " "; + echo "Informational: $missing_opt optional database(s) sources"; + echo " were not found, please investigate."; + fi; +if [ $missing_cre -ne 0 ]; then + echo " "; + echo "Warning: $missing_cre database(s) sources"; + echo " were not found, (but were created)"; + echo " please investigate."; + fi; +if [ $missing_rqd -ne 0 ]; then + echo " "; + echo "Error: $missing_rqd required database(s) sources"; + echo " were not found, correct this before starting sendmail!"; + if [ $max_rc -lt 2 ]; then + max_rc=2; + fi; + fi; +if [ $missing_opt -ne 0 ] || [ $missing_rqd -ne 0 ]; then + echo " "; + echo "$0 assumes that databases, and their source datasets"; + echo "have the same base name (not counting the .db). If this is not"; + echo "true, $0 can not rebuild your databases to make sure"; + echo "they will work with the newer sendmail. You will have to do this"; + echo "yourself - before starting sendmail."; + echo " "; + fi; +if [ $m4_errors -ne 0 ]; then + echo " "; + echo "Warning: These messages were issued while creating sendmail.cf"; + echo " make sure they are benign before starting sendmail!"; + echo " "; + if [ -f @sysconfdir@/mail/sendmail.cf.errors ]; then + echo "Errors in generating sendmail.cf"; + cat @sysconfdir@/mail/sendmail.cf.errors; + fi; + if [ -f @sysconfdir@/mail/submit.cf.errors ]; then + echo "Errors in generating submit.cf"; + cat @sysconfdir@/mail/submit.cf.errors; + fi; + echo " " + if [ $max_rc -lt 2 ]; then + max_rc=2; + fi; + fi; +exit $max_rc; + diff --git a/debian/local/update_ldap.in b/debian/local/update_ldap.in new file mode 100644 index 0000000..bd20293 --- /dev/null +++ b/debian/local/update_ldap.in @@ -0,0 +1,139 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# $Sendmail: update_ldap,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Sendmail support for LDAP +# +# Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes: supports local umich-ldap and openldap v1/v2 servers +# +#----------------------------------------------------------------------------- +set -e + +# +# Flag to determine if this is an install or update +NEW=0; + +# +# Flag to determine if any local LDAP server was found +FOUND=0; + +# +# Path to LDAP server schema directory +LDAP_PATH=; +SCHEMA_PATH=; +SCHEMA_NAME=; +LDAP_VERSION=; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +install_schema () { +# +# Install sendmail.schema in the appropriate place +# +if [ ! -z "$SCHEMA_PATH" ]; then + if [ -f "${LDAP_PATH}/slapd.conf" ]; then + FOUND=1; + if [ ! -e "${SCHEMA_PATH}/sendmail.schema" ]; then + NEW=1; + fi; + cp -p @datadir@/sendmail/examples/ldap/$SCHEMA_NAME \ + $SCHEMA_PATH/sendmail.schema; + chmod 0644 $SCHEMA_PATH/sendmail.schema; + chown root:root $SCHEMA_PATH/sendmail.schema; + fi; + fi; + }; + +# +# Check if OpenLDAP (2.0.x) is installed +if [ -d /etc/ldap ]; then + LDAP_VERSION="$LDAP_VERSION OpenLDAP V2"; + LDAP_PATH='/etc/ldap'; + SCHEMA_PATH="${LDAP_PATH}/schema"; + SCHEMA_NAME=sendmail.schema.v2; + install_schema; + fi; + +# +# Check if OpenLDAP (1.x.x) is installed +if [ -d /etc/openldap ]; then + LDAP_VERSION="$LDAP_VERSION OpenLDAP V1"; + LDAP_PATH='/etc/openldap'; + SCHEMA_PATH="${LDAP_PATH}"; + SCHEMA_NAME=sendmail.schema.v1; + install_schema; + fi; + +# +# Check if UMich-LDAP (3.3) is installed +if [ -d /etc/umich-ldap ]; then + LDAP_VERSION="$LDAP_VERSION UMich-LDAP V3"; + LDAP_PATH='/etc/umich-ldap'; + SCHEMA_PATH="${LDAP_PATH}"; + SCHEMA_NAME=sendmail.schema.v1; + install_schema; + fi; + +# +# Tell them about the new wizbang features... +if [ $NEW -eq 0 ]; then + :; +else + echo " "; + echo "Creating/Updating $LDAP_VERSION information..."; + echo " "; + echo "$SCHEMA_PATH/sendmail.schema has been installed"; + fi; + +if [ $FOUND -eq 0 ] && [ $NEW -eq 1 ]; then + cat <<-EOT + + No local LDAP server was located (tried openldap v2/v1, umich-ldap). + + If you wish to use sendmail and LDAP, you'll need to make sure your + server has the requisite schema setup. + + You can find the schema (old and new) in the following places: + * $SCHEMA_PATH/sendmail.schema for the version of LDAP you + currently have installed (if any) + * @datadir@/sendmail/examples/ldap/sendmail.schema.<v> + where <v> is + <v1> for older schema (sendmail.{o,a}t.conf) format + <v2> for newer schema (sendmail.schema) format + + If you later install a local LDAP server, be sure to re-run $0. + EOT +elif [ $FOUND -eq 1 ] && [ $NEW -eq 1 ]; then + cat <<-EOT + + You have a local $LDAP_VERSION server! Depending upon how (and if) + you wish to use LDAP with sendmail, you'll want to check your + slapd.conf file and possibly include these files: + * $SCHEMA_PATH/sendmail.schema <- alias and other map support + * $SCHEMA_PATH/misc.schema <- OpenLDAP V2 ldap-mail-routing + + If you later change your local LDAP server, be sure to re-run $0. + EOT + fi; diff --git a/debian/local/update_mc.in b/debian/local/update_mc.in new file mode 100644 index 0000000..297d784 --- /dev/null +++ b/debian/local/update_mc.in @@ -0,0 +1,285 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# $Sendmail: update_mc,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Update Sendmail databases for Debian +# +# Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * assumes makemap dbtype /etc/mail/database < /etc/mail/database +# +# Notes (to self): +# * changes made herein *must* be reflected in +# parse_mc,update_mk,update_db,debian.m4 +# +#----------------------------------------------------------------------------- +set -e; + +changed=0; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +new_mc () { + chown root:smmsp @sysconfdir@/mail/"$1".mc.new; + chmod 0644 @sysconfdir@/mail/"$1".mc.new; + mv @sysconfdir@/mail/"$1".mc.new @sysconfdir@/mail/"$1".mc; + changed=1; + }; + +#----------------------------------------------------------------------------- +# Move sendmail.{mc,cf} from /etc/ to /etc/mail +if [ ! -f @sysconfdir@/mail/sendmail.mc ]; then + if [ -f @sysconfdir@/sendmail.mc ]; then + echo "Moving /etc/sendmail.* to /etc/mail/"; + mv @sysconfdir@/sendmail.mc @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + if [ -f @sysconfdir@/sendmail.cf ]; then + mv @sysconfdir@/sendmail.cf @sysconfdir@/mail/sendmail.cf; + chown root:smmsp @sysconfdir@/mail/sendmail.cf; + chmod 0644 @sysconfdir@/mail/sendmail.cf; + changed=1; + fi; + fi; + +#----------------------------------------------------------------------------- +# Create {submit,sendmail}.mc if needed +if [ ! -f @sysconfdir@/mail/sendmail.mc ]; then + cp -p @datadir@/sendmail/cf/debian/sendmail.mc \ + @sysconfdir@/mail/sendmail.mc.new; + if [ -f @sysconfdir@/mailname ] && [ ! -z @sysconfdir@/mailname ]; then + masq=$(cat @sysconfdir@/mailname); + echo "dnl # Masquerading options" \ + >> @sysconfdir@/mail/sendmail.mc.new; + echo "FEATURE(\`always_add_domain')dnl" \ + >> @sysconfdir@/mail/sendmail.mc.new; + echo "MASQUERADE_AS(\`${masq}')dnl" \ + >> @sysconfdir@/mail/sendmail.mc.new; + echo "FEATURE(\`allmasquerade')dnl" \ + >> @sysconfdir@/mail/sendmail.mc.new; + echo "FEATURE(\`masquerade_envelope')dnl" \ + >> @sysconfdir@/mail/sendmail.mc.new; + fi; + new_mc sendmail; + fi; +if [ ! -f @sysconfdir@/mail/submit.mc ]; then + if [ -f @datadir@/sendmail/cf/debian/submit.mc ]; then + cp -p @datadir@/sendmail/cf/debian/submit.mc \ + @sysconfdir@/mail/submit.mc.new; + new_mc submit; + fi; + fi; + +#----------------------------------------------------------------------------- +# Make sure dialup support m4 files are extant +if [ ! -f @sysconfdir@/mail/m4/dialup.m4 ]; then + if [ -f @sysconfdir@/mail/dialup.m4 ]; then + mv @sysconfdir@/mail/dialup.m4 @sysconfdir@/mail/m4/dialup.m4; + else + touch @sysconfdir@/mail/m4/dialup.m4; + fi; + chown root:smmsp @sysconfdir@/mail/m4/dialup.m4; + chmod 0640 @sysconfdir@/mail/m4/dialup.m4; + fi; +if [ ! -f @sysconfdir@/mail/m4/provider.m4 ]; then + if [ -f @sysconfdir@/mail/provider.m4 ]; then + mv @sysconfdir@/mail/provider.m4 @sysconfdir@/mail/m4/provider.m4; + else + touch @sysconfdir@/mail/m4/provider.m4; + fi; + chown root:smmsp @sysconfdir@/mail/m4/provider.m4; + chmod 0640 @sysconfdir@/mail/m4/provider.m4; + fi; +if (grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/dialup.m4" \ + @sysconfdir@/mail/sendmail.mc); then + sed -e "s=^\([[:space:]]*\)include(\`\?@sysconfdir@/mail/dialup\.m4.*$=include(\`@sysconfdir@/mail/m4/dialup\.m4')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; +if (grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/provider.m4" \ + @sysconfdir@/mail/sendmail.mc); then + sed -e "s=^\([[:space:]]*\)include(\`\?@sysconfdir@/mail/provider\.m4.*$=include(\`@sysconfdir@/mail/m4/provider\.m4')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Make sure not using text mailertable (it doesn't work) +if (grep -qEe "^[[:space:]]*FEATURE\(\`?mailertable'?, \`text /etc/mail/mailertable'\)" \ + @sysconfdir@/mail/sendmail.mc); then + echo "Correcting FEATURE(mailertable) in /etc/mail/sendmail.mc"; + sed -e "s=^\([[:space:]]*\)\(\`\?\)FEATURE(\`\?mailertable'\?, \`text /etc/mail/mailertable')\(dnl\)\?=\1\2FEATURE(\`mailertable')dnl=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Make sure smrsh points to the correct location +if (grep -qEe "^[[:space:]]*\`?FEATURE\(\`?smrsh'?[[:space:]]*,.*\)" \ + @sysconfdir@/mail/sendmail.mc); then + echo "Correcting FEATURE(smrsh) in /etc/mail/sendmail.mc"; + sed -e "s=\([[:space:]]*\)\(\`\?\)FEATURE(\`\?smrsh'\?[[:space:]]*,.*)\(dnl\)\?=\1\2FEATURE(\`smrsh')dnl=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Convert FEATURE(nouucp) to FEATURE(nouucp,reject) +if (grep -qEe "^[[:space:]]*\`?FEATURE\(\`?nouucp'?\)" \ + @sysconfdir@/mail/sendmail.mc); then + echo "Correcting FEATURE(nouucp) in /etc/mail/sendmail.mc"; + sed -e "s=^\([[:space:]]*\)\(\`\?\)FEATURE(\`\?nouucp'\?)\(dnl\)\?=\1\2FEATURE(\`nouucp', \`reject')dnl=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Convert FEATURE(dont_masquerade_local) to FEATURE(local_no_masquerade) +if [ -e @datadir@/sendmail/cf/feature/local_no_masquerade.m4 ]; then + if (grep -qEe "^[[:space:]]*\`?FEATURE\(\`?dont_masquerade_local'?\)" \ + @sysconfdir@/mail/sendmail.mc); then + echo "Correcting FEATURE(dont_masquerade_local) in /etc/mail/sendmail.mc"; + sed -e "s=^\([[:space:]]*\)\(\`\?\)FEATURE(\`\?dont_masquerade_local'\?)\(dnl\)\?=\1\2FEATURE(\`local_no_masquerade')dnl=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + fi; + +#----------------------------------------------------------------------------- +# Convert FEATURE(access_db,...) to FEATURE(access_db) +if (grep -qEe "^[[:space:]]*\`?FEATURE\(\`?access_db'?[[:space:]]*,.*\)" \ + @sysconfdir@/mail/sendmail.mc); then + sed -e "s=^\([[:space:]]*\)\(\`\?\)FEATURE(\`\?access_db'\?[[:space:]]*,[[:space:]]*\`\?hash[[:space:]]*\(-o\)\?[[:space:]]*/etc/mail/access.db'\?[[:space:]]*)\(dnl\)\?=\1\2FEATURE(\`access_db')dnl=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# change include(/usr/share/sendmail/sendmail.cf/m4/cf.m4) +if (grep -qEe "^[[:space:]]*\`?include\(\`?@datadir@/sendmail/sendmail.cf/m4/cf.m4'?\)" \ + @sysconfdir@/mail/sendmail.mc); then + sed -e "s=sendmail/sendmail.cf=sendmail/cf=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + if [ -f @sysconfdir@/mail/submit.mc ]; then + sed -e "s=sendmail/sendmail.cf=sendmail/cf=g" \ + @sysconfdir@/mail/submit.mc > @sysconfdir@/mail/submit.mc.new; + new_mc submit; + fi; + fi; + +#----------------------------------------------------------------------------- +# Add include(/usr/share/sendmail/cf/m4/cf.m4) +if (grep -qEe "^[[:space:]]*\`?include\(\`?@datadir@/sendmail/cf/m4/cf.m4'?\)" \ + @sysconfdir@/mail/sendmail.mc); then + :; +else + echo "Adding include(.../cf.m4) to /etc/mail/sendmail.mc"; + sed -e "s=^\([[:space:]]*\)\(\`\?\)VERSIONID(=\1\2include(\`@datadir@/sendmail/cf/m4/cf.m4')dnl\\ +\1\2VERSIONID(=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Add define(`_USE_ETC_MAIL_')dnl +if (grep -qEe "^[[:space:]]*\`?define\(\`?_USE_ETC_MAIL_" \ + @sysconfdir@/mail/sendmail.mc); then + :; +else + sed -e "s=^\([[:space:]]*\)\(\`\?\)include(\`\?@datadir@/sendmail/cf/m4/cf.m4'\?)\(dnl\)\?=\1\2define(\`_USE_ETC_MAIL_')dnl\\ +include(\`@datadir@/sendmail/cf/m4/cf.m4')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Check for badness +if (grep -qEe "^[[:space:]]*\`?OSTYPE\(\`?linux'?\)" \ + @sysconfdir@/mail/sendmail.mc); then + sed -e "s=^\([[:space:]]*\)\(\`\?\)OSTYPE(\`\?linux'\?)\(dnl\)\?=\1\2OSTYPE(\`debian')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Add DOMAIN(debian-mta) +if (grep -qEe "^[[:space:]]*\`?DOMAIN\(\`?debian-mta'?\)" \ + @sysconfdir@/mail/sendmail.mc); then + :; +else + echo "Adding DOMAIN(debian-mta) to /etc/mail/sendmail.mc"; + sed -e "s=^\([[:space:]]*\)\(\`\?\)OSTYPE(\`\?debian'\?)\(dnl\)\?=\1\2OSTYPE(\`debian')dnl\\ +\1\2DOMAIN(\`debian-mta')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Add sendmail.conf customization area +if (grep -qEe "^dnl # Items controlled by /etc/mail/sendmail.conf" \ + @sysconfdir@/mail/sendmail.mc); then + :; +else + echo "Adding sendmail.conf customization area to /etc/mail/sendmail.mc"; + sed -e "s=^\([[:space:]]*\)\(\`\?\)DOMAIN(\`\?debian-mta'\?)\(dnl\)\?=\1\2DOMAIN(\`debian-mta')dnl\\ +dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE \\ +dnl undefine(\`confHOST_STATUS_DIRECTORY')dnl #DAEMON_HOSTSTATS \\ +dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + +#----------------------------------------------------------------------------- +# Update items in sendmail.conf customization area +case "$DAEMON_HOSTSTATS" in + [Nn]*) + if (grep -qEe "^dnl undefine\(\`confHOST_STATUS_DIRECTORY'\)dnl" \ + @sysconfdir@/mail/sendmail.mc); then + echo "Turning off Host Status collection"; + sed -e "s=^dnl undefine(\`confHOST_STATUS_DIRECTORY')dnl=undefine(\`confHOST_STATUS_DIRECTORY')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + ;; + [Yy]*) + if (grep -qEe "^undefine\(\`confHOST_STATUS_DIRECTORY'\)dnl" \ + @sysconfdir@/mail/sendmail.mc); then + echo "Turning on Host Status collection"; + sed -e "s=^undefine(\`confHOST_STATUS_DIRECTORY')dnl=dnl undefine(\`confHOST_STATUS_DIRECTORY')dnl=" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + new_mc sendmail; + fi; + esac; + +#----------------------------------------------------------------------------- +# Cleanup submit.mc +if [ -f @sysconfdir@/mail/submit.mc ]; then + sed -e "/^define(\`\?confRUN_AS_USER'\?,.*$/d" \ + -e "/^define(\`\?confTRUSTED_USER'\?,.*$/d" \ + @sysconfdir@/mail/submit.mc > @sysconfdir@/mail/submit.mc.new; + new_mc submit; + fi; + +exit $changed; diff --git a/debian/local/update_mk.in b/debian/local/update_mk.in new file mode 100644 index 0000000..db8cd18 --- /dev/null +++ b/debian/local/update_mk.in @@ -0,0 +1,765 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------ +# +# $Sendmail: update_mk,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Create /etc/mail/Makefile for Debian Sendmail databases +# +# Copyright 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * +# +# Notes (to self): +# * Should actually put data in some files (local-host-names, etc) +# +#------------------------------------------------------------------------ +# +# Initialization of the perl environment +use strict; # be kosher +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 + +# 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; +require Parse_conf; + +# Version of this program +#($main::MYNAME = $main::0) =~ s|.*/||; +#$main::Author = "Richard Nelson"; +#$main::AuthorMail = "cowboy\@debian.org"; +#$main::Version = '$Revision: 2.00 $ '; +$main::program_name = $0; +$main::program_version = '@sm_version@'; +$main::program_date = '@sm_date@ @sm_time@ cowboy'; +$main::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(); + +my $Makefile_def = "@sysconfdir@/mail/Makefile"; +my $Conffile = "@sysconfdir@/mail/sendmail.conf"; +# List of database entries that will be created if not found +my %created_dbs; +my @created_dbs; +# A few files (like exposed-users) can be listed >1 times ! +my %created_files = (); +my $reload_stamp = "@localstatedir@/run/sendmail/stampdir/reload"; + +# +#------------------------------------------------------------------------------ +# Finally, some code (almost) +#------------------------------------------------------------------------------ +# +# Argument handling... +$main::opt_help=''; +$main::opt_output_file=''; +$main::opt_input_file=''; +$main::opt_debug=''; +my @options = qw( + help|h + output-file|output_file|o:s + input-file|input_file|i:s + debug! + ); +my $result = GetOptions(@options); +if ( ! $result ) { + die "Terminating due to parameter error"; + }; +if ( $main::opt_help ) { + warn "$main::program_name $main::program_version $main::program_date\n"; + warn "$0 \n"; + warn " -help\n" if $main::opt_help; + warn " -debug\n" if $main::opt_debug; + 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; + }; + +my $Makefile = $main::opt_output_file || $Makefile_def; +${Parse_mc::database_file} = $main::opt_input_file + if $main::opt_input_file; +# $main::debug is used in Parse_mc ! +$main::debug = $main::opt_debug || $main::debug; + +# Pull in some configuration data +&Parse_conf::read_conf("$Conffile"); +my ($ok, $value) = &Parse_conf::get_value('HANDS_OFF'); +if ($value ne '0') { + exit; + }; + +# Let them know wtf is going on... +print STDOUT "Creating ${Makefile}...\n"; + +# Read the mc/m4 files +&Parse_mc::read_dbs($Parse_mc::database_file, ''); + +# Determine names with which we shall work +my @databases = &get_names(); + +# Write out the textual representation +&write_make; + +# +#------------------------------------------------------------------------------ +# Obtain list of candidate databases from sendmail.mc +#------------------------------------------------------------------------------ +sub get_names { + my @names; + + # Database types we know how to handle + my %make_types = ( + 'btree' => 1 + ,'dbm' => 1 + ,'hash' => 1 + ,'m4' => 1 + ,'newaliases' => 1 + ,'parse_mc' => 1 + ,'update_conf' => 1 + ,'update_mk' => 1 + ,'update_auth' => 1 + ,'update_tls' => 1 + ,'QUEUE_GROUP' => 1 + ,'include' => 1 + ); + + # Add any qualified databases to the list + foreach my $entry (&Parse_mc::names_dbs()) { + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + if ( (exists($make_types{$entry}) or + exists($make_types{$class})) + and @{$files}[0] ne '-' + and ! exists($created_dbs{$entry})) { + push @names, $entry; + push @created_dbs, $entry; + $created_dbs{$entry} = ''; + }; + }; + + return @names; + }; + +# +#------------------------------------------------------------------------------ +# Create Makefile +#------------------------------------------------------------------------------ +sub write_make { + my $ofh = new FileHandle; + + $Makefile = '&STDOUT' if ($Makefile eq '-'); + unless ( open($ofh, ">$Makefile") ) { + warn("Could not open $Makefile($!), using STDOUT.\n"); + open($ofh, ">&STDOUT"); + }; + $Makefile = '-' if ($Makefile eq '&STDOUT'); + + &write_header($ofh); + &write_target_clean($ofh); + &write_target_restart($ofh); + &write_target_sendmail($ofh); + &write_targets($ofh); + &write_files($ofh); + &write_footer($ofh); + + close $ofh; + if ($Makefile eq $Makefile_def) { + my $gid = getgrnam('smmsp'); + chown '0', $gid, $Makefile; + chmod 0754, $Makefile; + }; + }; + +# +#------------------------------------------------------------------------------ +# Write Makefile header +#------------------------------------------------------------------------------ +sub write_header { + my ($ofh) = @_; + + print $ofh <<"EOT"; +#!/usr/bin/make -f +#################################################################### +##### This file is automagically generated -- edit at your own risk +##### +##### Copyright (c) 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +##### +##### file: ${Makefile} Makefile for Sendmail databases +##### generated via: (${interp_pgm} ${interp_vrm}) +##### ${main::program_name} +##### version: ${main::program_version} ${main::program_date} +##### by: ${user}\@${hostname} +##### on: ${current_time} +##### in: ${directory} +##### input files: ${Parse_mc::database_file} +##### +##### Usage: +##### 1) Make all targets upto date - use one of the following: +##### A) \`(cd @sysconfdir@/mail && make)\` +##### B) \`make -f ${Makefile}\` +##### C) \`${Makefile}\` +##### 2) Force update of <target> - Add <target> to one of the +##### prior commands ie, \`${Makefile} access\`. Most +##### any reasonable <target> value is accepted. +##### +#################################################################### +SHELL=/bin/sh + +# +# targets that will be routed to the @sysconfdir@/init.d/sendmail script +# NOTE: newaliases and clean removed due to extant rules +# +INIT = start stop restart restart-if-running \\ + reload-if-running reload force-reload \\ + hoststat purgestat mailstats mailq runq control \\ + status debug + +.SUFFIXES: +.PRECIOUS: $Makefile + +# +# all, the default target, will update everything +# +.PHONY: all +all: sendmail $reload_stamp + +# +# route to the @sysconfdir@/init.d/sendmail script +# +.PHONY: \$(INIT) +\$(INIT): FORCE + @sysconfdir@/init.d/sendmail \$\@ + +EOT + }; + +# +#------------------------------------------------------------------------------ +# Write Makefile 'CLEAN' target +#------------------------------------------------------------------------------ +sub write_target_clean { + my ($ofh) = @_; + my @names; + + %created_files = (); + foreach my $entry (@databases) { + next if ($entry eq 'QUEUE_GROUP' + or $entry eq 'Makefile' + or $entry eq 'auth' + or $entry eq 'tls' + or $entry eq 'include' + ); + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + foreach my $file (@{$files}) { + next if ( $file eq '-' + or exists($created_files{$file}) ); + $created_files{$file} = ''; + my $dbname; + if ($class eq 'parse_mc' + or $class eq 'update_mk' + or $class eq 'm4') { + $dbname = "@sysconfdir@/mail/$entry"; + } + elsif ($class eq 'update_conf') { + $dbname = "@sysconfdir@/cron.d/sendmail"; + } + elsif ($class eq 'btree' + or $class eq 'hash' + or $class eq 'newaliases') { + $dbname = "$file.db"; + } + else { + $dbname = $file; + }; + push @names, $dbname; + }; + }; + + print $ofh <<"EOT"; + +# +# clean target, remove {sendmail,submit}.cf and generated databases +# +EOT + print $ofh + ".PHONY: clean\n", + "clean: FORCE\n", + "\trm -f ",join(";\n\trm -f ", @names),";\n"; + }; + +# +#------------------------------------------------------------------------------ +# Write Makefile 'RESTART' target +#------------------------------------------------------------------------------ +sub write_target_restart { + my ($ofh) = @_; + my $file; + + print $ofh <<"EOT"; + +# +# restart target, check to see if sendmail needs to be restarted +# +.PHONY: noreload norestart +noreload norestart: FORCE + \@touch $reload_stamp; + +.PHONY: should_reload should_restart +should_reload should_restart: FORCE + \@rm -f $reload_stamp; + \@\$(MAKE) -sf $Makefile $reload_stamp; + +EOT + + # Spew secondary target of actual restart + %created_files = (); + my @right; + foreach my $entry (sort &Parse_mc::restart_dbs()) { + if (! exists($created_dbs{$entry})) { + push @created_dbs, $entry; + $created_dbs{$entry} = ''; + }; + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + foreach my $file (@{$files}) { + next if ( $file eq '-' + or exists($created_files{$file}) ); + $created_files{$file} = ''; + my $dbname = $file; + $dbname =~ s/\.mc$/\.cf/; + push @right, "$dbname"; + }; + }; + + print $ofh "$reload_stamp: \\\n\t", + join(" \\\n\t", @right), "\n", + "\t\@if [ ! -f \$\@ ]; then \\\n", + "\t\techo 'A forced reload...'; \\\n", + "\telse \\\n", + "\t\techo 'The following file(s) have changed:'; \\\n", + "\t\techo ' \$?'; \\\n", + "\t\tfi;\n", + "\t\@echo '** ** You should issue ", + "\`@sysconfdir@/init.d/sendmail reload\` ** **';\n"; + }; + +# +#------------------------------------------------------------------------------ +# Write Sendmail dependancies +#------------------------------------------------------------------------------ +sub write_target_sendmail { + my ($ofh) = @_; + + print $ofh <<"EOT"; + +# +# sendmail targets, depend upon *ALL* relevant files/databases +# +.PHONY: sendmail +sendmail: sendmail_files sendmail_dbs + +EOT + my (@smfiles, @smdbs); + + %created_files = (); + foreach my $entry (@created_dbs) { + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + foreach my $file (@{$files}) { + next if $file eq '-'; + next if $file eq 'ldap'; # ALIAS hack + if ($class eq 'parse_mc' or $class eq 'update_mk' + or $class eq 'm4') { + push @smfiles, "$file" + if (!exists($created_files{$file})); + $created_files{$file} = ''; + push @smdbs, "@sysconfdir@/mail/$entry"; + } + elsif ($class eq 'update_conf') { + push @smdbs, "@sysconfdir@/cron.d/sendmail"; + } + elsif ($class eq 'btree' or $class eq 'hash' + or $class eq 'newaliases') { + push @smfiles, "$file" + if (!exists($created_files{$file})); + $created_files{$file} = ''; + push @smdbs, "$file.db"; + } + else { + push @smfiles, "$file" + if (!exists($created_files{$file})); + $created_files{$file} = ''; + }; + }; + }; + + print $ofh ".PHONY: sendmail_files\n", + "sendmail_files: \\\n\t", + join(" \\\n\t", @smfiles), "\n\n"; + print $ofh ".PHONY: sendmail_dbs\n", + "sendmail_dbs: \\\n\t", + join(" \\\n\t", @smdbs), "\n"; + }; + +# +#------------------------------------------------------------------------------ +# Write Makefile individual targets +#------------------------------------------------------------------------------ +sub write_targets { + my ($ofh) = @_; + my $file; + + print $ofh <<"EOT"; + +# +# Individual database targets +# + +# +# Default db type is hash (Must be in /etc/mail, or +# fully qualify the dataset for this target to work) +# +%.db: % FORCE + \@echo 'Updating \$\@...'; + \@if [ -x @sbindir@/makemap ]; then \\ + @sbindir@/makemap hash \$\@.new.db < \$<; \\ + chown root:smmsp \$\@.new.db; \\ + chmod 0640 \$\@.new.db; \\ + mv -f \$\@.new.db \$\@; \\ + fi; +EOT + + # Spew primary target of <target> + foreach my $entry (@databases) { + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + my @names; + my $left = ''; + my $right = ''; + my $sleft = ''; + my $dbname = ''; + print $ofh "\n"; + + # Create short name(s) for database entries + $sleft .= "$entry "; + if ($class eq 'newaliases' + or $class eq 'parse_mc' + or $class eq 'update_mk' + or $class eq 'update_conf' + or $class eq 'update_auth' + or $class eq 'update_tls' + ) { + $sleft = 'makefile make ' if ($class eq 'update_mk'); + $sleft .= 'cron ' if ($class eq 'update_conf'); + $sleft .= "$class "; + }; + + foreach my $file (@{$files}) { + next if $file eq '-'; + next if $file eq 'ldap'; # ALIAS hack + if ($entry eq 'QUEUE_GROUP' or $entry eq 'include') { + $dbname = ''; + $sleft = lc "${entry}s"; + $left = lc "${entry}s"; + } + elsif ($class eq 'parse_mc' or $class eq 'update_mk' + or $class eq 'm4') { + $dbname = "@sysconfdir@/mail/$entry"; + } + elsif ($class eq 'update_conf') { + $dbname = "@sysconfdir@/cron.d/sendmail"; + } + elsif ($class eq 'btree' or $class eq 'hash' + or $class eq 'newaliases') { + $dbname = "$file.db"; + } + else { + $dbname = $file; + $file = "" + if ($class eq 'update_tls' + or $class eq 'update_auth'); + }; + $left .= "$dbname "; + $right .= " $file"; + + # Create short name(s) for database entries + if ($class ne 'parse_mc' + and $class ne 'update_mk' + and $class ne 'update_conf' + and $class ne 'update_auth' + and $class ne 'update_tls' + and $entry ne 'QUEUE_GROUP' + and $entry ne 'include' + ) { + my $dbsname = "$dbname"; + $dbsname =~ s/\/etc\/mail\///; + $sleft .= "$dbsname " if ($entry ne $dbsname); + if ($file ne $dbname) { + $dbsname =~ s/\.db//; + $sleft .= "$dbsname " if ($entry ne $dbsname); + }; + }; + }; + + # Spew out a phony entry suitable for FORCE + print $ofh '.PHONY: ', $sleft, "\n"; + print $ofh $sleft,": FORCE\n" + if ($entry ne 'QUEUE_GROUP' and $entry ne 'include'); + if ($class eq 'update_mk') { + print $ofh "\t\@touch $right;\n", + "\t\@\$(MAKE) -sf $Makefile $left;\n"; + } + elsif ($entry ne 'QUEUE_GROUP' and $entry ne 'include') { + print $ofh "\t\@rm -f $left;\n", + "\t\@\$(MAKE) -sf $Makefile $left;\n"; + }; + + # + # Spew out the whole enchilada for this database + if ($entry eq 'sendmail.cf' or $entry eq 'databases') { + my ($iclass, $iflags, $ifiles, $ioptions) = + &Parse_mc::entry_dbs('include'); + $right .= ' '; + $right .= join(' ', @{$ifiles}); + }; + print $ofh $left, ':', $right, "\n"; + next if ($entry eq 'QUEUE_GROUP' or $entry eq 'include'); + print $ofh "\t\@echo 'Updating $entry ...';\n"; + if ($class eq 'newaliases') { + print $ofh "\t\@if [ -x @sbindir@/sendmail ]; then \\\n"; + print $ofh "\t\t@sbindir@/sendmail -bi || true; \\\n"; + } + elsif ($class eq 'parse_mc' + or $class eq 'update_conf' + or $class eq 'update_mk' + or $class eq 'update_auth' + or $class eq 'update_tls' + ) { + print $ofh "\t\@if [ -x @datadir@/sendmail/${class} ]; then \\\n"; + print $ofh "\t\t@datadir@/sendmail/${class} || true; \\\n" + } + elsif ($class eq 'btree' or $class eq 'hash') { + print $ofh "\t\@if [ -x @sbindir@/makemap ]; then \\\n"; + }; + foreach my $file (@{$files}) { + next if ( $file eq 'ldap' ); # ALIAS hack + my $dbname = $file; + my $newname = $file; + my $uid = 'root'; + $uid = 'smmta' if ($entry eq 'authinfo' + or $entry eq 'access_db' + or $entry eq 'QUEUE_GROUP' + or $class eq 'newaliases'); + my $mode = '0644'; + $mode = '0640' if ($entry eq 'authinfo' + or $entry eq 'access_db'); + $mode = '0640' if ($class eq 'btree' or $class eq 'hash'); + $mode = '0644' if ($class eq 'm4'); + $mode = '0754' if ($class eq 'update_mk'); + $mode = '02750' if ($entry eq 'QUEUE_GROUP'); + if ($class eq 'btree' or $class eq 'hash') { + $dbname .= '.db'; + $newname .= '.new.db'; + if (index($flags, '-o') == -1) { + print $ofh "\t\t@sbindir@/makemap $class $newname \\\n", + "\t\t\t< $file; \\\n", + "\t\tchown $uid:smmsp $newname; \\\n", + "\t\tchmod $mode $newname; \\\n", + "\t\tmv -f $newname $dbname; \\\n"; + } + else { + print $ofh + "\t\tif [ -s $file ]; then \\\n", + "\t\t@sbindir@/makemap $class $newname \\\n", + "\t\t\t< $file; \\\n", + "\t\tchown $uid:smmsp $newname; \\\n", + "\t\tchmod $mode $newname; \\\n", + "\t\tmv -f $newname $dbname; \\\n", + "\t\tfi; \\\n"; + }; + } + elsif ($class eq 'newaliases') { + $newname .= '.db'; + print $ofh "\t\tif [ -f $newname ]; then \\\n", + "\t\t\tchown $uid:smmsp $newname; \\\n", + "\t\t\tchmod $mode $newname; \\\n", + "\t\t\tfi; \\\n"; + } + elsif ($class eq 'parse_mc' or $class eq 'update_mk') { + $newname = "@sysconfdir@/mail/$entry"; + print $ofh "\t\tchown $uid:smmsp $newname; \\\n", + "\t\tchmod $mode $newname; \\\n"; + } + elsif ($class eq 'm4') { + my $oldname = $dbname; + $dbname =~ s/\.mc$/\.cf/; + $newname =~ s/\.mc$/\.cf\.new/; + my $lead = "\t"; + my $leadh = "\t\@"; + my $lead2 = "\t\t"; + my $trail = ""; + if ($entry eq 'submit.cf') { + $lead = "\t\t"; + $leadh = "\t\t"; + $lead2 = "\t\t\t"; + $trail = "\\"; + }; + print $ofh + "\t\@rm -f ${dbname}.errors\n"; + print $ofh + "\t\@if [ -f @datadir@/sendmail/cf/feature/msp.m4 ]; ", + "then \\\n" if ($entry eq 'submit.cf'); + print $ofh + "${leadh}m4 $file > $newname \\\n", + "${lead2}2> ${dbname}.errors || true; $trail\n", + "${leadh}echo \"### ${oldname} ###\" \\\n", + "${lead2}>> $newname; $trail\n", + "${leadh}sed -e 's/^/# /' $file \\\n", + "${lead2}>> $newname; $trail\n", + "${leadh}chown $uid:smmsp $newname; $trail\n", + "${leadh}chmod $mode $newname; $trail\n", + "${leadh}mv -f $newname $dbname; $trail\n", + "${leadh}if [ -s ${dbname}.errors ]; then \\\n", + "${lead2}chown $uid:smmsp ${dbname}.errors; \\\n", + "${lead2}cat ${dbname}.errors; \\\n", + "${lead}else \\\n", + "${lead2}rm -f ${dbname}.errors; \\\n", + "${lead2}fi; $trail\n"; + print $ofh + "${lead}fi;\n" if ($entry eq 'submit.cf'); + }; + }; + if ($class eq 'newaliases' + or $class eq 'parse_mc' + or $class eq 'update_conf' + or $class eq 'update_mk' + or $class eq 'update_auth' + or $class eq 'update_tls' + or $class eq 'btree' or $class eq 'hash' + ) { + print $ofh "\t\tfi;\n"; + }; + }; + }; + +# +#------------------------------------------------------------------------------ +# Write Makefile file targets (create any missing files) +#------------------------------------------------------------------------------ +sub write_files { + my ($ofh) = @_; + + print $ofh <<"EOT"; + +# +# Individual file targets - create any requisite files +# +EOT + + %created_files = (); + foreach my $entry (@created_dbs) { + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + + # These are done above... + next if ($entry eq 'databases' + or $entry eq 'auth' + or $entry eq 'tls' + or $entry eq 'Makefile' + or $entry eq 'include' + ); + + foreach my $file (@{$files}) { + next if ( $file eq '-' + or exists($created_files{$file}) ); + $created_files{$file} = ''; + my $uid = 'root'; + $uid = 'smmta' if ($entry eq 'authinfo' + or $entry eq 'access_db' + or $entry eq 'QUEUE_GROUP' + or $class eq 'newaliases'); + my $mode = '0644'; + $mode = '0640' if ($entry eq 'authinfo' + or $entry eq 'access_db'); + $mode = '0640' if ($class eq 'btree' or $class eq 'hash'); + $mode = '0644' if ($class eq 'm4'); + $mode = '0754' if ($class eq 'update_mk'); + $mode = '02750' if ($entry eq 'QUEUE_GROUP'); + print $ofh "\n$file:\n", + "\t\@echo 'Creating $file';\n"; + if ($entry eq 'QUEUE_GROUP') { + print $ofh "\t\@install -d", + " -o $uid -g smmsp -m $mode $file;\n", + "\t\@chown $uid:smmsp $file;\n", + "\t\@chmod $mode $file;\n"; + } + elsif ($entry eq 'sendmail.cf') { + print $ofh "\t\@@sbindir@/sendmailconfig", + " --no-reload;\n"; + } + elsif ($entry eq 'submit.cf') { + print $ofh "\t\@cp @datadir@/sendmail/", + "cf/debian/submit.mc \\\n", + "\t\t$file;\n", + "\t\@chown $uid:smmsp $file;\n", + "\t\@chmod $mode $file;\n"; + } + elsif ($entry eq 'access_db') { + print $ofh "\t\@cp @datadir@/sendmail/", + "examples/db/access \\\n", + "\t\t$file;\n", + "\t\@chown $uid:smmsp $file;\n", + "\t\@chmod $mode $file;\n"; + } + elsif ($file eq '@sysconfdir@/mail/aliases') { + print $ofh "\t\@ln -s ../aliases @sysconfdir@/mail/aliases\n"; + } + elsif ($class eq 'update_conf' + or $class eq 'update_auth' + or $class eq 'update_tls') { + print $ofh "\t\@@datadir@/sendmail/${class};\n"; + } + # FIXME: come back and create real data + # where needed (local-host-names, etc) + elsif (index($flags, '-o') == -1) { + print $ofh "\t\@touch $file;\n", + "\t\@chown $uid:smmsp $file;\n", + "\t\@chmod $mode $file;\n"; + } + elsif (index($flags, '-o') != -1) { + print $ofh "\t# Optional file...\n"; + }; + }; + }; + }; + +# +#------------------------------------------------------------------------------ +# Write Makefile footer +#------------------------------------------------------------------------------ +sub write_footer { + my ($ofh) = @_; + +print $ofh <<"EOT"; + +# +# FORCE target, allow one to override dependancies +# +.PHONY: FORCE +FORCE: ; + +EOT + }; + diff --git a/debian/local/update_notices b/debian/local/update_notices new file mode 100644 index 0000000..b1db47b --- /dev/null +++ b/debian/local/update_notices @@ -0,0 +1,212 @@ +#!/bin/sh +#----------------------------------------------------------------------------- +# +# Update Notices for Debian Sendmail +# +# Copyright (c) 2001-2002 Richard Nelson. All Rights Reserved. +# Time-stamp: <2001/08/15 15:00:00 cowboy> +# +# Notes (to all): +# * +# +# Notes (to self): +# * +# +#----------------------------------------------------------------------------- +set -e; +notices=0; +version=$1; +export LANG=C; # for the comparison of mail version... +exit 0; +#----------------------------------------------------------------------------- +# Notice Item +#----------------------------------------------------------------------------- +Notice_Item () { + if [ $notices -eq "0" ]; then + if [ -z $version ]; then + echo ' +*** WELCOME ***.................*** WELCOME ***.................*** WELCOME *** +'; + else + echo ' +*** IMPORTANT ***..............*** IMPORTANT ***..............*** IMPORTANT *** +'; + fi; + fi; + notices=`expr $notices + 1`; + echo ''; + echo "${notices}: ....................................................."; + cat -; + }; + +#----------------------------------------------------------------------------- +if [ -z "$version" ]; then + Notice_Item <<-EOT; + Sendmail is a powerful MTA, and you may find the sendmail-doc package + useful in the configuration phase. You should find even the few files + in /usr/share/doc/sendmail useful - they note recent Sendmail and Debian + changes, along with information on the features present in this package. + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "00.00.00-00"); then + : + Notice_Item <<-EOT; + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.12.10-5"); then + Notice_Item <<-EOT; + + 7 -> 8 bit (QP/Base64) decoding is no longer done by default as it + doesn't respect character set differences (ie, utf-8). + + If you wish to keep this functionality, you'll need to update your + sendmail.mc to include the following line: + MODIFY_MAILER_FLAGS(\`local', \`+9') # mime7to8 + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.12.10-5"); then + Notice_Item <<-EOT; + + ---> IMPORTANT NOTICE <--- + If you want to use TLS and/or AUTH, you *MUST* update your + sendmail.mc and optionally submit.mc for these to work ! + + If you do *NOT* update prior to sendmail being restarted, those + features will simply *STOP* working !!! + + To allow SASL (SMTP AUTH), you must add this line to /etc/mail/sendmail.mc: + include(\`/etc/mail/sasl/sasl.m4')dnl + + For TLS (STARTTLS), you need this: + include(\`/etc/mail/tls/starttls.m4')dnl + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.12.6-5"); then + Notice_Item <<-EOT; + + The group smmsp may have been created within the user, not + system range. To correct this issue, the group will be deleted + and recreated. + + For this to work, you will need to let sendmailconfig run, or + manually run /usr/share/sendmail/update_sendmail immediately + after saying 'no' to the sendmailconfig questions. + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.12.2-1"); then + Notice_Item <<-EOT; + smrsh functionality has moved from /usr/lib/sm.bin to /etc/mail/smrsh. + + Sendmail will populate the directory with some of the more common MDAs + (procmail,maildrop,deliver,etc.) that are installed, but doesn't know + about listserver type programs (majordomo, mailman, etc.) So you'll + need to place links to those binaries in /etc/mail/smrsh. + + Also, if you add a new MDA, you'll need to rerun sendmailconfig to + make sure the MDA is available for smrsh processing! + EOT + Notice_Item <<-EOT; + Sendmail has changed to use the standard uid/gid smmsp for the MSP. + If you've not changed queue directories, you'll be all set. + + However, if you've moved queue directories, you'll need to make sure + that all of them are 0750 root:smmsp + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.12.0-1"); then + Notice_Item <<-EOT; + The automatic virtual-host changes have been removed because + they caused problems for some people... + + If you need to do ip based virtual hosting, add HACK(\`virthost_by_ip')dnl + to your sendmail.mc and read /usr/share/doc/sendmail/op/op.{ps,txt}.gz + for the 'b' modifier to DAEMON_OPTIONS. + EOT + Notice_Item <<-EOT; + If you'd like to support MSP->MTA and/or MTA->MTA authentication, you + can get a good start by using HACK(\`debian_auth')dnl. + EOT + Notice_Item <<-EOT; + The commands 'mailq' and 'hoststat' are now useable by normal users. + EOT + Notice_Item <<-EOT; + Sendmail now defaults to being uid=mail (instead of daemon) when + calling the MDA to deliver mail. This means that if you have files + that are written to by the MDA, they need to be writable by uid=mail! + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.11.6+8.12.0.Beta19-1"); then + Notice_Item <<-EOT; + You can now control the collection of host statistics via settings in + /etc/mail/sendmail.conf, please edit the file to your needs. + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.11.5+8.12.0.Beta17-1"); then + Notice_Item <<-EOT; + You can now control the collection of mailer statistics via settings in + /etc/mail/sendmail.conf, please edit the file to your needs. + EOT + fi; + +#----------------------------------------------------------------------------- +if test ! -z "$version" && \ + (dpkg --compare-versions "$version" lt "8.11.3+8.12.0.Beta7-4"); then + Notice_Item <<-EOT; + Sendmail has extended control over queue management, and these changes + can cause a performance drop if you don't change your local + configuration. + + Old: + MaxDaemonChildren controlled number of listener *and* queue runners + + Sendmail would fork as many children as needed to run the queues + + New: + MaxDaemonChildren still works as a total limit + MaxQueueChildren limits *only* the number of total queue runners + MaxRunnersPerQueue limits the number of runners per individual + queue (in 8.11+, you can have multiple queues) -- *AND* you + can override this global limit on per queue basis! + MaxQueueRunSize limits the number of messages processed per queue run + + Sendmail only forks upto MaxRunnersPerQueue for each queue per run + + The gotcha here is that MaxRunnersPerQueue defaults to one ! + + I've changed the default MaxRunnersPerQueue to 5, so deliveries aren't + single threaded, but you may want to have more or less than 5. + EOT + fi; + +#----------------------------------------------------------------------------- +if [ "$notices" -ne "0" ]; then + echo ''; + echo -n 'Press [ENTER] to continue'; + read yn; + fi; +#----------------------------------------------------------------------------- + diff --git a/debian/local/update_sendmail b/debian/local/update_sendmail new file mode 100644 index 0000000..66b7b3a --- /dev/null +++ b/debian/local/update_sendmail @@ -0,0 +1,122 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# Update Sendmail environment for Debian +# +# Copyright (c) 2001-2001 Richard Nelson. All Rights Reserved. +# Time-stamp: <2001/01/17 10:00:00 cowboy> +# +# Notes (to all): +# * +# +# Notes (to self): +# * +# +#----------------------------------------------------------------------------- +set -e; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=/usr/share/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +# Here, we *MUST* update the conf file before reading it... +#if [ ! -f /etc/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; +# fi; +if [ -f /etc/mail/sendmail.conf ]; then + . /etc/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +# control amount of output +verbosity=0; + +# flag used to indicate a dataset has been moved, may need another update +changed=0; + +#------------------------------------------------------------- +# Make sure the configuration is setup +if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf || true; + fi; + +#------------------------------------------------------------- +# Perform some [safe] updates to an existing sendmail.mc to make +# sure it is compatible with the current executables. +if [ -x $sm_path/update_mc ]; then + $sm_path/update_mc || changed=1; + rm -f /etc/mail/databases || true; + $sm_path/parse_mc || true; + fi; + +#------------------------------------------------------------- +# Make sure the system is setup +if [ -x $sm_path/update_sys ]; then + $sm_path/update_sys || changed=1; + fi; + +#------------------------------------------------------------- +# update smrsh/sensible-mda information if possible +if [ -x $sm_path/update_smrsh ]; then + $sm_path/update_smrsh || true; + fi; + +#------------------------------------------------------------- +# update LDAP information if possible +if [ -x $sm_path/update_ldap ]; then + $sm_path/update_ldap || true; + fi; + +#------------------------------------------------------------- +# update SMTP AUTH (SASL) information if possible +if [ -x $sm_path/update_auth ]; then + $sm_path/update_auth || true; + fi; + +#------------------------------------------------------------- +# update TLS(SSL) information if possible +if [ -x $sm_path/update_tls ]; then + $sm_path/update_tls || true; + fi; + +#------------------------------------------------------------- +# Check and update (if needed) /etc/hosts.allow +if [ -x $sm_path/update_tcpd ]; then + $sm_path/update_tcpd || true; + fi; + +#------------------------------------------------------------- +# Correct prior stupidity of the maintainter +# Remove old bogon entries from /etc/mail/access +if [ -s /etc/mail/access ]; then + cp -p /etc/mail/access /etc/mail/access.new; + sed \ + -e '/^#\?Connect:8 REJECT/d' \ + -e '/^#\?Connect:41 REJECT/d' \ + -e '/^#\?Connect:71 REJECT/d' \ + -e '/^#\?Connect:72 REJECT/d' \ + -e '/^#\?Connect:73 REJECT/d' \ + -e '/^#\?Connect:74 REJECT/d' \ + -e '/^#\?Connect:75 REJECT/d' \ + -e '/^#\?Connect:76 REJECT/d' \ + /etc/mail/access > /etc/mail/access.new; + mv /etc/mail/access.new /etc/mail/access; + fi; + +#------------------------------------------------------------- +# Make sure the databases are in the expected locations +if [ -x $sm_path/update_db ]; then + $sm_path/update_db || changed=1; + fi; + +#------------------------------------------------------------- +exit $changed diff --git a/debian/local/update_smrsh.in b/debian/local/update_smrsh.in new file mode 100644 index 0000000..6243ab4 --- /dev/null +++ b/debian/local/update_smrsh.in @@ -0,0 +1,94 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# $Sendmail: update_smrsh,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Update MDA programs used by Sendmail for Debian +# +# Copyright (c) 2002-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * The entries in /etc/mail/smrsh are used by the feature(smrsh) and +# sensible-mda. +# +# Notes (to self): +# * +# +#----------------------------------------------------------------------------- +set -e; + +# flag used to indicate a dataset has been moved, may need another update +changed=0; +new=1; + +def_progs="\ + @libexecdir@/mail.local \ + @libexecdir@/sensible-mda \ + /usr/bin/vacation \ + /usr/bin/procmail \ + /usr/bin/maildrop \ + /usr/bin/deliver \ + "; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +echo " "; +echo "Checking for installed MDAs..."; + +#------------------------------------------------------------------------------ +# /etc/mail/smrsh is where the links to MDAs and authorized forwarding progs +if [ ! -e @sysconfdir@/mail/smrsh ]; then + changed=1; + new=1; + fi; +chown smmta:smmsp @sysconfdir@/mail/smrsh; +chmod 02755 @sysconfdir@/mail/smrsh; + +#------------------------------------------------------------------------------ +# Iterate over the default list of programs and create any missing items +for file in $def_progs; do + ppath=$(dirname "$file"); + pname=$(basename "$file"); + + # the file doesn't exist, see if we can remove its link + if [ ! -e $file ]; then + + # let have there own version eh? + if [ -e @sysconfdir@/mail/smrsh/$pname ]; then + true; + + # no, if its a danglink symlink, drop it + elif [ -L @sysconfdir@/mail/smrsh/$pname ]; then + echo "Removing link for no longer extant program ($pname)"; + rm @sysconfdir@/mail/smrsh/$pname; + fi; + + # the file exists, see if we need to add its link + elif [ ! -e @sysconfdir@/mail/smrsh/$pname ]; then + echo "Adding link for newly extant program ($pname)"; + ln -sf $file @sysconfdir@/mail/smrsh/$pname; + changed=1; + fi; + done; + +#------------------------------------------------------------------------------ +exit $changed; diff --git a/debian/local/update_sys.in b/debian/local/update_sys.in new file mode 100644 index 0000000..fac690b --- /dev/null +++ b/debian/local/update_sys.in @@ -0,0 +1,252 @@ +#!/bin/sh +#----------------------------------------------------------------------------- +# +# $Sendmail: update_sys,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Update system files used by Sendmail for Debian +# +# Copyright (c) 2001-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * Several directories/files have their permissions forced... +# This is done to allow the MSP/MTA split +# * This exec runs 'set +e' to ignore errors!!! this is done to +# support those running NFS (or similiar) systems, where the +# chmod/chown may fail - If this happens, you'll need to update +# those items by hand ! +# +# Notes (to self): +# * +# +#----------------------------------------------------------------------------- +set +e; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +# flag used to indicate a dataset has been moved, may need another update +changed=0; + +#----------------------------------------------------------------------------- +# Warn the user that this may take a bit... +#----------------------------------------------------------------------------- +echo ''; +echo 'Checking filesystem, this may take some time - it will not hang!'; +echo -n ' ... '; + +#------------------------------------------------------------------------------ +# Create any needed directories, and move any prior data to its new home +#------------------------------------------------------------------------------ +# /etc/aliases should exist, though not owned by sendmail, we'll create one +if [ ! -e @sysconfdir@/aliases ]; then + changed=1; + if [ -f @datadir@/doc/sendmail/examples/db/aliases ]; then + echo "Creating @sysconfdir@/aliases (not found)"; + cp @datadir@/sendmail/examples/db/aliases \ + @sysconfdir@/aliases; + else + touch @sysconfdir@/aliases; + fi; + chown root:root @sysconfdir@/aliases; + chmod 0644 @sysconfdir@/aliases; + fi; + +#------------------------------------------------------------------------------ +# /var/mail is the FHS user mail location, /var/spool/mail is older +# Note: we set the sticky bit to prevent a sgid exploit from erasing files +if [ ! -e @localstatedir@/mail ]; then + changed=1; + if [ -L @localstatedir@/spool/mail ]; then + ln -sf spool/mail @localstatedir@/mail; + elif [ -d @localstatedir@/spool/mail ]; then + mv @localstatedir@/spool/mail @localstatedir@/mail; + chown root:root @localstatedir@/mail; + chmod 03777 @localstatedir@/mail; + else + mkdir @localstatedir@/mail; + chown root:root @localstatedir@/mail; + chmod 03777 @localstatedir@/mail; + fi; + fi; +# +# Make sure the sticky bit is set in pre-existing directories +if [ -d @localstatedir@/mail ] && [ ! -k @localstatedir@/mail ]; then + chmod 03777 @localstatedir@/mail; + fi; +if [ -d @localstatedir@/spool/mail ] \ +&& [ ! -k @localstatedir@/spool/mail ]; then + chmod a+t @localstatedir@/spool/mail; + fi; +if [ ! -d @localstatedir@/spool/mail ] \ +&& [ ! -L @localstatedir@/spool/mail ]; then + ln -sf ../mail @localstatedir@/spool/mail; + #mkdir @localstatedir@/spool/mail; + #chown root:root @localstatedir@/spool/mail; + #chmod 03777 @localstatedir@/spool/mail; + fi; + +#------------------------------------------------------------------------------ +# /etc/mail is where the Sendmail config files live +if [ ! -d @sysconfdir@/mail ]; then + changed=1; + mkdir @sysconfdir@/mail; + fi; +chown smmta:smmsp @sysconfdir@/mail; +chmod 02755 @sysconfdir@/mail; +mkdir -p @sysconfdir@/mail/m4; +chown smmta:smmsp @sysconfdir@/mail/m4; +chmod 02755 @sysconfdir@/mail/m4; +# +# With the MSP/MTA split, we don't want any g=w files or directories +# to save us from potential sgid attacks +find @sysconfdir@/mail -perm +g=w \( -type f -o -type d \) -print \ + | xargs -r chmod g-w,o-w; + +#------------------------------------------------------------------------------ +# /var/run/sendmail is where we store pid files, control sockets, stamps, etc +if [ ! -d @localstatedir@/run/sendmail ]; then + changed=1; + mkdir @localstatedir@/run/sendmail; + fi; +chown root:smmta @localstatedir@/run/sendmail; +chmod 02755 @localstatedir@/run/sendmail; +if [ ! -d @localstatedir@/run/sendmail/mta ]; then + mkdir @localstatedir@/run/sendmail/mta; + fi; +chown smmta:smmsp @localstatedir@/run/sendmail/mta; +chmod 02755 @localstatedir@/run/sendmail/mta; +if [ ! -d @localstatedir@/run/sendmail/msp ]; then + mkdir @localstatedir@/run/sendmail/msp; + fi; +chown smmsp:smmsp @localstatedir@/run/sendmail/msp; +chmod 02775 @localstatedir@/run/sendmail/msp; +if [ ! -d @localstatedir@/run/sendmail/stampdir ]; then + mkdir @localstatedir@/run/sendmail/stampdir; + fi; +chown root:smmsp @localstatedir@/run/sendmail/stampdir; +chmod 02775 @localstatedir@/run/sendmail/stampdir; +# +# Remove older files +rm -f /var/run/sendmail.pid; +rm -f /var/run/sendmail/sendmail.pid; +rm -f /var/run/sendmail/smcontrol; + +#------------------------------------------------------------------------------ +# /var/lib/sendmail is where we stuff host status and sendmail.st +# instead of the mail queue and /etc/ (respectively) +if [ ! -d @localstatedir@/lib/sendmail ]; then + changed=1; + mkdir @localstatedir@/lib/sendmail; + fi; +chown smmta:smmsp @localstatedir@/lib/sendmail; +chmod 02751 @localstatedir@/lib/sendmail; +touch @localstatedir@/lib/sendmail/dead.letter; +chown smmta:smmsp @localstatedir@/lib/sendmail/dead.letter; +chmod 0660 @localstatedir@/lib/sendmail/dead.letter; +if [ -d /var/state/sendmail/host_status ]; then + changed=1; + echo "Moving /var/state/sendmail/host_status to /var/lib/sendmail/"; + mv -f /var/state/sendmail/host_status \ + @localstatedir@/lib/sendmail/host_status; + fi; +if [ -d /var/sendmail/host_status ]; then + changed=1; + echo "Moving /var/sendmail/host_status to /var/lib/sendmail/"; + mv -f /var/sendmail/host_status \ + @localstatedir@/lib/sendmail/host_status; + fi; +if [ ! -d @localstatedir@/lib/sendmail/host_status ]; then + mkdir @localstatedir@/lib/sendmail/host_status; + fi; +chown root:smmsp @localstatedir@/lib/sendmail/host_status; +chmod 02775 @localstatedir@/lib/sendmail/host_status; +find @localstatedir@/lib/sendmail/host_status -type d -print \ + | xargs -r chown root:smmsp; +find @localstatedir@/lib/sendmail/host_status -type d -print \ + | xargs -r chmod 02755; +# +# if sendmail.st doesn't exist, don't create it ! +if [ -f /var/log/sendmail.st ]; then + changed=1; + echo "Moving /var/log/sendmail.st to /var/lib/sendmail/"; + mv /var/log/sendmail.st \ + @localstatedir@/lib/sendmail/sendmail.st; + fi; +if [ -f /var/sendmail/sendmail.st ]; then + changed=1; + echo "Moving /var/sendmail/sendmail.st to /var/lib/sendmail/"; + mv /var/sendmail/sendmail.st \ + @localstatedir@/lib/sendmail/sendmail.st; + fi; +if [ -f @localstatedir@/lib/sendmail/sendmail.st ]; then + chown root:smmsp @localstatedir@/lib/sendmail/sendmail.st; + chmod 0640 @localstatedir@/lib/sendmail/sendmail.st; + if [ ! -f @localstatedir@/lib/sendmail/sm-client.st ]; then + touch @localstatedir@/lib/sendmail/sm-client.st; + fi; + fi; +if [ -f @localstatedir@/lib/sendmail/sm-client.st ]; then + chown smmsp:smmsp @localstatedir@/lib/sendmail/sm-client.st; + chmod 0660 @localstatedir@/lib/sendmail/sm-client.st; + fi; +if [ ! -f @localstatedir@/lib/sendmail/dead.letter ]; then + touch @localstatedir@/lib/sendmail/dead.letter; + fi; +chown root:smmsp @localstatedir@/lib/sendmail/dead.letter; +chmod 0660 @localstatedir@/lib/sendmail/dead.letter; +# +# Remove older files +rm -rf /var/sendmail; +rm -rf /var/state/sendmail; + +#------------------------------------------------------------------------------ +# /var/spool/mqueue is the MTA mail queue directory +if [ ! -d @localstatedir@/spool/mqueue ]; then + changed=1; + mkdir @localstatedir@/spool/mqueue; + fi; +chown smmta:smmsp @localstatedir@/spool/mqueue; +chmod 02750 @localstatedir@/spool/mqueue; +# +# With the MSP/MTA split, we *DO* need g=r, gid=smmsp queue directories and +# files mailq to work... +find @localstatedir@/spool/mqueue -print \ + | xargs -r chown smmta:smmsp; +find @localstatedir@/spool/mqueue -type d -print \ + | xargs -r chmod g+rxs-w,o-rwx; +find @localstatedir@/spool/mqueue -type f -print \ + | xargs -r chmod g+r-wx,o-rwx; + +#------------------------------------------------------------------------------ +# /var/spool/mqueue-client is the MSP mail queue directory +if [ ! -d @localstatedir@/spool/mqueue-client ]; then + mkdir @localstatedir@/spool/mqueue-client; + fi; +chown smmsp:smmsp @localstatedir@/spool/mqueue-client; +chmod 02770 @localstatedir@/spool/mqueue-client; +find @localstatedir@/spool/mqueue-client -perm +o=r -print \ + | xargs -r chmod o-rwx; + +#----------------------------------------------------------------------------- +echo ' Done.'; + +#------------------------------------------------------------------------------ +exit $changed; diff --git a/debian/local/update_tcpd b/debian/local/update_tcpd new file mode 100644 index 0000000..ca19b79 --- /dev/null +++ b/debian/local/update_tcpd @@ -0,0 +1,74 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# Update TCPD environment (TCP Wrappers) for sendmail +# +# Copyright (c) 2001-2001 Richard Nelson. All Rights Reserved. +# Time-stamp: <2001/01/17 10:00:00 cowboy> +# +# Notes (to all): +# +# Notes (to self): +# +#----------------------------------------------------------------------------- +set -e + +#------------------------------------------------------------------------------ +# Check to see if sendmail is mentioned in /etc/hosts.allow +# Note: This check is far from perfect - it requires sendmail and : be +# on the same line. If you've got a better approach, I'd love to +# see it (Maybe awk/perl)! + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=/usr/share/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f /etc/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f /etc/mail/sendmail.conf ]; then + . /etc/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +if grep -qEe "^[^#:]*sendmail[^:]*[:]" /etc/hosts.allow 2>/dev/null; then + need_tcpd=0 +else + need_tcpd=1 + fi + +if [ ! -e /etc/hosts.allow ]; then + need_tcpd=0 + fi + +if [ $need_tcpd -eq 1 ]; then + cat <<-EOT + + Updating /etc/hosts.allow, adding "sendmail: all". + + Please edit /etc/hosts.allow and check the rules location to + make sure your security measures have not been overridden - + it is common to move the sendmail:all line to the *end* of + the file, so your more selective rules take precedence. +EOT + + echo "sendmail: all" | cat - /etc/hosts.allow >/etc/hosts.allow.new + mv -f /etc/hosts.allow.new /etc/hosts.allow + + if [ -e /etc/init.d/netbase ]; then + /etc/init.d/netbase reload >/dev/null + elif [ -e /etc/init.d/inetd ]; then + /etc/init.d/inetd reload >/dev/null + fi + fi + +exit 0 diff --git a/debian/local/update_tls.in b/debian/local/update_tls.in new file mode 100644 index 0000000..3d37708 --- /dev/null +++ b/debian/local/update_tls.in @@ -0,0 +1,319 @@ +#!/bin/sh -e +#----------------------------------------------------------------------------- +# +# $Sendmail: update_tls,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Sendmail support for TLS +# +# Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes: +# +#----------------------------------------------------------------------------- +set -e; + +#------------------------------------------------------------------------------ +# Local variables +#--------------------------------------------------------------------------- +HOSTNAME=`hostname -s`; +DOMAINNAME=`hostname -d`; +MAILNAME=`cat /etc/mailname 2> /dev/null || hostname -f`; +SSL_FQDN=`hostname -f`; +SSL_EMAIL="admin@${MAILNAME}"; +export SSL_FQDN SSL_EMAIL; +PROGRAM='sendmail'; +CERT_DIR="@sysconfdir@/ssl/certs"; +COM_PRM="@sysconfdir@/mail/tls/$PROGRAM-common.prm"; +COM_KEY="@sysconfdir@/mail/tls/$PROGRAM-common.key"; +MTA_CFG="@sysconfdir@/mail/tls/$PROGRAM-server.cfg"; +MTA_CSR="@sysconfdir@/mail/tls/$PROGRAM-server.csr"; +MTA_CRT="@sysconfdir@/mail/tls/$PROGRAM-server.crt"; +MSP_CFG="@sysconfdir@/mail/tls/$PROGRAM-client.cfg"; +MSP_CSR="@sysconfdir@/mail/tls/$PROGRAM-client.csr"; +MSP_CRT="@sysconfdir@/mail/tls/$PROGRAM-client.crt"; +NEW=0; +REFD=0; + +# Path to other sendmail helpers +if [ -x ./update_sendmail ]; then + sm_path='.'; +elif [ -x $(dirname $0)/update_sendmail ]; then + sm_path=$(dirname $0); +else + sm_path=@datadir@/sendmail; + fi; +# Bring in sendmail.conf for the network definitions +if [ ! -f @sysconfdir@/mail/sendmail.conf ]; then + if [ -x $sm_path/update_conf ]; then + $sm_path/update_conf; + fi; + fi; +if [ -f @sysconfdir@/mail/sendmail.conf ]; then + . @sysconfdir@/mail/sendmail.conf; + fi; +if [ "$HANDS_OFF" != 'No' ]; then + exit 0; + fi; + +#--------------------------------------------------------------------------- +# create_config: Function to create openssl configuration file +#--------------------------------------------------------------------------- +create_config () { +cat >$MTA_CFG <<EOT +[ ca ] +default_days = 3650 +x509_extensions = X509v3 +[ req ] +default_bits = 2048 +distinguished_name = req_DN +[ req_DN ] +countryName = "1. Country Name (2 letter code)" +countryName_min = 2 +countryName_max = 2 +countryName_default = +stateOrProvinceName = "2. State or Province Name (full name) " +stateOrProvinceName_default = +localityName = "3. Locality Name (eg, city) " +localityName_default = +0.organizationName = "4. Organization Name (eg, company) " +0.organizationName_default = Sendmail +organizationalUnitName = "5. Organizational Unit Name (eg, section) " +organizationalUnitName_default = Sendmail Server +commonName = "6. Common Name (MUST==FQDN) " +commonName_max = 64 +commonName_default = \$ENV::SSL_FQDN +emailAddress = "7. Email Address (eg, name@FQDN)" +emailAddress_max = 40 +emailAddress_default = \$ENV::SSL_EMAIL +[ x509v3 ] +subjectAltName = email:copy +issuerAltName = issuer:copy +basicConstraints = CA:false +nsComment = "Sendmail generated custom certificate" +nsCertType = server +nsSslServerName = \$ENV::SSL_FQDN +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +EOT +}; + + +#--------------------------------------------------------------------------- +# Check if OpenSSL is installed +if [ ! -d "$CERT_DIR" ]; then + cat <<-EOT + + OpenSSL is not installed, will not configure sendmail support for it. + + to install openssl, get openssl. + + To enable sendmail TLS support at a later date, invoke "$0" + + EOT + exit 0; + fi; + +echo ' '; +echo 'Creating/Updating SSL(for TLS) information'; + + +#--------------------------------------------------------------------------- +# Process arguments +#--------------------------------------------------------------------------- +case "$1" in + [Nn][Ee][Ww]* | \ + [Rr][Ee][Nn][Ee][Ww]* | \ + [Rr][Ee][Ss][Ii][Nn][Gg]*) + echo 'Removing any pre-existing sendmail certificates.'; + if [ -x @bindir@/openssl ]; then + if [ -f $MTA_CRT ]; then + LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MTA_CRT)".0"; + rm -f $LINK 2>/dev/null; + fi; + if [ -f $MSP_CRT ]; then + LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MSP_CRT)".0"; + rm -f $LINK 2>/dev/null; + fi; + fi; + rm -f $MTA_CSR $MTA_CRT 2>/dev/null; + rm -f $MSP_CSR $MSP_CRT 2>/dev/null; + rm -f $COM_PRM $COM_KEY 2>/dev/null; + ;; + esac + +#--------------------------------------------------------------------------- +# Make sure sendmail.mc points to proper /etc/mail/tls/starttls.m4 +if [ -f @sysconfdir@/mail/sendmail.mc ]; then + if (grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/starttls.m4" \ + @sysconfdir@/mail/sendmail.mc); then + sed -e "s=^\([[:space:]]*\)\(\`\?\)include(\`\?@sysconfdir@/mail/starttls.m4'\?)\(dnl\)\?=\1\2include(\`@sysconfdir@/mail/tls/starttls.m4')dnl=g" \ + @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new; + chown root:smmsp @sysconfdir@/mail/sendmail.mc.new; + chmod 0644 @sysconfdir@/mail/sendmail.mc.new; + mv @sysconfdir@/mail/sendmail.mc.new @sysconfdir@/mail/sendmail.mc; + fi; + fi; +if [ -f @sysconfdir@/mail/submit.mc ]; then + if (grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/starttls.m4" \ + @sysconfdir@/mail/submit.mc); then + sed -e "s=^\([[:space:]]*\)\(\`\?\)include(\`\?@sysconfdir@/mail/starttls.m4'\?)\(dnl\)\?=\1\2include(\`@sysconfdir@/mail/tls/starttls.m4')dnl=g" \ + @sysconfdir@/mail/submit.mc > @sysconfdir@/mail/submit.mc.new; + chown root:smmsp @sysconfdir@/mail/submit.mc.new; + chmod 0644 @sysconfdir@/mail/submit.mc.new; + mv @sysconfdir@/mail/submit.mc.new @sysconfdir@/mail/submit.mc; + fi; + fi; + +#--------------------------------------------------------------------------- +# check for references to starttls.m4 in sendmail.mc +if [ -f @sysconfdir@/mail/sendmail.mc ]; then + if grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/tls/starttls.m4" \ + @sysconfdir@/mail/sendmail.mc; then + REFD=1; + fi; + fi; + +#--------------------------------------------------------------------------- +# Make sure prototype /etc/mail/tls/starttls.m4 exists +mkdir -p @sysconfdir@/mail/tls 2>/dev/null; +chown smmta:smmsp @sysconfdir@/mail/tls; +chmod 0755 @sysconfdir@/mail/tls; +$sm_path/update_tlsm4 || true; + +#--------------------------------------------------------------------------- +# check for SSL +if [ -d "$CERT_DIR" ]; then + if [ -f $MTA_CRT ] && [ -f $MSP_CRT ]; then + echo 'You already have sendmail certificates'; + echo ' '; + chown root:smmsp $COM_KEY; + chown root:smmsp $MTA_CRT; + chown root:smmsp $MSP_CRT; + else + if [ -x @bindir@/openssl ]; then + yn="Y"; + else + cat <<-EOT + $PROGRAM needs openssl (not installed) to create a + certificate to validate users + + If you don't need a certificate, say No + If you want a certificate, install openssl and say Yes + + Do you wish to create a certificate? + EOT + read yn; + yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//"); + test -n "$yn" || yn="N"; + fi; + + # Create new (self-signed) certificate + case "$yn" in + [Yy]*) + echo "Creating SSL certificates for sendmail."; + # Create prompt file + if [ ! -f @sysconfdir@/mail/tls/no_prompt ]; then + cat >@sysconfdir@/mail/tls/no_prompt <<-EOT + + + + + + + + EOT + fi; + + # Create config files + if [ ! -f $MTA_CFG ]; then + create_config; + chmod 0600 $MTA_CFG; + fi; + if [ ! -f $MSP_CFG ]; then + sed -e "s/Sendmail Server/Sendmail Client/" \ + $MTA_CFG > $MSP_CFG; + chmod 0600 $MSP_CFG; + fi; + # Create shared DSA/DH password parameters + # Skip this for now... + if [ ! -f $COM_PRM ]; then + #openssl dsaparam 2048 -out $COM_PRM; + #openssl dhparam -dsaparam -in $COM_PRM >> $COM_PRM; + touch $COM_PRM; + chmod 0600 $COM_PRM; + fi; + # Create shared DSA/RSA key (RSA preferred for browser support) + if [ ! -f $COM_KEY ]; then + openssl genrsa -out $COM_KEY 2048; + #openssl gendsa -out $COM_KEY $COM_PRM; + chown root:smmsp $COM_KEY; + chmod 0640 $COM_KEY; + fi; + # sendmail requires that CN=fqdn + # Prompts: 1) Country Name (2 letter code) + # 2) State or Province Name + # 3) Locality Name (eg, city) + # 4) Organization Name (eg, company) + # 5) Organizational Unit Name (eg, section) + # 6) Common Name (eg, YOUR name) + # 7) Email Address + if [ ! -f $MTA_CRT ]; then + openssl req -new -config $MTA_CFG -key $COM_KEY \ + -out $MTA_CSR \ + <@sysconfdir@/mail/tls/no_prompt >/dev/null 2>&1; + chmod 0600 $MTA_CSR; + openssl x509 -req -extfile $MTA_CFG \ + -signkey $COM_KEY -in $MTA_CSR \ + -out $MTA_CRT -days 3650 \ + >/dev/null 2>&1; + chown root:smmsp $MTA_CRT; + chmod 0644 $MTA_CRT; + fi; + if [ ! -f $MSP_CRT ]; then + openssl req -new -config $MSP_CFG -key $COM_KEY \ + -out $MSP_CSR \ + <@sysconfdir@/mail/tls/no_prompt >/dev/null 2>&1; + chmod 0600 $MSP_CSR; + openssl x509 -req -extfile $MSP_CFG \ + -signkey $COM_KEY -in $MSP_CSR \ + -out $MSP_CRT -days 3650 \ + >/dev/null 2>&1; + chown root:smmsp $MSP_CRT; + chmod 0644 $MSP_CRT; + fi; + esac; + fi; + + # Create hash link for new certificate (must do msp last!) + if [ -f $MTA_CRT ]; then + LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MTA_CRT)".0"; + if [ ! -f $LINK ]; then + ln -sf $MTA_CRT $LINK; + fi; + fi; + if [ -f $MSP_CRT ]; then + LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MSP_CRT)".0"; + if [ ! -f $LINK ]; then + ln -sf $MSP_CRT $LINK; + fi; + fi; + fi; + +if [ $REFD -eq 0 ]; then + cat <<-EOT + + *** *** *** WARNING *** WARNING *** WARNING *** WARNING *** *** *** + + Everything you need to support STARTTLS (encrypted mail transmission + and user authentication via certificates) is installed and configured + but *IS* not being used. + + To enable sendmail to use STARTTLS, you need to: + 1) Add this line to @sysconfdir@/mail/sendmail.mc and optionally + to @sysconfdir@/mail/submit.mc: + include(\`@sysconfdir@/mail/tls/starttls.m4')dnl + 2) Run sendmailconfig + 3) Restart sendmail + + EOT + fi; diff --git a/debian/local/update_tlsm4.in b/debian/local/update_tlsm4.in new file mode 100644 index 0000000..a2951c4 --- /dev/null +++ b/debian/local/update_tlsm4.in @@ -0,0 +1,248 @@ +#!/usr/bin/perl -w +#------------------------------------------------------------------------ +# +# $Sendmail: update_tls,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ +# +# Create @sysconfdir@/mail/tls/starttls.m4 for Debian Sendmail +# +# Copyright 1998-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +# +# Notes (to all): +# * +# +# Notes (to self): +# * +# +#------------------------------------------------------------------------ +# +# Initialization of the perl environment +use strict; # be kosher +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 + +# 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: 2.00 $ '; +$main::program_name = $0; +$main::program_version = '@sm_version@'; +$main::program_date = '@sm_date@ @sm_time@ cowboy'; +$main::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(); + +my $Starttls_def = "@sysconfdir@/mail/tls/starttls.m4"; + +# Hash of define names to filename +my %Def_Map; + +# +#------------------------------------------------------------------------------ +# Finally, some code (almost) +#------------------------------------------------------------------------------ +# +# Argument handling... +$main::opt_help=''; +$main::opt_output_file=''; +$main::opt_input_file=''; +$main::opt_debug=''; +my @options = qw( + help|h + output-file|output_file|o:s + input-file|input_file|i:s + debug! + ); +my $result = GetOptions(@options); +if ( ! $result ) { + die "Terminating due to parameter error"; + }; +if ( $main::opt_help ) { + warn "$main::program_name $main::program_version $main::program_date\n"; + warn "$0 \n"; + warn " -help\n" if $main::opt_help; + warn " -debug\n" if $main::opt_debug; + 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; + }; + +my $Starttls = $main::opt_output_file || $Starttls_def; +${Parse_mc::database_file} = $main::opt_input_file + if $main::opt_input_file; +# $main::debug is used in Parse_mc ! +$main::debug = $main::opt_debug || $main::debug; + +# Let them know wtf is going on... +print STDOUT "Creating ${Starttls}...\n"; + +# Read the mc/m4 files +&Parse_mc::read_dbs($Parse_mc::database_file, ''); + +# Obtain Starttls information from database +&get_data; + +# Write out the textual representation +&write_starttls; + + +# +#------------------------------------------------------------------------------ +# Obtain information from database +#------------------------------------------------------------------------------ +sub get_data { + my @names = ( + 'confTO_STARTTLS' + ,'confCACERT' + ,'confCACERT_PATH' + ,'confCRL' + ,'confCLIENT_CERT' + ,'confCLIENT_KEY' + ,'confSERVER_CERT' + ,'confSERVER_KEY' + ,'confTLS_SRV_OPTIONS' + ); + + foreach my $entry (@names) { + my ($class, $flags, $files, $options) = + &Parse_mc::entry_dbs($entry); + my $file = @{$files}[0]; + $Def_Map{$entry} = ''; + $Def_Map{$entry} = $file if ($file ne '-'); + #$Def_Map{$entry} = &Parse_mc::format_dbs($entry); + }; + }; + + +# +#------------------------------------------------------------------------------ +# Create @sysconfdir@/mail/tls/starttls.m4 +#------------------------------------------------------------------------------ +sub write_starttls { + my $ofh = new FileHandle; + + $Starttls = '&STDOUT' if ($Starttls eq '-'); + unless ( open($ofh, ">$Starttls") ) { + warn("Could not open $Starttls($!), using STDOUT.\n"); + open($ofh, ">&STDOUT"); + }; + $Starttls = '-' if ($Starttls eq '&STDOUT'); + + &write_m4($ofh); + + close $ofh; + if ($Starttls eq $Starttls_def) { + chown '0', '0', $Starttls; + chmod 0744, $Starttls; + }; + }; + + +# +#------------------------------------------------------------------------------ +# Write Starttls m4 file +#------------------------------------------------------------------------------ +sub write_m4 { + my ($ofh) = @_; + + print $ofh <<"EOT"; +divert(-1)dnl +#################################################################### +##### This file is automagically generated -- edit at your own risk +##### +##### Copyright (c) 2002-@SM_CPYRT@ Richard Nelson. All Rights Reserved. +##### +##### file: ${Starttls} +##### STARTTLS Configuration for Debian Sendmail +##### generated via: (${interp_pgm} ${interp_vrm}) +##### ${main::program_name} +##### version: ${main::program_version} ${main::program_date} +##### by: ${user}\@${hostname} +##### on: ${current_time} +##### in: ${directory} +##### input files: ${Parse_mc::database_file} +##### +##### Usage: +##### 1) To get *ANY* STARTTLS support for sendmail you +##### A) *MUST* Add this line to @sysconfdir@/mail/sendmail.mc +##### \`include(\`@sysconfdir@/mail/tls/starttls.m4\')dnl\' +##### B) *MAY* Add the same line to @sysconfdir@/mail/submit.mc +##### to get MSP<->MTA authentication/encryption +##### 2) You may modify the marked portions of this file, those +##### deal with the cert/key filenames and TLS options. +##### If you need finer control of TLS options, use the access +##### database. +##### +#################################################################### +divert(0)dnl +VERSIONID(\`\$Id: starttls.m4,v @sm_version@@sm_revision@ @sm_date@ @sm_time@ cowboy Exp \$\') +dnl # +dnl #--------------------------------------------------------------------- +dnl # Bring in Autoconf results +dnl #--------------------------------------------------------------------- +ifdef(\`sm_version\', \`dnl\', +\`include(\`@datadir@/sendmail/cf/debian/autoconf.m4\')dnl\') +dnl # +dnl # Check to see if inclusion is valid (version >= 8.11.0, tls enabled) +ifelse(eval(sm_version_math >= 527104), \`1\', \`dnl +ifelse(sm_enable_tls, \`yes\', \`dnl +dnl # +dnl # To support shared keyfiles, we need them to be group readable +dnl # +define(\`confDONT_BLAME_SENDMAIL\',dnl + defn(\`confDONT_BLAME_SENDMAIL\')\`,GroupReadableKeyFile\')dnl +dnl # +dnl # ...Do not touch anything above this line... +dnl # +dnl # Set a more reasonable timeout on negotiation +dnl # +define(\`confTO_STARTTLS\', \`$Def_Map{'confTO_STARTTLS'}\')dnl # <= EDIT +dnl # +dnl # CA directory - CA certs should be herein +define(\`confCACERT_PATH\', \`$Def_Map{'confCACERT_PATH'}\')dnl # <= EDIT +dnl # +dnl # CA file (may be the same as client/server certificate) +define(\`confCACERT\', \`$Def_Map{'confCACERT'}\')dnl # <= EDIT +dnl # +dnl # Certificate Revocation List +define(\`confCRL\', \`$Def_Map{'confCRL'}\')dnl # <= EDIT +EOT +if (! -f $Def_Map{'confCRL'}) { +print $ofh <<"EOT"; +dnl # CRL not found... do not issue warnings on it! +undefine(\`confCRL\')dnl +EOT + }; + print $ofh <<"EOT"; +dnl # +dnl # Server certificate/key (can be in the same file, and shared w/client) +dnl # NOTE: The key must *NOT* be encrypted !!! +define(\`confSERVER_CERT\', \`$Def_Map{'confSERVER_CERT'}\')dnl # <= EDIT +define(\`confSERVER_KEY\', \`$Def_Map{'confSERVER_KEY'}\')dnl # <= EDIT +dnl # +dnl # Client certificate/key (can be in the same file, and shared w/server) +dnl # NOTE: The key must *NOT* be encrypted !!! +define(\`confCLIENT_CERT\', \`$Def_Map{'confCLIENT_CERT'}\')dnl # <= EDIT +define(\`confCLIENT_KEY\', \`$Def_Map{'confCLIENT_KEY'}\')dnl # <= EDIT +dnl # +dnl # Optional settings +define(\`confTLS_SRV_OPTIONS\', \`$Def_Map{'confTLS_SRV_OPTIONS'}\')dnl # <= EDIT +dnl # +\')\')dnl +EOT + }; + diff --git a/debian/ownertrust b/debian/ownertrust new file mode 100644 index 0000000..8b418bb --- /dev/null +++ b/debian/ownertrust @@ -0,0 +1,5 @@ +# List of assigned trustvalues, created Wed Sep 4 15:22:15 2002 EDT +# (Use "gpg --import-ownertrust" to restore them) +9D3583BC28718C0A058A89E77371068600000000:6: +684A1F8DC9BBE0DFF3168C9F015427E3A4B47676:5: +99ECD122A8D84271AB54E94AD949C12800000000:5: diff --git a/debian/patches/8.14/8.14.1/control_c.patch b/debian/patches/8.14/8.14.1/control_c.patch new file mode 100644 index 0000000..578d178 --- /dev/null +++ b/debian/patches/8.14/8.14.1/control_c.patch @@ -0,0 +1,52 @@ +# Make control socket mode 0660 +# +# To apply this patch: +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'applypatch' program with this patch file as input. +# +# If you do not have 'applypatch', it is part of the 'makepatch' package +# that you can fetch from the Comprehensive Perl Archive Network: +# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz +# In the above URL, 'x' should be 2 or higher. +# +# To apply this patch without the use of 'applypatch': +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'patch' program with this file as input. +# +#### End of Preamble #### + +#### Patch data follows #### +diff -c 'sendmail/control.c' 'debian/patches/control.c' +Index: ./sendmail/control.c +Prereq: 8.128 +*** sendmail-8.14.1/sendmail/control.c Sat Nov 20 15:26:23 1999 +--- ./debian/patches/control.c Sat Nov 20 15:39:52 1999 +*************** +*** 92,98 **** + } + } + +! if (chmod(ControlSocketName, S_IRUSR|S_IWUSR) < 0) + { + save_errno = errno; + closecontrolsocket(TRUE); +--- 92,98 ---- + } + } + +! if (chmod(ControlSocketName, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) < 0) + { + save_errno = errno; + closecontrolsocket(TRUE); +#### End of Patch data #### + +#### ApplyPatch data follows #### +# Data version : 1.0 +# Date generated : Sat Nov 20 15:39:53 1999 +# Generated by : makepatch 2.00 +# Recurse directories : Yes +# p 'sendmail/control.c' 6165 +#### End of ApplyPatch data #### + +#### End of Patch kit [created: Sat Nov 20 15:39:53 1999] #### +#### Checksum: 51 1497 50060 #### diff --git a/debian/patches/8.14/8.14.1/cyrusv2.m4.debian.patch b/debian/patches/8.14/8.14.1/cyrusv2.m4.debian.patch new file mode 100644 index 0000000..7ddbbe8 --- /dev/null +++ b/debian/patches/8.14/8.14.1/cyrusv2.m4.debian.patch @@ -0,0 +1,11 @@ +--- sendmail-8.14.1/cf/mailer/cyrusv2.m4 Sat Jun 1 15:14:57 2002 ++++ cyrusv2.m4.new Wed Jun 5 04:21:34 2002 +@@ -12,7 +12,7 @@ + + _DEFIFNOT(`_DEF_CYRUSV2_MAILER_FLAGS', `lsDFMnqXz') + _DEFIFNOT(`CYRUSV2_MAILER_FLAGS', `A@/:|m') +-ifdef(`CYRUSV2_MAILER_ARGS',, `define(`CYRUSV2_MAILER_ARGS', `FILE /var/imap/socket/lmtp')') ++ifdef(`CYRUSV2_MAILER_ARGS',, `define(`CYRUSV2_MAILER_ARGS', `FILE /var/run/cyrus/socket/lmtp')') + define(`_CYRUSV2_QGRP', `ifelse(defn(`CYRUSV2_MAILER_QGRP'),`',`', ` Q=CYRUSV2_MAILER_QGRP,')')dnl + + POPDIVERT diff --git a/debian/patches/8.14/8.14.1/drac.patch b/debian/patches/8.14/8.14.1/drac.patch new file mode 100644 index 0000000..5094538 --- /dev/null +++ b/debian/patches/8.14/8.14.1/drac.patch @@ -0,0 +1,24 @@ +--- sendmail-8.14.1/cf/m4/proto.m4.orig 2003-03-29 02:20:53.000000000 +0900 ++++ sendmail-8.14.1/cf/m4/proto.m4 2003-03-30 13:22:18.731049640 +0900 +@@ -2110,6 +2110,13 @@ + R127.0.0.1 $@ RELAY originated locally + RIPv6:::1 $@ RELAY originated locally + R$=R $* $@ RELAY relayable IP address ++ifdef(`_DRAC_', `dnl ++R$* $: <> $(drac $1 $: <?> $1 $) ++R<> <?> $+ $: $1 ++R<> $+ $@ RELAY authenticated IP address ++RIPv6:$* $: <> $(drac $1 $: <?> IPv6:$1 $) ++R<> <?> $+ $: $1 ++R<> $+ $@ RELAY authenticated IP address',`dnl') + ifdef(`_ACCESS_TABLE_', `dnl + R$* $: $>A <$1> <?> <+ Connect> <$1> + R<RELAY> $* $@ RELAY relayable IP address +--- /dev/null 2002-01-01 00:00:00.000000000 +0900 ++++ sendmail-8.14.1/cf/feature/drac.m4 2002-04-18 21:33:31.716576810 +0900 +@@ -0,0 +1,5 @@ ++define(`_DRAC_', `') ++ ++LOCAL_CONFIG ++Kdrac ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`drac', ++ `_ARG_') diff --git a/debian/patches/8.14/8.14.1/kfreebsd.patch b/debian/patches/8.14/8.14.1/kfreebsd.patch new file mode 100644 index 0000000..bbb1f1b --- /dev/null +++ b/debian/patches/8.14/8.14.1/kfreebsd.patch @@ -0,0 +1,147 @@ +diff -Nurd sendmail-8.14.1.orig/devtools/bin/Build sendmail-8.14.1/devtools/bin/Build +--- sendmail-8.14.1.orig/devtools/bin/Build 2005-09-09 11:36:00.000000000 +0200 ++++ sendmail-8.14.1/devtools/bin/Build 2005-09-09 12:02:15.000000000 +0200 +@@ -422,6 +422,7 @@ + NeXT) mkdir="mkdirs";; + UNICOSMK) rel=`echo $rel | sed -e 's/\(.*\)\.\(.*\)\.\(.*\)\..*$/\1.\2.\3/'`;; + UNICOS*) rel=`echo $rel | sed -e 's/\(.*\)\.\(.*\)\..*$/\1.\2/'`;; ++ GNU-kFreeBSD*) os=Linux;; + esac + + # get "base part" of operating system release +diff -Nurd sendmail-8.14.1.orig/include/sm/conf.h sendmail-8.14.1/include/sm/conf.h +--- sendmail-8.14.1.orig/include/sm/conf.h 2005-09-09 11:36:00.000000000 +0200 ++++ sendmail-8.14.1/include/sm/conf.h 2005-09-09 11:57:33.000000000 +0200 +@@ -783,7 +783,7 @@ + ** See also BSD defines. + */ + +-# if defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__) && !defined(DARWIN) ++# if defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__) && !defined(DARWIN) && !defined(__GLIBC__) + # include <paths.h> + # define HASUNSETENV 1 /* has unsetenv(3) call */ + # define USESETEUID 1 /* has usable seteuid(2) call */ +@@ -801,7 +801,7 @@ + # endif /* ! LA_TYPE */ + # define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */ + # define SPT_TYPE SPT_PSSTRINGS /* use PS_STRINGS pointer */ +-# endif /* defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__) && !defined(DARWIN)*/ ++# endif /* defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__) && !defined(DARWIN) && !defined(__GLIBC__) */ + + + /* +@@ -1491,6 +1491,69 @@ + + + /* ++** GNU/kFreeBSD ++** From Aurelien Jarno <aurel32@debian.org> ++ */ ++ ++# if defined (__GLIBC__) && defined(__FreeBSD_kernel__) ++# define BSD 1 /* include BSD defines */ ++# define HASSETREGID 1 /* use setregid(2) to set saved gid */ ++# ifndef REQUIRES_DIR_FSYNC ++# define REQUIRES_DIR_FSYNC 1 /* requires fsync() on directory */ ++# endif /* REQUIRES_DIR_FSYNC */ ++# ifndef USESETEUID ++# define USESETEUID 0 /* has it due to POSIX, but doesn't work */ ++# endif /* USESETEUID */ ++# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ ++# define HASUNAME 1 /* use System V uname(2) system call */ ++# define HASUNSETENV 1 /* has unsetenv(3) call */ ++# define ERRLIST_PREDEFINED /* don't declare sys_errlist */ ++# define GIDSET_T gid_t /* from <linux/types.h> */ ++# ifndef HASGETUSERSHELL ++# define HASGETUSERSHELL 0 /* getusershell(3) broken in Slackware 2.0 */ ++# endif /* HASGETUSERSHELL */ ++# ifndef IP_SRCROUTE ++# define IP_SRCROUTE 0 /* linux <= 1.2.8 doesn't support IP_OPTIONS */ ++# endif /* ! IP_SRCROUTE */ ++# ifndef HAS_IN_H ++# define HAS_IN_H 1 /* use netinet/in.h */ ++# endif /* ! HAS_IN_H */ ++# ifndef USE_SIGLONGJMP ++# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */ ++# endif /* ! USE_SIGLONGJMP */ ++# ifndef LA_TYPE ++# define LA_TYPE LA_PROCSTR ++# endif /* ! LA_TYPE */ ++# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() impl */ ++# define SPT_PADCHAR '\0' /* pad process title with nulls */ ++# define HASSTRERROR 1 /* has strerror(3) */ ++# ifndef TZ_TYPE ++# define TZ_TYPE TZ_NONE /* no standard for GNU/kFreeBSD */ ++# endif /* ! TZ_TYPE */ ++# include <paths.h> ++# ifndef _PATH_SENDMAILPID ++# define _PATH_SENDMAILPID "/var/run/sendmail.pid" ++# endif /* ! _PATH_SENDMAILPID */ ++# include <sys/sysmacros.h> ++# undef atol /* wounded in <stdlib.h> */ ++# if NETINET6 ++ /* ++ ** Indirectly included from glibc's <feature.h>. IPv6 support is native ++ ** in 2.1 and later, but the APIs appear before the functions. ++ */ ++# undef IPPROTO_ICMPV6 ++# if (!defined(NEEDSGETIPNODE)) ++ /* Have APIs in <netdb.h>, but no support in glibc */ ++# define NEEDSGETIPNODE 1 ++# endif /* (!defined(NEEDSGETIPNODE)) */ ++# endif /* NETINET6 */ ++# ifndef HASFCHOWN ++# define HASFCHOWN 1 /* fchown(2) */ ++# endif /* ! HASFCHOWN */ ++# endif /* defined(__GLIBC__) && defined(__FreeBSD_kernel__*/ ++ ++ ++/* + ** DELL SVR4 Issue 2.2, and others + ** From Kimmo Suominen <kim@grendel.lut.fi> + ** +diff -Nurd sendmail-8.14.1.orig/include/sm/os/sm_os_linux.h sendmail-8.14.1/include/sm/os/sm_os_linux.h +--- sendmail-8.14.1.orig/include/sm/os/sm_os_linux.h 2005-09-09 11:36:00.000000000 +0200 ++++ sendmail-8.14.1/include/sm/os/sm_os_linux.h 2005-09-09 11:45:45.000000000 +0200 +@@ -15,23 +15,27 @@ + + #define SM_OS_NAME "linux" + +-/* to get version number */ +-#include <linux/version.h> ++#if defined(__linux__) + +-# if !defined(KERNEL_VERSION) /* not defined in 2.0.x kernel series */ +-# define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) +-# endif /* ! KERNEL_VERSION */ ++ /* to get version number */ ++# include <linux/version.h> + +-/* doesn't seem to work on Linux */ +-#ifndef SM_CONF_SETITIMER +-# define SM_CONF_SETITIMER 0 +-#endif /* SM_CONF_SETITIMER */ ++# if !defined(KERNEL_VERSION) /* not defined in 2.0.x kernel series */ ++# define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) ++# endif /* ! KERNEL_VERSION */ + +-#ifndef SM_CONF_SHM +-# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,19)) +-# define SM_CONF_SHM 1 +-# endif /* LINUX_VERSION_CODE */ +-#endif /* SM_CONF_SHM */ ++ /* doesn't seem to work on Linux */ ++# ifndef SM_CONF_SETITIMER ++# define SM_CONF_SETITIMER 0 ++# endif /* SM_CONF_SETITIMER */ ++ ++# ifndef SM_CONF_SHM ++# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,19)) ++# define SM_CONF_SHM 1 ++# endif /* LINUX_VERSION_CODE */ ++# endif /* SM_CONF_SHM */ ++ ++#endif /* (__linux__) */ + + #define SM_CONF_SYS_CDEFS_H 1 + #ifndef SM_CONF_SEM diff --git a/debian/patches/8.14/8.14.1/ldap_url_search.patch b/debian/patches/8.14/8.14.1/ldap_url_search.patch new file mode 100644 index 0000000..5175ec9 --- /dev/null +++ b/debian/patches/8.14/8.14.1/ldap_url_search.patch @@ -0,0 +1,24 @@ +Index: ldap.c +=================================================================== +RCS file: /cvs/libsm/ldap.c,v +retrieving revision 1.51 +retrieving revision 1.53 +diff -u -r1.51 -r1.53 +--- ./sendmail-8.14.1/libsm/ldap.c 30 Oct 2003 23:11:12 -0000 1.51 ++++ ldap.c 30 Oct 2003 23:33:10 -0000 1.53 +@@ -1043,6 +1043,7 @@ + NULL : lmap->ldap_attr), + lmap->ldap_attrsonly); + } ++#if SM_CONF_LDAP_URL_SEARCH + else if (rl->lr_type == SM_LDAP_ATTR_URL) + { + /* do new URL search */ +@@ -1051,6 +1052,7 @@ + lmap->ldap_attrsonly); + newflags |= SM_LDAP_USE_ALLATTR; + } ++#endif /* SM_CONF_LDAP_URL_SEARCH */ + else + { + /* unknown or illegal attribute type */ diff --git a/debian/patches/8.14/8.14.1/local_procmail.patch b/debian/patches/8.14/8.14.1/local_procmail.patch new file mode 100644 index 0000000..fabaa06 --- /dev/null +++ b/debian/patches/8.14/8.14.1/local_procmail.patch @@ -0,0 +1,50 @@ +# Remove -Y from procmail arguements +# +# To apply this patch: +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'applypatch' program with this patch file as input. +# +# If you do not have 'applypatch', it is part of the 'makepatch' package +# that you can fetch from the Comprehensive Perl Archive Network: +# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz +# In the above URL, 'x' should be 2 or higher. +# +# To apply this patch without the use of 'applypatch': +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'patch' program with this file as input. +# +#### End of Preamble #### + +#### Patch data follows #### +diff -c 'cf/feature/local_procmail.m4' 'debian/patches/local_procmail.m4' +Index: ./cf/feature/local_procmail.m4 +Prereq: 8.22 +*** sendmail-8.14.1/cf/feature/local_procmail.m4 Sat Nov 20 15:26:21 1999 +--- ./debian/patches/local_procmail.m4 Sat Nov 20 15:39:46 1999 +*************** +*** 27,32 **** + `/usr/local/bin/procmail'), + _ARG_)) + define(`LOCAL_MAILER_ARGS', +! ifelse(len(X`'_ARG2_), `1', `procmail -Y -a $h -d $u', _ARG2_)) + define(`LOCAL_MAILER_FLAGS', + ifelse(len(X`'_ARG3_), `1', `SPfhn9', _ARG3_)) +--- 27,32 ---- + `/usr/local/bin/procmail'), + _ARG_)) + define(`LOCAL_MAILER_ARGS', +! ifelse(len(X`'_ARG2_), `1', `procmail -a $h -d $u', _ARG2_)) + define(`LOCAL_MAILER_FLAGS', + ifelse(len(X`'_ARG3_), `1', `SPfhn9', _ARG3_)) +#### End of Patch data #### + +#### ApplyPatch data follows #### +# Data version : 1.0 +# Date generated : Sat Nov 20 15:39:47 1999 +# Generated by : makepatch 2.00 +# Recurse directories : Yes +# p 'cf/feature/local_procmail.m4' 941 +#### End of ApplyPatch data #### + +#### End of Patch kit [created: Sat Nov 20 15:39:47 1999] #### +#### Checksum: 49 1730 1445 #### diff --git a/debian/patches/8.14/8.14.1/mailer_cyrus.patch b/debian/patches/8.14/8.14.1/mailer_cyrus.patch new file mode 100644 index 0000000..4f52c19 --- /dev/null +++ b/debian/patches/8.14/8.14.1/mailer_cyrus.patch @@ -0,0 +1,19 @@ +--- sendmail-8.14.1/cf/mailer/cyrus.m4 Tue May 2 14:40:24 2000 ++++ ./debian/patches/cf/mailer/cyrus.m4 Tue May 2 14:41:21 2000 +@@ -36,12 +36,12 @@ + # + + _DEFIFNOT(`CYRUS_MAILER_FLAGS', `Ah5@/:|') +-ifdef(`CYRUS_MAILER_PATH',, `define(`CYRUS_MAILER_PATH', /usr/cyrus/bin/deliver)') +-ifdef(`CYRUS_MAILER_ARGS',, `define(`CYRUS_MAILER_ARGS', `deliver -e -m $h -- $u')') ++ifdef(`CYRUS_MAILER_PATH',, `define(`CYRUS_MAILER_PATH', /usr/sbin/cyrdeliver)') ++ifdef(`CYRUS_MAILER_ARGS',, `define(`CYRUS_MAILER_ARGS', `cyrdeliver -e -m $h -- $u')') + ifdef(`CYRUS_MAILER_USER',, `define(`CYRUS_MAILER_USER', `cyrus:mail')') + _DEFIFNOT(`CYRUS_BB_MAILER_FLAGS', `u') +-ifdef(`CYRUS_BB_MAILER_ARGS',, `define(`CYRUS_BB_MAILER_ARGS', `deliver -e -m $u')') ++ifdef(`CYRUS_BB_MAILER_ARGS',, `define(`CYRUS_BB_MAILER_ARGS', `cyrdeliver -e -m $u')') + define(`_CYRUS_QGRP', `ifelse(defn(`CYRUS_MAILER_QGRP'),`',`', ` Q=CYRUS_MAILER_QGRP,')')dnl + + POPDIVERT + + diff --git a/debian/patches/8.14/8.14.1/mailer_fax.patch b/debian/patches/8.14/8.14.1/mailer_fax.patch new file mode 100644 index 0000000..c779634 --- /dev/null +++ b/debian/patches/8.14/8.14.1/mailer_fax.patch @@ -0,0 +1,54 @@ +# /usr/bin/faxmail, !/usr/local/bin/faxmail +# +# To apply this patch: +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'applypatch' program with this patch file as input. +# +# If you do not have 'applypatch', it is part of the 'makepatch' package +# that you can fetch from the Comprehensive Perl Archive Network: +# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz +# In the above URL, 'x' should be 2 or higher. +# +# To apply this patch without the use of 'applypatch': +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'patch' program with this file as input. +# +#### End of Preamble #### + +#### Patch data follows #### +diff -c './cf/mailer/fax.m4' 'fax.m4' +Index: ./cf/mailer/fax.m4 +Prereq: 8.16 +*** sendmail-8.14.1/cf/mailer/fax.m4 Mon Oct 18 02:35:28 1999 +--- ./fax.m4 Wed Jan 3 14:26:13 2001 +*************** +*** 19,26 **** + ifdef(`FAX_MAILER_ARGS',, + `define(`FAX_MAILER_ARGS', faxmail -d $u@$h $f)') + ifdef(`FAX_MAILER_PATH',, +! `define(`FAX_MAILER_PATH', /usr/local/bin/faxmail)') + ifdef(`FAX_MAILER_MAX',, + `define(`FAX_MAILER_MAX', 100000)') + define(`_FAX_QGRP', `ifelse(defn(`FAX_MAILER_QGRP'),`',`', ` Q=FAX_MAILER_QGRP,')')dnl + POPDIVERT +--- 19,26 ---- + ifdef(`FAX_MAILER_ARGS',, + `define(`FAX_MAILER_ARGS', faxmail -d $u@$h $f)') + ifdef(`FAX_MAILER_PATH',, +! `define(`FAX_MAILER_PATH', /usr/bin/faxmail)') + ifdef(`FAX_MAILER_MAX',, + `define(`FAX_MAILER_MAX', 100000)') + define(`_FAX_QGRP', `ifelse(defn(`FAX_MAILER_QGRP'),`',`', ` Q=FAX_MAILER_QGRP,')')dnl + POPDIVERT +#### End of Patch data #### + +#### ApplyPatch data follows #### +# Data version : 1.0 +# Date generated : Wed Jan 3 14:27:33 2001 +# Generated by : makepatch 2.00 +# Recurse directories : Yes +# p '../../build-tree/sendmail-8.11.2/cf/mailer/fax.m4' 1062 +#### End of ApplyPatch data #### + +#### End of Patch kit [created: Wed Jan 3 14:27:33 2001] #### +#### Checksum: 51 1807 4852 #### diff --git a/debian/patches/8.14/8.14.1/maxseq.patch b/debian/patches/8.14/8.14.1/maxseq.patch new file mode 100644 index 0000000..5447136 --- /dev/null +++ b/debian/patches/8.14/8.14.1/maxseq.patch @@ -0,0 +1,51 @@ +# This is a patch for conf.h to update it to conf.h.new +# +# To apply this patch: +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'applypatch' program with this patch file as input. +# +# If you do not have 'applypatch', it is part of the 'makepatch' package +# that you can fetch from the Comprehensive Perl Archive Network: +# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz +# In the above URL, 'x' should be 2 or higher. +# +# To apply this patch without the use of 'applypatch': +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'patch' program with this file as input. +# +#### End of Preamble #### + +#### Patch data follows #### +diff -c 'conf.h' 'conf.h.new' +Index: ./conf.h +Prereq: 8.574 +*** ./sendmail-8.14.1/sendmail/conf.h Fri Sep 21 19:01:46 2001 +--- ./conf.h.new Wed Oct 10 09:24:41 2001 +*************** +*** 74,79 **** + #define MEMCHUNKSIZE 1024 /* chunk size for memory allocation */ + #define MAXUSERENVIRON 100 /* max envars saved, must be >= 3 */ +! #define MAXMAPSTACK 12 /* max # of stacked or sequenced maps */ + #if MILTER + # define MAXFILTERS 25 /* max # of milter filters */ + # define MAXFILTERMACROS 50 /* max # of macros per milter cmd */ +--- 74,79 ---- + #define MEMCHUNKSIZE 1024 /* chunk size for memory allocation */ + #define MAXUSERENVIRON 100 /* max envars saved, must be >= 3 */ +! #define MAXMAPSTACK 128 /* max # of stacked or sequenced maps */ + #if MILTER + # define MAXFILTERS 25 /* max # of milter filters */ + # define MAXFILTERMACROS 50 /* max # of macros per milter cmd */ +#### End of Patch data #### + +#### ApplyPatch data follows #### +# Data version : 1.0 +# Date generated : Wed Oct 10 09:25:12 2001 +# Generated by : makepatch 2.00_03 +# Recurse directories : Yes +# p 'conf.h' 6809 +#### End of ApplyPatch data #### + +#### End of Patch kit [created: Wed Oct 10 09:25:12 2001] #### +#### Patch checksum: 34 1333 28813 #### +#### Checksum: 52 2010 19538 #### diff --git a/debian/patches/8.14/8.14.1/rmail.odi.patch b/debian/patches/8.14/8.14.1/rmail.odi.patch new file mode 100644 index 0000000..19c3c05 --- /dev/null +++ b/debian/patches/8.14/8.14.1/rmail.odi.patch @@ -0,0 +1,52 @@ +# Change sendmail call -obq to -obi +# +# To apply this patch: +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'applypatch' program with this patch file as input. +# +# If you do not have 'applypatch', it is part of the 'makepatch' package +# that you can fetch from the Comprehensive Perl Archive Network: +# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz +# In the above URL, 'x' should be 2 or higher. +# +# To apply this patch without the use of 'applypatch': +# STEP 1: Chdir to the source directory. +# STEP 2: Run the 'patch' program with this file as input. +# +#### End of Preamble #### + +#### Patch data follows #### +diff -c 'rmail/rmail.c' 'debian/patches/rmail.c' +Index: ./rmail/rmail.c +Prereq: 8.61 +*** sendmail-8.14.1/rmail/rmail.c Sat Sep 16 18:20:25 2000 +--- ./debian/patches/rmail.c Thu Sep 28 17:00:59 2000 +*************** +*** 318,324 **** + args[i++] = _PATH_SENDMAIL; /* Build sendmail's argument list. */ + args[i++] = "-G"; /* relay submission */ + args[i++] = "-oee"; /* No errors, just status. */ +! args[i++] = "-odq"; /* Queue it, don't try to deliver. */ + args[i++] = "-oi"; /* Ignore '.' on a line by itself. */ + + /* set from system and protocol used */ +--- 318,324 ---- + args[i++] = _PATH_SENDMAIL; /* Build sendmail's argument list. */ + args[i++] = "-G"; /* relay submission */ + args[i++] = "-oee"; /* No errors, just status. */ +! args[i++] = "-odi"; /* deliver in the foreground. */ + args[i++] = "-oi"; /* Ignore '.' on a line by itself. */ + + /* set from system and protocol used */ +#### End of Patch data #### + +#### ApplyPatch data follows #### +# Data version : 1.0 +# Date generated : Thu Sep 28 17:01:04 2000 +# Generated by : makepatch 2.00 +# Recurse directories : Yes +# p './build-tree/sendmail-8.11.1/rmail/rmail.c' 12072 +#### End of ApplyPatch data #### + +#### End of Patch kit [created: Thu Sep 28 17:01:04 2000] #### +#### Checksum: 51 2010 21691 #### diff --git a/debian/patches/patches.index b/debian/patches/patches.index new file mode 100644 index 0000000..7b45ffb --- /dev/null +++ b/debian/patches/patches.index @@ -0,0 +1,16 @@ +The following Debian specific patches have been applied: + + *) dpatch.001 cf/feature/local_procmail.m4 + Remove -Y from procmail arguements + + *) dpatch.002 cf/mailer/cyrus.m4 + Support cyrus-deliver MDA (Thanks Manoj Srivastava) + + *) dpatch.003 rmail/rmail.c + Change sendmail call -obq to -obi + + *) dpatch.004 sendmail/control.c + Make control socket mode 0660 + + *) dpatch.005 cf/mailer/fax.m4 + /usr/bin/faxmail, !/usr/local/bin/faxmail diff --git a/debian/rmail.links b/debian/rmail.links new file mode 100644 index 0000000..01ebb97 --- /dev/null +++ b/debian/rmail.links @@ -0,0 +1 @@ +usr/share/bug/sendmail usr/share/bug/rmail diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..c93b505 --- /dev/null +++ b/debian/rules @@ -0,0 +1,595 @@ +#!/usr/bin/make -f +#------------------------------------------------------------------------------ +# vim: syntax=make +# +# $Sendmail: rules,v 8.14.1 2007-05-27 18:30:00 cowboy Exp $ +#------------------------------------------------------------------------------ + +# CDBS crud +#include /usr/share/cdbs/1/class/makefile.mk +include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/cdbs/1/rules/debhelper.mk +#include /usr/share/cdbs/1/rules/simple-patchsys.mk +# Overridden below, but needed now +#DEB_TAR_SRCDIR := . +#include /usr/share/cdbs/1/rules/tarball.mk + +# Determine architecture +DEB_HOST_GNU_CPU ?= $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) + +# Make it even harder to exploit sendmail. +# Well, almost impossible now 8-) +# * Compile all with -fPIC (works for pic or pie objects) +# * Link with either -pie or -shared +ifeq ($(DEB_HOST_GNU_CPU),arm) + MY_CFLAGS := -fPIC +else + MY_CFLAGS := -fPIC -fstack-protector-all + endif +CFLAGS += ${MY_CFLAGS} +export CFLAGS +MY_LDFLAGS := -Wl,-z,noexecstack,-z,relro,-z,now -Wl,--warn-shared-textrel +LDFLAGS += -pie ${MY_LDFLAGS} +export LDFLAGS + +# Obtain package/version information from the path (debian/changelog is walkabout) +ifneq (y, $(shell test -f debian/changelog && echo 'y')) + DIRNAME = $(shell basename $(CURDIR)) + DEB_SOURCE_PACKAGE = $(shell expr "$(DIRNAME)" : '\(.*\)-') + DEB_VERSION = $(shell expr "$(DIRNAME)" : '.*-\(.*\)') + DEB_NOEPOCH_VERSION = $(shell echo $(DEB_VERSION) | cut -d: -f2-) + DEB_UPSTREAM_VERSION = $(shell echo $(DEB_NOEPOCH_VERSION) | sed 's/-[^-]*$$//') + endif + +# strip of a optionally added data (ie: upstream+cvs-debian) +DEB_UPSTREAM_TARBALL_VERSION := $(shell echo $(DEB_UPSTREAM_VERSION) | sed 's/+[^-]*//') +DEB_TAR_SRCDIR := $(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_TARBALL_VERSION) +DEB_SRCDIR := build-tree/$(DEB_TAR_SRCDIR) +DEB_BUILDDIR := $(DEB_SRCDIR) +DEB_DESTDIR = debian/$(DEB_SOURCE_PACKAGE) +DEB_PATCHDIRS = $(CURDIR)/debian/patches/${version_major}/${version_full} +DEB_DBG_PACKAGES = libmilter$(sm_libmilter_version)-dbg +DEB_DBG_PACKAGE_libmilter$(sm_libmilter_version) = libmilter$(sm_libmilter_version)-dbg +DEB_DH_INSTALL_CRON_ARGS = --name=$(DEB_SOURCE_PACKAGE) +DEB_DH_INSTALLINIT_ARGS = --name=$(DEB_SOURCE_PACKAGE) +DEB_UPDATE_RCD_PARAMS = --update-rcd-params="defaults 21 19" +# autoconf/make are mine, not upstream (yet) :( +DEB_CONFIGURE_LIBEXECDIR ="\$${prefix}/lib/sm.bin" +DEB_AC_AUX_DIR = $(CURDIR)/debian/build +DEB_CONFIGURE_SCRIPT = $(CURDIR)/debian/configure +DEB_CONFIGURE_INVOKE = cd $(CURDIR)/debian \ + && $(DEB_CONFIGURE_SCRIPT_ENV) $(DEB_CONFIGURE_SCRIPT) $(DEB_CONFIGURE_NORMAL_ARGS) +DEB_MAKE_INVOKE = +DEB_MAKE_BUILD_TARGET = +DEB_MAKE_INSTALL_TARGET = +DEB_INSTALL_CHANGELOGS_ALL = $(DEB_SRCDIR)/RELEASE_NOTES + +version_string := ${DEB_VERSION} +version_full := $(shell expr "${version_string}" : '\([^-]*\)') +version_debian := $(shell expr "${version_string}" : '.*\(-.*\)$$') +version := ${version_full} +version_major := $(shell expr "${version_full}" : '\([0-9]*\.[0-9]*\)') +version_minor := $(shell expr "${version_full}" : '[0-9]*\.[0-9]*\.\(.*\)') +ifneq (, $(findstring +,${version_minor})) + beta_version := $(shell expr "${version_full}" : '.*[+~]\([0-9.].*\)') + beta_major := $(shell expr "${beta_version}" : '\([0-9]*\.[0-9]*\)') + beta_minor := $(shell expr "${beta_version}" : '[0-9]*\.[0-9]*\.\(.*\)') + ifneq (, $(beta_version)) + version := ${beta_version} + version_major := ${beta_major} + version_minor := ${beta_minor} + endif + endif + +# Some variables that should be removed in favour of DEB_* above +SRC_DIR := $(CURDIR)/debian +PKG_DIR := debian/${DEB_SOURCE_PACKAGE}-bin +PKG_DOC = debian/${DEB_SOURCE_PACKAGE}-doc${docdir}/${DEB_SOURCE_PACKAGE}-doc +SM_SUBDIRS := editmap libmilter mail.local mailstats \ + makemap praliases rmail sendmail smrsh vacation + +# We want delayed interpretation of the options ! +ifeq (y, $(shell test -x /usr/bin/debuild && echo 'y')) + DEB_BUILD = \ + DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS}" \ + debuild --linda +else + DEB_BUILD = \ + DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS}" \ + dpkg-buildpackage + endif + +# Now that all that is out of the way, read the desired configuration +# settings +CONF_NAME = debian/configure.options +$(eval CONFIG_OPTS := $(shell grep -v "^\#" ${CONF_NAME})) +DEB_CONFIGURE_EXTRA_FLAGS = $(CONFIG_OPTS) + +# Include Debian Autoconf settings +ifeq (y, $(shell test -e debian/build/autoconf.mk && echo 'y')) + include debian/build/autoconf.mk +else + ifeq (y, $(shell test -e build/autoconf.mk && echo 'y')) + include build/autoconf.mk + else + include debian/build/autoconf.mk.in + endif + endif + +include /usr/share/cdbs/1/rules/tarball.mk +include /usr/share/cdbs/1/rules/simple-patchsys.mk + +# Default rule +all:: + @echo 'Please specify a real target in the future...'; + $(MAKE) -f debian/rules \ + DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS}" \ + binary; + + +#------------- +# Normalize CDBS rules +.PHONY: unpack +unpack:: pre-build +.PHONY: patch +patch:: apply-patches +.PHONY: configure +configure:: common-configure-arch common-configure-indep + + +#------------- +# Maintainer only rule... copy external debian directory here +.PHONY: refresh-debian +refresh-debian:: + @dh_testdir; + @echo 'updating debian directory ...'; + sudo $(RM) -r debian; + sudo cp -a ../debian ./; + sudo $(RM) -rf ${_cdbs_tarball_dir}; + # Remove local testing configuration + # Make sure directories are writeable by the owner (mine aren't) + chmod -R ug+w debian; + -(cd debian && aclocal); + -(cd debian && autoconf); + -(cd debian && automake); + # Force a configure here, using $(CURDIR) so the changelog, etc. + # wind up with the right version numbers + $(MAKE) -f debian/rules \ + DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS}" \ + configure; + # Need to save these + /bin/mv -f debian/build/autoconf.mk \ + debian/build/autoconf.mk.save; + /bin/mv -f debian/changelog \ + debian/changelog.save; + -(cd debian && $(MAKE) distclean;) + # Need to save these + /bin/mv -f debian/build/autoconf.mk.save \ + debian/build/autoconf.mk; + /bin/mv -f debian/changelog.save \ + debian/changelog; + $(RM) -r debian/autom4te.cache; + # Remove pieces not needed for further building + find debian/patches -type d -a ! -name 'patches' \ + -a ! -name "${version_major}" \ + -a ! -name "${DEB_UPSTREAM_TARBALL_VERSION}" \ + | xargs -r $(RM) -r; + $(RM) -r debian/bugs debian/private; + /usr/bin/find debian -type f -name '*.am' | xargs -r $(RM); + $(RM) \ + debian/aclocal.m4 \ + debian/build/*.m4; + $(MAKE) -f debian/rules clean-debian; + + +#------------- +# Maintainer only rule... cleanup & setup for general package +.PHONY: clean-debian +clean-debian:: + @echo 'cleaning debian directory...'; + #-(cd debian && $(MAKE) -f Makefile maintainer-clean;) + #-(cd debian && $(MAKE) -f Makefile distclean;) + find debian -name '*~' -o -name '\.*\.swp' \ + | xargs -r $(RM); + $(RM) debian/*.sav debian/build/*.sav; + $(RM) debian/stamp-*; + +#------------- +# Maintainer only rule... must be run in external debian directory +.PHONY: refresh-faq +refresh-faq:: + @echo 'Refreshing FAQ' + @chmod u+w faq.txt; + (wget --passive-ftp --timestamping \ + --cache=off http://www.sendmail.org/faq/faq.txt;); + @chmod a-w faq.txt; + @echo 'Refreshing Misc' + @chmod u+w cf/feature/rhsbl.m4; + (cd cf/feature && wget --passive-ftp --timestamping \ + --cache=off http://www.megacity.org/software_downloads/rhsbl.m4;); + @chmod u-w cf/feature/rhsbl.m4; + + +#------------- +.PHONY: world +world:: + # Debian build daemons don't (for the nonce) support build-indep, + # so this rule allows *me* to build both arch and indep portions + # of sendmail in one go (so I don't forget). + @dh_testdir; + time ${DEB_BUILD}; + +#------------------------------------------------------------------------------ +# Build/Package check rules +#------------------------------------------------------------------------------ +#------------- +.PHONY: info +info: + #-------------------------------------------------------------------- + # The following information will be used for this run: + # Source = ${DEB_SOURCE_PACKAGE} + # Package = ${DEB_SOURCE_PACKAGE} ${DEB_VERSION} + # ${version_string}${sm_custom_s}${version_debian} + # Upstream V = ${DEB_UPSTREAM_TARBALL_VERSION} + # BuildTree = ${DEB_SRCDIR} + # Arch = ${DEB_BUILD_ARCH} on ${DEB_HOST_ARCH} + # Options + # configure = ${CONFIG_OPTS} + # config opt = ${SM_CONF_OPT} + # ENABLE_INDEP= ${ENABLE_INDEP} + # ENABLE_ARCH = ${ENABLE_ARCH} + # ENABLE_DEV = ${ENABLE_DEV} + # ENABLE_DOC = ${ENABLE_DOC} + # compile opt = ${CC} ${CFLAGS} ${DEFINES} + # DEB_BUILD_OPTIONS = ${DEB_BUILD_OPTIONS} + # DH_VERBOSE = ${DH_VERBOSE} + # DH_OPTIONS = ${DH_OPTIONS} + # DH_COMPAT = ${DH_COMPAT} + #-------------------------------------------------------------------- + +#------------- +.PHONY: pristine +pristine:: + #-------------------------------------------------------------------- + # pristine: + # + # Fail if there are any modifications to the original + # tarball, other than the debian directory + @dh_testdir; + if [ -f ../${DEB_SOURCE_PACKAGE}_${DEB_VERSION}.diff.gz ]; then \ + zgrep -e "^\+\+\+ " ../${DEB_SOURCE_PACKAGE}_${DEB_VERSION}.diff.gz \ + | sed -e "/^\+\+\+ $(CURRDIR)\/debian\/.*$$/d" - \ + | [ ! -z - ]; \ + fi; + # + # Check for presence of TLS (crypto) enablement and bitch if found + @if (grep -qEe '^#TLS:[[:space:]]*yes' \ + debian/build/site.config.m4); then \ + echo '** ** --------------------------------------------------- ** **';\ + echo '** ** This package contains crypto support ! Be careful ! ** **';\ + echo '** ** --------------------------------------------------- ** **';\ + fi; + #-------------------------------------------------------------------- + + +#------------- +.PHONY: verify-tarball +verify-tarball:: + #-------------------------------------------------------------------- + # verify_tarball: + # + # Verifying the md5 summs and signed files + @dh_testdir; + @for file in $$(find . -maxdepth 1 -name '*.md5'); do \ + echo "Checking MD5 source: $$file."; \ + cat $$file; \ + md5sum -c $$file; \ + done; + @for file in $$(find . -maxdepth 1 -name '*.sig'); do \ + echo "Checking signature file $$file."; \ + part=$$(echo "$$file" | sed -e 's/\.sig$$//'); \ + if [ -f $$part ]; then \ + gpg --verify $$part.sig $$part || true; \ + elif [ -f $$part.gz ]; then \ + gunzip -c $$part.gz > $$part; \ + gpg --verify $$part.sig $$part || true; \ + rm $$part; \ + fi; \ + done; + #-------------------------------------------------------------------- + + +#------------------------------------------------------------------------------ +# User callable rules +#------------------------------------------------------------------------------ +#------------- +.PHONY: clean +clean:: + #-------------------------------------------------------------------- + # clean: + # + # Need to save this + /bin/mv debian/build/autoconf.mk \ + debian/build/autoconf.mk.save; + # Local stuff + -if [ -f debian/Makefile ]; then \ + (cd debian && $(MAKE) -f Makefile clean;) \ + fi; + # Debian stuff + $(RM) -r ${_cdbs_tarball_dir}; + $(RM) \ + debian/config.log \ + debian/config.status \ + debian/*.debhelper \ + debian/build/debian/changelog.in \ + debian/build/debian/control \ + ; + for file in tmp ${DEB_PACKAGES};do \ + $(RM) -r debian/$$file; \ + done; + # Need to save this + /bin/mv debian/build/autoconf.mk.save \ + debian/build/autoconf.mk; + #-------------------------------------------------------------------- + + +#------------- +common-build-indep:: + #-------------------------------------------------------------------- + # build-indep: + # + # sendmail operations guide + (cd ${DEB_SRCDIR}/doc/op/ && GROFF_NO_SGR=1 make op.txt); + # Debian stuff + (cd debian && $(MAKE) -f Makefile build-indep;) + #-------------------------------------------------------------------- + + +#------------- +common-install-indep:: + #-------------------------------------------------------------------- + # install-indep + # + # sendmail operations guide and other documentation + $(INSTALL_DATA) ${DEB_SRCDIR}/doc/op/op.ps ${PKG_DOC}/op; + $(INSTALL_DATA) ${DEB_SRCDIR}/doc/op/op.txt ${PKG_DOC}/op; + $(INSTALL_DATA) ${DEB_SRCDIR}/README ${PKG_DOC}/; + $(INSTALL_DATA) ${DEB_SRCDIR}/KNOWNBUGS ${PKG_DOC}/; + $(INSTALL_DATA) ${DEB_SRCDIR}/cf/README ${PKG_DOC}/cf.README; + $(INSTALL_DATA) debian/README.Debian.sendmail \ + ${PKG_DOC}/sendmail/README.Debian; + $(INSTALL_DATA) ${DEB_SRCDIR}/sendmail/README \ + ${PKG_DOC}/sendmail/; + $(INSTALL_DATA) ${DEB_SRCDIR}/sendmail/SECURITY \ + ${PKG_DOC}/sendmail/SECURITY; \ + $(INSTALL_DATA) ${DEB_SRCDIR}/sendmail/TRACEFLAGS \ + ${PKG_DOC}/sendmail/TRACEFLAGS; + $(INSTALL_DATA) ${DEB_SRCDIR}/sendmail/TUNING \ + ${PKG_DOC}/sendmail/TUNING; \ + sed -e "s?/usr/libexec?${libexecdir}?g" \ + -e "s?/usr/ucb/vacation?${libexecdir}/vacation.sendmail?g" \ + -e "s?/usr/adm/sm.bin?/etc/mail/smrsh?g" \ + ${DEB_SRCDIR}/smrsh/README \ + > ${PKG_DOC}/smrsh.README; + $(INSTALL_DATA) debian/faq.txt ${PKG_DOC}/; + # libmilter-dev package + if [ -d ${DEB_SRCDIR}/libmilter ]; then \ + $(INSTALL_DATA) debian/README.Debian.libmilter-dev \ + ${PKG_DOC}/libmilter/README.Debian; \ + $(INSTALL_DATA) ${DEB_SRCDIR}/libmilter/README \ + ${PKG_DOC}/libmilter/README; \ + cp -a ${DEB_SRCDIR}/libmilter/docs/* \ + ${PKG_DOC}/libmilter/html; \ + fi; + # Debian stuff + (cd debian/cf && \ + $(MAKE) -f Makefile install-indep \ + DESTDIR="${SRC_DIR}/sendmail-cf";); + (cd debian/examples && \ + $(MAKE) -f Makefile install-indep \ + DESTDIR="${SRC_DIR}/sendmail-base";); + (cd debian/local && \ + $(MAKE) -f Makefile install-indep \ + DESTDIR="${SRC_DIR}/sendmail-base";); + # Install Lintian overrides + $(INSTALL_DATA) -g root -m 644 \ + debian/build/debian/sendmail-base.lintian-overrides \ + debian/sendmail-base/usr/share/lintian/overrides/sendmail-base; + #-------------------------------------------------------------------- + + +#------------- +common-build-arch:: + #-------------------------------------------------------------------- + # build-arch + # + # Place our m4 configuration files for the sendmail build to use + cp -f debian/build/site.config.m4 \ + ${DEB_SRCDIR}/devtools/Site/; \ + # Finally, build the whole enchilada (we'll let sendmail figure + # which, if any of the dependant libraries each component needs) + for subdir in ${SM_SUBDIRS}; do \ + if [ -d ${DEB_SRCDIR}/$${subdir} ]; then \ + (cd ${DEB_SRCDIR}/$${subdir} && ./Build -S;); \ + fi; \ + done; + if [ -d ${DEB_SRCDIR}/libmilter ]; then \ + (cd ${DEB_SRCDIR}/obj*/libmilter && \ + gcc -shared -pthread \ + -o libmilter.so.${sm_libmilter_version} \ + -fPIC ${MY_CFLAGS} \ + -Wl,-soname,libmilter.so.${sm_libmilter_version} \ + ${MY_LDFLAGS} \ + *.o;); \ + fi; \ + # Debian stuff + (cd debian && $(MAKE) -f Makefile build-arch;) + # Remove our config m4 files + $(RM) ${DEB_SRCDIR}/devtools/Site/site.config.m4; + #-------------------------------------------------------------------- + + +#------------- +common-install-arch:: + #-------------------------------------------------------------------- + # install-arch + # + # sendmail install proper... with a little help ;-} + #$(MAKE) install DESTDIR="$(CURDIR)/${PKG_DIR}"; + # Finally, install the whole enchilada + for subdir in ${SM_SUBDIRS}; do \ + if [ -d ${DEB_SRCDIR}/$${subdir} ]; then \ + if [ "$${subdir}" = 'libmilter' ]; then \ + (cd ${DEB_SRCDIR}/obj*/$${subdir} && \ + $(INSTALL) libmilter.so.${sm_libmilter_version} \ + ../../../../debian/libmilter${sm_libmilter_version}${libdir}; \ + ); \ + elif [ "$${subdir}" = 'mail.local' ] \ + || [ "$${subdir}" = 'rmail' ]; then \ + (cd ${DEB_SRCDIR}/obj*/$${subdir} && \ + $(MAKE) force-install \ + DESTDIR="../../../../${PKG_DIR}";); \ + else \ + (cd ${DEB_SRCDIR}/obj*/$${subdir} && \ + $(MAKE) install \ + DESTDIR="../../../../${PKG_DIR}";); \ + fi; \ + fi; \ + done; + # FHS says that rmail belongs in \${sbindir} - and we now put + # it there, but in the rmail package ! + mv ${PKG_DIR}${libexecdir}/rmail debian/rmail${sbindir}/; + mv ${PKG_DIR}${mandir}/man8/rmail.8 debian/rmail${mandir}/man8/; + # Sendmail alias handling... + # NOTE: whilst smptd is a valid alias for sendmail, we don't create + # one so that we can co-exists with smtpd (a firewall frontend) + # NOTE: newscache package also contains ${sbindir}/hoststat + # NOTE: newalias, purgestat, etc. aren't for the general user.. + # yeah, yeah, I know... these can be done with -b<flag>! + (cd ${PKG_DIR}${bindir} && \ + $(RM) hoststat mailq newaliases purgestat smtpd;) + (cd ${PKG_DIR}${sbindir} && for file in \ + newaliases hoststat purgestat \ + ; do \ + ln -sf sendmail-mta $$file; \ + done;); + # Handle man pages for these aliases + mv ${PKG_DIR}${mandir}/man5/aliases.5 \ + ${PKG_DIR}${mandir}/man5/aliases.sendmail.5; + mv ${PKG_DIR}${mandir}/man1/mailq.1 \ + ${PKG_DIR}${mandir}/man1/mailq.sendmail.1; + mv ${PKG_DIR}${mandir}/man1/newaliases.1 \ + ${PKG_DIR}${mandir}/man8/newaliases.sendmail.8; + (cd ${PKG_DIR}${mandir}/man8 && \ + for file in hoststat.8.gz purgestat.8.gz \ + ; do \ + ln -sf sendmail-mta.8.gz $$file; \ + done;); + # Place those removed aliases in ${libexecdir} (mostly for me) + (cd ${PKG_DIR}${libexecdir} && for file in \ + hoststat mailq newaliases purgestat smtpd; do \ + ln -sf sendmail $$file; \ + done;); + # NOTE: with the MSP/MTA split, we'll provide our own mailstats (keep orig) + ln -s ../share/sendmail/mailstats ${PKG_DIR}${sbindir}/mailstats; + ln -s ../share/sendmail/mailq ${PKG_DIR}${bindir}/mailq; + ln -s ../lib/sm.bin/editmap ${PKG_DIR}${sbindir}/editmap; + ln -s ../lib/sm.bin/makemap ${PKG_DIR}${sbindir}/makemap; + ln -s ../lib/sm.bin/praliases ${PKG_DIR}${sbindir}/praliases; + # Special handling of vacation - Debian has a seperate package + # with a different version (sigh) keep our copy just in case... + mv ${PKG_DIR}${libexecdir}/vacation \ + ${PKG_DIR}${libexecdir}/vacation.sendmail; \ + mv ${PKG_DIR}${mandir}/man1/vacation.1 \ + ${PKG_DIR}${mandir}/man1/vacation.sendmail.1; \ + # Correct some paths in upstream man pages + sed -e "s?/usr/adm/sm.bin?${sysconfdir}/mail/smrsh?g" \ + -e "s?sm.bin?${sysconfdir}/mail/smrsh?g" \ + ${DEB_SRCDIR}/smrsh/smrsh.8 \ + > ${DEB_SRCDIR}/smrsh/smrsh.8.new; + mv ${DEB_SRCDIR}/smrsh/smrsh.8.new ${DEB_SRCDIR}/smrsh/smrsh.8; + sed -e "s?/etc/mail/statistics?${localstatedir}/lib/sendmail/sendmail.st?g"\ + ${DEB_SRCDIR}/sendmail/sendmail.8 \ + > ${DEB_SRCDIR}/sendmail/sendmail.8.new; + mv ${DEB_SRCDIR}/sendmail/sendmail.8.new \ + ${PKG_DIR}${mandir}/man8/sendmail.sendmail.8; + $(RM) ${DEB_SRCDIR}/sendmail/sendmail.8; + # Debian stuff + (cd debian/sensible_mda && \ + $(MAKE) -f Makefile install-arch \ + DESTDIR="${SRC_DIR}/sensible-mda";); + # libmilter-dev package + if [ -d ${DEB_SRCDIR}/libmilter ]; then \ + (cd ${DEB_SRCDIR}/obj*/libmilter && \ + $(MAKE) install \ + DESTDIR="../../../../debian/libmilter-dev";); \ + $(INSTALL_PROGRAM) ${DEB_SRCDIR}/obj.*/libmilter/libmilter.a \ + debian/libmilter-dev${libdir}/libmilter/; \ + $(INSTALL_DATA) ${DEB_SRCDIR}/include/libmilter/mfapi.h \ + debian/libmilter-dev${includedir}/libmilter/; \ + if [ -f ${DEB_SRCDIR}/include/libmilter/mfdef.h ]; then \ + $(INSTALL_DATA) ${DEB_SRCDIR}/include/libmilter/mfdef.h \ + debian/libmilter-dev${includedir}/libmilter/; \ + fi; \ + $(INSTALL_PROGRAM) ${DEB_SRCDIR}/obj.*/libsmutil/libsmutil.a \ + debian/libmilter-dev${libdir}/libmilter/; \ + if [ -d ${DEB_SRCDIR}/libsm ]; then \ + $(INSTALL_PROGRAM) ${DEB_SRCDIR}/obj.*/libsm/libsm.a \ + debian/libmilter-dev${libdir}/libmilter/; \ + fi; \ + fi; + # Install Lintian overrides + $(INSTALL_DATA) -g root -m 644 \ + debian/libmilter${sm_libmilter_version}.lintian-overrides \ + debian/libmilter${sm_libmilter_version}/usr/share/lintian/overrides/libmilter${sm_libmilter_version}; + $(INSTALL_DATA) -g root -m 644 \ + debian/build/debian/libmilter-dev.lintian-overrides \ + debian/libmilter-dev/usr/share/lintian/overrides/libmilter-dev; + $(INSTALL_DATA) -g root -m 644 \ + debian/build/debian/rmail.lintian-overrides \ + debian/rmail/usr/share/lintian/overrides/rmail; + $(INSTALL_DATA) -g root -m 644 \ + debian/build/debian/sensible-mda.lintian-overrides \ + debian/sensible-mda/usr/share/lintian/overrides/sensible-mda; + $(INSTALL_DATA) -g root -m 644 \ + debian/build/debian/sendmail-bin.lintian-overrides \ + debian/sendmail-bin/usr/share/lintian/overrides/sendmail-bin; + #-------------------------------------------------------------------- + + +#------------- +# CDBS host dh_fixperms fixup +binary-predeb/sendmail-bin:: + #-------------------------------------------------------------------- + # Proper ownership/modes + chown root:mail ${PKG_DIR}${libexecdir}/sendmail; + chmod 02755 ${PKG_DIR}${libexecdir}/sendmail; + chown root:mail ${PKG_DIR}${libexecdir}/mailstats; + chmod 02755 ${PKG_DIR}${libexecdir}/mailstats; + #-------------------------------------------------------------------- + +binary-predeb/sensible-mda:: + #-------------------------------------------------------------------- + # Proper ownership/modes + chmod 04755 debian/sensible-mda/usr/sbin/sensible-mda; + #-------------------------------------------------------------------- + +binary-predeb/libmilter$(sm_libmilter_version)-dbg:: + #-------------------------------------------------------------------- + # Remove unneeded debugging information + $(RM) -r debian/libmilter$(sm_libmilter_version)-dbg/usr/lib/debug/usr/sbin; + $(RM) -r debian/libmilter$(sm_libmilter_version)-dbg/usr/lib/debug/usr/lib/sm.bin; + #-------------------------------------------------------------------- + + +#------------- +# after the directories are created but before dh_compress is run. +common-binary-post-install-arch:: + #-------------------------------------------------------------------- + # Obtain build dependancy information + dh_buildinfo + #-------------------------------------------------------------------- + +binary-makedeb-IMPL/sendmail:: verify-tarball pristine + + diff --git a/debian/sendmail-FAQ.doc-base b/debian/sendmail-FAQ.doc-base new file mode 100644 index 0000000..00c0713 --- /dev/null +++ b/debian/sendmail-FAQ.doc-base @@ -0,0 +1,12 @@ +Document: Sendmail +Title: Sendmail Documentation +Author: Various +Abstract: Various tidbits of sendmail lore, both fact and fiction +Section: mail + +Format: text +Files: /usr/share/doc/sendmail/*.txt + +Format: HTML +Index: /usr/share/doc/sendmail/index.html +Files: /usr/share/doc/sendmail/*.html diff --git a/debian/sendmail-base.docs b/debian/sendmail-base.docs new file mode 100644 index 0000000..6327cc0 --- /dev/null +++ b/debian/sendmail-base.docs @@ -0,0 +1,2 @@ +debian/Debian-specific +debian/build/site.config.m4 diff --git a/debian/sendmail-base.links b/debian/sendmail-base.links new file mode 100644 index 0000000..435b090 --- /dev/null +++ b/debian/sendmail-base.links @@ -0,0 +1,2 @@ +usr/share/sendmail/examples usr/share/doc/sendmail-base/examples +usr/share/bug/sendmail usr/share/bug/sendmail-base diff --git a/debian/sendmail-base.sendmail.logrotate b/debian/sendmail-base.sendmail.logrotate new file mode 100644 index 0000000..2c212e6 --- /dev/null +++ b/debian/sendmail-base.sendmail.logrotate @@ -0,0 +1,94 @@ +# Sample Logrotate file for sendmail +# +# C A V E A T E M P T O R +# +# If you're using the stock syslog package, do *NOT* enable anything +# in this file, doing so may result in dual rotations of the logfiles +# and/or loss of logged data. The syslog package, by default, will +# rotate standard log files based upon various critera !!! +# +#/var/log/mail/mail.alert { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.crit { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.debug { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.emerg { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.err { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.info { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.log { +# create 0660 root mail +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +# postrotate +# /etc/init.d/sysklogd reload +# endscript +#} +# +#/var/log/mail/mail.notice { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} +# +#/var/log/mail/mail.warn { +# notifempty +# rotate 4 +# size 100k +# weekly +# compress +# missingok +#} + diff --git a/debian/sendmail-bin.links b/debian/sendmail-bin.links new file mode 100644 index 0000000..28458f8 --- /dev/null +++ b/debian/sendmail-bin.links @@ -0,0 +1 @@ +usr/share/bug/sendmail usr/share/bug/sendmail-bin diff --git a/debian/sendmail-cf.links b/debian/sendmail-cf.links new file mode 100644 index 0000000..f7febab --- /dev/null +++ b/debian/sendmail-cf.links @@ -0,0 +1 @@ +usr/share/bug/sendmail usr/share/bug/sendmail-cf diff --git a/debian/sendmail-doc.docs b/debian/sendmail-doc.docs new file mode 100644 index 0000000..7b3c4c5 --- /dev/null +++ b/debian/sendmail-doc.docs @@ -0,0 +1,3 @@ +debian/README.Debian.sendmail-doc +debian/Debian-specific +debian/build/site.config.m4 diff --git a/debian/sendmail.menu.test b/debian/sendmail.menu.test new file mode 100644 index 0000000..e86326c --- /dev/null +++ b/debian/sendmail.menu.test @@ -0,0 +1,24 @@ +?package(sendmail):needs="text" \ + section="Apps/Net/Sendmail" \ + title="runq" \ + longtitle="Send queued Mail" \ + description="runq is a sendmail command that will process the mail queue, attempting to deliver each message." \ + command="/usr/bin/runq" +?package(sendmail):needs="x11" \ + section="Apps/Net/Sendmail" \ + title="runq" \ + longtitle="Send queued Mail" \ + description="runq is a sendmail command that will process the mail queue, attempting to deliver each message." \ + command="/usr/bin/X11/xterm -e /usr/bin/runq" +?package(sendmail):needs="text" \ + section="Apps/Net/Sendmail" \ + title="Mail Queue" \ + longtitle="Display Mail Queue" \ + description="mailq is a sendmail command that will display the mail queue, listing each message." \ + command="/usr/bin/mailq" +?package(sendmail):needs="text" \ + section="Apps/Net/Sendmail" \ + title="Mail Queue" \ + longtitle="Display Mail Queue" \ + description="mailq is a sendmail command that will display the mail queue, listing each message." \ + command="/usr/bin/X11/xterm -e /usr/bin/mailq" diff --git a/debian/sensible-mda.links b/debian/sensible-mda.links new file mode 100644 index 0000000..2f4cb3e --- /dev/null +++ b/debian/sensible-mda.links @@ -0,0 +1 @@ +usr/share/bug/sendmail usr/share/bug/sensible-mda diff --git a/debian/sensible_mda/Makefile.in b/debian/sensible_mda/Makefile.in new file mode 100644 index 0000000..21e8812 --- /dev/null +++ b/debian/sensible_mda/Makefile.in @@ -0,0 +1,587 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +sbin_PROGRAMS = sensible-mda$(EXEEXT) +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)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/./build/mkinstalldirs +CONFIG_CLEAN_FILES = sensible-mda.c +am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)" +sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(sbin_PROGRAMS) +am_sensible_mda_OBJECTS = sensible-mda.$(OBJEXT) +sensible_mda_OBJECTS = $(am_sensible_mda_OBJECTS) +sensible_mda_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/./build/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(sensible_mda_SOURCES) +DIST_SOURCES = $(sensible_mda_SOURCES) +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(dist_man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBIAN = @DEBIAN@ +DEBIAN_DH = @DEBIAN_DH@ +DEB_BUILD_ARCH = @DEB_BUILD_ARCH@ +DEB_BUILD_GNU_CPU = @DEB_BUILD_GNU_CPU@ +DEB_BUILD_GNU_SYSTEM = @DEB_BUILD_GNU_SYSTEM@ +DEB_BUILD_GNU_TYPE = @DEB_BUILD_GNU_TYPE@ +DEB_HOST_ARCH = @DEB_HOST_ARCH@ +DEB_HOST_GNU_CPU = @DEB_HOST_GNU_CPU@ +DEB_HOST_GNU_SYSTEM = @DEB_HOST_GNU_SYSTEM@ +DEB_HOST_GNU_TYPE = @DEB_HOST_GNU_TYPE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SM_CPYRT = @SM_CPYRT@ +SM_DATE = @SM_DATE@ +SM_MAXVERS = @SM_MAXVERS@ +SM_MINVERS = @SM_MINVERS@ +SM_VERS = @SM_VERS@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_version = @ac_version@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +am_version = @am_version@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +buildtree = @buildtree@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sm_auth_lib = @sm_auth_lib@ +sm_badepends = @sm_badepends@ +sm_build_arch = @sm_build_arch@ +sm_custom = @sm_custom@ +sm_custom_s = @sm_custom_s@ +sm_databases = @sm_databases@ +sm_date = @sm_date@ +sm_depends = @sm_depends@ +sm_dist_name = @sm_dist_name@ +sm_dist_vers = @sm_dist_vers@ +sm_editmap_envdef = @sm_editmap_envdef@ +sm_editmap_libs = @sm_editmap_libs@ +sm_enable_auth = @sm_enable_auth@ +sm_enable_bind = @sm_enable_bind@ +sm_enable_hesiod = @sm_enable_hesiod@ +sm_enable_ipv6 = @sm_enable_ipv6@ +sm_enable_ldap = @sm_enable_ldap@ +sm_enable_maillock = @sm_enable_maillock@ +sm_enable_milter = @sm_enable_milter@ +sm_enable_ndbm = @sm_enable_ndbm@ +sm_enable_newdb = @sm_enable_newdb@ +sm_enable_nis = @sm_enable_nis@ +sm_enable_nisplus = @sm_enable_nisplus@ +sm_enable_regex = @sm_enable_regex@ +sm_enable_sfio = @sm_enable_sfio@ +sm_enable_shm = @sm_enable_shm@ +sm_enable_tcpd = @sm_enable_tcpd@ +sm_enable_tls = @sm_enable_tls@ +sm_envdef = @sm_envdef@ +sm_features = @sm_features@ +sm_ffr = @sm_ffr@ +sm_hesiod_parms = @sm_hesiod_parms@ +sm_host_arch = @sm_host_arch@ +sm_incdirs = @sm_incdirs@ +sm_ldap_lib = @sm_ldap_lib@ +sm_libmilter_envdef = @sm_libmilter_envdef@ +sm_libmilter_libs = @sm_libmilter_libs@ +sm_libmilter_version = @sm_libmilter_version@ +sm_libs = @sm_libs@ +sm_libsm_envdef = @sm_libsm_envdef@ +sm_libsm_libs = @sm_libsm_libs@ +sm_libsmdb_envdef = @sm_libsmdb_envdef@ +sm_libsmdb_libs = @sm_libsmdb_libs@ +sm_libsmutil_envdef = @sm_libsmutil_envdef@ +sm_libsmutil_libs = @sm_libsmutil_libs@ +sm_m4_ffr = @sm_m4_ffr@ +sm_mail_local_envdef = @sm_mail_local_envdef@ +sm_mail_local_libs = @sm_mail_local_libs@ +sm_mailstats_envdef = @sm_mailstats_envdef@ +sm_mailstats_libs = @sm_mailstats_libs@ +sm_makemap_envdef = @sm_makemap_envdef@ +sm_makemap_libs = @sm_makemap_libs@ +sm_mapdef = @sm_mapdef@ +sm_newdb_lib = @sm_newdb_lib@ +sm_praliases_envdef = @sm_praliases_envdef@ +sm_praliases_libs = @sm_praliases_libs@ +sm_recommends = @sm_recommends@ +sm_revision = @sm_revision@ +sm_rmail_envdef = @sm_rmail_envdef@ +sm_rmail_libs = @sm_rmail_libs@ +sm_sendmail_envdef = @sm_sendmail_envdef@ +sm_sendmail_libs = @sm_sendmail_libs@ +sm_smrsh_envdef = @sm_smrsh_envdef@ +sm_smrsh_libs = @sm_smrsh_libs@ +sm_suggests = @sm_suggests@ +sm_time = @sm_time@ +sm_utc = @sm_utc@ +sm_vacation_envdef = @sm_vacation_envdef@ +sm_vacation_libs = @sm_vacation_libs@ +sm_version = @sm_version@ +sm_version_beta = @sm_version_beta@ +sm_version_major = @sm_version_major@ +sm_version_math = @sm_version_math@ +sm_version_minor = @sm_version_minor@ +sm_version_r = @sm_version_r@ +sm_version_v = @sm_version_v@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +# +# Shipped manpages +# +dist_man_MANS = sensible-mda.8 +# +# Program sources +# +sensible_mda_SOURCES = sensible-mda.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sensible_mda/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu sensible_mda/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +sensible-mda.c: $(top_builddir)/config.status $(srcdir)/sensible-mda.c.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ + rm -f "$(DESTDIR)$(sbindir)/$$f"; \ + done + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) +sensible-mda$(EXEEXT): $(sensible_mda_OBJECTS) $(sensible_mda_DEPENDENCIES) + @rm -f sensible-mda$(EXEEXT) + $(LINK) $(sensible_mda_OBJECTS) $(sensible_mda_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sensible-mda.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +install-man8: $(man8_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ + done +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.8*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 8*) ;; \ + *) ext='8' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-exec-am: install-sbinPROGRAMS + +install-html: install-html-am + +install-info: install-info-am + +install-man: install-man8 + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man uninstall-sbinPROGRAMS + +uninstall-man: uninstall-man8 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-sbinPROGRAMS ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man8 install-pdf \ + install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-man uninstall-man8 \ + uninstall-sbinPROGRAMS + +# +# Debian targets, phase out +# +.PHONY: build-indep build-arch +.PHONY: install-indep install-arch +build-indep: +build-arch: sensible-mda +install-indep: +install-arch: install +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/sensible_mda/sensible-mda.8 b/debian/sensible_mda/sensible-mda.8 new file mode 100644 index 0000000..622d50f --- /dev/null +++ b/debian/sensible_mda/sensible-mda.8 @@ -0,0 +1,85 @@ +.\" Copyright (c) 1998, 1999 Richard A Nelson <cowboy@debian.org> +.\" All rights reserved. +.\" +.\" You may distribute under the terms of the GNU General Public +.\" License +.\" +.\" $Id: sensible-mda.8,v 2.0 1999/10/21 11:30:00 cowboy Exp $ +.\" +.TH SENSIBLE-MDA 8 "October 21 1999" +.UC 4 +.SH NAME +sensible\-mda \- a generic local MDA router for Debian systems +.SH SYNOPSIS +.B sensible\-mda +.IR from +.IR to +.IR detail +.IR client\-addr +.br +.SH DESCRIPTION +.B sensible\-mda +is used to simplify the installation and configuration of +.BR sendmail (8) +, or other MTAs for use on Debian systems. With sensible\-mda, sendmail +can support a plethora of MDAs (procmail, maildrop, deliver, etc.) without +having pick any +.I one +of them as required. +.LP +.SH FUNCTION +.B sensible\-mda +is called by sendmail as a local mailer when the following exists in +sendmail.mc: +.br +.I define(`LOCAL_MAILER_ARGS', `sensible-mda $g $u $h ${client_addr}')dnl +.LP +sensible-mda +will look for the following MDAs (in this order), and pass the mail +on to the first SUID MDA found (Or first found MDA, if run w/euid=root): +.BR procmail (1), +.BR maildrop (1), +.BR deliver (8), +.BR mail.local (8) +.LP +.SH OPTIONS +Available command line options are the following: +.TP +.I from +The sender of this email +(sendmail $g variable) +.TP +.I to +The recipient of this email +(sendmail $u variable) +.TP +.I detail +The detail portion of the recipient userid +(sendmail $h variable) +\- ie: +.br +cowboy\+\fIsendmail\fP@debian.org +.TP +.I client\-addr +TCP/IP address of the sender +(sendmail ${client_addr} variable) +Not used (for the nonce) +.SH FILES +.TP +.I /etc/mail/sendmail.mc +sendmail m4 input to generate sendmail.cf +.TP +.I /etc/mail/sendmail.cf +actual sendmail configuration file (treated as a binary file) +.SH "SEE ALSO" +.BR sendmail (8), +.BR procmail (1), +.BR maildrop (1), +.BR deliver (8), +.BR mail.local (8) +.br +.SH BUGS +None known so far. +.SH AUTHOR +Richard Nelson <cowboy@debian.org> +.SH HISTORY diff --git a/debian/sensible_mda/sensible-mda.c.in b/debian/sensible_mda/sensible-mda.c.in new file mode 100644 index 0000000..d23d243 --- /dev/null +++ b/debian/sensible_mda/sensible-mda.c.in @@ -0,0 +1,350 @@ +/* + * $Sendmail: sensible-mda.c,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $ + * + * sensible-mda.c + * Copyright (c) 1998, Johnie Ingram. + * Copyright (c) 1998-@SM_CPYRT@ Richard Nelson <cowboy@debian.org>. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef lint +static const char id[] = "@(#)$Id: sensible-mda.c,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $"; +#endif /* ! lint */ + +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <limits.h> +#include <unistd.h> +#include <pwd.h> +#include <grp.h> +#include <sysexits.h> +#include <string.h> +#include <syslog.h> + +// TODO: declare -x TCPREMOTEIP="$3" + +# define min(a, b) ((a) < (b) ? (a) : (b)) + +#ifndef DEBUG + #define DEBUG 0 + #endif +#ifndef TESTING + #define TESTING 0 + #endif + +#define PROCMAIL "@sysconfdir@/mail/smrsh/procmail" +#define MAILDROP "@sysconfdir@/mail/smrsh/maildrop" +#define DELIVER "@sysconfdir@/mail/smrsh/deliver" +#define MAIL_LOCAL "@sysconfdir@/mail/smrsh/mail.local" + +#define PROCMAILRCS "@sysconfdir@/procmailrcs/" + +static void help(void); +static int drop_privs(char *, uid_t, gid_t); +static void show_privs(void); +static unsigned char program[PATH_MAX]; + +static uid_t RealUid, RunAsUid; +static gid_t RealGid, RunAsGid; + +int +main (int argc, char *argv[]) { + + struct stat MDA_stat; + int done = 1; + struct passwd* passwd_entry; + + char *str_pos; + int exec_rc = EX_OK; + + #if DEBUG + int arg_index; + int str_len; + #endif + + (void) openlog( "sensible-mda", LOG_PID+LOG_PERROR, LOG_MAIL ); + + /*---------------------------------------------------------------- + * Obtain program name + *----------------------------------------------------------------*/ + str_pos = strrchr(argv[0], '/'); + if ( str_pos ) + str_pos++; + else + str_pos = argv[0]; + (void) strncpy(program, str_pos, + min(strlen(str_pos), sizeof(program)-1)); + program[sizeof(program)-1] = '\0'; + + #if DEBUG + str_len = 0; + for ( arg_index = 0; arg_index < argc; arg_index++ ) + str_len += strlen( argv[arg_index] ) + 1; + str_pos = malloc( str_len + 1); + str_pos[0] = '\0'; + for ( arg_index = 0; arg_index < argc; arg_index++ ) { + (void) strcat( str_pos, argv[arg_index] ); + (void) strcat( str_pos, " " ); + }; + (void) syslog( LOG_INFO, "Parms: %s\n", str_pos ); + (void) free(str_pos); + #endif + + /*---------------------------------------------------------------- + * Parse input to determine to whom to speak and who we are... + * Must have at least three parameters unless first is ?,-?,/?. + *----------------------------------------------------------------*/ + if (argc >= 2 && + (strcmp(argv[1],"?") == 0 || strcmp(argv[1],"-?") == 0 || + strcmp(argv[1],"/?") == 0 || strcmp(argv[1],"\\?") == 0 || + strcmp(argv[1],"-h") == 0 || strcmp(argv[1],"--help") == 0)) { + (void) printf( "%s - Help\n", program ); + help(); + (void) closelog(); + return (EX_USAGE); + }; + if (argc < 3) { + (void) syslog( LOG_ERR, "%s - Required parameters elided.\n", + program ); + help(); + (void) closelog(); + return (EX_USAGE); + }; + + /*---------------------------------------------------------------- + * Determine to whom we are delivering mail to, and set that + * as our real, effective, and saved {u,g}ids + *----------------------------------------------------------------*/ + RealUid = RunAsUid = geteuid(); + RealGid = RunAsGid = getegid(); + passwd_entry=getpwnam(argv[2]); + if (passwd_entry) { + RunAsUid = passwd_entry->pw_uid; + RunAsGid = passwd_entry->pw_gid; + } + else { + (void) syslog( LOG_ERR, "User(%s) does not exist!\n", + argv[2]); + (void) closelog(); + return (EX_TEMPFAIL); + }; + + /*---------------------------------------------------------------- + * 1st: try delivery via PROCMAIL (Keep SUID, works better that way) + *----------------------------------------------------------------*/ + if (!stat(PROCMAIL, &MDA_stat)) { + done = 0; + #if DEBUG + (void) syslog( LOG_INFO, "MDA: %s -t -f %s" + " -a %s -d %s\n", + PROCMAIL, argv[1], argv[3], argv[2]); + #endif + #if ! TESTING + exec_rc = execl (PROCMAIL, PROCMAIL, "-t", + "-f", argv[1], + "-a", argv[3], + "-d", argv[2], NULL); + (void) syslog( LOG_ERR, "%s did not execute %i,%i\n", + PROCMAIL, exec_rc, errno); + (void) closelog(); + return (EX_TEMPFAIL); + #endif + done = 1; + }; + + /*---------------------------------------------------------------- + * 2nd: try delivery via MAILDROP + *----------------------------------------------------------------*/ + if (done && !stat(MAILDROP, &MDA_stat)) { + done = 0; + #if DEBUG + (void) syslog( LOG_INFO, "MDA: %s -f %s -d %s %s\n", + MAILDROP, argv[1], argv[2], argv[3]); + #endif + if (drop_privs( argv[2], RunAsUid, RunAsGid )) { + (void) closelog(); + return (EX_TEMPFAIL); + }; + #if ! TESTING + exec_rc = execl (MAILDROP, MAILDROP, + "-f", argv[1], "-d", argv[2], argv[3], NULL); + (void) syslog( LOG_ERR, "%s did not execute %i,%i\n", + MAILDROP, exec_rc, errno); + (void) closelog(); + return (EX_TEMPFAIL); + #endif + done = 1; + }; + + /*---------------------------------------------------------------- + * 3rd: try delivery via DELIVER + *----------------------------------------------------------------*/ + if (done && !stat(DELIVER, &MDA_stat)) { + done = 0; + #if DEBUG + (void) syslog( LOG_INFO, "MDA: %s -r %s %s\n", + DELIVER, argv[1], argv[2]); + #endif + if (drop_privs( argv[2], RunAsUid, RunAsGid )) { + (void) closelog(); + return (EX_TEMPFAIL); + }; + #if ! TESTING + exec_rc = execl (DELIVER, DELIVER, + "-r", argv[1], argv[2], NULL); + (void) syslog( LOG_ERR, "%s did not execute %i,%i\n", + DELIVER, exec_rc, errno); + (void) closelog(); + return (EX_TEMPFAIL); + #endif + done = 1; + }; + + /*---------------------------------------------------------------- + * 4th: try delivery via MAIL.LOCAL (Needs SUID because of LMTP) + *----------------------------------------------------------------*/ + if (done && !stat(MAIL_LOCAL, &MDA_stat)) { + done = 0; + #if DEBUG + (void) syslog( LOG_INFO, "MDA: %s -f %s %s\n", + MAIL_LOCAL, argv[1], argv[2]); + #endif + #if ! TESTING + exec_rc = execl (MAIL_LOCAL, MAIL_LOCAL, + "-f", argv[1], argv[2], NULL); + (void) syslog( LOG_ERR, "%s did not execute %i,%i\n", + MAIL_LOCAL, exec_rc, errno); + (void) closelog(); + return (EX_TEMPFAIL); + #endif + done = 1; + }; + + (void) syslog( LOG_ERR, "No MDA was found! Tried: " + "%s, %s, %s, and %s.\n", + PROCMAIL, MAILDROP, DELIVER, MAIL_LOCAL ); + + (void) closelog(); + return (EX_TEMPFAIL); + }; + +/*------------------------------------------------------------------- + * drop_privs... + *-------------------------------------------------------------------*/ +static int +drop_privs(char * luser, uid_t new_uid, gid_t new_gid) { + gid_t emptygidset[1]; + uid_t EffUid; + gid_t EffGid; + int rval; + + rval = EX_OK; + EffUid = geteuid(); + EffGid = getegid(); + + /* reset group permissions; these can be set later */ + emptygidset[0] = (RunAsGid != 0) ? RunAsGid : EffGid; + if (setgroups(1, emptygidset) == -1 && EffUid == 0) { + (void) syslog( LOG_ERR, "drop_privs: setgroups(1, %d) failed\n", + (int) emptygidset[0]); + rval = EX_OSERR; + }; + + /* reset primary group id */ + if ((RunAsGid != 0) && EffGid != RunAsGid && setgid(RunAsGid) < 0) { + (void) syslog( LOG_ERR, "drop_privs: setgid(%d) failed\n", + (int) RunAsGid); + rval = EX_OSERR; + }; + + /* reset primary user id */ + if ((RunAsUid != 0) && EffUid != RunAsUid && setuid(RunAsUid) < 0) { + (void) syslog( LOG_ERR, "drop_privs: setuid(%d) failed\n", + (int) RunAsUid); + rval = EX_OSERR; + }; + + #if DEBUG + show_privs(); + (void) syslog( LOG_INFO, "drop_privs: rval = %d\n", rval); + #endif + + if (rval) { + (void) syslog( LOG_ERR, + "Can not setreuid to %d:%d for user(%s)!\n", + RunAsUid, RunAsGid, luser); + show_privs(); + }; + + return rval; + }; + +/*------------------------------------------------------------------- + * show_privs... + *-------------------------------------------------------------------*/ +static void +show_privs(void) { + + (void) syslog( LOG_INFO, "show_privs: RealUser = %d:%d\n", + (int) RealUid, (int) RealGid); + (void) syslog( LOG_INFO, "show_privs: " + "get[ug]id=%d:%d, gete[ug]id=%d:%d\n", + (int) getuid(), (int) getgid(), + (int) geteuid(), (int) getegid()); + (void) syslog( LOG_INFO, "show_privs: RunAsUser = %d:%d\n", + (int) RunAsUid, (int) RunAsGid); + return; + }; + +/*------------------------------------------------------------------- + * Help... + *-------------------------------------------------------------------*/ +static void +help(void) { + + (void) printf("\n%s - Help information.\n\n" + "%s:\n" + "\tA general MTA->MDA wrapper to isolate the MTA from\n" + "\tthe vagaries of MDA installation and invocation.\n" + "\nSupported MTAs:\n" + "\tsendmail\n" + "\nSupported MDAs:\n" + "\tprocmail, maildrop, deliver, mail.local\n" + "\nCalled by:\n" + "\tSendmail: \n" + "\tYou: " + "Go directly to jail, do not pass GO, " + "do not collect $200!\n" + "\nSyntax:\n" + "\t%s <from:$g> <user:$u> [<detail:$h>]" + "[<client:${client_addr}>]\n" + "\nCalls:\n" + "\tprocmail:\t procmail -t" + " -f <from>" + " -a <detail> -d <to>\n" + "\tmaildrop:\t maildrop -f <from> -d <to> <detail>\n" + "\tdeliver:\t deliver -r <from> <to>\n" + "\tmail.local:\t mail.local -f <from> <to>\n" + "\n" + ,program, program, program + ); + return; + }; + diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides new file mode 100644 index 0000000..3ef019f --- /dev/null +++ b/debian/source.lintian-overrides @@ -0,0 +1,3 @@ +sendmail: newer-standards-version 3.6.10.0 +sendmail: dh_testversion-is-deprecated +sendmail: bad-distribution-in-changes-file private diff --git a/debian/sources b/debian/sources new file mode 100644 index 0000000..e5f346e --- /dev/null +++ b/debian/sources @@ -0,0 +1 @@ +upstream tar sendmail.8.14.1.tar.gz diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..6506b9d --- /dev/null +++ b/debian/watch @@ -0,0 +1,7 @@ +# format version number, currently 3; this line is compulsory! +version=3 + +# Line continuations are performed with \ +# Full-site-with-pattern [Version [Action]] +opts=pasv ftp://ftp.sendmail.org/pub/sendmail/sendmail\.(.*)\.tar\.gz debian +opts=pasv ftp://ftp.sendmail.org/pub/sendmail/sendmail\.(.*)\.tar(\.gz)?\.sig debian diff --git a/sendmail.8.14.1.tar.gz.cdbs-config_list b/sendmail.8.14.1.tar.gz.cdbs-config_list new file mode 100644 index 0000000..1089c76 --- /dev/null +++ b/sendmail.8.14.1.tar.gz.cdbs-config_list @@ -0,0 +1,2 @@ +sendmail-8.14.1/include/sm/config.h +sendmail-8.14.1/libsm/config.c |