ports/74158: Upgraded Port: mail/dcc-dccd

Dean Hollister dean at odyssey.apana.org.au
Sat Nov 20 12:50:20 UTC 2004


>Number:         74158
>Category:       ports
>Synopsis:       Upgraded Port: mail/dcc-dccd
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Sat Nov 20 12:50:19 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Dean Hollister
>Release:        FreeBSD 4.10-STABLE i386
>Organization:
Australian Public Access Network Association Inc
>Environment:
System: FreeBSD odyssey.apana.org.au 4.10-STABLE FreeBSD 4.10-STABLE #0: Fri May 28 06:53:52 WST 2004 root at odyssey.apana.org.au:/usr/obj/usr/src/sys/ODYSSEY i386
>Description:
Upgraded Port:	mail/dcc-dccd to 1.2.58

Fixes addressed by this upgrade:

	o 	Work around new bug in FreeBSD 4.10 mechanism to disconnect UDP
		sockets reported by Daniel V Klein.  The symptom of the bug is
		that DCC servers appear down to clients running on FreeBSD 4.10
	
	o	Fix /var/dcc/ids delay= extension.

	o	Add `./configure --with-max-db-mem=X` to limit the size of the
		database window.

	o	Extend /var/dcc/ids format to allow authenticated clients to be delayed
		as `dccd -U` delays anonymous clients.

	o	Add `./configure --with-kludge=FILE`.

	o	Fix problem with flooding among greylist servers using `dccd -Gweak-IP`

	o	Restore `dccsight -G grey-cksum` because the proof-of-concept CGI
		scripts use it.

	o	Work around bug in OpenBSD HTONL() and NTOHL() reported by Jeff Drinkert.

	o	Change wlist to rebuild the .dccw hash table unless given -Q.

	o	Fix cause of "packet length 44 too small" complaints by DCC servers.
		With an empty mail body and no useful headers, DCC clients were
		sending empty requests to DCC servers.

	o	Add `cdcc "debug TTL=x"` to help find firewalls that filter DCC requests.

	o	Use shared libmilter.so in dccm.

	o	Fix Body checksum when MIME boundary crosses buffer boundary.

	o	Deprecate misc/dccdnsbl.m4 and change misc/hackmc to work with 
		FEATURE(dnsbl) and FEATURE(endnsbl) in modern sendmail.

	o	Make it compile on Mac OS X and DragonFly FreeBSD.

	o	Reduce the size of greylisting databases.

	o	Separate DCC query mode for dccm and dccifd from greylist query mode.

	o	Add `dccd -G weak-IP` to whitelist not only a {sender,target,IP address}
		after passing the greylist embargo, but anything from the IP address.
		Use this facility with caution; it might be a bad idea.

	o	Fix `dccifd lhost,lport,rhost/bits` on systems that have IPv6.

	o	Change homedir/make-dcc_conf to track changes in
		`./configure --with-rundir=x --libexecdir=y`
		This change will not be effective until upgrading from 
		1.2.50 to later versions.

	o	Deal with tiny FD_SETSIZE.

	o	Fix dccifd, dccm, and dccproc core-dump caused by missing whiteclnt file


	o	Fix infinite loop in computing DCC clients computing checksums of
		large, deeply nested MIME messages.


This upgrade also includes suggestions and patches provided by Oleg Sharoiko:

1. Correct detection of sendmail from ports

2. Ability to specify wether to user base sendmail or ports sendmail (work
with base sendmail needs to be tested - I only have boxes with sendmail from
ports here)

3. Config file is not deleted with pkg_delete and not overwritten with make
install. Instead dcc_conf.dist is always installed and dcc_conf is installed
only when it doesn't exist.

4. Ability to specify user for setuid programs. I think this should be changed
from root to some special user, but maybe this needs some deeper testing. My
patch defaults to dcc:dcc, but please change this if you think I'm wrong. The
user is created with pw if it doesn't exist.

5. Separate options to enable/disable building of dccm and dccifd


>How-To-Repeat:

>Fix:

diff -ruN dcc-dccd.orig/Makefile dcc-dccd/Makefile
--- dcc-dccd.orig/Makefile	Sat Nov 20 19:57:14 2004
+++ dcc-dccd/Makefile	Sat Nov 20 20:19:09 2004
@@ -6,7 +6,7 @@
 #
 
 PORTNAME=	dcc-dccd
