aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlen Barber <gjb@FreeBSD.org>2020-07-16 17:14:34 +0000
committerGlen Barber <gjb@FreeBSD.org>2020-07-16 17:14:34 +0000
commite2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1 (patch)
tree2f8dd797ac01b5db8e5aec5691d022a77a972ba6
parent50050b2f41417051d04ef95b176d41988a9d5b9d (diff)
parentf903a308a1b11599b6ff33725fd591a2ef685b4c (diff)
downloadsrc-e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1.tar.gz
src-e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1.zip
MFH
Sponsored by: Rubicon Communications, LLC (netgate.com)
Notes
Notes: svn path=/projects/release-git/; revision=363257
-rw-r--r--ObsoleteFiles.inc15
-rw-r--r--RELNOTES7
-rw-r--r--bin/ps/print.c9
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool-features.77
-rw-r--r--contrib/byacc/test/calc.tab.c668
-rw-r--r--contrib/ofed/infiniband-diags/src/ibdiag_common.c8
-rw-r--r--contrib/ofed/infiniband-diags/src/ibdiag_sa.c2
-rw-r--r--contrib/ofed/infiniband-diags/src/iblinkinfo.c5
-rw-r--r--contrib/ofed/infiniband-diags/src/ibportstate.c1
-rw-r--r--contrib/ofed/infiniband-diags/src/ibqueryerrors.c7
-rw-r--r--contrib/ofed/infiniband-diags/src/ibroute.c3
-rw-r--r--contrib/ofed/libibumad/umad_str.c3
-rw-r--r--contrib/ofed/libibverbs/device.c3
-rw-r--r--contrib/ofed/libibverbs/examples/rc_pingpong.c6
-rw-r--r--contrib/ofed/libibverbs/examples/srq_pingpong.c6
-rw-r--r--contrib/ofed/libibverbs/examples/uc_pingpong.c6
-rw-r--r--contrib/ofed/libibverbs/examples/ud_pingpong.c6
-rw-r--r--contrib/ofed/libibverbs/examples/xsrq_pingpong.c6
-rw-r--r--contrib/ofed/libmlx5/bitmap.h8
-rw-r--r--contrib/ofed/librdmacm/examples/mckey.c3
-rw-r--r--contrib/ofed/opensm/opensm/osm_perfmgr.c4
-rw-r--r--contrib/ofed/opensm/opensm/osm_port.c4
-rw-r--r--contrib/ofed/opensm/opensm/osm_sa_mad_ctrl.c1
-rw-r--r--contrib/sendmail/CACerts240
-rw-r--r--contrib/sendmail/FREEBSD-upgrade16
-rw-r--r--contrib/sendmail/KNOWNBUGS1
-rw-r--r--contrib/sendmail/LICENSE2
-rw-r--r--contrib/sendmail/PGPKEYS1334
-rw-r--r--contrib/sendmail/README4
-rw-r--r--contrib/sendmail/RELEASE_NOTES144
-rw-r--r--contrib/sendmail/cf/README89
-rw-r--r--contrib/sendmail/cf/cf/Makefile2
-rw-r--r--contrib/sendmail/cf/cf/knecht.mc4
-rw-r--r--contrib/sendmail/cf/cf/submit.cf18
-rw-r--r--contrib/sendmail/cf/feature/bcc.m42
-rw-r--r--contrib/sendmail/cf/feature/blacklist_recipients.m47
-rw-r--r--contrib/sendmail/cf/feature/blocklist_recipients.m419
-rw-r--r--contrib/sendmail/cf/feature/check_cert_altnames.m417
-rw-r--r--contrib/sendmail/cf/feature/dnsbl.m42
-rw-r--r--contrib/sendmail/cf/feature/enhdnsbl.m42
-rw-r--r--contrib/sendmail/cf/feature/tls_failures.m413
-rw-r--r--contrib/sendmail/cf/m4/cfhead.m49
-rw-r--r--contrib/sendmail/cf/m4/proto.m485
-rw-r--r--contrib/sendmail/cf/m4/version.m44
-rw-r--r--contrib/sendmail/cf/ostype/hpux10.m42
-rw-r--r--contrib/sendmail/cf/ostype/hpux9.m42
-rwxr-xr-xcontrib/sendmail/contrib/cidrexpand149
-rw-r--r--contrib/sendmail/contrib/dnsblaccess.m44
-rwxr-xr-xcontrib/sendmail/contrib/expn.pl2
-rw-r--r--contrib/sendmail/contrib/mmuegel28
-rw-r--r--contrib/sendmail/doc/op/op.me342
-rw-r--r--contrib/sendmail/editmap/Makefile2
-rw-r--r--contrib/sendmail/editmap/editmap.c8
-rw-r--r--contrib/sendmail/include/libmilter/mfapi.h20
-rw-r--r--contrib/sendmail/include/libmilter/mfdef.h4
-rw-r--r--contrib/sendmail/include/libsmdb/smdb.h77
-rw-r--r--contrib/sendmail/include/sendmail/pathnames.h16
-rw-r--r--contrib/sendmail/include/sendmail/sendmail.h2
-rw-r--r--contrib/sendmail/include/sm/assert.h8
-rw-r--r--contrib/sendmail/include/sm/bdb.h2
-rw-r--r--contrib/sendmail/include/sm/cdefs.h20
-rw-r--r--contrib/sendmail/include/sm/clock.h6
-rw-r--r--contrib/sendmail/include/sm/conf.h662
-rw-r--r--contrib/sendmail/include/sm/config.h40
-rw-r--r--contrib/sendmail/include/sm/debug.h2
-rw-r--r--contrib/sendmail/include/sm/errstring.h9
-rw-r--r--contrib/sendmail/include/sm/gen.h2
-rw-r--r--contrib/sendmail/include/sm/heap.h2
-rw-r--r--contrib/sendmail/include/sm/io.h6
-rw-r--r--contrib/sendmail/include/sm/ldap.h15
-rw-r--r--contrib/sendmail/include/sm/limits.h10
-rw-r--r--contrib/sendmail/include/sm/notify.h19
-rw-r--r--contrib/sendmail/include/sm/os/sm_os_freebsd.h16
-rw-r--r--contrib/sendmail/include/sm/rpool.h6
-rw-r--r--contrib/sendmail/include/sm/sem.h4
-rw-r--r--contrib/sendmail/include/sm/shm.h4
-rw-r--r--contrib/sendmail/include/sm/string.h6
-rw-r--r--contrib/sendmail/include/sm/test.h4
-rw-r--r--contrib/sendmail/include/sm/types.h4
-rw-r--r--contrib/sendmail/include/sm/varargs.h5
-rw-r--r--contrib/sendmail/include/sm/xtrap.h4
-rw-r--r--contrib/sendmail/libmilter/Makefile4
-rw-r--r--contrib/sendmail/libmilter/README19
-rw-r--r--contrib/sendmail/libmilter/comm.c6
-rw-r--r--contrib/sendmail/libmilter/docs/api.html71
-rw-r--r--contrib/sendmail/libmilter/docs/design.html12
-rw-r--r--contrib/sendmail/libmilter/docs/index.html2
-rw-r--r--contrib/sendmail/libmilter/docs/installation.html4
-rw-r--r--contrib/sendmail/libmilter/docs/overview.html16
-rw-r--r--contrib/sendmail/libmilter/docs/sample.html4
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_addheader.html16
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_addrcpt.html12
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html15
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_chgfrom.html12
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_chgheader.html12
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_delrcpt.html11
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_getpriv.html3
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_getsymval.html5
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_insheader.html17
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_main.html3
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_opensocket.html9
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_progress.html3
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_quarantine.html5
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_register.html25
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_replacebody.html15
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setbacklog.html3
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setconn.html9
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setdbg.html3
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setmlreply.html11
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setpriv.html5
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setreply.html13
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_setsymlist.html7
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_settimeout.html10
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_stop.html3
-rw-r--r--contrib/sendmail/libmilter/docs/smfi_version.html1
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_abort.html3
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_body.html5
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_close.html5
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_connect.html10
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_data.html7
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_envfrom.html5
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_envrcpt.html7
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_eoh.html1
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_eom.html3
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_header.html5
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_helo.html3
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_negotiate.html18
-rw-r--r--contrib/sendmail/libmilter/docs/xxfi_unknown.html9
-rw-r--r--contrib/sendmail/libmilter/engine.c42
-rw-r--r--contrib/sendmail/libmilter/example.c2
-rw-r--r--contrib/sendmail/libmilter/handler.c2
-rw-r--r--contrib/sendmail/libmilter/libmilter.h16
-rw-r--r--contrib/sendmail/libmilter/listener.c66
-rw-r--r--contrib/sendmail/libmilter/main.c2
-rw-r--r--contrib/sendmail/libmilter/monitor.c2
-rw-r--r--contrib/sendmail/libmilter/sm_gethost.c41
-rw-r--r--contrib/sendmail/libmilter/smfi.c3
-rw-r--r--contrib/sendmail/libmilter/worker.c8
-rw-r--r--contrib/sendmail/libsm/Makefile4
-rw-r--r--contrib/sendmail/libsm/Makefile.m43
-rw-r--r--contrib/sendmail/libsm/assert.c2
-rw-r--r--contrib/sendmail/libsm/clock.c46
-rw-r--r--contrib/sendmail/libsm/config.c54
-rw-r--r--contrib/sendmail/libsm/debug.c36
-rw-r--r--contrib/sendmail/libsm/errstring.c26
-rw-r--r--contrib/sendmail/libsm/exc.c4
-rw-r--r--contrib/sendmail/libsm/findfp.c18
-rw-r--r--contrib/sendmail/libsm/flags.c2
-rw-r--r--contrib/sendmail/libsm/fopen.c8
-rw-r--r--contrib/sendmail/libsm/fpos.c2
-rw-r--r--contrib/sendmail/libsm/fscanf.c2
-rw-r--r--contrib/sendmail/libsm/io.html17
-rw-r--r--contrib/sendmail/libsm/ldap.c351
-rw-r--r--contrib/sendmail/libsm/local.h2
-rw-r--r--contrib/sendmail/libsm/makebuf.c4
-rw-r--r--contrib/sendmail/libsm/mbdb.c16
-rw-r--r--contrib/sendmail/libsm/memstat.c2
-rw-r--r--contrib/sendmail/libsm/niprop.c10
-rw-r--r--contrib/sendmail/libsm/notify.c205
-rw-r--r--contrib/sendmail/libsm/refill.c4
-rw-r--r--contrib/sendmail/libsm/rewind.c2
-rw-r--r--contrib/sendmail/libsm/rpool.c12
-rw-r--r--contrib/sendmail/libsm/sem.c2
-rw-r--r--contrib/sendmail/libsm/signal.c18
-rw-r--r--contrib/sendmail/libsm/stdio.c6
-rw-r--r--contrib/sendmail/libsm/strdup.c2
-rw-r--r--contrib/sendmail/libsm/strerror.c2
-rw-r--r--contrib/sendmail/libsm/string.c31
-rw-r--r--contrib/sendmail/libsm/strio.c8
-rw-r--r--contrib/sendmail/libsm/strto.c4
-rw-r--r--contrib/sendmail/libsm/syslogio.c2
-rw-r--r--contrib/sendmail/libsm/t-event.c2
-rw-r--r--contrib/sendmail/libsm/t-exc.c2
-rw-r--r--contrib/sendmail/libsm/t-heap.c4
-rw-r--r--contrib/sendmail/libsm/t-notify.c122
-rw-r--r--contrib/sendmail/libsm/t-scanf.c2
-rw-r--r--contrib/sendmail/libsm/t-sem.c4
-rw-r--r--contrib/sendmail/libsm/vfprintf.c9
-rw-r--r--contrib/sendmail/libsm/vfscanf.c4
-rw-r--r--contrib/sendmail/libsmdb/Makefile2
-rw-r--r--contrib/sendmail/libsmdb/Makefile.m42
-rw-r--r--contrib/sendmail/libsmdb/smcdb.c575
-rw-r--r--contrib/sendmail/libsmdb/smdb.c183
-rw-r--r--contrib/sendmail/libsmdb/smdb1.c16
-rw-r--r--contrib/sendmail/libsmdb/smdb2.c107
-rw-r--r--contrib/sendmail/libsmdb/smndbm.c1
-rw-r--r--contrib/sendmail/libsmutil/Makefile2
-rw-r--r--contrib/sendmail/libsmutil/cf.c4
-rw-r--r--contrib/sendmail/libsmutil/safefile.c35
-rw-r--r--contrib/sendmail/mail.local/Makefile2
-rw-r--r--contrib/sendmail/mail.local/mail.local.c130
-rw-r--r--contrib/sendmail/mailstats/Makefile2
-rw-r--r--contrib/sendmail/mailstats/mailstats.c2
-rw-r--r--contrib/sendmail/makemap/Makefile2
-rw-r--r--contrib/sendmail/makemap/Makefile.m41
-rw-r--r--contrib/sendmail/makemap/makemap.815
-rw-r--r--contrib/sendmail/makemap/makemap.c316
-rw-r--r--contrib/sendmail/praliases/Makefile2
-rw-r--r--contrib/sendmail/praliases/praliases.c8
-rw-r--r--contrib/sendmail/rmail/Makefile2
-rw-r--r--contrib/sendmail/rmail/rmail.c2
-rw-r--r--contrib/sendmail/smrsh/Makefile2
-rw-r--r--contrib/sendmail/smrsh/smrsh.c48
-rw-r--r--contrib/sendmail/src/Makefile4
-rw-r--r--contrib/sendmail/src/Makefile.m44
-rw-r--r--contrib/sendmail/src/README30
-rw-r--r--contrib/sendmail/src/TRACEFLAGS15
-rw-r--r--contrib/sendmail/src/alias.c30
-rw-r--r--contrib/sendmail/src/arpadate.c6
-rw-r--r--contrib/sendmail/src/bf.c10
-rw-r--r--contrib/sendmail/src/collect.c31
-rw-r--r--contrib/sendmail/src/conf.c718
-rw-r--r--contrib/sendmail/src/conf.h90
-rw-r--r--contrib/sendmail/src/control.c7
-rw-r--r--contrib/sendmail/src/daemon.c452
-rw-r--r--contrib/sendmail/src/daemon.h4
-rw-r--r--contrib/sendmail/src/deliver.c660
-rw-r--r--contrib/sendmail/src/domain.c739
-rw-r--r--contrib/sendmail/src/envelope.c47
-rw-r--r--contrib/sendmail/src/err.c64
-rw-r--r--contrib/sendmail/src/headers.c87
-rw-r--r--contrib/sendmail/src/macro.c42
-rw-r--r--contrib/sendmail/src/main.c224
-rw-r--r--contrib/sendmail/src/map.c998
-rw-r--r--contrib/sendmail/src/map.h33
-rw-r--r--contrib/sendmail/src/mci.c87
-rw-r--r--contrib/sendmail/src/milter.c256
-rw-r--r--contrib/sendmail/src/mime.c16
-rw-r--r--contrib/sendmail/src/parseaddr.c62
-rw-r--r--contrib/sendmail/src/queue.c362
-rw-r--r--contrib/sendmail/src/ratectrl.c512
-rw-r--r--contrib/sendmail/src/ratectrl.h128
-rw-r--r--contrib/sendmail/src/readcf.c383
-rw-r--r--contrib/sendmail/src/recipient.c29
-rw-r--r--contrib/sendmail/src/sasl.c8
-rw-r--r--contrib/sendmail/src/savemail.c97
-rw-r--r--contrib/sendmail/src/sendmail.h631
-rw-r--r--contrib/sendmail/src/sfsasl.c49
-rw-r--r--contrib/sendmail/src/sfsasl.h4
-rw-r--r--contrib/sendmail/src/sm_resolve.c1340
-rw-r--r--contrib/sendmail/src/sm_resolve.h72
-rw-r--r--contrib/sendmail/src/srvrsmtp.c638
-rw-r--r--contrib/sendmail/src/stab.c27
-rw-r--r--contrib/sendmail/src/timers.c2
-rw-r--r--contrib/sendmail/src/tls.c1317
-rw-r--r--contrib/sendmail/src/tls.h237
-rw-r--r--contrib/sendmail/src/tlsh.c263
-rw-r--r--contrib/sendmail/src/udb.c59
-rw-r--r--contrib/sendmail/src/usersmtp.c178
-rw-r--r--contrib/sendmail/src/util.c72
-rw-r--r--contrib/sendmail/src/version.c4
-rw-r--r--contrib/sendmail/test/Results2
-rw-r--r--contrib/sendmail/vacation/Makefile2
-rw-r--r--contrib/sendmail/vacation/vacation.c20
-rw-r--r--crypto/openssh/sshd.c2
-rw-r--r--crypto/openssh/version.h2
-rw-r--r--etc/sendmail/freebsd.mc2
-rw-r--r--etc/sendmail/freebsd.submit.mc2
-rw-r--r--include/time.h14
-rw-r--r--lib/libc/gen/tcsetattr.321
-rw-r--r--lib/libmd/Makefile2
-rw-r--r--lib/libpmc/Makefile10
-rw-r--r--lib/libpmc/libpmc_pmu_util.c6
-rw-r--r--lib/libprocstat/libprocstat.c39
-rw-r--r--lib/libsm/Makefile2
-rw-r--r--lib/libsmdb/Makefile2
-rw-r--r--release/tools/vmimage.subr5
-rw-r--r--sbin/devd/devd.conf18
-rw-r--r--share/man/man4/vxlan.48
-rw-r--r--share/man/man9/style.934
-rw-r--r--stand/defs.mk3
-rw-r--r--sys/amd64/amd64/apic_vector.S60
-rw-r--r--sys/amd64/amd64/db_interface.c1
-rw-r--r--sys/amd64/amd64/machdep.c1
-rw-r--r--sys/amd64/amd64/mp_machdep.c490
-rw-r--r--sys/amd64/conf/GENERIC2
-rw-r--r--sys/amd64/conf/MINIMAL2
-rw-r--r--sys/amd64/include/cpufunc.h3
-rw-r--r--sys/amd64/include/pcpu.h9
-rw-r--r--sys/amd64/include/smp.h26
-rw-r--r--sys/arm/conf/std.armv62
-rw-r--r--sys/arm/conf/std.armv72
-rw-r--r--sys/arm64/arm64/trap.c14
-rw-r--r--sys/arm64/conf/GENERIC2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/string.h4
-rw-r--r--sys/dev/coretemp/coretemp.c2
-rw-r--r--sys/dev/hwpmc/hwpmc_amd.c19
-rw-r--r--sys/dev/hwpmc/hwpmc_intel.c12
-rw-r--r--sys/dev/safexcel/safexcel.c8
-rw-r--r--sys/dev/virtio/block/virtio_blk.c68
-rw-r--r--sys/dev/virtio/block/virtio_blk.h83
-rw-r--r--sys/fs/nfsclient/nfs_clrpcops.c11
-rw-r--r--sys/i386/conf/GENERIC2
-rw-r--r--sys/i386/conf/MINIMAL2
-rw-r--r--sys/i386/i386/mp_machdep.c221
-rw-r--r--sys/i386/include/smp.h11
-rw-r--r--sys/kern/init_main.c2
-rw-r--r--sys/kern/kern_descrip.c151
-rw-r--r--sys/kern/kern_exec.c2
-rw-r--r--sys/kern/kern_fork.c4
-rw-r--r--sys/kern/sys_generic.c121
-rw-r--r--sys/kern/vfs_cache.c159
-rw-r--r--sys/kern/vfs_vnops.c16
-rw-r--r--sys/mips/atheros/ar71xx_wdog.c50
-rw-r--r--sys/mips/conf/ERL2
-rw-r--r--sys/mips/conf/OCTEON12
-rw-r--r--sys/modules/dtb/allwinner/Makefile1
-rw-r--r--sys/net/if_ethersubr.c2
-rw-r--r--sys/net/if_tuntap.c1
-rw-r--r--sys/netinet/sctp_asconf.c164
-rw-r--r--sys/netinet/sctp_input.c8
-rw-r--r--sys/netinet/tcp_usrreq.c15
-rw-r--r--sys/powerpc/aim/mmu_oea64.c31
-rw-r--r--sys/powerpc/conf/GENERIC2
-rw-r--r--sys/powerpc/conf/GENERIC642
-rw-r--r--sys/riscv/conf/GENERIC2
-rw-r--r--sys/security/mac/mac_framework.c13
-rw-r--r--sys/security/mac/mac_framework.h14
-rw-r--r--sys/sys/filedesc.h5
-rw-r--r--sys/sys/rtprio.h1
-rw-r--r--sys/sys/time.h4
-rw-r--r--sys/x86/include/apicvar.h3
-rw-r--r--sys/x86/include/specialreg.h1
-rw-r--r--sys/x86/include/x86_smp.h8
-rw-r--r--sys/x86/x86/mp_x86.c235
-rw-r--r--sys/x86/xen/xen_apic.c82
-rw-r--r--tools/build/Makefile2
-rw-r--r--usr.bin/localedef/Makefile3
-rw-r--r--usr.bin/localedef/bootstrap/_ctype.h48
-rw-r--r--usr.bin/localedef/bootstrap/bootstrap_xlocale_private.h54
-rw-r--r--usr.bin/localedef/bootstrap/collate.h40
-rw-r--r--usr.bin/localedef/bootstrap/ctype.h58
-rw-r--r--usr.bin/localedef/bootstrap/limits.h48
-rw-r--r--usr.bin/localedef/bootstrap/lmessages.h41
-rw-r--r--usr.bin/localedef/bootstrap/lmonetary.h41
-rw-r--r--usr.bin/localedef/bootstrap/lnumeric.h41
-rw-r--r--usr.bin/localedef/bootstrap/namespace.h44
-rw-r--r--usr.bin/localedef/bootstrap/timelocal.h41
-rw-r--r--usr.bin/localedef/bootstrap/un-namespace.h42
-rw-r--r--usr.bin/localedef/bootstrap/xlocale.h42
-rw-r--r--usr.bin/localedef/collate.c7
-rw-r--r--usr.bin/localedef/ctype.c6
-rw-r--r--usr.bin/top/machine.c2
-rw-r--r--usr.bin/xinstall/install.18
-rw-r--r--usr.bin/xinstall/xinstall.c2
-rw-r--r--usr.sbin/efibootmgr/efibootmgr.c2
-rw-r--r--usr.sbin/sendmail/Makefile4
347 files changed, 15034 insertions, 6490 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index fe2315aea6b2..13689deea351 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -36,6 +36,21 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20200714: update byacc to 20200330
+OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_calc1.y
+OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_demo.y
+OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_destroy1.y
+OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_destroy2.y
+OLD_FILES+=usr/tests/usr.bin/yacc/btyacc_destroy3.y
+OLD_FILES+=usr/tests/usr.bin/yacc/err_inherit1.y
+OLD_FILES+=usr/tests/usr.bin/yacc/err_inherit2.y
+OLD_FILES+=usr/tests/usr.bin/yacc/err_inherit3.y
+OLD_FILES+=usr/tests/usr.bin/yacc/err_inherit4.y
+OLD_FILES+=usr/tests/usr.bin/yacc/err_inherit5.y
+OLD_FILES+=usr/tests/usr.bin/yacc/inherit0.y
+OLD_FILES+=usr/tests/usr.bin/yacc/inherit1.y
+OLD_FILES+=usr/tests/usr.bin/yacc/inherit2.y
+
# 20200706: update of sglist(9), r360574
OLD_FILES+=usr/share/man/man9/sglist_append_ext_pgs.9.gz
OLD_FILES+=usr/share/man/man9/sglist_append_mb_ext_pgs.9.gz
diff --git a/RELNOTES b/RELNOTES
index 2d509db2d872..c78f92c68977 100644
--- a/RELNOTES
+++ b/RELNOTES
@@ -10,6 +10,13 @@ newline. Entries should be separated by a newline.
Changes to this file should not be MFCed.
+r363253:
+ SCTP support has been removed from GENERIC kernel configurations.
+ The SCTP stack is now built as sctp.ko and can be dynamically loaded.
+
+r363233:
+ Merge sendmail 8.16.1: See contrib/sendmail/RELEASE_NOTES for details.
+
r363180:
The safexcel(4) crypto offload driver has been added.
diff --git a/bin/ps/print.c b/bin/ps/print.c
index b4458b453cdd..3d3a543c8a5d 100644
--- a/bin/ps/print.c
+++ b/bin/ps/print.c
@@ -723,12 +723,19 @@ priorityr(KINFO *k, VARENT *ve __unused)
break;
case RTP_PRIO_NORMAL:
/* alias for PRI_TIMESHARE */
- asprintf(&str, "normal:%u", level - PRI_MIN_TIMESHARE);
+ if (level >= PRI_MIN_TIMESHARE)
+ asprintf(&str, "normal:%u", level - PRI_MIN_TIMESHARE);
+ else
+ asprintf(&str, "kernel:%u", level - PRI_MIN_KERN);
break;
case RTP_PRIO_IDLE:
/* alias for PRI_IDLE */
asprintf(&str, "idle:%u", level - PRI_MIN_IDLE);
break;
+ case RTP_PRIO_ITHD:
+ /* alias for PRI_ITHD */
+ asprintf(&str, "intr:%u", level - PRI_MIN_ITHD);
+ break;
default:
asprintf(&str, "%u:%u", class, level);
break;
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 b/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
index 6fe0c18d4759..980d4da0e31b 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7
@@ -521,10 +521,9 @@ property has been set larger than 128KB, and will return to being
once all filesystems that have ever had their recordsize larger than 128KB
are destroyed.
.Pp
-Please note that booting from datasets that have recordsize greater than
-128KB is
-.Em NOT
-supported by the
+Booting from datasets that use the
+.Sy large_block
+feature is supported by the
.Fx
boot loader.
.It Sy large_dnode
diff --git a/contrib/byacc/test/calc.tab.c b/contrib/byacc/test/calc.tab.c
deleted file mode 100644
index 1f3a81f58dbc..000000000000
--- a/contrib/byacc/test/calc.tab.c
+++ /dev/null
@@ -1,668 +0,0 @@
-#ifndef lint
-static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
-#endif
-
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-
-#define YYEMPTY (-1)
-#define yyclearin (yychar = YYEMPTY)
-#define yyerrok (yyerrflag = 0)
-#define YYRECOVERING() (yyerrflag != 0)
-
-
-#ifndef yyparse
-#define yyparse calc_parse
-#endif /* yyparse */
-
-#ifndef yylex
-#define yylex calc_lex
-#endif /* yylex */
-
-#ifndef yyerror
-#define yyerror calc_error
-#endif /* yyerror */
-
-#ifndef yychar
-#define yychar calc_char
-#endif /* yychar */
-
-#ifndef yyval
-#define yyval calc_val
-#endif /* yyval */
-
-#ifndef yylval
-#define yylval calc_lval
-#endif /* yylval */
-
-#ifndef yydebug
-#define yydebug calc_debug
-#endif /* yydebug */
-
-#ifndef yynerrs
-#define yynerrs calc_nerrs
-#endif /* yynerrs */
-
-#ifndef yyerrflag
-#define yyerrflag calc_errflag
-#endif /* yyerrflag */
-
-#ifndef yylhs
-#define yylhs calc_lhs
-#endif /* yylhs */
-
-#ifndef yylen
-#define yylen calc_len
-#endif /* yylen */
-
-#ifndef yydefred
-#define yydefred calc_defred
-#endif /* yydefred */
-
-#ifndef yydgoto
-#define yydgoto calc_dgoto
-#endif /* yydgoto */
-
-#ifndef yysindex
-#define yysindex calc_sindex
-#endif /* yysindex */
-
-#ifndef yyrindex
-#define yyrindex calc_rindex
-#endif /* yyrindex */
-
-#ifndef yygindex
-#define yygindex calc_gindex
-#endif /* yygindex */
-
-#ifndef yytable
-#define yytable calc_table
-#endif /* yytable */
-
-#ifndef yycheck
-#define yycheck calc_check
-#endif /* yycheck */
-
-#ifndef yyname
-#define yyname calc_name
-#endif /* yyname */
-
-#ifndef yyrule
-#define yyrule calc_rule
-#endif /* yyrule */
-#define YYPREFIX "calc_"
-
-#define YYPURE 0
-
-#line 2 "calc.y"
-# include <stdio.h>
-# include <ctype.h>
-
-int regs[26];
-int base;
-
-extern int yylex(void);
-static void yyerror(const char *s);
-
-#line 109 "calc.tab.c"
-
-#ifndef YYSTYPE
-typedef int YYSTYPE;
-#endif
-
-/* compatibility with bison */
-#ifdef YYPARSE_PARAM
-/* compatibility with FreeBSD */
-# ifdef YYPARSE_PARAM_TYPE
-# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
-# else
-# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
-# endif
-#else
-# define YYPARSE_DECL() yyparse(void)
-#endif
-
-/* Parameters sent to lex. */
-#ifdef YYLEX_PARAM
-# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
-# define YYLEX yylex(YYLEX_PARAM)
-#else
-# define YYLEX_DECL() yylex(void)
-# define YYLEX yylex()
-#endif
-
-/* Parameters sent to yyerror. */
-#ifndef YYERROR_DECL
-#define YYERROR_DECL() yyerror(const char *s)
-#endif
-#ifndef YYERROR_CALL
-#define YYERROR_CALL(msg) yyerror(msg)
-#endif
-
-extern int YYPARSE_DECL();
-
-#define DIGIT 257
-#define LETTER 258
-#define UMINUS 259
-#define YYERRCODE 256
-static const short calc_lhs[] = { -1,
- 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 3,
-};
-static const short calc_len[] = { 2,
- 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 2, 1, 1, 1, 2,
-};
-static const short calc_defred[] = { 1,
- 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
- 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
- 10, 11,
-};
-static const short calc_dgoto[] = { 1,
- 7, 8, 9,
-};
-static const short calc_sindex[] = { 0,
- -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
- -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
- -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
- 0, 0,
-};
-static const short calc_rindex[] = { 0,
- 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
- 0, 0,
-};
-static const short calc_gindex[] = { 0,
- 0, 65, 0,
-};
-#define YYTABLESIZE 220
-static const short calc_table[] = { 6,
- 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
- 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
- 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
- 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
- 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
- 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
- 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
- 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
- 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
- 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
- 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
- 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
- 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
-};
-static const short calc_check[] = { 40,
- 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
- 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
- -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
- -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
- -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
- 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
- -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
- 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
- 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
- -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
- -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
- -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
- -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
- -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
- -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
-};
-#define YYFINAL 1
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 259
-#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? (YYMAXTOKEN + 1) : (a))
-#if YYDEBUG
-static const char *yyname[] = {
-
-"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
-0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,"DIGIT","LETTER","UMINUS","illegal-symbol",
-};
-static const char *yyrule[] = {
-"$accept : list",
-"list :",
-"list : list stat '\\n'",
-"list : list error '\\n'",
-"stat : expr",
-"stat : LETTER '=' expr",
-"expr : '(' expr ')'",
-"expr : expr '+' expr",
-"expr : expr '-' expr",
-"expr : expr '*' expr",
-"expr : expr '/' expr",
-"expr : expr '%' expr",
-"expr : expr '&' expr",
-"expr : expr '|' expr",
-"expr : '-' expr",
-"expr : LETTER",
-"expr : number",
-"number : DIGIT",
-"number : number DIGIT",
-
-};
-#endif
-
-int yydebug;
-int yynerrs;
-
-int yyerrflag;
-int yychar;
-YYSTYPE yyval;
-YYSTYPE yylval;
-
-/* define the initial stack-sizes */
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
-#endif
-#endif
-
-#define YYINITSTACKSIZE 200
-
-typedef struct {
- unsigned stacksize;
- short *s_base;
- short *s_mark;
- short *s_last;
- YYSTYPE *l_base;
- YYSTYPE *l_mark;
-} YYSTACKDATA;
-/* variables for the parser stack */
-static YYSTACKDATA yystack;
-#line 66 "calc.y"
- /* start of programs */
-
-int
-main (void)
-{
- while(!feof(stdin)) {
- yyparse();
- }
- return 0;
-}
-
-static void
-yyerror(const char *s)
-{
- fprintf(stderr, "%s\n", s);
-}
-
-int
-yylex(void)
-{
- /* lexical analysis routine */
- /* returns LETTER for a lower case letter, yylval = 0 through 25 */
- /* return DIGIT for a digit, yylval = 0 through 9 */
- /* all other characters are returned immediately */
-
- int c;
-
- while( (c=getchar()) == ' ' ) { /* skip blanks */ }
-
- /* c is now nonblank */
-
- if( islower( c )) {
- yylval = c - 'a';
- return ( LETTER );
- }
- if( isdigit( c )) {
- yylval = c - '0';
- return ( DIGIT );
- }
- return( c );
-}
-#line 347 "calc.tab.c"
-
-#if YYDEBUG
-#include <stdio.h> /* needed for printf */
-#endif
-
-#include <stdlib.h> /* needed for malloc, etc */
-#include <string.h> /* needed for memset */
-
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack(YYSTACKDATA *data)
-{
- int i;
- unsigned newsize;
- short *newss;
- YYSTYPE *newvs;
-
- if ((newsize = data->stacksize) == 0)
- newsize = YYINITSTACKSIZE;
- else if (newsize >= YYMAXDEPTH)
- return -1;
- else if ((newsize *= 2) > YYMAXDEPTH)
- newsize = YYMAXDEPTH;
-
- i = (int) (data->s_mark - data->s_base);
- newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
- if (newss == 0)
- return -1;
-
- data->s_base = newss;
- data->s_mark = newss + i;
-
- newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
- if (newvs == 0)
- return -1;
-
- data->l_base = newvs;
- data->l_mark = newvs + i;
-
- data->stacksize = newsize;
- data->s_last = data->s_base + newsize - 1;
- return 0;
-}
-
-#if YYPURE || defined(YY_NO_LEAKS)
-static void yyfreestack(YYSTACKDATA *data)
-{
- free(data->s_base);
- free(data->l_base);
- memset(data, 0, sizeof(*data));
-}
-#else
-#define yyfreestack(data) /* nothing */
-#endif
-
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-
-int
-YYPARSE_DECL()
-{
- int yym, yyn, yystate;
-#if YYDEBUG
- const char *yys;
-
- if ((yys = getenv("YYDEBUG")) != 0)
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = YYEMPTY;
- yystate = 0;
-
-#if YYPURE
- memset(&yystack, 0, sizeof(yystack));
-#endif
-
- if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
- yystack.s_mark = yystack.s_base;
- yystack.l_mark = yystack.l_base;
- yystate = 0;
- *yystack.s_mark = 0;
-
-yyloop:
- if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = YYLEX) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = yyname[YYTRANSLATE(yychar)];
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
- {
- goto yyoverflow;
- }
- yystate = yytable[yyn];
- *++yystack.s_mark = yytable[yyn];
- *++yystack.l_mark = yylval;
- yychar = YYEMPTY;
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-
- yyerror("syntax error");
-
- goto yyerrlab;
-
-yyerrlab:
- ++yynerrs;
-
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
-#endif
- if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
- {
- goto yyoverflow;
- }
- yystate = yytable[yyn];
- *++yystack.s_mark = yytable[yyn];
- *++yystack.l_mark = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yystack.s_mark);
-#endif
- if (yystack.s_mark <= yystack.s_base) goto yyabort;
- --yystack.s_mark;
- --yystack.l_mark;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = yyname[YYTRANSLATE(yychar)];
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = YYEMPTY;
- goto yyloop;
- }
-
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- if (yym)
- yyval = yystack.l_mark[1-yym];
- else
- memset(&yyval, 0, sizeof yyval);
- switch (yyn)
- {
-case 3:
-#line 28 "calc.y"
- { yyerrok ; }
-break;
-case 4:
-#line 32 "calc.y"
- { printf("%d\n",yystack.l_mark[0]);}
-break;
-case 5:
-#line 34 "calc.y"
- { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
-break;
-case 6:
-#line 38 "calc.y"
- { yyval = yystack.l_mark[-1]; }
-break;
-case 7:
-#line 40 "calc.y"
- { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
-break;
-case 8:
-#line 42 "calc.y"
- { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
-break;
-case 9:
-#line 44 "calc.y"
- { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
-break;
-case 10:
-#line 46 "calc.y"
- { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
-break;
-case 11:
-#line 48 "calc.y"
- { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
-break;
-case 12:
-#line 50 "calc.y"
- { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
-break;
-case 13:
-#line 52 "calc.y"
- { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
-break;
-case 14:
-#line 54 "calc.y"
- { yyval = - yystack.l_mark[0]; }
-break;
-case 15:
-#line 56 "calc.y"
- { yyval = regs[yystack.l_mark[0]]; }
-break;
-case 17:
-#line 61 "calc.y"
- { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
-break;
-case 18:
-#line 63 "calc.y"
- { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
-break;
-#line 609 "calc.tab.c"
- }
- yystack.s_mark -= yym;
- yystate = *yystack.s_mark;
- yystack.l_mark -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yystack.s_mark = YYFINAL;
- *++yystack.l_mark = yyval;
- if (yychar < 0)
- {
- if ((yychar = YYLEX) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = yyname[YYTRANSLATE(yychar)];
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
-#endif
- if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
- {
- goto yyoverflow;
- }
- *++yystack.s_mark = (short) yystate;
- *++yystack.l_mark = yyval;
- goto yyloop;
-
-yyoverflow:
- yyerror("yacc stack overflow");
-
-yyabort:
- yyfreestack(&yystack);
- return (1);
-
-yyaccept:
- yyfreestack(&yystack);
- return (0);
-}
diff --git a/contrib/ofed/infiniband-diags/src/ibdiag_common.c b/contrib/ofed/infiniband-diags/src/ibdiag_common.c
index ddaee8c5b559..28dedc19b7ff 100644
--- a/contrib/ofed/infiniband-diags/src/ibdiag_common.c
+++ b/contrib/ofed/infiniband-diags/src/ibdiag_common.c
@@ -120,6 +120,7 @@ static inline int val_str_true(const char *val_str)
void read_ibdiag_config(const char *file)
{
char buf[1024];
+ char orig_buf[1024];
FILE *config_fd = NULL;
char *p_prefix, *p_last;
char *name;
@@ -142,8 +143,14 @@ void read_ibdiag_config(const char *file)
if (*p_prefix == '#')
continue; /* ignore comment lines */
+ strlcpy(orig_buf, buf, sizeof(orig_buf));
name = strtok_r(p_prefix, "=", &p_last);
val_str = strtok_r(NULL, "\n", &p_last);
+ if (!name || !val_str) {
+ fprintf(stderr, "%s: malformed line in \"%s\":\n%s\n",
+ prog_name, file, orig_buf);
+ continue;
+ }
if (strncmp(name, "CA", strlen("CA")) == 0) {
free(ibd_ca);
@@ -165,6 +172,7 @@ void read_ibdiag_config(const char *file)
ibd_sakey = strtoull(val_str, 0, 0);
} else if (strncmp(name, "nd_format",
strlen("nd_format")) == 0) {
+ free(ibd_nd_format);
ibd_nd_format = strdup(val_str);
}
}
diff --git a/contrib/ofed/infiniband-diags/src/ibdiag_sa.c b/contrib/ofed/infiniband-diags/src/ibdiag_sa.c
index ea272a976d75..7154ac1b7d2c 100644
--- a/contrib/ofed/infiniband-diags/src/ibdiag_sa.c
+++ b/contrib/ofed/infiniband-diags/src/ibdiag_sa.c
@@ -222,7 +222,7 @@ static const char *ib_mad_inv_field_str[] = {
"MAD Reserved",
"MAD Reserved",
"MAD Reserved",
- "MAD Invalid value in Attribute field(s) or Attribute Modifier"
+ "MAD Invalid value in Attribute field(s) or Attribute Modifier",
"MAD UNKNOWN ERROR"
};
#define MAD_ERR_UNKNOWN (ARR_SIZE(ib_mad_inv_field_str) - 1)
diff --git a/contrib/ofed/infiniband-diags/src/iblinkinfo.c b/contrib/ofed/infiniband-diags/src/iblinkinfo.c
index 40e012d44769..13ac3e2eabc5 100644
--- a/contrib/ofed/infiniband-diags/src/iblinkinfo.c
+++ b/contrib/ofed/infiniband-diags/src/iblinkinfo.c
@@ -293,7 +293,8 @@ void print_node_header(ibnd_node_t *node, int *out_header_flag,
printf("%s%s: %s:\n",
out_prefix ? out_prefix : "",
nodetype_str(node), remap);
- (*out_header_flag)++;
+ if (out_header_flag)
+ (*out_header_flag)++;
free(remap);
}
}
@@ -397,7 +398,7 @@ void diff_node_ports(ibnd_node_t * fabric1_node, ibnd_node_t * fabric2_node,
}
if (output_diff && fabric2_port) {
- print_node_header(fabric1_node,
+ print_node_header(fabric2_node,
head_print,
NULL);
print_port(fabric2_node,
diff --git a/contrib/ofed/infiniband-diags/src/ibportstate.c b/contrib/ofed/infiniband-diags/src/ibportstate.c
index 06bd5d217550..7bea3398fb76 100644
--- a/contrib/ofed/infiniband-diags/src/ibportstate.c
+++ b/contrib/ofed/infiniband-diags/src/ibportstate.c
@@ -564,6 +564,7 @@ int main(int argc, char **argv)
printf("Port is already in enable state\n");
goto close_port;
}
+ /* FALLTHROUGH */
case ENABLE:
case RESET:
/* Polling */
diff --git a/contrib/ofed/infiniband-diags/src/ibqueryerrors.c b/contrib/ofed/infiniband-diags/src/ibqueryerrors.c
index 2329f9147718..3efaf135e62f 100644
--- a/contrib/ofed/infiniband-diags/src/ibqueryerrors.c
+++ b/contrib/ofed/infiniband-diags/src/ibqueryerrors.c
@@ -130,6 +130,7 @@ static void set_thres(char *name, uint32_t val)
static void set_thresholds(char *threshold_file)
{
char buf[1024];
+ char orig_buf[1024];
int val = 0;
FILE *thresf = fopen(threshold_file, "r");
char *p_prefix, *p_last;
@@ -156,8 +157,14 @@ static void set_thresholds(char *threshold_file)
if (*p_prefix == '#')
continue; /* ignore comment lines */
+ strlcpy(orig_buf, buf, sizeof(orig_buf));
name = strtok_r(p_prefix, "=", &p_last);
val_str = strtok_r(NULL, "\n", &p_last);
+ if (!name || !val_str) {
+ fprintf(stderr, "malformed line in \"%s\":\n%s\n",
+ threshold_file, orig_buf);
+ continue;
+ }
val = strtoul(val_str, NULL, 0);
set_thres(name, val);
diff --git a/contrib/ofed/infiniband-diags/src/ibroute.c b/contrib/ofed/infiniband-diags/src/ibroute.c
index 8e4544edb6e3..62abb9a8e1ae 100644
--- a/contrib/ofed/infiniband-diags/src/ibroute.c
+++ b/contrib/ofed/infiniband-diags/src/ibroute.c
@@ -354,6 +354,8 @@ char *dump_unicast_tables(ib_portid_t * portid, int startlid, int endlid)
" (%s):\n", startlid, endlid, portid2str(portid), nodeguid,
mapnd);
+ free(mapnd);
+
DEBUG("Switch top is 0x%x\n", top);
printf(" Lid Out Destination\n");
@@ -390,7 +392,6 @@ char *dump_unicast_tables(ib_portid_t * portid, int startlid, int endlid)
}
printf("%d %slids dumped \n", n, dump_all ? "" : "valid ");
- free(mapnd);
return 0;
}
diff --git a/contrib/ofed/libibumad/umad_str.c b/contrib/ofed/libibumad/umad_str.c
index 0a014f7e2021..412441375a2f 100644
--- a/contrib/ofed/libibumad/umad_str.c
+++ b/contrib/ofed/libibumad/umad_str.c
@@ -246,7 +246,6 @@ static const char * umad_sm_attr_str(__be16 attr_id)
default:
return (umad_common_attr_str(attr_id));
}
- return ("<unknown>");
}
static const char * umad_sa_attr_str(__be16 attr_id)
@@ -301,7 +300,6 @@ static const char * umad_sa_attr_str(__be16 attr_id)
default:
return (umad_common_attr_str(attr_id));
}
- return ("<unknown>");
}
static const char * umad_cm_attr_str(__be16 attr_id)
@@ -336,7 +334,6 @@ static const char * umad_cm_attr_str(__be16 attr_id)
default:
return (umad_common_attr_str(attr_id));
}
- return ("<unknown>");
}
const char * umad_attribute_str(uint8_t mgmt_class, __be16 attr_id)
diff --git a/contrib/ofed/libibverbs/device.c b/contrib/ofed/libibverbs/device.c
index 8b52dd51306b..d5cd2173cd8b 100644
--- a/contrib/ofed/libibverbs/device.c
+++ b/contrib/ofed/libibverbs/device.c
@@ -264,7 +264,6 @@ int __ibv_close_device(struct ibv_context *context)
{
int async_fd = context->async_fd;
int cmd_fd = context->cmd_fd;
- int cq_fd = -1;
struct verbs_context *context_ex;
struct verbs_device *verbs_device = verbs_get_device(context->device);
@@ -279,8 +278,6 @@ int __ibv_close_device(struct ibv_context *context)
close(async_fd);
close(cmd_fd);
- if (abi_ver <= 2)
- close(cq_fd);
return 0;
}
diff --git a/contrib/ofed/libibverbs/examples/rc_pingpong.c b/contrib/ofed/libibverbs/examples/rc_pingpong.c
index d01bdb80092a..12e427d6bd5e 100644
--- a/contrib/ofed/libibverbs/examples/rc_pingpong.c
+++ b/contrib/ofed/libibverbs/examples/rc_pingpong.c
@@ -273,7 +273,11 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx,
return NULL;
}
- listen(sockfd, 1);
+ if (listen(sockfd, 1) < 0) {
+ perror("listen() failed");
+ close(sockfd);
+ return NULL;
+ }
connfd = accept(sockfd, NULL, NULL);
close(sockfd);
if (connfd < 0) {
diff --git a/contrib/ofed/libibverbs/examples/srq_pingpong.c b/contrib/ofed/libibverbs/examples/srq_pingpong.c
index 1b40aa6076c0..703ebd6077c5 100644
--- a/contrib/ofed/libibverbs/examples/srq_pingpong.c
+++ b/contrib/ofed/libibverbs/examples/srq_pingpong.c
@@ -283,7 +283,11 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx,
return NULL;
}
- listen(sockfd, 1);
+ if (listen(sockfd, 1) < 0) {
+ perror("listen() failed");
+ close(sockfd);
+ return NULL;
+ }
connfd = accept(sockfd, NULL, NULL);
close(sockfd);
if (connfd < 0) {
diff --git a/contrib/ofed/libibverbs/examples/uc_pingpong.c b/contrib/ofed/libibverbs/examples/uc_pingpong.c
index fb030dc535b8..5eed25a2c25f 100644
--- a/contrib/ofed/libibverbs/examples/uc_pingpong.c
+++ b/contrib/ofed/libibverbs/examples/uc_pingpong.c
@@ -247,7 +247,11 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx,
return NULL;
}
- listen(sockfd, 1);
+ if (listen(sockfd, 1) < 0) {
+ perror("listen() failed");
+ close(sockfd);
+ return NULL;
+ }
connfd = accept(sockfd, NULL, NULL);
close(sockfd);
if (connfd < 0) {
diff --git a/contrib/ofed/libibverbs/examples/ud_pingpong.c b/contrib/ofed/libibverbs/examples/ud_pingpong.c
index 419925ab1d40..0dec9a34980c 100644
--- a/contrib/ofed/libibverbs/examples/ud_pingpong.c
+++ b/contrib/ofed/libibverbs/examples/ud_pingpong.c
@@ -245,7 +245,11 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx,
return NULL;
}
- listen(sockfd, 1);
+ if (listen(sockfd, 1) < 0) {
+ perror("listen() failed");
+ close(sockfd);
+ return NULL;
+ }
connfd = accept(sockfd, NULL, NULL);
close(sockfd);
if (connfd < 0) {
diff --git a/contrib/ofed/libibverbs/examples/xsrq_pingpong.c b/contrib/ofed/libibverbs/examples/xsrq_pingpong.c
index b3c7f703441f..4247f84ad1b5 100644
--- a/contrib/ofed/libibverbs/examples/xsrq_pingpong.c
+++ b/contrib/ofed/libibverbs/examples/xsrq_pingpong.c
@@ -630,7 +630,11 @@ static int pp_server_connect(int port)
return 1;
}
- listen(sockfd, ctx.num_clients);
+ if (listen(sockfd, ctx.num_clients) < 0) {
+ perror("listen() failed");
+ close(sockfd);
+ return 1;
+ }
for (i = 0; i < ctx.num_clients; i++) {
connfd = accept(sockfd, NULL, NULL);
diff --git a/contrib/ofed/libmlx5/bitmap.h b/contrib/ofed/libmlx5/bitmap.h
index 4b1869053e84..f7e50375ab36 100644
--- a/contrib/ofed/libmlx5/bitmap.h
+++ b/contrib/ofed/libmlx5/bitmap.h
@@ -95,17 +95,17 @@ found:
static inline void mlx5_set_bit(unsigned int nr, unsigned long *addr)
{
- addr[(nr / BITS_PER_LONG)] |= (1 << (nr % BITS_PER_LONG));
+ addr[(nr / BITS_PER_LONG)] |= (1UL << (nr % BITS_PER_LONG));
}
-static inline void mlx5_clear_bit(unsigned int nr, unsigned long *addr)
+static inline void mlx5_clear_bit(unsigned int nr, unsigned long *addr)
{
- addr[(nr / BITS_PER_LONG)] &= ~(1 << (nr % BITS_PER_LONG));
+ addr[(nr / BITS_PER_LONG)] &= ~(1UL << (nr % BITS_PER_LONG));
}
static inline int mlx5_test_bit(unsigned int nr, const unsigned long *addr)
{
- return !!(addr[(nr / BITS_PER_LONG)] & (1 << (nr % BITS_PER_LONG)));
+ return !!(addr[(nr / BITS_PER_LONG)] & (1UL << (nr % BITS_PER_LONG)));
}
#endif
diff --git a/contrib/ofed/librdmacm/examples/mckey.c b/contrib/ofed/librdmacm/examples/mckey.c
index b39a2e0c9371..65c80d4efc7f 100644
--- a/contrib/ofed/librdmacm/examples/mckey.c
+++ b/contrib/ofed/librdmacm/examples/mckey.c
@@ -469,8 +469,7 @@ static int get_dst_addr(char *dst, struct sockaddr *addr)
sib = (struct sockaddr_ib *) addr;
memset(sib, 0, sizeof *sib);
sib->sib_family = AF_IB;
- inet_pton(AF_INET6, dst, &sib->sib_addr);
- return 0;
+ return inet_pton(AF_INET6, dst, &sib->sib_addr) != 1;
}
static int run(void)
diff --git a/contrib/ofed/opensm/opensm/osm_perfmgr.c b/contrib/ofed/opensm/opensm/osm_perfmgr.c
index 3116cb3a49b8..6cd8bb7cfcff 100644
--- a/contrib/ofed/opensm/opensm/osm_perfmgr.c
+++ b/contrib/ofed/opensm/opensm/osm_perfmgr.c
@@ -1935,7 +1935,9 @@ ib_api_status_t osm_perfmgr_init(osm_perfmgr_t * pm, osm_opensm_t * osm,
pm->state =
p_opt->perfmgr ? PERFMGR_STATE_ENABLED : PERFMGR_STATE_DISABLE;
pm->sweep_state = PERFMGR_SWEEP_SLEEP;
- cl_spinlock_init(&pm->lock);
+ status = cl_spinlock_init(&pm->lock);
+ if (status != IB_SUCCESS)
+ goto Exit;
pm->sweep_time_s = p_opt->perfmgr_sweep_time_s;
pm->max_outstanding_queries = p_opt->perfmgr_max_outstanding_queries;
pm->ignore_cas = p_opt->perfmgr_ignore_cas;
diff --git a/contrib/ofed/opensm/opensm/osm_port.c b/contrib/ofed/opensm/opensm/osm_port.c
index 35010e31bbfd..47b9e920d29e 100644
--- a/contrib/ofed/opensm/opensm/osm_port.c
+++ b/contrib/ofed/opensm/opensm/osm_port.c
@@ -161,8 +161,10 @@ osm_port_t *osm_port_new(IN const ib_node_info_t * p_ni,
only the singular part that has this GUID is owned.
*/
p_physp = osm_node_get_physp_ptr(p_parent_node, port_num);
- if (!p_physp)
+ if (!p_physp) {
+ osm_port_delete(&p_port);
return NULL;
+ }
CL_ASSERT(port_guid == osm_physp_get_port_guid(p_physp));
p_port->p_physp = p_physp;
diff --git a/contrib/ofed/opensm/opensm/osm_sa_mad_ctrl.c b/contrib/ofed/opensm/opensm/osm_sa_mad_ctrl.c
index dbab4a95ecf2..2df6f18237ff 100644
--- a/contrib/ofed/opensm/opensm/osm_sa_mad_ctrl.c
+++ b/contrib/ofed/opensm/opensm/osm_sa_mad_ctrl.c
@@ -373,6 +373,7 @@ static void sa_mad_ctrl_rcv_callback(IN osm_madw_t * p_madw, IN void *context,
case IB_MAD_METHOD_GETMULTI:
#endif
is_get_request = TRUE;
+ /* FALLTHROUGH */
case IB_MAD_METHOD_SET:
case IB_MAD_METHOD_DELETE:
/* if we are closing down simply do nothing */
diff --git a/contrib/sendmail/CACerts b/contrib/sendmail/CACerts
index b5deb36b19b1..630707555657 100644
--- a/contrib/sendmail/CACerts
+++ b/contrib/sendmail/CACerts
@@ -1,4 +1,3 @@
-# $Id: CACerts,v 8.6 2013-01-18 15:14:17 ca Exp $
# This file contains some CA certificates that are used to sign the
# certificates of mail servers of members of the sendmail consortium
# who may reply to questions etc sent to sendmail.org.
@@ -10,189 +9,92 @@ Certificate:
Data:
Version: 3 (0x2)
Serial Number:
- 92:91:67:de:e0:ef:2c:e4
+ 81:9d:41:0f:40:55:ac:4a
Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2015/emailAddress=ca+ca-rsa2015@esmtp.org
+ Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=CA/emailAddress=ca+ca-rsa2018@esmtp.org
Validity
- Not Before: Mar 2 19:15:29 2015 GMT
- Not After : Mar 1 19:15:29 2018 GMT
- Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2015/emailAddress=ca+ca-rsa2015@esmtp.org
+ Not Before: Feb 27 02:30:55 2018 GMT
+ Not After : Feb 26 02:30:55 2021 GMT
+ Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=CA/emailAddress=ca+ca-rsa2018@esmtp.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
- 00:b9:1a:a1:56:ce:cb:16:af:4f:96:ba:2a:70:31:
- 70:d3:86:6c:7a:46:26:47:42:3f:de:49:57:3e:08:
- 1e:10:25:bf:06:8f:ca:fd:f4:5e:6a:01:7d:31:4d:
- 50:88:18:43:71:66:65:42:9c:90:97:0d:95:f2:14:
- ef:d7:5e:77:ef:7d:b5:49:3f:02:bb:83:20:f7:e6:
- fc:9a:cd:13:df:60:41:28:8e:39:07:a6:a4:40:98:
- 15:1e:46:b6:04:2e:f9:ab:32:d1:8b:fe:52:81:f1:
- d2:e1:c3:cf:bf:ab:40:a7:f0:e4:e5:a2:82:37:30:
- 8c:10:7d:aa:a8:7c:7e:76:cc:5f:1a:24:d0:8c:94:
- f6:f2:7f:4a:be:2f:38:67:c0:06:e6:9e:51:ad:55:
- d0:cb:26:71:cf:f4:af:7d:5a:41:81:16:fb:26:ec:
- f0:35:01:6e:db:f9:e9:00:d7:d0:89:7b:cf:88:16:
- 8b:1c:8f:77:1f:5d:ef:70:04:28:76:c5:1b:c6:23:
- 8d:49:6b:f0:b8:21:56:d6:7d:68:6c:be:21:e3:e6:
- e3:1d:6f:a5:ea:dc:83:e4:27:b3:6f:5f:1b:3d:33:
- a1:d5:d3:f0:73:1a:12:eb:d9:95:00:71:59:16:b4:
- e4:60:38:b2:2e:7f:b7:d4:c5:e9:3f:74:e4:48:38:
- 29:89
+ 00:b8:a3:8d:79:28:c1:1f:9c:11:74:43:26:e1:3b:
+ cc:14:87:5b:6b:64:4c:ed:79:1b:7f:2a:03:d0:7b:
+ ef:9e:88:b0:64:36:ee:58:ef:fd:d9:c7:20:b3:71:
+ e9:6d:1e:a7:bc:c1:7c:3b:fe:2a:e4:16:2f:bc:d6:
+ 2c:f5:98:f9:c4:21:1c:ca:c3:7e:57:89:c8:a9:2f:
+ da:6b:9b:52:d6:c9:9d:98:97:6d:08:7c:a6:37:4e:
+ d4:26:bb:db:73:b0:38:ef:7d:1e:dd:8e:dd:8e:17:
+ 2f:a0:3d:a9:0e:4d:f0:2b:b8:14:23:33:ad:c8:a0:
+ e5:9d:0f:27:ad:83:a2:78:90:05:ec:29:06:91:07:
+ 45:6c:5f:ba:8e:1d:f1:d7:1b:2d:f9:99:ba:2e:27:
+ e1:03:7d:e9:d2:54:35:cc:39:79:07:83:d8:93:9b:
+ d6:ef:72:ab:d4:63:8e:6b:f7:00:66:5f:77:e8:b6:
+ bc:de:5f:8c:d0:ce:1a:c4:db:03:9d:e4:ee:0a:ec:
+ 77:c5:f2:30:69:7e:70:12:e5:c2:4a:28:3f:e7:19:
+ eb:af:41:fb:e6:a6:1d:b5:fd:2b:99:03:f5:20:90:
+ 38:73:bd:43:70:da:cf:1f:34:5d:ab:17:4b:73:cf:
+ f9:3d:e1:a2:79:14:de:d8:40:85:82:c4:5a:84:82:
+ 32:f1
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
- B1:69:DB:5E:9B:CE:1A:B4:1D:B2:6A:FC:5A:22:97:B6:24:14:6F:32
+ 42:37:75:E7:8F:12:CF:D9:EB:21:22:7D:8A:E8:49:21:FD:E2:3A:3A
X509v3 Authority Key Identifier:
- keyid:B1:69:DB:5E:9B:CE:1A:B4:1D:B2:6A:FC:5A:22:97:B6:24:14:6F:32
- DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2015/emailAddress=ca+ca-rsa2015@esmtp.org
- serial:92:91:67:DE:E0:EF:2C:E4
-
+ keyid:42:37:75:E7:8F:12:CF:D9:EB:21:22:7D:8A:E8:49:21:FD:E2:3A:3A
+ DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=CA/emailAddress=ca+ca-rsa2018@esmtp.org
+ serial:81:9D:41:0F:40:55:AC:4A
X509v3 Basic Constraints:
CA:TRUE
X509v3 Subject Alternative Name:
- email:ca+ca-rsa2015@esmtp.org
+ email:ca+ca-rsa2018@esmtp.org
X509v3 Issuer Alternative Name:
- email:ca+ca-rsa2015@esmtp.org
+ email:ca+ca-rsa2018@esmtp.org
Signature Algorithm: sha1WithRSAEncryption
- 0a:ce:07:39:77:08:c5:3a:00:04:e8:a0:3b:f7:d2:4c:79:02:
- 23:0b:da:c0:55:39:82:71:0a:0c:83:e2:de:f2:3b:fe:23:bc:
- 9b:13:34:d1:29:0a:16:3f:01:7d:9f:fb:4b:aa:12:dc:3b:7e:
- b9:27:7b:ec:0c:3f:c0:d9:f5:d8:a8:a1:9c:1c:3a:2f:40:df:
- 27:1a:1a:a0:74:00:19:b7:82:0e:f9:45:86:bf:32:da:0e:72:
- 0a:4c:2c:39:21:63:c3:1f:61:6e:e2:4d:ba:7a:26:1a:15:ce:
- b1:f6:1a:59:04:70:ed:e8:72:05:4c:fc:84:c6:a5:f4:e2:4a:
- 40:e4:42:70:87:9a:a7:02:26:3a:47:34:09:e0:7b:88:ca:fb:
- 99:d9:9b:bb:0c:52:8a:93:d5:59:30:0b:55:42:b4:bb:d2:b1:
- 49:55:81:a4:70:a0:49:19:f2:4f:61:94:af:e9:d7:62:68:65:
- 97:67:00:26:b8:9b:b2:2c:d0:2c:83:7d:3e:b3:31:73:b9:55:
- 49:53:fa:a3:ad:1b:02:67:08:9e:ce:9e:eb:9f:47:0d:6c:95:
- e9:6c:30:92:c1:94:67:ad:d9:e3:b9:61:ea:a9:72:98:81:3a:
- 62:80:70:20:9a:3e:c4:1f:6f:bd:b4:00:ec:b1:fe:71:da:91:
- 15:89:f7:8f
------BEGIN CERTIFICATE-----
-MIIFJzCCBA+gAwIBAgIJAJKRZ97g7yzkMA0GCSqGSIb3DQEBBQUAMIGlMQswCQYD
-VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIQmVya2VsZXkx
-FDASBgNVBAoMC0VuZG1haWwgT3JnMQwwCgYDVQQLDANNVEExIjAgBgNVBAMMGUNs
-YXVzIEFzc21hbm4gQ0EgUlNBIDIwMTUxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
-YTIwMTVAZXNtdHAub3JnMB4XDTE1MDMwMjE5MTUyOVoXDTE4MDMwMTE5MTUyOVow
-gaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMREwDwYDVQQHDAhC
-ZXJrZWxleTEUMBIGA1UECgwLRW5kbWFpbCBPcmcxDDAKBgNVBAsMA01UQTEiMCAG
-A1UEAwwZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAxNTEmMCQGCSqGSIb3DQEJARYX
-Y2ErY2EtcnNhMjAxNUBlc210cC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQC5GqFWzssWr0+WuipwMXDThmx6RiZHQj/eSVc+CB4QJb8Gj8r99F5q
-AX0xTVCIGENxZmVCnJCXDZXyFO/XXnfvfbVJPwK7gyD35vyazRPfYEEojjkHpqRA
-mBUeRrYELvmrMtGL/lKB8dLhw8+/q0Cn8OTlooI3MIwQfaqofH52zF8aJNCMlPby
-f0q+LzhnwAbmnlGtVdDLJnHP9K99WkGBFvsm7PA1AW7b+ekA19CJe8+IFoscj3cf
-Xe9wBCh2xRvGI41Ja/C4IVbWfWhsviHj5uMdb6Xq3IPkJ7NvXxs9M6HV0/BzGhLr
-2ZUAcVkWtORgOLIuf7fUxek/dORIOCmJAgMBAAGjggFWMIIBUjAdBgNVHQ4EFgQU
-sWnbXpvOGrQdsmr8WiKXtiQUbzIwgdoGA1UdIwSB0jCBz4AUsWnbXpvOGrQdsmr8
-WiKXtiQUbzKhgaukgagwgaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y
-bmlhMREwDwYDVQQHDAhCZXJrZWxleTEUMBIGA1UECgwLRW5kbWFpbCBPcmcxDDAK
-BgNVBAsMA01UQTEiMCAGA1UEAwwZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAxNTEm
-MCQGCSqGSIb3DQEJARYXY2ErY2EtcnNhMjAxNUBlc210cC5vcmeCCQCSkWfe4O8s
-5DAMBgNVHRMEBTADAQH/MCIGA1UdEQQbMBmBF2NhK2NhLXJzYTIwMTVAZXNtdHAu
-b3JnMCIGA1UdEgQbMBmBF2NhK2NhLXJzYTIwMTVAZXNtdHAub3JnMA0GCSqGSIb3
-DQEBBQUAA4IBAQAKzgc5dwjFOgAE6KA799JMeQIjC9rAVTmCcQoMg+Le8jv+I7yb
-EzTRKQoWPwF9n/tLqhLcO365J3vsDD/A2fXYqKGcHDovQN8nGhqgdAAZt4IO+UWG
-vzLaDnIKTCw5IWPDH2Fu4k26eiYaFc6x9hpZBHDt6HIFTPyExqX04kpA5EJwh5qn
-AiY6RzQJ4HuIyvuZ2Zu7DFKKk9VZMAtVQrS70rFJVYGkcKBJGfJPYZSv6ddiaGWX
-ZwAmuJuyLNAsg30+szFzuVVJU/qjrRsCZwiezp7rn0cNbJXpbDCSwZRnrdnjuWHq
-qXKYgTpigHAgmj7EH2+9tADssf5x2pEVifeP
------END CERTIFICATE-----
+ 0b:4c:e5:c2:ed:0a:e5:7b:95:29:22:d4:8f:5f:cb:1b:b1:e3:
+ 4c:fc:90:e7:2e:97:87:87:a2:63:0d:6d:4d:f0:1f:0d:84:11:
+ dc:df:b7:fa:c3:c6:2e:07:e9:a0:e9:a6:9f:54:17:ad:1a:d0:
+ 36:be:31:cc:a5:85:a0:45:4a:87:45:80:7e:de:ea:97:68:e0:
+ 2b:09:5d:9a:31:6f:f5:78:22:c5:66:2a:99:70:9e:6d:c4:ab:
+ f6:90:01:70:53:07:66:6c:a6:b5:ce:4b:36:05:83:87:0c:a7:
+ e0:1e:34:d0:5e:76:a4:20:71:cd:9d:c1:ae:82:27:e0:6f:16:
+ 57:74:e7:63:9f:d0:3d:72:91:6d:97:a4:82:23:84:dd:6e:0d:
+ da:43:00:a7:ce:2f:f8:79:04:67:6a:e5:b0:ab:30:d8:f1:90:
+ 10:43:3b:09:77:27:34:a4:d4:c0:25:4e:21:32:a3:ab:60:1c:
+ 9d:6e:e2:65:39:51:7f:cd:9f:88:3a:7e:f4:38:af:7b:5b:a7:
+ bb:7b:70:97:21:59:fc:5c:55:a1:db:74:0a:37:1e:33:97:5f:
+ 70:32:98:b3:d9:99:4e:08:3c:de:01:82:17:9b:49:d7:fa:c9:
+ 45:8d:93:cc:42:d6:36:f2:39:3a:47:28:3f:6f:6a:e5:23:f3:
+ 5c:d4:a3:1b
-
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- f1:41:b3:3d:ba:bd:33:49
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2012/emailAddress=ca+ca-rsa2012@esmtp.org
- Validity
- Not Before: Mar 10 02:47:46 2012 GMT
- Not After : Mar 10 02:47:46 2015 GMT
- Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2012/emailAddress=ca+ca-rsa2012@esmtp.org
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- Public-Key: (2048 bit)
- Modulus:
- 00:a2:80:fc:c6:ce:7f:60:38:65:f4:38:f9:7a:d9:
- 87:fd:47:eb:3f:2c:4a:c9:38:77:6a:77:94:92:7f:
- 83:3d:99:57:2c:5f:37:bb:ba:12:10:17:56:fa:eb:
- 43:a6:4b:4c:1e:30:32:07:94:2f:5a:d8:65:49:29:
- fa:24:d1:f0:0b:45:2d:e5:d5:cb:7d:60:dc:a6:ce:
- a4:47:35:30:ee:5e:8d:c2:30:e7:a7:63:32:b0:59:
- 80:cc:8c:99:64:77:8f:50:8e:88:51:47:36:ea:9a:
- f3:b4:c0:8c:a6:ab:c6:42:57:88:b9:5f:9f:61:15:
- bb:79:65:93:ca:a9:fd:17:eb:87:26:8b:eb:b7:2b:
- 7e:33:05:2b:ba:c0:46:f7:08:fd:da:c1:50:9b:3d:
- 26:83:5c:53:97:89:2c:cc:5f:f2:7b:a8:b7:3d:fb:
- f2:b4:89:0d:43:ef:18:5c:21:75:71:cc:f0:c2:a3:
- 84:69:c0:a7:f3:9b:de:c1:c7:5a:5c:7e:68:da:49:
- 71:af:58:a8:51:9f:bd:f9:3d:bb:a5:92:fa:7b:1d:
- 52:f5:fe:90:59:95:27:65:a4:af:97:9a:4f:01:39:
- 59:7d:08:6f:a1:8f:42:47:49:bf:12:52:53:39:74:
- 8d:62:3b:bd:4c:4f:05:0f:c4:b9:3e:da:a8:0e:96:
- 05:2d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 08:38:E3:88:92:53:6E:F1:56:69:27:44:B5:4C:A0:18:CA:06:97:EB
- X509v3 Authority Key Identifier:
- keyid:08:38:E3:88:92:53:6E:F1:56:69:27:44:B5:4C:A0:18:CA:06:97:EB
- DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2012/emailAddress=ca+ca-rsa2012@esmtp.org
- serial:F1:41:B3:3D:BA:BD:33:49
-
- X509v3 Basic Constraints:
- CA:TRUE
- X509v3 Subject Alternative Name:
- email:ca+ca-rsa2012@esmtp.org
- X509v3 Issuer Alternative Name:
- email:ca+ca-rsa2012@esmtp.org
- Signature Algorithm: sha1WithRSAEncryption
- 9a:8f:4d:23:5b:30:80:e1:94:e4:66:9c:3a:17:8b:79:49:5b:
- ec:5d:e5:a1:22:2d:71:37:a1:51:e7:1d:b1:0d:a9:9b:aa:a9:
- 0d:c7:cd:d6:24:f9:e0:f0:57:be:4f:74:0c:4b:7a:42:4c:70:
- 19:2e:8e:eb:cb:1b:00:26:27:eb:1c:42:33:d5:ec:32:b4:6c:
- 7d:a3:04:a1:5c:00:49:c9:0d:4c:4d:28:37:06:22:77:ec:40:
- 15:25:3a:23:84:ae:1f:da:90:dd:c9:dc:27:ee:7c:ec:e5:df:
- b8:ba:1e:3f:ee:c2:91:a2:3f:22:92:1e:f3:06:7e:aa:e9:c3:
- 11:2d:3d:2f:85:f7:fc:d7:e2:f8:6d:70:a6:40:62:69:e7:52:
- ed:1b:19:38:72:86:08:a1:3d:47:c8:68:82:41:db:db:2a:52:
- 25:d7:49:aa:9e:c5:83:22:7d:2f:0b:df:8c:90:2d:b5:aa:33:
- c7:9b:e8:39:8f:bb:79:5b:13:2d:4e:a9:69:59:c7:09:26:e2:
- b5:53:80:86:72:bb:7c:be:e9:46:5b:d8:b2:78:42:d6:5d:c3:
- bb:3a:3b:5f:0f:e8:c3:60:fb:88:9f:3a:2b:9f:d3:7d:9f:c7:
- 32:aa:4d:34:a7:66:a1:25:16:95:a6:69:e7:86:a3:5c:b9:b9:
- df:58:05:e3
-----BEGIN CERTIFICATE-----
-MIIFJzCCBA+gAwIBAgIJAPFBsz26vTNJMA0GCSqGSIb3DQEBBQUAMIGlMQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIQmVya2VsZXkx
-FDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNNVEExIjAgBgNVBAMTGUNs
-YXVzIEFzc21hbm4gQ0EgUlNBIDIwMTIxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz
-YTIwMTJAZXNtdHAub3JnMB4XDTEyMDMxMDAyNDc0NloXDTE1MDMxMDAyNDc0Nlow
-gaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMREwDwYDVQQHEwhC
-ZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAKBgNVBAsTA01UQTEiMCAG
-A1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAxMjEmMCQGCSqGSIb3DQEJARYX
-Y2ErY2EtcnNhMjAxMkBlc210cC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCigPzGzn9gOGX0OPl62Yf9R+s/LErJOHdqd5SSf4M9mVcsXze7uhIQ
-F1b660OmS0weMDIHlC9a2GVJKfok0fALRS3l1ct9YNymzqRHNTDuXo3CMOenYzKw
-WYDMjJlkd49QjohRRzbqmvO0wIymq8ZCV4i5X59hFbt5ZZPKqf0X64cmi+u3K34z
-BSu6wEb3CP3awVCbPSaDXFOXiSzMX/J7qLc9+/K0iQ1D7xhcIXVxzPDCo4RpwKfz
-m97Bx1pcfmjaSXGvWKhRn735Pbulkvp7HVL1/pBZlSdlpK+Xmk8BOVl9CG+hj0JH
-Sb8SUlM5dI1iO71MTwUPxLk+2qgOlgUtAgMBAAGjggFWMIIBUjAdBgNVHQ4EFgQU
-CDjjiJJTbvFWaSdEtUygGMoGl+swgdoGA1UdIwSB0jCBz4AUCDjjiJJTbvFWaSdE
-tUygGMoGl+uhgaukgagwgaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9y
-bmlhMREwDwYDVQQHEwhCZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAK
-BgNVBAsTA01UQTEiMCAGA1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAxMjEm
-MCQGCSqGSIb3DQEJARYXY2ErY2EtcnNhMjAxMkBlc210cC5vcmeCCQDxQbM9ur0z
-STAMBgNVHRMEBTADAQH/MCIGA1UdEQQbMBmBF2NhK2NhLXJzYTIwMTJAZXNtdHAu
-b3JnMCIGA1UdEgQbMBmBF2NhK2NhLXJzYTIwMTJAZXNtdHAub3JnMA0GCSqGSIb3
-DQEBBQUAA4IBAQCaj00jWzCA4ZTkZpw6F4t5SVvsXeWhIi1xN6FR5x2xDambqqkN
-x83WJPng8Fe+T3QMS3pCTHAZLo7ryxsAJifrHEIz1ewytGx9owShXABJyQ1MTSg3
-BiJ37EAVJTojhK4f2pDdydwn7nzs5d+4uh4/7sKRoj8ikh7zBn6q6cMRLT0vhff8
-1+L4bXCmQGJp51LtGxk4coYIoT1HyGiCQdvbKlIl10mqnsWDIn0vC9+MkC21qjPH
-m+g5j7t5WxMtTqlpWccJJuK1U4CGcrt8vulGW9iyeELWXcO7OjtfD+jDYPuInzor
-n9N9n8cyqk00p2ahJRaVpmnnhqNcubnfWAXj
+MIIE4jCCA8qgAwIBAgIJAIGdQQ9AVaxKMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIQmVya2VsZXkx
+FDASBgNVBAoMC0VuZG1haWwgT3JnMQwwCgYDVQQLDANNVEExCzAJBgNVBAMMAkNB
+MSYwJAYJKoZIhvcNAQkBFhdjYStjYS1yc2EyMDE4QGVzbXRwLm9yZzAeFw0xODAy
+MjcwMjMwNTVaFw0yMTAyMjYwMjMwNTVaMIGOMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTERMA8GA1UEBwwIQmVya2VsZXkxFDASBgNVBAoMC0VuZG1h
+aWwgT3JnMQwwCgYDVQQLDANNVEExCzAJBgNVBAMMAkNBMSYwJAYJKoZIhvcNAQkB
+FhdjYStjYS1yc2EyMDE4QGVzbXRwLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBALijjXkowR+cEXRDJuE7zBSHW2tkTO15G38qA9B7756IsGQ27ljv
+/dnHILNx6W0ep7zBfDv+KuQWL7zWLPWY+cQhHMrDfleJyKkv2mubUtbJnZiXbQh8
+pjdO1Ca723OwOO99Ht2O3Y4XL6A9qQ5N8Cu4FCMzrcig5Z0PJ62DoniQBewpBpEH
+RWxfuo4d8dcbLfmZui4n4QN96dJUNcw5eQeD2JOb1u9yq9Rjjmv3AGZfd+i2vN5f
+jNDOGsTbA53k7grsd8XyMGl+cBLlwkooP+cZ669B++amHbX9K5kD9SCQOHO9Q3Da
+zx80XasXS3PP+T3honkU3thAhYLEWoSCMvECAwEAAaOCAT8wggE7MB0GA1UdDgQW
+BBRCN3XnjxLP2eshIn2K6Ekh/eI6OjCBwwYDVR0jBIG7MIG4gBRCN3XnjxLP2esh
+In2K6Ekh/eI6OqGBlKSBkTCBjjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlm
+b3JuaWExETAPBgNVBAcMCEJlcmtlbGV5MRQwEgYDVQQKDAtFbmRtYWlsIE9yZzEM
+MAoGA1UECwwDTVRBMQswCQYDVQQDDAJDQTEmMCQGCSqGSIb3DQEJARYXY2ErY2Et
+cnNhMjAxOEBlc210cC5vcmeCCQCBnUEPQFWsSjAMBgNVHRMEBTADAQH/MCIGA1Ud
+EQQbMBmBF2NhK2NhLXJzYTIwMThAZXNtdHAub3JnMCIGA1UdEgQbMBmBF2NhK2Nh
+LXJzYTIwMThAZXNtdHAub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQALTOXC7Qrle5Up
+ItSPX8sbseNM/JDnLpeHh6JjDW1N8B8NhBHc37f6w8YuB+mg6aafVBetGtA2vjHM
+pYWgRUqHRYB+3uqXaOArCV2aMW/1eCLFZiqZcJ5txKv2kAFwUwdmbKa1zks2BYOH
+DKfgHjTQXnakIHHNncGugifgbxZXdOdjn9A9cpFtl6SCI4Tdbg3aQwCnzi/4eQRn
+auWwqzDY8ZAQQzsJdyc0pNTAJU4hMqOrYBydbuJlOVF/zZ+IOn70OK97W6e7e3CX
+IVn8XFWh23QKNx4zl19wMpiz2ZlOCDzeAYIXm0nX+slFjZPMQtY28jk6Ryg/b2rl
+I/Nc1KMb
-----END CERTIFICATE-----
diff --git a/contrib/sendmail/FREEBSD-upgrade b/contrib/sendmail/FREEBSD-upgrade
index 451a2a0c9daf..1afee1bfd07c 100644
--- a/contrib/sendmail/FREEBSD-upgrade
+++ b/contrib/sendmail/FREEBSD-upgrade
@@ -1,6 +1,6 @@
$FreeBSD$
-sendmail 8.15.2
+sendmail 8.16.1
originals can be found at: ftp://ftp.sendmail.org/pub/sendmail/
For the import of sendmail, the following directories were renamed:
@@ -13,12 +13,16 @@ http://www.freebsd.org/doc/en_US.ISO8859-1/articles/committers-guide/subversion-
Then merged using:
-% set FSVN=svn+ssh://svn.freebsd.org/base
+% set FSVN=svn+ssh://repo.freebsd.org/base
% svn checkout $FSVN/head/contrib/sendmail head
% cd head
-% svn merge --accept=postpone $FSVN/vendor/sendmail/dist .
-% svn rm --force */Build [e-v]*/*.0 cf/cf/generic-*.cf cf/cf/Build
-% svn rm --force Build devtools doc/op/op.ps src/makesendmail src/sysexits.h
+### Replace XXXXXX with import revision number in next command:
+% svn merge -c rXXXXXX --accept=postpone '^/vendor/sendmail/dist' .
+% svn resolve --accept working cf/cf/Build \
+ cf/cf/generic-{bsd4.4,hpux{9,10},linux,mpeix,nextstep3.3,osf1,solaris,sunos4.1,ultrix4}.cf \
+ devtools doc/op/op.ps editmap/editmap.0 mail.local/mail.local.0 mailstats/mailstats.0 \
+ makemap/makemap.0 praliases/praliases.0 rmail/rmail.0 smrsh/smrsh.0 \
+ src/{aliases,mailq,newaliases,sendmail}.0 vacation/vacation.0
% svn propset -R svn:keywords FreeBSD=%H .
% svn propdel svn:keywords libmilter/docs/*.jpg
% svn diff --no-diff-deleted --old=$FSVN/vendor/sendmail/dist --new=.
@@ -98,4 +102,4 @@ infrastructure in FreeBSD:
usr.sbin/mailwrapper/Makefile
gshapiro@FreeBSD.org
-06-July-2015
+15-July-2020
diff --git a/contrib/sendmail/KNOWNBUGS b/contrib/sendmail/KNOWNBUGS
index de8bd0e15638..d3c0a2ff416d 100644
--- a/contrib/sendmail/KNOWNBUGS
+++ b/contrib/sendmail/KNOWNBUGS
@@ -271,4 +271,3 @@ Kresolve sequence dnsmx canon
be used if set instead of LOCAL_RELAY ($R). This will be fixed in a
future version.
-$Revision: 8.61 $, Last updated $Date: 2011-04-07 17:48:23 $
diff --git a/contrib/sendmail/LICENSE b/contrib/sendmail/LICENSE
index 9652abdc30d0..b0885930cc0c 100644
--- a/contrib/sendmail/LICENSE
+++ b/contrib/sendmail/LICENSE
@@ -37,7 +37,7 @@ each of the following conditions is met:
the "Copyright Notice" refers to the following language:
"Copyright (c) 1998-2014 Proofpoint, Inc. All rights reserved."
-3. Neither the name of Proofpoint, Inc. nor the University of California nor
+4. Neither the name of Proofpoint, Inc. nor the University of California nor
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 Proofpoint, Inc.
diff --git a/contrib/sendmail/PGPKEYS b/contrib/sendmail/PGPKEYS
index 361d3e7b8e15..03476f63a5ed 100644
--- a/contrib/sendmail/PGPKEYS
+++ b/contrib/sendmail/PGPKEYS
@@ -8,137 +8,1089 @@ GPG: gpg --import PGPKEYS
Other versions of PGP may require you to separate each key into a
separate file and add them one at a time.
-Type Bits KeyID Created Expires Algorithm Use
-pub 1024 0x16F4CCE9 1999-06-23 ---------- RSA Sign & Encrypt
-f16 Fingerprint16 = 18 A4 51 78 CA 72 D4 A7 ED 80 BA 8A C4 98 71 1D
-uid Sendmail Security <sendmail-security@sendmail.org>
+Note that PGP 2.X and 5.X are deprecated and may not properly
+function with newer keys.
+
+pub 4096R/CA28E5A4 2016-03-04
+fingerprint: 8E6A 5575 0635 A7EA F56C FE80 3D67 CBA7 CA28 E5A4
+uid Sendmail Security <sendmail-security@sendmail.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.2.4 (Darwin)
+Version: GnuPG v1
-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
+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
-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
-gpExpdV7qPrw9k01j5rod5PjZlG8zV0=
-=SR28
+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
+9T92qg==
+=xY3m
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+pub rsa4096/0xD583210EF51471A7 2020-04-08 [SC]
+ Key fingerprint = ADFD B709 FE1E A682 E585 5971 D583 210E F514 71A7
+uid [ full ] Sendmail Signing Key/2020 <sendmail@Sendmail.ORG>
+sub rsa4096/0x5C092A1B257B1C27 2020-04-08 [E]
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+4XUsDQOZ8aKrTpMO+Q==
+=jgHV
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+pub rsa4096/0x09E01FA03C0C504E 2019-01-09 [SC]
+ Key fingerprint = 50A3 0309 8EA2 DD7B CBEE 2ADA 09E0 1FA0 3C0C 504E
+uid Sendmail Signing Key/2019 <sendmail@Sendmail.ORG>
+sub rsa4096/0xEF9F24EFDC48FA66 2019-01-09 [E]
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+HcRQfq7rqZkS3NE+iD9D/lUyXVYfH9A=
+=jN/3
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+pub 4096R/0xF06059FD5DC7CC3F 2018-04-24 [SC]
+ Key fingerprint = A687 3D24 A4D6 D628 4AE4 2A75 F060 59FD 5DC7 CC3F
+uid Sendmail Signing Key/2018 <sendmail@Sendmail.ORG>
+sub rsa4096/0xC5A902D4AFC5E1F1 2018-04-24 [E]
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+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
+=K0Kz
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+pub 4096R/6BF726AD 2016-12-31
+ Key fingerprint = 3C8A 1E8E 7F44 CADE 114F ED46 4BC9 BDA6 6BF7 26AD
+uid Sendmail Signing Key/2017 <sendmail@Sendmail.ORG>
+sub 4096R/18F184A2 2016-12-31
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+9M1ae1yHng==
+=Lt+h
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+pub 2048R/29FB03DE 2016-01-04
+fingerprint: 0F5C 96AE C8E6 9E9C 8E54 2E5C 6D4C D194 29FB 03DE
+uid Sendmail Signing Key/2016 <sendmail@Sendmail.ORG>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+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
+j68I
+=MdUt
-----END PGP PUBLIC KEY BLOCK-----
@@ -1581,7 +2533,7 @@ ZNSR6KHm3A2ICdH9y0fM14u2NAlZuC0QzqbUotpwSXgDMwm3P4He9CwO7IEp0e1l
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
-sec+ 1024 0x678C0A03 2001-12-18 ---------- RSA Sign & Encrypt
+sec+ 1024 0x678C0A03 2001-12-18 ---------- RSA Sign & Encrypt
f16 Fingerprint16 = 7B 02 F4 AA FC C0 22 DA 47 3E 2A 9A 9B 35 22 45
uid Sendmail Signing Key/2002 <sendmail@Sendmail.ORG>
@@ -1676,7 +2628,7 @@ AgAGBQJCGjKcAAoJEA8Ne4Mg5YjtoAQAoIvQpUF9X4yoHZWEONKNd0xTHg9dAJ9P
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
-pub 1024 0xCC374F2D 2000-12-14 ---------- RSA Sign & Encrypt
+pub 1024 0xCC374F2D 2000-12-14 ---------- RSA Sign & Encrypt
f16 Fingerprint16 = 59 AF DC 3E A2 7D 29 56 89 FA 25 70 90 0D 7E C1
uid Sendmail Signing Key/2001 <sendmail@Sendmail.ORG>
@@ -1778,7 +2730,7 @@ RFljVEUVKZ/GGg==
-----END PGP PUBLIC KEY BLOCK-----
Type Bits KeyID Created Expires Algorithm Use
-pub 1024 0xE35C5635 1999-12-13 ---------- RSA Sign & Encrypt
+pub 1024 0xE35C5635 1999-12-13 ---------- RSA Sign & Encrypt
f16 Fingerprint16 = 81 8C 58 EA 7A 9D 7C 1B 09 78 AC 5E EB 99 08 5D
uid Sendmail Signing Key/2000 <sendmail@Sendmail.ORG>
@@ -2712,83 +3664,55 @@ ThUt9uNU6kU29eAHZEBI4WheX5e2wu1BxgjVAn1LqiPRyPK3jr9kzy4=
=eOEB
-----END PGP PUBLIC KEY BLOCK-----
-Type Bits KeyID Created Expires Algorithm Use
-pub 1024 0x22327A01 1999-05-30 ---------- RSA Sign & Encrypt
-f16 Fingerprint16 = 03 3D 49 6D E4 D9 D6 01 F8 9D B0 3A 3D 68 6A 86
-uid Claus Assmann (PGP2) <ca+pgp2@Sendmail.ORG>
+pub 2048R/A5AA5BE6 2013-09-06
+fingerprint: D0EF B47E 909D 1550 525E 9DF5 1090 AF20 A5AA 5BE6
+uid Claus Assmann <ca+gpg@sendmail.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.2.4 (Darwin)
+Version: GnuPG v1
-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
-=nES8
+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
+q8WNeh9erYZriQ==
+=VuMX
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/contrib/sendmail/README b/contrib/sendmail/README
index a87989846590..5b11d025b866 100644
--- a/contrib/sendmail/README
+++ b/contrib/sendmail/README
@@ -431,8 +431,7 @@ makemap A program that creates the keyed maps used by the $( ... $)
expect to preprocess must human-convenient formats
using sed scripts before this program will like them.
But it should be functionally complete.
-praliases A program to print the DBM or NEWDB version of the
- aliases file.
+praliases A program to print the map version of the aliases file.
rmail Source for rmail(8). This is used as a delivery
agent for for UUCP, and could presumably be used by
other non-socket oriented mailers. Older versions of
@@ -447,4 +446,3 @@ sendmail Source for the sendmail program itself.
test Some test scripts (currently only for compilation aids).
vacation Source for the vacation program. NOT PART OF SENDMAIL!
-$Revision: 8.96 $, Last updated $Date: 2013-11-22 20:51:01 $
diff --git a/contrib/sendmail/RELEASE_NOTES b/contrib/sendmail/RELEASE_NOTES
index 18a7cae9faca..6a0f0c52f844 100644
--- a/contrib/sendmail/RELEASE_NOTES
+++ b/contrib/sendmail/RELEASE_NOTES
@@ -5,6 +5,124 @@ This listing shows the version of the sendmail binary, the version
of the sendmail configuration files, the date of release, and a
summary of the changes in that release.
+8.16.1/8.16.1 2020/07/05
+ SECURITY: If sendmail tried to reuse an SMTP session which had
+ already been closed by the server, then the connection
+ cache could have invalid information about the session.
+ One possible consequence was that STARTTLS was not
+ used even if offered. This problem has been fixed
+ by clearing out all relevant status information
+ when a closed session is encountered.
+ OpenSSL versions before 0.9.8 are no longer supported.
+ OpenSSL version 1.1.0 and 1.1.1 are supported.
+ Initial support for DANE (see RFC 7672 et.al.) is available if
+ the compile time option DANE is set. Only TLSA RR 3-1-x
+ is currently implemented.
+ New options SSLEngine and SSLEnginePath to support OpenSSL engines.
+ Note: this feature has so far only been tested with the
+ "chil" engine; please report problems with other engines
+ if you encounter any.
+ New option CRLPath to specify a directory which contains
+ hashes pointing to certificate revocations files.
+ Based on patch from Al Smith.
+ New rulesets tls_srv_features and tls_clt_features which
+ can return a (semicolon separated) list of TLS related
+ options, e.g., CipherList, CertFile, KeyFile,
+ see doc/op/op.me for details.
+ To automatically handle TLS interoperability problems for outgoing
+ mail, sendmail can now immediately try a connection again
+ without STARTTLS after a TLS handshake failure.
+ This can be configured globally via the option
+ TLSFallbacktoClear or per session via the 'C' flag
+ of tls_clt_features.
+ This also adds the new value "CLEAR" for the macro
+ {verify}: STARTTLS has been disabled internally for
+ a clear text delivery attempt.
+ Apply Timeout.starttls also to the server waiting for the TLS
+ handshake to begin. Based on patch from Simon Hradecky.
+ New compile time option TLS_EC to enable the use of elliptic
+ curve cryptography in STARTTLS (previously available as
+ _FFR_TLS_EC).
+ Handle MIME boundaries specified in headers which contain CRLF.
+ Fix detection of loopback net (it was broken when compiled
+ with NETINET6) and only set the macros {if_addr_out}
+ and {if_family_out} if the interface of the outgoing
+ connection does not belong to the loopback net.
+ Fix logic to enable a milter to delete a recipient in
+ DeliveryMode=interactive even if it might be subject
+ to alias expansion.
+ Log name of a milter making changes (this was missing for
+ some functions).
+ Log the actual reply of a server when an SMTP delivery problem
+ occurs in a "reply=" field if possible.
+ Log user= for failed AUTH attempts if possible. Based on
+ patch from Packet Hack, Jim Hranicky, Kevin A. McGrail,
+ and Joe Quinn.
+ Add CDB as map type. Note: CDB is a "Constant DataBase", i.e.,
+ no changes can be made after it is created, hence it
+ does not work with vacation(1) nor editmap(8) (except
+ for query mode).
+ Fix some memory leaks (mostly in error cases) and properly handle
+ copied varargs in sm_io_vfprintf(). The issues were found
+ using Coverity Scan and reported (including patches) by
+ Ondřej Lysoněk of Red Hat.
+ Do not override ServerSSLOptions and ClientSSLOptions when they
+ are specified on the command line. Based on patch from
+ Hiroki Sato.
+ Add RFC7505 Null MX support for domains that declare they do not
+ accept mail.
+ New compile time option LDAP_NETWORK_TIMEOUT which is set
+ automatically when LDAPMAP is used and
+ LDAP_OPT_NETWORK_TIMEOUT is available to enable the
+ new -c option for LDAP maps to specify the network timeout.
+ CONFIG: New FEATURE(`tls_session_features') to enable standard
+ rules for tls_srv_features and tls_clt_features; for
+ details see cf/README.
+ CONFIG: New options confSSL_ENGINE and confSSL_ENGINE_PATH
+ for SSLEngine and SSLEnginePath, respectively.
+ CONFIG: New options confDANE to enable DANE support.
+ CONFIG: New option confTLS_FALLBACK_TO_CLEAR for TLSFallbacktoClear.
+ CONFIG: New extension CITag: for TLS restrictions, see cf/README
+ for details.
+ CONFIG: FEATURE(`blacklist_recipients') renamed to
+ FEATURE(`blocklist_recipients').
+ CONTRIB: cidrexpand updated to support IPv6 CIDR ranges and to
+ canonicalize IPv6 addresses; if cidrexpand is used with IPv6
+ addresses then UseCompressedIPv6Addresses must be disabled.
+ DOC: The dns map can return multiple values in a single result
+ if the -z option is used.
+ DOC: Note to set MustQuoteChars=. due to DKIM signatures.
+ LIBMILTER: Fix typo in a macro. Patch from Ignacio Goyret
+ of Alcatel-Lucent.
+ LIBMILTER: Fix reference in xxfi_negotiate documentation.
+ Patch from Sven Neuhaus.
+ LIBMILTER: Fix function name in smfi_addrcpt_par documentation.
+ Patch from G.W. Haywood.
+ LIBMILTER: Fix a potential memory leak in smfi_setsymlist().
+ Patch from Martin Svec.
+ MAKEMAP: New map type "implicit" refers to the first available type,
+ i.e., it depends on the compile time options NEWDB, DBM,
+ and CDB. This can be used in conjunction with the
+ "implicit" map type in sendmail.cf.
+ Note: makemap, libsmdb, and sendmail must be compiled
+ with the same options (and library versions of course).
+ Portability:
+ Add support for Darwin 14-18 (Mac OS X 10.x).
+ New option HAS_GETHOSTBYNAME2: set if your system
+ supports gethostbyname2(2).
+ Set SM_CONF_SEM=2 for FreeBSD 12 and later due to
+ changes in sys/sem.h
+ On Linux set MAXHOSTNAMELEN (the maximum length
+ of a FQHN) to 256 if it is less than that value.
+ Added Files:
+ cf/feature/blocklist_recipients.m4
+ cf/feature/tls_failures.m4
+ devtools/OS/Darwin.14.x
+ devtools/OS/Darwin.15.x
+ devtools/OS/Darwin.16.x
+ libsmdb/smcdb.c
+ sendmail/ratectrl.h
+
8.15.2/8.15.2 2015/07/03
If FEATURE(`nopercenthack') is used then some bogus input triggered
a recursion which was caught and logged as
@@ -104,7 +222,7 @@ summary of the changes in that release.
The option CipherList sets the list of ciphers for STARTTLS.
See ciphers(1) for possible values.
Do not log "STARTTLS: internal error: tls_verify_cb: ssl == NULL"
- if a CRLFfile is in use (and LogLevel is 14 or higher.)
+ if a CRLFile is in use (and LogLevel is 14 or higher.)
Store a more specific TLS protocol version in ${tls_version}
instead of a generic one, e.g., TLSv1 instead of
TLSv1/SSLv3.
@@ -127,7 +245,7 @@ summary of the changes in that release.
A new map type "arpa" is available to reverse an IP (IPv4 or IPv6)
address. It returns the string for the PTR lookup, but
without trailing {ip6,in-addr}.arpa.
- New operation mode 'C' just checks the configuration file, e.g.,
+ New operation mode 'C' just checks the configuration file, e.g.,
sendmail -C new.cf -bC
will perform a basic syntax/consistency check of new.cf.
The mailer flag 'I' is deprecated and will be removed in a
@@ -740,7 +858,7 @@ summary of the changes in that release.
Patches from Nelson Fung.
CONTRIB: cidrexpand uses a hash symbol as comment character and
ignores everything after it unless it is in quotes or
- preceeded by a backslash.
+ preceded by a backslash.
DEVTOOLS: New macro confMKDIR: if set to a program that creates
directories, then it used for "make install" to create
the required installation directories.
@@ -2465,7 +2583,7 @@ summary of the changes in that release.
noted by Greg Robinson of the Defence Science and
Technology Organisation of Australia.
CONFIG: dnsbl: If an argument specifies an error message in case
- of temporary lookup failures for DNS based blacklists
+ of temporary lookup failures for DNS based blocklists
then use it.
LIBMILTER: Install mfdef.h, required by mfapi.h. Problem noted by
Richard A. Nelson of Debian.
@@ -2539,7 +2657,7 @@ summary of the changes in that release.
is "pw", which means to use getpwnam(). New mailbox database
types can be added by adding custom code to libsm/mbdb.c.
Queue file names are now 15 characters long, rather than 14 characters
- long, to accomodate envelope splitting. File systems with
+ long, to accommodate envelope splitting. File systems with
a 14 character file name length limit are no longer
supported.
Recipient list used for delivery now gets internally ordered by
@@ -2580,7 +2698,7 @@ summary of the changes in that release.
New ruleset srv_features to enable/disable certain features in the
server per connection. See doc/op/op.me for details.
New ruleset tls_rcpt to decide whether to send e-mail to a particular
- recipient; useful to decide whether a conection is secure
+ recipient; useful to decide whether a connection is secure
enough on a per recipient basis.
New option TLSSrvOptions to modify some aspects of the server
for STARTTLS.
@@ -2591,7 +2709,7 @@ summary of the changes in that release.
Macro expand filenames/directories for certs and keys in the .cf file.
Proposed by Neil Rickert of Northern Illinois University.
Generate an ephemeral RSA key for a STARTTLS connection only if
- really required. This change results in a noticable
+ really required. This change results in a noticeable
performance gains on most machines. Moreover, if shared
memory is in use, reuse the key several times.
Add queue groups which can be used to group queue directories with
@@ -3500,7 +3618,7 @@ summary of the changes in that release.
CONFIG: Reject addresses of the form a!b if FEATURE(`nouucp', `r')
is used. Problem noted by Phil Homewood of Asia Online,
patch from Neil Rickert of Northern Illinois University.
- CONFIG: Change the default DNS based blacklist server for
+ CONFIG: Change the default DNS based blocklist server for
FEATURE(`dnsbl') to blackholes.mail-abuse.org.
CONFIG: Deal correctly with the 'C' flag in {daemon_flags}, i.e.,
implicitly assume canonical host names.
@@ -4736,7 +4854,7 @@ summary of the changes in that release.
from Per Hedeland of Ericsson.
If a resolver ANY query is larger than the UDP packet size, the
resolver will fall back to TCP. However, some
- misconfigured firewalls black 53/TCP so the ANY lookup
+ misconfigured firewalls block 53/TCP so the ANY lookup
fails whereas an MX or A record might succeed. Therefore,
don't fail on ANY queries.
If an SMTP recipient is rejected due to syntax errors in the
@@ -5152,7 +5270,7 @@ summary of the changes in that release.
line up into 2046-character output lines (excluding the
newline). If an input line was 2047 characters long
(excluding CR-LF) and the last character was a '.',
- mail.local saw it as the end of input, transfered it to the
+ mail.local saw it as the end of input, transferred it to the
user mailbox and tried to write an `ok' back to sendmail.
If the message was much longer, both sendmail and
mail.local would deadlock waiting for each other to read
@@ -6039,7 +6157,7 @@ summary of the changes in that release.
CONFIG: FEATURE(nodns) now warns the user that the feature is a
no-op. Patch from Kari Hurtta of the Finnish
Meteorological Institute.
- CONFIG: OSTYPE(osf1) now sets DefaultUserID (confDEF_USER_ID) to
+ CONFIG: OSTYPE(osf1) now sets DefaultUser (confDEF_USER_ID) to
daemon since DEC's /bin/mail will drop the envelope
sender if run as mailnull. See the Digital UNIX section
of src/README for more information. Problem noted by
@@ -7632,7 +7750,7 @@ summary of the changes in that release.
instead of 0644. Suggested by Ann-Kian Yeo of the
National University of Singapore.
Print errors if setgid/setuid/etc. fail during delivery. This helps
- detect cases where DefaultUid is set to something that the
+ detect cases where DefaultUser is set to something that the
system can't cope with.
PORTABILITY FIXES:
Support for AIX/RS 2.2.1 from Mark Whetzel of Western
@@ -9840,7 +9958,7 @@ summary of the changes in that release.
gethostname() (instead of myhostname(), which tries
to fully qualify the name) to be consistent with
SunOS. If your hostname is unqualified, this fixes
- transfers to slave servers. Bug noted by Keith
+ transfers to secondary servers. Bug noted by Keith
McMillan of Ameritech Services, Inc.
Fix Ultrix problem: gethostbyname() can return a very large
(> 500) h_length field, which causes the sockaddr
diff --git a/contrib/sendmail/cf/README b/contrib/sendmail/cf/README
index 91e69a918223..983aa2821a1a 100644
--- a/contrib/sendmail/cf/README
+++ b/contrib/sendmail/cf/README
@@ -396,7 +396,7 @@ SMTP_MAILER_MAXMSGS [undefined] If defined, the maximum number of
messages to deliver in a single connection for the
smtp, smtp8, esmtp, or dsmtp mailers.
SMTP_MAILER_MAXRCPTS [undefined] If defined, the maximum number of
- recipients to deliver in a single connection for the
+ recipients to deliver in a single envelope for the
smtp, smtp8, esmtp, or dsmtp mailers.
SMTP_MAILER_ARGS [TCP $h] The arguments passed to the smtp mailer.
About the only reason you would want to change this
@@ -1250,7 +1250,7 @@ access_db Turns on the access database feature. The access db gives
important information about this feature. Notice:
"-T<TMPF>" is meant literal, do not replace it by anything.
-blacklist_recipients
+blocklist_recipients
Turns on the ability to block incoming mail for certain
recipient usernames, hostnames, or addresses. For
example, you can block incoming mail to user nobody,
@@ -1579,7 +1579,7 @@ require_rdns Reject mail from connecting SMTP clients without proper
Entries such as
Connect:1.2.3.4 OK
Connect:1.2 RELAY
- will whitelist IP address 1.2.3.4, so that the rDNS
+ will allowlist IP address 1.2.3.4, so that the rDNS
blocking does apply to that IP address
Entries such as
@@ -2602,7 +2602,7 @@ requires a tag. For example,
From:another.dom REJECT
This would deny mails from spammer@some.dom but you could still
-send mail to that address even if FEATURE(`blacklist_recipients')
+send mail to that address even if FEATURE(`blocklist_recipients')
is enabled. Your system will allow relaying to friend.domain, but
not from it (unless enabled by other means). Connections from that
domain will be allowed even if it ends up in one of the DNS based
@@ -2723,7 +2723,7 @@ sender address.
If you use:
- FEATURE(`blacklist_recipients')
+ FEATURE(`blocklist_recipients')
then you can add entries to the map for local users, hosts in your
domains, or addresses in your domain which should not receive mail:
@@ -2747,14 +2747,14 @@ as value part in the access map. Taking the example from above:
Mail can't be sent to spammer@aol.com or anyone at cyberspammer.com.
That's why tagged entries should be used.
-There are several DNS based blacklists which can be found by
+There are several DNS based blocklists which can be found by
querying a search engine. These are databases of spammers
maintained in DNS. To use such a database, specify
FEATURE(`dnsbl', `dnsbl.example.com')
This will cause sendmail to reject mail from any site listed in the
-DNS based blacklist. You must select a DNS based blacklist domain
+DNS based blocklist. You must select a DNS based blocklist domain
to check by specifying an argument to the FEATURE. The default
error message is
@@ -2789,14 +2789,14 @@ This FEATURE can be included several times to query different
DNS based rejection lists.
Notice: to avoid checking your own local domains against those
-blacklists, use the access_db feature and add:
+blocklists, use the access_db feature and add:
Connect:10.1 OK
Connect:127.0.0.1 RELAY
to the access map, where 10.1 is your local network. You may
want to use "RELAY" instead of "OK" to allow also relaying
-instead of just disabling the DNS lookups in the blacklists.
+instead of just disabling the DNS lookups in the blocklists.
The features described above make use of the check_relay, check_mail,
@@ -2849,7 +2849,7 @@ my.domain and you have
in the access map, then any e-mail with a sender address of
<user@my.domain> will not be rejected by check_relay even though
it would match the hostname or IP address. This allows spammers
-to get around DNS based blacklist by faking the sender address. To
+to get around DNS based blocklist by faking the sender address. To
avoid this problem you have to use tagged entries:
To:my.domain RELAY
@@ -2978,7 +2978,7 @@ limits per client IP address or net. These features can limit the
rate of connections (connections per time unit) or the number of
incoming SMTP connections, respectively. If enabled, appropriate
rulesets are called at the end of check_relay, i.e., after DNS
-blacklists and generic access_db operations. The features require
+blocklists and generic access_db operations. The features require
FEATURE(`access_db') to be listed earlier in the mc file.
Note: FEATURE(`delay_checks') delays those connection control checks
@@ -3071,13 +3071,13 @@ rulesets and map lookups, they are modified as follows: each non-printable
character and the characters '<', '>', '(', ')', '"', '+', ' ' are replaced
by their HEX value with a leading '+'. For example:
-/C=US/ST=California/O=endmail.org/OU=private/CN=Darth Mail (Cert)/Email=
+/C=US/ST=California/O=endmail.org/OU=private/CN=Darth Mail (Cert)/emailAddress=
darth+cert@endmail.org
is encoded as:
/C=US/ST=California/O=endmail.org/OU=private/CN=
-Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
+Darth+20Mail+20+28Cert+29/emailAddress=darth+2Bcert@endmail.org
(line breaks have been inserted for readability).
@@ -3089,30 +3089,27 @@ Examples:
To allow relaying for everyone who can present a cert signed by
/C=US/ST=California/O=endmail.org/OU=private/CN=
-Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
+Darth+20Mail+20+28Cert+29/emailAddress=darth+2Bcert@endmail.org
simply use:
CertIssuer:/C=US/ST=California/O=endmail.org/OU=private/CN=
-Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org RELAY
+Darth+20Mail+20+28Cert+29/emailAddress=darth+2Bcert@endmail.org RELAY
To allow relaying only for a subset of machines that have a cert signed by
/C=US/ST=California/O=endmail.org/OU=private/CN=
-Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
+Darth+20Mail+20+28Cert+29/emailAddress=darth+2Bcert@endmail.org
use:
CertIssuer:/C=US/ST=California/O=endmail.org/OU=private/CN=
-Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org SUBJECT
+Darth+20Mail+20+28Cert+29/emailAddress=darth+2Bcert@endmail.org SUBJECT
CertSubject:/C=US/ST=California/O=endmail.org/OU=private/CN=
-DeathStar/Email=deathstar@endmail.org RELAY
+DeathStar/emailAddress=deathstar@endmail.org RELAY
-Notes:
-- line breaks have been inserted after "CN=" for readability,
- each tagged entry must be one (long) line in the access map.
-- if OpenSSL 0.9.7 or newer is used then the "Email=" part of a DN
- is replaced by "emailAddress=".
+Note: line breaks have been inserted after "CN=" for readability,
+each tagged entry must be one (long) line in the access map.
Of course it is also possible to write a simple ruleset that allows
relaying for everyone who can present a cert that can be verified, e.g.,
@@ -3188,16 +3185,23 @@ CN:name name must match ${cn_subject}
CN ${client_name}/${server_name} must match ${cn_subject}
CS:name name must match ${cert_subject}
CI:name name must match ${cert_issuer}
+CITag:MYTag look up MYTag:${cert_issuer} in access map; the check
+ only succeeds if it is found with a RHS of OK.
Example: e-mail sent to secure.example.com should only use an encrypted
connection. E-mail received from hosts within the laptop.example.com domain
should only be accepted if they have been authenticated. The host which
receives e-mail for darth@endmail.org must present a cert that uses the
-CN smtp.endmail.org.
+CN smtp.endmail.org. E-mail sent to safe.example.com must be verified,
+have a matching CN, and must present a cert signed by a CA with one of
+the listed DNs.
-TLS_Srv:secure.example.com ENCR:112
-TLS_Clt:laptop.example.com PERM+VERIFY:112
+TLS_Srv:secure.example.com ENCR:112
+TLS_Clt:laptop.example.com PERM+VERIFY:112
TLS_Rcpt:darth@endmail.org ENCR:112+CN:smtp.endmail.org
+TLS_Srv:safe.example.net VERIFY+CN++CITag:MyCA
+MyCA:/C=US/ST=CA/O=safe/CN=example.net/ OK
+MyCA:/C=US/ST=CA/O=secure/CN=example.net/ OK
TLS Options per Session
@@ -3217,6 +3221,7 @@ options:
- Options: compare {Server,Client}SSLOptions.
- CipherList: same as the global option.
- CertFile, KeyFile: {Server,Client}{Cert,Key}File
+- Flags: see doc/op/op.me for details.
If FEATURE(`tls_session_features') is used, then default rulesets
are activated which look up entries in the access map with the tags
@@ -3234,15 +3239,12 @@ If FEATURE(`tls_session_features') is not used the user can provide
their own rulesets which must return the appropriate data.
If the rulesets are not defined or do not return a value, the
default TLS options are not modified.
-(These rulesets require the sendmail binary to be built with
-_FFR_TLS_SE_OPTS enabled.)
-About 2): the ruleset try_tls (srv_features) can be used that work
-together with the access map. Entries for the access map must be
-tagged with Try_TLS (Srv_Features) and refer to the hostname or IP
-address of the connecting system. A default case can be specified
-by using just the tag. For example, the following entries in the
-access map:
+About 2): the ruleset try_tls (srv_features) can be used together
+with the access map. Entries for the access map must be tagged
+with Try_TLS (Srv_Features) and refer to the hostname or IP address
+of the connecting system. A default case can be specified by using
+just the tag. For example, the following entries in the access map:
Try_TLS:broken.server NO
Srv_Features:my.domain v
@@ -3654,7 +3656,7 @@ for. In particular:
if your system allows "file giveaways" (that is, if a non-root
user can chown any file they own to any other user).
-* If your system allows file giveaways, DO NOT create a publically
+* If your system allows file giveaways, DO NOT create a publicly
writable directory for forward files. This will allow anyone
to steal anyone else's e-mail. Instead, create a script that
copies the .forward file from users' home directories once a
@@ -4011,6 +4013,10 @@ confUSERDB_SPEC UserDatabaseSpec
confFALLBACK_MX FallbackMXhost [undefined] Fallback MX host.
confFALLBACK_SMARTHOST FallbackSmartHost
[undefined] Fallback smart host.
+confTLS_FALLBACK_TO_CLEAR TLSFallbacktoClear
+ [undefined] If set, immediately try
+ a connection again without STARTTLS
+ after a TLS handshake failure.
confTRY_NULL_MX_LIST TryNullMXList [False] If this host is the best MX
for a host and other arrangements
haven't been made, try connecting
@@ -4364,10 +4370,13 @@ confCLIENT_KEY ClientKeyFile [undefined] File containing the
cert.
confCRL CRLFile [undefined] File containing certificate
revocation status, useful for X.509v3
- authentication. Note that CRL requires
- at least OpenSSL version 0.9.7.
+ authentication.
+confCRL_PATH CRLPath [undefined] Directory containing
+ hashes pointing to certificate
+ revocation status files.
confDH_PARAMETERS DHParameters [undefined] File containing the
DH parameters.
+confDANE DANE [false] Enable DANE support.
confRAND_FILE RandFile [undefined] File containing random
data (use prefix file:) or the
name of the UNIX socket if EGD is
@@ -4379,6 +4388,9 @@ confCERT_FINGERPRINT_ALGORITHM CertFingerprintAlgorithm
[undefined] The fingerprint algorithm
(digest) to use for the presented
cert.
+confSSL_ENGINE SSLEngine [undefined] Name of SSLEngine.
+confSSL_ENGINE_PATH SSLEnginePath [undefined] Path to dynamic library
+ for SSLEngine.
confNICE_QUEUE_RUN NiceQueueRun [undefined] If set, the priority of
queue runners is set the given value
(nice(3)).
@@ -4799,7 +4811,6 @@ M4 DIVERSIONS
5 locally interpreted names (overrides $R)
6 local configuration (at top of file)
7 mailer definitions
- 8 DNS based blacklists
+ 8 DNS based blocklists
9 special local rulesets (1 and 2)
-$Revision: 8.730 $, Last updated $Date: 2014-01-16 15:55:51 $
diff --git a/contrib/sendmail/cf/cf/Makefile b/contrib/sendmail/cf/cf/Makefile
index efec478cb95a..bf6f031b2f11 100644
--- a/contrib/sendmail/cf/cf/Makefile
+++ b/contrib/sendmail/cf/cf/Makefile
@@ -103,7 +103,7 @@ M4FILES=\
${CFDIR}/feature/bcc.m4 \
${CFDIR}/feature/bestmx_is_local.m4 \
${CFDIR}/feature/bitdomain.m4 \
- ${CFDIR}/feature/blacklist_recipients.m4 \
+ ${CFDIR}/feature/blocklist_recipients.m4 \
${CFDIR}/feature/conncontrol.m4 \
${CFDIR}/feature/dnsbl.m4 \
${CFDIR}/feature/domaintable.m4 \
diff --git a/contrib/sendmail/cf/cf/knecht.mc b/contrib/sendmail/cf/cf/knecht.mc
index 720389189eb4..2b79eb227927 100644
--- a/contrib/sendmail/cf/cf/knecht.mc
+++ b/contrib/sendmail/cf/cf/knecht.mc
@@ -46,7 +46,7 @@ define(`CYRUS_MAILER_PATH', `/usr/local/cyrus/bin/deliver')
define(`CYRUS_MAILER_FLAGS', `fAh5@/:|')
FEATURE(`access_db')
-FEATURE(`blacklist_recipients')
+FEATURE(`blocklist_recipients')
FEATURE(`local_lmtp')
FEATURE(`virtusertable')
FEATURE(`mailertable')
@@ -234,7 +234,7 @@ Kstorage macro
LOCAL_RULESETS
######################################################################
-### check for the existance of the X-MailScanner Header
+### check for the existence of the X-MailScanner Header
HX-MailScanner: $>+CheckXMSc
D{SobigFPat}Found to be clean
D{SobigFMsg}This message may contain the Sobig.F virus.
diff --git a/contrib/sendmail/cf/cf/submit.cf b/contrib/sendmail/cf/cf/submit.cf
index 6295d32db006..63d7cb720eb7 100644
--- a/contrib/sendmail/cf/cf/submit.cf
+++ b/contrib/sendmail/cf/cf/submit.cf
@@ -16,8 +16,8 @@
#####
##### SENDMAIL CONFIGURATION FILE
#####
-##### built by ca@sandman.dev-lab.sendmail.com on Thu Jul 2 05:24:31 PDT 2015
-##### in /x/ca/smi.git/sendmail/OpenSource/sendmail-8.15.2/cf/cf
+##### built by ca@lab.smi.sendmail.com on Thu Jul 2 22:41:57 PDT 2020
+##### in /var/tmp/ca/sm8.git/sendmail/OpenSource/sendmail-8.16.1/cf/cf
##### using ../ as configuration include directory
#####
######################################################################
@@ -114,7 +114,7 @@ D{MTAHost}[127.0.0.1]
# Configuration version number
-DZ8.15.2/Submit
+DZ8.16.1/Submit
###############
@@ -513,6 +513,12 @@ O PidFile=/var/spool/clientmqueue/sm-client.pid
#O ServerSSLOptions
# client side SSL options
#O ClientSSLOptions
+# SSL Engine
+#O SSLEngine
+# Path to dynamic library for SSLEngine
+#O SSLEnginePath
+# TLS: fall back to clear text after handshake failure?
+#O TLSFallbacktoClear
# Input mail filters
#O InputMailFilters
@@ -532,12 +538,16 @@ O PidFile=/var/spool/clientmqueue/sm-client.pid
#O ClientKeyFile
# File containing certificate revocation lists
#O CRLFile
+# Directory containing hashes pointing to certificate revocation status files
+#O CRLPath
# DHParameters (only required if DSA/DH is used)
#O DHParameters
# Random data source (required for systems without /dev/urandom under OpenSSL)
#O RandFile
# fingerprint algorithm (digest) to use for the presented cert
#O CertFingerprintAlgorithm
+# enable DANE?
+#O DANE=false
# Maximum number of "useless" commands before slowing down
#O MaxNOOPCommands=20
@@ -1257,6 +1267,7 @@ R$* $| $* $@ $>"TLS_connection" $1
### ${verify}
######################################################################
Stls_server
+
R$* $@ $>"TLS_connection" $1
######################################################################
@@ -1268,6 +1279,7 @@ R$* $@ $>"TLS_connection" $1
######################################################################
STLS_connection
RSOFTWARE $#error $@ 4.7.0 $: "403 TLS handshake."
+RDANE_FAIL $#error $@ 4.7.0 $: "403 DANE check failed."
diff --git a/contrib/sendmail/cf/feature/bcc.m4 b/contrib/sendmail/cf/feature/bcc.m4
index 9454143f2060..5bb754bd04a3 100644
--- a/contrib/sendmail/cf/feature/bcc.m4
+++ b/contrib/sendmail/cf/feature/bcc.m4
@@ -76,7 +76,7 @@ R$* $| $* $: ifelse(len(X`'_ARG3_),`1', `$1', `_ARG3_')
ifdef(`_CANONIFY_BCC_', `dnl
R$+ @ $+ $: $1@$2 $| <$(canonicalRcpt $1 @ $2 $: $)>
R$* $| <> $@
-R$* $| <$* <TMPF>> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."
+R$* $| <$* <TMPF>> $#error $@ 4.3.0 $: _TMPFMSG_(`BCC')
R$* $| <$+> $@ $2 map matched?
')
diff --git a/contrib/sendmail/cf/feature/blacklist_recipients.m4 b/contrib/sendmail/cf/feature/blacklist_recipients.m4
index 706d11754393..5312a2e50687 100644
--- a/contrib/sendmail/cf/feature/blacklist_recipients.m4
+++ b/contrib/sendmail/cf/feature/blacklist_recipients.m4
@@ -13,7 +13,6 @@ divert(0)
VERSIONID(`$Id: blacklist_recipients.m4,v 8.14 2013-11-22 20:51:11 ca Exp $')
divert(-1)
-ifdef(`_ACCESS_TABLE_',
- `define(`_BLACKLIST_RCPT_', 1)',
- `errprint(`*** ERROR: FEATURE(blacklist_recipients) requires FEATURE(access_db)
-')')
+errprint(`WARNING: FEATURE(blacklist_recipients) is deprecated; use FEATURE(blocklist_recipients.m4).
+')
+FEATURE(`blocklist_recipients')
diff --git a/contrib/sendmail/cf/feature/blocklist_recipients.m4 b/contrib/sendmail/cf/feature/blocklist_recipients.m4
new file mode 100644
index 000000000000..7c5a1df02218
--- /dev/null
+++ b/contrib/sendmail/cf/feature/blocklist_recipients.m4
@@ -0,0 +1,19 @@
+divert(-1)
+#
+# Copyright (c) 1998, 1999 Proofpoint, 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.
+#
+#
+
+divert(0)
+VERSIONID(`$Id: blocklist_recipients.m4,v 8.14 2013-11-22 20:51:11 ca Exp $')
+divert(-1)
+
+ifdef(`_ACCESS_TABLE_',
+ `define(`_BLOCKLIST_RCPT_', 1)',
+ `errprint(`*** ERROR: FEATURE(blocklist_recipients) requires FEATURE(access_db)
+')')
diff --git a/contrib/sendmail/cf/feature/check_cert_altnames.m4 b/contrib/sendmail/cf/feature/check_cert_altnames.m4
new file mode 100644
index 000000000000..9fae74ef0a3c
--- /dev/null
+++ b/contrib/sendmail/cf/feature/check_cert_altnames.m4
@@ -0,0 +1,17 @@
+divert(-1)
+#
+# Copyright (c) 2019 Proofpoint, 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.
+#
+#
+
+divert(0)dnl
+VERSIONID(`$Id: block_bad_helo.m4,v 1.2 2013-11-22 20:51:11 ca Exp $')
+divert(-1)
+define(`_FFR_TLS_ALTNAMES', `1')
+divert(6)dnl
+O SetCertAltnames=true
diff --git a/contrib/sendmail/cf/feature/dnsbl.m4 b/contrib/sendmail/cf/feature/dnsbl.m4
index 63b86759c320..dd8fd52583f9 100644
--- a/contrib/sendmail/cf/feature/dnsbl.m4
+++ b/contrib/sendmail/cf/feature/dnsbl.m4
@@ -17,7 +17,7 @@ define(`_DNSBL_R_',`')
ifelse(defn(`_ARG_'), `',
`errprint(`*** ERROR: missing argument for FEATURE(`dnsbl')')')
LOCAL_CONFIG
-# map for DNS based blacklist lookups
+# map for DNS based blocklist lookups
Kdnsbl DNSBL_MAP -T<TMP>ifdef(`DNSBL_MAP_OPT',` DNSBL_MAP_OPT')')
divert(-1)
define(`_DNSBL_SRV_', `_ARG_')dnl
diff --git a/contrib/sendmail/cf/feature/enhdnsbl.m4 b/contrib/sendmail/cf/feature/enhdnsbl.m4
index b3a86b969c26..f0ba5c50d482 100644
--- a/contrib/sendmail/cf/feature/enhdnsbl.m4
+++ b/contrib/sendmail/cf/feature/enhdnsbl.m4
@@ -16,7 +16,7 @@ ifdef(`_EDNSBL_R_',`dnl',`dnl
VERSIONID(`$Id: enhdnsbl.m4,v 1.13 2013-11-22 20:51:11 ca Exp $')
LOCAL_CONFIG
define(`_EDNSBL_R_',`')dnl
-# map for enhanced DNS based blacklist lookups
+# map for enhanced DNS based blocklist lookups
Kednsbl dns -R A -a. -T<TMP> -r`'ifdef(`EDNSBL_TO',`EDNSBL_TO',`5')
')
divert(-1)
diff --git a/contrib/sendmail/cf/feature/tls_failures.m4 b/contrib/sendmail/cf/feature/tls_failures.m4
new file mode 100644
index 000000000000..94982110f0b8
--- /dev/null
+++ b/contrib/sendmail/cf/feature/tls_failures.m4
@@ -0,0 +1,13 @@
+divert(-1)
+#
+# Copyright (c) 2020 Proofpoint, 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.
+#
+
+errprint(`*** ERROR: FEATURE(tls_failures) has been replaced by confTLS_FALLBACK_TO_CLEAR
+')
+define(`confTLS_FALLBACK_TO_CLEAR', `true')
diff --git a/contrib/sendmail/cf/m4/cfhead.m4 b/contrib/sendmail/cf/m4/cfhead.m4
index d808955db389..7e5fa99e0ef5 100644
--- a/contrib/sendmail/cf/m4/cfhead.m4
+++ b/contrib/sendmail/cf/m4/cfhead.m4
@@ -73,6 +73,15 @@ define(`_ARG9_',`_ACC_ARG_9_(_ARGS_)')
dnl define if not yet defined: if `$1' is not defined it will be `$2'
define(`_DEFIFNOT',`ifdef(`$1',`',`define(`$1',`$2')')')
dnl ----------------------------------------
+dnl Use a "token" for this error message to make them unique?
+dnl Note: this is not a documented option. To enable it, use:
+dnl define(`_USETMPFTOKEN_', `1')dnl
+ifdef(`_USETMPFTOKEN_', `
+define(_TMPFMSG_, `"451 Temporary system failure $1. Please try again later."')
+', `dnl
+define(_TMPFMSG_, `"451 Temporary system failure. Please try again later."')
+')
+dnl ----------------------------------------
dnl add a char $2 to a string $1 if it is not there
define(`_ADDCHAR_',`define(`_I_',`eval(index(`$1',`$2') >= 0)')`'ifelse(_I_,`1',`$1',`$1$2')')
dnl ----
diff --git a/contrib/sendmail/cf/m4/proto.m4 b/contrib/sendmail/cf/m4/proto.m4
index 696bf36a5357..618dde00e24a 100644
--- a/contrib/sendmail/cf/m4/proto.m4
+++ b/contrib/sendmail/cf/m4/proto.m4
@@ -161,7 +161,7 @@ ifdef(`_ACCESS_TABLE_', `dnl
# access_db acceptance class
C{Accept}OK RELAY
ifdef(`_DELAY_COMPAT_8_10_',`dnl
-ifdef(`_BLACKLIST_RCPT_',`dnl
+ifdef(`_BLOCKLIST_RCPT_',`dnl
# possible access_db RHS for spam friends/haters
C{SpamTag}SPAMFRIEND SPAMHATER')')',
`dnl')
@@ -197,7 +197,9 @@ ifdef(`_MACRO_MAP_', `', `# macro storage map
define(`_MACRO_MAP_', `1')dnl
Kmacro macro')
# possible values for TLS_connection in access map
-C{Tls}VERIFY ENCR', `dnl')
+C{Tls}VERIFY ENCR
+C{TlsVerified}OK TRUSTED
+dnl', `dnl')
ifdef(`_CERT_REGEX_ISSUER_', `dnl
# extract relevant part from cert issuer
KCERTIssuer regex _CERT_REGEX_ISSUER_', `dnl')
@@ -653,6 +655,12 @@ _OPTION(CipherList, `confCIPHER_LIST', `')
_OPTION(ServerSSLOptions, `confSERVER_SSL_OPTIONS', `')
# client side SSL options
_OPTION(ClientSSLOptions, `confCLIENT_SSL_OPTIONS', `')
+# SSL Engine
+_OPTION(SSLEngine, `confSSL_ENGINE', `')
+# Path to dynamic library for SSLEngine
+_OPTION(SSLEnginePath, `confSSL_ENGINE_PATH', `')
+# TLS: fall back to clear text after handshake failure?
+_OPTION(TLSFallbacktoClear, `confTLS_FALLBACK_TO_CLEAR', `')
# Input mail filters
_OPTION(InputMailFilters, `confINPUT_MAIL_FILTERS', `')
@@ -682,12 +690,16 @@ _OPTION(ClientCertFile, `confCLIENT_CERT', `')
_OPTION(ClientKeyFile, `confCLIENT_KEY', `')
# File containing certificate revocation lists
_OPTION(CRLFile, `confCRL', `')
+# Directory containing hashes pointing to certificate revocation status files
+_OPTION(CRLPath, `confCRL_PATH', `')
# DHParameters (only required if DSA/DH is used)
_OPTION(DHParameters, `confDH_PARAMETERS', `')
# Random data source (required for systems without /dev/urandom under OpenSSL)
_OPTION(RandFile, `confRAND_FILE', `')
# fingerprint algorithm (digest) to use for the presented cert
_OPTION(CertFingerprintAlgorithm, `confCERT_FINGERPRINT_ALGORITHM', `')
+# enable DANE?
+_OPTION(DANE, `confDANE', `false')
# Maximum number of "useless" commands before slowing down
_OPTION(MaxNOOPCommands, `confMAX_NOOP_COMMANDS', `20')
@@ -1500,7 +1512,7 @@ R<$* <TMPF>> <$*> <$+> <$+> <$*> $: $&{opMode} $| TMPF <$&{addr_type}> $| $3
R<$*> <$* <TMPF>> <$+> <$+> <$*> $: $&{opMode} $| TMPF <$&{addr_type}> $| $3
ifelse(_LDAP_ROUTE_MAPTEMP_, `_TEMPFAIL_', `dnl
# ... temp fail RCPT SMTP commands
-R$={SMTPOpModes} $| TMPF <e r> $| $+ $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."')
+R$={SMTPOpModes} $| TMPF <e r> $| $+ $#error $@ 4.3.0 $: _TMPFMSG_(`OPM')')
# ... return original address for MTA to queue up
R$* $| TMPF <$*> $| $+ $@ $3
@@ -1733,7 +1745,7 @@ dnl if mark is <NO> then change it to <RELAY> if domain is "authorized"
dnl what if access map returns something else than RELAY?
dnl we are only interested in RELAY entries...
-dnl other To: entries: blacklist recipient; generic entries?
+dnl other To: entries: blocklist recipient; generic entries?
dnl if it is an error we probably do not want to relay anyway
ifdef(`_RELAY_HOSTS_ONLY_',
`R<NO> $* < @ $=R > $: <RELAY> $1 < @ $2 >
@@ -1807,7 +1819,7 @@ R<QUARANTINE:$+> <$*> $#error $@ quarantine $: $1
dnl error tag
R<ERROR:$-.$-.$-:$+> <$*> $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> <$*> $#error $: $1
-ifdef(`_ATMPF_', `R<$* _ATMPF_> <$*> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<$* _ATMPF_> <$*> $#error $@ 4.3.0 $: _TMPFMSG_(`CR')', `dnl')
dnl generic error from access map
R<$+> <$*> $#error $: $1', `dnl')
@@ -1976,7 +1988,7 @@ R<REJECT> $* $#error ifdef(`confREJECT_MSG', `$: confREJECT_MSG', `$@ 5.7.1 $:
dnl error tag
R<ERROR:$-.$-.$-:$+> $* $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> $* $#error $: $1
-ifdef(`_ATMPF_', `R<_ATMPF_> $* $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<_ATMPF_> $* $#error $@ 4.3.0 $: _TMPFMSG_(`CM')', `dnl')
dnl generic error from access map
R<$+> $* $#error $: $1 error from access db',
`dnl')
@@ -2108,9 +2120,9 @@ R$* $=O $* < @ $* @@ $=w . > $* $@ $>"Rcpt_ok" $1 $2 $3
R$* < @ $* @@ $=w . > $* $: $1 < @ $3 > $4
R$* < @ $* @@ $* > $* $: $1 < @ $2 > $4')
-ifdef(`_BLACKLIST_RCPT_',`dnl
+ifdef(`_BLOCKLIST_RCPT_',`dnl
ifdef(`_ACCESS_TABLE_', `dnl
-# blacklist local users or any host from receiving mail
+# blocklist local users or any host from receiving mail
R$* $: <?> $1
dnl user is now tagged with @ to be consistent with check_mail
dnl and to distinguish users from hosts (com would be host, com@ would be user)
@@ -2143,7 +2155,7 @@ R<QUARANTINE:$+> $* $#error $@ quarantine $: $1
dnl error tag
R<ERROR:$-.$-.$-:$+> $* $#error $@ $1.$2.$3 $: $4
R<ERROR:$+> $* $#error $: $1
-ifdef(`_ATMPF_', `R<_ATMPF_> $* $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<_ATMPF_> $* $#error $@ 4.3.0 $: _TMPFMSG_(`ROK1')', `dnl')
dnl generic error from access map
R<$+> $* $#error $: $1 error from access db
R@ $* $1 remove mark', `dnl')', `dnl')
@@ -2198,7 +2210,7 @@ R$+ < @ $+ > $| $* $: <$3> <$1 <@ $2>>',
ifdef(`_ACCESS_TABLE_', `dnl
dnl workspace: <Result-of-lookup | ?> <localpart<@domain>>
R<RELAY> $* $@ RELAY
-ifdef(`_ATMPF_', `R<$* _ATMPF_> $* $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<$* _ATMPF_> $* $#TEMP $@ 4.3.0 $: _TMPFMSG_(`ROK2')', `dnl')
R<$*> <$*> $: $2',`dnl')
@@ -2268,7 +2280,7 @@ dnl Connect:My.Host.Domain RELAY
dnl Connect:My.Net REJECT
dnl since in check_relay client_name is checked before client_addr
R<REJECT> $* $@ REJECT rejected IP address')
-ifdef(`_ATMPF_', `R<_ATMPF_> $* $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<_ATMPF_> $* $#TEMP $@ 4.3.0 $: _TMPFMSG_(`YOK1')', `dnl')
R<$*> <$*> $: $2', `dnl')
R$* $: [ $1 ] put brackets around it...
R$=w $@ RELAY ... and see if it is local
@@ -2287,7 +2299,7 @@ R<?> $+ < @ $=w > $@ RELAY FROM local', `dnl')
ifdef(`_RELAY_DB_FROM_', `dnl
R<?> $+ < @ $+ > $: <@> $>SearchList <! From> $| <F:$1@$2> ifdef(`_RELAY_DB_FROM_DOMAIN_', ifdef(`_RELAY_HOSTS_ONLY_', `<E:$2>', `<D:$2>')) <>
R<@> <RELAY> $@ RELAY RELAY FROM sender ok
-ifdef(`_ATMPF_', `R<@> <_ATMPF_> $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<@> <_ATMPF_> $#TEMP $@ 4.3.0 $: _TMPFMSG_(`YOK2')', `dnl')
', `dnl
ifdef(`_RELAY_DB_FROM_DOMAIN_',
`errprint(`*** ERROR: _RELAY_DB_FROM_DOMAIN_ requires _RELAY_DB_FROM_
@@ -2331,7 +2343,7 @@ ifdef(`_ACCESS_TABLE_', `dnl
R<?> $* $: $>D <$1> <?> <+ Connect> <$1>',`dnl')')
ifdef(`_ACCESS_TABLE_', `dnl
R<RELAY> $* $@ RELAY
-ifdef(`_ATMPF_', `R<$* _ATMPF_> $* $#TEMP $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+ifdef(`_ATMPF_', `R<$* _ATMPF_> $* $#TEMP $@ 4.3.0 $: _TMPFMSG_(`YOK3')', `dnl')
R<$*> <$*> $: $2',`dnl')
dnl end of _PROMISCUOUS_RELAY_
divert(0)
@@ -2384,7 +2396,7 @@ ifdef(`_ACCESS_TABLE_', `',
`errprint(`*** ERROR: FEATURE(`delay_checks', `argument') requires FEATURE(`access_db')
')')dnl
dnl one of the next two rules is supposed to match
-dnl this code has been copied from BLACKLIST... etc
+dnl this code has been copied from BLOCKLIST... etc
dnl and simplified by omitting some < >.
R<?> $+ < @ $=w > $: <> $1 < @ $2 > $| <F: $1@$2 > <D: $2 > <U: $1@>
R<?> $+ < @ $* > $: <> $1 < @ $2 > $| <F: $1@$2 > <D: $2 >
@@ -2688,7 +2700,7 @@ R<?>$* $: $>A <$&{server_addr}> <?> <! TLS_TRY_TAG> <>
R<?>$* $: <$(access TLS_TRY_TAG`'_TAG_DELIM_ $: ? $)>
R<?>$* $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
-R<$* _ATMPF_>$* $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+R<$* _ATMPF_>$* $#error $@ 4.3.0 $: _TMPFMSG_(`TT')', `dnl')
R<NO>$* $#error $@ 5.7.1 $: "550 do not try TLS with " $&{server_name} " ["$&{server_addr}"]"')
######################################################################
@@ -2721,7 +2733,7 @@ R$* $| $+ $: $1 $| $>SearchList <! TLS_RCPT_TAG> $| $2 <>
dnl found nothing: stop here
R$* $| <?> $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
-R$* $| <$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+R$* $| <$* _ATMPF_> $#error $@ 4.3.0 $: _TMPFMSG_(`TR')', `dnl')
dnl use the generic routine (for now)
R$* $| <$+> $@ $>"TLS_connection" $&{verify} $| <$2>')
@@ -2751,7 +2763,7 @@ R$* $| <?>$* $: $1 $| $>A <$&{client_addr}> <?> <! TLS_CLT_TAG> <>
dnl do a default lookup: just TLS_CLT_TAG
R$* $| <?>$* $: $1 $| <$(access TLS_CLT_TAG`'_TAG_DELIM_ $: ? $)>
ifdef(`_ATMPF_', `dnl tempfail?
-R$* $| <$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+R$* $| <$* _ATMPF_> $#error $@ 4.3.0 $: _TMPFMSG_(`TC')', `dnl')
R$* $@ $>"TLS_connection" $1', `dnl
R$* $| $* $@ $>"TLS_connection" $1')
@@ -2769,6 +2781,8 @@ ifdef(`_LOCAL_TLS_SERVER_', `dnl
R$* $: $1 $| $>"Local_tls_server" $1
R$* $| $#$* $#$2
R$* $| $* $: $1', `dnl')
+ifdef(`_TLS_FAILURES_',`dnl
+R$* $: $(macro {saved_verify} $@ $1 $) $1')
ifdef(`_ACCESS_TABLE_', `dnl
dnl store name of other side
R$* $: $(macro {TLS_Name} $@ $&{server_name} $) $1
@@ -2777,7 +2791,7 @@ R$* $| <?>$* $: $1 $| $>A <$&{server_addr}> <?> <! TLS_SRV_TAG> <>
dnl do a default lookup: just TLS_SRV_TAG
R$* $| <?>$* $: $1 $| <$(access TLS_SRV_TAG`'_TAG_DELIM_ $: ? $)>
ifdef(`_ATMPF_', `dnl tempfail?
-R$* $| <$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+R$* $| <$* _ATMPF_> $#error $@ 4.3.0 $: _TMPFMSG_(`TS')', `dnl')
R$* $@ $>"TLS_connection" $1', `dnl
R$* $@ $>"TLS_connection" $1')
@@ -2798,6 +2812,7 @@ STLS_connection
ifdef(`_ACCESS_TABLE_', `dnl', `dnl use default error
dnl deal with TLS handshake failures: abort
RSOFTWARE $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') TLS handshake."
+RDANE_FAIL $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') DANE check failed."
divert(-1)')
dnl common ruleset for tls_{client|server}
dnl input: ${verify} $| <ResultOfLookup> [<>]
@@ -2813,14 +2828,19 @@ R$* $| <$={Tls} $*> $: $1 $| <ifdef(`TLS_PERM_ERR', `503:5.7.0', `403:4.7.0')>
dnl workspace: ${verify} $| [<SMTP:ESC>] <ResultOfLookup>
# deal with TLS handshake failures: abort
RSOFTWARE $| <$-:$+> $* $#error $@ $2 $: $1 " TLS handshake failed."
-dnl no <reply:dns> i.e. not requirements in the access map
+dnl no <reply:dns> i.e. no requirements in the access map
dnl use default error
RSOFTWARE $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') TLS handshake failed."
# deal with TLS protocol errors: abort
RPROTOCOL $| <$-:$+> $* $#error $@ $2 $: $1 " STARTTLS failed."
-dnl no <reply:dns> i.e. not requirements in the access map
+dnl no <reply:dns> i.e. no requirements in the access map
dnl use default error
RPROTOCOL $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') STARTTLS failed."
+# deal with DANE errors: abort
+RDANE_FAIL $| <$-:$+> $* $#error $@ $2 $: $1 " DANE check failed."
+dnl no <reply:dns> i.e. no requirements in the access map
+dnl use default error
+RDANE_FAIL $| $* $#error $@ ifdef(`TLS_PERM_ERR', `5.7.0', `4.7.0') $: "ifdef(`TLS_PERM_ERR', `503', `403') DANE check failed."
R$* $| <$*> <VERIFY> $: <$2> <VERIFY> <> $1
dnl separate optional requirements
R$* $| <$*> <VERIFY + $+> $: <$2> <VERIFY> <$3> $1
@@ -2834,16 +2854,16 @@ R$* $| $* $@ OK
# other side did authenticate (via STARTTLS)
dnl workspace: <SMTP:ESC> <{VERIFY,ENCR}[:BITS]> <[extensions]> ${verify}
dnl only verification required and it succeeded
-R<$*><VERIFY> <> OK $@ OK
+R<$*><VERIFY> <> $={TlsVerified} $@ OK
dnl verification required and it succeeded but extensions are given
dnl change it to <SMTP:ESC> <REQ:0> <extensions>
-R<$*><VERIFY> <$+> OK $: <$1> <REQ:0> <$2>
+R<$*><VERIFY> <$+> $={TlsVerified} $: <$1> <REQ:0> <$2>
dnl verification required + some level of encryption
-R<$*><VERIFY:$-> <$*> OK $: <$1> <REQ:$2> <$3>
+R<$*><VERIFY:$-> <$*> $={TlsVerified} $: <$1> <REQ:$2> <$3>
dnl just some level of encryption required
R<$*><ENCR:$-> <$*> $* $: <$1> <REQ:$2> <$3>
dnl workspace:
-dnl 1. <SMTP:ESC> <VERIFY [:bits]> <[extensions]> {verify} (!= OK)
+dnl 1. <SMTP:ESC> <VERIFY [:bits]> <[extensions]> {verify} (!~ $={TlsVerified})
dnl 2. <SMTP:ESC> <REQ:bits> <[extensions]>
dnl verification required but ${verify} is not set (case 1.)
R<$-:$+><VERIFY $*> <$*> $#error $@ $2 $: $1 " authentication required"
@@ -2851,6 +2871,7 @@ R<$-:$+><VERIFY $*> <$*> FAIL $#error $@ $2 $: $1 " authentication failed"
R<$-:$+><VERIFY $*> <$*> NO $#error $@ $2 $: $1 " not authenticated"
R<$-:$+><VERIFY $*> <$*> NOT $#error $@ $2 $: $1 " no authentication requested"
R<$-:$+><VERIFY $*> <$*> NONE $#error $@ $2 $: $1 " other side does not support STARTTLS"
+R<$-:$+><VERIFY $*> <$*> CLEAR $#error $@ $2 $: $1 " STARTTLS disabled locally"
dnl some other value for ${verify}
R<$-:$+><VERIFY $*> <$*> $+ $#error $@ $2 $: $1 " authentication failure " $4
dnl some level of encryption required: get the maximum level (case 2.)
@@ -2884,7 +2905,6 @@ R<$-:$+> $+ $@ $>"TLS_req" $3 $| <$1:$2>
dnl further requirements for this ruleset:
dnl name of "other side" is stored is {TLS_name} (client/server_name)
dnl
-dnl currently only CN[:common_name] is implemented
dnl right now this is only a logical AND
dnl i.e. all requirements must be true
dnl how about an OR? CN must be X or CN must be Y or ..
@@ -2896,6 +2916,11 @@ dnl no additional requirements: ok
R $| $+ $@ OK
dnl require CN: but no CN specified: use name of other side
R<CN> $* $| <$+> $: <CN:$&{TLS_Name}> $1 $| <$2>
+ifdef(`_FFR_TLS_ALTNAMES', `dnl
+R<CN:$={cert_altnames}> $* $| <$+> $@ $>"TLS_req" $2 $| <$3>
+R<CN:$-.$+> $* $| <$+> $: <CN:*.$2> $3 $| <$4>
+R<CN:$={cert_altnames}> $* $| <$+> $@ $>"TLS_req" $3 $| <$3>
+R<CN:$*> $* $| <$+> $: <CN:$&{TLS_Name}> $2 $| <$3>', `dnl')
dnl match, check rest
R<CN:$&{cn_subject}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2>
dnl CN does not match
@@ -2911,6 +2936,10 @@ R<CI:$&{cert_issuer}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2>
dnl CI does not match
dnl 1 2 3 4
R<CI:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " Cert Issuer " $&{cert_issuer} " does not match " $1
+dnl
+R<CITag:$-> $* $| <$+> $: <$(access $1:$&{cert_issuer} $: ? $)> $2 $| <$3>
+R<?> $* $| <$-:$+> $#error $@ $3 $: $2 " Cert Issuer " $&{cert_issuer} " not acceptable"
+R<OK> $* $| <$+> $@ $>"TLS_req" $1 $| <$2>
dnl return from recursive call
ROK $@ OK
@@ -2970,7 +2999,7 @@ dnl if it returns SUBJECT we perform a similar check on the
dnl cert subject.
ifdef(`_ACCESS_TABLE_', `dnl
R$* $: <?> $&{verify}
-R<?> OK $: OK authenticated: continue
+R<?> $={TlsVerified} $: OK authenticated: continue
R<?> $* $@ NO not authenticated
ifdef(`_CERT_REGEX_ISSUER_', `dnl
R$* $: $(CERTIssuer $&{cert_issuer} $)',
@@ -3029,7 +3058,7 @@ R$+ $: $>SearchList <! ClientRate> $| $1 <>
dnl found nothing: stop here
R<?> $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
-R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+R<$* _ATMPF_> $#error $@ 4.3.0 $: _TMPFMSG_(`RC')', `dnl')
dnl use the generic routine (for now)
R<0> $@ OK no limit
R<$+> $: <$1> $| $(arith l $@ $1 $@ $&{client_rate} $)
@@ -3051,7 +3080,7 @@ R$+ $: $>SearchList <! ClientConn> $| $1 <>
dnl found nothing: stop here
R<?> $@ OK
ifdef(`_ATMPF_', `dnl tempfail?
-R<$* _ATMPF_> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later."', `dnl')
+R<$* _ATMPF_> $#error $@ 4.3.0 $: _TMPFMSG_(`CC')', `dnl')
dnl use the generic routine (for now)
R<0> $@ OK no limit
R<$+> $: <$1> $| $(arith l $@ $1 $@ $&{client_connections} $)
diff --git a/contrib/sendmail/cf/m4/version.m4 b/contrib/sendmail/cf/m4/version.m4
index 8d2680534a4a..dadff627bb2e 100644
--- a/contrib/sendmail/cf/m4/version.m4
+++ b/contrib/sendmail/cf/m4/version.m4
@@ -1,6 +1,6 @@
divert(-1)
#
-# Copyright (c) 1998-2015 Proofpoint, Inc. and its suppliers.
+# Copyright (c) 1998-2016 Proofpoint, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
@@ -15,4 +15,4 @@ VERSIONID(`$Id: version.m4,v 8.237 2014-01-27 12:55:17 ca Exp $')
#
divert(0)
# Configuration version number
-DZ8.15.2`'ifdef(`confCF_VERSION', `/confCF_VERSION')
+DZ8.16.1`'ifdef(`confCF_VERSION', `/confCF_VERSION')
diff --git a/contrib/sendmail/cf/ostype/hpux10.m4 b/contrib/sendmail/cf/ostype/hpux10.m4
index c59828cedaa1..423bd5bb16d1 100644
--- a/contrib/sendmail/cf/ostype/hpux10.m4
+++ b/contrib/sendmail/cf/ostype/hpux10.m4
@@ -23,5 +23,5 @@ ifdef(`LOCAL_SHELL_PATH',, `define(`LOCAL_SHELL_PATH', /usr/bin/sh)')dnl
ifdef(`UUCP_MAILER_ARGS',, `define(`UUCP_MAILER_ARGS', `uux - -r -a$g -gC $h!rmail ($u)')')dnl
define(`confTIME_ZONE', `USE_TZ')dnl
dnl
-dnl For maximum compability with HP-UX, use:
+dnl For maximum compatibility with HP-UX, use:
dnl define(`confME_TOO', True)dnl
diff --git a/contrib/sendmail/cf/ostype/hpux9.m4 b/contrib/sendmail/cf/ostype/hpux9.m4
index d9fa69faf7d0..76c2258183cb 100644
--- a/contrib/sendmail/cf/ostype/hpux9.m4
+++ b/contrib/sendmail/cf/ostype/hpux9.m4
@@ -23,5 +23,5 @@ ifdef(`UUCP_MAILER_ARGS',, `define(`UUCP_MAILER_ARGS', `uux - -r -a$g -gC $h!rma
define(`confTIME_ZONE', `USE_TZ')dnl
define(`confEBINDIR', `/usr/lib')dnl
dnl
-dnl For maximum compability with HP-UX, use:
+dnl For maximum compatibility with HP-UX, use:
dnl define(`confME_TOO', True)dnl
diff --git a/contrib/sendmail/contrib/cidrexpand b/contrib/sendmail/contrib/cidrexpand
index efa5323a010c..ee24ee865275 100755
--- a/contrib/sendmail/contrib/cidrexpand
+++ b/contrib/sendmail/contrib/cidrexpand
@@ -1,13 +1,14 @@
#!/usr/bin/perl -w
-
-# $Id: cidrexpand,v 8.8 2006-08-07 17:18:37 ca Exp $
+#
+# usage:
+# cidrexpand < /etc/mail/access | makemap -r hash /etc/mail/access
#
# v 0.4
#
# 17 July 2000 Derek J. Balling (dredd@megacity.org)
-#
+#
# Acts as a preparser on /etc/mail/access_db to allow you to use address/bit
-# notation.
+# notation.
#
# If you have two overlapping CIDR blocks with conflicting actions
# e.g. 10.2.3.128/25 REJECT and 10.2.3.143 ACCEPT
@@ -25,114 +26,156 @@
# Added code to deal with the prefix tags that may now be included in
# the access_db
#
-# Added clarification in the notes for what to do if you have
+# Added clarification in the notes for what to do if you have
# exceptions to a larger CIDR block.
#
-# 26 Jul 2006 Richard Rognlie (richard@sendmail.com>
+# 26 Jul 2006 Richard Rognlie (richard@sendmail.com)
# Added code to strip "comments" (anything after a non-escaped #)
# # characters after a \ or within quotes (single and double) are
-# left intact.
+# left intact.
#
# e.g.
# From:1.2.3.4 550 Die spammer # spammed us 2006.07.26
# becomes
-# From:1.2.3.4 550 Die spammer
+# From:1.2.3.4 550 Die spammer
#
# 3 August 2006
-#
# Corrected a bug to have it handle the special case of "0.0.0.0/0"
# since Net::CIDR doesn't handle it properly.
#
-# usage:
-# cidrexpand < /etc/mail/access | makemap -r hash /etc/mail/access
+# 27 April 2016
+# Corrected IPv6 handling. Note that UseCompressedIPv6Addresses must
+# be turned off for this to work; there are three reasons for this:
+# 1) if the MTA uses compressed IPv6 addresses then CIDR 'cuts'
+# in the compressed range *cannot* be matched, as the MTA simply
+# won't look for them. E.g., there's no way to accurately
+# match "IPv6:fe80::/64" when for the address "IPv6:fe80::54ad"
+# the MTA doesn't lookup up "IPv6:fe80:0:0:0"
+# 2) cidrexpand only generates uncompressed addresses, so CIDR
+# 'cuts' to the right of the compressed range won't be matched
+# either. Why doesn't it generate compressed address output?
+# Oh, because:
+# 3) compressed addresses are ambiguous when colon-groups are
+# chopped off! You want an access map entry for
+# IPv6:fe80::0:5420
+# but not for
+# IPv6:fe80::5420:1234
+# ? Sorry, the former is really
+# IPv6:fe80::5420
+# which will also match the latter!
#
+# 25 July 2016
+# Since cidrexpand already requires UseCompressedIPv6Addresses to be
+# turned off, it can also canonicalize non-CIDR IPv6 addresses to the
+# format that sendmail looks up, expanding compressed addresses and
+# trimming superfluous leading zeros.
#
# Report bugs to: <dredd@megacity.org>
#
use strict;
-use Net::CIDR;
+use Net::CIDR qw(cidr2octets cidrvalidate);
use Getopt::Std;
-our ($opt_c,$opt_t);
-getopts('ct:');
+sub print_expanded_v4network;
+sub print_expanded_v6network;
-my $spaceregex = '\s+';
-if ($opt_t)
-{
- $spaceregex = $opt_t;
-}
+our %opts;
+getopts('ct:', \%opts);
+
+# Delimiter between the key and value
+my $space_re = exists $opts{t} ? $opts{t} : '\s+';
+
+# Regexp that matches IPv4 address literals
+my $ipv4_re = qr"(?:\d+\.){3}\d+";
+
+# Regexp that matches IPv6 address literals, plus a lot more.
+# Further checks are required for verifying that it's really one
+my $ipv6_re = qr"[0-9A-Fa-f:]{2,39}(?:\.\d+\.\d+\.\d+)?";
while (<>)
{
chomp;
- my ($prefix,$left,$right,$space);
+ my ($prefix, $network, $len, $right);
- if ( (/\#/) && $opt_c )
+ if ( (/\#/) && $opts{c} )
{
# print "checking...\n";
my $i;
my $qtype='';
- for ($i=0 ; $i<length($_) ; $i++)
+ for ($i=0 ; $i<length($_) ; $i++)
{
my $ch = substr($_,$i,1);
- if ($ch eq '\\')
+ if ($ch eq '\\')
{
$i++;
next;
}
- elsif ($qtype eq '' && $ch eq '#')
+ elsif ($qtype eq '' && $ch eq '#')
{
substr($_,$i) = '';
last;
}
- elsif ($qtype ne '' && $ch eq $qtype)
+ elsif ($qtype ne '' && $ch eq $qtype)
{
$qtype = '';
}
- elsif ($qtype eq '' && $ch =~ /[\'\"]/)
+ elsif ($qtype eq '' && $ch =~ /[\'\"]/)
{
$qtype = $ch;
}
}
- }
-
- if (! /^(|\S\S*:)(\d+\.){3}\d+\/\d\d?$spaceregex.*/ )
+ }
+
+ if (($prefix, $network, $len, $right) =
+ m!^(|\S+:)(${ipv4_re})/(\d+)(${space_re}.*)$!)
{
- print "$_\n";
+ print_expanded_v4network($network, $len, $prefix, $right);
+ }
+ elsif ((($prefix, $network, $len, $right) =
+ m!^((?:\S+:)?[Ii][Pp][Vv]6:)(${ipv6_re})(?:/(\d+))?(${space_re}.*)$!) &&
+ (!defined($len) || $len <= 128) &&
+ defined(cidrvalidate($network)))
+ {
+ print_expanded_v6network($network, $len // 128, $prefix, $right);
}
else
{
- ($prefix,$left,$space,$right) =
- /^(|\S\S*:)((?:\d+\.){3}\d+\/\d\d?)($spaceregex)(.*)$/;
-
- my @new_lefts = expand_network($left);
- foreach my $nl (@new_lefts)
- {
- print "$prefix$nl$space$right\n";
- }
+ print "$_\n";
}
}
-
-sub expand_network
+
+sub print_expanded_v4network
{
- my $left_input = shift;
- my @rc = ($left_input);
- my ($network,$mask) = split /\//, $left_input;
- if (defined $mask)
+ my ($network, $len, $prefix, $suffix) = @_;
+
+ # cidr2octets() doesn't handle a prefix-length of zero, so do
+ # that ourselves
+ foreach my $nl ($len == 0 ? (0..255) : cidr2octets("$network/$len"))
{
- return (0..255) if $mask == 0;
+ print "$prefix$nl$suffix\n";
+ }
+}
+
+sub print_expanded_v6network
+{
+ my ($network, $len, $prefix, $suffix) = @_;
- my @parts = split /\./, $network;
- while ($#parts < 3)
+ # cidr2octets() doesn't handle a prefix-length of zero, so do
+ # that ourselves. Easiest is to just recurse on bottom and top
+ # halves with a length of 1
+ if ($len == 0) {
+ print_expanded_v6network("::", 1, $prefix, $suffix);
+ print_expanded_v6network("8000::", 1, $prefix, $suffix);
+ }
+ else
+ {
+ foreach my $nl (cidr2octets("$network/$len"))
{
- push @parts, "0";
+ # trim leading zeros from each group
+ $nl =~ s/(^|:)0+(?=[^:])/$1/g;
+ print "$prefix$nl$suffix\n";
}
- my $clean_input = join '.', @parts;
- $clean_input .= "/$mask";
- my @octets = Net::CIDR::cidr2octets($clean_input);
- @rc = @octets;
}
- return @rc;
}
diff --git a/contrib/sendmail/contrib/dnsblaccess.m4 b/contrib/sendmail/contrib/dnsblaccess.m4
index da8e13a0a6a7..0075dba92fe8 100644
--- a/contrib/sendmail/contrib/dnsblaccess.m4
+++ b/contrib/sendmail/contrib/dnsblaccess.m4
@@ -24,7 +24,7 @@ dnl ## email. A tempfail-message value of `t' temporarily rejects
dnl ## with a default message. Otherwise the value should be your
dnl ## own message. The keytag is used to lookup the access map to
dnl ## further refine the result. I recommend a qualified keytag
-dnl ## (containing a ".") as less likely to accidently conflict with
+dnl ## (containing a ".") as less likely to accidentally conflict with
dnl ## other access tags.
dnl ##
dnl ## This is best illustrated with an example. Please do not use
@@ -66,7 +66,7 @@ ifdef(`_ACCESS_TABLE_', `dnl',
ifdef(`_EDNSBL_R_',`dnl',`dnl
define(`_EDNSBL_R_', `1')dnl ## prevent multiple redefines of the map.
LOCAL_CONFIG
-# map for enhanced DNS based blacklist lookups
+# map for enhanced DNS based blocklist lookups
Kednsbl dns -R A -a. -T<TMP> -r`'ifdef(`EDNSBL_TO',`EDNSBL_TO',`5')
')
divert(-1)
diff --git a/contrib/sendmail/contrib/expn.pl b/contrib/sendmail/contrib/expn.pl
index 85de08a7f419..317391238685 100755
--- a/contrib/sendmail/contrib/expn.pl
+++ b/contrib/sendmail/contrib/expn.pl
@@ -945,7 +945,7 @@ sub mxredirect
return undef;
}
# follow mx records, return a hostname
-# also follow temporary redirections comming from &domainify and
+# also follow temporary redirections coming from &domainify and
# &mxlookup
sub mx
{
diff --git a/contrib/sendmail/contrib/mmuegel b/contrib/sendmail/contrib/mmuegel
index 6db4a45189c1..e1610efa8606 100644
--- a/contrib/sendmail/contrib/mmuegel
+++ b/contrib/sendmail/contrib/mmuegel
@@ -268,7 +268,7 @@ sed 's/^X//' << 'SHAR_EOF' > 'libs/date.pl' &&
;# Fixed a couple of problems with &ls as pointed out by
;# Thomas Richter (richter@ki1.chemie.fu-berlin.de), thanks Thomas!
;# Also added a couple of SunOS 4.1.1 strftime-ish formats, %i and %k
-;# for space padded hours (` 1' to `12' and ` 0' to `23' respectivly),
+;# for space padded hours (` 1' to `12' and ` 0' to `23' respectively),
;# and %C for locale long date/time format. Changed &ampmH to take a
;# pad char parameter to make to evaled code for %i and %k simpler.
;# Added %E for suffixed day-of-month (ie 1st, 3rd, 4th etc).
@@ -398,7 +398,7 @@ X
X # watch out in 2070...
X $year += ($year < 70) ? 2000 : 1900;
X
-X # now loop throught the supplied format looking for tags...
+X # now loop through the supplied format looking for tags...
X while (($pos = index ($format, '%')) != -1) {
X
X # grab the format tag
@@ -471,7 +471,7 @@ sub ls {
X return ((&gettime ($TZ, time))[5] == @_[0]) ? "%R" : " %Y";
}
X
-# pad - pad $in with leading $pad until lenght $len
+# pad - pad $in with leading $pad until length $len
sub pad {
X local ($in, $len, $pad) = @_;
X local ($out) = "$in";
@@ -661,7 +661,7 @@ X
;# otherwise, $Status will be 0 and $Error_Msg will contain an error message.
;#
;# If $Use_Sendmail is 1 then sendmail is used to send the message. Normally
-;# a mailer such as Mail is used. By specifiying this you can include
+;# a mailer such as Mail is used. By specifying this you can include
;# headers in addition to text in either $Message or $Message_Is_File.
;# If either $Message or $Message_Is_File contain a Subject: header then
;# $Subject is ignored; otherwise, a Subject: header is automatically created.
@@ -1026,15 +1026,15 @@ X
;#
;# Does not care about order of switches, options, and arguments like
;# getopts.pl. Thus all non-switches/options will be kept in ARGV even if they
-;# are not at the end. If $Pass_Invalid is set all unkown options will be
+;# are not at the end. If $Pass_Invalid is set all unknown options will be
;# passed back to the caller by keeping them in @ARGV. This is useful when
;# parsing a command line for your script while ignoring options that you
;# may pass to another script. If this is set New_Getopts tries to maintain
-;# the switch clustering on the unkown switches.
+;# the switch clustering on the unknown switches.
;#
;# Accepts the special argument -usage to print the Usage string. Also accepts
;# the special option -version which prints the contents of the string
-;# $VERSION. $VERSION may or may not have an embeded \n in it. If -usage
+;# $VERSION. $VERSION may or may not have an embedded \n in it. If -usage
;# or -version are specified a status of -1 is returned. Note that the usage
;# option is only accepted if the usage string is not null.
;#
@@ -1048,8 +1048,8 @@ X
;# $Switch_To_Order {"v"} = 1;
;# $Switch_To_Order {"x"} = 2;
;#
-;# Note that in the case of multiple occurances of an option $Switch_To_Order
-;# will store each occurance of the argument via a string that emulates
+;# Note that in the case of multiple occurrences of an option $Switch_To_Order
+;# will store each occurrence of the argument via a string that emulates
;# an array. This is done by using join ($;, ...). You can retrieve the
;# array by using split (/$;/, ...).
;#
@@ -1062,7 +1062,7 @@ X
;# Another exciting ;-) feature that newgetopts has. Along with creating the
;# normal $opt_ scalars for the last value of an argument the list @opt_ is
;# created. It is an array which contains all the values of arguments to the
-;# basename of the variable. They are stored in the order which they occured
+;# basename of the variable. They are stored in the order which they occurred
;# on the command line starting with $[. Note that blank arguments are stored
;# as "". Along with providing support for multiple options on the command
;# line this also provides a method of counting the number of times an option
@@ -1293,8 +1293,8 @@ X
;# All other lines will be indented to match the amount of whitespace of
;# $Offset.
;#
-;# + If $Bullet_Indent is $TRUE $Offset will only be applied to the begining
-;# of lines as they occured in the original $String. Lines that are created
+;# + If $Bullet_Indent is $TRUE $Offset will only be applied to the beginning
+;# of lines as they occurred in the original $String. Lines that are created
;# by this routine will always be indented by blank spaces.
;#
;# + If $Columns is 0 no word-wrap is done. This might be useful to still
@@ -1306,7 +1306,7 @@ X
;# + If $Offset_Blank is $TRUE then empty lines will have $Offset pre-pended
;# to them. Otherwise, they will still empty.
;#
-;# This is a realy workhorse routine that I use in many places because of its
+;# This is a really workhorse routine that I use in many places because of its
;# veratility.
;#
;# Arguments:
@@ -1668,7 +1668,7 @@ sed 's/^X//' << 'SHAR_EOF' > 'man/postclip.1' &&
of the message. This keeps bounced mail private and helps to avoid disk space problems. \*(mp tries its best to keep as much of the header trail as possible.
Hopefully only the original body of the message will be filtered. Only messages
that have a subject that begins with 'Returned mail:' are filtered. This
-ensures that other mail is not accidently mucked with. Finally, note that
+ensures that other mail is not accidentally mucked with. Finally, note that
\fBsendmail\fR is used to deliver the message after it has been (possibly)
filtered. All of the original headers will remain intact.
.sp 1
diff --git a/contrib/sendmail/doc/op/op.me b/contrib/sendmail/doc/op/op.me
index 57e25cd0940f..4d7ead30d4bb 100644
--- a/contrib/sendmail/doc/op/op.me
+++ b/contrib/sendmail/doc/op/op.me
@@ -90,10 +90,9 @@ Proofpoint, Inc.
.de Ve
Version \\$2
..
-.Ve $Revision: 8.759 $
.rm Ve
.sp
-For Sendmail Version 8.15
+For Sendmail Version 8.16
.)l
.(f
Sendmail is a trademark of Proofpoint, Inc.
@@ -149,8 +148,9 @@ RFC 2554 (SMTP Service Extension for Authentication),
RFC 2821 (Simple Mail Transfer Protocol),
RFC 2822 (Internet Message Format),
RFC 2852 (Deliver By SMTP Service Extension),
+RFC 2920 (SMTP Service Extension for Command Pipelining),
and
-RFC 2920 (SMTP Service Extension for Command Pipelining).
+RFC 7505 (A "Null MX" No Service Resource Record for Domains That Accept No Mail).
However, since
.i sendmail
is designed to work in a wider world,
@@ -309,9 +309,8 @@ program; for details see
.sh 3 "Creating a Site Configuration File"
.\"XXX
.pp
-(This section is not yet complete.
-For now, see the file devtools/README for details.)
-See sendmail/README for various compilation flags that can be set.
+See sendmail/README for various compilation flags that can be set,
+and devtools/README for details how to set them.
.sh 3 "Tweaking the Makefile"
.pp
.\" .b "XXX This should all be in the Site Configuration File section."
@@ -323,6 +322,8 @@ notably the
database.
At least one of these should be defined if at all possible.
.nr ii 1i
+.ip CDB
+Constant DataBase (tinycdb).
.ip NDBM
The ``new DBM'' format,
available on nearly all systems around today.
@@ -1224,7 +1225,9 @@ A recipient address is mapped to a queue group as follows.
First, if there is a ruleset called ``queuegroup'',
and if this ruleset maps the address to a queue group name,
then that queue group is chosen.
-That is, the argument for the ruleset is the recipient address
+That is, the argument for the ruleset is
+the recipient address
+(i.e., the address part of the resolved triple)
and the result should be
.b $#
followed by the name of a queue group.
@@ -1282,7 +1285,7 @@ In case one of the queue runners tries delivery to a slow recipient site
at the end of a queue run, the next queue run may be substantially delayed.
In general this should be smoothed out due to the distribution of
those slow jobs, however, for sites with small number of
-queue entries this might introduce noticable delays.
+queue entries this might introduce noticeable delays.
In general, persistent queue runners are only useful for
sites with big queues.
.sh 3 "Manual Intervention"
@@ -2908,7 +2911,7 @@ Therefore it is necessary to run the client mail queue periodically.
.pp
.i Sendmail
has several parameters to control resource usage.
-Besides those mentionted in the previous section, there are at least
+Besides those mentioned in the previous section, there are at least
.b MaxDaemonChildren ,
.b ConnectionRateThrottle ,
.b MaxQueueChildren ,
@@ -2954,7 +2957,7 @@ by looking for the macro definitions of
and
.b MAXETRNCOMMANDS .
If an SMTP command is issued more often than the corresponding
-.b MAXcmdCOMMANDS
+.b MAXcmdCOMMANDS
value, then the response is delayed exponentially,
starting with a sleep time of one second,
up to a maximum of four minutes (as defined by
@@ -2966,7 +2969,7 @@ then this could make a DoS attack even worse since it
keeps a connection open longer than necessary.
Therefore a connection is terminated with a 421 SMTP reply code
if the number of commands exceeds the limit by a factor of two and
-.b MAXBADCOMMANDS
+.b MAXBADCOMMANDS
is set to a value greater than zero (the default is 25).
.sh 2 "Delivery Mode"
.pp
@@ -3038,8 +3041,9 @@ should not be used by the SMTP server.
.pp
The level of logging can be set for
.i sendmail .
-The default using a standard configuration table is level 9.
-The levels are as follows:
+The default using a standard configuration is level 9.
+The levels are approximately as follows
+(some log types are using different level depending on various factors):
.nr ii 0.5i
.ip 0
Minimal logging.
@@ -3078,7 +3082,7 @@ questionable situations.
.ip 14
Logs refused connections.
.ip 15
-Log all incoming and outgoing SMTP commands.
+Log all incoming SMTP commands.
.ip 20
Logs attempts to run locked queue files.
These are not errors,
@@ -3280,7 +3284,7 @@ Accept group-writable
.i \&.forward
files as safe for program and file delivery.
.ip GroupWritableIncludeFile
-Allow group wriable
+Allow group writable
.i :include:
files.
.ip GroupWritableIncludeFileSafe
@@ -3355,7 +3359,7 @@ Allow world writable
.i \&.forward
files.
.ip WorldWritableIncludefile
-Allow world wriable
+Allow world writable
.i :include:
files.
.ip WriteMapToHardLink
@@ -3932,7 +3936,7 @@ The complete syntax for ruleset 0 is:
.)b
This specifies the
{mailer, host, user}
-3-tuple necessary to direct the mailer.
+3-tuple (triple) necessary to direct the mailer.
Note: the third element (
.i user
) is often also called
@@ -3964,9 +3968,11 @@ If the
is the built-in IPC mailer,
the
.i host
-may be a colon-separated list of hosts
-that are searched in order for the first working address
-(exactly like MX records).
+may be a colon (or comma) separated list of hosts.
+Each is separately MX expanded and the results are concatenated
+to make (essentially) one long MX list.
+Hosts separated by a comma have the same MX preference,
+and for each colon separated host the MX preference is increased.
The
.i user
is later rewritten by the mailer-specific envelope rewriting set
@@ -4148,7 +4154,7 @@ macro
for use in the argv expansion of the specified mailer.
Notice: since the envelope sender address will be used if
a delivery status notification must be send,
-i.e., is may specify a recipient,
+i.e., it may specify a recipient,
it is also run through ruleset zero.
If ruleset zero returns a temporary error
.b 4xy
@@ -4515,7 +4521,7 @@ for details, as well as
and note this warning:
Options already set before are not cleared!
.ip CipherList
-Specify cipher list for STARTTLS,
+Specify cipher list for STARTTLS (does not apply to TLSv1.3),
see
.i ciphers (1)
for possible values.
@@ -4526,6 +4532,28 @@ for the session.
File containing a certificate.
.ip KeyFile
File containing the private key for the certificate.
+.ip Flags
+Currently the only valid flags are
+.br
+.i R
+to require a CRL for each encountered certificate during verification
+(by default a missing CRL is ignored),
+.br
+.i c
+and
+.i C
+which basically clears/sets the option
+.i TLSFallbacktoClear
+for just this session, respectively,
+.br
+.i d
+to turn off DANE which is obviously only valid for
+.i tls_clt_features
+and requires DANE to be compiled in.
+This might be needed in case of a misconfiguration,
+e.g.,
+specifying invalid TLSA RRs.
+.br
.lp
.lp
Example:
@@ -4550,9 +4578,6 @@ and
.i KeyFile
must be specified together;
specifying only one is an error.
-.pp
-These rulesets require the sendmail binary to be built with _FFR_TLS_SE_OPTS
-enabled (see the "For Future Release" section).
.sh 4 "authinfo"
.pp
The
@@ -4589,9 +4614,9 @@ is ignored (even if the ruleset does not return a ``useful'' result).
The
.i queuegroup
ruleset is used to map a recipient address to a queue group name.
-The input for the ruleset is a recipient address as specified by the
-.sm "SMTP RCPT"
-command.
+The input for the ruleset is
+the recipient address
+(i.e., the address part of the resolved triple)
The ruleset should return
.b $#
followed by the name of a queue group.
@@ -4615,7 +4640,7 @@ pause.
If the return value starts with anything else or is not a number,
it is silently ignored.
Note: this ruleset is not invoked (and hence the feature is disabled)
-when the smtps (SMTP over SSL) is used, i.e.,
+when smtps (SMTP over SSL) is used, i.e.,
the
.i s
modifier is set for the daemon via
@@ -4651,9 +4676,11 @@ to an IP host address.
.pp
The host name passed in after the
.q $@
-may also be a colon-separated list of hosts.
+may also be a colon or comma separated list of hosts.
Each is separately MX expanded and the results are concatenated
to make (essentially) one long MX list.
+Hosts separated by a comma have the same MX preference,
+and for each colon separated host the MX preference is increased.
The intent here is to create
.q fake
MX records that are not published in DNS
@@ -5224,7 +5251,7 @@ The output of the
function, i.e., the number of seconds since 0 hours, 0 minutes,
0 seconds, January 1, 1970, Coordinated Universal Time (UTC).
.ip ${tls_version}
-The TLS/SSL version used for the connection, e.g., TLSv1, SSLv3, SSLv2;
+The TLS/SSL version used for the connection, e.g., TLSv1.2, TLSv1;
defined after STARTTLS has been used.
.ip ${total_rate}
The total number of incoming connections over the time interval specified
@@ -5241,6 +5268,7 @@ NOT no cert requested.
FAIL cert presented but could not be verified,
e.g., the signing CA is missing.
NONE STARTTLS has not been performed.
+CLEAR STARTTLS has been disabled internally for a clear text delivery attempt.
TEMP temporary error occurred.
PROTOCOL some protocol error occurred
at the ESMTP level (not TLS).
@@ -5859,7 +5887,7 @@ Do User Database rewriting on recipients as well as senders.
Normally when
.i sendmail
connects to a host via SMTP,
-it checks to make sure that this isn't accidently the same host name
+it checks to make sure that this isn't accidentally the same host name
as might happen if
.i sendmail
is misconfigured or if a long-haul network interface is set in loopback mode.
@@ -5893,7 +5921,7 @@ macro occurs in the
part of the mailer definition,
that field will be repeated as necessary
for all qualifying users.
-Removing this flag can defeat duplicate supression on a remote site
+Removing this flag can defeat duplicate suppression on a remote site
as each recipient is sent in a separate transaction.
.ip M\(dg
This mailer wants a
@@ -6519,6 +6547,10 @@ is specified),
(if
.sm NDBM
is specified),
+.q cdb
+(if
+.sm CDB
+is specified),
.q stab
(internal symbol table \*- not normally used
unless you have no other database lookup),
@@ -6647,7 +6679,7 @@ see section about STARTTLS for more information.
Specify the fingerprint algorithm (digest) to use for the presented cert.
If the option is not set,
md5 is used and the macro
-.p ${cert_md5}
+.b ${cert_md5}
contains the cert fingerprint.
If the option is explicitly set,
the specified algorithm (e.g., sha1) is used
@@ -6655,7 +6687,7 @@ and the macro
.b ${cert_fp}
contains the cert fingerprint.
.ip CipherList
-Specify cipher list for STARTTLS.
+Specify cipher list for STARTTLS (does not apply to TLSv1.3).
See
.i ciphers (1)
for possible values.
@@ -6756,7 +6788,7 @@ By default,
.i -SSL_OP_TLSEXT_PADDING
are used
(if those options are available).
-Options can be cleared by preceeding them with a minus sign.
+Options can be cleared by preceding them with a minus sign.
It is also possible to specify numerical values, e.g.,
.b -0x0010 .
.ip ColonOkInAddr
@@ -6851,9 +6883,18 @@ Solaris and pre-4.4BSD kernel users should see the note in sendmail/README .
[no short name]
Name of file that contains certificate
revocation status, useful for X.509v3 authentication.
-CRL checking requires at least OpenSSL version 0.9.7.
Note: if a CRLFile is specified but the file is unusable,
STARTTLS is disabled.
+.ip CRLPath=\fIname\fP
+[no short name]
+Name of directory that contains hashes pointing to
+certificate revocation status files.
+Symbolic links can be generated with the following
+two (Bourne) shell commands:
+.(b
+C=FileName_of_CRL
+ln -s $C `openssl crl -noout -hash < $C`.r0
+.)b
.ip DHParameters
This option applies to the server side only.
Possible values are:
@@ -6948,7 +6989,7 @@ can be a sequence (without any delimiters)
of the following characters:
.(b
.ta 1i
-a always require authentication
+a always require AUTH
b bind to interface through which mail has been received
c perform hostname canonification (.cf)
f require fully qualified hostname (.cf)
@@ -6961,7 +7002,7 @@ O optional; if opening the socket fails ignore it
S don't offer STARTTLS
.)b
That is, one way to specify a message submission agent (MSA) that
-always requires authentication is:
+always requires AUTH is:
.(b
O DaemonPortOptions=Name=MSA, Port=587, M=Ea
.)b
@@ -7000,7 +7041,7 @@ This will also override possible settings via
Note,
.i sendmail
will listen on a new socket
-for each occurence of the
+for each occurrence of the
.b DaemonPortOptions
option in a configuration file.
The modifier ``O'' causes sendmail to ignore a socket
@@ -7296,6 +7337,18 @@ are:
.\"8BITMIME\(->7BIT conversions are done.
In all cases properly declared 8BITMIME data will be converted to 7BIT
as needed.
+.p
+Note: if an automatic conversion is performed, a header with
+the following format will be added:
+.(b
+X-MIME-Autoconverted: from OLD to NEW by $j id $i
+.)b
+where
+.\" format?
+OLD
+and
+NEW
+describe the original format and the converted format, respectively.
.ip ErrorHeader=\fIfile-or-message\fP
[E]
Prepend error messages with the indicated message.
@@ -7393,6 +7446,10 @@ and then in
.ip HeloName=\fIname\fP
[no short name]
Set the name to be used for HELO/EHLO (instead of $j).
+.ip HelpFile=\fIfile\fP
+[H]
+Specify the help file for SMTP.
+If no file name is specified, "helpfile" is used.
.ip HoldExpensive
[c]
If an outgoing mailer is marked as being expensive,
@@ -7520,9 +7577,10 @@ If not set, there is no limit to the number of children --
that is, the system load average controls this.
.ip MaxHeadersLength=\fIN\fP
[no short name]
-The maximum length of the sum of all headers.
+If set to a value greater than zero it specifies
+the maximum length of the sum of all headers.
This can be used to prevent a denial of service attack.
-The default is no limit.
+The default is 32K.
.ip MaxHopCount=\fIN\fP
[h]
The maximum hop count.
@@ -7706,6 +7764,12 @@ Sets the list of characters that must be quoted if used in a full name
that is in the phrase part of a ``phrase <address>'' syntax.
The default is ``\'.''.
The characters ``@,;:\e()[]'' are always added to this list.
+Note: To avoid potential breakage of
+DKIM signatures it is useful to set
+.(b
+O MustQuoteChars=.
+.)b
+Moreover, relaxed header signing should be used for DKIM signatures.
.ip NiceQueueRun
[no short name]
The priority of queue runners (nice(3)).
@@ -8189,7 +8253,7 @@ By default,
.i -SSL_OP_TLSEXT_PADDING
are used
(if those options are available).
-Options can be cleared by preceeding them with a minus sign.
+Options can be cleared by preceding them with a minus sign.
It is also possible to specify numerical values, e.g.,
.b -0x0010 .
.ip ServiceSwitchFile=\fIfilename\fP
@@ -8301,6 +8365,31 @@ Defaults to
If set, issue temporary errors (4xy) instead of permanent errors (5xy).
This can be useful during testing of a new configuration to avoid
erroneous bouncing of mails.
+.ip SSLEngine
+Name of SSL engine to use.
+The available values depend on the OpenSSL version against which
+.i sendmail
+is compiled,
+see
+.(b
+openssl engine -v
+.)b
+for some information.
+.ip SSLEnginePath
+Path to dynamic library for SSL engine.
+This option is only useful if
+.i SSLEngine
+is set.
+If both are set, the engine will be loaded dynamically at runtime
+using the concatenation of the path,
+a slash "/",
+the string "lib",
+the value of
+.i SSLEngine ,
+and the string ".so".
+If only
+.i SSLEngine
+is set then the static version of the engine is used.
.ip StatusFile=\fIfile\fP
[S]
Log summary statistics in the named
@@ -8340,6 +8429,22 @@ PostMilter is useful only when
.i sendmail
is running as an SMTP server; in all other situations it
acts the same as True.
+.ip TLSFallbacktoClear
+[no short name]
+If set,
+.i sendmail
+immediately tries an outbound connection again without STARTTLS
+after a TLS handshake failure.
+Note:
+this applies to all connections even if TLS specific requirements are set
+(see rulesets
+.i tls_rcpt
+and
+.i tls_client
+).
+Hence such requirements will cause an error on a retry without STARTTLS.
+Therefore they should only trigger a temporary failure so the connection
+is later on tried again.
.ip TLSSrvOptions
[no short name]
List of options for SMTP STARTTLS for the server
@@ -8824,6 +8929,12 @@ $[\fIhostname\fP$]
.)b
.pp
There are many defined classes.
+.ip cdb
+Database lookups using the cdb(3) library.
+.i Sendmail
+must be compiled with
+.b CDB
+defined.
.ip dbm
Database lookups using the ndbm(3) library.
.i Sendmail
@@ -8885,7 +8996,7 @@ only the first value will be returned
unless the
.b \-z
(value separator)
-map flag is set.
+map option is set.
Also, the
.b \-1
map flag will treat a multiple value return
@@ -8906,14 +9017,11 @@ The format of the text file is defined by the
and
.b \-z
(field delimiter)
-flags.
+options.
.ip ph
PH query map.
Contributed and supported by
Mark Roth, roth@uiuc.edu.
-For more information,
-consult the web site
-.q http://www-dev.cites.uiuc.edu/sendmail/ .
.ip nsd
nsd map for IRIX 6.5 and later.
Contributed and supported by Bob Mende of SGI,
@@ -8922,11 +9030,15 @@ mende@sgi.com.
Internal symbol table lookups.
Used internally for aliasing.
.ip implicit
-Really should be called
-.q alias
-\(em this is used to get the default lookups
-for alias files,
-and is the default if no class is specified for alias files.
+Sequentially try a list of available map types:
+.i hash ,
+.i dbm ,
+and
+.i cdb .
+It is the default for alias files if no class is specified.
+If is no matching map type is found,
+the text version is used for the alias file,
+but other maps fail to open.
.ip user
Looks up users using
.i getpwnam (3).
@@ -8948,15 +9060,24 @@ This can be used to find out if this machine is the target for an MX record,
and mail can be accepted on that basis.
If the
.b \-z
-flag is given, then all MX names are returned,
+option is given, then all MX names are returned,
separated by the given delimiter.
+Note: the return value is deterministic,
+i.e., even if multiple MX records have the same preference,
+they will be returned in the same order.
.ip dns
This map requires the option -R to specify the DNS resource record
-type to lookup. The following types are supported:
+type to lookup.
+The following types are supported:
A, AAAA, AFSDB, CNAME, MX, NS, PTR, SRV, and TXT.
-A map lookup will return only one record.
+A map lookup will return only one record
+unless the
+.b \-z
+(value separator)
+option is set.
Hence for some types, e.g., MX records, the return value might be a random
-element of the list due to randomizing in the DNS resolver.
+element of the results due to randomizing in the DNS resolver,
+if only one element is returned.
.ip arpa
Returns the ``reverse'' for the given IP (IPv4 or IPv6) address,
i.e., the string for the PTR lookup,
@@ -8969,7 +9090,7 @@ For example, the following configuration lines:
Karpa arpa
SArpa
R$+ $: $(arpa $1 $)
-.)b
+.)b
work like this in test mode:
.(b
sendmail -bt
@@ -9069,33 +9190,45 @@ if used, it is substituted by the substring matches, delimited by
.b $|
or the string specified with the the
.b \-d
-flag. The flags available for the map are
+option.
+The options available for the map are
.(b
.ta 4n
-n not
-f case sensitive
-b basic regular expressions (default is extended)
-s substring match
--d set the delimiter used for -s
+-d set the delimiter string used for -s
-a append string to key
-m match only, do not replace/discard value
-D perform no lookup in deferred delivery mode.
.)b
The
.b \-s
-flag can include an optional parameter which can be used
-to select the substrings in the result of the lookup. For example,
+option can include an optional parameter which can be used
+to select the substrings in the result of the lookup.
+For example,
.(b
-s1,3,4
.)b
+The delimiter string specified via the
+.b \-d
+option is the sequence of characters after
+.b d
+ending at the first space.
+Hence it isn't possible to specify a space as delimiter,
+so if the option is immediately followed by a space
+the delimiter string is empty,
+which means the substrings are joined.
+
Notes: to match a
.b $
in a string,
\\$$
must be used.
-If the pattern contains spaces, they must be replaced
-with the blank substitution character, unless it is
-space itself.
+If the pattern contains spaces,
+they must be replaced with the blank substitution character,
+unless it is space itself.
.ip program
The arguments on the
.b K
@@ -9185,12 +9318,12 @@ and is one of the following upper case words:
.ta 9n
OK the key was found, result contains the looked up value
NOTFOUND the key was not found, the result is empty
-TEMP a temporary failure occured
-TIMEOUT a timeout occured on the server side
-PERM a permanent failure occured
+TEMP a temporary failure occurred
+TIMEOUT a timeout occurred on the server side
+PERM a permanent failure occurred
.)b
-In case of errors (status TEMP, TIMEOUT or PERM) the result field may
+In case of errors (status TEMP, TIMEOUT or PERM) the result field may
contain an explanatory message.
However, the explanatory message is not used any further by
.i sendmail .
@@ -9206,7 +9339,7 @@ Example replies:
in case of successful lookups, or:
.(b
-8:NOTFOUND,
+8:NOTFOUND,
.)b
in case the key was not found, or:
@@ -9331,7 +9464,7 @@ or
to indicate newline or tab respectively.
If omitted entirely,
the column separator is any sequence of white space.
-For LDAP maps this is the separator character
+For LDAP and some other maps this is the separator character
to combine multiple values
into a single return string.
If not set,
@@ -9413,6 +9546,11 @@ timeout: specify the timeout (in seconds) for communication
with the socket map server.
.pp
The following additional flags are present in the ldap map only:
+.ip "\-c\fItimeout\fP"
+Set the LDAP network timeout.
+sendmail must be compiled with
+.b \-DLDAP_OPT_NETWORK_TIMEOUT
+to use this flag.
.ip "\-R"
Do not auto chase referrals. sendmail must be compiled with
.b \-DLDAP_REFERRALS
@@ -9480,6 +9618,9 @@ Should be one of
.b LDAP_AUTH_SIMPLE ,
or
.b LDAP_AUTH_KRBV4 .
+The leading
+.b LDAP_AUTH_
+can be omitted and the value is case-insensitive.
.ip "\-P\fIpasswordfile\fP"
The file containing the secret key for the
.b LDAP_AUTH_SIMPLE
@@ -9530,8 +9671,9 @@ and the data is located in
.pp
The program
.i makemap (8)
-can be used to build any of the three database-oriented maps.
-It takes the following flags:
+can be used to build database-oriented maps.
+It takes at least the following flags
+(for a complete list see its man page):
.ip \-f
Do not fold upper to lower case in the map.
.ip \-N
@@ -9980,8 +10122,10 @@ configuration file.
If set,
the new version of the DBM library
that allows multiple databases will be used.
-If neither NDBM nor NEWDB are set,
+If neither CDB, NDBM, nor NEWDB are set,
a much less efficient method of alias lookup is used.
+.ip CWDB
+If set, use the cdb (tinycdb) package.
.ip NEWDB
If set, use the new database package from Berkeley (from 4.4BSD).
This package is substantially faster than DBM or NDBM.
@@ -10418,7 +10562,7 @@ Addresses in this header should receive error messages.
This header is a Content-Transfer-Encoding header.
.ip H_CTYPE
This header is a Content-Type header.
-.ip H_STRIPVAL
+.ip H_BCC
Strip the value from the header (for Bcc:).
.nr ii 5n
.lp
@@ -10440,7 +10584,7 @@ struct hdrinfo HdrInfo[] =
"to", H_RCPT,
"resent-to", H_RCPT,
"cc", H_RCPT,
- "bcc", H_RCPT\^|\^H_STRIPVAL,
+ "bcc", H_RCPT\^|\^H_BCC,
/* message identification and control */
"message", H_EOH,
"text", H_EOH,
@@ -10864,7 +11008,7 @@ it is necessary to understand at least some basics about X.509 certificates
and public key cryptography.
This information can be found in books about SSL/TLS
or on WWW sites, e.g.,
-.q http://www.OpenSSL.org/ .
+.q https://www.OpenSSL.org/ .
.sh 3 "Certificates for STARTTLS"
.pp
When acting as a server,
@@ -11003,6 +11147,43 @@ The macros which are subject to this encoding are
{cert_subject}, {cert_issuer}, {cn_subject}, {cn_issuer},
as well as
{auth_authen} and {auth_author}.
+.sh 2 "DANE"
+.pp
+Initial support for DANE (see RFC 7672 et.al.)
+is available if
+.i sendmail
+is compiled with the option
+.b DANE .
+Only TLSA RR 3-1-x (DANE-EE) is currently implemented.
+The option
+.(b
+O DANE=true
+.)b
+enables this feature at run time
+and it automatically adds
+.b use_dnssec
+and
+.b use_edns0
+to
+.(b
+O ResolverOptions
+.)b
+This requires a (preferrably local)
+validating DNS resolver which supports those options.
+
+If the client finds a usable TLSA RR and the check
+succeeds the macro
+.b ${verify}
+is set to
+.b TRUSTED .
+All non-DNS maps are considered
+.i secure
+just like DNS lookups with DNSSEC.
+Be aware that the implementation might not handle all
+error conditions as required by the RFCs.
+Moreover, TLSA RRs are not looked up for some features,
+e.g.,
+.i FallBackSmartHost .
.sh 1 "ACKNOWLEDGEMENTS"
.pp
I've worked on
@@ -11243,7 +11424,6 @@ this is equivalent to using \-p.)
.ip \-q\fItime\fP
Try to process the queued up mail.
If the time is given,
-a
.i sendmail
will start one or more processes to run through the queue(s) at the specified
time interval to deliver queued mail; otherwise, it only runs once.
@@ -11307,7 +11487,7 @@ together, and items with different key letters
.q and'ed
together.
.ip "\-Q[reason]"
-Quarantine a normal queue items with the given reason or
+Quarantine normal queue items with the given reason or
unquarantine quarantined queue items if no reason is given.
This should only be used with some sort of item matching using
.b \-q[!]\fIXstring\fP
@@ -11512,11 +11692,10 @@ but is actually realiased when the job is processed.
There will be one line for each recipient.
Version 1 qf files
also include a leading colon-terminated list of flags,
-which can be
+some of which are
`S' to return a message on successful final delivery,
`F' to return a message on failure,
`D' to return a message if the message is delayed,
-`B' to indicate that the body should be returned,
`N' to suppress returning the body,
and
`P' to declare this as a ``primary'' (command line or SMTP-session) address.
@@ -11727,7 +11906,6 @@ replace it with a blank sheet for double-sided output.
.\".sz 10
.\"Eric Allman
.\".sp
-.\"Version $Revision: 8.759 $
.\".ce 0
.bp 3
.ce
diff --git a/contrib/sendmail/editmap/Makefile b/contrib/sendmail/editmap/Makefile
index f08d5a7ccde9..b173ba9fa62b 100644
--- a/contrib/sendmail/editmap/Makefile
+++ b/contrib/sendmail/editmap/Makefile
@@ -8,6 +8,8 @@ all: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
clean: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
+check: FRC
+ $(SHELL) $(BUILD) $(OPTIONS) $@
install: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
diff --git a/contrib/sendmail/editmap/editmap.c b/contrib/sendmail/editmap/editmap.c
index 66ee5793d5d7..c3454cb495ae 100644
--- a/contrib/sendmail/editmap/editmap.c
+++ b/contrib/sendmail/editmap/editmap.c
@@ -23,19 +23,19 @@ SM_UNUSED(static char copyright[]) =
#ifndef lint
SM_UNUSED(static char id[]) = "@(#)$Id: editmap.c,v 1.26 2013-11-22 20:51:26 ca Exp $";
-#endif /* ! lint */
+#endif
#include <sys/types.h>
#ifndef ISC_UNIX
# include <sys/file.h>
-#endif /* ! ISC_UNIX */
+#endif
#include <ctype.h>
#include <stdlib.h>
#include <unistd.h>
#ifdef EX_OK
# undef EX_OK /* unistd.h may have another use for this */
-#endif /* EX_OK */
+#endif
#include <sysexits.h>
#include <assert.h>
#include <sendmail/sendmail.h>
@@ -100,7 +100,7 @@ main(argc, argv)
#if HASFCHOWN
FILE *cfp;
char buf[MAXLINE];
-#endif /* HASFCHOWN */
+#endif
static char rnamebuf[MAXNAME]; /* holds RealUserName */
extern char *optarg;
extern int optind;
diff --git a/contrib/sendmail/include/libmilter/mfapi.h b/contrib/sendmail/include/libmilter/mfapi.h
index 039a16a94481..2b012d86af2b 100644
--- a/contrib/sendmail/include/libmilter/mfapi.h
+++ b/contrib/sendmail/include/libmilter/mfapi.h
@@ -43,11 +43,11 @@
/* Only need to export C interface if used by C++ source code */
#ifdef __cplusplus
extern "C" {
-#endif /* __cplusplus */
+#endif
#ifndef _SOCK_ADDR
# define _SOCK_ADDR struct sockaddr
-#endif /* ! _SOCK_ADDR */
+#endif
/*
** libmilter functions return one of the following to indicate
@@ -58,7 +58,7 @@ extern "C" {
#define MI_FAILURE (-1)
#if _FFR_WORKERS_POOL
# define MI_CONTINUE 1
-#endif /* _FFR_WORKERS_POOL */
+#endif
/* "forward" declarations */
typedef struct smfi_str SMFICTX;
@@ -76,17 +76,17 @@ typedef int sfsistat;
#if defined(__linux__) && defined(__GNUC__) && defined(__cplusplus) && __GNUC_MINOR__ >= 8
# define SM__P(X) __PMT(X)
-#else /* __linux__ && __GNUC__ && __cplusplus && _GNUC_MINOR__ >= 8 */
+#else
# define SM__P(X) __P(X)
-#endif /* __linux__ && __GNUC__ && __cplusplus && _GNUC_MINOR__ >= 8 */
+#endif
/* Some platforms don't define __P -- do it for them here: */
#ifndef __P
# ifdef __STDC__
# define __P(X) X
-# else /* __STDC__ */
+# else
# define __P(X) ()
-# endif /* __STDC__ */
+# endif
#endif /* __P */
#if SM_CONF_STDBOOL_H
@@ -464,7 +464,7 @@ LIBMILTER_API int smfi_chgheader __P((SMFICTX *, char *, int, char *));
**
** SMFICTX *ctx; Opaque context structure
** char *headerf; Header field name
-** int index; The Nth occurence of header field name
+** int index; The Nth occurrence of header field name
** char *headerv; New header field value (empty for delete header)
*/
@@ -594,10 +594,10 @@ LIBMILTER_API int smfi_setsymlist __P((SMFICTX *, int, char *));
#if _FFR_THREAD_MONITOR
LIBMILTER_API int smfi_set_max_exec_time __P((unsigned int));
-#endif /* _FFR_THREAD_MONITOR */
+#endif
#ifdef __cplusplus
}
-#endif /* __cplusplus */
+#endif
#endif /* ! _LIBMILTER_MFAPI_H */
diff --git a/contrib/sendmail/include/libmilter/mfdef.h b/contrib/sendmail/include/libmilter/mfdef.h
index 7dc9d5eb4341..02a34d3a2028 100644
--- a/contrib/sendmail/include/libmilter/mfdef.h
+++ b/contrib/sendmail/include/libmilter/mfdef.h
@@ -19,7 +19,7 @@
#ifndef SMFI_PROT_VERSION
# define SMFI_PROT_VERSION 6 /* MTA - libmilter protocol version */
-#endif /* SMFI_PROT_VERSION */
+#endif
/* Shared protocol constants */
#define MILTER_LEN_BYTES 4 /* length of 32 bit integer in bytes */
@@ -121,6 +121,6 @@
#if _FFR_MILTER_CHECK
# define SMFIP_TEST 0x80000000L
-#endif /* _FFR_MILTER_CHECK */
+#endif
#endif /* !_LIBMILTER_MFDEF_H */
diff --git a/contrib/sendmail/include/libsmdb/smdb.h b/contrib/sendmail/include/libsmdb/smdb.h
index a1df6d7ae801..427599ce206c 100644
--- a/contrib/sendmail/include/libsmdb/smdb.h
+++ b/contrib/sendmail/include/libsmdb/smdb.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999-2002 Proofpoint, Inc. and its suppliers.
+ * Copyright (c) 1999-2002, 2018 Proofpoint, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
@@ -18,13 +18,13 @@
# include <sm/gen.h>
# include <sm/errstring.h>
-# ifdef NDBM
+# if NDBM
# include <ndbm.h>
-# endif /* NDBM */
+# endif
-# ifdef NEWDB
+# if NEWDB
# include "sm/bdb.h"
-# endif /* NEWDB */
+# endif
/*
** Some size constants
@@ -119,7 +119,6 @@ typedef int (*db_get_func) __P((SMDB_DATABASE *db,
** flags -- put options:
** SMDBF_NO_OVERWRITE - Return an error if key alread
** exists.
-** SMDBF_ALLOW_DUP - Allow duplicates in btree maps.
**
** Returns:
** 0 - Success, otherwise errno.
@@ -190,6 +189,7 @@ struct database_struct
db_lockfd_func smdb_lockfd;
void *smdb_impl;
};
+
/*
** DB_CURSOR_CLOSE -- Close a cursor
**
@@ -244,10 +244,10 @@ typedef int (*db_cursor_get_func) __P((SMDB_CURSOR *cursor,
** Flags for DB_CURSOR_GET
*/
-#define SMDB_CURSOR_GET_FIRST 0
-#define SMDB_CURSOR_GET_LAST 1
+#define SMDB_CURSOR_GET_FIRST 0 /* NOT USED by any application */
+#define SMDB_CURSOR_GET_LAST 1 /* NOT USED by any application */
#define SMDB_CURSOR_GET_NEXT 2
-#define SMDB_CURSOR_GET_RANGE 3
+#define SMDB_CURSOR_GET_RANGE 3 /* NOT USED by any application */
/*
** DB_CURSOR_PUT -- Put the key/value at this cursor.
@@ -313,12 +313,34 @@ typedef unsigned int SMDB_FLAG;
# define SMDB_TYPE_DEFAULT NULL
# define SMDB_TYPE_DEFAULT_LEN 0
+# define SMDB_TYPE_IMPL "implicit"
+# define SMDB_TYPE_IMPL_LEN 9
# define SMDB_TYPE_HASH "hash"
# define SMDB_TYPE_HASH_LEN 5
# define SMDB_TYPE_BTREE "btree"
# define SMDB_TYPE_BTREE_LEN 6
# define SMDB_TYPE_NDBM "dbm"
# define SMDB_TYPE_NDBM_LEN 4
+# define SMDB_TYPE_CDB "cdb"
+# define SMDB_TYPE_CDB_LEN 4
+
+# define SMDB_IS_TYPE_HASH(type) (strncmp(type, SMDB_TYPE_HASH, SMDB_TYPE_HASH_LEN) == 0)
+# define SMDB_IS_TYPE_BTREE(type) (strncmp(type, SMDB_TYPE_BTREE, SMDB_TYPE_BTREE_LEN) == 0)
+# define SMDB_IS_TYPE_NDBM(type) (strncmp(type, SMDB_TYPE_NDBM, SMDB_TYPE_NDBM_LEN) == 0)
+# define SMDB_IS_TYPE_CDB(type) (strncmp(type, SMDB_TYPE_CDB, SMDB_TYPE_CDB_LEN) == 0)
+
+# define SMDB_IS_TYPE_DEFAULT(t) (((t) == SMDB_TYPE_DEFAULT) \
+ || (strncmp(type, SMDB_TYPE_IMPL, SMDB_TYPE_IMPL_LEN) == 0) \
+ )
+
+# if CDB >= 2
+# define SMCDB_FILE_EXTENSION "db"
+# else
+# define SMCDB_FILE_EXTENSION "cdb"
+# endif
+# define SMDB1_FILE_EXTENSION "db"
+# define SMDB2_FILE_EXTENSION "db"
+# define SMNDB_DIR_FILE_EXTENSION "dir"
/*
** These are flags
@@ -326,26 +348,22 @@ typedef unsigned int SMDB_FLAG;
/* Flags for put */
# define SMDBF_NO_OVERWRITE 0x00000001
-# define SMDBF_ALLOW_DUP 0x00000002
+typedef int (smdb_open_func) __P((SMDB_DATABASE **, char *, int, int, long, SMDB_DBTYPE, SMDB_USER_INFO *, SMDB_DBPARAMS *));
extern SMDB_DATABASE *smdb_malloc_database __P((void));
extern void smdb_free_database __P((SMDB_DATABASE *));
-extern int smdb_open_database __P((SMDB_DATABASE **, char *, int,
- int, long, SMDB_DBTYPE,
- SMDB_USER_INFO *,
- SMDB_DBPARAMS *));
-# ifdef NEWDB
-extern int smdb_db_open __P((SMDB_DATABASE **, char *, int, int,
- long, SMDB_DBTYPE, SMDB_USER_INFO *,
- SMDB_DBPARAMS *));
-# endif /* NEWDB */
-# ifdef NDBM
-extern int smdb_ndbm_open __P((SMDB_DATABASE **, char *, int, int,
- long, SMDB_DBTYPE,
- SMDB_USER_INFO *,
- SMDB_DBPARAMS *));
-# endif /* NDBM */
+extern smdb_open_func smdb_open_database;
+# if NEWDB
+extern smdb_open_func smdb_db_open;
+# else
+# define smdb_db_open NULL
+# endif
+# if NDBM
+extern smdb_open_func smdb_ndbm_open;
+# else
+# define smdb_ndbm_open NULL
+# endif
extern int smdb_add_extension __P((char *, int, char *, char *));
extern int smdb_setup_file __P((char *, char *, int, long,
SMDB_USER_INFO *, struct stat *));
@@ -353,8 +371,15 @@ extern int smdb_lock_file __P((int *, char *, int, long, char *));
extern int smdb_unlock_file __P((int));
extern int smdb_filechanged __P((char *, char *, int,
struct stat *));
-extern void smdb_print_available_types __P((void));
+extern void smdb_print_available_types __P((bool));
+extern bool smdb_is_db_type __P((const char *));
extern char *smdb_db_definition __P((SMDB_DBTYPE));
extern int smdb_lock_map __P((SMDB_DATABASE *, int));
extern int smdb_unlock_map __P((SMDB_DATABASE *));
+
+# if CDB
+extern smdb_open_func smdb_cdb_open;
+# else
+# define smdb_cdb_open NULL
+# endif
#endif /* ! _SMDB_H_ */
diff --git a/contrib/sendmail/include/sendmail/pathnames.h b/contrib/sendmail/include/sendmail/pathnames.h
index 1e7bab58ccf1..67be3a2d0184 100644
--- a/contrib/sendmail/include/sendmail/pathnames.h
+++ b/contrib/sendmail/include/sendmail/pathnames.h
@@ -19,34 +19,34 @@
# ifndef _PATH_SENDMAILCF
# if defined(USE_VENDOR_CF_PATH) && defined(_PATH_VENDOR_CF)
# define _PATH_SENDMAILCF _PATH_VENDOR_CF
-# else /* defined(USE_VENDOR_CF_PATH) && defined(_PATH_VENDOR_CF) */
+# else
# define _PATH_SENDMAILCF "/etc/mail/sendmail.cf"
-# endif /* defined(USE_VENDOR_CF_PATH) && defined(_PATH_VENDOR_CF) */
+# endif
# endif /* ! _PATH_SENDMAILCF */
# ifndef _PATH_SENDMAILPID
# ifdef BSD4_4
# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
-# else /* BSD4_4 */
+# else
# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
-# endif /* BSD4_4 */
+# endif
# endif /* ! _PATH_SENDMAILPID */
# ifndef _PATH_SENDMAIL
# define _PATH_SENDMAIL "/usr/lib/sendmail"
-# endif /* ! _PATH_SENDMAIL */
+# endif
# ifndef _PATH_MAILDIR
# define _PATH_MAILDIR "/var/spool/mail"
-# endif /* ! _PATH_MAILDIR */
+# endif
# ifndef _PATH_LOCTMP
# define _PATH_LOCTMP "/tmp/local.XXXXXX"
-# endif /* ! _PATH_LOCTMP */
+# endif
# ifndef _PATH_HOSTS
# define _PATH_HOSTS "/etc/hosts"
-# endif /* ! _PATH_HOSTS */
+# endif
diff --git a/contrib/sendmail/include/sendmail/sendmail.h b/contrib/sendmail/include/sendmail/sendmail.h
index c79072299b60..6ab789bd3679 100644
--- a/contrib/sendmail/include/sendmail/sendmail.h
+++ b/contrib/sendmail/include/sendmail/sendmail.h
@@ -29,7 +29,7 @@
**********************************************************************/
#ifndef MAXMAILERS
# define MAXMAILERS 25 /* maximum mailers known to system */
-#endif /* ! MAXMAILERS */
+#endif
/*
** Flags passed to safefile/safedirpath.
diff --git a/contrib/sendmail/include/sm/assert.h b/contrib/sendmail/include/sm/assert.h
index 9d0ae54e6274..57d8c5f52f32 100644
--- a/contrib/sendmail/include/sm/assert.h
+++ b/contrib/sendmail/include/sm/assert.h
@@ -47,19 +47,19 @@ sm_abort __P((
# ifndef SM_CHECK_ALL
# define SM_CHECK_ALL 1
-# endif /* ! SM_CHECK_ALL */
+# endif
# ifndef SM_CHECK_REQUIRE
# define SM_CHECK_REQUIRE SM_CHECK_ALL
-# endif /* ! SM_CHECK_REQUIRE */
+# endif
# ifndef SM_CHECK_ENSURE
# define SM_CHECK_ENSURE SM_CHECK_ALL
-# endif /* ! SM_CHECK_ENSURE */
+# endif
# ifndef SM_CHECK_ASSERT
# define SM_CHECK_ASSERT SM_CHECK_ALL
-# endif /* ! SM_CHECK_ASSERT */
+# endif
# if SM_CHECK_REQUIRE
# if defined(__STDC__) || defined(__cplusplus)
diff --git a/contrib/sendmail/include/sm/bdb.h b/contrib/sendmail/include/sm/bdb.h
index 893d815229fe..832de252ca65 100644
--- a/contrib/sendmail/include/sm/bdb.h
+++ b/contrib/sendmail/include/sm/bdb.h
@@ -17,7 +17,7 @@
# include <db.h>
# ifndef DB_VERSION_MAJOR
# define DB_VERSION_MAJOR 1
-# endif /* ! DB_VERSION_MAJOR */
+# endif
# if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) || DB_VERSION_MAJOR >= 5
diff --git a/contrib/sendmail/include/sm/cdefs.h b/contrib/sendmail/include/sm/cdefs.h
index 0802d5941c97..52f7f7586f0b 100644
--- a/contrib/sendmail/include/sm/cdefs.h
+++ b/contrib/sendmail/include/sm/cdefs.h
@@ -6,7 +6,7 @@
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
- * $Id: cdefs.h,v 1.17 2013-11-22 20:51:31 ca Exp $
+ * $Id: cdefs.h,v 1.17 2013/11/22 20:51:31 ca Exp $
*/
/*
@@ -27,7 +27,7 @@
# if SM_CONF_SYS_CDEFS_H
# include <sys/cdefs.h>
-# endif /* SM_CONF_SYS_CDEFS_H */
+# endif
/*
** Define the standard C language portability macros
@@ -86,9 +86,9 @@
# if __GNUC__ >= 2
# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
# define SM_UNUSED(decl) decl
-# else /* __GNUC__ == 2 && __GNUC_MINOR__ < 7 */
+# else
# define SM_UNUSED(decl) decl __attribute__((__unused__))
-# endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 7 */
+# endif
# else /* __GNUC__ >= 2 */
# define SM_UNUSED(decl) decl
# endif /* __GNUC__ >= 2 */
@@ -112,9 +112,9 @@
# ifdef SM_OMIT_BOGUS_WARNINGS
# define SM_NONVOLATILE volatile
-# else /* SM_OMIT_BOGUS_WARNINGS */
+# else
# define SM_NONVOLATILE
-# endif /* SM_OMIT_BOGUS_WARNINGS */
+# endif
/*
** Turn on format string argument checking.
@@ -131,17 +131,17 @@
# ifndef PRINTFLIKE
# if SM_CONF_FORMAT_TEST
# define PRINTFLIKE(x,y) __attribute__ ((__format__ (__printf__, x, y)))
-# else /* SM_CONF_FORMAT_TEST */
+# else
# define PRINTFLIKE(x,y)
-# endif /* SM_CONF_FORMAT_TEST */
+# endif
# endif /* ! PRINTFLIKE */
# ifndef SCANFLIKE
# if SM_CONF_FORMAT_TEST
# define SCANFLIKE(x,y) __attribute__ ((__format__ (__scanf__, x, y)))
-# else /* SM_CONF_FORMAT_TEST */
+# else
# define SCANFLIKE(x,y)
-# endif /* SM_CONF_FORMAT_TEST */
+# endif
# endif /* ! SCANFLIKE */
#endif /* ! SM_CDEFS_H */
diff --git a/contrib/sendmail/include/sm/clock.h b/contrib/sendmail/include/sm/clock.h
index 2c7a8e45e45c..264f9b277c41 100644
--- a/contrib/sendmail/include/sm/clock.h
+++ b/contrib/sendmail/include/sm/clock.h
@@ -22,7 +22,7 @@
# include <sm/signal.h>
# if SM_CONF_SETITIMER
# include <sys/time.h>
-# endif /* SM_CONF_SETITIMER */
+# endif
/*
** STRUCT SM_EVENT -- event queue.
@@ -37,9 +37,9 @@ struct sm_event
{
# if SM_CONF_SETITIMER
struct timeval ev_time; /* time of the call (microseconds) */
-# else /* SM_CONF_SETITIMER */
+# else
time_t ev_time; /* time of the call (seconds) */
-# endif /* SM_CONF_SETITIMER */
+# endif
void (*ev_func)__P((int));
/* function to call */
int ev_arg; /* argument to ev_func */
diff --git a/contrib/sendmail/include/sm/conf.h b/contrib/sendmail/include/sm/conf.h
index 761e01f1f244..7bb031bb0bc0 100644
--- a/contrib/sendmail/include/sm/conf.h
+++ b/contrib/sendmail/include/sm/conf.h
@@ -42,7 +42,7 @@
# ifdef __STDC__
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
-# endif /* __STDC__ */
+# endif
/*
** Assume you have standard calls; can be #undefed below if necessary.
@@ -50,15 +50,15 @@
# ifndef HASLSTAT
# define HASLSTAT 1 /* has lstat(2) call */
-# endif /* ! HASLSTAT */
+# endif
# ifndef HASNICE
# define HASNICE 1 /* has nice(2) call */
-# endif /* ! HASNICE */
+# endif
# ifndef HASRRESVPORT
# define HASRRESVPORT 1 /* has rrsevport(3) call */
-# endif /* ! HASRRESVPORT */
+# endif
/**********************************************************************
** "Hard" compilation options.
@@ -101,27 +101,27 @@
# define LDA_USE_LOCKF 1
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */
-# endif /* ! HASGETUSERSHELL */
+# endif
# ifdef HPUX10
# define _PATH_SENDMAIL "/usr/sbin/sendmail"
# ifndef SMRSH_CMDDIR
# define SMRSH_CMDDIR "/var/adm/sm.bin"
-# endif /* ! SMRSH_CMDDIR */
-# endif /* HPUX10 */
+# endif
+# endif
# ifdef HPUX11
# define HASSETREUID 1 /* setreuid(2) works on HP-UX 11.x */
# define HASFCHOWN 1 /* has fchown(2) */
# ifndef BROKEN_RES_SEARCH
# define BROKEN_RES_SEARCH 1 /* res_search(unknown) returns h_errno=0 */
-# endif /* ! BROKEN_RES_SEARCH */
+# endif
# ifndef SMRSH_CMDDIR
# define SMRSH_CMDDIR "/var/adm/sm.bin"
-# endif /* ! SMRSH_CMDDIR */
+# endif
# define _PATH_SENDMAIL "/usr/sbin/sendmail"
# else /* HPUX11 */
# ifndef NOT_SENDMAIL
# define syslog hard_syslog
-# endif /* ! NOT_SENDMAIL */
+# endif
# endif /* HPUX11 */
# define SAFENFSPATHCONF 1 /* pathconf(2) pessimizes on NFS filesystems */
@@ -130,28 +130,28 @@
# define _PATH_UNIX "/stand/vmunix"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# ifndef IDENTPROTO
# define IDENTPROTO 1 /* TCP/IP implementation fixed in 10.0 */
-# endif /* ! IDENTPROTO */
+# endif
# include <sys/mpctl.h> /* for mpctl() in get_num_procs_online() */
# else /* V4FS */
/* HP-UX 9.x */
# define _PATH_UNIX "/hp-ux"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# ifdef __STDC__
extern void hard_syslog(int, char *, ...);
-# else /* __STDC__ */
+# else
extern void hard_syslog();
-# endif /* __STDC__ */
+# endif
# define FDSET_CAST (int *) /* cast for fd_set parameters to select */
# endif /* V4FS */
@@ -169,7 +169,7 @@ extern void hard_syslog();
# define SOCKOPT_LEN_T socklen_t /* arg#5 to getsockopt */
# if _AIX5 >= 50200
# define HASUNSETENV 1 /* has unsetenv(3) call */
-# endif /* _AIX5 >= 50200 */
+# endif
# endif /* _AIX5 */
/*
@@ -183,12 +183,12 @@ extern void hard_syslog();
# define TZ_TYPE TZ_NAME /* use tzname[] vector */
# ifndef SOCKOPT_LEN_T
# define SOCKOPT_LEN_T size_t /* arg#5 to getsockopt */
-# endif /* SOCKOPT_LEN_T */
+# endif
# if _AIX4 >= 40200
# define HASSETREUID 1 /* setreuid(2) works as of AIX 4.2 */
# ifndef SOCKADDR_LEN_T
# define SOCKADDR_LEN_T size_t /* e.g., arg#3 to accept, getsockname */
-# endif /* SOCKADDR_LEN_T */
+# endif
# endif /* _AIX4 >= 40200 */
# if defined(_ILS_MACROS) /* IBM versions aren't side-effect clean */
# undef isascii
@@ -220,17 +220,17 @@ extern void hard_syslog();
# define SPT_PADCHAR '\0' /* pad process title with nulls */
# ifndef LA_TYPE
# define LA_TYPE LA_INT
-# endif /* LA_TYPE */
+# endif
# define FSHIFT 16
# define LA_AVENRUN "avenrun"
# if !defined(_AIX4) || _AIX4 < 40300
# ifndef __BIT_TYPES_DEFINED__
# define SM_INT32 int
-# endif /* __BIT_TYPES_DEFINED__ */
+# endif
# endif /* !defined(_AIX4) || _AIX4 < 40300 */
# if !defined(_AIX4) || _AIX4 < 40200
# define SM_CONF_SYSLOG 0
-# endif /* !defined(_AIX4) || _AIX4 < 40200 */
+# endif
# endif /* _AIX3 */
@@ -272,16 +272,16 @@ typedef int pid_t;
/* make this sendmail in a completely different place */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/local/newmail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/usr/local/newmail/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# endif /* AIX */
# if defined(_AIX)
# define LDA_USE_LOCKF 1
# define LDA_USE_SETEUID 1
-# endif /* defined(_AIX) */
+# endif
/*
** Silicon Graphics IRIX
@@ -310,7 +310,7 @@ typedef int pid_t;
# if defined(_SC_NPROC_ONLN) && !defined(_SC_NPROCESSORS_ONLN)
/* _SC_NPROC_ONLN is 'mpadmin -u', total # of unrestricted processors */
# define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN
-# endif /* if defined(_SC_NPROC_ONLN) && !defined(_SC_NPROCESSORS_ONLN) */
+# endif
# ifdef IRIX6
# define STAT64 1
# define QUAD_T unsigned long long
@@ -360,7 +360,7 @@ typedef int pid_t;
# define SAFENFSPATHCONF 1 /* pathconf(2) pessimizes on NFS filesystems */
# ifndef HASFCHOWN
# define HASFCHOWN 1 /* fchown(2) */
-# endif /* ! HASFCHOWN */
+# endif
# ifdef __svr4__
# define LDA_USE_LOCKF 1
@@ -374,67 +374,67 @@ typedef int pid_t;
# if defined(NOT_SENDMAIL) && !defined(SOLARIS) && defined(sun) && (defined(__svr4__) || defined(__SVR4))
# define SOLARIS 1 /* unknown Solaris version */
-# endif /* defined(NOT_SENDMAIL) && !defined(SOLARIS) && defined(sun) && (defined(__svr4__) || defined(__SVR4)) */
+# endif
# ifdef SOLARIS
/* Solaris 2.x (a.k.a. SunOS 5.x) */
# ifndef __svr4__
# define __svr4__ /* use all System V Release 4 defines below */
-# endif /* ! __svr4__ */
+# endif
# if SOLARIS >= 21100
# include <paths.h>
-# endif /* SOLARIS >= 21100 */
+# endif
# ifndef _PATH_VARRUN
# define _PATH_VARRUN "/var/run/"
-# endif /* _PATH_VARRUN */
+# endif
# define GIDSET_T gid_t
# define USE_SA_SIGACTION 1 /* use sa_sigaction field */
# define BROKEN_PTHREAD_SLEEP 1 /* sleep after pthread_create() fails */
# define HASSTRERROR 1 /* has strerror(3) */
# ifndef _PATH_UNIX
# define _PATH_UNIX "/dev/ksyms"
-# endif /* ! _PATH_UNIX */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# ifndef _PATH_HOSTS
# define _PATH_HOSTS "/etc/inet/hosts"
-# endif /* ! _PATH_HOSTS */
+# endif
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 1024 /* allow full size syslog buffer */
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
# ifndef TZ_TYPE
# define TZ_TYPE TZ_TZNAME
-# endif /* ! TZ_TYPE */
+# endif
# if SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203)
# define USESETEUID 1 /* seteuid works as of 2.3 */
# define LDA_CONTENTLENGTH 1 /* Needs the Content-Length header */
-# endif /* SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203) */
+# endif
# if SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205)
# define HASSETREUID 1 /* setreuid works as of 2.5 */
# define HASSETREGID 1 /* use setregid(2) to set saved gid */
# if SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206)
# define HASSNPRINTF 1 /* has snprintf(3c) starting in 2.6 */
-# endif /* SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) */
+# endif
# if SOLARIS < 207 || (SOLARIS > 10000 && SOLARIS < 20700)
# ifndef LA_TYPE
# define LA_TYPE LA_KSTAT /* use kstat(3k) -- may work in < 2.5 */
-# endif /* ! LA_TYPE */
-# ifndef RANDOMSHIFT /* random() doesn't work well (sometimes) */
+# endif
+# ifndef RANDOMSHIFT /* random() doesn't work well (sometimes) */
# define RANDOMSHIFT 8
-# endif /* ! RANDOMSHIFT */
+# endif
# endif /* SOLARIS < 207 || (SOLARIS > 10000 && SOLARIS < 20700) */
# else /* SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205) */
# ifndef HASRANDOM
# define HASRANDOM 0 /* doesn't have random(3) */
-# endif /* ! HASRANDOM */
+# endif
# endif /* SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205) */
# if (SOLARIS > 10000 && SOLARIS < 20600) || SOLARIS < 206
# define SM_INT32 int /* 32bit integer */
-# endif /* (SOLARIS > 10000 && SOLARIS < 20600) || SOLARIS < 206 */
+# endif
# if SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207)
# ifndef LA_TYPE
# include <sys/loadavg.h>
@@ -452,7 +452,7 @@ typedef int pid_t;
# define _PATH_SENDMAILPID _PATH_VARRUN "sendmail.pid"
# ifndef SMRSH_CMDDIR
# define SMRSH_CMDDIR "/var/adm/sm.bin"
-# endif /* ! SMRSH_CMDDIR */
+# endif
# define SL_FUDGE 34 /* fudge offset for SyslogPrefixLen */
# define HASLDAPGETALIASBYNAME 1 /* added in S8 */
# endif /* SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208) */
@@ -463,7 +463,7 @@ typedef int pid_t;
# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */
# if SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210)
# define HASUNSETENV 1 /* unsetenv() added in S10 */
-# endif /* SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210) */
+# endif
# if SOLARIS >= 21100 || (SOLARIS < 10000 && SOLARIS >= 211)
# define GETLDAPALIASBYNAME_VERSION 2 /* changed in S11 */
# define HAVE_NANOSLEEP 1 /* moved from librt to libc in S11 */
@@ -472,10 +472,10 @@ typedef int pid_t;
# endif /* SOLARIS >= 21100 || (SOLARIS < 10000 && SOLARIS >= 211) */
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
-# endif /* ! HASGETUSERSHELL */
+# endif
# if SOLARIS < 21200
# define SIGWAIT_TAKES_1_ARG 1 /* S12 moves to UNIX V7 semantic */
-# endif /* SOLARIS < 21200 */
+# endif
# else /* SOLARIS */
/* SunOS 4.0.3 or 4.1.x */
@@ -483,14 +483,14 @@ typedef int pid_t;
# define HASSETREUID 1 /* has setreuid(2) call */
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# define TZ_TYPE TZ_TM_ZONE /* use tm->tm_zone */
# include <memory.h>
# include <vfork.h>
# ifdef __GNUC__
# define strtoul strtol /* gcc library bogosity */
-# endif /* __GNUC__ */
+# endif
# define memmove(d, s, l) (bcopy((s), (d), (l)))
# define atexit(f) on_exit((f), 0) /* ugly hack for SunOS */
# define SM_INT32 int /* 32bit integer */
@@ -522,7 +522,7 @@ extern char *getenv();
# ifndef LA_TYPE
# define LA_TYPE LA_INT
-# endif /* ! LA_TYPE */
+# endif
# endif /* defined(sun) && !defined(BSD) */
@@ -536,7 +536,7 @@ extern char *getenv();
# ifdef DGUX_5_4_2
# define DGUX 1
-# endif /* DGUX_5_4_2 */
+# endif
# ifdef DGUX
# define SYSTEM5 1
@@ -549,7 +549,7 @@ extern char *getenv();
# define HASGETUSERSHELL 0 /* does not have getusershell(3) */
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# define SPT_TYPE SPT_NONE /* don't use setproctitle */
# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
# define LDA_USE_LOCKF 1
@@ -585,14 +585,14 @@ extern long dgux_inet_addr();
# define HASFCHOWN 1 /* has fchown(2) syscall */
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# ifndef BROKEN_RES_SEARCH
# define BROKEN_RES_SEARCH 1 /* res_search(unknown) returns h_errno=0 */
-# endif /* ! BROKEN_RES_SEARCH */
+# endif
# if !defined(NEEDLOCAL_HOSTNAME_LENGTH) && NAMED_BIND && __RES >= 19931104 && __RES < 19950621
# define NEEDLOCAL_HOSTNAME_LENGTH 1 /* see sendmail/README */
-# endif /* !defined(NEEDLOCAL_HOSTNAME_LENGTH) && NAMED_BIND && __RES >= 19931104 && __RES < 19950621 */
+# endif
# ifdef vax
# define LA_TYPE LA_FLOAT
# else /* vax */
@@ -602,7 +602,7 @@ extern long dgux_inet_addr();
# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* pre-4.4 TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# define SYSLOG_BUFSIZE 256
# define SM_CONF_SYSLOG 0
# endif /* ultrix */
@@ -618,7 +618,7 @@ extern long dgux_inet_addr();
# define __osf__ 1 /* get OSF/1 defines below */
# ifndef TZ_TYPE
# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */
-# endif /* ! TZ_TYPE */
+# endif
# endif /* __ksr__ */
@@ -626,14 +626,14 @@ extern long dgux_inet_addr();
** OSF/1 for Intel Paragon.
**
** Contributed by Jeff A. Earickson <jeff@ssd.intel.com>
-** of Intel Scalable Systems Divison.
+** of Intel Scalable Systems Division.
*/
# ifdef __PARAGON__
# define __osf__ 1 /* get OSF/1 defines below */
# ifndef TZ_TYPE
# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */
-# endif /* ! TZ_TYPE */
+# endif
# define GIDSET_T gid_t
# define MAXNAMLEN NAME_MAX
# endif /* __PARAGON__ */
@@ -661,18 +661,18 @@ extern long dgux_inet_addr();
# include <standards.h>
# if _XOPEN_SOURCE+0 >= 400
# define HASFLOCK 0 /* 5.0 and later has bad flock(2) call */
-# else /* _XOPEN_SOURCE+0 >= 400 */
+# else
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* _XOPEN_SOURCE+0 >= 400 */
+# endif
# endif /* ! HASFLOCK */
# define LA_TYPE LA_ALPHAOSF
# define SFS_TYPE SFS_STATVFS /* use <sys/statvfs.h> statfs() impl */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/var/adm/sendmail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# if _FFR_DIGUNIX_SAFECHOWN
/*
** Testing on a Digital UNIX 4.0a system showed this to be the correct
@@ -694,17 +694,17 @@ extern long dgux_inet_addr();
# define NEEDPUTENV 2 /* need putenv(3) call; no setenv(3) call */
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# define UID_T int /* compiler gripes on uid_t */
# define GID_T int /* ditto for gid_t */
# define MODE_T int /* and mode_t */
# define setpgid setpgrp
# ifndef NOT_SENDMAIL
# define sleep sleepX
-# endif /* ! NOT_SENDMAIL */
+# endif
# ifndef LA_TYPE
# define LA_TYPE LA_MACH
-# endif /* ! LA_TYPE */
+# endif
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# ifdef _POSIX_SOURCE
extern struct passwd *getpwent();
@@ -719,31 +719,31 @@ typedef int pid_t;
# endif /* _POSIX_SOURCE */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/etc/sendmail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# define SM_INT32 int /* 32bit integer */
# ifdef TCPWRAPPERS
# ifndef HASUNSETENV
# define HASUNSETENV 1
-# endif /* ! HASUNSETENV */
+# endif
# undef NEEDPUTENV
# endif /* TCPWRAPPERS */
# ifndef __APPLE__
# include <libc.h>
# ifndef S_IRUSR
# define S_IRUSR S_IREAD
-# endif /* ! S_IRUSR */
+# endif
# ifndef S_IWUSR
# define S_IWUSR S_IWRITE
-# endif /* ! S_IWUSR */
+# endif
# define _PATH_MAILDIR "/usr/spool/mail"
# endif /* ! __APPLE__ */
# ifndef isascii
# define isascii(c) ((unsigned)(c) <= 0177)
-# endif /* ! isascii */
+# endif
# endif /* NeXT */
/*
@@ -774,6 +774,12 @@ typedef int pid_t;
# define HASURANDOMDEV 1 /* has urandom(4) */
# define HASSTRERROR 1 /* has strerror(3) */
# define HASGETUSERSHELL 1 /* had getusershell(3) */
+# if DARWIN >=180000
+# ifdef HASRRESVPORT
+# undef HASRRESVPORT
+# endif
+# define HASRRESVPORT 0 /* deprecated rresvport() */
+# endif
# define GIDSET_T gid_t /* getgroups(2) takes gid_t */
# define LA_TYPE LA_SUBR /* use getloadavg(3) */
# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
@@ -820,7 +826,7 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define NETLINK 1 /* supports AF_LINK */
# ifndef LA_TYPE
# define LA_TYPE LA_SUBR
-# endif /* ! LA_TYPE */
+# endif
# 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)*/
@@ -849,7 +855,7 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
# ifndef LA_TYPE
# define LA_TYPE LA_SUBR
-# endif /* ! LA_TYPE */
+# endif
# define GIDSET_T gid_t
# define QUAD_T quad_t
# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312
@@ -862,13 +868,13 @@ extern unsigned int sleepX __P((unsigned int seconds));
# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312 */
# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 /* on 3.x */
# define HASSETUSERCONTEXT 1 /* has setusercontext */
-# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 */
+# endif
# if defined(_BSDI_VERSION) && _BSDI_VERSION <= 199701 /* 3.1 and earlier */
# define MODE_T int /* va_arg() can't handle less than int */
-# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION <= 199701 */
+# endif
# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 /* on 4.x */
# define HASURANDOMDEV 1 /* has /dev/urandom(4) */
-# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 */
+# endif
# endif /* __bsdi__ */
@@ -963,7 +969,7 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define HASSNPRINTF 1 /* has snprintf(3) (all versions?) */
# ifndef LA_TYPE
# define LA_TYPE LA_SUBR
-# endif /* ! LA_TYPE */
+# endif
# if defined(__NetBSD__) && defined(__NetBSD_Version__) && \
((__NetBSD_Version__ >= 200040000 && __NetBSD_Version__ < 200090000) || \
(__NetBSD_Version__ >= 299000900))
@@ -975,10 +981,10 @@ extern unsigned int sleepX __P((unsigned int seconds));
# if defined(__NetBSD__) && (NetBSD > 199307 || NetBSD0_9 > 1)
# undef SPT_TYPE
# define SPT_TYPE SPT_BUILTIN /* setproctitle is in libc */
-# endif /* defined(__NetBSD__) && (NetBSD > 199307 || NetBSD0_9 > 1) */
+# endif
# if defined(__NetBSD__) && ((__NetBSD_Version__ > 102070000) || (NetBSD1_2 > 8) || defined(NetBSD1_4) || defined(NetBSD1_3))
# define HASURANDOMDEV 1 /* has /dev/urandom(4) */
-# endif /* defined(__NetBSD__) && ((__NetBSD_Version__ > 102070000) || (NetBSD1_2 > 8) || defined(NetBSD1_4) || defined(NetBSD1_3)) */
+# endif
# if defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 104170000
# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */
# endif
@@ -1002,10 +1008,10 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */
# ifndef SMRSH_CMDDIR
# define SMRSH_CMDDIR "/usr/libexec/sm.bin"
-# endif /* ! SMRSH_CMDDIR */
+# endif
# ifndef SMRSH_PATH
# define SMRSH_PATH "/bin:/usr/bin"
-# endif /* ! SMRSH_PATH */
+# endif
# define USESYSCTL 1 /* use sysctl(3) for getting ncpus */
# include <sys/sysctl.h>
# endif /* defined(__DragonFly__) */
@@ -1019,24 +1025,24 @@ extern unsigned int sleepX __P((unsigned int seconds));
# if __FreeBSD__ >= 2
# include <osreldate.h>
# if __FreeBSD_version >= 199512 /* 2.2-current when it appeared */
-# if __FreeBSD_version < 500012
-# include <libutil.h>
-# endif
+# if __FreeBSD_version < 500012 /* Moved to libc in 2000 */
+# include <libutil.h>
+# endif
# define SPT_TYPE SPT_BUILTIN
# endif /* __FreeBSD_version >= 199512 */
# if __FreeBSD_version >= 222000 /* 2.2.2-release and later */
# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */
-# endif /* __FreeBSD_version >= 222000 */
+# endif
# if __FreeBSD_version >= 300000 /* 3.0.0-release and later */
# define HAVE_NANOSLEEP 1 /* has nanosleep(2) */
-# endif /* __FreeBSD_version >= 300000 */
+# endif
# if __FreeBSD_version >= 330000 /* 3.3.0-release and later */
# ifndef SMRSH_CMDDIR
# define SMRSH_CMDDIR "/usr/libexec/sm.bin"
-# endif /* ! SMRSH_CMDDIR */
+# endif
# ifndef SMRSH_PATH
# define SMRSH_PATH "/bin:/usr/bin"
-# endif /* ! SMRSH_PATH */
+# endif
# endif /* __FreeBSD_version >= 330000 */
# if __FreeBSD_version >= 430000 /* 4.3.0-release and later */
# define SOCKADDR_LEN_T socklen_t /* e.g., arg#3 to accept, getsockname */
@@ -1048,7 +1054,7 @@ extern unsigned int sleepX __P((unsigned int seconds));
# ifndef SPT_TYPE
# define SPT_TYPE SPT_REUSEARGV
# define SPT_PADCHAR '\0' /* pad process title with nulls */
-# endif /* ! SPT_TYPE */
+# endif
# endif /* defined(__FreeBSD__) */
# if defined(__OpenBSD__)
# undef SPT_TYPE
@@ -1056,24 +1062,30 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define HASSETLOGIN 1 /* has setlogin(2) */
# if OpenBSD < 200305
# define HASSETREUID 0 /* setreuid(2) broken in OpenBSD < 3.3 */
-# endif /* OpenBSD < 200305 */
+# endif
# define HASSETEGID 1 /* use setegid(2) to set saved gid */
# define HASURANDOMDEV 1 /* has /dev/urandom(4) */
# if OpenBSD >= 200006
# define HASSRANDOMDEV 1 /* has srandomdev(3) */
-# endif /* OpenBSD >= 200006 */
+# endif
# if OpenBSD >= 200012
# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */
-# endif /* OpenBSD >= 200012 */
+# endif
# if OpenBSD >= 200405
# define HASCLOSEFROM 1 /* closefrom(3) added in 3.5 */
-# endif /* OpenBSD >= 200405 */
+# endif
# if OpenBSD >= 200505
# undef NETISO /* iso.h removed in 3.7 */
-# endif /* OpenBSD >= 200505 */
+# endif
# if OpenBSD >= 200800
# define HAVE_NANOSLEEP 1 /* has nanosleep(2) */
-# endif /* OpenBSD >= 200800 */
+# endif
+# ifndef SOCKADDR_LEN_T
+# define SOCKADDR_LEN_T socklen_t /* e.g., arg#3 to accept, getsockname */
+# endif
+# ifndef SOCKOPT_LEN_T
+# define SOCKOPT_LEN_T socklen_t /* arg#5 to getsockopt */
+# endif
# endif /* defined(__OpenBSD__) */
# endif /* defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) */
@@ -1090,23 +1102,23 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define HASINITGROUPS 1 /* has initgroups(3) call */
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */
# define NEEDSTRTOL 1 /* need the strtol() function */
# define setpgid setpgrp
# ifndef LA_TYPE
# define LA_TYPE LA_FLOAT
-# endif /* ! LA_TYPE */
+# endif
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# undef HASSETVBUF /* don't actually have setvbuf(3) */
# undef WEXITSTATUS
# undef WIFEXITED
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# endif /* defined(MACH) && defined(i386) && !defined(__GNU__) */
@@ -1162,13 +1174,13 @@ extern unsigned int sleepX __P((unsigned int seconds));
# define setpgid setpgrp
# ifndef LA_TYPE
# define LA_TYPE LA_FLOAT
-# endif /* ! LA_TYPE */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# undef WEXITSTATUS
# undef WIFEXITED
typedef short pid_t;
@@ -1207,7 +1219,7 @@ typedef short pid_t;
# define LDA_USE_LOCKF 1
# ifndef LA_TYPE
# define LA_TYPE LA_DEVSHORT
-# endif /* ! LA_TYPE */
+# endif
# define _PATH_AVENRUN "/dev/table/avenrun"
# ifndef _SCO_unix_4_2
# define _SCO_unix_4_2
@@ -1231,7 +1243,7 @@ typedef short pid_t;
# define NOFTRUNCATE 0 /* has (simulated) ftruncate call */
# ifndef USE_SIGLONGJMP
# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */
-# endif /* ! USE_SIGLONGJMP */
+# endif
# define MAXPATHLEN PATHSIZE
# define SFS_TYPE SFS_4ARGS /* use <sys/statfs.h> 4-arg impl */
# define SFS_BAVAIL f_bfree /* alternate field name */
@@ -1243,15 +1255,15 @@ typedef short pid_t;
# define _PATH_UNIX "/unix"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
/* stuff fixed in later releases */
# ifndef _SCO_unix_4_2
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
-# endif /* ! _SCO_unix_4_2 */
+# endif
# ifndef _SCO_DS
# define ftruncate chsize /* use chsize(2) to emulate ftruncate */
@@ -1285,10 +1297,10 @@ typedef short pid_t;
# define _PATH_UNIX "/unix"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# endif /* ISC_UNIX */
@@ -1364,7 +1376,7 @@ extern struct group *getgrnam();
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef S_IREAD
# define S_IREAD _S_IREAD
# define S_IWRITE _S_IWRITE
@@ -1375,22 +1387,22 @@ extern struct group *getgrnam();
# endif /* ! S_IREAD */
# ifndef TZ_TYPE
# define TZ_TYPE TZ_TIMEZONE
-# endif /* ! TZ_TYPE */
+# endif
# ifndef IDENTPROTO
# define IDENTPROTO 1
-# endif /* ! IDENTPROTO */
+# endif
# ifndef SHARE_V1
# define SHARE_V1 1 /* version 1 of the fair share scheduler */
-# endif /* ! SHARE_V1 */
+# endif
# if !defined(__GNUC__ )
-# define UID_T int /* GNUC gets it right, ConvexC botches */
-# define GID_T int /* GNUC gets it right, ConvexC botches */
-# endif /* !defined(__GNUC__ ) */
+# define UID_T int /* GNUC gets it right, ConvexC botches */
+# define GID_T int /* GNUC gets it right, ConvexC botches */
+# endif
# if SECUREWARE
# define FORK fork /* SecureWare wants the real fork! */
-# else /* SECUREWARE */
+# else
# define FORK vfork /* the rest of the OS versions don't care */
-# endif /* SECUREWARE */
+# endif
# endif /* _CONVEX_SOURCE */
@@ -1405,7 +1417,7 @@ extern struct group *getgrnam();
# define HASUNSETENV 1 /* has unsetenv(3) call */
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# define WAITUNION 1 /* use "union wait" as wait argument type */
# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */
# define NEEDPUTENV 1 /* need putenv(3) call */
@@ -1430,7 +1442,7 @@ extern void *malloc();
# ifdef RISCOS_4_0
# ifndef ARBPTR_T
# define ARBPTR_T char *
-# endif /* ! ARBPTR_T */
+# endif
# undef HASFLOCK
# define HASFLOCK 0
# endif /* RISCOS_4_0 */
@@ -1460,15 +1472,15 @@ extern void *malloc();
# include <linux/version.h>
# if !defined(KERNEL_VERSION) /* not defined in 2.0.x kernel series */
# define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-# endif /* !defined(KERNEL_VERSION) */
+# endif
# 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 */
+# endif
# ifndef USESETEUID
# define USESETEUID 0 /* has it due to POSIX, but doesn't work */
-# endif /* USESETEUID */
+# endif
# 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 */
@@ -1476,51 +1488,60 @@ extern void *malloc();
# define GIDSET_T gid_t /* from <linux/types.h> */
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* getusershell(3) broken in Slackware 2.0 */
-# endif /* HASGETUSERSHELL */
+# endif
# ifndef IP_SRCROUTE
# define IP_SRCROUTE 0 /* linux <= 1.2.8 doesn't support IP_OPTIONS */
-# endif /* ! IP_SRCROUTE */
+# endif
# ifndef HAS_IN_H
# define HAS_IN_H 1 /* use netinet/in.h */
-# endif /* ! HAS_IN_H */
+# endif
# ifndef USE_SIGLONGJMP
# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */
-# endif /* ! USE_SIGLONGJMP */
+# endif
# ifndef HASFLOCK
# if LINUX_VERSION_CODE < 66399
# define HASFLOCK 0 /* flock(2) is broken after 0.99.13 */
# else /* LINUX_VERSION_CODE < 66399 */
# if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0))
# define HASFLOCK 1 /* flock(2) fixed after 1.3.95 */
-# else /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) */
+# else
# define HASFLOCK 0 /* flock(2) is broken (again) after 2.4.0 */
-# endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) */
+# endif
# endif /* LINUX_VERSION_CODE < 66399 */
# endif /* ! HASFLOCK */
# ifndef LA_TYPE
# define LA_TYPE LA_PROCSTR
-# endif /* ! LA_TYPE */
+# endif
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() impl */
# define SPT_PADCHAR '\0' /* pad process title with nulls */
# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0))
# ifndef HASURANDOMDEV
# define HASURANDOMDEV 1 /* 2.0 (at least) has linux/drivers/char/random.c */
-# endif /* ! HASURANDOMDEV */
+# endif
# endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)) */
# if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
# define HASSTRERROR 1 /* has strerror(3) */
-# endif /* defined(__GLIBC__) && defined(__GLIBC_MINOR__) */
+# endif
# ifndef TZ_TYPE
# define TZ_TYPE TZ_NONE /* no standard for Linux */
-# endif /* ! TZ_TYPE */
+# endif
# if (__GLIBC__ >= 2)
# include <paths.h>
-# endif /* (__GLIBC__ >= 2) */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# include <sys/sysmacros.h>
# undef atol /* wounded in <stdlib.h> */
+
+# if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
+# define GLIBC_VERSION ((__GLIBC__ << 9) + __GLIBC_MINOR__)
+# if (GLIBC_VERSION >= 0x201)
+# define SOCKADDR_LEN_T socklen_t
+# define SOCKOPT_LEN_T socklen_t
+# endif
+# endif /* defined(__GLIBC__) && defined(__GLIBC_MINOR__) */
+
# if NETINET6
/*
** Linux doesn't have a good way to tell userland what interfaces are
@@ -1535,27 +1556,24 @@ extern void *malloc();
** in 2.1 and later, but the APIs appear before the functions.
*/
# if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
-# define GLIBC_VERSION ((__GLIBC__ << 8) + __GLIBC_MINOR__)
# if (GLIBC_VERSION >= 0x201)
-# define SOCKADDR_LEN_T socklen_t
-# define SOCKOPT_LEN_T socklen_t
# undef IPPROTO_ICMPV6 /* linux #defines, glibc enums */
-# else /* (GLIBC_VERSION >= 0x201) */
+# else
# include <linux/in6.h> /* IPv6 support */
-# endif /* (GLIBC_VERSION >= 0x201) */
+# endif
# if (GLIBC_VERSION >= 0x201 && !defined(NEEDSGETIPNODE))
/* Have APIs in <netdb.h>, but no support in glibc */
# define NEEDSGETIPNODE 1
-# endif /* (GLIBC_VERSION >= 0x201 && !defined(NEEDSGETIPNODE)) */
+# endif
# undef GLIBC_VERSION
# endif /* defined(__GLIBC__) && defined(__GLIBC_MINOR__) */
# endif /* NETINET6 */
# ifndef HASFCHOWN
# define HASFCHOWN 1 /* fchown(2) */
-# endif /* ! HASFCHOWN */
+# endif
# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,36)) && !defined(HASFCHMOD)
# define HASFCHMOD 1 /* fchmod(2) */
-# endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,36)) && !defined(HASFCHMOD) */
+# endif
# endif /* __linux__ */
@@ -1598,20 +1616,20 @@ extern void *malloc();
# define ERRLIST_PREDEFINED 1
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# ifndef LA_TYPE
# define LA_TYPE LA_INT
# define FSHIFT 16
-# endif /* ! LA_TYPE */
+# endif
# define LA_AVENRUN "avenrun"
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# define TZ_TYPE TZ_TZNAME
# ifndef _PATH_UNIX
# define _PATH_UNIX "/unix" /* should be in <paths.h> */
-# endif /* ! _PATH_UNIX */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# undef WIFEXITED
# undef WEXITSTATUS
# endif /* _AUX_SOURCE */
@@ -1672,7 +1690,7 @@ typedef int pid_t;
# define LA_TYPE LA_FLOAT
# ifdef _POSIX_VERSION
# undef _POSIX_VERSION /* set in <unistd.h> */
-# endif /* _POSIX_VERSION */
+# endif
# undef HASSETVBUF /* don't actually have setvbuf(3) */
# define setpgid setpgrp
@@ -1686,14 +1704,14 @@ typedef int pid_t;
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# ifndef _PATH_UNIX
# define _PATH_UNIX "/dynix"
-# endif /* ! _PATH_UNIX */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# endif /* sequent */
@@ -1720,20 +1738,20 @@ typedef int pid_t;
# define SPT_TYPE SPT_NONE /* don't use setproctitle */
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# endif /* _SEQUENT_ */
/*
** Cray UNICOS, UNICOS/mk, and UNICOS/mp
**
** UNICOS:
-** Ported by David L. Kensiski, Sterling Sofware <kensiski@nas.nasa.gov>
+** Ported by David L. Kensiski, Sterling Software <kensiski@nas.nasa.gov>
** Update Brian Ginsbach <ginsbach@cray.com>
** UNICOS/mk (Cray T3E):
** Contributed by Manu Mahonen <mailadm@csc.fi>
@@ -1764,23 +1782,23 @@ typedef int pid_t;
# define GET_IPOPT_DST(dst) *(struct in_addr *)&(dst)
# ifndef MAXPATHLEN
# define MAXPATHLEN PATHSIZE
-# endif /* ! MAXPATHLEN */
+# endif
# ifndef _PATH_UNIX
# ifdef UNICOSMK
# define _PATH_UNIX "/unicosmk.ar"
# else
# define _PATH_UNIX "/unicos"
-# endif /* UNICOSMK */
+# endif
# endif /* ! _PATH_UNIX */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# endif /* UNICOS */
# ifdef _UNICOSMP
# if defined(_SC_NPROC_ONLN) && !defined(_SC_NPROCESSORS_ONLN)
/* _SC_NPROC_ONLN is 'mpadmin -u', total # of unrestricted processors */
# define _SC_NPROCESSORS_ONLN _SC_NPROC_ONLN
-# endif /* if defined(_SC_NPROC_ONLN) && !defined(_SC_NPROCESSORS_ONLN) */
+# endif
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define HASSETRLIMIT 1 /* has setrlimit(2) syscall */
# define LA_TYPE LA_IRIX6 /* figure out at run time */
@@ -1810,20 +1828,20 @@ typedef int pid_t;
# define TZ_TYPE TZ_TZNAME
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# undef S_IFSOCK /* S_IFSOCK and S_IFIFO are the same */
# undef S_IFIFO
# define S_IFIFO 0010000
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# define RLIMIT_NEEDS_SYS_TIME_H 1
# if defined(NGROUPS_MAX) && !NGROUPS_MAX
# undef NGROUPS_MAX
-# endif /* defined(NGROUPS_MAX) && !NGROUPS_MAX */
+# endif
# endif /* apollo */
/*
@@ -1844,17 +1862,17 @@ typedef int pid_t;
# define HASGETUSERSHELL 0 /* lacks getusershell() */
# ifdef HASNICE
# undef HASNICE
-# endif /* HASNICE */
+# endif
# define HASNICE 0 /* lacks nice() */
# define HASRANDOM 0 /* lacks random() */
# ifdef HASRRESVPORT
# undef HASRRESVPORT
-# endif /* HASRRESVPORT */
+# endif
# define HASRRESVPORT 0 /* lacks rresvport() */
# define IP_SRCROUTE 0 /* lacks IP source routing fields */
# ifdef MATCHGECOS
# undef MATCHGECOS
-# endif /* MATCHGECOS */
+# endif
# define MATCHGECOS 0 /* lacks an initialized GECOS field */
# define NEEDFSYNC 1 /* use sendmail's fsync() */
# define NEEDLINK 1 /* use sendmail's link() */
@@ -1914,21 +1932,21 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define SIGWAIT_TAKES_1_ARG 1
# ifndef _PATH_UNIX
# define _PATH_UNIX "/stand/unix"
-# endif /* ! _PATH_UNIX */
+# endif
# define SPT_PADCHAR '\0' /* pad process title with nulls */
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 1024 /* unsure */
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/etc/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# undef offsetof /* avoid stddefs.h, sys/sysmacros.h conflict */
#if !defined(SM_SET_H_ERRNO) && defined(_REENTRANT)
# define SM_SET_H_ERRNO(err) set_h_errno((err))
-#endif /* ! SM_SET_H_ERRNO && _REENTRANT */
+#endif
# endif /* __svr5__ */
/* ###################################################################### */
@@ -1965,13 +1983,13 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# undef WEXITSTATUS
# ifndef _PATH_UNIX
# define _PATH_UNIX "/unix"
-# endif /* ! _PATH_UNIX */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# define SYSLOG_BUFSIZE 128
# endif /* UNIXWARE */
@@ -1986,7 +2004,7 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define SYSTEM5 1 /* looks like System V */
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
-# endif /* ! HASGETUSERSHELL */
+# endif
# define DEV_BSIZE 512 /* device block size not defined */
# define GIDSET_T gid_t
# undef LOG /* syslog not available */
@@ -2066,22 +2084,22 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# ifndef HASSETVBUF
# define HASSETVBUF /* HI-UX has no setlinebuf */
-# endif /* ! HASSETVBUF */
+# endif
# ifndef GIDSET_T
# define GIDSET_T gid_t
-# endif /* ! GIDSET_T */
+# endif
# ifndef _PATH_UNIX
# define _PATH_UNIX "/HI-UX"
-# endif /* ! _PATH_UNIX */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */
-# endif /* ! HASGETUSERSHELL */
+# endif
# define FDSET_CAST (int *) /* cast for fd_set parameters to select */
/*
@@ -2112,7 +2130,7 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define HASSETVBUF 1 /* has setvbuf(3) function */
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* does not have getusershell(3) function */
-# endif /* ! HASGETUSERSHELL */
+# endif
# define GIDSET_T gid_t /* type of 2nd arg to getgroups(2) isn't int */
# define LA_TYPE LA_ZERO /* doesn't have load average */
# define SFS_TYPE SFS_4ARGS /* use 4-arg statfs() */
@@ -2120,7 +2138,7 @@ extern struct passwd * sendmail_mpe_getpwuid __P((uid_t));
# define _PATH_UNIX "/unix"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# endif /* _UTS */
/*
@@ -2153,7 +2171,7 @@ extern struct group *getgrent(), *getgrnam(), *getgrgid();
/* NEWS-OS 4.2.1R */
# ifndef BSD
# define BSD /* has BSD routines */
-# endif /* ! BSD */
+# endif
# define HASUNSETENV 1 /* has unsetenv(2) call */
# undef HASSETVBUF /* don't actually have setvbuf(3) */
# define WAITUNION 1 /* use "union wait" as wait argument type */
@@ -2161,7 +2179,7 @@ extern struct group *getgrent(), *getgrnam(), *getgrgid();
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# define setpgid setpgrp
# undef WIFEXITED
# undef WEXITSTATUS
@@ -2176,26 +2194,26 @@ typedef int (*sigfunc_t)();
/* NEWS-OS 6.0.3 with /bin/cc */
# ifndef __svr4__
# define __svr4__ /* use all System V Release 4 defines below */
-# endif /* ! __svr4__ */
+# endif
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */
# define LA_TYPE LA_READKSYM /* use MIOC_READKSYM ioctl */
# ifndef SPT_TYPE
# define SPT_TYPE SPT_SYSMIPS /* use sysmips() (OS 6.0.2 or later) */
-# endif /* ! SPT_TYPE */
+# endif
# define GIDSET_T gid_t
# undef WIFEXITED
# undef WEXITSTATUS
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 256
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
# define _PATH_UNIX "/stand/unix"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# endif /* ! __svr4 */
# endif /* sony_news */
@@ -2210,7 +2228,7 @@ typedef int (*sigfunc_t)();
# ifdef luna
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# define HASUNSETENV 1 /* has unsetenv(2) call */
# define NEEDPUTENV 1 /* need putenv(3) call */
# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */
@@ -2228,7 +2246,7 @@ typedef int (*sigfunc_t)();
# endif /* luna2 */
# ifdef luna88k
# define LA_TYPE LA_INT
-# endif /* luna88k */
+# endif
# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
# define setpgid setpgrp
# undef WIFEXITED
@@ -2254,7 +2272,7 @@ extern char *getenv();
# if defined(nec_ews_svr4) || defined(_nec_ews_svr4)
# ifndef __svr4__
# define __svr4__ /* use all System V Release 4 defines below */
-# endif /* ! __svr4__ */
+# endif
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define LA_TYPE LA_READKSYM /* use MIOC_READSYM ioctl */
@@ -2265,13 +2283,13 @@ extern char *getenv();
# define NAMELISTMASK 0x7fffffff /* mask for nlist() values */
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 1024 /* allow full size syslog buffer */
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
# endif /* defined(nec_ews_svr4) || defined(_nec_ews_svr4) */
@@ -2293,10 +2311,10 @@ extern char *getenv();
# define _PATH_UNIX "/stand/unix"
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# endif /* __uxp__ */
/*
@@ -2309,7 +2327,7 @@ extern char *getenv();
# define GIDSET_T gid_t
# ifndef IDENTPROTO
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
-# endif /* ! IDENTPROTO */
+# endif
# endif /* DCOSx */
/*
@@ -2333,7 +2351,7 @@ extern char *getenv();
# define SFS_BAVAIL f_bavail
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 256 /* Use 256 bytes */
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
# undef WUNTRACED
# undef WIFEXITED
@@ -2354,13 +2372,13 @@ extern char *getenv();
# ifdef _PowerUX
# ifndef __svr4__
# define __svr4__
-# endif /* ! __svr4__ */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# define SYSLOG_BUFSIZE 1024
# define LA_TYPE LA_ZERO
typedef struct msgb mblk_t;
@@ -2421,10 +2439,10 @@ typedef struct msgb mblk_t;
# include <sys/mkdev.h>
# ifndef major
# define major(dev) ((int)(((dev) >> 8) & 0xff))
-# endif /* ! major */
+# endif
# ifndef minor
# define minor(dev) ((int)((dev) & 0xff))
-# endif /* ! minor */
+# endif
# endif /* defined(__INTERIX) */
@@ -2440,20 +2458,20 @@ typedef struct msgb mblk_t;
# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */
# ifndef HASSETREUID
# define HASSETREUID 1 /* has setreuid(2) call */
-# endif /* ! HASSETREUID */
+# endif
# define HASINITGROUPS 1 /* has initgroups(3) call */
# ifndef IP_SRCROUTE
# define IP_SRCROUTE 1 /* can check IP source routing */
-# endif /* ! IP_SRCROUTE */
+# endif
# ifndef HASSETRLIMIT
# define HASSETRLIMIT 1 /* has setrlimit(2) call */
-# endif /* ! HASSETRLIMIT */
+# endif
# ifndef HASFLOCK
# define HASFLOCK 1 /* has flock(2) call */
-# endif /* ! HASFLOCK */
+# endif
# ifndef TZ_TYPE
# define TZ_TYPE TZ_TM_ZONE /* use tm->tm_zone variable */
-# endif /* ! TZ_TYPE */
+# endif
# endif /* BSD */
/* general System V Release 4 defines */
@@ -2464,33 +2482,33 @@ typedef struct msgb mblk_t;
# define BSD_COMP 1 /* get BSD ioctl calls */
# ifndef HASSETRLIMIT
# define HASSETRLIMIT 1 /* has setrlimit(2) call */
-# endif /* ! HASSETRLIMIT */
+# endif
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
-# endif /* ! HASGETUSERSHELL */
+# endif
# ifndef HASFCHMOD
# define HASFCHMOD 1 /* most (all?) SVr4s seem to have fchmod(2) */
-# endif /* ! HASFCHMOD */
+# endif
# ifndef _PATH_UNIX
# define _PATH_UNIX "/unix"
-# endif /* ! _PATH_UNIX */
+# endif
# ifndef _PATH_VENDOR_CF
# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf"
-# endif /* ! _PATH_VENDOR_CF */
+# endif
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
-# endif /* ! _PATH_SENDMAILPID */
+# endif
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 128
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
# ifndef SFS_TYPE
# define SFS_TYPE SFS_STATVFS
-# endif /* ! SFS_TYPE */
+# endif
# ifndef USE_SIGLONGJMP
# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */
-# endif /* ! USE_SIGLONGJMP */
+# endif
# endif /* __svr4__ */
# ifdef __SVR4
@@ -2507,20 +2525,20 @@ typedef struct msgb mblk_t;
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# ifndef HASULIMIT
# define HASULIMIT 1 /* has the ulimit(2) syscall */
-# endif /* ! HASULIMIT */
+# endif
# ifndef LA_TYPE
# ifdef MIOC_READKSYM
# define LA_TYPE LA_READKSYM /* use MIOC_READKSYM ioctl */
-# else /* MIOC_READKSYM */
+# else
# define LA_TYPE LA_INT /* assume integer load average */
-# endif /* MIOC_READKSYM */
+# endif
# endif /* ! LA_TYPE */
# ifndef SFS_TYPE
# define SFS_TYPE SFS_USTAT /* use System V ustat(2) syscall */
-# endif /* ! SFS_TYPE */
+# endif
# ifndef TZ_TYPE
# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */
-# endif /* ! TZ_TYPE */
+# endif
# endif /* SYSTEM5 */
/* general POSIX defines */
@@ -2538,15 +2556,15 @@ typedef struct msgb mblk_t;
# ifdef titan
# undef HASINITGROUPS /* doesn't have initgroups(3) call */
-# endif /* titan */
+# endif
# ifdef _CRAYCOM
# undef HASSETSID /* despite POSIX claim, doesn't have setsid */
-# endif /* _CRAYCOM */
+# endif
# ifdef MOTO
# undef USESETEUID
-# endif /* MOTO */
+# endif
/*
** Due to a "feature" in some operating systems such as Ultrix 4.3 and
@@ -2561,67 +2579,67 @@ typedef struct msgb mblk_t;
# ifndef IDENTPROTO
# define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */
-# endif /* ! IDENTPROTO */
+# endif
# ifndef IP_SRCROUTE
# define IP_SRCROUTE 1 /* Detect IP source routing */
-# endif /* ! IP_SRCROUTE */
+# endif
# ifndef HASGETUSERSHELL
# define HASGETUSERSHELL 1 /* libc has getusershell(3) call */
-# endif /* ! HASGETUSERSHELL */
+# endif
# ifndef NETUNIX
# define NETUNIX 1 /* include unix domain support */
-# endif /* ! NETUNIX */
+# endif
# ifndef HASRANDOM
# define HASRANDOM 1 /* has random(3) support */
-# endif /* ! HASRANDOM */
+# endif
# ifndef HASFLOCK
# define HASFLOCK 0 /* assume no flock(2) support */
-# endif /* ! HASFLOCK */
+# endif
# ifndef HASSETREUID
# define HASSETREUID 0 /* assume no setreuid(2) call */
-# endif /* ! HASSETREUID */
+# endif
# ifndef HASFCHMOD
# define HASFCHMOD 0 /* assume no fchmod(2) syscall */
-# endif /* ! HASFCHMOD */
+# endif
# ifndef USESETEUID
# define USESETEUID 0 /* assume no seteuid(2) call or no saved ids */
-# endif /* ! USESETEUID */
+# endif
# ifndef HASSETRLIMIT
# define HASSETRLIMIT 0 /* assume no setrlimit(2) support */
-# endif /* ! HASSETRLIMIT */
+# endif
# ifndef HASULIMIT
# define HASULIMIT 0 /* assume no ulimit(2) support */
-# endif /* ! HASULIMIT */
+# endif
# ifndef SECUREWARE
# define SECUREWARE 0 /* assume no SecureWare C2 auditing hooks */
-# endif /* ! SECUREWARE */
+# endif
# ifndef USE_DOUBLE_FORK
# define USE_DOUBLE_FORK 1 /* avoid intermediate zombies */
-# endif /* ! USE_DOUBLE_FORK */
+# endif
# ifndef USE_ENVIRON
# define USE_ENVIRON 0 /* use main() envp instead of extern environ */
-# endif /* ! USE_ENVIRON */
+# endif
# ifndef USE_SIGLONGJMP
# define USE_SIGLONGJMP 0 /* assume setjmp handles signals properly */
-# endif /* ! USE_SIGLONGJMP */
+# endif
# ifndef FDSET_CAST
# define FDSET_CAST /* (empty) cast for fd_set arg to select */
-# endif /* ! FDSET_CAST */
+# endif
/*
** Pick a mailer setuid method for changing the current uid
@@ -2636,9 +2654,9 @@ typedef struct msgb mblk_t;
# else /* USESETEUID */
# if HASSETREUID
# define MAILER_SETUID_METHOD USE_SETREUID
-# else /* HASSETREUID */
+# else
# define MAILER_SETUID_METHOD USE_SETUID
-# endif /* HASSETREUID */
+# endif
# endif /* USESETEUID */
/*
@@ -2649,35 +2667,35 @@ typedef struct msgb mblk_t;
# ifndef GIDSET_T
# define GIDSET_T int
-# endif /* ! GIDSET_T */
+# endif
# ifndef UID_T
# define UID_T uid_t
-# endif /* ! UID_T */
+# endif
# ifndef GID_T
# define GID_T gid_t
-# endif /* ! GID_T */
+# endif
# ifndef MODE_T
# define MODE_T mode_t
-# endif /* ! MODE_T */
+# endif
# ifndef ARGV_T
# define ARGV_T char **
-# endif /* ! ARGV_T */
+# endif
# ifndef SOCKADDR_LEN_T
# define SOCKADDR_LEN_T int
-# endif /* ! SOCKADDR_LEN_T */
+# endif
# ifndef SOCKOPT_LEN_T
# define SOCKOPT_LEN_T int
-# endif /* ! SOCKOPT_LEN_T */
+# endif
# ifndef QUAD_T
# define QUAD_T unsigned long
-# endif /* ! QUAD_T */
+# endif
/**********************************************************************
** Remaining definitions should never have to be changed. They are
** primarily to provide back compatibility for older systems -- for
@@ -2687,43 +2705,43 @@ typedef struct msgb mblk_t;
/* System 5 compatibility */
# ifndef S_ISREG
# define S_ISREG(foo) ((foo & S_IFMT) == S_IFREG)
-# endif /* ! S_ISREG */
+# endif
# ifndef S_ISDIR
# define S_ISDIR(foo) ((foo & S_IFMT) == S_IFDIR)
-# endif /* ! S_ISDIR */
+# endif
# if !defined(S_ISLNK) && defined(S_IFLNK)
# define S_ISLNK(foo) ((foo & S_IFMT) == S_IFLNK)
-# endif /* !defined(S_ISLNK) && defined(S_IFLNK) */
+# endif
# if !defined(S_ISFIFO)
# if defined(S_IFIFO)
# define S_ISFIFO(foo) ((foo & S_IFMT) == S_IFIFO)
-# else /* defined(S_IFIFO) */
+# else
# define S_ISFIFO(foo) false
-# endif /* defined(S_IFIFO) */
+# endif
# endif /* !defined(S_ISFIFO) */
# ifndef S_IRUSR
# define S_IRUSR 0400
-# endif /* ! S_IRUSR */
+# endif
# ifndef S_IWUSR
# define S_IWUSR 0200
-# endif /* ! S_IWUSR */
+# endif
# ifndef S_IRGRP
# define S_IRGRP 0040
-# endif /* ! S_IRGRP */
+# endif
# ifndef S_IWGRP
# define S_IWGRP 0020
-# endif /* ! S_IWGRP */
+# endif
# ifndef S_IROTH
# define S_IROTH 0004
-# endif /* ! S_IROTH */
+# endif
# ifndef S_IWOTH
# define S_IWOTH 0002
-# endif /* ! S_IWOTH */
+# endif
/* close-on-exec flag */
# ifndef FD_CLOEXEC
# define FD_CLOEXEC 1
-# endif /* ! FD_CLOEXEC */
+# endif
/*
** Older systems don't have this error code -- it should be in
@@ -2732,7 +2750,7 @@ typedef struct msgb mblk_t;
# ifndef EX_CONFIG
# define EX_CONFIG 78 /* configuration error */
-# endif /* ! EX_CONFIG */
+# endif
/* pseudo-codes */
# define EX_QUIT 22 /* drop out of server immediately */
@@ -2741,7 +2759,7 @@ typedef struct msgb mblk_t;
#ifndef EX_NOTFOUND
# define EX_NOTFOUND EX_NOHOST
-#endif /* ! EX_NOTFOUND */
+#endif
/* pseudo-code used for mci_setstat */
# define EX_NOTSTICKY (-5) /* don't save persistent status */
@@ -2757,27 +2775,27 @@ typedef struct msgb mblk_t;
/* type of arbitrary pointer */
# ifndef ARBPTR_T
# define ARBPTR_T void *
-# endif /* ! ARBPTR_T */
+# endif
# ifndef __P
# include "sm/cdefs.h"
-# endif /* ! __P */
+# endif
# if HESIOD && !defined(NAMED_BIND)
# define NAMED_BIND 1 /* not one without the other */
-# endif /* HESIOD && !defined(NAMED_BIND) */
+# endif
# if NAMED_BIND && !defined( __ksr__ ) && !defined( h_errno )
extern int h_errno;
-# endif /* NAMED_BIND && !defined( __ksr__ ) && !defined( h_errno ) */
+# endif
# if NEEDPUTENV
extern int putenv __P((char *));
-# endif /* NEEDPUTENV */
+# endif
#if !HASUNSETENV
extern void unsetenv __P((char *));
-#endif /* !HASUNSETENV */
+#endif
# ifdef LDAPMAP
# include <sys/time.h>
@@ -2797,7 +2815,15 @@ extern void unsetenv __P((char *));
# if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_INIT)
# define USE_LDAP_INIT 1
-# endif /* defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_INIT) */
+# endif
+
+# if !defined(LDAP_NETWORK_TIMEOUT) && defined(_FFR_LDAP_NETWORK_TIMEOUT)
+# define LDAP_NETWORK_TIMEOUT _FFR_LDAP_NETWORK_TIMEOUT
+# endif
+
+# if !defined(LDAP_NETWORK_TIMEOUT) && defined(LDAP_OPT_NETWORK_TIMEOUT)
+# define LDAP_NETWORK_TIMEOUT 1
+# endif
/*
** LDAP_OPT_SIZELIMIT is not defined under Umich 3.x nor OpenLDAP 1.x,
@@ -2806,7 +2832,7 @@ extern void unsetenv __P((char *));
# if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_SET_OPTION)
# define USE_LDAP_SET_OPTION 1
-# endif /* defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_SET_OPTION) */
+# endif
# endif /* LDAPMAP */
@@ -2814,7 +2840,7 @@ extern void unsetenv __P((char *));
# include <sys/utsname.h>
# ifdef newstr
# undef newstr
-# endif /* newstr */
+# endif
# else /* HASUNAME */
# define NODE_LENGTH 32
struct utsname
@@ -2825,10 +2851,10 @@ struct utsname
# if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_) && !defined(NonStop_UX_BXX) && !defined(ALTOS_SYSTEM_V)
# define MAXHOSTNAMELEN 256
-# endif /* !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_) && !defined(NonStop_UX_BXX) && !defined(ALTOS_SYSTEM_V) */
+# endif
-# if _FFR_LINUX_MHNL && defined(__linux__) && MAXHOSTNAMELEN < 255
+# if defined(__linux__) && MAXHOSTNAMELEN < 255
/*
** override Linux weirdness: a FQHN can be 255 chars long
** SUSv3 requires HOST_NAME_MAX ("Maximum length of a host
@@ -2839,23 +2865,23 @@ struct utsname
*/
# undef MAXHOSTNAMELEN
# define MAXHOSTNAMELEN 256
-# endif /* _FFR_LINUX_MHNL && defined(__linux__) && MAXHOSTNAMELEN < 255 */
+# endif /* defined(__linux__) && MAXHOSTNAMELEN < 255 */
# if !defined(SIGCHLD) && defined(SIGCLD)
# define SIGCHLD SIGCLD
-# endif /* !defined(SIGCHLD) && defined(SIGCLD) */
+# endif
# ifndef STDIN_FILENO
# define STDIN_FILENO 0
-# endif /* ! STDIN_FILENO */
+# endif
# ifndef STDOUT_FILENO
# define STDOUT_FILENO 1
-# endif /* ! STDOUT_FILENO */
+# endif
# ifndef STDERR_FILENO
# define STDERR_FILENO 2
-# endif /* ! STDERR_FILENO */
+# endif
# ifndef LOCK_SH
# define LOCK_SH 0x01 /* shared lock */
@@ -2866,19 +2892,19 @@ struct utsname
# ifndef S_IXOTH
# define S_IXOTH (S_IEXEC >> 6)
-# endif /* ! S_IXOTH */
+# endif
# ifndef S_IXGRP
# define S_IXGRP (S_IEXEC >> 3)
-# endif /* ! S_IXGRP */
+# endif
# ifndef S_IXUSR
# define S_IXUSR (S_IEXEC)
-# endif /* ! S_IXUSR */
+# endif
#ifndef O_ACCMODE
# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
-#endif /* ! O_ACCMODE */
+#endif
# ifndef SEEK_SET
# define SEEK_SET 0
@@ -2888,47 +2914,47 @@ struct utsname
# ifndef SIG_ERR
# define SIG_ERR ((void (*)()) -1)
-# endif /* ! SIG_ERR */
+# endif
# ifndef WEXITSTATUS
# define WEXITSTATUS(st) (((st) >> 8) & 0377)
-# endif /* ! WEXITSTATUS */
+# endif
# ifndef WIFEXITED
# define WIFEXITED(st) (((st) & 0377) == 0)
-# endif /* ! WIFEXITED */
+# endif
# ifndef WIFSTOPPED
# define WIFSTOPPED(st) (((st) & 0100) == 0)
-# endif /* ! WIFSTOPPED */
+# endif
# ifndef WCOREDUMP
# define WCOREDUMP(st) (((st) & 0200) != 0)
-# endif /* ! WCOREDUMP */
+# endif
# ifndef WTERMSIG
# define WTERMSIG(st) (((st) & 0177))
-# endif /* ! WTERMSIG */
+# endif
# ifndef SIGFUNC_DEFINED
typedef void (*sigfunc_t) __P((int));
-# endif /* ! SIGFUNC_DEFINED */
+# endif
# ifndef SIGFUNC_RETURN
# define SIGFUNC_RETURN
-# endif /* ! SIGFUNC_RETURN */
+# endif
# ifndef SIGFUNC_DECL
# define SIGFUNC_DECL void
-# endif /* ! SIGFUNC_DECL */
+# endif
/* size of syslog buffer */
# ifndef SYSLOG_BUFSIZE
# define SYSLOG_BUFSIZE 1024
-# endif /* ! SYSLOG_BUFSIZE */
+# endif
/* for FD_SET() */
#ifndef FD_SETSIZE
# define FD_SETSIZE 256
-#endif /* ! FD_SETSIZE */
+#endif
#ifndef SIGWAIT_TAKES_1_ARG
# define SIGWAIT_TAKES_1_ARG 0
-#endif /* ! SIGWAIT_TAKES_1_ARG */
+#endif
/*
** Size of prescan buffer.
@@ -2941,16 +2967,16 @@ typedef void (*sigfunc_t) __P((int));
/* fork routine -- set above using #ifdef _osname_ or in Makefile */
# ifndef FORK
# define FORK fork /* function to call to fork mailer */
-# endif /* ! FORK */
+# endif
/* setting h_errno */
# ifndef SM_SET_H_ERRNO
# define SM_SET_H_ERRNO(err) h_errno = (err)
-# endif /* SM_SET_H_ERRNO */
+# endif
# ifndef SM_CONF_GETOPT
# define SM_CONF_GETOPT 1
-# endif /* ! SM_CONF_GETOPT */
+# endif
/* random routine -- set above using #ifdef _osname_ or in Makefile */
# if HASRANDOM
@@ -2959,7 +2985,7 @@ typedef void (*sigfunc_t) __P((int));
# define get_random() ((long) rand())
# ifndef RANDOMSHIFT
# define RANDOMSHIFT 8
-# endif /* ! RANDOMSHIFT */
+# endif
# endif /* HASRANDOM */
/*
@@ -2968,17 +2994,17 @@ typedef void (*sigfunc_t) __P((int));
# ifndef SCANF
# define SCANF 1
-# endif /* ! SCANF */
+# endif
/* XXX 32 bit type */
# ifndef SM_INT32
# define SM_INT32 int32_t
-# endif /* ! SM_INT32 */
+# endif
/* XXX 16 bit type */
# ifndef SM_UINT16
# define SM_UINT16 uint16_t
-# endif /* ! SM_UINT16 */
+# endif
/* additional valid chars in user/group names in passwd */
# ifndef SM_PWN_CHARS
@@ -2994,21 +3020,21 @@ typedef void (*sigfunc_t) __P((int));
# if USE_SIGLONGJMP
# ifdef jmp_buf
# undef jmp_buf
-# endif /* jmp_buf */
+# endif
# define jmp_buf sigjmp_buf
# ifdef setjmp
# undef setjmp
-# endif /* setjmp */
+# endif
# define setjmp(env) sigsetjmp(env, 1)
# ifdef longjmp
# undef longjmp
-# endif /* longjmp */
+# endif
# define longjmp(env, val) siglongjmp(env, val)
# endif /* USE_SIGLONGJMP */
# if !defined(NGROUPS_MAX) && defined(NGROUPS)
# define NGROUPS_MAX NGROUPS /* POSIX naming convention */
-# endif /* !defined(NGROUPS_MAX) && defined(NGROUPS) */
+# endif
/*
** Some snprintf() implementations are rumored not to NUL terminate.
@@ -3016,11 +3042,11 @@ typedef void (*sigfunc_t) __P((int));
# if SNPRINTF_IS_BROKEN
# ifdef snprintf
# undef snprintf
-# endif /* snprintf */
+# endif
# define snprintf sm_snprintf
# ifdef vsnprintf
# undef vsnprintf
-# endif /* vsnprintf */
+# endif
# define vsnprintf sm_vsnprintf
# endif /* SNPRINTF_IS_BROKEN */
@@ -3041,14 +3067,14 @@ typedef void (*sigfunc_t) __P((int));
# ifndef SM_CONF_SYSLOG
# define SM_CONF_SYSLOG 1 /* syslog.h has prototype for syslog() */
-# endif /* SM_CONF_SYSLOG */
+# endif
# if !SM_CONF_SYSLOG
# ifdef __STDC__
extern void syslog(int, const char *, ...);
-# else /* __STDC__ */
+# else
extern void syslog();
-# endif /* __STDC__ */
+# endif
# endif /* !SM_CONF_SYSLOG */
/* portable(?) definition for alignment */
diff --git a/contrib/sendmail/include/sm/config.h b/contrib/sendmail/include/sm/config.h
index 451f1360612b..3eb5662d20aa 100644
--- a/contrib/sendmail/include/sm/config.h
+++ b/contrib/sendmail/include/sm/config.h
@@ -31,9 +31,9 @@
# ifndef SM_CONF_STDBOOL_H
# if !defined(__clang__) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# define SM_CONF_STDBOOL_H 1
-# else /* !defined(__clang__) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */
+# else
# define SM_CONF_STDBOOL_H 0
-# endif /* !defined(__clang__) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */
+# endif
# endif /* ! SM_CONF_STDBOOL_H */
/*
@@ -42,7 +42,7 @@
# ifndef SM_CONF_SYS_CDEFS_H
# define SM_CONF_SYS_CDEFS_H 0
-# endif /* ! SM_CONF_SYS_CDEFS_H */
+# endif
/*
** SM_CONF_STDDEF_H is 1 if <stddef.h> exists
@@ -50,7 +50,7 @@
# ifndef SM_CONF_STDDEF_H
# define SM_CONF_STDDEF_H 1
-# endif /* ! SM_CONF_STDDEF_H */
+# endif
/*
** Configuration macro that specifies whether strlcpy/strlcat are available.
@@ -60,7 +60,7 @@
# ifndef SM_CONF_STRL
# define SM_CONF_STRL 0
-# endif /* ! SM_CONF_STRL */
+# endif
/*
** Configuration macro indicating that setitimer is available
@@ -68,7 +68,7 @@
# ifndef SM_CONF_SETITIMER
# define SM_CONF_SETITIMER 1
-# endif /* ! SM_CONF_SETITIMER */
+# endif
/*
** Does <sys/types.h> define uid_t and gid_t?
@@ -76,14 +76,14 @@
# ifndef SM_CONF_UID_GID
# define SM_CONF_UID_GID 1
-# endif /* ! SM_CONF_UID_GID */
+# endif
/*
** Does <sys/types.h> define ssize_t?
*/
# ifndef SM_CONF_SSIZE_T
# define SM_CONF_SSIZE_T 1
-# endif /* ! SM_CONF_SSIZE_T */
+# endif
/*
** Does the C compiler support long long?
@@ -95,9 +95,9 @@
# else /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */
# if defined(__GNUC__)
# define SM_CONF_LONGLONG 1
-# else /* defined(__GNUC__) */
+# else
# define SM_CONF_LONGLONG 0
-# endif /* defined(__GNUC__) */
+# endif
# endif /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */
# endif /* ! SM_CONF_LONGLONG */
@@ -108,7 +108,7 @@
# ifndef SM_CONF_QUAD_T
# define SM_CONF_QUAD_T 0
-# endif /* ! SM_CONF_QUAD_T */
+# endif
/*
** Configuration macro indicating that shared memory is available
@@ -116,7 +116,7 @@
# ifndef SM_CONF_SHM
# define SM_CONF_SHM 0
-# endif /* ! SM_CONF_SHM */
+# endif
/*
** Does <setjmp.h> define sigsetjmp?
@@ -124,7 +124,7 @@
# ifndef SM_CONF_SIGSETJMP
# define SM_CONF_SIGSETJMP 1
-# endif /* ! SM_CONF_SIGSETJMP */
+# endif
/*
** Does <sysexits.h> exist, and define the EX_* macros with values
@@ -133,17 +133,17 @@
# ifndef SM_CONF_SYSEXITS_H
# define SM_CONF_SYSEXITS_H 0
-# endif /* ! SM_CONF_SYSEXITS_H */
+# endif
/* has memchr() prototype? (if not: needs memory.h) */
# ifndef SM_CONF_MEMCHR
# define SM_CONF_MEMCHR 1
-# endif /* ! SM_CONF_MEMCHR */
+# endif
/* try LLONG tests in libsm/t-types.c? */
# ifndef SM_CONF_TEST_LLONG
# define SM_CONF_TEST_LLONG 1
-# endif /* !SM_CONF_TEST_LLONG */
+# endif
/* LDAP Checks */
# if LDAPMAP
@@ -161,9 +161,9 @@
# if USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004
# define SM_CONF_LDAP_MEMFREE 1
-# else /* USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004 */
+# else
# define SM_CONF_LDAP_MEMFREE 0
-# endif /* USING_NETSCAPE_LDAP || LDAP_API_VERSION >= 2004 */
+# endif
# endif /* ! SM_CONF_LDAP_MEMFREE */
/* Does the LDAP library have ldap_initialize()? */
@@ -177,13 +177,13 @@
/* OpenLDAP does it with LDAP_OPT_URI */
# ifdef LDAP_OPT_URI
# define SM_CONF_LDAP_INITIALIZE 1
-# endif /* LDAP_OPT_URI */
+# endif
# endif /* !SM_CONF_LDAP_INITIALIZE */
# endif /* LDAPMAP */
/* don't use strcpy() */
# ifndef DO_NOT_USE_STRCPY
# define DO_NOT_USE_STRCPY 1
-# endif /* ! DO_NOT_USE_STRCPY */
+# endif
#endif /* ! SM_CONFIG_H */
diff --git a/contrib/sendmail/include/sm/debug.h b/contrib/sendmail/include/sm/debug.h
index 9c7bb803d128..eb045c8ffed5 100644
--- a/contrib/sendmail/include/sm/debug.h
+++ b/contrib/sendmail/include/sm/debug.h
@@ -94,7 +94,7 @@ struct sm_debug
# ifndef SM_DEBUG_CHECK
# define SM_DEBUG_CHECK 1
-# endif /* ! SM_DEBUG_CHECK */
+# endif
# if SM_DEBUG_CHECK
/*
diff --git a/contrib/sendmail/include/sm/errstring.h b/contrib/sendmail/include/sm/errstring.h
index 14c100773202..16d0598a45e6 100644
--- a/contrib/sendmail/include/sm/errstring.h
+++ b/contrib/sendmail/include/sm/errstring.h
@@ -18,12 +18,12 @@
#if defined(__QNX__)
# define E_PSEUDOBASE 512
-#endif /* defined(__QNX__) */
+#endif
#include <errno.h>
#if NEEDINTERRNO
extern int errno;
-#endif /* NEEDINTERRNO */
+#endif
/*
** These are used in a few cases where we need some special
@@ -33,7 +33,7 @@ extern int errno;
#ifndef E_PSEUDOBASE
# define E_PSEUDOBASE 256
-#endif /* ! E_PSEUDOBASE */
+#endif
#define E_SM_OPENTIMEOUT (E_PSEUDOBASE + 0) /* Timeout on file open */
#define E_SM_NOSLINK (E_PSEUDOBASE + 1) /* Symbolic links not allowed */
@@ -88,7 +88,6 @@ extern int errno;
#define SMDBE_OLD_VERSION (E_SMDBBASE + 23)
#define SMDBE_VERSION_MISMATCH (E_SMDBBASE + 24)
-extern const char *sm_errstring __P((int _errno));
-
+extern const char *sm_errstring __P((int _errnum));
#endif /* SM_ERRSTRING_H */
diff --git a/contrib/sendmail/include/sm/gen.h b/contrib/sendmail/include/sm/gen.h
index 522892982e9e..a66bae54b46c 100644
--- a/contrib/sendmail/include/sm/gen.h
+++ b/contrib/sendmail/include/sm/gen.h
@@ -43,7 +43,7 @@
# else /* SM_CONF_STDDEF_H */
# ifndef NULL
# define NULL 0
-# endif /* ! NULL */
+# endif
# define offsetof(type, member) ((size_t)(&((type *)0)->member))
# endif /* SM_CONF_STDDEF_H */
diff --git a/contrib/sendmail/include/sm/heap.h b/contrib/sendmail/include/sm/heap.h
index 152e3672fcc4..369894e9cd15 100644
--- a/contrib/sendmail/include/sm/heap.h
+++ b/contrib/sendmail/include/sm/heap.h
@@ -25,7 +25,7 @@
/* change default to 0 for production? */
# ifndef SM_HEAP_CHECK
# define SM_HEAP_CHECK 1
-# endif /* ! SM_HEAP_CHECK */
+# endif
# if SM_HEAP_CHECK
# define sm_malloc_x(sz) sm_malloc_tagged_x(sz, __FILE__, __LINE__, SmHeapGroup)
diff --git a/contrib/sendmail/include/sm/io.h b/contrib/sendmail/include/sm/io.h
index 1eceffd22cfb..838af38e3cfa 100644
--- a/contrib/sendmail/include/sm/io.h
+++ b/contrib/sendmail/include/sm/io.h
@@ -53,7 +53,7 @@
#define SM_IO_WHAT_MODE 1
#define SM_IO_WHAT_VECTORS 2
#define SM_IO_WHAT_FD 3
-#define SM_IO_WHAT_TYPE 4
+/* was WHAT_TYPE 4 unused */
#define SM_IO_WHAT_ISTYPE 5
#define SM_IO_IS_READABLE 6
#define SM_IO_WHAT_TIMEOUT 7
@@ -342,7 +342,7 @@ __END_DECLS
__BEGIN_DECLS
int sm_rget __P((SM_FILE_T *, int));
int sm_vfscanf __P((SM_FILE_T *, int SM_NONVOLATILE, const char *,
- va_list SM_NONVOLATILE));
+ va_list));
int sm_wbuf __P((SM_FILE_T *, int, int));
__END_DECLS
@@ -383,7 +383,7 @@ __END_DECLS
# ifndef _POSIX_SOURCE
# define sm_io_getc(fp, t) sm_getc(fp, t)
# define sm_io_putc(fp, t, x) sm_putc(fp, t, x)
-# endif /* _POSIX_SOURCE */
+# endif
#endif /* lint */
#endif /* SM_IO_H */
diff --git a/contrib/sendmail/include/sm/ldap.h b/contrib/sendmail/include/sm/ldap.h
index 9ce5d234e70a..8fcd872d5f84 100644
--- a/contrib/sendmail/include/sm/ldap.h
+++ b/contrib/sendmail/include/sm/ldap.h
@@ -22,13 +22,13 @@
# ifndef LDAPMAP_MAX_ATTR
# define LDAPMAP_MAX_ATTR 64
-# endif /* ! LDAPMAP_MAX_ATTR */
+# endif
# ifndef LDAPMAP_MAX_FILTER
# define LDAPMAP_MAX_FILTER 1024
-# endif /* ! LDAPMAP_MAX_FILTER */
+# endif
# ifndef LDAPMAP_MAX_PASSWD
# define LDAPMAP_MAX_PASSWD 256
-# endif /* ! LDAPMAP_MAX_PASSWD */
+# endif
# if LDAPMAP
@@ -91,9 +91,12 @@ struct sm_ldap_struct
/* ldapmap_lookup options */
char ldap_attrsep;
-# if _FFR_LDAP_NETWORK_TIMEOUT
+# if LDAP_NETWORK_TIMEOUT
int ldap_networktmo;
-# endif /* _FFR_LDAP_NETWORK_TIMEOUT */
+# endif
+# if _FFR_SM_LDAP_DBG
+ int ldap_debug;
+# endif
/* Linked list of maps sharing the same LDAP binding */
void *ldap_next;
@@ -135,7 +138,7 @@ extern void sm_ldap_close __P((SM_LDAP_STRUCT *));
/* Portability defines */
# if !SM_CONF_LDAP_MEMFREE
# define ldap_memfree(x) ((void) 0)
-# endif /* !SM_CONF_LDAP_MEMFREE */
+# endif
# endif /* LDAPMAP */
#endif /* ! SM_LDAP_H */
diff --git a/contrib/sendmail/include/sm/limits.h b/contrib/sendmail/include/sm/limits.h
index 001f81e190a4..fdc36bf81a62 100644
--- a/contrib/sendmail/include/sm/limits.h
+++ b/contrib/sendmail/include/sm/limits.h
@@ -31,13 +31,13 @@
# ifndef LLONG_MIN
# define LLONG_MIN ((LONGLONG_T)(~(ULLONG_MAX >> 1)))
-# endif /* ! LLONG_MIN */
+# endif
# ifndef LLONG_MAX
# define LLONG_MAX ((LONGLONG_T)(ULLONG_MAX >> 1))
-# endif /* ! LLONG_MAX */
+# endif
# ifndef ULLONG_MAX
# define ULLONG_MAX ((ULONGLONG_T)(-1))
-# endif /* ! ULLONG_MAX */
+# endif
/*
** PATH_MAX is defined by the POSIX standard. All modern systems
@@ -47,9 +47,9 @@
# ifndef PATH_MAX
# ifdef MAXPATHLEN
# define PATH_MAX MAXPATHLEN
-# else /* MAXPATHLEN */
+# else
# define PATH_MAX 2048
-# endif /* MAXPATHLEN */
+# endif
# endif /* ! PATH_MAX */
#endif /* ! SM_LIMITS_H */
diff --git a/contrib/sendmail/include/sm/notify.h b/contrib/sendmail/include/sm/notify.h
new file mode 100644
index 000000000000..e5c193e09b37
--- /dev/null
+++ b/contrib/sendmail/include/sm/notify.h
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2016 Proofpoint, 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.
+ */
+
+#ifndef SM_NOTIFY_H
+#define SM_NOTIFY_H
+
+int sm_notify_init __P((int));
+int sm_notify_start __P((bool, int));
+int sm_notify_stop __P((bool, int));
+int sm_notify_rcv __P((char *, size_t, int));
+int sm_notify_snd __P((char *, size_t));
+
+#endif /* ! SM_MSG_H */
diff --git a/contrib/sendmail/include/sm/os/sm_os_freebsd.h b/contrib/sendmail/include/sm/os/sm_os_freebsd.h
index e97f5eb257b8..7c52edfe029f 100644
--- a/contrib/sendmail/include/sm/os/sm_os_freebsd.h
+++ b/contrib/sendmail/include/sm/os/sm_os_freebsd.h
@@ -1,12 +1,10 @@
/*
- * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers.
+ * Copyright (c) 2000-2001, 2018 Proofpoint, 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: sm_os_freebsd.h,v 1.12 2013-11-22 20:51:34 ca Exp $
*/
/*
@@ -32,10 +30,14 @@
#ifndef SM_CONF_SHM
# define SM_CONF_SHM 1
-#endif /* SM_CONF_SHM */
+#endif
#ifndef SM_CONF_SEM
-# define SM_CONF_SEM 2
-#endif /* SM_CONF_SEM */
+# if __FreeBSD__ > 11
+# define SM_CONF_SEM 2 /* union semun is now longer available by default */
+# else
+# define SM_CONF_SEM 1
+# endif
+#endif
#ifndef SM_CONF_MSG
# define SM_CONF_MSG 1
-#endif /* SM_CONF_MSG */
+#endif
diff --git a/contrib/sendmail/include/sm/rpool.h b/contrib/sendmail/include/sm/rpool.h
index b01050de3a58..52f76771321a 100644
--- a/contrib/sendmail/include/sm/rpool.h
+++ b/contrib/sendmail/include/sm/rpool.h
@@ -123,7 +123,7 @@ typedef struct
#if _FFR_PERF_RPOOL
int sm_nbigblocks;
int sm_npools;
-#endif /* _FFR_PERF_RPOOL */
+#endif
} SM_RPOOL_T;
@@ -167,10 +167,10 @@ sm_rpool_malloc __P((
#if DO_NOT_USE_STRCPY
extern char *sm_rpool_strdup_x __P((SM_RPOOL_T *rpool, const char *s));
-#else /* DO_NOT_USE_STRCPY */
+#else
# define sm_rpool_strdup_x(rpool, str) \
strcpy(sm_rpool_malloc_x(rpool, strlen(str) + 1), str)
-#endif /* DO_NOT_USE_STRCPY */
+#endif
extern SM_RPOOL_ATTACH_T
sm_rpool_attach_x __P((
diff --git a/contrib/sendmail/include/sm/sem.h b/contrib/sendmail/include/sm/sem.h
index 556400c39ca4..f188a15deca3 100644
--- a/contrib/sendmail/include/sm/sem.h
+++ b/contrib/sendmail/include/sm/sem.h
@@ -35,10 +35,10 @@ union semun
# ifndef SEM_A
# define SEM_A 0200
-# endif /* SEM_A */
+# endif
# ifndef SEM_R
# define SEM_R 0400
-# endif /* SEM_R */
+# endif
# define SM_NSEM 1
diff --git a/contrib/sendmail/include/sm/shm.h b/contrib/sendmail/include/sm/shm.h
index 1a3b3b4f8bd1..f6c5ad56c1c9 100644
--- a/contrib/sendmail/include/sm/shm.h
+++ b/contrib/sendmail/include/sm/shm.h
@@ -34,10 +34,10 @@ extern int sm_shmsetowner __P((int, uid_t, gid_t, mode_t));
/* for those braindead systems... (e.g., SunOS 4) */
# ifndef SHM_R
# define SHM_R 0400
-# endif /* SHM_R */
+# endif
# ifndef SHM_W
# define SHM_W 0200
-# endif /* SHM_W */
+# endif
# endif /* SM_CONF_SHM */
#endif /* ! SM_SHM_H */
diff --git a/contrib/sendmail/include/sm/string.h b/contrib/sendmail/include/sm/string.h
index 4fd87afe6003..1f2b587cc642 100644
--- a/contrib/sendmail/include/sm/string.h
+++ b/contrib/sendmail/include/sm/string.h
@@ -30,7 +30,7 @@ extern bool
sm_match __P((const char *_str, const char *_pattern));
extern char *
-sm_strdup __P((char *));
+sm_strdup __P((const char *));
extern char *
sm_strndup_x __P((const char *_str, size_t _len));
@@ -87,7 +87,7 @@ sm_strlcpyn __P((char *,
# if !HASSTRERROR
extern char *
strerror __P((int _errno));
-# endif /* !HASSTRERROR */
+# endif
extern int
sm_strrevcmp __P((const char *, const char *));
@@ -109,5 +109,7 @@ sm_strtoull __P((const char *, char**, int));
extern void
stripquotes __P((char *));
+extern void
+unfoldstripquotes __P((char *));
#endif /* SM_STRING_H */
diff --git a/contrib/sendmail/include/sm/test.h b/contrib/sendmail/include/sm/test.h
index fdcce848b7e7..b9b77b678fe2 100644
--- a/contrib/sendmail/include/sm/test.h
+++ b/contrib/sendmail/include/sm/test.h
@@ -20,9 +20,9 @@
# if defined(__STDC__) || defined(__cplusplus)
# define SM_TEST(cond) sm_test(cond, #cond, __FILE__, __LINE__)
-# else /* defined(__STDC__) || defined(__cplusplus) */
+# else
# define SM_TEST(cond) sm_test(cond, "cond", __FILE__, __LINE__)
-# endif /* defined(__STDC__) || defined(__cplusplus) */
+# endif
extern int SmTestIndex;
extern int SmTestNumErrors;
diff --git a/contrib/sendmail/include/sm/types.h b/contrib/sendmail/include/sm/types.h
index 32c696fb837d..68998af82ddf 100644
--- a/contrib/sendmail/include/sm/types.h
+++ b/contrib/sendmail/include/sm/types.h
@@ -38,11 +38,11 @@
# if !SM_CONF_UID_GID
# define uid_t int
# define gid_t int
-# endif /* !SM_CONF_UID_GID */
+# endif
# if !SM_CONF_SSIZE_T
# define ssize_t int
-# endif /* !SM_CONF_SSIZE_T */
+# endif
/*
** Define LONGLONG_T and ULONGLONG_T, which are portable locutions
diff --git a/contrib/sendmail/include/sm/varargs.h b/contrib/sendmail/include/sm/varargs.h
index 612858da9c1f..2609630d919d 100644
--- a/contrib/sendmail/include/sm/varargs.h
+++ b/contrib/sendmail/include/sm/varargs.h
@@ -32,6 +32,11 @@
# define SM_VA_COPY(dst, src) __va_copy((dst), (src))
# else
# define SM_VA_COPY(dst, src) memcpy(&(dst), &(src), sizeof((dst)))
+# define SM_VA_END_COPY(ap) do { } while (0)
+# endif
+
+# ifndef SM_VA_END_COPY
+# define SM_VA_END_COPY(ap) va_end(ap)
# endif
/*
diff --git a/contrib/sendmail/include/sm/xtrap.h b/contrib/sendmail/include/sm/xtrap.h
index ed5de5348fe4..31ddd1d36982 100644
--- a/contrib/sendmail/include/sm/xtrap.h
+++ b/contrib/sendmail/include/sm/xtrap.h
@@ -25,9 +25,9 @@ extern SM_DEBUG_T SmXtrapReport;
# if SM_DEBUG_CHECK
# define sm_xtrap_check() (++SmXtrapCount == sm_debug_level(&SmXtrapDebug))
-# else /* SM_DEBUG_CHECK */
+# else
# define sm_xtrap_check() (0)
-# endif /* SM_DEBUG_CHECK */
+# endif
# define sm_xtrap_raise_x(exc) \
if (sm_xtrap_check()) \
diff --git a/contrib/sendmail/libmilter/Makefile b/contrib/sendmail/libmilter/Makefile
index 825ddd52d9d6..181c3b671b91 100644
--- a/contrib/sendmail/libmilter/Makefile
+++ b/contrib/sendmail/libmilter/Makefile
@@ -6,10 +6,10 @@ OPTIONS= $(CONFIG) $(FLAGS)
all: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
-check: FRC
- $(SHELL) $(BUILD) $(OPTIONS) $@
clean: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
+check: FRC
+ $(SHELL) $(BUILD) $(OPTIONS) $@
install: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
diff --git a/contrib/sendmail/libmilter/README b/contrib/sendmail/libmilter/README
index 64e1cca1cf7c..73953823b670 100644
--- a/contrib/sendmail/libmilter/README
+++ b/contrib/sendmail/libmilter/README
@@ -115,7 +115,7 @@ T=C:5m;S:10s;R:10s;E:5m
where 's' is seconds and 'm' is minutes.
-Which filters are invoked and their sequencing is handled by the
+Which filters are invoked and their sequencing is handled by the
InputMailFilters option. Note: if InputMailFilters is not defined no filters
will be used.
@@ -207,28 +207,19 @@ libmilter requires pthread support in the operating system. Moreover, it
requires that the library functions it uses are thread safe; which is true
for the operating systems libmilter has been developed and tested on. On
some operating systems this requires special compile time options (e.g.,
-not just -pthread). libmilter is currently known to work on (modulo problems
-in the pthread support of some specific versions):
-
-FreeBSD 3.x, 4.x
-SunOS 5.x (x >= 5)
-AIX 4.3.x
-HP UX 11.x
-Linux (recent versions/distributions)
-
-libmilter is currently not supported on:
+not just -pthread).
+So far, libmilter is not supported on:
IRIX 6.x
Ultrix
Feedback about problems (and possible fixes) is welcome.
+
+--------------------------+
| SOURCE FOR SAMPLE FILTER |
+--------------------------+
Note that the filter example.c may not be thread safe on some operating
systems. You should check your system man pages for the functions used
-below to verify the functions are thread safe.
-
-$Revision: 8.42 $, Last updated $Date: 2006-06-29 17:10:16 $
+to verify they are thread safe.
diff --git a/contrib/sendmail/libmilter/comm.c b/contrib/sendmail/libmilter/comm.c
index a551a5253fd8..05dfdb61457c 100644
--- a/contrib/sendmail/libmilter/comm.c
+++ b/contrib/sendmail/libmilter/comm.c
@@ -139,9 +139,9 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
}
#if _FFR_ADD_NULL
buf = malloc(expl + 1);
-#else /* _FFR_ADD_NULL */
+#else
buf = malloc(expl);
-#endif /* _FFR_ADD_NULL */
+#endif
if (buf == NULL)
{
*cmd = SMFIC_MALLOC;
@@ -194,7 +194,7 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
#if _FFR_ADD_NULL
/* makes life simpler for common string routines */
buf[expl] = '\0';
-#endif /* _FFR_ADD_NULL */
+#endif
return buf;
}
i += len;
diff --git a/contrib/sendmail/libmilter/docs/api.html b/contrib/sendmail/libmilter/docs/api.html
index b314a0f4e96d..4a90e9a432e6 100644
--- a/contrib/sendmail/libmilter/docs/api.html
+++ b/contrib/sendmail/libmilter/docs/api.html
@@ -15,7 +15,7 @@ $Id: api.html,v 1.39 2013-11-22 20:51:39 ca Exp $
<LI><A HREF="#Miscellaneous">Miscellaneous</A>
</UL>
-<H2><A NAME="LibraryControlFunctions">Library Control Functions</A></H2>
+<H2><A NAME="LibraryControlFunctions">Library Control Functions</A></H2>
Before handing control to libmilter (by calling
<A HREF="smfi_main.html">smfi_main</A>), a filter may call the following
@@ -23,11 +23,12 @@ functions to set libmilter parameters.
In particular, the filter must call
<A HREF="smfi_register.html">smfi_register</A> to register its callbacks.
Each function will return either MI_SUCCESS or MI_FAILURE to
-indicate the status of the operation.
+indicate the status of the operation.
<P>
-None of these functions communicate with the MTA. All alter the
-library's state, some of which is communicated to the MTA inside
+None of these functions communicate with the MTA.
+All alter the library's state, some of which
+is communicated to the MTA inside
<A HREF="smfi_main.html">smfi_main</A>.
<P>
@@ -54,7 +55,7 @@ library's state, some of which is communicated to the MTA inside
<H2><A NAME="DataAccessFunctions">Data Access Functions</A></H2>
The following functions may be called from within the filter-defined callbacks
-to access information about the current connection or message.
+to access information about the current connection or message.
<P>
<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR bgcolor="#dddddd"><TH>Function</TH><TH>Description</TH></TR>
<TR><TD><A HREF="smfi_getsymval.html">smfi_getsymval</A></TD><TD>Return the value
@@ -80,33 +81,38 @@ The following functions change a message's contents and attributes.
<EM>They may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>.
All of these functions may invoke additional communication with the MTA.
They will return either MI_SUCCESS or MI_FAILURE to indicate the status of
-the operation. Message data (senders, recipients, headers, body chunks)
+the operation.
+Message data (senders, recipients, headers, body chunks)
passed to these functions via parameters is copied and does not need to be
preserved (i.e., allocated memory can be freed).
<P>
-A filter must have set the appropriate flag (listed below) in the
-description passed to <A HREF="smfi_register.html">smfi_register</A>
-to call any message modification function. Failure to do so will
-cause the MTA to treat a call to the function as a failure of the
-filter, terminating its connection.
+A filter which might call a message modification function
+must set the appropriate flag
+(<A HREF="#SMFIF">listed below</A>),
+either
+in the description passed to <A HREF="smfi_register.html">smfi_register</A>
+or via <A HREF="xxfi_negotiate.html">xxfi_negotiate</A>.
+Failure to do so will cause the MTA to treat a call to the function
+as a failure of the filter, terminating its connection.
<P>
Note that the status returned indicates only whether or not the
filter's message was successfully sent to the MTA, not whether or not
-the MTA performed the requested operation. For example,
+the MTA performed the requested operation.
+For example,
<A HREF="smfi_addheader.html">smfi_addheader</A>, when called with an
illegal header name, will return MI_SUCCESS even though the MTA may
later refuse to add the illegal header.
<P>
-<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH><TH>SMFIF_* flag</TR>
+<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH><TH><A NAME="SMFIF">SMFIF_* flag</A></TH></TR>
<TR><TD><A HREF="smfi_addheader.html">smfi_addheader</A></TD><TD>Add a header to
-the message.</TD><TD>SMFIF_ADDHDRS</TD></TR>
+the message.</TD><TD>SMFIF_ADDHDRS</TD></TR>
-<TR><TD><A HREF="smfi_chgheader.html">smfi_chgheader</A></TD><TD>Change or delete a header.</TD><TD>SMFIF_CHGHDRS</TD></TR>
+<TR><TD><A HREF="smfi_chgheader.html">smfi_chgheader</A></TD><TD>Change or delete a header.</TD><TD>SMFIF_CHGHDRS</TD></TR>
<TR><TD><A HREF="smfi_insheader.html">smfi_insheader</A></TD><TD>Insert a
-header into the message.</TD><TD>SMFIF_ADDHDRS</TD></TR>
+header into the message.</TD><TD>SMFIF_ADDHDRS</TD></TR>
<TR><TD><A HREF="smfi_chgfrom.html">smfi_chgfrom</A></TD><TD>Change the
envelope sender address.</TD><TD>SMFIF_CHGFROM</TD></TR>
@@ -180,40 +186,43 @@ which are registered via <A HREF="smfi_register.html">smfi_register</A>:
<TR><TD><A HREF="xxfi_close.html">xxfi_close</A></TD><TD>connection cleanup</TD></TR>
-<TR><TD><A HREF="xxfi_negotiate.html">xxfi_negotiate</A></TD><TD>option negotiattion</TD></TR>
+<TR><TD><A HREF="xxfi_negotiate.html">xxfi_negotiate</A></TD><TD>option negotiation</TD></TR>
</TABLE>
<P>
The above callbacks should all return one of the following return values,
-having the indicated meanings. Any return other than one of the below
-values constitutes an error, and will cause sendmail to terminate its
-connection to the offending filter.
+having the indicated meanings.
+Any return other than one of the below values constitutes an error,
+and will cause sendmail to terminate its connection to the offending filter.
<P><A NAME="conn-spec">Milter</A> distinguishes between recipient-,
-message-, and connection-oriented routines. Recipient-oriented
-callbacks may affect the processing of a single message recipient;
-message-oriented callbacks, a single message; connection-oriented
-callbacks, an entire connection (during which multiple messages may be
-delivered to multiple sets of recipients).
+message-, and connection-oriented routines.
+Recipient-oriented callbacks may affect the processing
+of a single message recipient;
+message-oriented callbacks, a single message;
+connection-oriented callbacks, an entire connection
+(during which multiple messages may be delivered
+to multiple sets of recipients).
<A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A> is recipient-oriented.
+<A HREF="xxfi_negotiate.html">xxfi_negotiate</A>,
<A HREF="xxfi_connect.html">xxfi_connect</A>,
<A HREF="xxfi_helo.html">xxfi_helo</A> and
-<A HREF="xxfi_close.html">xxfi_close</A> are connection-oriented. All
-other callbacks are message-oriented.
+<A HREF="xxfi_close.html">xxfi_close</A> are connection-oriented.
+All other callbacks are message-oriented.
<P>
<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2>
<TR BGCOLOR="#dddddd"><TH>Return value</TH><TH>Description</TH></TR>
<TR VALIGN="TOP">
- <TD>SMFIS_CONTINUE</TD>
+ <TD>SMFIS_CONTINUE</TD>
<TD>Continue processing the current connection, message, or recipient.
</TD>
</TR>
<TR VALIGN="TOP">
<TD>SMFIS_REJECT</TD>
<TD>For a connection-oriented routine, reject this connection; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR>
- For a message-oriented routine (except
+ For a message-oriented routine (except
<A HREF="xxfi_abort.html">xxfi_abort</A>), reject this message.<BR>
For a recipient-oriented routine, reject the current recipient (but continue processing the current message).
</TD>
@@ -233,8 +242,8 @@ other callbacks are message-oriented.
<TR valign="top">
<TD>SMFIS_TEMPFAIL</TD>
<TD>Return a temporary failure, i.e., the corresponding SMTP command will return an appropriate 4xx status code.
- For a message-oriented routine (except <A HREF="xxfi_envfrom.html">xxfi_envfrom</A>), fail for this message. <BR>
- For a connection-oriented routine, fail for this connection; call <A HREF="xxfi_close.html">xxfi_close</A>. <BR>
+ For a message-oriented routine (except <A HREF="xxfi_envfrom.html">xxfi_envfrom</A>), fail for this message.<BR>
+ For a connection-oriented routine, fail for this connection; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR>
For a recipient-oriented routine, only fail for the current recipient; continue message processing.
</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/design.html b/contrib/sendmail/libmilter/docs/design.html
index 294f9a153d08..3636fc8158f5 100644
--- a/contrib/sendmail/libmilter/docs/design.html
+++ b/contrib/sendmail/libmilter/docs/design.html
@@ -31,11 +31,15 @@ administrator to combine multiple independently-developed filters.
<P>
We expect to see both vendor-supplied, configurable mail filtering
applications and a multiplicity of script-like filters designed by and
-for MTA administrators. A certain degree of coding sophistication and
-domain knowledge on the part of the filter provider is assumed. This
-allows filters to exercise fine-grained control at the SMTP level.
+for MTA administrators.
+A certain degree of coding sophistication and
+domain knowledge on the part of the filter provider is assumed.
+This allows filters to exercise fine-grained control at the SMTP level.
However, as will be seen in the example, many filtering applications
-can be written with relatively little protocol knowledge.
+can be written with relatively little protocol knowledge,
+but a basic understanding (e.g., as documented in RFC 5321:
+<EM>The dialog is purposely lock-step, one-at-a-time</EM>)
+is necessary.
<P>
Given these expectations, the API is designed to achieve the following
diff --git a/contrib/sendmail/libmilter/docs/index.html b/contrib/sendmail/libmilter/docs/index.html
index 57d9ebc6d74d..90df444f6265 100644
--- a/contrib/sendmail/libmilter/docs/index.html
+++ b/contrib/sendmail/libmilter/docs/index.html
@@ -10,7 +10,7 @@ $Id: index.html,v 1.14 2013-11-22 20:51:39 ca Exp $
<H1>Filtering Mail with Sendmail</H1>
<!--
-<P><B>Disclaimer</B>:
+<P><B>Disclaimer</B>:
This preliminary API description is provided for review only. This
specification may change based on feedback from reviewers, and does
not bind Sendmail to offer this functionality in any release.
diff --git a/contrib/sendmail/libmilter/docs/installation.html b/contrib/sendmail/libmilter/docs/installation.html
index 91fe0d818a3f..7405afd7f014 100644
--- a/contrib/sendmail/libmilter/docs/installation.html
+++ b/contrib/sendmail/libmilter/docs/installation.html
@@ -17,7 +17,7 @@ $Id: installation.html,v 1.24 2013-11-22 20:51:39 ca Exp $
To compile a filter, modify the Makefile provided with the sample program, or:
<UL>
<LI>Put the include and Sendmail directories in your include path
- (e.g. -I/path/to/include -I/path/to/sendmail).
+ (e.g. -I/path/to/include -I/path/to/sendmail).
<LI>Make sure libmilter.a is in your library path, and link your
application with it (e.g. "-lmilter").
@@ -71,7 +71,7 @@ connection.
The MTA will try to contact the filter again on each new connection.
<P>
-There are three fields inside of the <CODE>T=</CODE> equate: S, R, and E.
+There are four fields inside of the <CODE>T=</CODE> equate: C, S, R, and E.
Note the separator between each is a ";" (semicolon), as ","
(comma) already separates equates.
The value of each field is a decimal number followed by a single letter
diff --git a/contrib/sendmail/libmilter/docs/overview.html b/contrib/sendmail/libmilter/docs/overview.html
index 78676d377a11..b88e45136965 100644
--- a/contrib/sendmail/libmilter/docs/overview.html
+++ b/contrib/sendmail/libmilter/docs/overview.html
@@ -60,6 +60,8 @@ returns to <CODE>MESSAGE</CODE>.
For each of N connections
{
For each filter
+ egotiate MTA/milter capabilities/requirements (<A HREF="xxfi_negotiate.html">xxfi_negotiate</A>)
+ For each filter
process connection (<A HREF="xxfi_connect.html">xxfi_connect</A>)
For each filter
process helo/ehlo (<A HREF="xxfi_helo.html">xxfi_helo</A>)
@@ -203,11 +205,21 @@ communication with the MTA happens.
Filters are not terminated asynchronously
(except by signals that can't be caught).
In the case of <TT>Abort</TT> the
-<A HREF="xxfi_abort.html">xxfi_abort</A> callback is invoked.
+<A HREF="xxfi_abort.html">xxfi_abort</A> callback is usually invoked
+if there is an active transaction.
+However, if an invoked callback takes too long to execute
+(the maximum time <TT>Abort</TT> waits is currently 5s)
+<!-- XREF: MI_CHK_TIME -->
+then the filter is simply terminated, i.e.,
+neither the
+<A HREF="xxfi_abort.html">xxfi_abort</A> callback
+nor the
+<A HREF="xxfi_close.html">xxfi_close</A> callback
+is invoked.
<HR size="1">
<FONT size="-1">
-Copyright (c) 2000, 2001, 2003, 2006 Proofpoint, Inc. and its suppliers.
+Copyright (c) 2000, 2001, 2003, 2006, 2018 Proofpoint, Inc. and its suppliers.
All rights reserved.
<BR>
By using this file, you agree to the terms and conditions set
diff --git a/contrib/sendmail/libmilter/docs/sample.html b/contrib/sendmail/libmilter/docs/sample.html
index de8d58947a39..b470ae390eee 100644
--- a/contrib/sendmail/libmilter/docs/sample.html
+++ b/contrib/sendmail/libmilter/docs/sample.html
@@ -187,7 +187,7 @@ sfsistat
++argc;
/* log this recipient */
- if (reject != NULL && rcptaddr != NULL &&
+ if (reject != NULL &amp;&amp; rcptaddr != NULL &amp;&amp;
(strcasecmp(rcptaddr, reject) == 0))
{
if (fprintf(priv-&gt;mlfi_fp, "RCPT %s -- REJECTED\n",
@@ -298,7 +298,7 @@ mlfi_cleanup(ctx, ok)
return rstat;
/* close the archive file */
- if (priv-&gt;mlfi_fp != NULL && fclose(priv-&gt;mlfi_fp) == EOF)
+ if (priv-&gt;mlfi_fp != NULL &amp;&amp; fclose(priv-&gt;mlfi_fp) == EOF)
{
/* failed; we have to wait until later */
fprintf(stderr, "Couldn't close archive file %s: %s\n",
diff --git a/contrib/sendmail/libmilter/docs/smfi_addheader.html b/contrib/sendmail/libmilter/docs/smfi_addheader.html
index e58c8d713c60..fff4dc7fe6fe 100644
--- a/contrib/sendmail/libmilter/docs/smfi_addheader.html
+++ b/contrib/sendmail/libmilter/docs/smfi_addheader.html
@@ -32,6 +32,7 @@ Add a header to the current message.
<TD>Adds a header to the current message.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -45,21 +46,21 @@ Add a header to the current message.
</TD></TR>
<TR valign="top"><TD>headerv</TD>
<TD>The header value to be added, a non-NULL, null-terminated string.
- This may be the empty string.
+ This may be the empty string.
</TD></TR>
</TABLE>
</TD></TR>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_addheader returns MI_FAILURE if:
<UL><LI>headerf or headerv is NULL.
<LI>Adding headers in the current connection state is invalid.
<LI>Memory allocation fails.
<LI>A network error occurs.
- <LI>SMFIF_ADDHDRS was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_ADDHDRS">SMFIF_ADDHDRS</A> is not set.
</UL>
Otherwise, it returns MI_SUCCESS.
</TD>
@@ -67,14 +68,13 @@ Otherwise, it returns MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
<UL><LI>smfi_addheader does not change a message's existing headers.
To change a header's current value, use
<A HREF="smfi_chgheader.html">smfi_chgheader</A>.
- <LI>A filter which calls smfi_addheader must have set the SMFIF_ADDHDRS
- flag in the smfiDesc_str passed to
- <A href="smfi_register.html">smfi_register</A>.
+ <LI>A filter which calls smfi_addheader must have set the
+ <A HREF="smfi_register.html#SMFIF_ADDHDRS">SMFIF_ADDHDRS</A> flag.
<LI>For smfi_addheader, filter order is important.
<B>Later filters will see the header changes made by earlier ones.</B>
<LI>Neither the name nor the value of the header is checked for
@@ -101,7 +101,7 @@ To change a header's current value, use
<!----------- Example code ---------->
<TR>
-<TH valign="top" align=left>EXAMPLE</TH>
+<TH valign="top" align=left>EXAMPLE</TH>
<TD>
<PRE>
diff --git a/contrib/sendmail/libmilter/docs/smfi_addrcpt.html b/contrib/sendmail/libmilter/docs/smfi_addrcpt.html
index 42014bf1d821..81eecaf0069e 100644
--- a/contrib/sendmail/libmilter/docs/smfi_addrcpt.html
+++ b/contrib/sendmail/libmilter/docs/smfi_addrcpt.html
@@ -31,6 +31,7 @@ Add a recipient for the current message.
<TD>Add a recipient to the message envelope.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -47,13 +48,13 @@ Add a recipient for the current message.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_addrcpt will fail and return MI_FAILURE if:
<UL><LI>rcpt is NULL.
<LI>Adding recipients in the current connection state is invalid.
<LI>A network error occurs.
- <LI>SMFIF_ADDRCPT was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_ADDRCPT">SMFIF_ADDRCPT</A> is not set.
</UL>
Otherwise, it will return MI_SUCCESS.
</TD>
@@ -61,11 +62,10 @@ Otherwise, it will return MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
-A filter which calls smfi_addrcpt must have set the SMFIF_ADDRCPT flag
-in the smfiDesc_str passed to
-<A href="smfi_register.html">smfi_register</A>.
+A filter which calls smfi_addrcpt must have set the
+<A HREF="smfi_register.html#SMFIF_ADDRCPT">SMFIF_ADDRCPT</A> flag.
</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html b/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html
index 0176e69e0617..9d72cd6ca82b 100644
--- a/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html
+++ b/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html
@@ -32,6 +32,7 @@ Add a recipient for the current message including ESMTP arguments.
<TD>Add a recipient to the message envelope.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -51,14 +52,13 @@ Add a recipient for the current message including ESMTP arguments.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
-<TD>smfi_addrcpt will fail and return MI_FAILURE if:
+<TD>smfi_addrcpt_par will fail and return MI_FAILURE if:
<UL><LI>rcpt is NULL.
<LI>Adding recipients in the current connection state is invalid.
<LI>A network error occurs.
- <LI>SMFIF_ADDRCPT_PAR was not set when
- <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_ADDRCPT_PAR">SMFIF_ADDRCPT_PAR</A> is not set._PAR
</UL>
Otherwise, it will return MI_SUCCESS.
</TD>
@@ -66,11 +66,10 @@ Otherwise, it will return MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
-A filter which calls smfi_addrcpt must have set the SMFIF_ADDRCPT_PAR flag
-in the smfiDesc_str passed to
-<A href="smfi_register.html">smfi_register</A>.
+A filter which calls smfi_addrcpt_par must have set the
+<A HREF="smfi_register.html#SMFIF_ADDRCPT_PAR">SMFIF_ADDRCPT_PAR</A> flag.
</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/smfi_chgfrom.html b/contrib/sendmail/libmilter/docs/smfi_chgfrom.html
index a107ee9ebebc..0cfe7b6fc800 100644
--- a/contrib/sendmail/libmilter/docs/smfi_chgfrom.html
+++ b/contrib/sendmail/libmilter/docs/smfi_chgfrom.html
@@ -32,6 +32,7 @@ Change the envelope sender (MAIL From) of the current message.
<TD>Change the envelope sender (MAIL From) of the current message.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -51,13 +52,13 @@ Change the envelope sender (MAIL From) of the current message.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_chgfrom will fail and return MI_FAILURE if:
<UL><LI>mail is NULL.
<LI>Changing the sender in the current connection state is invalid.
<LI>A network error occurs.
- <LI>SMFIF_CHGFROM was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_CHGFROM">SMFIF_CHGFROM</A> is not set.
</UL>
Otherwise, it will return MI_SUCCESS.
</TD>
@@ -65,11 +66,10 @@ Otherwise, it will return MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
-A filter which calls smfi_chgfrom must have set the SMFIF_CHGFROM flag
-in the smfiDesc_str passed to
-<A href="smfi_register.html">smfi_register</A>.
+A filter which calls smfi_chgfrom must have set the
+<A HREF="smfi_register.html#SMFIF_CHGFROM">SMFIF_CHGFROM</A> flag.
<BR>
Even though all ESMTP arguments could be set via this call,
it does not make sense to do so for many of them,
diff --git a/contrib/sendmail/libmilter/docs/smfi_chgheader.html b/contrib/sendmail/libmilter/docs/smfi_chgheader.html
index b3004032e4b8..de132f442b5b 100644
--- a/contrib/sendmail/libmilter/docs/smfi_chgheader.html
+++ b/contrib/sendmail/libmilter/docs/smfi_chgheader.html
@@ -33,6 +33,7 @@ Change or delete a message header.
<TD>Changes a header's value for the current message.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -55,7 +56,7 @@ Change or delete a message header.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>
smfi_chgheader will return MI_FAILURE if
@@ -63,17 +64,18 @@ smfi_chgheader will return MI_FAILURE if
<LI>Modifying headers in the current connection state is invalid.
<LI>Memory allocation fails.
<LI>A network error occurs.
- <LI>SMFIF_CHGHDRS was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_CHGHDRS">SMFIF_CHGHDRS</A> is not set.
</UL>
Otherwise, it returns MI_SUCCESS.
-</TR>
+</TD></TR>
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
<UL><LI>While smfi_chgheader may be used to add new headers, it is more efficient and far safer to use <A href="smfi_addheader.html">smfi_addheader</A>.
- <LI>A filter which calls smfi_chgheader must have set the SMFIF_CHGHDRS flag in the smfiDesc_str passed to <A href="smfi_register.html">smfi_register</A>.
+ <LI>A filter which calls smfi_chgheader must have set the
+ <A HREF="smfi_register.html#SMFIF_CHGHDRS">SMFIF_CHGHDRS</A> flag.
<LI>For smfi_chgheader, filter order is important. <B>Later filters will see the header changes made by earlier ones.</B>
<LI>Neither the name nor the value of the header is checked for
standards compliance. However, each line of the header must be under
diff --git a/contrib/sendmail/libmilter/docs/smfi_delrcpt.html b/contrib/sendmail/libmilter/docs/smfi_delrcpt.html
index ec1412bd3778..bd42a7319e56 100644
--- a/contrib/sendmail/libmilter/docs/smfi_delrcpt.html
+++ b/contrib/sendmail/libmilter/docs/smfi_delrcpt.html
@@ -31,6 +31,7 @@ Remove a recipient from the current message's envelope.
<TD>smfi_delrcpt removes the named recipient from the current message's envelope.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -47,14 +48,14 @@ Remove a recipient from the current message's envelope.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_delrcpt will fail and return MI_FAILURE if:
<UL>
<LI>rcpt is NULL.
<LI>Deleting recipients in the current connection state is invalid.
<LI>A network error occurs.
- <LI>SMFIF_DELRCPT was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_DELRCPT">SMFIF_DELRCPT</A> is not set.
</UL>
Otherwise, it will return MI_SUCCESS
</TD>
@@ -62,9 +63,13 @@ Otherwise, it will return MI_SUCCESS
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
+<LI>
The addresses to be removed must match exactly. For example, an address and its expanded form do not match.
+<LI>
+A filter which calls smfi_delrcpt must have set the
+<A HREF="smfi_register.html#SMFIF_DELRCPT">SMFIF_DELRCPT</A> flag.
</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/smfi_getpriv.html b/contrib/sendmail/libmilter/docs/smfi_getpriv.html
index 783d6402ef45..5ed8a22c2c60 100644
--- a/contrib/sendmail/libmilter/docs/smfi_getpriv.html
+++ b/contrib/sendmail/libmilter/docs/smfi_getpriv.html
@@ -30,6 +30,7 @@ Get the connection-specific data pointer for this connection.
<TD>None.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -43,7 +44,7 @@ Get the connection-specific data pointer for this connection.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_getpriv returns the private data pointer stored by a prior call to <A href="smfi_setpriv.html">smfi_setpriv</A>, or NULL if none has been set.</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/smfi_getsymval.html b/contrib/sendmail/libmilter/docs/smfi_getsymval.html
index dff8dc638c84..7e3e4d559434 100644
--- a/contrib/sendmail/libmilter/docs/smfi_getsymval.html
+++ b/contrib/sendmail/libmilter/docs/smfi_getsymval.html
@@ -31,6 +31,7 @@ Get the value of a sendmail macro.
<TD>None.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -51,14 +52,14 @@ Get the value of a sendmail macro.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_getsymval returns the value of the given macro as a null-terminated string, or NULL if the macro is not defined.</TD>
</TR>
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH><A name="notes">NOTES</A></TH>
+<TH><A name="notes">NOTES</A></TH>
<TD>
By default, the following macros are valid in the given contexts:
diff --git a/contrib/sendmail/libmilter/docs/smfi_insheader.html b/contrib/sendmail/libmilter/docs/smfi_insheader.html
index 3f568864835c..7759dc90c1a5 100644
--- a/contrib/sendmail/libmilter/docs/smfi_insheader.html
+++ b/contrib/sendmail/libmilter/docs/smfi_insheader.html
@@ -33,6 +33,7 @@ Prepend a header to the current message.
<TD>Prepends a header to the current message.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -49,21 +50,21 @@ Prepend a header to the current message.
<TD>The header name, a non-NULL, null-terminated string.
</TD></TR>
<TR valign="top"><TD>headerv</TD>
- <TD>The header value to be added, a non-NULL, null-terminated string. This may be the empty string.
+ <TD>The header value to be added, a non-NULL, null-terminated string. This may be the empty string.
</TD></TR>
</TABLE>
</TD></TR>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_insheader returns MI_FAILURE if:
<UL><LI>headerf or headerv is NULL.
<LI>Adding headers in the current connection state is invalid.
<LI>Memory allocation fails.
<LI>A network error occurs.
- <LI>SMFIF_ADDHDRS was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_ADDHDRS">SMFIF_ADDHDRS</A> is not set.
</UL>
Otherwise, it returns MI_SUCCESS.
</TD>
@@ -71,15 +72,15 @@ Otherwise, it returns MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
<UL>
<LI>smfi_insheader does not change a message's existing headers.
To change a header's current value, use
<A HREF="smfi_chgheader.html">smfi_chgheader</A>.
- <LI>A filter which calls smfi_insheader must have set the SMFIF_ADDHDRS
- flag in the smfiDesc_str passed to
- <A href="smfi_register.html">smfi_register</A>.
+ <LI>A filter which calls smfi_insheader must have set the
+ <A HREF="smfi_register.html#SMFIF_ADDHDRS">SMFIF_ADDHDRS</A>
+ flag.
<LI>For smfi_insheader, filter order is important.
<B>Later filters will see the header changes made by earlier ones.</B>
<LI>A filter will receive <EM>only</EM> headers that have been sent
@@ -122,7 +123,7 @@ Otherwise, it returns MI_SUCCESS.
<!----------- Example code ---------->
<TR>
-<TH valign="top" align=left>EXAMPLE</TH>
+<TH valign="top" align=left>EXAMPLE</TH>
<TD>
<PRE>
diff --git a/contrib/sendmail/libmilter/docs/smfi_main.html b/contrib/sendmail/libmilter/docs/smfi_main.html
index cb63f96bc5d0..87228fc166d0 100644
--- a/contrib/sendmail/libmilter/docs/smfi_main.html
+++ b/contrib/sendmail/libmilter/docs/smfi_main.html
@@ -29,10 +29,11 @@ Hand control to libmilter event loop.
<TD>smfi_main hands control to the Milter event loop.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_main will return MI_FAILURE if it fails to establish a connection. This may occur for any of a variety of reasons (e.g. invalid address passed to <A href="smfi_setconn.html">smfi_setconn</A>). The reason for the failure will be logged. Otherwise, smfi_main will return MI_SUCCESS.</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/smfi_opensocket.html b/contrib/sendmail/libmilter/docs/smfi_opensocket.html
index d4f7e3a705ed..7b9e49df97af 100644
--- a/contrib/sendmail/libmilter/docs/smfi_opensocket.html
+++ b/contrib/sendmail/libmilter/docs/smfi_opensocket.html
@@ -34,13 +34,14 @@ but before calling <TT>smfi_main()</TT>.
<TD>smfi_opensocket attempts to create the socket specified previously by
a call to <TT>smfi_setconn()</TT> which will be the interface between MTAs
and the filter.
-This allows the calling application to ensure that the
-socket can be created.
+This allows the calling application to ensure that the socket can be created.
If this is not called,
-<TT>smfi_main()</TT> will do so implicitly.
+<TT>smfi_main()</TT> will create the socket implicitly
+(without removing a potentially existing UNIX domain socket).
</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -56,7 +57,7 @@ If this is not called,
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_opensocket will fail and return MI_FAILURE if:
<UL>
diff --git a/contrib/sendmail/libmilter/docs/smfi_progress.html b/contrib/sendmail/libmilter/docs/smfi_progress.html
index 2b87b012422f..53205ad5dc31 100644
--- a/contrib/sendmail/libmilter/docs/smfi_progress.html
+++ b/contrib/sendmail/libmilter/docs/smfi_progress.html
@@ -31,6 +31,7 @@ Notify the MTA that an operation is still in progress.
on a message, causing the MTA to re-start its timeouts.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -44,7 +45,7 @@ on a message, causing the MTA to re-start its timeouts.</TD>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_progress will fail and return MI_FAILURE if:
<UL>
diff --git a/contrib/sendmail/libmilter/docs/smfi_quarantine.html b/contrib/sendmail/libmilter/docs/smfi_quarantine.html
index b63da2d6c50f..6c954c44036e 100644
--- a/contrib/sendmail/libmilter/docs/smfi_quarantine.html
+++ b/contrib/sendmail/libmilter/docs/smfi_quarantine.html
@@ -31,6 +31,7 @@ Quarantine the message using the given reason.
<TD>smfi_quarantine quarantines the message using the given reason.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -47,13 +48,13 @@ Quarantine the message using the given reason.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_quarantine will fail and return MI_FAILURE if:
<UL>
<LI>reason is NULL or empty.
<LI>A network error occurs.
- <LI>SMFIF_QUARANTINE was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_QUARANTINE">SMFIF_QUARANTINE</A> is not set.
</UL>
Otherwise, it will return MI_SUCCESS
</TD>
diff --git a/contrib/sendmail/libmilter/docs/smfi_register.html b/contrib/sendmail/libmilter/docs/smfi_register.html
index 30ab75cae497..5c61beefc1a5 100644
--- a/contrib/sendmail/libmilter/docs/smfi_register.html
+++ b/contrib/sendmail/libmilter/docs/smfi_register.html
@@ -37,6 +37,7 @@ is obeyed.
</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -96,12 +97,12 @@ simply returning SMFIS_CONTINUE.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>
smfi_register may return MI_FAILURE for any of the following reasons:
<UL>
-<LI>memory allocation failed.
+<LI>memory allocation failed.
<LI>incompatible version or illegal flags value.
</UL>
@@ -110,7 +111,7 @@ smfi_register may return MI_FAILURE for any of the following reasons:
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH><A NAME=Notes>NOTES</A></TH>
<TD>
<A NAME="flags">The xxfi_flags</A>
@@ -120,7 +121,7 @@ the following values, describing the actions the filter may take:
<TR valign="top" bgcolor="#dddddd"><TH align="left">Flag</TH><TH align="center">Description</TH></TR>
<TR align="left" valign=top>
<TD>
- SMFIF_ADDHDRS
+ <A NAME="SMFIF_ADDHDRS">SMFIF_ADDHDRS</A>
</TD>
<TD>
This filter may <A HREF="smfi_addheader.html">add headers</A>.
@@ -128,7 +129,7 @@ the following values, describing the actions the filter may take:
</TR>
<TR align="left" valign=top>
<TD>
- SMFIF_CHGHDRS
+ <A NAME="SMFIF_CHGHDRS">SMFIF_CHGHDRS</A>
</TD>
<TD>
This filter may
@@ -137,7 +138,7 @@ the following values, describing the actions the filter may take:
</TR>
<TR align="left" valign=top>
<TD VALIGN="TOP">
- SMFIF_CHGBODY
+ <A NAME="SMFIF_CHGBODY">SMFIF_CHGBODY</A>
</TD>
<TD>
This filter may
@@ -148,7 +149,7 @@ the following values, describing the actions the filter may take:
</TR>
<TR>
<TD VALIGN="TOP">
- SMFIF_ADDRCPT
+ <A NAME="SMFIF_ADDRCPT">SMFIF_ADDRCPT</A>
</TD>
<TD>
This filter may
@@ -158,7 +159,7 @@ the following values, describing the actions the filter may take:
</TR>
<TR>
<TD VALIGN="TOP">
- SMFIF_ADDRCPT_PAR
+ <A NAME="SMFIF_ADDRCPT_PAR">SMFIF_ADDRCPT_PAR</A>
</TD>
<TD>
This filter may
@@ -167,7 +168,7 @@ the following values, describing the actions the filter may take:
</TR>
<TR>
<TD VALIGN="TOP">
- SMFIF_DELRCPT
+ <A NAME="SMFIF_DELRCPT">SMFIF_DELRCPT</A>
</TD>
<TD>
This filter may
@@ -176,7 +177,7 @@ the following values, describing the actions the filter may take:
</TR>
<TR>
<TD VALIGN="TOP">
- SMFIF_QUARANTINE
+ <A NAME="SMFIF_QUARANTINE">SMFIF_QUARANTINE</A>
</TD>
<TD>
This filter may
@@ -186,7 +187,7 @@ the following values, describing the actions the filter may take:
<TR>
<TD VALIGN="TOP">
- SMFIF_CHGFROM
+ <A NAME="SMFIF_CHGFROM">SMFIF_CHGFROM</A>
</TD>
<TD>
This filter may
@@ -196,7 +197,7 @@ the following values, describing the actions the filter may take:
<TR>
<TD VALIGN="TOP">
- SMFIF_SETSYMLIST
+ <A NAME="SMFIF_SETSYMLIST">SMFIF_SETSYMLIST</A>
</TD>
<TD>
This filter can
diff --git a/contrib/sendmail/libmilter/docs/smfi_replacebody.html b/contrib/sendmail/libmilter/docs/smfi_replacebody.html
index 4a5117964a33..0842298bc62c 100644
--- a/contrib/sendmail/libmilter/docs/smfi_replacebody.html
+++ b/contrib/sendmail/libmilter/docs/smfi_replacebody.html
@@ -29,12 +29,13 @@ Replace message-body data.
</TR>
<TR align="left" valign=top>
<TH width="80">Effects</TH>
-<TD>smfi_replacebody replaces the body of the current message. If called
-more than once, subsequent calls result in data being appended to the new
+<TD>smfi_replacebody replaces the body of the current message. If called
+more than once, subsequent calls result in data being appended to the new
body.
</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -54,14 +55,14 @@ body.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_replacebody fails and returns MI_FAILURE if:
<UL>
<LI>bodyp == NULL and bodylen &gt; 0.
<LI>Changing the body in the current connection state is invalid.
<LI>A network error occurs.
- <LI>SMFIF_CHGBODY was not set when <A href="smfi_register.html">smfi_register</A> was called.
+ <LI><A HREF="smfi_register.html#SMFIF_CHGBODY">SMFIF_CHGBODY</A> is not set.
</UL>
Otherwise, it will return MI_SUCCESS.
</TD>
@@ -69,12 +70,14 @@ Otherwise, it will return MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
<UL>
- <LI>Since the message body may be very large, setting SMFIF_CHGBODY may significantly affect filter performance.
+ <LI>Since the message body may be very large, calling smfi_replacebody may significantly affect filter performance.
<LI>If a filter sets SMFIF_CHGBODY but does not call smfi_replacebody, the original body remains unchanged.
<LI>For smfi_replacebody, filter order is important. <B>Later filters will see the new body contents created by earlier ones.</B>
+ <LI>A filter which calls smfi_replacebody must have set the
+ <A HREF="smfi_register.html#SMFIF_CHGBODY">SMFIF_CHGBODY</A> flag.
</UL>
</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/smfi_setbacklog.html b/contrib/sendmail/libmilter/docs/smfi_setbacklog.html
index 961285555442..f025009db7ed 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setbacklog.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setbacklog.html
@@ -31,6 +31,7 @@ Set the filter's <CODE>listen(2)</CODE> backlog value.
If smfi_setbacklog is not called, the operating system default is used.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -44,7 +45,7 @@ If smfi_setbacklog is not called, the operating system default is used.</TD>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_setbacklog returns MI_FAILURE if obacklog is less than or equal
to zero.</TD>
diff --git a/contrib/sendmail/libmilter/docs/smfi_setconn.html b/contrib/sendmail/libmilter/docs/smfi_setconn.html
index eba7c5b7e52e..8897f5aca5a7 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setconn.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setconn.html
@@ -30,14 +30,15 @@ Set the socket through which this filter should communicate with sendmail.
<TD>Sets the socket through which the filter communicates with sendmail.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
<TABLE border="1" cellspacing=0>
<TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR>
<TR valign="top"><TD>oconn</TD>
- <TD>The address of the desired communication socket.
- The address should be a NULL-terminated string in "proto:address"
+ <TD>The address of the desired communication socket.
+ The address should be a NULL-terminated string in "proto:address"
format:
<UL>
<LI><CODE>{unix|local}:/path/to/file</CODE> -- A named pipe.
@@ -50,7 +51,7 @@ Set the socket through which this filter should communicate with sendmail.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_setconn will not fail on an invalid address.
The failure will only be detected in <A href="smfi_main.html">smfi_main</A>.
@@ -60,7 +61,7 @@ due to a lack of memory.
</TR>
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>
<UL>
diff --git a/contrib/sendmail/libmilter/docs/smfi_setdbg.html b/contrib/sendmail/libmilter/docs/smfi_setdbg.html
index 58d519935e20..e7498391105b 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setdbg.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setdbg.html
@@ -34,6 +34,7 @@ A level of zero turns off debugging. The greater
the current, highest, useful value.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -47,7 +48,7 @@ the current, highest, useful value.</TD>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_setdbg returns MI_SUCCESS by default.
</TD>
diff --git a/contrib/sendmail/libmilter/docs/smfi_setmlreply.html b/contrib/sendmail/libmilter/docs/smfi_setmlreply.html
index e9118838fd39..3f36e5296430 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setmlreply.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setmlreply.html
@@ -38,6 +38,7 @@ This code will be used on subsequent error replies resulting from actions
taken by this filter.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -65,7 +66,7 @@ taken by this filter.</TD>
<!----------- Example ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>
For example, the code:<BR>
<PRE>
@@ -86,13 +87,13 @@ For example, the code:<BR>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_setmlreply will fail and return MI_FAILURE if:
<UL>
<LI>The rcode or xcode argument is invalid.
<LI>A memory-allocation failure occurs.
- <LI>If any text line contains a carraige return or line feed.
+ <LI>If any text line contains a carriage return or line feed.
<LI>The length of any text line is more than MAXREPLYLEN (980).
<LI>More than 32 lines of text replies are given.
</UL>
@@ -102,7 +103,7 @@ Otherwise, it return MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
<UL>
<LI>Values passed to smfi_setmlreply are not checked for standards compliance.
@@ -112,7 +113,7 @@ For example, CR or LF will cause the call to fail,
single '%' characters will cause the text to be ignored
(if there really should be a '%' in the string,
use '%%' just like for <TT>printf(3)</TT>).
-<LI>For details about reply codes and their meanings, please see RFC's
+<LI>For details about reply codes and their meanings, please see RFC's
<A href="http://www.rfc-editor.org/rfc/rfc821.txt">821</A>/
<A href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</A>
and
diff --git a/contrib/sendmail/libmilter/docs/smfi_setpriv.html b/contrib/sendmail/libmilter/docs/smfi_setpriv.html
index 5b03456f47aa..a9cb37e598c9 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setpriv.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setpriv.html
@@ -31,6 +31,7 @@ Set the private data pointer for this connection.
<TD>Sets the private data pointer for the context ctx.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -47,14 +48,14 @@ Set the private data pointer for this connection.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_setpriv returns MI_FAILURE if ctx is an invalid context.
Otherwise, it returns MI_SUCCESS.</TD>
</TR>
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>There is only one private data pointer per connection; multiple
calls to smfi_setpriv with different values will cause previous values
diff --git a/contrib/sendmail/libmilter/docs/smfi_setreply.html b/contrib/sendmail/libmilter/docs/smfi_setreply.html
index 21ec5a57d092..615567107a4a 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setreply.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setreply.html
@@ -31,11 +31,12 @@ other than xxfi_connect.</TD>
</TR>
<TR align="left" valign=top>
<TH width="80">Effects</TH>
-<TD>Directly set the SMTP error reply code for this connection. This code
-will be used on subsequent error replies resulting from actions taken by
+<TD>Directly set the SMTP error reply code for this connection. This code
+will be used on subsequent error replies resulting from actions taken by
this filter.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -61,12 +62,14 @@ this filter.</TD>
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_setreply will fail and return MI_FAILURE if:
<UL>
<LI>The rcode or xcode argument is invalid.
<LI>A memory-allocation failure occurs.
+ <LI>The length of any text line is more than MAXREPLYLEN (980).
+ <LI>The message argument contains a carriage return or line feed.
</UL>
Otherwise, it return MI_SUCCESS.
</TD>
@@ -74,7 +77,7 @@ Otherwise, it return MI_SUCCESS.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>
<UL>
<LI>Values passed to smfi_setreply are not checked for standards compliance.
@@ -84,7 +87,7 @@ For example, CR or LF will cause the call to fail,
single '%' characters will cause the text to be ignored
(if there really should be a '%' in the string,
use '%%' just like for <TT>printf(3)</TT>).
-<LI>For details about reply codes and their meanings, please see RFC's
+<LI>For details about reply codes and their meanings, please see RFC's
<A href="http://www.rfc-editor.org/rfc/rfc821.txt">821</A>/
<A href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</A>
and
diff --git a/contrib/sendmail/libmilter/docs/smfi_setsymlist.html b/contrib/sendmail/libmilter/docs/smfi_setsymlist.html
index c270d0b5647b..27bdd8a5f8ed 100644
--- a/contrib/sendmail/libmilter/docs/smfi_setsymlist.html
+++ b/contrib/sendmail/libmilter/docs/smfi_setsymlist.html
@@ -12,7 +12,7 @@ $Id: smfi_setsymlist.html,v 1.7 2013-11-22 20:51:39 ca Exp $
<PRE>
#include &lt;libmilter/mfapi.h&gt;
int smfi_setsymlist(
- SMFICTX *ctx,
+ SMFICTX *ctx,
int stage,
char *macros
);
@@ -37,6 +37,7 @@ milter wants to receive from the MTA.
</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -72,7 +73,7 @@ milter wants to receive from the MTA.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>MI_FAILURE is returned if
<UL>
@@ -88,7 +89,7 @@ Otherwise MI_SUCCESS is returned.
<!----------- Notes ---------->
<TR align="left" valign=top>
-<TH>NOTES</TH>
+<TH>NOTES</TH>
<TD>There is an internal limit on the number of macros
that can be set
<!-- XREF: MAXFILTERMACROS -->
diff --git a/contrib/sendmail/libmilter/docs/smfi_settimeout.html b/contrib/sendmail/libmilter/docs/smfi_settimeout.html
index 35cd51003ae6..aa135618a9d0 100644
--- a/contrib/sendmail/libmilter/docs/smfi_settimeout.html
+++ b/contrib/sendmail/libmilter/docs/smfi_settimeout.html
@@ -33,6 +33,7 @@ If smfi_settimeout is not called, a default timeout of 7210 seconds is used.
</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -47,24 +48,21 @@ If smfi_settimeout is not called, a default timeout of 7210 seconds is used.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_settimeout always returns MI_SUCCESS.</TD>
</TR>
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>
Decreasing the timeout is strongly discouraged
and may break the communication with the MTA.
Do <EM>not</EM> decrease this value without making sure that
the MTA also uses lower timeouts for communication
(with the milter and with the SMTP client).
-</TR>
-</TABLE>
-
-
+</TD></TR>
</TABLE>
<HR size="1">
diff --git a/contrib/sendmail/libmilter/docs/smfi_stop.html b/contrib/sendmail/libmilter/docs/smfi_stop.html
index aa725b9dbc25..c85a20d76ac5 100644
--- a/contrib/sendmail/libmilter/docs/smfi_stop.html
+++ b/contrib/sendmail/libmilter/docs/smfi_stop.html
@@ -36,6 +36,7 @@ which may then exit or warm-restart.
</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -49,7 +50,7 @@ which may then exit or warm-restart.
<!----------- Return values ---------->
<TR>
-<TH valign="top" align=left>RETURN VALUES</TH>
+<TH valign="top" align=left>RETURN VALUES</TH>
<TD>smfi_stop always returns SMFI_CONTINUE. But note:
<UL>
diff --git a/contrib/sendmail/libmilter/docs/smfi_version.html b/contrib/sendmail/libmilter/docs/smfi_version.html
index 64c4a4d8f8ac..f9b7bcb86b0c 100644
--- a/contrib/sendmail/libmilter/docs/smfi_version.html
+++ b/contrib/sendmail/libmilter/docs/smfi_version.html
@@ -32,6 +32,7 @@ Get the (runtime) version of libmilter.
<TD>None.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH VALIGN="TOP" ALIGN=LEFT>ARGUMENTS</TH><TD>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_abort.html b/contrib/sendmail/libmilter/docs/xxfi_abort.html
index 9ec8f4990737..4e20d0e18d52 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_abort.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_abort.html
@@ -30,6 +30,7 @@ Handle the current message's being aborted.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -43,7 +44,7 @@ Handle the current message's being aborted.
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>
<UL>
<LI>xxfi_abort must reclaim any resources allocated on a per-message
diff --git a/contrib/sendmail/libmilter/docs/xxfi_body.html b/contrib/sendmail/libmilter/docs/xxfi_body.html
index 811035065874..511eeb3aae68 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_body.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_body.html
@@ -32,6 +32,7 @@ Handle a piece of a message's body.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -51,7 +52,7 @@ Handle a piece of a message's body.
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>
<UL>
<LI>bodyp points to a sequence of bytes.
@@ -65,7 +66,7 @@ to work as expected.
significantly impact filter performance.
<LI>End-of-lines are represented as received from SMTP (normally CR/LF).
<LI>Later filters will see body changes made by earlier ones.
-<LI>Message bodies may be sent in multiple chunks, with one call to
+<LI>Message bodies may be sent in multiple chunks, with one call to
xxfi_body per chunk.
<LI>Return
<A HREF="api.html#SMFIS_SKIP">SMFIS_SKIP</A>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_close.html b/contrib/sendmail/libmilter/docs/xxfi_close.html
index b5cf2ff237ad..1999d0e3896b 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_close.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_close.html
@@ -30,6 +30,7 @@ The current connection is being closed.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -43,7 +44,7 @@ The current connection is being closed.
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>
<UL>
<LI>xxfi_close may be called "out-of-order", i.e. before even the
@@ -59,7 +60,7 @@ xxfi_close code.
In particular, it is incorrect to assume the private context pointer
will be something other than NULL in this callback.
<LI>xxfi_close is called on close even if the previous mail
-transaction was aborted.
+transaction was aborted.
<LI>xxfi_close is responsible for freeing any resources allocated on a
per-connection basis.
<LI>Since the connection is already closing, the return value is
diff --git a/contrib/sendmail/libmilter/docs/xxfi_connect.html b/contrib/sendmail/libmilter/docs/xxfi_connect.html
index 29a2c911153e..c84f9f281738 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_connect.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_connect.html
@@ -12,7 +12,7 @@ $Id: xxfi_connect.html,v 1.20 2013-11-22 20:51:39 ca Exp $
<PRE>
#include &lt;libmilter/mfapi.h&gt;
sfsistat (*xxfi_connect)(
- SMFICTX *ctx,
+ SMFICTX *ctx,
char *hostname,
_SOCK_ADDR *hostaddr);
</PRE>
@@ -29,16 +29,18 @@ sfsistat (*xxfi_connect)(
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+
<!--
-This callback function is invoked on each connection to the mail
+This callback function is invoked on each connection to the mail
filter program.
The callback is to be implemented by the Milter application developers.
The name of the callback can be any valid function name.
The function pointer is to be assigned to the
smfiDesc.xxfi_connect and the pointer to the smfiDesc structure
is passed to smfi_register().
-</TD></TR>
-->
+</TD></TR>
+
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
<TABLE border="1" cellspacing=0>
@@ -103,7 +105,7 @@ is passed to smfi_register().
-->
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>If an earlier filter rejects the connection in its xxfi_connect()
routine, this filter's xxfi_connect() will not be called.</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_data.html b/contrib/sendmail/libmilter/docs/xxfi_data.html
index 7dedb4183097..f8b715b5675e 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_data.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_data.html
@@ -23,13 +23,14 @@ Handle the DATA command.
<TABLE border="1" cellspacing=1 cellpadding=4>
<TR align="left" valign=top>
<TH width="80">Called When</TH>
-<TD>xxfi_data is called when the client uses the DATA command.
+<TD>xxfi_data is called when the client uses the DATA command.</TD>
</TR>
<TR align="left" valign=top>
<TH>Default Behavior</TH>
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -67,11 +68,11 @@ Handle the DATA command.
</TD>
</TR>
</TABLE>
-</TR>
+</TD></TR>
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>For more details on ESMTP responses, please see RFC
<A href="http://www.rfc-editor.org/rfc/rfc1869.txt">1869</A>.</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_envfrom.html b/contrib/sendmail/libmilter/docs/xxfi_envfrom.html
index 24811e14a6c1..b553b4d9fd63 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_envfrom.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_envfrom.html
@@ -33,6 +33,7 @@ before xxfi_envrcpt.</TD>
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -75,11 +76,11 @@ before xxfi_envrcpt.</TD>
</TD>
</TR>
</TABLE>
-</TR>
+</TD></TR>
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>For more details on ESMTP responses, please see RFC
<A href="http://www.rfc-editor.org/rfc/rfc1869.txt">1869</A>.</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html b/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html
index 9503ab98c616..d15b70fdf187 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html
@@ -31,6 +31,7 @@ Handle the envelope RCPT command.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -54,7 +55,7 @@ Handle the envelope RCPT command.
<TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR>
<TR valign="top">
<TD>SMFIS_TEMPFAIL</TD>
- <TD>Temporarily fail for this particular recipient; further recipients
+ <TD>Temporarily fail for this particular recipient; further recipients
may still be sent. <A href="xxfi_abort.html">xxfi_abort</A> is not called.
</TD>
</TR>
@@ -76,11 +77,11 @@ Handle the envelope RCPT command.
</TD>
</TR>
</TABLE>
-</TR>
+</TD></TR>
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>For more details on ESMTP responses, please see RFC
<A href="http://www.rfc-editor.org/rfc/rfc1869.txt">1869</A>.</TD>
</TR>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_eoh.html b/contrib/sendmail/libmilter/docs/xxfi_eoh.html
index 33f5fc004983..4be41d758bc3 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_eoh.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_eoh.html
@@ -31,6 +31,7 @@ Handle the end of message headers.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_eom.html b/contrib/sendmail/libmilter/docs/xxfi_eom.html
index d473777e4b13..9bf040c02ad4 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_eom.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_eom.html
@@ -30,6 +30,7 @@ End of a message.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -43,7 +44,7 @@ End of a message.
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>A filter is required to make all its modifications to the message headers, body, and envelope in xxfi_eom.
Modifications are made via the smfi_* routines.
</TD>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_header.html b/contrib/sendmail/libmilter/docs/xxfi_header.html
index 16e814b47c48..bccada7e524f 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_header.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_header.html
@@ -32,6 +32,7 @@ Handle a message header.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -55,7 +56,7 @@ Handle a message header.
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>
<UL>
<LI>Starting with sendmail 8.14, spaces after the colon in a header
@@ -90,7 +91,7 @@ it was:
<LI>Later filters will see header changes/additions made by earlier ones.
-<LI>For much more detail about header format, please see
+<LI>For much more detail about header format, please see
RFC <A href="http://www.rfc-editor.org/rfc/rfc822.html">822</A>
and
RFC <A href="http://www.rfc-editor.org/rfc/rfc2822.html">2822</A>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_helo.html b/contrib/sendmail/libmilter/docs/xxfi_helo.html
index 716eb9290f17..8c4309cd5bf2 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_helo.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_helo.html
@@ -12,7 +12,7 @@ $Id: xxfi_helo.html,v 1.13 2013-11-22 20:51:39 ca Exp $
<PRE>
#include &lt;libmilter/mfapi.h&gt;
sfsistat (*xxfi_helo)(
- SMFICTX *ctx,
+ SMFICTX *ctx,
char *helohost
);
</PRE>
@@ -34,6 +34,7 @@ some restrictions can be imposed by the MTA configuration.
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
diff --git a/contrib/sendmail/libmilter/docs/xxfi_negotiate.html b/contrib/sendmail/libmilter/docs/xxfi_negotiate.html
index b0502f47a711..e858a39c0e98 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_negotiate.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_negotiate.html
@@ -13,7 +13,7 @@ $Id: xxfi_negotiate.html,v 1.24 2013-11-22 20:51:39 ca Exp $
#include &lt;libmilter/mfapi.h&gt;
#include &lt;libmilter/mfdef.h&gt;
sfsistat (*xxfi_negotiate)(
- SMFICTX *ctx,
+ SMFICTX *ctx,
unsigned long f0,
unsigned long f1,
unsigned long f2,
@@ -36,6 +36,8 @@ sfsistat (*xxfi_negotiate)(
<TD>Return SMFIS_ALL_OPTS to change nothing.</TD>
</TR>
</TABLE>
+</TD></TR>
+
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
<TABLE border="1" cellspacing=0>
@@ -48,6 +50,7 @@ sfsistat (*xxfi_negotiate)(
</TD></TR>
<TR><TD>f1</TD>
<TD>the protocol steps offered by the MTA.
+ </TD></TR>
<TR><TD>f2</TD>
<TD>for future extensions.
</TD></TR>
@@ -59,6 +62,7 @@ sfsistat (*xxfi_negotiate)(
</TD></TR>
<TR><TD>pf1</TD>
<TD>the protocol steps requested by the milter.
+ </TD></TR>
<TR><TD>pf2</TD>
<TD>for future extensions.
</TD></TR>
@@ -101,11 +105,11 @@ as they will be ignored.
</TD>
</TR>
</TABLE>
-</TR>
+</TD></TR>
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>This function allows a milter to dynamically determine and
request operations and actions during startup.
In previous versions, the actions (f0) were fixed in the
@@ -140,6 +144,11 @@ By setting this bit, a milter can request that the
MTA should also send <CODE>RCPT</CODE> commands that have been rejected
because the user is unknown (or similar reasons), but not those
which have been rejected because of syntax errors etc.
+<!--
+In order for this request to have effect,
+sendmail must have been built with the compile time option
+<TT>_FFR_MILTER_CHECK_REJECTIONS_TOO</TT>.
+-->
If a milter requests this protocol step,
then it should check the macro
<CODE>{rcpt_mailer}</CODE>:
@@ -204,11 +213,12 @@ space to headers when they are added, inserted, or changed.
<LI>The MTA can be instructed not to send information about
various SMTP stages, these flags start with:
<A NAME="SMFIP_NO"><CODE>SMFIP_NO*</CODE></A>.
+Setting any of these flags affects all connections.
<UL>
<LI><A NAME="SMFIP_NOCONNECT"><CODE>SMFIP_NOCONNECT</CODE></A>:
<A HREF="xxfi_connect.html">xxfi_connect()</A>
<LI><A NAME="SMFIP_NOHELO"><CODE>SMFIP_NOHELO</CODE></A>:
-<A HREF="xxfi_header.html">xxfi_header()</A>
+<A HREF="xxfi_helo.html">xxfi_helo()</A>
<LI><A NAME="SMFIP_NOMAIL"><CODE>SMFIP_NOMAIL</CODE></A>:
<A HREF="xxfi_envfrom.html">xxfi_envfrom()</A>
<LI><A NAME="SMFIP_NORCPT"><CODE>SMFIP_NORCPT</CODE></A>:
diff --git a/contrib/sendmail/libmilter/docs/xxfi_unknown.html b/contrib/sendmail/libmilter/docs/xxfi_unknown.html
index 38c1c3d47166..94e4f39d9592 100644
--- a/contrib/sendmail/libmilter/docs/xxfi_unknown.html
+++ b/contrib/sendmail/libmilter/docs/xxfi_unknown.html
@@ -25,13 +25,14 @@ Handle unknown and unimplemented SMTP commands.
<TR align="left" valign=top>
<TH width="80">Called When</TH>
<TD>xxfi_unknown is called when the client uses an SMTP command
-that is either unknown or not implemented by the MTA.
+that is either unknown or not implemented by the MTA.</TD>
</TR>
<TR align="left" valign=top>
<TH>Default Behavior</TH>
<TD>Do nothing; return SMFIS_CONTINUE.</TD>
</TR>
</TABLE>
+</TD></TR>
<!----------- Arguments ---------->
<TR><TH valign="top" align=left>ARGUMENTS</TH><TD>
@@ -62,13 +63,13 @@ that is either unknown or not implemented by the MTA.
</TD>
</TR>
</TABLE>
-</TR>
+</TD></TR>
<!----------- Notes ---------->
<TR>
-<TH valign="top" align=left>NOTES</TH>
+<TH valign="top" align=left>NOTES</TH>
<TD>The SMTP command will always be rejected by the server,
-it is only possible to return a different error code.
+it is only possible to return a different error code.</TD>
</TR>
</TABLE>
diff --git a/contrib/sendmail/libmilter/engine.c b/contrib/sendmail/libmilter/engine.c
index 808ffdbf608a..2619395a6eb1 100644
--- a/contrib/sendmail/libmilter/engine.c
+++ b/contrib/sendmail/libmilter/engine.c
@@ -15,7 +15,7 @@ SM_RCSID("@(#)$Id: engine.c,v 8.168 2013-11-22 20:51:36 ca Exp $")
#if NETINET || NETINET6
# include <arpa/inet.h>
-#endif /* NETINET || NETINET6 */
+#endif
/* generic argument for functions in the command table */
struct arg_struct
@@ -72,17 +72,17 @@ ERROR: do not compile with CI_LAST < CI_EOM
#if CI_LAST < CI_EOH
ERROR: do not compile with CI_LAST < CI_EOH
#endif
-#if CI_LAST < CI_ENVRCPT
-ERROR: do not compile with CI_LAST < CI_ENVRCPT
+#if CI_LAST < CI_RCPT
+ERROR: do not compile with CI_LAST < CI_RCPT
#endif
-#if CI_LAST < CI_ENVFROM
-ERROR: do not compile with CI_LAST < CI_ENVFROM
+#if CI_LAST < CI_MAIL
+ERROR: do not compile with CI_LAST < CI_MAIL
#endif
#if CI_LAST < CI_HELO
ERROR: do not compile with CI_LAST < CI_HELO
#endif
-#if CI_LAST < CI_CONNECT
-ERROR: do not compile with CI_LAST < CI_CONNECT
+#if CI_LAST < CI_CONN
+ERROR: do not compile with CI_LAST < CI_CONN
#endif
#if CI_LAST >= MAX_MACROS_ENTRIES
ERROR: do not compile with CI_LAST >= MAX_MACROS_ENTRIES
@@ -112,7 +112,7 @@ static void mi_clr_symlist __P((SMFICTX_PTR));
#if _FFR_WORKERS_POOL
static bool mi_rd_socket_ready __P((int));
-#endif /* _FFR_WORKERS_POOL */
+#endif
/* states */
#define ST_NONE (-1)
@@ -458,7 +458,7 @@ mi_engine(ctx)
if (ctx->ctx_state != ST_QUIT
#if _FFR_WORKERS_POOL
&& ret != MI_CONTINUE
-#endif /* _FFR_WORKERS_POOL */
+#endif
)
{
if ((fi_close = ctx->ctx_smfi->xxfi_close) != NULL)
@@ -468,7 +468,7 @@ mi_engine(ctx)
free(buf);
#if !_FFR_WORKERS_POOL
mi_clr_macros(ctx, 0);
-#endif /* _FFR_WORKERS_POOL */
+#endif
return ret;
}
@@ -628,7 +628,7 @@ sendreply(r, sd, timeout_ptr, ctx)
{
/* milter said it wouldn't reply, but it lied... */
smi_log(SMI_LOG_ERR,
- "%s: milter claimed not to reply in state %d but did anyway %d\n",
+ "%s: milter claimed not to reply in state %d but did anyway %d",
ctx->ctx_smfi->xxfi_name,
ctx->ctx_state, r);
@@ -703,8 +703,12 @@ sendreply(r, sd, timeout_ptr, ctx)
(void *) &v, MILTER_LEN_BYTES);
len = milter_addsymlist(ctx, buf, &buffer);
if (buffer != NULL)
+ {
ret = mi_wr_cmd(sd, timeout_ptr, SMFIC_OPTNEG,
buffer, len);
+ if (buffer != buf)
+ free(buffer);
+ }
else
ret = MI_FAILURE;
}
@@ -843,7 +847,7 @@ st_optionneg(g)
SMFICTX_PTR ctx;
#if _FFR_MILTER_CHECK
bool testmode = false;
-#endif /* _FFR_MILTER_CHECK */
+#endif
int (*fi_negotiate) __P((SMFICTX *,
unsigned long, unsigned long,
unsigned long, unsigned long,
@@ -1000,7 +1004,7 @@ st_optionneg(g)
testmode = bitset(SMFIP_TEST, m_pflags);
if (testmode)
m_pflags &= ~SMFIP_TEST;
-#endif /* _FFR_MILTER_CHECK */
+#endif
/*
** Types of protocol flags (pflags):
@@ -1100,7 +1104,7 @@ st_optionneg(g)
{
/*
** Older MTAs do not support some protocol steps.
- ** As this protocol is a bit "wierd" (it asks for steps
+ ** As this protocol is a bit "weird" (it asks for steps
** NOT to be taken/sent) we have to check whether we
** should turn off those "negative" requests.
** Currently these are only SMFIP_NODATA and SMFIP_NOUNKNOWN.
@@ -1186,7 +1190,7 @@ st_connectinfo(g)
s = g->a_buf;
i = 0;
l = g->a_len;
- while (s[i] != '\0' && i <= l)
+ while (i <= l && s[i] != '\0')
++i;
if (i + 1 >= l)
return _SMFIS_ABORT;
@@ -1868,9 +1872,9 @@ mi_rd_socket_ready (sd)
int nerr = 0;
#if SM_CONF_POLL
struct pollfd pfd;
-#else /* SM_CONF_POLL */
+#else
fd_set rd_set, exc_set;
-#endif /* SM_CONF_POLL */
+#endif
do
{
@@ -1912,8 +1916,8 @@ mi_rd_socket_ready (sd)
#if SM_CONF_POLL
return (pfd.revents != 0);
-#else /* SM_CONF_POLL */
+#else
return FD_ISSET(sd, &rd_set) || FD_ISSET(sd, &exc_set);
-#endif /* SM_CONF_POLL */
+#endif
}
#endif /* _FFR_WORKERS_POOL */
diff --git a/contrib/sendmail/libmilter/example.c b/contrib/sendmail/libmilter/example.c
index f078eb7ba304..e0fef80b6d4e 100644
--- a/contrib/sendmail/libmilter/example.c
+++ b/contrib/sendmail/libmilter/example.c
@@ -28,7 +28,7 @@
#ifndef true
# define false 0
# define true 1
-#endif /* ! true */
+#endif
struct mlfiPriv
{
diff --git a/contrib/sendmail/libmilter/handler.c b/contrib/sendmail/libmilter/handler.c
index 7622839d65e4..17ee7f8dac0a 100644
--- a/contrib/sendmail/libmilter/handler.c
+++ b/contrib/sendmail/libmilter/handler.c
@@ -35,7 +35,7 @@ mi_handle_session(ctx)
ctx->ctx_id = (sthread_t) sthread_get_id();
/*
- ** Detach so resources are free when the thread returns.
+ ** Detach so resources are freed when the thread returns.
** If we ever "wait" for threads, this call must be removed.
*/
diff --git a/contrib/sendmail/libmilter/libmilter.h b/contrib/sendmail/libmilter/libmilter.h
index 3c572ec9a9e8..f9fe38ca4a9f 100644
--- a/contrib/sendmail/libmilter/libmilter.h
+++ b/contrib/sendmail/libmilter/libmilter.h
@@ -20,10 +20,10 @@
# define EXTERN
# define INIT(x) = x
SM_IDSTR(MilterlId, "@(#)$Id: libmilter.h,v 8.78 2013-11-22 20:51:36 ca Exp $")
-#else /* _DEFINE */
+#else
# define EXTERN extern
# define INIT(x)
-#endif /* _DEFINE */
+#endif
#include "sm/tailq.h"
@@ -111,7 +111,7 @@ struct smfi_str
#if _FFR_THREAD_MONITOR
time_t ctx_start; /* start time of thread */
SM_TAILQ_ENTRY(smfi_str) ctx_mon_link;
-#endif /* _FFR_THREAD_MONITOR */
+#endif
#if _FFR_WORKERS_POOL
long ctx_sid; /* session identifier */
@@ -142,7 +142,7 @@ typedef pthread_mutex_t smutex_t;
/* SM_CONF_POLL shall be defined with _FFR_WORKERS_POOL */
# if !SM_CONF_POLL
# define SM_CONF_POLL 1
-# endif /* SM_CONF_POLL */
+# endif
#endif /* _FFR_WORKERS_POOL */
typedef pthread_cond_t scond_t;
@@ -173,7 +173,7 @@ typedef pthread_cond_t scond_t;
# define MI_POLL_RD_FLAGS (POLLIN | POLLPRI)
# define MI_POLL_WR_FLAGS (POLLOUT)
-# define MI_MS(timeout) (((timeout)->tv_sec * 1000) + (timeout)->tv_usec)
+# define MI_MS(timeout) (((timeout)->tv_sec * 1000) + (((timeout)->tv_usec) / 1000))
# define FD_RD_VAR(rds, excs) struct pollfd rds
# define FD_WR_VAR(wrs) struct pollfd wrs
@@ -197,7 +197,7 @@ typedef pthread_cond_t scond_t;
# define FD_IS_RD_RDY(sd, rds, excs) \
(((rds).revents & MI_POLL_RD_FLAGS) != 0)
-# define FD_WR_READY(sd, excs, timeout) \
+# define FD_WR_READY(sd, wrs, timeout) \
poll(&(wrs), 1, MI_MS(timeout))
# define FD_RD_READY(sd, rds, excs, timeout) \
@@ -241,9 +241,9 @@ typedef pthread_cond_t scond_t;
#ifndef MI_SOMAXCONN
# if SOMAXCONN > 20
# define MI_SOMAXCONN SOMAXCONN
-# else /* SOMAXCONN */
+# else
# define MI_SOMAXCONN 20
-# endif /* SOMAXCONN */
+# endif
#endif /* ! MI_SOMAXCONN */
/* maximum number of repeated failures in mi_listener() */
diff --git a/contrib/sendmail/libmilter/listener.c b/contrib/sendmail/libmilter/listener.c
index 11d92bb09fdf..0468a6231cce 100644
--- a/contrib/sendmail/libmilter/listener.c
+++ b/contrib/sendmail/libmilter/listener.c
@@ -24,11 +24,11 @@ SM_RCSID("@(#)$Id: listener.c,v 8.127 2013-11-22 20:51:36 ca Exp $")
# if NETINET || NETINET6
# include <arpa/inet.h>
-# endif /* NETINET || NETINET6 */
+# endif
# if SM_CONF_POLL
# undef SM_FD_OK_SELECT
# define SM_FD_OK_SELECT(fd) true
-# endif /* SM_CONF_POLL */
+# endif
static smutex_t L_Mutex;
static int L_family;
@@ -38,7 +38,7 @@ static socket_t listenfd = INVALID_SOCKET;
static socket_t mi_milteropen __P((char *, int, bool, char *));
#if !_FFR_WORKERS_POOL
static void *mi_thread_handle_wrapper __P((void *));
-#endif /* !_FFR_WORKERS_POOL */
+#endif
/*
** MI_OPENSOCKET -- create the socket where this filter and the MTA will meet
@@ -116,7 +116,7 @@ mi_opensocket(conn, backlog, dbg, rmsocket, smfi)
#if NETUNIX
static char *sockpath = NULL;
-#endif /* NETUNIX */
+#endif
static socket_t
mi_milteropen(conn, backlog, rmsocket, name)
@@ -269,13 +269,13 @@ mi_milteropen(conn, backlog, rmsocket, name)
if (
# if NETINET
addr.sa.sa_family == AF_INET
-# endif /* NETINET */
+# endif
# if NETINET && NETINET6
||
-# endif /* NETINET && NETINET6 */
+# endif
# if NETINET6
addr.sa.sa_family == AF_INET6
-# endif /* NETINET6 */
+# endif
)
{
unsigned short port;
@@ -290,13 +290,13 @@ mi_milteropen(conn, backlog, rmsocket, name)
case AF_INET:
addr.sin.sin_addr.s_addr = INADDR_ANY;
break;
-# endif /* NETINET */
+# endif
# if NETINET6
case AF_INET6:
addr.sin6.sin6_addr = in6addr_any;
break;
-# endif /* NETINET6 */
+# endif
}
}
else
@@ -337,10 +337,10 @@ mi_milteropen(conn, backlog, rmsocket, name)
bool found = false;
# if NETINET
unsigned long hid = INADDR_NONE;
-# endif /* NETINET */
+# endif
# if NETINET6
struct sockaddr_in6 hid6;
-# endif /* NETINET6 */
+# endif
*end = '\0';
# if NETINET
@@ -421,7 +421,7 @@ mi_milteropen(conn, backlog, rmsocket, name)
}
# if NETINET6
freehostent(hp);
-# endif /* NETINET6 */
+# endif
}
}
else
@@ -432,12 +432,12 @@ mi_milteropen(conn, backlog, rmsocket, name)
case AF_INET:
addr.sin.sin_port = port;
break;
-# endif /* NETINET */
+# endif
# if NETINET6
case AF_INET6:
addr.sin6.sin6_port = port;
break;
-# endif /* NETINET6 */
+# endif
}
}
}
@@ -465,7 +465,7 @@ mi_milteropen(conn, backlog, rmsocket, name)
if (
#if NETUNIX
addr.sa.sa_family != AF_UNIX &&
-#endif /* NETUNIX */
+#endif
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &sockopt,
sizeof(sockopt)) == -1)
{
@@ -607,7 +607,7 @@ mi_closener()
(S_ISFIFO(sockinfo.st_mode)
# ifdef S_ISSOCK
|| S_ISSOCK(sockinfo.st_mode)
-# endif /* S_ISSOCK */
+# endif
);
#endif /* NETUNIX */
@@ -624,13 +624,13 @@ mi_closener()
fileinfo.st_ino == sockinfo.st_ino)
# ifdef S_ISSOCK
|| S_ISSOCK(fileinfo.st_mode)
-# endif /* S_ISSOCK */
+# endif
)
&&
(S_ISFIFO(fileinfo.st_mode)
# ifdef S_ISSOCK
|| S_ISSOCK(fileinfo.st_mode)
-# endif /* S_ISSOCK */
+# endif
))
(void) unlink(sockpath);
free(sockpath);
@@ -719,7 +719,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
socket_t connfd = INVALID_SOCKET;
#if _FFR_DUP_FD
socket_t dupfd = INVALID_SOCKET;
-#endif /* _FFR_DUP_FD */
+#endif
int sockopt = 1;
int r, mistop;
int ret = MI_SUCCESS;
@@ -731,7 +731,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
int fdflags;
#if !_FFR_WORKERS_POOL
sthread_t thread_id;
-#endif /* !_FFR_WORKERS_POOL */
+#endif
_SOCK_ADDR cliaddr;
SOCKADDR_LEN_T clilen;
SMFICTX_PTR ctx;
@@ -744,7 +744,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
#if _FFR_WORKERS_POOL
if (mi_pool_controller_init() == MI_FAILURE)
return MI_FAILURE;
-#endif /* _FFR_WORKERS_POOL */
+#endif
clilen = L_socksize;
while ((mistop = mi_stop()) == MILTER_CONT)
@@ -817,7 +817,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
(clilen == 0 ||
# ifdef BSD4_4_SOCKADDR
cliaddr.sa.sa_len == 0 ||
-# endif /* BSD4_4_SOCKADDR */
+# endif
cliaddr.sa.sa_family != L_family))
{
(void) closesocket(connfd);
@@ -838,28 +838,28 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
if (save_errno == EINTR
#ifdef EAGAIN
|| save_errno == EAGAIN
-#endif /* EAGAIN */
+#endif
#ifdef ECONNABORTED
|| save_errno == ECONNABORTED
-#endif /* ECONNABORTED */
+#endif
#ifdef EMFILE
|| save_errno == EMFILE
-#endif /* EMFILE */
+#endif
#ifdef ENFILE
|| save_errno == ENFILE
-#endif /* ENFILE */
+#endif
#ifdef ENOBUFS
|| save_errno == ENOBUFS
-#endif /* ENOBUFS */
+#endif
#ifdef ENOMEM
|| save_errno == ENOMEM
-#endif /* ENOMEM */
+#endif
#ifdef ENOSR
|| save_errno == ENOSR
-#endif /* ENOSR */
+#endif
#ifdef EWOULDBLOCK
|| save_errno == EWOULDBLOCK
-#endif /* EWOULDBLOCK */
+#endif
)
continue;
acnt++;
@@ -886,7 +886,7 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
}
#endif /* _FFR_DUP_FD */
- /*
+ /*
** Need to set close-on-exec for connfd in case a user's
** filter starts other applications.
** Note: errors will not stop processing (for now).
@@ -951,12 +951,12 @@ mi_listener(conn, dbg, smfi, timeout, backlog)
#if _FFR_WORKERS_POOL
# define LOG_CRT_FAIL "%s: mi_start_session() failed: %d, %s"
if ((r = mi_start_session(ctx)) != MI_SUCCESS)
-#else /* _FFR_WORKERS_POOL */
+#else
# define LOG_CRT_FAIL "%s: thread_create() failed: %d, %s"
if ((r = thread_create(&thread_id,
mi_thread_handle_wrapper,
(void *) ctx)) != 0)
-#endif /* _FFR_WORKERS_POOL */
+#endif
{
tcnt++;
smi_log(SMI_LOG_ERR,
diff --git a/contrib/sendmail/libmilter/main.c b/contrib/sendmail/libmilter/main.c
index ef3242feff05..ff7bf99bcc82 100644
--- a/contrib/sendmail/libmilter/main.c
+++ b/contrib/sendmail/libmilter/main.c
@@ -206,7 +206,7 @@ smfi_setbacklog(obacklog)
/*
-** SMFI_MAIN -- setup milter connnection and start listener.
+** SMFI_MAIN -- setup milter connection and start listener.
**
** Parameters:
** none.
diff --git a/contrib/sendmail/libmilter/monitor.c b/contrib/sendmail/libmilter/monitor.c
index 9916bb59598d..ec08e53d0b2e 100644
--- a/contrib/sendmail/libmilter/monitor.c
+++ b/contrib/sendmail/libmilter/monitor.c
@@ -39,7 +39,7 @@ static scond_t Mon_cv;
** after a mutex_lock() attempt, the order might not be strict,
** i.e., if the list contains e1 and e2 (in that order) then
** the the start time of e2 can be (slightly) smaller than that of e1.
-** However, this slight inaccurracy should not matter for the proper
+** However, this slight inaccuracy should not matter for the proper
** working of this algorithm.
*/
diff --git a/contrib/sendmail/libmilter/sm_gethost.c b/contrib/sendmail/libmilter/sm_gethost.c
index 2423c34419c1..262edb6c541c 100644
--- a/contrib/sendmail/libmilter/sm_gethost.c
+++ b/contrib/sendmail/libmilter/sm_gethost.c
@@ -14,13 +14,13 @@ SM_RCSID("@(#)$Id: sm_gethost.c,v 8.32 2013-11-22 20:51:36 ca Exp $")
#include <sendmail.h>
#if NETINET || NETINET6
# include <arpa/inet.h>
-#endif /* NETINET || NETINET6 */
+#endif
#include "libmilter.h"
/*
** MI_GETHOSTBY{NAME,ADDR} -- compatibility routines for gethostbyXXX
**
-** Some operating systems have wierd problems with the gethostbyXXX
+** Some operating systems have weird problems with the gethostbyXXX
** routines. For example, Solaris versions at least through 2.3
** don't properly deliver a canonical h_name field. This tries to
** work around these problems.
@@ -34,13 +34,13 @@ static struct hostent *sm_getipnodebyname __P((const char *, int, int, int *));
# ifndef AI_ADDRCONFIG
# define AI_ADDRCONFIG 0 /* dummy */
-# endif /* ! AI_ADDRCONFIG */
+# endif
# ifndef AI_ALL
# define AI_ALL 0 /* dummy */
-# endif /* ! AI_ALL */
+# endif
# ifndef AI_DEFAULT
# define AI_DEFAULT 0 /* dummy */
-# endif /* ! AI_DEFAULT */
+# endif
static struct hostent *
sm_getipnodebyname(name, family, flags, err)
@@ -49,8 +49,17 @@ sm_getipnodebyname(name, family, flags, err)
int flags;
int *err;
{
- bool resv6 = true;
struct hostent *h;
+# if HAS_GETHOSTBYNAME2
+
+ h = gethostbyname2(name, family);
+ if (h == NULL)
+ *err = h_errno;
+ return h;
+
+# else /* HAS_GETHOSTBYNAME2 */
+# ifdef RES_USE_INET6
+ bool resv6 = true;
if (family == AF_INET6)
{
@@ -58,23 +67,27 @@ sm_getipnodebyname(name, family, flags, err)
resv6 = bitset(RES_USE_INET6, _res.options);
_res.options |= RES_USE_INET6;
}
+# endif /* RES_USE_INET6 */
SM_SET_H_ERRNO(0);
h = gethostbyname(name);
- if (family == AF_INET6 && !resv6)
+# ifdef RES_USE_INET6
+ if (!resv6)
_res.options &= ~RES_USE_INET6;
+# endif
/* the function is supposed to return only the requested family */
if (h != NULL && h->h_addrtype != family)
{
-# if NETINET6
+# if NETINET6
freehostent(h);
-# endif /* NETINET6 */
+# endif
h = NULL;
*err = NO_DATA;
}
else
*err = h_errno;
return h;
+# endif /* HAS_GETHOSTBYNAME2 */
}
void
@@ -89,7 +102,7 @@ freehostent(h)
return;
}
#else /* NEEDSGETIPNODE && NETINET6 */
-#define sm_getipnodebyname getipnodebyname
+#define sm_getipnodebyname getipnodebyname
#endif /* NEEDSGETIPNODE && NETINET6 */
struct hostent *
@@ -115,7 +128,7 @@ mi_gethostbyname(name, family)
# ifndef SM_IPNODEBYNAME_FLAGS
/* For IPv4-mapped addresses, use: AI_DEFAULT|AI_ALL */
# define SM_IPNODEBYNAME_FLAGS AI_ADDRCONFIG
-# endif /* SM_IPNODEBYNAME_FLAGS */
+# endif
int flags = SM_IPNODEBYNAME_FLAGS;
int err;
@@ -124,7 +137,7 @@ mi_gethostbyname(name, family)
# if NETINET6
# if ADDRCONFIG_IS_BROKEN
flags &= ~AI_ADDRCONFIG;
-# endif /* ADDRCONFIG_IS_BROKEN */
+# endif
h = sm_getipnodebyname(name, family, flags, &err);
SM_SET_H_ERRNO(err);
# else /* NETINET6 */
@@ -138,7 +151,7 @@ mi_gethostbyname(name, family)
{
# if NETINET6
freehostent(h);
-# endif /* NETINET6 */
+# endif
h = NULL;
SM_SET_H_ERRNO(NO_DATA);
}
@@ -158,7 +171,7 @@ mi_gethostbyname(name, family)
**
** Returns:
** 1 if the address was valid
-** 0 if the address wasn't parseable
+** 0 if the address wasn't parsable
** -1 if error
*/
diff --git a/contrib/sendmail/libmilter/smfi.c b/contrib/sendmail/libmilter/smfi.c
index d6c63a2ce800..a0fcd1184e46 100644
--- a/contrib/sendmail/libmilter/smfi.c
+++ b/contrib/sendmail/libmilter/smfi.c
@@ -103,7 +103,7 @@ smfi_addheader(ctx, headerf, headerv)
**
** Parameters:
** ctx -- Opaque context structure
-** hdridx -- index into header list where insertion should occur
+** hdridx -- index into header list where insertion should occur
** headerf -- Header field name
** headerv -- Header field value
**
@@ -267,7 +267,6 @@ send2(ctx, cmd, arg0, arg1)
if (arg1 != NULL)
{
- l1 = strlen(arg1) + 1;
SM_ASSERT(offset < len);
SM_ASSERT(offset + l1 <= len);
(void) memcpy(buf + offset, arg1, l1);
diff --git a/contrib/sendmail/libmilter/worker.c b/contrib/sendmail/libmilter/worker.c
index bf7086a95187..74bf98a39435 100644
--- a/contrib/sendmail/libmilter/worker.c
+++ b/contrib/sendmail/libmilter/worker.c
@@ -56,7 +56,7 @@ static taskmgr_T Tskmgr = {0};
#ifndef USE_PIPE_WAKE_POLL
# define USE_PIPE_WAKE_POLL 1
-#endif /* USE_PIPE_WAKE_POLL */
+#endif
/* poll check periodicity (default 10000 - 10 s) */
#define POLL_TIMEOUT 10000
@@ -83,7 +83,7 @@ static int mi_list_del_ctx __P((SMFICTX_PTR));
#ifndef OLD_SESSION_TIMEOUT
# define OLD_SESSION_TIMEOUT ctx->ctx_timeout
-#endif /* OLD_SESSION_TIMEOUT */
+#endif
/* session states - with respect to the pool of workers */
#define WKST_INIT 0 /* initial state */
@@ -143,7 +143,7 @@ static int mi_list_del_ctx __P((SMFICTX_PTR));
# define POOL_LEV_DPRINTF(lev, x) \
do \
{ \
- if ((lev) < ctx->ctx_dbg) \
+ if (ctx != NULL && (lev) < ctx->ctx_dbg) \
sm_dprintf x; \
} while (0)
#else /* POOL_DEBUG */
@@ -381,8 +381,6 @@ mi_pool_controller(arg)
int nfd, r, i;
time_t now;
- POOL_LEV_DPRINTF(4, ("Let's %s again...", WAITFN));
-
if (mi_stop() != MILTER_CONT)
break;
diff --git a/contrib/sendmail/libsm/Makefile b/contrib/sendmail/libsm/Makefile
index e4b9871f98cd..4f43b9294576 100644
--- a/contrib/sendmail/libsm/Makefile
+++ b/contrib/sendmail/libsm/Makefile
@@ -8,10 +8,10 @@ all: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
clean: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
-install: FRC
- $(SHELL) $(BUILD) $(OPTIONS) $@
check: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
+install: FRC
+ $(SHELL) $(BUILD) $(OPTIONS) $@
fresh: FRC
$(SHELL) $(BUILD) $(OPTIONS) -c
diff --git a/contrib/sendmail/libsm/Makefile.m4 b/contrib/sendmail/libsm/Makefile.m4
index 5882bb63f4e6..0dcb2d02b68d 100644
--- a/contrib/sendmail/libsm/Makefile.m4
+++ b/contrib/sendmail/libsm/Makefile.m4
@@ -6,7 +6,7 @@ define(`confREQUIRE_LIBSM', `true')
define(`confREQUIRE_SM_OS_H', `true')
PREPENDDEF(`confENVDEF', `confMAPDEF')
bldPRODUCT_START(`library', `libsm')
-define(`bldSOURCES', ` assert.c debug.c errstring.c exc.c heap.c match.c rpool.c strdup.c strerror.c strl.c clrerr.c fclose.c feof.c ferror.c fflush.c fget.c fpos.c findfp.c flags.c fopen.c fprintf.c fpurge.c fput.c fread.c fscanf.c fseek.c fvwrite.c fwalk.c fwrite.c get.c makebuf.c put.c refill.c rewind.c setvbuf.c smstdio.c snprintf.c sscanf.c stdio.c strio.c ungetc.c vasprintf.c vfprintf.c vfscanf.c vprintf.c vsnprintf.c wbuf.c wsetup.c string.c stringf.c xtrap.c strto.c test.c strcasecmp.c strrevcmp.c signal.c clock.c config.c shm.c sem.c mbdb.c strexit.c cf.c ldap.c niprop.c mpeix.c memstat.c util.c inet6_ntop.c ')
+define(`bldSOURCES', ` assert.c debug.c errstring.c exc.c heap.c match.c rpool.c strdup.c strerror.c strl.c clrerr.c fclose.c feof.c ferror.c fflush.c fget.c fpos.c findfp.c flags.c fopen.c fprintf.c fpurge.c fput.c fread.c fscanf.c fseek.c fvwrite.c fwalk.c fwrite.c get.c makebuf.c put.c refill.c rewind.c setvbuf.c smstdio.c snprintf.c sscanf.c stdio.c strio.c ungetc.c vasprintf.c vfprintf.c vfscanf.c vprintf.c vsnprintf.c wbuf.c wsetup.c string.c stringf.c xtrap.c strto.c test.c strcasecmp.c strrevcmp.c signal.c clock.c config.c shm.c sem.c mbdb.c strexit.c cf.c ldap.c niprop.c mpeix.c memstat.c util.c inet6_ntop.c notify.c ')
bldPRODUCT_END
dnl msg.c
dnl syslogio.c
@@ -32,6 +32,7 @@ smcheck(`t-scanf', `compile-run')
smcheck(`t-shm', `compile-run')
smcheck(`t-sem', `compile-run')
smcheck(`t-inet6_ntop', `compile-run')
+smcheck(`t-notify', `compile-run')
dnl smcheck(`t-msg', `compile-run')
smcheck(`t-cf')
smcheck(`b-strcmp')
diff --git a/contrib/sendmail/libsm/assert.c b/contrib/sendmail/libsm/assert.c
index 6393e9eca419..e77720109028 100644
--- a/contrib/sendmail/libsm/assert.c
+++ b/contrib/sendmail/libsm/assert.c
@@ -83,7 +83,7 @@ sm_abort_defaulthandler(filename, lineno, msg)
#ifdef SIGSTOP
if (sm_debug_active(&SmAbortStop, 1))
kill(getpid(), SIGSTOP);
-#endif /* SIGSTOP */
+#endif
abort();
}
diff --git a/contrib/sendmail/libsm/clock.c b/contrib/sendmail/libsm/clock.c
index 5e4d7598dba8..6e300b0a5ca4 100644
--- a/contrib/sendmail/libsm/clock.c
+++ b/contrib/sendmail/libsm/clock.c
@@ -18,7 +18,7 @@ SM_RCSID("@(#)$Id: clock.c,v 1.48 2013-11-22 20:51:42 ca Exp $")
#include <errno.h>
#if SM_CONF_SETITIMER
# include <sm/time.h>
-#endif /* SM_CONF_SETITIMER */
+#endif
#include <sm/heap.h>
#include <sm/debug.h>
#include <sm/bitops.h>
@@ -26,14 +26,14 @@ SM_RCSID("@(#)$Id: clock.c,v 1.48 2013-11-22 20:51:42 ca Exp $")
#include "local.h"
#if _FFR_SLEEP_USE_SELECT > 0
# include <sys/types.h>
-#endif /* _FFR_SLEEP_USE_SELECT > 0 */
+#endif
#if defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2
# include <syslog.h>
-#endif /* defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2 */
+#endif
#ifndef sigmask
# define sigmask(s) (1 << ((s) - 1))
-#endif /* ! sigmask */
+#endif
/*
@@ -94,9 +94,9 @@ sm_sigsafe_seteventm(intvl, func, arg)
#if SM_CONF_SETITIMER
auto struct timeval now, nowi, ival;
auto struct itimerval itime;
-#else /* SM_CONF_SETITIMER */
+#else
auto time_t now, nowi;
-#endif /* SM_CONF_SETITIMER */
+#endif
int wasblocked;
/* negative times are not allowed */
@@ -122,9 +122,9 @@ sm_sigsafe_seteventm(intvl, func, arg)
{
#if SM_CONF_SETITIMER
if (timercmp(&(ev->ev_time), &nowi, >=))
-#else /* SM_CONF_SETITIMER */
+#else
if (ev->ev_time >= nowi)
-#endif /* SM_CONF_SETITIMER */
+#endif
break;
}
@@ -200,7 +200,7 @@ sm_clrevent(ev)
int wasblocked;
# if SM_CONF_SETITIMER
struct itimerval clr;
-# endif /* SM_CONF_SETITIMER */
+# endif
if (ev == NULL)
return;
@@ -260,7 +260,7 @@ sm_clear_events()
register SM_EVENT *ev;
#if SM_CONF_SETITIMER
struct itimerval clr;
-#endif /* SM_CONF_SETITIMER */
+#endif
int wasblocked;
/* nothing will be left in event queue, no need for an alarm */
@@ -325,7 +325,7 @@ sm_tick(sig)
#if SM_CONF_SETITIMER
struct itimerval clr;
struct timeval now;
-#else /* SM_CONF_SETITIMER */
+#else
register time_t now;
#endif /* SM_CONF_SETITIMER */
@@ -382,16 +382,16 @@ sm_tick(sig)
#if SM_CONF_SETITIMER
gettimeofday(&now, NULL);
-#else /* SM_CONF_SETITIMER */
+#else
now = time(NULL);
-#endif /* SM_CONF_SETITIMER */
+#endif
while ((ev = SmEventQueue) != NULL &&
(ev->ev_pid != mypid ||
#if SM_CONF_SETITIMER
timercmp(&ev->ev_time, &now, <=)
-#else /* SM_CONF_SETITIMER */
+#else
ev->ev_time <= now
-#endif /* SM_CONF_SETITIMER */
+#endif
))
{
void (*f)__P((int));
@@ -499,11 +499,11 @@ sm_tick(sig)
# if !HAVE_NANOSLEEP
static void sm_endsleep __P((int));
static bool volatile SmSleepDone;
-# endif /* !HAVE_NANOSLEEP */
+# endif
#ifndef SLEEP_T
# define SLEEP_T unsigned int
-#endif /* ! SLEEP_T */
+#endif
SLEEP_T
sleep(intvl)
@@ -525,13 +525,13 @@ sleep(intvl)
int r;
# if _FFR_SLEEP_USE_SELECT > 0
struct timeval sm_io_to;
-# endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# endif
#endif /* _FFR_SLEEP_USE_SELECT > 0 */
#if SM_CONF_SETITIMER
struct timeval now, begin, diff;
# if _FFR_SLEEP_USE_SELECT > 0
struct timeval slpv;
-# endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# endif
#else /* SM_CONF_SETITIMER */
time_t begin, now;
#endif /* SM_CONF_SETITIMER */
@@ -545,7 +545,7 @@ sleep(intvl)
intvl, _FFR_MAX_SLEEP_TIME);
# if 0
SM_ASSERT(intvl < (unsigned int) INT_MAX);
-# endif /* 0 */
+# endif
intvl = _FFR_MAX_SLEEP_TIME;
}
#endif /* defined(_FFR_MAX_SLEEP_TIME) && _FFR_MAX_SLEEP_TIME > 2 */
@@ -555,7 +555,7 @@ sleep(intvl)
# if _FFR_SLEEP_USE_SELECT > 0
slpv.tv_sec = intvl;
slpv.tv_usec = 0;
-# endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# endif
(void) gettimeofday(&now, NULL);
begin = now;
#else /* SM_CONF_SETITIMER */
@@ -568,7 +568,7 @@ sleep(intvl)
/* COMPLAIN */
#if 0
syslog(LOG_ERR, "sleep: sm_setevent(%u) failed", intvl);
-#endif /* 0 */
+#endif
SmSleepDone = true;
}
was_held = sm_releasesignal(SIGALRM);
@@ -583,7 +583,7 @@ sleep(intvl)
break;
# if _FFR_SLEEP_USE_SELECT > 0
timersub(&slpv, &diff, &sm_io_to);
-# endif /* _FFR_SLEEP_USE_SELECT > 0 */
+# endif
#else /* SM_CONF_SETITIMER */
now = time(NULL);
diff --git a/contrib/sendmail/libsm/config.c b/contrib/sendmail/libsm/config.c
index b8f77d9bbe55..b96a4a0c8aba 100644
--- a/contrib/sendmail/libsm/config.c
+++ b/contrib/sendmail/libsm/config.c
@@ -172,89 +172,89 @@ char *SmCompileOptions[] =
{
#if SM_CONF_BROKEN_STRTOD
"SM_CONF_BROKEN_STRTOD",
-#endif /* SM_CONF_BROKEN_STRTOD */
+#endif
#if SM_CONF_GETOPT
"SM_CONF_GETOPT",
-#endif /* SM_CONF_GETOPT */
+#endif
#if SM_CONF_LDAP_INITIALIZE
"SM_CONF_LDAP_INITIALIZE",
-#endif /* SM_CONF_LDAP_INITIALIZE */
+#endif
#if SM_CONF_LDAP_MEMFREE
"SM_CONF_LDAP_MEMFREE",
-#endif /* SM_CONF_LDAP_MEMFREE */
+#endif
#if SM_CONF_LONGLONG
"SM_CONF_LONGLONG",
-#endif /* SM_CONF_LONGLONG */
+#endif
#if SM_CONF_MEMCHR
"SM_CONF_MEMCHR",
-#endif /* SM_CONF_MEMCHR */
+#endif
#if SM_CONF_MSG
"SM_CONF_MSG",
-#endif /* SM_CONF_MSG */
+#endif
#if SM_CONF_QUAD_T
"SM_CONF_QUAD_T",
-#endif /* SM_CONF_QUAD_T */
+#endif
#if SM_CONF_SEM
"SM_CONF_SEM",
-#endif /* SM_CONF_SEM */
+#endif
#if SM_CONF_SETITIMER
"SM_CONF_SETITIMER",
-#endif /* SM_CONF_SETITIMER */
+#endif
#if SM_CONF_SIGSETJMP
"SM_CONF_SIGSETJMP",
-#endif /* SM_CONF_SIGSETJMP */
+#endif
#if SM_CONF_SHM
"SM_CONF_SHM",
-#endif /* SM_CONF_SHM */
+#endif
#if SM_CONF_SHM_DELAY
"SM_CONF_SHM_DELAY",
-#endif /* SM_CONF_SHM_DELAY */
+#endif
#if SM_CONF_SSIZE_T
"SM_CONF_SSIZE_T",
-#endif /* SM_CONF_SSIZE_T */
+#endif
#if SM_CONF_STDBOOL_H
"SM_CONF_STDBOOL_H",
-#endif /* SM_CONF_STDBOOL_H */
+#endif
#if SM_CONF_STDDEF_H
"SM_CONF_STDDEF_H",
-#endif /* SM_CONF_STDDEF_H */
+#endif
#if 0
/* XXX this is always enabled (for now) */
#if SM_CONF_STRL
"SM_CONF_STRL",
-#endif /* SM_CONF_STRL */
+#endif
#endif /* 0 */
#if SM_CONF_SYS_CDEFS_H
"SM_CONF_SYS_CDEFS_H",
-#endif /* SM_CONF_SYS_CDEFS_H */
+#endif
#if SM_CONF_SYSEXITS_H
"SM_CONF_SYSEXITS_H",
-#endif /* SM_CONF_SYSEXITS_H */
+#endif
#if SM_CONF_UID_GID
"SM_CONF_UID_GID",
-#endif /* SM_CONF_UID_GID */
+#endif
#if DO_NOT_USE_STRCPY
"DO_NOT_USE_STRCPY",
-#endif /* DO_NOT_USE_STRCPY */
+#endif
#if SM_HEAP_CHECK
"SM_HEAP_CHECK",
-#endif /* SM_HEAP_CHECK */
+#endif
#if defined(SM_OS_NAME) && defined(__STDC__)
"SM_OS=sm_os_" SM_OS_NAME,
-#endif /* defined(SM_OS_NAME) && defined(__STDC__) */
+#endif
#if SM_VA_STD
"SM_VA_STD",
-#endif /* SM_VA_STD */
+#endif
#if USEKSTAT
"USEKSTAT",
-#endif /* USEKSTAT */
+#endif
#if USEPROCMEMINFO
"USEPROCMEMINFO",
-#endif /* USEPROCMEMINFO */
+#endif
#if USESWAPCTL
"USESWAPCTL",
-#endif /* USESWAPCTL */
+#endif
NULL
};
diff --git a/contrib/sendmail/libsm/debug.c b/contrib/sendmail/libsm/debug.c
index 0dbc25733f14..2ebef889380e 100644
--- a/contrib/sendmail/libsm/debug.c
+++ b/contrib/sendmail/libsm/debug.c
@@ -19,6 +19,8 @@ SM_RCSID("@(#)$Id: debug.c,v 1.33 2013-11-22 20:51:42 ca Exp $")
#include <stdlib.h>
#if _FFR_DEBUG_PID_TIME
#include <unistd.h>
+#include <sm/types.h>
+#include <sm/time.h>
#include <time.h>
#endif /* _FFR_DEBUG_PID_TIME */
#include <setjmp.h>
@@ -119,7 +121,7 @@ sm_debug_close()
#if _FFR_DEBUG_PID_TIME
SM_DEBUG_T SmDBGPidTime = SM_DEBUG_INITIALIZER("sm_trace_pid_time",
"@(#)$Debug: sm_trace_pid_time - print pid and time in debug $");
-#endif /* _FFR_DEBUG_PID_TIME */
+#endif
void
#if SM_VA_STD
@@ -131,12 +133,42 @@ sm_dprintf(fmt, va_alist)
#endif /* SM_VA_STD */
{
SM_VA_LOCAL_DECL
+#if _FFR_DEBUG_PID_TIME
+ static struct timeval lasttv;
+#endif
if (SmDebugOutput == NULL)
return;
#if _FFR_DEBUG_PID_TIME
/* note: this is ugly if the output isn't a full line! */
- if (sm_debug_active(&SmDBGPidTime, 1))
+ if (sm_debug_active(&SmDBGPidTime, 3))
+ {
+ struct timeval tv, tvd;
+
+ gettimeofday(&tv, NULL);
+ if (timerisset(&lasttv))
+ timersub(&tv, &lasttv, &tvd);
+ else
+ timerclear(&tvd);
+ sm_io_fprintf(SmDebugOutput, SmDebugOutput->f_timeout,
+ "%ld: %ld.%06ld ",
+ (long) getpid(),
+ (long) tvd.tv_sec,
+ (long) tvd.tv_usec);
+ lasttv = tv;
+ }
+ else if (sm_debug_active(&SmDBGPidTime, 2))
+ {
+ struct timeval tv;
+
+ gettimeofday(&tv, NULL);
+ sm_io_fprintf(SmDebugOutput, SmDebugOutput->f_timeout,
+ "%ld: %ld.%06ld ",
+ (long) getpid(),
+ (long) tv.tv_sec,
+ (long) tv.tv_usec);
+ }
+ else if (sm_debug_active(&SmDBGPidTime, 1))
{
static char str[32] = "[1900-00-00/00:00:00] ";
struct tm *tmp;
diff --git a/contrib/sendmail/libsm/errstring.c b/contrib/sendmail/libsm/errstring.c
index 01d5a6419f41..fd1af9b5dcbf 100644
--- a/contrib/sendmail/libsm/errstring.c
+++ b/contrib/sendmail/libsm/errstring.c
@@ -27,7 +27,7 @@ SM_RCSID("@(#)$Id: errstring.c,v 1.20 2013-11-22 20:51:42 ca Exp $")
#if LDAPMAP
# include <lber.h>
# include <ldap.h> /* for LDAP error codes */
-#endif /* LDAPMAP */
+#endif
/*
** Notice: this file is used by libmilter. Please try to avoid
@@ -200,63 +200,63 @@ sm_errstring(errnum)
# ifdef LDAP_URL_ERR_MEM
case E_LDAPURLBASE + LDAP_URL_ERR_MEM:
return "LDAP URL can't allocate memory space";
-# endif /* LDAP_URL_ERR_MEM */
+# endif
# ifdef LDAP_URL_ERR_PARAM
case E_LDAPURLBASE + LDAP_URL_ERR_PARAM:
return "LDAP URL parameter is bad";
-# endif /* LDAP_URL_ERR_PARAM */
+# endif
# ifdef LDAP_URL_ERR_BADSCHEME
case E_LDAPURLBASE + LDAP_URL_ERR_BADSCHEME:
return "LDAP URL doesn't begin with \"ldap[si]://\"";
-# endif /* LDAP_URL_ERR_BADSCHEME */
+# endif
# ifdef LDAP_URL_ERR_BADENCLOSURE
case E_LDAPURLBASE + LDAP_URL_ERR_BADENCLOSURE:
return "LDAP URL is missing trailing \">\"";
-# endif /* LDAP_URL_ERR_BADENCLOSURE */
+# endif
# ifdef LDAP_URL_ERR_BADURL
case E_LDAPURLBASE + LDAP_URL_ERR_BADURL:
return "LDAP URL is bad";
-# endif /* LDAP_URL_ERR_BADURL */
+# endif
# ifdef LDAP_URL_ERR_BADHOST
case E_LDAPURLBASE + LDAP_URL_ERR_BADHOST:
return "LDAP URL host port is bad";
-# endif /* LDAP_URL_ERR_BADHOST */
+# endif
# ifdef LDAP_URL_ERR_BADATTRS
case E_LDAPURLBASE + LDAP_URL_ERR_BADATTRS:
return "LDAP URL bad (or missing) attributes";
-# endif /* LDAP_URL_ERR_BADATTRS */
+# endif
# ifdef LDAP_URL_ERR_BADSCOPE
case E_LDAPURLBASE + LDAP_URL_ERR_BADSCOPE:
return "LDAP URL scope string is invalid (or missing)";
-# endif /* LDAP_URL_ERR_BADSCOPE */
+# endif
# ifdef LDAP_URL_ERR_BADFILTER
case E_LDAPURLBASE + LDAP_URL_ERR_BADFILTER:
return "LDAP URL bad or missing filter";
-# endif /* LDAP_URL_ERR_BADFILTER */
+# endif
# ifdef LDAP_URL_ERR_BADEXTS
case E_LDAPURLBASE + LDAP_URL_ERR_BADEXTS:
return "LDAP URL bad or missing extensions";
-# endif /* LDAP_URL_ERR_BADEXTS */
+# endif
/* Sun LDAP errors */
# ifdef LDAP_URL_ERR_NOTLDAP
case E_LDAPURLBASE + LDAP_URL_ERR_NOTLDAP:
return "LDAP URL doesn't begin with \"ldap://\"";
-# endif /* LDAP_URL_ERR_NOTLDAP */
+# endif
# ifdef LDAP_URL_ERR_NODN
case E_LDAPURLBASE + LDAP_URL_ERR_NODN:
return "LDAP URL has no DN (required)";
-# endif /* LDAP_URL_ERR_NODN */
+# endif
#endif /* LDAPMAP */
}
diff --git a/contrib/sendmail/libsm/exc.c b/contrib/sendmail/libsm/exc.c
index d9ebe4419c84..4824d5f9bd0c 100644
--- a/contrib/sendmail/libsm/exc.c
+++ b/contrib/sendmail/libsm/exc.c
@@ -229,12 +229,12 @@ const SM_EXC_TYPE_T SmEtypeErr =
** an out-of-memory exception so that exc is not leaked.
*/
-static SM_EXC_T *sm_exc_vnew_x __P((const SM_EXC_TYPE_T *, va_list SM_NONVOLATILE));
+static SM_EXC_T *sm_exc_vnew_x __P((const SM_EXC_TYPE_T *, va_list));
static SM_EXC_T *
sm_exc_vnew_x(etype, ap)
const SM_EXC_TYPE_T *etype;
- va_list SM_NONVOLATILE ap;
+ va_list ap;
{
/*
** All variables that are modified in the SM_TRY clause and
diff --git a/contrib/sendmail/libsm/findfp.c b/contrib/sendmail/libsm/findfp.c
index 25f7663e8797..1b2ed884d499 100644
--- a/contrib/sendmail/libsm/findfp.c
+++ b/contrib/sendmail/libsm/findfp.c
@@ -327,11 +327,10 @@ sm_io_setinfo(fp, what, valp)
** SM_IO_GETINFO -- get information for an active file type (fp)
**
** This function supplies for all file types the answers for the
-** three requests SM_IO_WHAT_VECTORS, SM_IO_WHAT_TYPE and
-** SM_IO_WHAT_ISTYPE. Other requests are handled by the getinfo
+** three requests SM_IO_WHAT_VECTORS, and SM_IO_WHAT_ISTYPE.
+** Other requests are handled by the getinfo
** vector if available for the open file type.
** SM_IO_WHAT_VECTORS returns information for the file pointer vectors.
-** SM_IO_WHAT_TYPE returns the type identifier for the file pointer
** SM_IO_WHAT_ISTYPE returns >0 if the passed in type matches the
** file pointer's type.
** SM_IO_IS_READABLE returns 1 if there is data available for reading,
@@ -345,8 +344,8 @@ sm_io_setinfo(fp, what, valp)
** Returns:
** -1 on error and sets errno:
** - when valp==NULL and request expects otherwise
-** - when request is not SM_IO_WHAT_VECTORS and not
-** SM_IO_WHAT_TYPE and not SM_IO_WHAT_ISTYPE
+** - when request is not SM_IO_WHAT_VECTORS
+** and not SM_IO_WHAT_ISTYPE
** and getinfo vector is NULL
** - when getinfo type vector returns -1
** >=0 on success
@@ -382,15 +381,6 @@ sm_io_getinfo(fp, what, valp)
v->f_type = fp->f_type;
return 0;
- case SM_IO_WHAT_TYPE:
- if (valp == NULL)
- {
- errno = EINVAL;
- return -1;
- }
- valp = sm_strdup_x(fp->f_type);
- return 0;
-
case SM_IO_WHAT_ISTYPE:
if (valp == NULL)
{
diff --git a/contrib/sendmail/libsm/flags.c b/contrib/sendmail/libsm/flags.c
index 0786b026ffe4..49853271af5d 100644
--- a/contrib/sendmail/libsm/flags.c
+++ b/contrib/sendmail/libsm/flags.c
@@ -23,7 +23,7 @@ SM_RCSID("@(#)$Id: flags.c,v 1.24 2013-11-22 20:51:42 ca Exp $")
/*
** SM_FLAGS -- translate external (user) flags into internal flags
**
-** Paramters:
+** Parameters:
** flags -- user select flags
**
** Returns:
diff --git a/contrib/sendmail/libsm/fopen.c b/contrib/sendmail/libsm/fopen.c
index 33ddc6015b9b..7dd1751c98b3 100644
--- a/contrib/sendmail/libsm/fopen.c
+++ b/contrib/sendmail/libsm/fopen.c
@@ -89,7 +89,7 @@ reopenalrm(sig)
** Parameters:
** type -- type of file to open
** timeout -- time to complete the open
-** info -- info describing what is to be opened (type dependant)
+** info -- info describing what is to be opened (type dependent)
** flags -- user selected flags
** rpool -- pointer to rpool to be used for this open
**
@@ -159,7 +159,7 @@ sm_io_open(type, timeout, info, flags, rpool)
#if SM_RPOOL
if (rpool != NULL)
sm_rpool_attach_x(rpool, sm_io_fclose, fp);
-#endif /* SM_RPOOL */
+#endif
return fp;
}
@@ -205,7 +205,7 @@ sm_io_dup(fp)
** Parameters:
** type -- file type to be opened
** timeout -- time to complete the reopen
-** info -- infomation about what is to be "re-opened" (type dep.)
+** info -- information about what is to be "re-opened" (type dep.)
** flags -- user flags to map to internal flags
** rpool -- rpool file to be associated with
** fp -- the file pointer to reuse
@@ -311,7 +311,7 @@ sm_io_reopen(type, timeout, info, flags, rpool, fp)
#if SM_RPOOL
if (rpool != NULL)
sm_rpool_attach_x(rpool, sm_io_close, fp2);
-#endif /* SM_RPOOL */
+#endif
return fp2;
}
diff --git a/contrib/sendmail/libsm/fpos.c b/contrib/sendmail/libsm/fpos.c
index 30015f57599b..fc21f84d7c43 100644
--- a/contrib/sendmail/libsm/fpos.c
+++ b/contrib/sendmail/libsm/fpos.c
@@ -57,7 +57,7 @@ tellalrm(sig)
/*
** SM_IO_TELL -- position the file pointer
**
-** Paramters:
+** Parameters:
** fp -- the file pointer to get repositioned
** timeout -- time to complete the tell (milliseconds)
**
diff --git a/contrib/sendmail/libsm/fscanf.c b/contrib/sendmail/libsm/fscanf.c
index c45ef3a3cad0..0ca6f6f2d2db 100644
--- a/contrib/sendmail/libsm/fscanf.c
+++ b/contrib/sendmail/libsm/fscanf.c
@@ -26,7 +26,7 @@ SM_RCSID("@(#)$Id: fscanf.c,v 1.18 2013-11-22 20:51:42 ca Exp $")
** fp -- the file pointer to obtain the data from
** timeout -- time to complete scan
** fmt -- the format to translate the data to
-** ... -- memory locations to place the formated data
+** ... -- memory locations to place the formatted data
**
** Returns:
** Failure: returns SM_IO_EOF
diff --git a/contrib/sendmail/libsm/io.html b/contrib/sendmail/libsm/io.html
index 5304d26236bd..3efdfebb58c7 100644
--- a/contrib/sendmail/libsm/io.html
+++ b/contrib/sendmail/libsm/io.html
@@ -155,8 +155,7 @@ raising exceptions later.
<a href="#defaultapi">int sm_snprintf(char *str, size_t n, char const *fmt, ...)</a>
</pre>
-<a name="timeouts">
-<h2>Timeouts</h2>
+<h2><a name="timeouts">Timeouts</a></h2>
<p>
For many of the functions a <i>timeout</i> argument is given. This limits
the amount of time allowed for the function to complete. There are three
@@ -313,7 +312,7 @@ This will make the change for this SM_FILE_T only. The file
type that <i>sfp</i> originally belonged to will still be
configured the same way (this is to prevent side-effect
to other open's of the same file type, particularly with threads).
-The value of <i>what</i> will be file-type dependant since this function
+The value of <i>what</i> will be file-type dependent since this function
is one of the per file type setable functions.
One value for <i>what</i> that is valid for all file types is
SM_WHAT_VECTORS. This sets the currently open file with a new function
@@ -336,7 +335,7 @@ For the open file <i>sfp</i> get the indicated information (<i>what</i>)
and place the result in <i>(valp</i>).
This will obtain information for SM_FILE_T only and may be different than
the information for the file type it was originally opened as.
-The value of <i>what</i> will be file type dependant since this function
+The value of <i>what</i> will be file type dependent since this function
is one of the per file type setable functions.
One value for <i>what</i> that is valid for all file types is
SM_WHAT_VECTORS. This gets from the currently open file a copy of
@@ -370,7 +369,7 @@ previous association.
void
<br>
sm_io_automode(SM_FILE_T *fp1, *SM_FILE_T fp2)
-<dt><tt><a name="sm_io_automode">
+<dt>
</a></tt></dt>
<dd>
Associate the two file pointers for blocking/non-blocking mode changes.
@@ -379,7 +378,7 @@ a file between blocking and non-blocking. If the underlying file descriptor
has been duplicated with <tt>dup(2)</tt> and these descriptors are used
by <i>sm_io</i> (for example with an SmFtStdiofd file type), then this API
should be called to associate them. Otherwise odd behavior (i.e. errors)
-may result that is not consistently reproducable nor easily identifiable.
+may result that is not consistently reproducible nor easily identifiable.
</dd>
<!-- SM_IO_CLOSE -->
<p></p>
@@ -456,7 +455,7 @@ The three types <i>smioin</i>, <i>smioout</i> and <i>smioerr</i> are grouped
together. These three types
perform in the same manner as <b>stdio</b>'s <i>stdin</i>, <i>stdout</i>
and <i>stderr</i>. These types are both the names and the file pointers.
-They are already open when a program starts (unless the parent explictly
+They are already open when a program starts (unless the parent explicitly
closed file descriptors 0, 1 and 2).
Thus <tt>sm_io_open()</tt> should never be called for these types:
the named file pointers should be used directly.
@@ -477,7 +476,7 @@ The three types <i>smiostdin</i>, <i>smioostdut</i> and <i>smiostderr</i>
are grouped together. These three types
perform in the same manner as <b>stdio</b>'s <i>stdin</i>, <i>stdout</i>
and <i>stderr</i>. These types are both the names and file pointers.
-They are already open when a program starts (unless the parent explictly
+They are already open when a program starts (unless the parent explicitly
close file descriptors 0, 1 and 2).
Thus <tt>sm_io_open()</tt> should
never be called: the named file pointers should be used directly.
@@ -733,7 +732,7 @@ if a "file pointer" (FILE/SM_FILE_T)
is one of the arguments for the function, then it is now the first
argument. <i>Sm_io</i> is standardized so that when a file pointer is
one of the arguments to function then it will always be the first
-arguement. Many of the <i>sm_io</i> function take a <i>timeout</i>
+argument. Many of the <i>sm_io</i> function take a <i>timeout</i>
argument (see <a href="#timeouts"><b>Timeouts</b></a>).
</p>
<p>
diff --git a/contrib/sendmail/libsm/ldap.c b/contrib/sendmail/libsm/ldap.c
index 9359aedfdeda..116dc8fac343 100644
--- a/contrib/sendmail/libsm/ldap.c
+++ b/contrib/sendmail/libsm/ldap.c
@@ -29,13 +29,12 @@ SM_RCSID("@(#)$Id: ldap.c,v 1.86 2013-11-22 20:51:43 ca Exp $")
# include <sm/string.h>
# ifdef EX_OK
# undef EX_OK /* for SVr4.2 SMP */
-# endif /* EX_OK */
+# endif
# include <sm/sysexits.h>
SM_DEBUG_T SmLDAPTrace = SM_DEBUG_INITIALIZER("sm_trace_ldap",
"@(#)$Debug: sm_trace_ldap - trace LDAP operations $");
-static void ldaptimeout __P((int));
static bool sm_ldap_has_objectclass __P((SM_LDAP_STRUCT *, LDAPMessage *, char *));
static SM_LDAP_RECURSE_ENTRY *sm_ldap_add_recurse __P((SM_LDAP_RECURSE_LIST **, char *, int, SM_RPOOL_T *));
@@ -53,10 +52,10 @@ static SM_LDAP_RECURSE_ENTRY *sm_ldap_add_recurse __P((SM_LDAP_RECURSE_LIST **,
#if _FFR_LDAP_VERSION
# if defined(LDAP_VERSION_MAX) && _FFR_LDAP_VERSION > LDAP_VERSION_MAX
ERROR FFR_LDAP_VERSION > _LDAP_VERSION_MAX
-# endif /* defined(LDAP_VERSION_MAX) && _FFR_LDAP_VERSION > LDAP_VERSION_MAX */
+# endif
# if defined(LDAP_VERSION_MIN) && _FFR_LDAP_VERSION < LDAP_VERSION_MIN
ERROR FFR_LDAP_VERSION < _LDAP_VERSION_MIN
-# endif /* defined(LDAP_VERSION_MIN) && _FFR_LDAP_VERSION < LDAP_VERSION_MIN */
+# endif
# define SM_LDAP_VERSION_DEFAULT _FFR_LDAP_VERSION
#else /* _FFR_LDAP_VERSION */
# define SM_LDAP_VERSION_DEFAULT 0
@@ -78,9 +77,9 @@ sm_ldap_clear(lmap)
lmap->ldap_sizelimit = LDAP_NO_LIMIT;
# ifdef LDAP_REFERRALS
lmap->ldap_options = LDAP_OPT_REFERRALS;
-# else /* LDAP_REFERRALS */
+# else
lmap->ldap_options = 0;
-# endif /* LDAP_REFERRALS */
+# endif
lmap->ldap_attrsep = '\0';
lmap->ldap_binddn = NULL;
lmap->ldap_secret = NULL;
@@ -101,6 +100,147 @@ sm_ldap_clear(lmap)
lmap->ldap_multi_args = false;
}
+# if _FFR_SM_LDAP_DBG && defined(LBER_OPT_LOG_PRINT_FN)
+static void ldap_debug_cb __P((const char *msg));
+
+static void
+ldap_debug_cb(msg)
+ const char *msg;
+{
+ if (sm_debug_active(&SmLDAPTrace, 4))
+ sm_dprintf("%s", msg);
+}
+# endif /* _FFR_SM_LDAP_DBG && defined(LBER_OPT_LOG_PRINT_FN) */
+
+
+# if LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT)
+# define SET_LDAP_TMO(ld, lmap) \
+ do \
+ { \
+ if (lmap->ldap_networktmo > 0) \
+ { \
+ struct timeval tmo; \
+ \
+ if (sm_debug_active(&SmLDAPTrace, 9)) \
+ sm_dprintf("ldap_networktmo=%d\n", \
+ lmap->ldap_networktmo); \
+ tmo.tv_sec = lmap->ldap_networktmo; \
+ tmo.tv_usec = 0; \
+ ldap_set_option(ld, LDAP_OPT_NETWORK_TIMEOUT, &tmo); \
+ } \
+ } while (0)
+# else /* LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) */
+# define SET_LDAP_TMO(ld, lmap)
+# endif /* LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) */
+
+/*
+** SM_LDAP_SETOPTSG -- set some (global) LDAP options
+**
+** Parameters:
+** lmap -- LDAP map information
+**
+** Returns:
+** None.
+**
+*/
+
+# if _FFR_SM_LDAP_DBG
+static bool dbg_init = false;
+# endif
+# if SM_CONF_LDAP_INITIALIZE
+static void sm_ldap_setoptsg __P((SM_LDAP_STRUCT *lmap));
+static void
+sm_ldap_setoptsg(lmap)
+ SM_LDAP_STRUCT *lmap;
+{
+# if USE_LDAP_SET_OPTION
+
+ SET_LDAP_TMO(NULL, lmap);
+
+# if _FFR_SM_LDAP_DBG
+ if (!dbg_init && sm_debug_active(&SmLDAPTrace, 1) &&
+ lmap->ldap_debug != 0)
+ {
+ int r;
+# if defined(LBER_OPT_LOG_PRINT_FN)
+ r = ber_set_option(NULL, LBER_OPT_LOG_PRINT_FN, ldap_debug_cb);
+# endif
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_debug0=%d\n", lmap->ldap_debug);
+ r = ber_set_option(NULL, LBER_OPT_DEBUG_LEVEL,
+ &(lmap->ldap_debug));
+ if (sm_debug_active(&SmLDAPTrace, 9) && r != LDAP_OPT_SUCCESS)
+ sm_dprintf("ber_set_option=%d\n", r);
+ r = ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL,
+ &(lmap->ldap_debug));
+ if (sm_debug_active(&SmLDAPTrace, 9) && r != LDAP_OPT_SUCCESS)
+ sm_dprintf("ldap_set_option=%d\n", r);
+ dbg_init = true;
+ }
+# endif /* _FFR_SM_LDAP_DBG */
+# endif /* USE_LDAP_SET_OPTION */
+}
+# endif /* SM_CONF_LDAP_INITIALIZE */
+
+/*
+** SM_LDAP_SETOPTS -- set LDAP options
+**
+** Parameters:
+** ld -- LDAP session handle
+** lmap -- LDAP map information
+**
+** Returns:
+** None.
+**
+*/
+
+void
+sm_ldap_setopts(ld, lmap)
+ LDAP *ld;
+ SM_LDAP_STRUCT *lmap;
+{
+# if USE_LDAP_SET_OPTION
+ if (lmap->ldap_version != 0)
+ {
+ ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,
+ &lmap->ldap_version);
+ }
+ ldap_set_option(ld, LDAP_OPT_DEREF, &lmap->ldap_deref);
+ if (bitset(LDAP_OPT_REFERRALS, lmap->ldap_options))
+ ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_ON);
+ else
+ ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
+ ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->ldap_sizelimit);
+ ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->ldap_timelimit);
+ SET_LDAP_TMO(ld, lmap);
+# if _FFR_SM_LDAP_DBG
+ if ((!dbg_init || ld != NULL) && sm_debug_active(&SmLDAPTrace, 1)
+ && lmap->ldap_debug > 0)
+ {
+ int r;
+
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_debug=%d, dbg_init=%d\n",
+ lmap->ldap_debug, dbg_init);
+ r = ldap_set_option(ld, LDAP_OPT_DEBUG_LEVEL,
+ &(lmap->ldap_debug));
+ if (sm_debug_active(&SmLDAPTrace, 9) && r != LDAP_OPT_SUCCESS)
+ sm_dprintf("ldap_set_option=%d\n", r);
+ }
+# endif /* _FFR_SM_LDAP_DBG */
+# ifdef LDAP_OPT_RESTART
+ ldap_set_option(ld, LDAP_OPT_RESTART, LDAP_OPT_ON);
+# endif
+
+# else /* USE_LDAP_SET_OPTION */
+ /* From here on in we can use ldap internal timelimits */
+ ld->ld_deref = lmap->ldap_deref;
+ ld->ld_options = lmap->ldap_options;
+ ld->ld_sizelimit = lmap->ldap_sizelimit;
+ ld->ld_timelimit = lmap->ldap_timelimit;
+# endif /* USE_LDAP_SET_OPTION */
+}
+
/*
** SM_LDAP_START -- actually connect to an LDAP server
**
@@ -115,15 +255,36 @@ sm_ldap_clear(lmap)
** Populates lmap->ldap_ld.
*/
+# if !USE_LDAP_INIT || !LDAP_NETWORK_TIMEOUT
static jmp_buf LDAPTimeout;
+static void ldaptimeout __P((int));
+
+/* ARGSUSED */
+static void
+ldaptimeout(unused)
+ int unused;
+{
+ /*
+ ** NOTE: THIS CAN BE CALLED FROM A SIGNAL HANDLER. DO NOT ADD
+ ** ANYTHING TO THIS ROUTINE UNLESS YOU KNOW WHAT YOU ARE
+ ** DOING.
+ */
+
+ errno = ETIMEDOUT;
+ longjmp(LDAPTimeout, 1);
+}
+
-#define SM_LDAP_SETTIMEOUT(to) \
+#define SM_LDAP_SETTIMEOUT(to, where) \
do \
{ \
if (to != 0) \
{ \
if (setjmp(LDAPTimeout) != 0) \
{ \
+ if (sm_debug_active(&SmLDAPTrace, 9)) \
+ sm_dprintf("ldap_settimeout(%s)=triggered\n",\
+ where); \
errno = ETIMEDOUT; \
return false; \
} \
@@ -137,17 +298,21 @@ do \
if (ev != NULL) \
sm_clrevent(ev); \
} while (0)
+#endif /* !USE_LDAP_INIT || !LDAP_NETWORK_TIMEOUT */
bool
sm_ldap_start(name, lmap)
char *name;
SM_LDAP_STRUCT *lmap;
{
- int bind_result;
int save_errno = 0;
char *id;
+# if !USE_LDAP_INIT || !LDAP_NETWORK_TIMEOUT
SM_EVENT *ev = NULL;
+# endif
LDAP *ld = NULL;
+ struct timeval tmo;
+ int msgid, err, r;
if (sm_debug_active(&SmLDAPTrace, 2))
sm_dprintf("ldapmap_start(%s)\n", name == NULL ? "" : name);
@@ -172,10 +337,15 @@ sm_ldap_start(name, lmap)
if (lmap->ldap_uri != NULL)
{
#if SM_CONF_LDAP_INITIALIZE
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_initialize(%s)\n", lmap->ldap_uri);
/* LDAP server supports URIs so use them directly */
save_errno = ldap_initialize(&ld, lmap->ldap_uri);
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_initialize(%s)=%d, ld=%p\n", lmap->ldap_uri, save_errno, ld);
+ sm_ldap_setoptsg(lmap);
+
#else /* SM_CONF_LDAP_INITIALIZE */
- int err;
LDAPURLDesc *ludp = NULL;
/* Blast apart URL and use the ldap_init/ldap_open below */
@@ -201,8 +371,11 @@ sm_ldap_start(name, lmap)
if (ld == NULL)
{
# if USE_LDAP_INIT
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_init(%s, %d)\n", lmap->ldap_host, lmap->ldap_port);
ld = ldap_init(lmap->ldap_host, lmap->ldap_port);
save_errno = errno;
+
# else /* USE_LDAP_INIT */
/*
** If using ldap_open(), the actual connection to the server
@@ -210,7 +383,10 @@ sm_ldap_start(name, lmap)
** the connection happens at bind time.
*/
- SM_LDAP_SETTIMEOUT(lmap->ldap_timeout.tv_sec);
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_open(%s, %d)\n", lmap->ldap_host, lmap->ldap_port);
+
+ SM_LDAP_SETTIMEOUT(lmap->ldap_timeout.tv_sec, "ldap_open");
ld = ldap_open(lmap->ldap_host, lmap->ldap_port);
save_errno = errno;
@@ -221,18 +397,21 @@ sm_ldap_start(name, lmap)
errno = save_errno;
if (ld == NULL)
+ {
+ if (sm_debug_active(&SmLDAPTrace, 7))
+ sm_dprintf("FAIL: ldap_open(%s, %d)=%d\n", lmap->ldap_host, lmap->ldap_port, save_errno);
return false;
+ }
sm_ldap_setopts(ld, lmap);
-
-# if USE_LDAP_INIT
+# if USE_LDAP_INIT && !LDAP_NETWORK_TIMEOUT
/*
** If using ldap_init(), the actual connection to the server
** happens at ldap_bind_s() so we need the timeout here.
*/
- SM_LDAP_SETTIMEOUT(lmap->ldap_timeout.tv_sec);
-# endif /* USE_LDAP_INIT */
+ SM_LDAP_SETTIMEOUT(lmap->ldap_timeout.tv_sec, "ldap_bind");
+# endif /* USE_LDAP_INIT && !LDAP_NETWORK_TIMEOUT */
# ifdef LDAP_AUTH_KRBV4
if (lmap->ldap_method == LDAP_AUTH_KRBV4 &&
@@ -248,17 +427,68 @@ sm_ldap_start(name, lmap)
}
# endif /* LDAP_AUTH_KRBV4 */
- bind_result = ldap_bind_s(ld, lmap->ldap_binddn,
- lmap->ldap_secret, lmap->ldap_method);
+# if LDAP_NETWORK_TIMEOUT
+ tmo.tv_sec = lmap->ldap_networktmo;
+# else
+ tmo.tv_sec = lmap->ldap_timeout.tv_sec;
+# endif
+ tmo.tv_usec = 0;
-# if USE_LDAP_INIT
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_bind(%s)\n", lmap->ldap_uri);
+ errno = 0;
+ msgid = ldap_bind(ld, lmap->ldap_binddn, lmap->ldap_secret,
+ lmap->ldap_method);
+ save_errno = errno;
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_bind(%s)=%d, errno=%d, tmo=%ld\n",
+ lmap->ldap_uri, msgid, save_errno,
+ (long) tmo.tv_sec);
+ if (-1 == msgid)
+ {
+ r = -1;
+ goto fail;
+ }
+
+ errno = 0;
+ r = ldap_result(ld, msgid, LDAP_MSG_ALL,
+ tmo.tv_sec == 0 ? NULL : &(tmo), &(lmap->ldap_res));
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_result(%s)=%d, errno=%d\n", lmap->ldap_uri, r, errno);
+ if (-1 == r)
+ goto fail;
+ if (0 == r)
+ {
+ save_errno = ETIMEDOUT;
+ r = -1;
+ goto fail;
+ }
+ r = ldap_parse_result(ld, lmap->ldap_res, &err, NULL, NULL, NULL, NULL,
+ 1);
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_parse_result(%s)=%d, err=%d\n", lmap->ldap_uri, r, err);
+ if (r != LDAP_SUCCESS)
+ goto fail;
+ if (err != LDAP_SUCCESS)
+ {
+ r = -1;
+ goto fail;
+ }
+
+# if USE_LDAP_INIT && !LDAP_NETWORK_TIMEOUT
/* clear the event if it has not sprung */
SM_LDAP_CLEARTIMEOUT();
-# endif /* USE_LDAP_INIT */
+ if (sm_debug_active(&SmLDAPTrace, 9))
+ sm_dprintf("ldap_cleartimeout(%s)\n", lmap->ldap_uri);
+# endif /* USE_LDAP_INIT && !LDAP_NETWORK_TIMEOUT */
- if (bind_result != LDAP_SUCCESS)
+ if (r != LDAP_SUCCESS)
{
- errno = bind_result + E_LDAPBASE;
+ fail:
+ if (-1 == r)
+ errno = save_errno;
+ else
+ errno = r + E_LDAPBASE;
return false;
}
@@ -268,21 +498,6 @@ sm_ldap_start(name, lmap)
return true;
}
-/* ARGSUSED */
-static void
-ldaptimeout(unused)
- int unused;
-{
- /*
- ** NOTE: THIS CAN BE CALLED FROM A SIGNAL HANDLER. DO NOT ADD
- ** ANYTHING TO THIS ROUTINE UNLESS YOU KNOW WHAT YOU ARE
- ** DOING.
- */
-
- errno = ETIMEDOUT;
- longjmp(LDAPTimeout, 1);
-}
-
/*
** SM_LDAP_SEARCH_M -- initiate multi-key LDAP search
**
@@ -292,7 +507,7 @@ ldaptimeout(unused)
** Parameters:
** lmap -- LDAP map information
** argv -- key vector of substitutions in LDAP filter
-** NOTE: argv must have SM_LDAP_ARGS elements to prevent
+** NOTE: argv must have SM_LDAP_ARGS elements to prevent
** out of bound array references
**
** Returns:
@@ -1361,59 +1576,6 @@ sm_ldap_close(lmap)
lmap->ldap_ld = NULL;
lmap->ldap_pid = 0;
}
-
-/*
-** SM_LDAP_SETOPTS -- set LDAP options
-**
-** Parameters:
-** ld -- LDAP session handle
-** lmap -- LDAP map information
-**
-** Returns:
-** None.
-**
-*/
-
-void
-sm_ldap_setopts(ld, lmap)
- LDAP *ld;
- SM_LDAP_STRUCT *lmap;
-{
-# if USE_LDAP_SET_OPTION
- if (lmap->ldap_version != 0)
- {
- ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,
- &lmap->ldap_version);
- }
- ldap_set_option(ld, LDAP_OPT_DEREF, &lmap->ldap_deref);
- if (bitset(LDAP_OPT_REFERRALS, lmap->ldap_options))
- ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_ON);
- else
- ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
- ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->ldap_sizelimit);
- ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->ldap_timelimit);
-# if _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT)
- if (lmap->ldap_networktmo > 0)
- {
- struct timeval tmo;
-
- tmo.tv_sec = lmap->ldap_networktmo;
- tmo.tv_usec = 0;
- ldap_set_option(ld, LDAP_OPT_NETWORK_TIMEOUT, &tmo);
- }
-# endif /* _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) */
-# ifdef LDAP_OPT_RESTART
- ldap_set_option(ld, LDAP_OPT_RESTART, LDAP_OPT_ON);
-# endif /* LDAP_OPT_RESTART */
-# else /* USE_LDAP_SET_OPTION */
- /* From here on in we can use ldap internal timelimits */
- ld->ld_deref = lmap->ldap_deref;
- ld->ld_options = lmap->ldap_options;
- ld->ld_sizelimit = lmap->ldap_sizelimit;
- ld->ld_timelimit = lmap->ldap_timelimit;
-# endif /* USE_LDAP_SET_OPTION */
-}
-
/*
** SM_LDAP_GETERRNO -- get ldap errno value
**
@@ -1432,11 +1594,16 @@ sm_ldap_geterrno(ld)
int err = LDAP_SUCCESS;
# if defined(LDAP_VERSION_MAX) && LDAP_VERSION_MAX >= 3
- (void) ldap_get_option(ld, LDAP_OPT_ERROR_NUMBER, &err);
-# else /* defined(LDAP_VERSION_MAX) && LDAP_VERSION_MAX >= 3 */
+# ifdef LDAP_OPT_RESULT_CODE
+# define LDAP_GET_RESULT_CODE LDAP_OPT_RESULT_CODE
+# else
+# define LDAP_GET_RESULT_CODE LDAP_OPT_ERROR_NUMBER
+# endif
+ (void) ldap_get_option(ld, LDAP_GET_RESULT_CODE, &err);
+# else
# ifdef LDAP_OPT_SIZELIMIT
err = ldap_get_lderrno(ld, NULL, NULL);
-# else /* LDAP_OPT_SIZELIMIT */
+# else
err = ld->ld_errno;
/*
diff --git a/contrib/sendmail/libsm/local.h b/contrib/sendmail/libsm/local.h
index 304a52e292ce..0118d6169676 100644
--- a/contrib/sendmail/libsm/local.h
+++ b/contrib/sendmail/libsm/local.h
@@ -23,7 +23,7 @@
#include <sm/fdset.h>
#if !SM_CONF_MEMCHR
# include <memory.h>
-#endif /* !SM_CONF_MEMCHR */
+#endif
#include <sm/heap.h>
int sm_flush __P((SM_FILE_T *, int *));
diff --git a/contrib/sendmail/libsm/makebuf.c b/contrib/sendmail/libsm/makebuf.c
index 8d05e68bcb9c..2542d2982d6a 100644
--- a/contrib/sendmail/libsm/makebuf.c
+++ b/contrib/sendmail/libsm/makebuf.c
@@ -114,7 +114,7 @@ sm_whatbuf(fp, bufsize, couldbetty)
#if SM_IO_MAX_BUF_FILE > 0
if (S_ISREG(st.st_mode) && st.st_blksize > SM_IO_MAX_BUF_FILE)
st.st_blksize = SM_IO_MAX_BUF_FILE;
-#endif /* SM_IO_MAX_BUF_FILE > 0 */
+#endif
#if SM_IO_MAX_BUF > 0 || SM_IO_MIN_BUF > 0
if (!S_ISREG(st.st_mode))
@@ -129,7 +129,7 @@ sm_whatbuf(fp, bufsize, couldbetty)
# if SM_IO_MIN_BUF > 0
if (st.st_blksize < SM_IO_MIN_BUF)
st.st_blksize = SM_IO_MIN_BUF;
-# endif /* SM_IO_MIN_BUF > 0 */
+# endif
}
#endif /* SM_IO_MAX_BUF > 0 || SM_IO_MIN_BUF > 0 */
diff --git a/contrib/sendmail/libsm/mbdb.c b/contrib/sendmail/libsm/mbdb.c
index 3d7426cd5315..ff2d3d8150fa 100644
--- a/contrib/sendmail/libsm/mbdb.c
+++ b/contrib/sendmail/libsm/mbdb.c
@@ -29,13 +29,13 @@ SM_RCSID("@(#)$Id: mbdb.c,v 1.43 2014-01-08 17:03:15 ca Exp $")
#include <sm/string.h>
# ifdef EX_OK
# undef EX_OK /* for SVr4.2 SMP */
-# endif /* EX_OK */
+# endif
#include <sm/sysexits.h>
#if LDAPMAP
# if _LDAP_EXAMPLE_
# include <sm/ldap.h>
-# endif /* _LDAP_EXAMPLE_ */
+# endif
#endif /* LDAPMAP */
typedef struct
@@ -65,7 +65,7 @@ static SM_MBDB_TYPE_T SmMbdbTypes[] =
#if LDAPMAP
# if _LDAP_EXAMPLE_
{ "ldap", mbdb_ldap_initialize, mbdb_ldap_lookup, mbdb_ldap_terminate },
-# endif /* _LDAP_EXAMPLE_ */
+# endif
#endif /* LDAPMAP */
{ NULL, NULL, NULL, NULL }
};
@@ -267,7 +267,7 @@ sm_pwfullname(gecos, user, buf, buflen)
if ((unsigned char) *p >= 128)
*bp++ = Latin1ToASCII[(unsigned char) *p - 128];
else
-#endif /* _FFR_HANDLE_ISO8859_GECOS */
+#endif
*bp++ = *p;
}
}
@@ -408,15 +408,15 @@ mbdb_pw_terminate()
# ifndef MBDB_LDAP_FILTER
# define MBDB_LDAP_FILTER "(&(objectClass=posixAccount)(uid=%0))"
-# endif /* MBDB_LDAP_FILTER */
+# endif
# ifndef MBDB_DEFAULT_LDAP_BASEDN
# define MBDB_DEFAULT_LDAP_BASEDN NULL
-# endif /* MBDB_DEFAULT_LDAP_BASEDN */
+# endif
# ifndef MBDB_DEFAULT_LDAP_SERVER
# define MBDB_DEFAULT_LDAP_SERVER NULL
-# endif /* MBDB_DEFAULT_LDAP_SERVER */
+# endif
/*
** MBDB_LDAP_INITIALIZE -- initialize LDAP version
@@ -559,7 +559,7 @@ mbdb_ldap_lookup(name, user)
{
int rc;
- /*
+ /*
** We may have gotten an LDAP_RES_SEARCH_RESULT response
** with an error inside it, so we have to extract that
** with ldap_parse_result(). This can happen when talking
diff --git a/contrib/sendmail/libsm/memstat.c b/contrib/sendmail/libsm/memstat.c
index a58b4c2ed3e8..4ef49fad31d5 100644
--- a/contrib/sendmail/libsm/memstat.c
+++ b/contrib/sendmail/libsm/memstat.c
@@ -111,7 +111,7 @@ sm_memstat_open()
return (errno != 0) ? errno : -1;
kst = kstat_lookup(kc, "unix", 0,
(name != NULL) ? name : "system_pages");
- if (kst == 0)
+ if (kst == NULL)
return (errno != 0) ? errno : -2;
return 0;
}
diff --git a/contrib/sendmail/libsm/niprop.c b/contrib/sendmail/libsm/niprop.c
index ca60e38f53c5..a5056deb34c6 100644
--- a/contrib/sendmail/libsm/niprop.c
+++ b/contrib/sendmail/libsm/niprop.c
@@ -99,7 +99,7 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
if (tTd(38, 21))
sm_dprintf("ni_propval(%s, %s, %s, %s, %d) keybuf='%s'\n",
keydir, keyprop, keyval, valprop, sepchar, keybuf);
-#endif /* 0 */
+#endif
/*
** If the passed directory and property name are found
@@ -117,7 +117,7 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
#if 0
if (tTd(38, 20))
sm_dprintf("ni_open(LOCAL) = %d\n", nis);
-#endif /* 0 */
+#endif
}
else
{
@@ -128,7 +128,7 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
#if 0
if (tTd(38, 20))
sm_dprintf("ni_open(PARENT) = %d\n", nis);
-#endif /* 0 */
+#endif
}
/*
@@ -160,7 +160,7 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
if (tTd(38, 20))
sm_dprintf("ni_lookupprop: len=%d\n",
ninl.ni_namelist_len);
-#endif /* 0 */
+#endif
/*
** See if we have an acceptable number of values.
@@ -206,7 +206,7 @@ ni_propval(keydir, keyprop, keyval, valprop, sepchar)
#if 0
if (tTd(38, 20))
sm_dprintf("ni_propval returns: '%s'\n", propval);
-#endif /* 0 */
+#endif
return propval;
}
diff --git a/contrib/sendmail/libsm/notify.c b/contrib/sendmail/libsm/notify.c
new file mode 100644
index 000000000000..9f4cca27d7a8
--- /dev/null
+++ b/contrib/sendmail/libsm/notify.c
@@ -0,0 +1,205 @@
+/*
+ * Copyright (c) 2016 Proofpoint, 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.
+ *
+ */
+
+#include <sm/gen.h>
+
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h> /* for memset() */
+
+#include <sm/conf.h> /* FDSET_CAST */
+#include <sm/fdset.h>
+#include <sm/assert.h>
+#include <sm/notify.h>
+
+#if SM_NOTIFY_DEBUG
+#define SM_DBG(p) fprintf p
+#else
+#define SM_DBG(p)
+#endif
+
+static int Notifypipe[2];
+#define NotifyRDpipe Notifypipe[0]
+#define NotifyWRpipe Notifypipe[1]
+
+#define CLOSEFD(fd) do { \
+ if ((fd) != -1) { \
+ (void) close(fd); \
+ fd = - 1; \
+ } \
+ } while (0) \
+
+
+/*
+** SM_NOTIFY_INIT -- initialize notify system
+**
+** Parameters:
+** flags -- ignored
+**
+** Returns:
+** 0: success
+** <0: -errno
+*/
+
+int
+sm_notify_init(flags)
+ int flags;
+{
+ if (pipe(Notifypipe) < 0)
+ return -errno;
+ return 0;
+}
+
+/*
+** SM_NOTIFY_START -- start notify system
+**
+** Parameters:
+** owner -- owner.
+** flags -- currently ignored.
+**
+** Returns:
+** 0: success
+** <0: -errno
+*/
+
+int
+sm_notify_start(owner, flags)
+ bool owner;
+ int flags;
+{
+ int r;
+
+ r = 0;
+ if (owner)
+ CLOSEFD(NotifyWRpipe);
+ else
+ CLOSEFD(NotifyRDpipe);
+ return r;
+}
+
+/*
+** SM_NOTIFY_STOP -- stop notify system
+**
+** Parameters:
+** owner -- owner.
+** flags -- currently ignored.
+**
+** Returns:
+** 0: success
+** <0: -errno
+*/
+
+int
+sm_notify_stop(owner, flags)
+ bool owner;
+ int flags;
+{
+ if (owner)
+ CLOSEFD(NotifyRDpipe);
+ else
+ CLOSEFD(NotifyWRpipe);
+ return 0;
+}
+
+/*
+** SM_NOTIFY_SND -- send notification
+**
+** Parameters:
+** buf -- where to write data
+** buflen -- len of buffer
+**
+** Returns:
+** 0: success
+** <0: -errno
+*/
+
+int
+sm_notify_snd(buf, buflen)
+ char *buf;
+ size_t buflen;
+{
+ int r;
+ int save_errno;
+
+ SM_REQUIRE(buf != NULL);
+ SM_REQUIRE(buflen > 0);
+ if (NotifyWRpipe < 0)
+ return -EINVAL;
+
+ r = write(NotifyWRpipe, buf, buflen);
+ save_errno = errno;
+ SM_DBG((stderr, "write=%d, fd=%d, e=%d\n", r, NotifyWRpipe, save_errno));
+ return r >= 0 ? 0 : -save_errno;
+}
+
+/*
+** SM_NOTIFY_RCV -- receive notification
+**
+** Parameters:
+** buf -- where to write data
+** buflen -- len of buffer
+** tmo -- timeout
+**
+** Returns:
+** 0: success
+** <0: -errno
+*/
+
+int
+sm_notify_rcv(buf, buflen, tmo)
+ char *buf;
+ size_t buflen;
+ int tmo;
+{
+ int r;
+ int save_errno;
+ fd_set readfds;
+ struct timeval timeout;
+
+ SM_REQUIRE(buf != NULL);
+ SM_REQUIRE(buflen > 0);
+ if (NotifyRDpipe < 0)
+ return -EINVAL;
+ FD_ZERO(&readfds);
+ SM_FD_SET(NotifyRDpipe, &readfds);
+ timeout.tv_sec = tmo;
+ timeout.tv_usec = 0;
+
+ do {
+ r = select(NotifyRDpipe + 1, FDSET_CAST &readfds, NULL, NULL, &timeout);
+ save_errno = errno;
+ SM_DBG((stderr, "select=%d, fd=%d, e=%d\n", r, NotifyRDpipe, save_errno));
+ } while (r < 0 && save_errno == EINTR);
+
+ if (r <= 0)
+ {
+ SM_DBG((stderr, "select=%d, e=%d\n", r, save_errno));
+ return -ETIMEDOUT;
+ }
+
+ /* bogus... need to check again? */
+ if (!FD_ISSET(NotifyRDpipe, &readfds))
+ return -ETIMEDOUT;
+
+ r = read(NotifyRDpipe, buf, buflen);
+ save_errno = errno;
+ SM_DBG((stderr, "read=%d, e=%d\n", r, save_errno));
+ if (r == 0)
+ return -1; /* ??? */
+ if (r < 0)
+ return -save_errno;
+ return r;
+}
diff --git a/contrib/sendmail/libsm/refill.c b/contrib/sendmail/libsm/refill.c
index e13c831bed42..af3a84442f17 100644
--- a/contrib/sendmail/libsm/refill.c
+++ b/contrib/sendmail/libsm/refill.c
@@ -80,7 +80,7 @@ static int sm_lflush __P((SM_FILE_T *, int *));
do \
{ \
(sel_ret) = select((fd) + 1, &sm_io_to_mask, NULL, \
- &sm_io_x_mask, (to)); \
+ &sm_io_x_mask, (to)); \
} while ((sel_ret) < 0 && errno == EINTR); \
if ((sel_ret) < 0) \
{ \
@@ -95,7 +95,7 @@ static int sm_lflush __P((SM_FILE_T *, int *));
errno = EAGAIN; \
return SM_IO_EOF; \
} \
- /* calulate wall-clock time used */ \
+ /* calculate wall-clock time used */ \
if (gettimeofday(&sm_io_to_after, NULL) < 0) \
return SM_IO_EOF; \
timersub(&sm_io_to_after, &sm_io_to_before, &sm_io_to_diff); \
diff --git a/contrib/sendmail/libsm/rewind.c b/contrib/sendmail/libsm/rewind.c
index 9203ddb32f65..2bbb26d2a9a9 100644
--- a/contrib/sendmail/libsm/rewind.c
+++ b/contrib/sendmail/libsm/rewind.c
@@ -22,7 +22,7 @@ SM_RCSID("@(#)$Id: rewind.c,v 1.19 2013-11-22 20:51:43 ca Exp $")
/*
** SM_IO_REWIND -- rewind the file
**
-** Seeks the file to the begining and clears any outstanding errors.
+** Seeks the file to the beginning and clears any outstanding errors.
**
** Parameters:
** fp -- the flie pointer for rewind
diff --git a/contrib/sendmail/libsm/rpool.c b/contrib/sendmail/libsm/rpool.c
index 2624123cca91..9d883ffca194 100644
--- a/contrib/sendmail/libsm/rpool.c
+++ b/contrib/sendmail/libsm/rpool.c
@@ -22,7 +22,7 @@ SM_RCSID("@(#)$Id: rpool.c,v 1.29 2013-11-22 20:51:43 ca Exp $")
#include <sm/conf.h>
#if _FFR_PERF_RPOOL
# include <syslog.h>
-#endif /* _FFR_PERF_RPOOL */
+#endif
const char SmRpoolMagic[] = "sm_rpool";
@@ -181,7 +181,7 @@ sm_rpool_malloc_x(rpool, size)
{
#if _FFR_PERF_RPOOL
++rpool->sm_nbigblocks;
-#endif /* _FFR_PERF_RPOOL */
+#endif
return sm_rpool_allocblock_x(rpool, size);
}
SM_ASSERT(rpool->sm_bigobjectsize <= rpool->sm_poolsize);
@@ -190,7 +190,7 @@ sm_rpool_malloc_x(rpool, size)
rpool->sm_poolavail = rpool->sm_poolsize - size;
#if _FFR_PERF_RPOOL
++rpool->sm_npools;
-#endif /* _FFR_PERF_RPOOL */
+#endif
return ptr;
}
@@ -277,7 +277,7 @@ sm_rpool_malloc(rpool, size)
{
#if _FFR_PERF_RPOOL
++rpool->sm_nbigblocks;
-#endif /* _FFR_PERF_RPOOL */
+#endif
return sm_rpool_allocblock(rpool, size);
}
SM_ASSERT(rpool->sm_bigobjectsize <= rpool->sm_poolsize);
@@ -288,7 +288,7 @@ sm_rpool_malloc(rpool, size)
rpool->sm_poolavail = rpool->sm_poolsize - size;
#if _FFR_PERF_RPOOL
++rpool->sm_npools;
-#endif /* _FFR_PERF_RPOOL */
+#endif
return ptr;
}
@@ -336,7 +336,7 @@ sm_rpool_new_x(parent)
#if _FFR_PERF_RPOOL
rpool->sm_nbigblocks = 0;
rpool->sm_npools = 0;
-#endif /* _FFR_PERF_RPOOL */
+#endif
return rpool;
}
diff --git a/contrib/sendmail/libsm/sem.c b/contrib/sendmail/libsm/sem.c
index 23b2de70f318..ac28a61ae353 100644
--- a/contrib/sendmail/libsm/sem.c
+++ b/contrib/sendmail/libsm/sem.c
@@ -159,7 +159,7 @@ sm_sem_rel(semid, semnum, timeout)
#if PARANOID
/* XXX should we check whether the value is already 0 ? */
SM_REQUIRE(sm_get_sem(semid, semnum) > 0);
-#endif /* PARANOID */
+#endif
semops[0].sem_num = semnum;
semops[0].sem_op = 1;
diff --git a/contrib/sendmail/libsm/signal.c b/contrib/sendmail/libsm/signal.c
index 469b0fd7050b..bfbeaf555c2e 100644
--- a/contrib/sendmail/libsm/signal.c
+++ b/contrib/sendmail/libsm/signal.c
@@ -12,7 +12,7 @@ SM_RCSID("@(#)$Id: signal.c,v 1.18 2013-11-22 20:51:43 ca Exp $")
#if SM_CONF_SETITIMER
# include <sm/time.h>
-#endif /* SM_CONF_SETITIMER */
+#endif
#include <errno.h>
#include <stdlib.h>
#include <time.h>
@@ -42,7 +42,7 @@ sm_signal(sig, handler)
{
# if defined(SA_RESTART) || (!defined(SYS5SIGNALS) && !defined(BSD4_3))
struct sigaction n, o;
-# endif /* defined(SA_RESTART) || (!defined(SYS5SIGNALS) && !defined(BSD4_3)) */
+# endif
/*
** First, try for modern signal calls
@@ -54,10 +54,10 @@ sm_signal(sig, handler)
# if USE_SA_SIGACTION
n.sa_sigaction = (void(*)(int, siginfo_t *, void *)) handler;
n.sa_flags = SA_RESTART|SA_SIGINFO;
-# else /* USE_SA_SIGACTION */
+# else
n.sa_handler = handler;
n.sa_flags = SA_RESTART;
-# endif /* USE_SA_SIGACTION */
+# endif
if (sigaction(sig, &n, &o) < 0)
return SIG_ERR;
return o.sa_handler;
@@ -71,9 +71,9 @@ sm_signal(sig, handler)
# if defined(SYS5SIGNALS) || defined(BSD4_3)
# ifdef BSD4_3
return signal(sig, handler);
-# else /* BSD4_3 */
+# else
return sigset(sig, handler);
-# endif /* BSD4_3 */
+# endif
# else /* defined(SYS5SIGNALS) || defined(BSD4_3) */
/*
@@ -108,7 +108,7 @@ sm_blocksignal(sig)
# ifdef BSD4_3
# ifndef sigmask
# define sigmask(s) (1 << ((s) - 1))
-# endif /* ! sigmask */
+# endif
return (sigblock(sigmask(sig)) & sigmask(sig)) != 0;
# else /* BSD4_3 */
# ifdef ALTOS_SYSTEM_V
@@ -192,7 +192,7 @@ pend_signal(sig)
int save_errno = errno;
#if SM_CONF_SETITIMER
struct itimerval clr;
-#endif /* SM_CONF_SETITIMER */
+#endif
/*
** Don't want to interrupt something critical, hence delay
@@ -266,7 +266,7 @@ sm_allsignals(block)
# ifdef BSD4_3
# ifndef sigmask
# define sigmask(s) (1 << ((s) - 1))
-# endif /* ! sigmask */
+# endif
if (block)
{
int mask = 0;
diff --git a/contrib/sendmail/libsm/stdio.c b/contrib/sendmail/libsm/stdio.c
index 16277c09a8ec..7e045fa56fec 100644
--- a/contrib/sendmail/libsm/stdio.c
+++ b/contrib/sendmail/libsm/stdio.c
@@ -93,7 +93,7 @@ sm_stdopen(fp, info, flags, rpool)
#ifdef O_BINARY
if (SM_IS_BINARY(flags))
oflags |= O_BINARY;
-#endif /* O_BINARY */
+#endif
fp->f_file = open(path, oflags,
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
if (fp->f_file < 0)
@@ -118,7 +118,7 @@ sm_stdopen(fp, info, flags, rpool)
** Success: number of bytes read
**
** Side Effects:
-** Updates internal offset into file.
+** Updates internal offset for file.
*/
ssize_t
@@ -433,7 +433,7 @@ sm_stdfdopen(fp, info, flags, rpool)
#ifdef O_BINARY
if (SM_IS_BINARY(flags))
oflags |= O_BINARY;
-#endif /* O_BINARY */
+#endif
/* Make sure the mode the user wants is a subset of the actual mode. */
if ((fdflags = fcntl(fd, F_GETFL, 0)) < 0)
diff --git a/contrib/sendmail/libsm/strdup.c b/contrib/sendmail/libsm/strdup.c
index 3ddf73b4629e..457c09970d94 100644
--- a/contrib/sendmail/libsm/strdup.c
+++ b/contrib/sendmail/libsm/strdup.c
@@ -59,7 +59,7 @@ sm_strndup_x(s, n)
char *
sm_strdup(s)
- char *s;
+ const char *s;
{
size_t l;
char *d;
diff --git a/contrib/sendmail/libsm/strerror.c b/contrib/sendmail/libsm/strerror.c
index b6b0b668ab5a..a6130f8612c7 100644
--- a/contrib/sendmail/libsm/strerror.c
+++ b/contrib/sendmail/libsm/strerror.c
@@ -29,7 +29,7 @@ SM_RCSID("@(#)$Id: strerror.c,v 1.24 2013-11-22 20:51:43 ca Exp $")
#if !defined(ERRLIST_PREDEFINED)
extern char *sys_errlist[];
extern int sys_nerr;
-#endif /* !defined(ERRLIST_PREDEFINED) */
+#endif
#if !HASSTRERROR
diff --git a/contrib/sendmail/libsm/string.c b/contrib/sendmail/libsm/string.c
index 2b06e2c7ec78..83577f19a84e 100644
--- a/contrib/sendmail/libsm/string.c
+++ b/contrib/sendmail/libsm/string.c
@@ -54,3 +54,34 @@ stripquotes(s)
*q++ = c;
} while (c != '\0');
}
+
+/*
+** UNFOLDSTRIPQUOTES -- Strip quotes & quote bits from a string.
+**
+** Parameters:
+** s -- the string to strip.
+**
+** Returns:
+** none.
+*/
+
+void
+unfoldstripquotes(s)
+ char *s;
+{
+ char *p, *q, c;
+
+ if (s == NULL)
+ return;
+
+ p = q = s;
+ do
+ {
+ c = *p++;
+ if (c == '\\' || c == '\n')
+ c = *p++;
+ else if (c == '"')
+ continue;
+ *q++ = c;
+ } while (c != '\0');
+}
diff --git a/contrib/sendmail/libsm/strio.c b/contrib/sendmail/libsm/strio.c
index 4fae8070ad00..de13af683deb 100644
--- a/contrib/sendmail/libsm/strio.c
+++ b/contrib/sendmail/libsm/strio.c
@@ -224,18 +224,18 @@ sm_stropen(fp, info, flags, rpool)
#if SM_RPOOL
s = sm_rpool_malloc_x(rpool, sizeof(SM_STR_OBJ_T));
-#else /* SM_RPOOL */
+#else
s = sm_malloc(sizeof(SM_STR_OBJ_T));
if (s == NULL)
return -1;
-#endif /* SM_RPOOL */
+#endif
fp->f_cookie = s;
s->strio_rpool = rpool;
s->strio_offset = 0;
s->strio_size = 0;
s->strio_base = NULL;
- s->strio_end = 0;
+ s->strio_end = NULL;
switch (flags)
{
@@ -297,7 +297,7 @@ sm_strclose(fp)
#if !SM_RPOOL
sm_free(s->strio_base);
s->strio_base = NULL;
-#endif /* !SM_RPOOL */
+#endif
return 0;
}
diff --git a/contrib/sendmail/libsm/strto.c b/contrib/sendmail/libsm/strto.c
index 7f53424faf5c..af741533e3b4 100644
--- a/contrib/sendmail/libsm/strto.c
+++ b/contrib/sendmail/libsm/strto.c
@@ -158,7 +158,7 @@ sm_strtoll(nptr, endptr, base)
}
}
}
- if (endptr != 0)
+ if (endptr != NULL)
*endptr = (char *) (any ? s - 1 : nptr);
return acc;
}
@@ -248,7 +248,7 @@ sm_strtoull(nptr, endptr, base)
}
if (neg && any > 0)
acc = -((LONGLONG_T) acc);
- if (endptr != 0)
+ if (endptr != NULL)
*endptr = (char *) (any ? s - 1 : nptr);
return acc;
}
diff --git a/contrib/sendmail/libsm/syslogio.c b/contrib/sendmail/libsm/syslogio.c
index 78cf700aff35..16f3aeafd0c5 100644
--- a/contrib/sendmail/libsm/syslogio.c
+++ b/contrib/sendmail/libsm/syslogio.c
@@ -16,7 +16,7 @@ SM_RCSID("@(#)$Id: syslogio.c,v 1.30 2013-11-22 20:51:43 ca Exp $")
#include <errno.h>
#ifdef SM_RPOOL
# include <sm/rpool.h>
-#endif /* SM_RPOOL */
+#endif
#include <sm/io.h>
#include "local.h"
diff --git a/contrib/sendmail/libsm/t-event.c b/contrib/sendmail/libsm/t-event.c
index 7f08b914bb53..fcdd02b28985 100644
--- a/contrib/sendmail/libsm/t-event.c
+++ b/contrib/sendmail/libsm/t-event.c
@@ -17,7 +17,7 @@ SM_RCSID("@(#)$Id: t-event.c,v 1.14 2013-11-22 20:51:43 ca Exp $")
# include <sys/wait.h>
#if SM_CONF_SETITIMER
# include <sm/time.h>
-#endif /* SM_CONF_SETITIMER */
+#endif
#include <sm/clock.h>
#include <sm/test.h>
diff --git a/contrib/sendmail/libsm/t-exc.c b/contrib/sendmail/libsm/t-exc.c
index e0b45a86d525..3136e3f80c37 100644
--- a/contrib/sendmail/libsm/t-exc.c
+++ b/contrib/sendmail/libsm/t-exc.c
@@ -132,7 +132,7 @@ main(argc, argv)
(void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
"test 0 got an exception, as expected:\n");
sm_exc_print(exc, smioout);
-#endif /* DEBUG */
+#endif
return sm_test_end();
SM_END_TRY
diff --git a/contrib/sendmail/libsm/t-heap.c b/contrib/sendmail/libsm/t-heap.c
index d5e9e7e3f549..5e813ad333a7 100644
--- a/contrib/sendmail/libsm/t-heap.c
+++ b/contrib/sendmail/libsm/t-heap.c
@@ -19,7 +19,7 @@ SM_IDSTR(id, "@(#)$Id: t-heap.c,v 1.11 2013-11-22 20:51:43 ca Exp $")
#if SM_HEAP_CHECK
extern SM_DEBUG_T SmHeapCheck;
# define HEAP_CHECK sm_debug_active(&SmHeapCheck, 1)
-#else /* SM_HEAP_CHECK */
+#else
# define HEAP_CHECK 0
#endif /* SM_HEAP_CHECK */
@@ -58,7 +58,7 @@ main(argc, argv)
/* this will cause a core dump */
sm_dprintf("about to free %p for the second time\n", p);
sm_free(p);
-#endif /* DEBUG */
+#endif
return sm_test_end();
}
diff --git a/contrib/sendmail/libsm/t-notify.c b/contrib/sendmail/libsm/t-notify.c
new file mode 100644
index 000000000000..7103cad2559d
--- /dev/null
+++ b/contrib/sendmail/libsm/t-notify.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2016 Proofpoint, 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.
+ */
+
+#include <sm/gen.h>
+
+#include <stdio.h>
+
+# include <stdlib.h>
+# include <unistd.h>
+
+# include <sm/heap.h>
+# include <sm/string.h>
+# include <sm/test.h>
+# include <sm/notify.h>
+
+# define MAX_CNT 10
+
+/*
+** MSGTEST -- test of message queue.
+**
+** Parameters:
+** owner -- create message queue.
+**
+** Returns:
+** 0 on success
+** < 0 on failure.
+*/
+
+static int
+notifytest(owner)
+ int owner;
+{
+ int r;
+ size_t len;
+ char buf[64];
+#define TSTSTR "qf0001"
+
+ r = sm_notify_start(owner, 0);
+ if (r < 0)
+ {
+ perror("sm_notify_start failed");
+ return -1;
+ }
+
+ if (!owner)
+ {
+ len = sm_strlcpy(buf, TSTSTR, sizeof(buf));
+ r = sm_notify_snd(buf, len);
+ SM_TEST(r >= 0);
+ if (r < 0)
+ goto end;
+
+ end:
+ return r;
+ }
+ else
+ {
+ r = sm_notify_rcv(buf, sizeof(buf), 5);
+ SM_TEST(r >= 0);
+ if (r < 0)
+ return r;
+ if (r > 0 && r < sizeof(buf))
+ buf[r] = '\0';
+ buf[sizeof(buf) - 1] = '\0';
+ SM_TEST(strcmp(buf, TSTSTR) == 0);
+ fprintf(stderr, "buf=\"%s\"\n", buf);
+ }
+ return 0;
+}
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ int ch;
+ int r = 0;
+ pid_t pid;
+
+# define OPTIONS ""
+ while ((ch = getopt(argc, argv, OPTIONS)) != -1)
+ {
+ switch ((char) ch)
+ {
+ default:
+ break;
+ }
+ }
+
+ r = sm_notify_init(0);
+ if (r < 0)
+ {
+ perror("sm_notify_init failed\n");
+ return -1;
+ }
+
+ if ((pid = fork()) < 0)
+ {
+ perror("fork failed\n");
+ return -1;
+ }
+
+ sm_test_begin(argc, argv, "test notify");
+ if (pid == 0)
+ {
+ /* give the parent the chance to setup data */
+ sleep(1);
+ r = notifytest(false);
+ }
+ else
+ {
+ r = notifytest(true);
+ }
+ SM_TEST(r >= 0);
+ return sm_test_end();
+}
diff --git a/contrib/sendmail/libsm/t-scanf.c b/contrib/sendmail/libsm/t-scanf.c
index d7c20f748abd..087792ecb959 100644
--- a/contrib/sendmail/libsm/t-scanf.c
+++ b/contrib/sendmail/libsm/t-scanf.c
@@ -31,7 +31,7 @@ main(argc, argv)
"If tests for \"h == 2\" fail, check whether size_t is signed on your OS.\n\
If that is the case, add -DSM_CONF_BROKEN_SIZE_T to confENVDEF\n\
and start over. Otherwise contact sendmail.org.\n");
-#endif /* !SM_CONF_BROKEN_SIZE_T */
+#endif
d = 2;
sm_snprintf(buf, sizeof(buf), "%d", d);
diff --git a/contrib/sendmail/libsm/t-sem.c b/contrib/sendmail/libsm/t-sem.c
index 4232b096ead7..b13e159ecebe 100644
--- a/contrib/sendmail/libsm/t-sem.c
+++ b/contrib/sendmail/libsm/t-sem.c
@@ -33,12 +33,12 @@ delay(t, s)
{
#if DEBUG
fprintf(stderr, "sleep(%d) before %s\n", t, s);
-#endif /* DEBUG */
+#endif
sleep(t);
}
#if DEBUG
fprintf(stderr, "%s\n", s);
-#endif /* DEBUG */
+#endif
}
diff --git a/contrib/sendmail/libsm/vfprintf.c b/contrib/sendmail/libsm/vfprintf.c
index 87c353c1bf14..b90a305b04d8 100644
--- a/contrib/sendmail/libsm/vfprintf.c
+++ b/contrib/sendmail/libsm/vfprintf.c
@@ -538,16 +538,16 @@ reswitch: switch (ch)
#if HASSNPRINTF
snprintf(out, sizeof(out), fmt, width,
prec, val);
-#else /* HASSNPRINTF */
+#else
sprintf(out, fmt, width, prec, val);
-#endif /* HASSNPRINTF */
+#endif
else
#if HASSNPRINTF
snprintf(out, sizeof(out), fmt, width,
val);
-#else /* HASSNPRINTF */
+#else
sprintf(out, fmt, width, val);
-#endif /* HASSNPRINTF */
+#endif
len = strlen(out);
PRINT(out, len);
FLUSH();
@@ -782,6 +782,7 @@ number: if ((dprec = prec) >= 0)
done:
FLUSH();
error:
+ SM_VA_END_COPY(orgap);
if ((argtable != NULL) && (argtable != statargtable))
sm_free(argtable);
return sm_error(fp) ? SM_IO_EOF : ret;
diff --git a/contrib/sendmail/libsm/vfscanf.c b/contrib/sendmail/libsm/vfscanf.c
index d043a1135884..c367f7682e37 100644
--- a/contrib/sendmail/libsm/vfscanf.c
+++ b/contrib/sendmail/libsm/vfscanf.c
@@ -110,7 +110,7 @@ sm_vfscanf(fp, timeout, fmt0, ap)
register SM_FILE_T *fp;
int SM_NONVOLATILE timeout;
char const *fmt0;
- va_list SM_NONVOLATILE ap;
+ va_list ap;
{
register unsigned char *SM_NONVOLATILE fmt = (unsigned char *) fmt0;
register int c; /* character from format, or conversion */
@@ -828,7 +828,7 @@ doswitch:
** z', but treats `a-a' as `the letter a, the
** character -, and the letter a'.
**
- ** For compatibility, the `-' is not considerd
+ ** For compatibility, the `-' is not considered
** to define a range if the character following
** it is either a close bracket (required by ANSI)
** or is not numerically greater than the character
diff --git a/contrib/sendmail/libsmdb/Makefile b/contrib/sendmail/libsmdb/Makefile
index 13c8af07a52c..ce0e752abc0a 100644
--- a/contrib/sendmail/libsmdb/Makefile
+++ b/contrib/sendmail/libsmdb/Makefile
@@ -8,6 +8,8 @@ all: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
clean: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
+check: FRC
+ $(SHELL) $(BUILD) $(OPTIONS) $@
install: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
diff --git a/contrib/sendmail/libsmdb/Makefile.m4 b/contrib/sendmail/libsmdb/Makefile.m4
index dfd62fa6a37e..69299e53fce0 100644
--- a/contrib/sendmail/libsmdb/Makefile.m4
+++ b/contrib/sendmail/libsmdb/Makefile.m4
@@ -8,7 +8,7 @@ PREPENDDEF(`confENVDEF', `confMAPDEF')
PREPENDDEF(`confINCDIRS', `-I${SMSRCDIR} ')
bldPRODUCT_START(`library', `libsmdb')
-define(`bldSOURCES', `smdb.c smdb1.c smdb2.c smndbm.c ')
+define(`bldSOURCES', `smdb.c smdb1.c smdb2.c smndbm.c smcdb.c ')
APPENDDEF(`confENVDEF', `-DNOT_SENDMAIL')
bldPRODUCT_END
diff --git a/contrib/sendmail/libsmdb/smcdb.c b/contrib/sendmail/libsmdb/smcdb.c
new file mode 100644
index 000000000000..84c1a9e1f90c
--- /dev/null
+++ b/contrib/sendmail/libsmdb/smcdb.c
@@ -0,0 +1,575 @@
+/*
+** Copyright (c) 2018 Proofpoint, 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.
+*/
+
+#include <sm/gen.h>
+SM_RCSID("@(#)$Id: smcdb.c,v 8.55 2013-11-22 20:51:49 ca Exp $")
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <sendmail/sendmail.h>
+#include <libsmdb/smdb.h>
+
+#if CDB
+#include <assert.h>
+#include <cdb.h>
+
+typedef struct cdb cdb_map_T, *cdb_map_P;
+typedef struct cdb_make cdb_make_T, *cdb_make_P;
+typedef union sm_cdbs_U sm_cdbs_T, *sm_cdbs_P;
+union sm_cdbs_U
+{
+ cdb_map_T cdbs_cdb_rd;
+ cdb_make_T cdbs_cdb_wr;
+};
+
+struct smdb_cdb_database
+{
+ sm_cdbs_T cdbmap_map;
+ int cdbmap_fd;
+ int smcdb_lock_fd;
+ bool cdbmap_create;
+ unsigned smcdb_pos;
+ int smcdb_n;
+};
+typedef struct smdb_cdb_database SMDB_CDB_DATABASE;
+
+/* static int smdb_type_to_cdb_type __P((SMDB_DBTYPE type)); */
+static int cdb_error_to_smdb __P((int error));
+static SMDB_CDB_DATABASE * smcdb_malloc_database __P((void));
+static int smcdb_close __P((SMDB_DATABASE *database));
+static int smcdb_del __P((SMDB_DATABASE *database, SMDB_DBENT *key, unsigned int flags));
+static int smcdb_fd __P((SMDB_DATABASE *database, int *fd));
+static int smcdb_lockfd __P((SMDB_DATABASE *database));
+static int smcdb_get __P((SMDB_DATABASE *database, SMDB_DBENT *key, SMDB_DBENT *data, unsigned int flags));
+static int smcdb_put __P((SMDB_DATABASE *database, SMDB_DBENT *key, SMDB_DBENT *data, unsigned int flags));
+static int smcdb_set_owner __P((SMDB_DATABASE *database, uid_t uid, gid_t gid));
+static int smcdb_sync __P((SMDB_DATABASE *database, unsigned int flags));
+static int smcdb_cursor_close __P((SMDB_CURSOR *cursor));
+static int smcdb_cursor_del __P((SMDB_CURSOR *cursor, SMDB_FLAG flags));
+static int smcdb_cursor_get __P((SMDB_CURSOR *cursor, SMDB_DBENT *key, SMDB_DBENT *value, SMDB_FLAG flags));
+static int smcdb_cursor_put __P((SMDB_CURSOR *cursor, SMDB_DBENT *key, SMDB_DBENT *value, SMDB_FLAG flags));
+static int smcdb_cursor __P((SMDB_DATABASE *database, SMDB_CURSOR **cursor, SMDB_FLAG flags));
+
+/*
+** SMDB_TYPE_TO_CDB_TYPE -- Translates smdb database type to cdb type.
+**
+** Parameters:
+** type -- The type to translate.
+**
+** Returns:
+** The CDB type that corresponsds to the passed in SMDB type.
+** Returns -1 if there is no equivalent type.
+**
+*/
+
+#if 0
+static int
+smdb_type_to_cdb_type(type)
+ SMDB_DBTYPE type;
+{
+ return 0; /* XXX */
+}
+#endif
+
+/*
+** CDB_ERROR_TO_SMDB -- Translates cdb errors to smdbe errors
+**
+** Parameters:
+** error -- The error to translate.
+**
+** Returns:
+** The SMDBE error corresponding to the cdb error.
+** If we don't have a corresponding error, it returns error.
+**
+*/
+
+static int
+cdb_error_to_smdb(error)
+ int error;
+{
+ int result;
+
+ switch (error)
+ {
+ case 0:
+ result = SMDBE_OK;
+ break;
+
+ default:
+ result = error;
+ }
+ return result;
+}
+
+SMDB_CDB_DATABASE *
+smcdb_malloc_database()
+{
+ SMDB_CDB_DATABASE *cdb;
+
+ cdb = (SMDB_CDB_DATABASE *) malloc(sizeof(SMDB_CDB_DATABASE));
+ if (cdb != NULL)
+ cdb->smcdb_lock_fd = -1;
+
+ return cdb;
+}
+
+static int
+smcdb_close(database)
+ SMDB_DATABASE *database;
+{
+ int result, fd;
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+
+ if (NULL == sm_cdbmap)
+ return -1;
+ result = 0;
+ if (sm_cdbmap->cdbmap_create)
+ result = cdb_make_finish(&sm_cdbmap->cdbmap_map.cdbs_cdb_wr);
+
+ fd = sm_cdbmap->cdbmap_fd;
+ if (fd >= 0)
+ {
+ close(fd);
+ sm_cdbmap->cdbmap_fd = -1;
+ }
+
+ free(sm_cdbmap);
+ database->smdb_impl = NULL;
+
+ return result;
+}
+
+static int
+smcdb_del(database, key, flags)
+ SMDB_DATABASE *database;
+ SMDB_DBENT *key;
+ unsigned int flags;
+{
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+
+ assert(sm_cdbmap != NULL);
+ return -1;
+}
+
+static int
+smcdb_fd(database, fd)
+ SMDB_DATABASE *database;
+ int *fd;
+{
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+ return sm_cdbmap->cdbmap_fd;
+}
+
+static int
+smcdb_lockfd(database)
+ SMDB_DATABASE *database;
+{
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+
+ return sm_cdbmap->smcdb_lock_fd;
+}
+
+/*
+** allocate/free: who does it: caller or callee?
+** If this code does it: the "last" entry will leak.
+*/
+
+#define DBEALLOC(dbe, l) \
+ do \
+ { \
+ if ((dbe)->size > 0 && l > (dbe)->size) \
+ { \
+ free((dbe)->data); \
+ (dbe)->size = 0; \
+ } \
+ if ((dbe)->size == 0) \
+ { \
+ (dbe)->data = malloc(l); \
+ if ((dbe)->data == NULL) \
+ return SMDBE_MALLOC; \
+ (dbe)->size = l; \
+ } \
+ if (l > (dbe)->size) \
+ return SMDBE_MALLOC; /* XXX bogus */ \
+ } while (0)
+
+
+static int
+smcdb_get(database, key, data, flags)
+ SMDB_DATABASE *database;
+ SMDB_DBENT *key;
+ SMDB_DBENT *data;
+ unsigned int flags;
+{
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+ size_t l;
+ int ret;
+
+ ret = SM_SUCCESS;
+
+ if (NULL == sm_cdbmap )
+ return -1;
+ /* SM_ASSERT(!sm_cdbmap->cdbmap_create); */
+
+ /* need to lock access? single threaded access! */
+ ret = cdb_find(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd,
+ key->data, key->size);
+ if (ret > 0)
+ {
+ l = cdb_datalen(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd);
+ DBEALLOC(data, l);
+ ret = cdb_read(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd,
+ data->data, l,
+ cdb_datapos(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd));
+ if (ret < 0)
+ ret = -1;
+ else
+ {
+ data->size = l;
+ ret = SM_SUCCESS;
+ }
+ }
+ else
+ ret = -1;
+
+ return ret;
+}
+
+static int
+smcdb_put(database, key, data, flags)
+ SMDB_DATABASE *database;
+ SMDB_DBENT *key;
+ SMDB_DBENT *data;
+ unsigned int flags;
+{
+ int r, cdb_flags;
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+
+ assert(sm_cdbmap != NULL);
+ if (bitset(SMDBF_NO_OVERWRITE, flags))
+ cdb_flags = CDB_PUT_INSERT;
+ else
+ cdb_flags = CDB_PUT_REPLACE;
+
+ r = cdb_make_put(&sm_cdbmap->cdbmap_map.cdbs_cdb_wr,
+ key->data, key->size, data->data, data->size,
+ cdb_flags);
+ if (r > 0)
+ {
+ if (bitset(SMDBF_NO_OVERWRITE, flags))
+ return SMDBE_DUPLICATE;
+ else
+ return SMDBE_OK;
+ }
+ return r;
+}
+
+
+static int
+smcdb_set_owner(database, uid, gid)
+ SMDB_DATABASE *database;
+ uid_t uid;
+ gid_t gid;
+{
+# if HASFCHOWN
+ int fd;
+ int result;
+ SMDB_CDB_DATABASE *sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+
+ assert(sm_cdbmap != NULL);
+ fd = sm_cdbmap->cdbmap_fd;
+ if (fd >= 0)
+ {
+ result = fchown(fd, uid, gid);
+ if (result < 0)
+ return errno;
+ }
+# endif /* HASFCHOWN */
+
+ return SMDBE_OK;
+}
+
+static int
+smcdb_sync(database, flags)
+ SMDB_DATABASE *database;
+ unsigned int flags;
+{
+ return 0;
+}
+
+static int
+smcdb_cursor_close(cursor)
+ SMDB_CURSOR *cursor;
+{
+ int ret;
+
+ ret = SMDBE_OK;
+ if (cursor != NULL)
+ free(cursor);
+ return ret;
+}
+
+static int
+smcdb_cursor_del(cursor, flags)
+ SMDB_CURSOR *cursor;
+ SMDB_FLAG flags;
+{
+ return -1;
+}
+
+static int
+smcdb_cursor_get(cursor, key, value, flags)
+ SMDB_CURSOR *cursor;
+ SMDB_DBENT *key;
+ SMDB_DBENT *value;
+ SMDB_FLAG flags;
+{
+ SMDB_CDB_DATABASE *sm_cdbmap;
+ size_t l;
+ int ret;
+
+ ret = SMDBE_OK;
+ sm_cdbmap = cursor->smdbc_impl;
+ ret = cdb_seqnext(&sm_cdbmap->smcdb_pos, &sm_cdbmap->cdbmap_map.cdbs_cdb_rd);
+ if (ret == 0)
+ return SMDBE_LAST_ENTRY;
+ if (ret < 0)
+ return SMDBE_IO_ERROR;
+
+ l = cdb_keylen(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd);
+ DBEALLOC(key, l);
+
+ ret = cdb_read(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd,
+ key->data, l,
+ cdb_keypos(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd));
+ if (ret < 0)
+ return SMDBE_IO_ERROR;
+ key->size = l;
+
+ l = cdb_datalen(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd);
+
+ DBEALLOC(value, l);
+ ret = cdb_read(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd,
+ value->data, l,
+ cdb_datapos(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd));
+ if (ret < 0)
+ return SMDBE_IO_ERROR;
+ value->size = l;
+
+ return SMDBE_OK;
+}
+
+static int
+smcdb_cursor_put(cursor, key, value, flags)
+ SMDB_CURSOR *cursor;
+ SMDB_DBENT *key;
+ SMDB_DBENT *value;
+ SMDB_FLAG flags;
+{
+ return -1;
+}
+
+static int
+smcdb_cursor(database, cursor, flags)
+ SMDB_DATABASE *database;
+ SMDB_CURSOR **cursor;
+ SMDB_FLAG flags;
+{
+ int result;
+ SMDB_CDB_DATABASE *sm_cdbmap;
+
+ result = SMDBE_OK;
+ *cursor = (SMDB_CURSOR *) malloc(sizeof(SMDB_CURSOR));
+ if (*cursor == NULL)
+ return SMDBE_MALLOC;
+
+ sm_cdbmap = (SMDB_CDB_DATABASE *) database->smdb_impl;
+ (*cursor)->smdbc_close = smcdb_cursor_close;
+ (*cursor)->smdbc_del = smcdb_cursor_del;
+ (*cursor)->smdbc_get = smcdb_cursor_get;
+ (*cursor)->smdbc_put = smcdb_cursor_put;
+ (*cursor)->smdbc_impl = sm_cdbmap;
+
+ cdb_seqinit(&sm_cdbmap->smcdb_pos, &sm_cdbmap->cdbmap_map.cdbs_cdb_rd);
+
+ return result;
+}
+
+/*
+** SMDB_DB_OPEN -- Opens a db database.
+**
+** Parameters:
+** database -- An unallocated database pointer to a pointer.
+** db_name -- The name of the database without extension.
+** mode -- File permisions for a created database.
+** mode_mask -- Mode bits that must match on an opened database.
+** sff -- Flags for safefile.
+** type -- The type of database to open
+** See smdb_type_to_cdb_type for valid types.
+** user_info -- User information for file permissions.
+** db_params --
+** An SMDB_DBPARAMS struct including params. These
+** are processed according to the type of the
+** database. Currently supported params (only for
+** HASH type) are:
+** num_elements
+** cache_size
+**
+** Returns:
+** SMDBE_OK -- Success, other errno:
+** SMDBE_MALLOC -- Cannot allocate memory.
+** SMDBE_BAD_OPEN -- db_open didn't return an error, but
+** somehow the DB pointer is NULL.
+** Anything else: translated error from cdb
+*/
+
+int
+smdb_cdb_open(database, db_name, mode, mode_mask, sff, type, user_info, db_params)
+ SMDB_DATABASE **database;
+ char *db_name;
+ int mode;
+ int mode_mask;
+ long sff;
+ SMDB_DBTYPE type;
+ SMDB_USER_INFO *user_info;
+ SMDB_DBPARAMS *db_params;
+{
+ bool lockcreated = false;
+ int result;
+ int lock_fd;
+ int db_fd;
+ SMDB_DATABASE *smdb_db;
+ SMDB_CDB_DATABASE *sm_cdbmap;
+ struct stat stat_info;
+ char db_file_name[MAXPATHLEN];
+
+ *database = NULL;
+ result = smdb_add_extension(db_file_name, sizeof db_file_name,
+ db_name, SMCDB_FILE_EXTENSION);
+ if (result != SMDBE_OK)
+ return result;
+
+ result = smdb_setup_file(db_name, SMCDB_FILE_EXTENSION,
+ mode_mask, sff, user_info, &stat_info);
+ if (result != SMDBE_OK)
+ return result;
+
+ lock_fd = -1;
+
+ if (stat_info.st_mode == ST_MODE_NOFILE &&
+ bitset(mode, O_CREAT))
+ lockcreated = true;
+
+ result = smdb_lock_file(&lock_fd, db_name, mode, sff,
+ SMCDB_FILE_EXTENSION);
+ if (result != SMDBE_OK)
+ return result;
+
+ if (lockcreated)
+ {
+ mode |= O_TRUNC;
+ mode &= ~(O_CREAT|O_EXCL);
+ }
+
+ smdb_db = smdb_malloc_database();
+ sm_cdbmap = smcdb_malloc_database();
+ if (sm_cdbmap == NULL || smdb_db == NULL)
+ {
+ smdb_unlock_file(lock_fd);
+ smdb_free_database(smdb_db); /* ok to be NULL */
+ if (sm_cdbmap != NULL)
+ free(sm_cdbmap);
+ return SMDBE_MALLOC;
+ }
+
+ sm_cdbmap->smcdb_lock_fd = lock_fd;
+
+#if 0
+ db = NULL;
+ db_flags = 0;
+ if (bitset(O_CREAT, mode))
+ db_flags |= DB_CREATE;
+ if (bitset(O_TRUNC, mode))
+ db_flags |= DB_TRUNCATE;
+ if (mode == O_RDONLY)
+ db_flags |= DB_RDONLY;
+ SM_DB_FLAG_ADD(db_flags);
+#endif
+
+ result = -1; /* smdb_db_open_internal(db_file_name, db_type, db_flags, db_params, &db); */
+ db_fd = open(db_file_name, mode, DBMMODE);
+ if (db_fd == -1)
+ {
+ result = SMDBE_BAD_OPEN;
+ goto error;
+ }
+
+ sm_cdbmap->cdbmap_create = (mode != O_RDONLY);
+ if (mode == O_RDONLY)
+ result = cdb_init(&sm_cdbmap->cdbmap_map.cdbs_cdb_rd, db_fd);
+ else
+ result = cdb_make_start(&sm_cdbmap->cdbmap_map.cdbs_cdb_wr, db_fd);
+ if (result != 0)
+ {
+ result = SMDBE_BAD_OPEN;
+ goto error;
+ }
+
+ if (result == 0)
+ result = SMDBE_OK;
+ else
+ {
+ /* Try and narrow down on the problem */
+ if (result != 0)
+ result = cdb_error_to_smdb(result);
+ else
+ result = SMDBE_BAD_OPEN;
+ }
+
+ if (result == SMDBE_OK)
+ result = smdb_filechanged(db_name, SMCDB_FILE_EXTENSION, db_fd,
+ &stat_info);
+
+ if (result == SMDBE_OK)
+ {
+ /* Everything is ok. Setup driver */
+ /* smdb_db->smcdb_db = sm_cdbmap; */
+
+ smdb_db->smdb_close = smcdb_close;
+ smdb_db->smdb_del = smcdb_del;
+ smdb_db->smdb_fd = smcdb_fd;
+ smdb_db->smdb_lockfd = smcdb_lockfd;
+ smdb_db->smdb_get = smcdb_get;
+ smdb_db->smdb_put = smcdb_put;
+ smdb_db->smdb_set_owner = smcdb_set_owner;
+ smdb_db->smdb_sync = smcdb_sync;
+ smdb_db->smdb_cursor = smcdb_cursor;
+ smdb_db->smdb_impl = sm_cdbmap;
+
+ *database = smdb_db;
+
+ return SMDBE_OK;
+ }
+
+ error:
+ if (sm_cdbmap != NULL)
+ {
+ /* close */
+ }
+
+ smdb_unlock_file(sm_cdbmap->smcdb_lock_fd);
+ free(sm_cdbmap);
+ smdb_free_database(smdb_db);
+
+ return result;
+}
+
+#endif /* CDB */
diff --git a/contrib/sendmail/libsmdb/smdb.c b/contrib/sendmail/libsmdb/smdb.c
index 96473b89b173..9091b52520fa 100644
--- a/contrib/sendmail/libsmdb/smdb.c
+++ b/contrib/sendmail/libsmdb/smdb.c
@@ -21,13 +21,13 @@ SM_RCSID("@(#)$Id: smdb.c,v 8.59 2013-11-22 20:51:49 ca Exp $")
static bool smdb_lockfile __P((int, int));
/*
-** SMDB_MALLOC_DATABASE -- Allocates a database structure.
+** SMDB_MALLOC_DATABASE -- Allocates a database structure.
**
** Parameters:
** None
**
** Returns:
-** An pointer to an allocated SMDB_DATABASE structure or
+** A pointer to an allocated SMDB_DATABASE structure or
** NULL if it couldn't allocate the memory.
*/
@@ -44,9 +44,8 @@ smdb_malloc_database()
return db;
}
-
/*
-** SMDB_FREE_DATABASE -- Unallocates a database structure.
+** SMDB_FREE_DATABASE -- Unallocates a database structure.
**
** Parameters:
** database -- a SMDB_DATABASE pointer to deallocate.
@@ -62,6 +61,7 @@ smdb_free_database(database)
if (database != NULL)
free(database);
}
+
/*
** SMDB_LOCKFILE -- lock a file using flock or (shudder) fcntl locking
**
@@ -155,16 +155,16 @@ smdb_lockfile(fd, type)
errno = save_errno;
return false;
}
+
/*
-** SMDB_OPEN_DATABASE -- Opens a database.
+** SMDB_OPEN_DATABASE -- Opens a database.
**
** This opens a database. If type is SMDB_DEFAULT it tries to
-** use a DB1 or DB2 hash. If that isn't available, it will try
-** to use NDBM. If a specific type is given it will try to open
-** a database of that type.
+** use available DB types. If a specific type is given it will
+** try to open a database of that type.
**
** Parameters:
-** database -- An pointer to a SMDB_DATABASE pointer where the
+** database -- A pointer to a SMDB_DATABASE pointer where the
** opened database will be stored. This should
** be unallocated.
** db_name -- The name of the database to open. Do not include
@@ -186,6 +186,20 @@ smdb_lockfile(fd, type)
** error in the comments for the specific open() used.
*/
+struct type2func_s
+{
+ const char *t2f_type;
+ smdb_open_func *t2f_open_fun;
+};
+typedef struct type2func_s type2func_t;
+static type2func_t type2func[] = {
+ { SMDB_TYPE_HASH, smdb_db_open },
+ { SMDB_TYPE_BTREE, smdb_db_open },
+ { SMDB_TYPE_NDBM, smdb_ndbm_open},
+ { SMDB_TYPE_CDB, smdb_cdb_open },
+ { NULL, NULL }
+};
+
int
smdb_open_database(database, db_name, mode, mode_mask, sff, type, user_info,
params)
@@ -198,63 +212,44 @@ smdb_open_database(database, db_name, mode, mode_mask, sff, type, user_info,
SMDB_USER_INFO *user_info;
SMDB_DBPARAMS *params;
{
-#if defined(NEWDB) && defined(NDBM)
- bool type_was_default = false;
-#endif
-
- if (type == SMDB_TYPE_DEFAULT)
- {
-#ifdef NEWDB
-# ifdef NDBM
- type_was_default = true;
-# endif
- type = SMDB_TYPE_HASH;
-#else /* NEWDB */
-# ifdef NDBM
- type = SMDB_TYPE_NDBM;
-# endif /* NDBM */
-#endif /* NEWDB */
- }
-
- if (type == SMDB_TYPE_DEFAULT)
- return SMDBE_UNKNOWN_DB_TYPE;
-
- if ((strncmp(type, SMDB_TYPE_HASH, SMDB_TYPE_HASH_LEN) == 0) ||
- (strncmp(type, SMDB_TYPE_BTREE, SMDB_TYPE_BTREE_LEN) == 0))
+ bool type_was_default;
+ int result, i;
+ const char *smdb_type;
+ smdb_open_func *smdb_open_fun;
+
+ result = SMDBE_UNSUPPORTED_DB_TYPE;
+ type_was_default = SMDB_IS_TYPE_DEFAULT(type);
+ for (i = 0; (smdb_type = type2func[i].t2f_type) != NULL; i++)
{
-#ifdef NEWDB
- int result;
-
- result = smdb_db_open(database, db_name, mode, mode_mask, sff,
- type, user_info, params);
-# ifdef NDBM
- if (result == ENOENT && type_was_default)
- type = SMDB_TYPE_NDBM;
- else
-# endif /* NDBM */
- return result;
-#else /* NEWDB */
- return SMDBE_UNSUPPORTED_DB_TYPE;
-#endif /* NEWDB */
- }
-
- if (strncmp(type, SMDB_TYPE_NDBM, SMDB_TYPE_NDBM_LEN) == 0)
- {
-#ifdef NDBM
- int result;
-
- result = smdb_ndbm_open(database, db_name, mode, mode_mask,
- sff, type, user_info, params);
- return result;
-#else /* NDBM */
- return SMDBE_UNSUPPORTED_DB_TYPE;
-#endif /* NDBM */
+ if (!type_was_default && strcmp(type, smdb_type) != 0)
+ continue;
+ smdb_open_fun = type2func[i].t2f_open_fun;
+ if (smdb_open_fun == NULL)
+ {
+ if (type_was_default)
+ continue;
+ else
+ return SMDBE_UNSUPPORTED_DB_TYPE;
+ }
+ result = (*smdb_open_fun)(database, db_name, mode, mode_mask, sff,
+ (char *)smdb_type, user_info, params);
+ if (!((result == ENOENT
+ || result == EINVAL
+#ifdef EFTYPE
+ || result == EFTYPE
+#endif
+ )
+ && type_was_default))
+ goto ret;
}
-
return SMDBE_UNKNOWN_DB_TYPE;
+
+ ret:
+ return result;
}
+
/*
-** SMDB_ADD_EXTENSION -- Adds an extension to a file name.
+** SMDB_ADD_EXTENSION -- Adds an extension to a file name.
**
** Just adds a . followed by a string to a db_name if there
** is room and the db_name does not already have that extension.
@@ -488,8 +483,9 @@ smdb_filechanged(db_name, extension, db_fd, stat_info)
return result;
return filechanged(db_file_name, db_fd, stat_info);
}
+
/*
-** SMDB_PRINT_AVAILABLE_TYPES -- Prints the names of the available types.
+** SMDB_PRINT_AVAILABLE_TYPES -- Prints the names of the available types.
**
** Parameters:
** None
@@ -499,18 +495,62 @@ smdb_filechanged(db_name, extension, db_fd, stat_info)
*/
void
-smdb_print_available_types()
+smdb_print_available_types(ext)
+ bool ext;
{
-#ifdef NDBM
- printf("dbm\n");
-#endif /* NDBM */
-#ifdef NEWDB
- printf("hash\n");
- printf("btree\n");
-#endif /* NEWDB */
+# define PEXT1 ((ext) ? ":" : "")
+# define PEXT2(x) ((ext) ? x : "")
+
+#if NDBM
+ printf("%s%s%s\n", SMDB_TYPE_NDBM, PEXT1, PEXT2(SMNDB_DIR_FILE_EXTENSION));
+#endif
+#if NEWDB
+/* # if SMDB1_FILE_EXTENSION == SMDB2_FILE_EXTENSION */
+ printf("%s%s%s\n", SMDB_TYPE_HASH, PEXT1, PEXT2(SMDB1_FILE_EXTENSION));
+ printf("%s%s%s\n", SMDB_TYPE_BTREE, PEXT1, PEXT2(SMDB1_FILE_EXTENSION));
+#endif
+#if CDB
+ printf("%s%s%s\n", SMDB_TYPE_CDB, PEXT1, PEXT2(SMCDB_FILE_EXTENSION));
+#endif
+#ifdef SMDB_TYPE_IMPL
+ printf("%s%s%s\n", SMDB_TYPE_IMPL, PEXT1, "");
+#endif
+}
+
+/*
+** SMDB_IS_DB_TYPE -- Does a name match an available DB type?
+**
+** Parameters:
+** type -- The name of the database type.
+**
+** Returns:
+** true iff match
+*/
+
+bool
+smdb_is_db_type(db_type)
+ const char *db_type;
+{
+#if NDBM
+ if (strcmp(db_type, SMDB_TYPE_NDBM) == 0)
+ return true;
+#endif
+#if NEWDB
+ if (strcmp(db_type, SMDB_TYPE_HASH) == 0)
+ return true;
+ if (strcmp(db_type, SMDB_TYPE_BTREE) == 0)
+ return true;
+#endif
+#if CDB
+ if (strcmp(db_type, SMDB_TYPE_CDB) == 0)
+ return true;
+#endif
+ return false;
}
+
+
/*
-** SMDB_DB_DEFINITION -- Given a database type, return database definition
+** SMDB_DB_DEFINITION -- Given a database type, return database definition
**
** Reads though a structure making an association with the database
** type and the required cpp define from sendmail/README.
@@ -534,6 +574,7 @@ static dbtype DatabaseDefs[] =
{ SMDB_TYPE_HASH, "NEWDB" },
{ SMDB_TYPE_BTREE, "NEWDB" },
{ SMDB_TYPE_NDBM, "NDBM" },
+ { SMDB_TYPE_CDB, "CDB" },
{ NULL, "OOPS" }
};
diff --git a/contrib/sendmail/libsmdb/smdb1.c b/contrib/sendmail/libsmdb/smdb1.c
index 9d4e958032a7..85dc7fcaf74c 100644
--- a/contrib/sendmail/libsmdb/smdb1.c
+++ b/contrib/sendmail/libsmdb/smdb1.c
@@ -19,8 +19,6 @@ SM_RCSID("@(#)$Id: smdb1.c,v 8.63 2013-11-22 20:51:49 ca Exp $")
#if (DB_VERSION_MAJOR == 1)
-# define SMDB1_FILE_EXTENSION "db"
-
struct smdb_db1_struct
{
DB *smdb1_db;
@@ -72,10 +70,10 @@ smdb_type_to_db1_type(type)
if (type == SMDB_TYPE_DEFAULT)
return DB_HASH;
- if (strncmp(type, SMDB_TYPE_HASH, SMDB_TYPE_HASH_LEN) == 0)
+ if (SMDB_IS_TYPE_HASH(type))
return DB_HASH;
- if (strncmp(type, SMDB_TYPE_BTREE, SMDB_TYPE_BTREE_LEN) == 0)
+ if (SMDB_IS_TYPE_BTREE(type))
return DB_BTREE;
/* Should never get here thanks to test in smdb_db_open() */
@@ -471,8 +469,8 @@ smdb_db_open(database, db_name, mode, mode_mask, sff, type, user_info,
char db_file_name[MAXPATHLEN];
if (type == NULL ||
- (strncmp(SMDB_TYPE_HASH, type, SMDB_TYPE_HASH_LEN) != 0 &&
- strncmp(SMDB_TYPE_BTREE, type, SMDB_TYPE_BTREE_LEN) != 0))
+ (!SMDB_IS_TYPE_HASH(type) && !SMDB_IS_TYPE_BTREE(type)
+ ))
return SMDBE_UNKNOWN_DB_TYPE;
result = smdb_add_extension(db_file_name, sizeof db_file_name,
@@ -515,8 +513,7 @@ smdb_db_open(database, db_name, mode, mode_mask, sff, type, user_info,
db1->smdb1_lock_fd = lock_fd;
params = NULL;
- if (db_params != NULL &&
- (strncmp(SMDB_TYPE_HASH, type, SMDB_TYPE_HASH_LEN) == 0))
+ if (db_params != NULL && SMDB_IS_TYPE_HASH(type))
{
(void) memset(&hash_info, '\0', sizeof hash_info);
hash_info.nelem = db_params->smdbp_num_elements;
@@ -524,8 +521,7 @@ smdb_db_open(database, db_name, mode, mode_mask, sff, type, user_info,
params = &hash_info;
}
- if (db_params != NULL &&
- (strncmp(SMDB_TYPE_BTREE, type, SMDB_TYPE_BTREE_LEN) == 0))
+ if (db_params != NULL && SMDB_IS_TYPE_BTREE(type))
{
(void) memset(&btree_info, '\0', sizeof btree_info);
btree_info.cachesize = db_params->smdbp_cache_size;
diff --git a/contrib/sendmail/libsmdb/smdb2.c b/contrib/sendmail/libsmdb/smdb2.c
index 403040307a97..d208efb40324 100644
--- a/contrib/sendmail/libsmdb/smdb2.c
+++ b/contrib/sendmail/libsmdb/smdb2.c
@@ -20,8 +20,6 @@ SM_RCSID("@(#)$Id: smdb2.c,v 8.83 2013-11-22 20:51:49 ca Exp $")
#if (DB_VERSION_MAJOR >= 2)
-# define SMDB2_FILE_EXTENSION "db"
-
struct smdb_db2_database
{
DB *smdb2_db;
@@ -41,17 +39,17 @@ typedef struct smdb_db2_database SMDB_DB2_DATABASE;
**
*/
-DBTYPE
+static DBTYPE
smdb_type_to_db2_type(type)
SMDB_DBTYPE type;
{
if (type == SMDB_TYPE_DEFAULT)
return DB_HASH;
- if (strncmp(type, SMDB_TYPE_HASH, SMDB_TYPE_HASH_LEN) == 0)
+ if (SMDB_IS_TYPE_HASH(type))
return DB_HASH;
- if (strncmp(type, SMDB_TYPE_BTREE, SMDB_TYPE_BTREE_LEN) == 0)
+ if (SMDB_IS_TYPE_BTREE(type))
return DB_BTREE;
return DB_UNKNOWN;
@@ -64,11 +62,11 @@ smdb_type_to_db2_type(type)
**
** Returns:
** The SMDBE error corresponding to the db2 error.
-** If we don't have a corresponding error, it returs errno.
+** If we don't have a corresponding error, it returns errno.
**
*/
-int
+static int
db2_error_to_smdb(error)
int error;
{
@@ -80,55 +78,55 @@ db2_error_to_smdb(error)
case DB_INCOMPLETE:
result = SMDBE_INCOMPLETE;
break;
-# endif /* DB_INCOMPLETE */
+# endif
# ifdef DB_NOTFOUND
case DB_NOTFOUND:
result = SMDBE_NOT_FOUND;
break;
-# endif /* DB_NOTFOUND */
+# endif
# ifdef DB_KEYEMPTY
case DB_KEYEMPTY:
result = SMDBE_KEY_EMPTY;
break;
-# endif /* DB_KEYEMPTY */
+# endif
# ifdef DB_KEYEXIST
case DB_KEYEXIST:
result = SMDBE_KEY_EXIST;
break;
-# endif /* DB_KEYEXIST */
+# endif
# ifdef DB_LOCK_DEADLOCK
case DB_LOCK_DEADLOCK:
result = SMDBE_LOCK_DEADLOCK;
break;
-# endif /* DB_LOCK_DEADLOCK */
+# endif
# ifdef DB_LOCK_NOTGRANTED
case DB_LOCK_NOTGRANTED:
result = SMDBE_LOCK_NOT_GRANTED;
break;
-# endif /* DB_LOCK_NOTGRANTED */
+# endif
# ifdef DB_LOCK_NOTHELD
case DB_LOCK_NOTHELD:
result = SMDBE_LOCK_NOT_HELD;
break;
-# endif /* DB_LOCK_NOTHELD */
+# endif
# ifdef DB_RUNRECOVERY
case DB_RUNRECOVERY:
result = SMDBE_RUN_RECOVERY;
break;
-# endif /* DB_RUNRECOVERY */
+# endif
# ifdef DB_OLD_VERSION
case DB_OLD_VERSION:
result = SMDBE_OLD_VERSION;
break;
-# endif /* DB_OLD_VERSION */
+# endif
case 0:
result = SMDBE_OK;
@@ -153,7 +151,7 @@ db2_error_to_smdb(error)
**
*/
-unsigned int
+static unsigned int
smdb_put_flags_to_db2_flags(flags)
SMDB_FLAG flags;
{
@@ -181,7 +179,7 @@ smdb_put_flags_to_db2_flags(flags)
**
*/
-int
+static int
smdb_cursor_get_flags_to_db2(flags)
SMDB_FLAG flags;
{
@@ -209,7 +207,7 @@ smdb_cursor_get_flags_to_db2(flags)
** interface laid out in smdb.h.
*/
-SMDB_DB2_DATABASE *
+static SMDB_DB2_DATABASE *
smdb2_malloc_database()
{
SMDB_DB2_DATABASE *db2;
@@ -221,7 +219,7 @@ smdb2_malloc_database()
return db2;
}
-int
+static int
smdb2_close(database)
SMDB_DATABASE *database;
{
@@ -239,7 +237,7 @@ smdb2_close(database)
return result;
}
-int
+static int
smdb2_del(database, key, flags)
SMDB_DATABASE *database;
SMDB_DBENT *key;
@@ -254,7 +252,7 @@ smdb2_del(database, key, flags)
return db2_error_to_smdb(db->del(db, NULL, &dbkey, flags));
}
-int
+static int
smdb2_fd(database, fd)
SMDB_DATABASE *database;
int *fd;
@@ -264,7 +262,7 @@ smdb2_fd(database, fd)
return db2_error_to_smdb(db->fd(db, fd));
}
-int
+static int
smdb2_lockfd(database)
SMDB_DATABASE *database;
{
@@ -273,7 +271,7 @@ smdb2_lockfd(database)
return db2->smdb2_lock_fd;
}
-int
+static int
smdb2_get(database, key, data, flags)
SMDB_DATABASE *database;
SMDB_DBENT *key;
@@ -295,7 +293,7 @@ smdb2_get(database, key, data, flags)
return db2_error_to_smdb(result);
}
-int
+static int
smdb2_put(database, key, data, flags)
SMDB_DATABASE *database;
SMDB_DBENT *key;
@@ -317,7 +315,7 @@ smdb2_put(database, key, data, flags)
}
-int
+static int
smdb2_set_owner(database, uid, gid)
SMDB_DATABASE *database;
uid_t uid;
@@ -340,7 +338,7 @@ smdb2_set_owner(database, uid, gid)
return SMDBE_OK;
}
-int
+static int
smdb2_sync(database, flags)
SMDB_DATABASE *database;
unsigned int flags;
@@ -350,7 +348,7 @@ smdb2_sync(database, flags)
return db2_error_to_smdb(db->sync(db, flags));
}
-int
+static int
smdb2_cursor_close(cursor)
SMDB_CURSOR *cursor;
{
@@ -362,7 +360,7 @@ smdb2_cursor_close(cursor)
return ret;
}
-int
+static int
smdb2_cursor_del(cursor, flags)
SMDB_CURSOR *cursor;
SMDB_FLAG flags;
@@ -372,7 +370,7 @@ smdb2_cursor_del(cursor, flags)
return db2_error_to_smdb(dbc->c_del(dbc, 0));
}
-int
+static int
smdb2_cursor_get(cursor, key, value, flags)
SMDB_CURSOR *cursor;
SMDB_DBENT *key;
@@ -398,7 +396,7 @@ smdb2_cursor_get(cursor, key, value, flags)
return db2_error_to_smdb(result);
}
-int
+static int
smdb2_cursor_put(cursor, key, value, flags)
SMDB_CURSOR *cursor;
SMDB_DBENT *key;
@@ -418,7 +416,7 @@ smdb2_cursor_put(cursor, key, value, flags)
return db2_error_to_smdb(dbc->c_put(dbc, &dbkey, &dbdata, 0));
}
-int
+static int
smdb2_cursor(database, cursor, flags)
SMDB_DATABASE *database;
SMDB_CURSOR **cursor;
@@ -430,9 +428,9 @@ smdb2_cursor(database, cursor, flags)
# if DB_VERSION_MAJOR > 2 || DB_VERSION_MINOR >= 6
result = db->cursor(db, NULL, &db2_cursor, 0);
-# else /* DB_VERSION_MAJOR > 2 || DB_VERSION_MINOR >= 6 */
+# else
result = db->cursor(db, NULL, &db2_cursor);
-# endif /* DB_VERSION_MAJOR > 2 || DB_VERSION_MINOR >= 6 */
+# endif
if (result != 0)
return db2_error_to_smdb(result);
@@ -477,6 +475,26 @@ smdb_db_open_internal(db_name, db_type, db_flags, db_params, db)
# endif /* DB_VERSION_MAJOR == 2 */
# if DB_VERSION_MAJOR > 2
+
+static void
+db_err_cb(
+#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
+ dbenv,
+#endif
+ errpfx, msg)
+#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
+ const DB_ENV *dbenv;
+ const char *errpfx;
+ const char *msg;
+#else
+ const char *errpfx;
+ char *msg;
+#endif
+{
+ /* do not print/log any errors... */
+ return;
+}
+
static int
smdb_db_open_internal(db_name, db_type, db_flags, db_params, db)
char *db_name;
@@ -491,41 +509,31 @@ smdb_db_open_internal(db_name, db_type, db_flags, db_params, db)
if (result != 0 || *db == NULL)
return result;
+ (*db)->set_errcall(*db, db_err_cb);
if (db_params != NULL)
{
result = (*db)->set_cachesize(*db, 0,
db_params->smdbp_cache_size, 0);
if (result != 0)
- {
- (void) (*db)->close((*db), 0);
- *db = NULL;
- return db2_error_to_smdb(result);
- }
+ goto error;
if (db_type == DB_HASH)
{
result = (*db)->set_h_nelem(*db, db_params->smdbp_num_elements);
if (result != 0)
- {
- (void) (*db)->close(*db, 0);
- *db = NULL;
- return db2_error_to_smdb(result);
- }
+ goto error;
}
if (db_params->smdbp_allow_dup)
{
result = (*db)->set_flags(*db, DB_DUP);
if (result != 0)
- {
- (void) (*db)->close(*db, 0);
- *db = NULL;
- return db2_error_to_smdb(result);
- }
+ goto error;
}
}
result = (*db)->open(*db,
DBTXN /* transaction for DB 4.1 */
db_name, NULL, db_type, db_flags, DBMMODE);
+ error:
if (result != 0)
{
(void) (*db)->close(*db, 0);
@@ -534,6 +542,7 @@ smdb_db_open_internal(db_name, db_type, db_flags, db_params, db)
return db2_error_to_smdb(result);
}
# endif /* DB_VERSION_MAJOR > 2 */
+
/*
** SMDB_DB_OPEN -- Opens a db database.
**
diff --git a/contrib/sendmail/libsmdb/smndbm.c b/contrib/sendmail/libsmdb/smndbm.c
index 579c5f55171e..bd7bce54cf7f 100644
--- a/contrib/sendmail/libsmdb/smndbm.c
+++ b/contrib/sendmail/libsmdb/smndbm.c
@@ -19,7 +19,6 @@ SM_RCSID("@(#)$Id: smndbm.c,v 8.55 2013-11-22 20:51:49 ca Exp $")
#ifdef NDBM
-# define SMNDB_DIR_FILE_EXTENSION "dir"
# define SMNDB_PAG_FILE_EXTENSION "pag"
struct smdb_dbm_database_struct
diff --git a/contrib/sendmail/libsmutil/Makefile b/contrib/sendmail/libsmutil/Makefile
index baffab14d0d4..3bf1c4ba9b39 100644
--- a/contrib/sendmail/libsmutil/Makefile
+++ b/contrib/sendmail/libsmutil/Makefile
@@ -8,6 +8,8 @@ all: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
clean: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
+check: FRC
+ $(SHELL) $(BUILD) $(OPTIONS) $@
install: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
diff --git a/contrib/sendmail/libsmutil/cf.c b/contrib/sendmail/libsmutil/cf.c
index e447aca4f79d..f803b95ef607 100644
--- a/contrib/sendmail/libsmutil/cf.c
+++ b/contrib/sendmail/libsmutil/cf.c
@@ -39,7 +39,7 @@ getcfname(opmode, submitmode, cftype, conffile)
{
#if NETINFO
char *cflocation;
-#endif /* NETINFO */
+#endif
if (conffile != NULL)
return conffile;
@@ -71,6 +71,6 @@ getcfname(opmode, submitmode, cftype, conffile)
"sendmail.cf", '\0');
if (cflocation != NULL)
return cflocation;
-#endif /* NETINFO */
+#endif
return _PATH_SENDMAILCF;
}
diff --git a/contrib/sendmail/libsmutil/safefile.c b/contrib/sendmail/libsmutil/safefile.c
index 43d66eceee11..1c70c24440e5 100644
--- a/contrib/sendmail/libsmutil/safefile.c
+++ b/contrib/sendmail/libsmutil/safefile.c
@@ -25,8 +25,7 @@ SM_RCSID("@(#)$Id: safefile.c,v 8.130 2013-11-22 20:51:50 ca Exp $")
** fn -- filename to check.
** uid -- user id to compare against.
** gid -- group id to compare against.
-** user -- user name to compare against (used for group
-** sets).
+** user -- user name to compare against (used for group sets).
** flags -- modifiers:
** SFF_MUSTOWN -- "uid" must own this file.
** SFF_NOSLINK -- file cannot be a symbolic link.
@@ -82,9 +81,9 @@ safefile(fn, uid, gid, user, flags, mode, st)
# if HASLSTAT
if ((bitset(SFF_NOSLINK, flags) ? lstat(fn, st)
: stat(fn, st)) < 0)
-# else /* HASLSTAT */
+# else
if (stat(fn, st) < 0)
-# endif /* HASLSTAT */
+# endif
{
file_errno = errno;
}
@@ -100,19 +99,19 @@ safefile(fn, uid, gid, user, flags, mode, st)
# ifdef SUID_ROOT_FILES_OK
if (bitset(S_ISUID, st->st_mode))
-# else /* SUID_ROOT_FILES_OK */
+# else
if (bitset(S_ISUID, st->st_mode) && st->st_uid != 0 &&
st->st_uid != TrustedUid)
-# endif /* SUID_ROOT_FILES_OK */
+# endif
{
uid = st->st_uid;
user = NULL;
}
# ifdef SUID_ROOT_FILES_OK
if (bitset(S_ISGID, st->st_mode))
-# else /* SUID_ROOT_FILES_OK */
+# else
if (bitset(S_ISGID, st->st_mode) && st->st_gid != 0)
-# endif /* SUID_ROOT_FILES_OK */
+# endif
gid = st->st_gid;
}
@@ -473,9 +472,9 @@ safedirpath(fn, uid, gid, user, flags, level, offset)
# if HASLSTAT
ret = lstat(s, &stbuf);
-# else /* HASLSTAT */
+# else
ret = stat(s, &stbuf);
-# endif /* HASLSTAT */
+# endif
if (ret < 0)
{
ret = errno;
@@ -590,7 +589,7 @@ safedirpath(fn, uid, gid, user, flags, level, offset)
#ifdef S_ISVTX
!(bitnset(DBS_TRUSTSTICKYBIT, DontBlameSendmail) &&
bitset(S_ISVTX, stbuf.st_mode)) &&
-#endif /* S_ISVTX */
+#endif
bitset(mode, stbuf.st_mode))
{
if (tTd(44, 4))
@@ -686,7 +685,7 @@ safeopen(fn, omode, cmode, sff)
{
#if !NOFTRUNCATE
bool truncate;
-#endif /* !NOFTRUNCATE */
+#endif
int rval;
int fd;
int smode;
@@ -741,7 +740,7 @@ safeopen(fn, omode, cmode, sff)
truncate = bitset(O_TRUNC, omode);
if (truncate)
omode &= ~O_TRUNC;
-#endif /* !NOFTRUNCATE */
+#endif
fd = dfopen(fn, omode, cmode, sff);
if (fd < 0)
@@ -874,9 +873,9 @@ filechanged(fn, fd, stb)
/* only necessary if exclusive open follows symbolic links */
if (lstat(fn, stb) < 0 || stb->st_nlink != 1)
return true;
-# else /* HASLSTAT && BOGUS_O_EXCL */
+# else
return false;
-# endif /* HASLSTAT && BOGUS_O_EXCL */
+# endif
}
if (fstat(fd, &sta) < 0)
return true;
@@ -886,7 +885,7 @@ filechanged(fn, fd, stb)
sta.st_ino != stb->st_ino ||
# if HAS_ST_GEN && 0 /* AFS returns garbage in st_gen */
sta.st_gen != stb->st_gen ||
-# endif /* HAS_ST_GEN && 0 */
+# endif
sta.st_uid != stb->st_uid ||
sta.st_gid != stb->st_gid)
{
@@ -903,7 +902,7 @@ filechanged(fn, fd, stb)
# if HAS_ST_GEN
sm_dprintf(" gen = %ld/%ld\n",
(long) stb->st_gen, (long) sta.st_gen);
-# endif /* HAS_ST_GEN */
+# endif
sm_dprintf(" uid = %ld/%ld\n",
(long) stb->st_uid, (long) sta.st_uid);
sm_dprintf(" gid = %ld/%ld\n",
@@ -947,7 +946,7 @@ dfopen(filename, omode, cmode, sff)
case EINTR: /* interrupted syscall */
#ifdef ETXTBSY
case ETXTBSY: /* Apollo: net file locked */
-#endif /* ETXTBSY */
+#endif
continue;
}
break;
diff --git a/contrib/sendmail/mail.local/Makefile b/contrib/sendmail/mail.local/Makefile
index f3776a9d502a..6cd2bc10511b 100644
--- a/contrib/sendmail/mail.local/Makefile
+++ b/contrib/sendmail/mail.local/Makefile
@@ -8,6 +8,8 @@ all: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
clean: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
+check: FRC
+ $(SHELL) $(BUILD) $(OPTIONS) $@
install: FRC
$(SHELL) $(BUILD) $(OPTIONS) $@
force-install: FRC
diff --git a/contrib/sendmail/mail.local/mail.local.c b/contrib/sendmail/mail.local/mail.local.c
index 40387ef06e47..f193f9542375 100644
--- a/contrib/sendmail/mail.local/mail.local.c
+++ b/contrib/sendmail/mail.local/mail.local.c
@@ -29,17 +29,17 @@ SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.257 2013-11-22 20:51:51 ca Exp $")
# include <unistd.h>
# ifdef EX_OK
# undef EX_OK /* unistd.h may have another use for this */
-# endif /* EX_OK */
+# endif
# define LOCKFILE_PMODE 0
#include <sm/mbdb.h>
#include <sm/sysexits.h>
#ifndef HASHSPOOL
# define HASHSPOOL 0
-#endif /* ! HASHSPOOL */
+#endif
#ifndef HASHSPOOLMD5
# define HASHSPOOLMD5 0
-#endif /* ! HASHSPOOLMD5 */
+#endif
/*
** This is not intended to work on System V derived systems
@@ -78,7 +78,7 @@ SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.257 2013-11-22 20:51:51 ca Exp $")
# if HASHSPOOLMD5
# define HASH_MD5 2
# include <openssl/md5.h>
-# endif /* HASHSPOOLMD5 */
+# endif
#endif /* HASHSPOOL */
#if _FFR_SPOOL_PATH
@@ -93,10 +93,10 @@ SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.257 2013-11-22 20:51:51 ca Exp $")
#ifndef LOCKTO_RM
# define LOCKTO_RM 300 /* timeout for stale lockfile removal */
-#endif /* ! LOCKTO_RM */
+#endif
#ifndef LOCKTO_GLOB
# define LOCKTO_GLOB 400 /* global timeout for lockfile creation */
-#endif /* ! LOCKTO_GLOB */
+#endif
/* define a realloc() which works for NULL pointers */
#define REALLOC(ptr, size) (((ptr) == NULL) ? malloc(size) : realloc(ptr, size))
@@ -109,13 +109,13 @@ SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.257 2013-11-22 20:51:51 ca Exp $")
# define flock(a, b) lockf(a, b, 0)
# ifdef LOCK_EX
# undef LOCK_EX
-# endif /* LOCK_EX */
+# endif
# define LOCK_EX F_LOCK
#endif /* LDA_USE_LOCKF */
#ifndef LOCK_EX
# include <sys/file.h>
-#endif /* ! LOCK_EX */
+#endif
/*
** If you don't have setreuid, and you have saved uids, and you have
@@ -125,29 +125,29 @@ SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.257 2013-11-22 20:51:51 ca Exp $")
#ifdef LDA_USE_SETEUID
# define setreuid(r, e) seteuid(e)
-#endif /* LDA_USE_SETEUID */
+#endif
#ifdef LDA_CONTENTLENGTH
# define CONTENTLENGTH 1
-#endif /* LDA_CONTENTLENGTH */
+#endif
#ifndef INADDRSZ
# define INADDRSZ 4 /* size of an IPv4 address in bytes */
-#endif /* ! INADDRSZ */
+#endif
#ifdef MAILLOCK
# include <maillock.h>
-#endif /* MAILLOCK */
+#endif
#ifndef MAILER_DAEMON
# define MAILER_DAEMON "MAILER-DAEMON"
-#endif /* ! MAILER_DAEMON */
+#endif
#ifdef CONTENTLENGTH
char ContentHdr[4