-PORTVERSION=	1.2.48
+PORTVERSION=	1.2.58
 CATEGORIES=	mail
 MASTER_SITES=	http://www.rhyolite.com/anti-spam/dcc/source/old/ \
 		http://www.wa.apana.org.au/~dean/sources/ \
@@ -18,19 +18,83 @@
 
 USE_REINPLACE=	yes
 HAS_CONFIGURE=	yes
-CONFIGURE_ARGS=	--homedir=${PREFIX}/dcc
 MANCOMPRESSED=	yes
 MAN8=		cdcc.8 dbclean.8 dblist.8 dcc.8 dccd.8 dccifd.8 dccm.8 \
 		dccproc.8 dccsight.8
 
-.if exists(/usr/lib/libmilter.a) || exists(${LOCALBASE}/lib/libmilter.a)
+PKGINSTALL=	${WRKDIR}/pkg-install
+PKGDEINSTALL=	${WRKDIR}/pkg-deinstall
+
+#
+# User for dcc files and SUID binaries
+#
+DCCUSER?=	dcc
+DCCGROUP?=	dcc
+
+#
+# You can choose the sendmail to be used by specifying
+#
+# WITH_SENDMAIL_BASE=yes
+#  or
+# WITH_SENDMAIL_PORT=yes
+#
+
+# if no preference was set, check for an up to date base version
+# but give an installed port preference over it.
+
+HOMEDIR=	${PREFIX}/dcc
+CONFIGURE_ARGS=	--homedir=${HOMEDIR}
+
+.include <bsd.port.pre.mk>
+
+.if !defined(WITH_SENDMAIL_BASE) && \
+    !defined(WITH_SENDMAIL_PORT) && \
+    !exists(${LOCALBASE}/lib/libmilter.a)
+WITH_SENDMAIL_BASE=yes
+.endif
+
+.if defined(WITH_SENDMAIL_BASE)
+.if exists(/usr/lib/libmilter.a)
+MILTERBASE=     /usr
+WITH_SENDMAIL=yes
+.else
+BROKEN= "Base system sendmail not found or too old, rebuild with WITH_SENDMAIL_PORT=yes"
+.endif
+.else
+BUILD_DEPENDS+= ${LOCALBASE}/lib/libmilter.a:${PORTSDIR}/mail/sendmail
+MILTERBASE?=    ${LOCALBASE}
+WITH_SENDMAIL=yes
+.endif
+
+.if !defined(WITHOUT_SENDMAIL) && defined(WITH_SENDMAIL)
+MILTERINC=      ${MILTERBASE}/include
+MILTERLIB=      ${MILTERBASE}/lib
+
+CPPFLAGS+=      -I${MILTERINC}
+LDFLAGS+=       -L${MILTERLIB}
+
+CONFIGURE_ENV+= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}"
+CONFIGURE_ARGS+= --with-sendmail=${MILTERBASE}
 PLIST_SUB+=	WITH_SENDMAIL=""
 .else
-CONFIGURE_ARGS+=	--disable-dccm --disable-dccifd
+CONFIGURE_ARGS+= --disable-dccm
 PLIST_SUB+=	WITH_SENDMAIL="@comment "
 .endif
 
-.include <bsd.port.pre.mk>
+.if defined(WITHOUT_DCCIFD)
+CONFIGURE_ARGS+= --disable-dccifd
+PLIST_SUB+=	WITH_DCCIFD="@comment "
+.else
+PLIST_SUB+=	WITH_DCCIFD=""
+.endif
+
+CONFIGURE_ARGS+= --with-uid=${DCCUSER}
+PLIST_SUB+=	DCCUSER=${DCCUSER} \
+		DCCGROUP=${DCCGROUP}
+
+SED_SCRIPT=	-e 's|%%PREFIX%%|${PREFIX}|g' \
+		-e 's|%%DCCUSER%%|${DCCUSER}|g' \
+		-e 's|%%DCCGROUP%%|${DCCGROUP}|g'
 
 post-patch:
 	${FIND} ${WRKSRC} -type f -exec \
@@ -38,6 +102,18 @@
 	${REINPLACE_CMD} -e 's,PTHREAD_LDFLAGS="$$PTHREAD_LDFLAGS -pthread,PTHREAD_LDFLAGS="$$PTHREAD_LDFLAGS,g' ${WRKSRC}/configure
 	${REINPLACE_CMD} -e 's,FreeBSD)\n\tPTHREAD_LDFLAGS,FreeBSD)\n\tDCC_CFLAGS="${PTHREAD_CFLAGS} $$DCC_CFLAGS"\n\tPTHREAD_LDFLAGS,g' ${WRKSRC}/configure
 	${REINPLACE_CMD} -e 's,PTHREAD_LIBS="$$PTHREAD_LIBS -lc_r,PTHREAD_LIBS=" ${PTHREAD_LIBS},g' ${WRKSRC}/configure
+
+post-build:
+	@${SED} ${SED_SCRIPT} ${PKGDIR}/pkg-install >${PKGINSTALL}
+	@${SED} ${SED_SCRIPT} ${PKGDIR}/pkg-deinstall >${PKGDEINSTALL}
+
+pre-install:
+	@${SETENV} PKG_PREFIX=${PREFIX} \
+		${SH} ${PKGINSTALL} ${PREFIX} PRE-INSTALL
+
+post-install:
+	@[ -s ${HOMEDIR}/dcc_conf ] || \
+		${CP} ${HOMEDIR}/dcc_conf.dist ${HOMEDIR}/dcc_conf
 
 .include <bsd.port.post.mk>
 
diff -ruN dcc-dccd.orig/distinfo dcc-dccd/distinfo
--- dcc-dccd.orig/distinfo	Sat Nov 20 19:57:31 2004
+++ dcc-dccd/distinfo	Sat Nov 20 20:20:32 2004
@@ -1,4 +1,2 @@
-MD5 (dcc-dccd-1.2.48.tar.Z) = 5f15ceaddfca99bc131898ced6c1b9bc
-SIZE (dcc-dccd-1.2.48.tar.Z) = 1169098
-
-
+MD5 (dcc-dccd-1.2.58.tar.Z) = 29263b15bdfe1c619bad6e926121118f
+SIZE (dcc-dccd-1.2.48.tar.Z) = 1180194
diff -ruN dcc-dccd.orig/files/patch-configure dcc-dccd/files/patch-configure
--- dcc-dccd.orig/files/patch-configure	Thu Jan  1 08:00:00 1970
+++ dcc-dccd/files/patch-configure	Sat Nov 20 20:03:50 2004
@@ -0,0 +1,18 @@
+--- configure.orig	Mon May 17 21:32:49 2004
++++ configure	Tue May 25 18:19:48 2004
+@@ -2244,6 +2244,15 @@
+     SENDMAIL_EVAL="$SENDMAIL"
+     with_sendmail=yes
+ fi
++#
++if test -n "$SENDMAIL" -a "$SENDMAIL" != "no"; then
++    if test -f $SENDMAIL/include/libmilter/mfapi.h -a -f $SENDMAIL/lib/libmilter.a; then
++        SENDMAIL_OBJ=$SENDMAIL/lib
++        SENDMAIL_OBJ_EVAL=$SENDMAIL_OBJ
++        SENDMAIL_LIB=$SENDMAIL_OBJ/libmilter.a
++    fi
++fi
++#
+ if test -z "$SENDMAIL"; then
+     # prefer a parallel ../sendmail directory
+     DEPTH=.
diff -ruN dcc-dccd.orig/files/patch-homedir::Makefile.in dcc-dccd/files/patch-homedir::Makefile.in
--- dcc-dccd.orig/files/patch-homedir::Makefile.in	Thu Jan  1 08:00:00 1970
+++ dcc-dccd/files/patch-homedir::Makefile.in	Sat Nov 20 20:03:50 2004
@@ -0,0 +1,15 @@
+--- homedir/Makefile.in	Tue May 25 20:37:04 2004
++++ homedir/Makefile.in	Tue May 25 20:38:04 2004
+@@ -28,11 +28,7 @@
+ install:
+ 	for nm in $(INST_HOMEDIR) $(INST_HOMEDIR)/log; do \
+ 	  $(HINSTALL) -m 755 -d $$nm; done
+-	if test -s $(INST_HOMEDIR)/dcc_conf; then \
+-	  sh make-dcc_conf -h $(INST_HOMEDIR); \
+-	else \
+-	  $(HINSTALL) -m 644 dcc_conf $(INST_HOMEDIR)/dcc_conf; \
+-	fi
++	$(HINSTALL) -m 644 dcc_conf $(INST_HOMEDIR)/dcc_conf.dist
+ 	for nm in flod grey_flod whitelist grey_whitelist \
+ 		whiteclnt whitecommon; do \
+ 	  if test ! -f $(INST_HOMEDIR)/$$nm; then \
diff -ruN dcc-dccd.orig/pkg-deinstall dcc-dccd/pkg-deinstall
--- dcc-dccd.orig/pkg-deinstall	Thu Jan  1 08:00:00 1970
+++ dcc-dccd/pkg-deinstall	Sat Nov 20 20:03:50 2004
@@ -0,0 +1,13 @@
+#!/bin/sh
+# $FreeBSD$
+
+if [ "$2" != "POST-DEINSTALL" ]; then
+	exit 0
+fi
+
+DCCUSER=%%DCCUSER%%
+
+if pw usershow "${DCCUSER}" 2>/dev/null 1>&2; then
+	echo "To delete ${DCCUSER} user permanently, use 'pw userdel \"${DCCUSER}\"'"
+fi
+exit 0
diff -ruN dcc-dccd.orig/pkg-install dcc-dccd/pkg-install
--- dcc-dccd.orig/pkg-install	Thu Jan  1 08:00:00 1970
+++ dcc-dccd/pkg-install	Sat Nov 20 20:03:50 2004
@@ -0,0 +1,34 @@
+#!/bin/sh
+# $FreeBSD$
+
+PREFIX=${PKG_PREFIX:-%%PREFIX%%}
+
+DCCUSER=%%DCCUSER%%
+DCCGROUP=%%DCCGROUP%%
+
+if [ "$2" = "PRE-INSTALL" ]; then
+
+	if ! pw groupshow "$DCCGROUP" 2>/dev/null 1>&2; then
+		if pw groupadd $DCCGROUP; then
+			echo "=> Added group \"$DCCGROUP\"."
+		else
+			echo "=> Adding group \"$DCCGROUP\" failed..."
+			exit 1
+		fi
+	fi
+
+	if ! pw usershow "$DCCUSER" 2>/dev/null 1>&2; then
+		if pw useradd $DCCUSER -g $DCCGROUP -h - \
+			-s "/sbin/nologin" -d "/nonexistent" \
+			-c "Distributed Checksum Clearinghouse"; \
+		then
+			echo "=> Added user \"$DCCUSER\"."
+		else
+			echo "=> Adding user \"$DCCUSER\" failed..."
+			exit 1
+		fi
+	fi
+
+fi
+
+exit 0
diff -ruN dcc-dccd.orig/pkg-plist dcc-dccd/pkg-plist
--- dcc-dccd.orig/pkg-plist	Sat Nov 20 19:56:43 2004
+++ dcc-dccd/pkg-plist	Sat Nov 20 20:24:46 2004
@@ -8,13 +8,14 @@
 dcc/cgi-bin/list-log
 dcc/cgi-bin/list-msg
 dcc/cgi-bin/webuser-notify
-dcc/dcc_conf
+ at unexec if cmp -s %D/dcc/dcc_conf %D/dcc/dcc_conf.dist; then rm -f %D/dcc/dcc_conf; fi
+dcc/dcc_conf.dist
 dcc/flod
 dcc/grey_flod
 dcc/grey_whitelist
 dcc/ids
 dcc/libexec/cron-dccd
-%%WITH_SENDMAIL%%dcc/libexec/dccifd
+%%WITH_DCCIFD%%dcc/libexec/dccifd
 %%WITH_SENDMAIL%%dcc/libexec/dccm
 dcc/libexec/dbclean
 dcc/libexec/dblist
@@ -45,5 +46,3 @@
 @dirrm dcc/libexec
 @dirrm dcc/cgi-bin
 @dirrm dcc
-
-
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list