- fix build against openssl 1.x
- do not add /etc/service entries during install - add helper script to add /etc/services entries - remove unused pkg-deinstall - portlint PR: 235496 Submitted by: Maxime Soule Reported by: many
This commit is contained in:
parent
5f993b05a9
commit
770d54723e
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=529921
@ -3,7 +3,7 @@
|
||||
|
||||
PORTNAME= spamd
|
||||
PORTVERSION= 4.9.1
|
||||
PORTREVISION= 4
|
||||
PORTREVISION= 5
|
||||
CATEGORIES= mail
|
||||
MASTER_SITES= SF/freebsdspamd/spamd
|
||||
|
||||
@ -12,18 +12,17 @@ COMMENT= Traps spammers with a very slow smtp-login and return 4xx error
|
||||
|
||||
LICENSE= BSD2CLAUSE
|
||||
|
||||
BROKEN_SSL= openssl
|
||||
|
||||
USE_RC_SUBR?= obspamd obspamlogd
|
||||
USES= ssl
|
||||
USE_RC_SUBR?= obspamd obspamlogd
|
||||
|
||||
USERS= _spamd
|
||||
GROUPS= _spamd
|
||||
|
||||
PORTDOCS= ipfw-spamd.txt spamdb.txt
|
||||
|
||||
PLIST_FILES= %%ETCDIR%%/spamd.conf.sample \
|
||||
PLIST_FILES= etc/spamd/spamd.conf.sample \
|
||||
libexec/spamlogd \
|
||||
sbin/add-spamd-to-etc-service \
|
||||
sbin/spamd-setup \
|
||||
sbin/spamdb \
|
||||
man/man5/spamd.conf.5.gz \
|
||||
@ -58,11 +57,6 @@ LDFLAGS+= -L${OPENSSLLIB}
|
||||
|
||||
.include <bsd.port.pre.mk>
|
||||
|
||||
.if ${SSL_DEFAULT} == base
|
||||
BROKEN_FreeBSD_12= error: variable has incomplete type 'HMAC_CTX' (aka 'struct hmac_ctx_st')
|
||||
BROKEN_FreeBSD_13= error: variable has incomplete type 'HMAC_CTX' (aka 'struct hmac_ctx_st')
|
||||
.endif
|
||||
|
||||
do-install:
|
||||
.if !defined(CPANEL)
|
||||
${INSTALL_PROGRAM} ${WRKSRC}/spamd/spamd ${STAGEDIR}${PREFIX}/libexec
|
||||
@ -83,4 +77,6 @@ do-install:
|
||||
@${MKDIR} ${STAGEDIR}${DOCSDIR}
|
||||
${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/doc/|} ${STAGEDIR}${DOCSDIR}/
|
||||
|
||||
${INSTALL_SCRIPT} ${FILESDIR}/add-spamd-to-etc-service ${STAGEDIR}${PREFIX}/sbin/
|
||||
|
||||
.include <bsd.port.post.mk>
|
||||
|
52
mail/spamd/files/add-spamd-to-etc-service
Normal file
52
mail/spamd/files/add-spamd-to-etc-service
Normal file
@ -0,0 +1,52 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ex:ts=4:sw=4:noet
|
||||
#-*- mode: makefile; tab-width: 4; -*-
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
ETC_SERVICES="/etc/services"
|
||||
|
||||
|
||||
check_service() {
|
||||
local SERVICE PORT PROTO COMMENT
|
||||
|
||||
SERVICE=$1
|
||||
PORT=$2
|
||||
PROTO=$3
|
||||
COMMENT=$4
|
||||
|
||||
# check
|
||||
OK=no
|
||||
HAS_SERVICE=no
|
||||
COUNT=1
|
||||
for i in $(grep ^${SERVICE} ${ETC_SERVICES}); do
|
||||
if [ ${COUNT} -eq 1 ] && [ x"${i}" = x"${SERVICE}" ]; then
|
||||
HAS_SERVICE=yes
|
||||
echo " already in ${ETC_SERVICES}: ${SERVICE}"
|
||||
|
||||
elif [ ${COUNT} -eq 2 ] && [ "${HAS_SERVICE}" = "yes" ] && \
|
||||
[ x"${i}" = x"${PORT}/${PROTO}" ]; then
|
||||
OK=yes
|
||||
break
|
||||
fi
|
||||
COUNT=$(( ${COUNT} + 1 ))
|
||||
done
|
||||
# add an entry for SERVICE to /etc/services
|
||||
if [ "${OK}" = "no" ]; then
|
||||
echo "==> add entry \"${SERVICE} ${PORT}/${PROTO}\""
|
||||
(
|
||||
grep -v -e "^${SERVICE}.*${PORT}/${PROTO}" ${ETC_SERVICES}
|
||||
echo "${SERVICE} ${PORT}/${PROTO} # ${COMMENT}"
|
||||
) >> ${ETC_SERVICES}.new
|
||||
mv ${ETC_SERVICES}.new ${ETC_SERVICES}
|
||||
fi
|
||||
}
|
||||
|
||||
# always add service entries
|
||||
echo "Checking ${ETC_SERVICES} for missing spamd service entries"
|
||||
[ ! -f ${ETC_SERVICES} ] && echo "==> cannot find ${ETC_SERVICES} ... => exit" && exit 1
|
||||
check_service spamd 8025 tcp "spamd(8)"
|
||||
check_service spamd-sync 8025 udp "spamd(8) synchronisation"
|
||||
check_service spamd-cfg 8026 tcp "spamd(8) configuration"
|
||||
|
164
mail/spamd/files/patch-spamd_sync.c
Normal file
164
mail/spamd/files/patch-spamd_sync.c
Normal file
@ -0,0 +1,164 @@
|
||||
# PR: 235496
|
||||
# patch id: 201721
|
||||
#
|
||||
--- spamd/sync.c.orig 2010-04-24 10:33:47 UTC
|
||||
+++ spamd/sync.c
|
||||
@@ -53,6 +53,22 @@ extern char *SHA1_File(const char *, char *);
|
||||
|
||||
#include <openssl/hmac.h>
|
||||
|
||||
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||
+# define spamd_hmac_ctx HMAC_CTX *
|
||||
+# define spamd_hmac_ctx_init(ctx) ctx = HMAC_CTX_new()
|
||||
+# define spamd_hmac_sha1_init(ctx, key, keylen) HMAC_Init_ex(ctx, key, keylen, EVP_sha1(), NULL)
|
||||
+# define spamd_hmac_update(ctx, data, datalen) HMAC_Update(ctx, data, datalen)
|
||||
+# define spamd_hmac_final(ctx, data, datalen) HMAC_Final(ctx, data, datalen)
|
||||
+# define spamd_hmac_cleanup(ctx) HMAC_CTX_free(ctx)
|
||||
+#else
|
||||
+# define spamd_hmac_ctx HMAC_CTX
|
||||
+# define spamd_hmac_ctx_init(ctx) HMAC_CTX_init(&(ctx))
|
||||
+# define spamd_hmac_sha1_init(ctx, key, keylen) HMAC_Init_ex(&(ctx), key, keylen, EVP_sha1(), NULL)
|
||||
+# define spamd_hmac_update(ctx, data, datalen) HMAC_Update(&(ctx), data, datalen)
|
||||
+# define spamd_hmac_final(ctx, data, datalen) HMAC_Final(&(ctx), data, datalen)
|
||||
+# define spamd_hmac_cleanup(ctx) HMAC_cleanup(&(ctx))
|
||||
+#endif
|
||||
+
|
||||
#include "sdl.h"
|
||||
#include "grey.h"
|
||||
#include "sync.h"
|
||||
@@ -439,7 +455,7 @@ sync_update(time_t now, char *helo, char *ip, char *fr
|
||||
u_int16_t sglen, fromlen, tolen, helolen, padlen;
|
||||
char pad[SPAM_ALIGNBYTES];
|
||||
int i = 0;
|
||||
- HMAC_CTX ctx;
|
||||
+ spamd_hmac_ctx ctx;
|
||||
u_int hmac_len;
|
||||
|
||||
if (debug)
|
||||
@@ -455,8 +471,8 @@ sync_update(time_t now, char *helo, char *ip, char *fr
|
||||
tolen = strlen(to) + 1;
|
||||
helolen = strlen(helo) + 1;
|
||||
|
||||
- HMAC_CTX_init(&ctx);
|
||||
- HMAC_Init(&ctx, sync_key, strlen(sync_key), EVP_sha1());
|
||||
+ spamd_hmac_ctx_init(ctx);
|
||||
+ spamd_hmac_sha1_init(ctx, sync_key, strlen(sync_key));
|
||||
|
||||
sglen = sizeof(sg) + fromlen + tolen + helolen;
|
||||
padlen = SPAM_ALIGN(sglen) - sglen;
|
||||
@@ -468,7 +484,7 @@ sync_update(time_t now, char *helo, char *ip, char *fr
|
||||
hdr.sh_length = htons(sizeof(hdr) + sglen + padlen + sizeof(end));
|
||||
iov[i].iov_base = &hdr;
|
||||
iov[i].iov_len = sizeof(hdr);
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
/* Add single SPAM sync greylisting entry */
|
||||
@@ -481,27 +497,27 @@ sync_update(time_t now, char *helo, char *ip, char *fr
|
||||
sg.sg_helo_length = htons(helolen);
|
||||
iov[i].iov_base = &sg;
|
||||
iov[i].iov_len = sizeof(sg);
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
iov[i].iov_base = from;
|
||||
iov[i].iov_len = fromlen;
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
iov[i].iov_base = to;
|
||||
iov[i].iov_len = tolen;
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
iov[i].iov_base = helo;
|
||||
iov[i].iov_len = helolen;
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
iov[i].iov_base = pad;
|
||||
iov[i].iov_len = padlen;
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
/* Add end marker */
|
||||
@@ -509,14 +525,14 @@ sync_update(time_t now, char *helo, char *ip, char *fr
|
||||
end.st_length = htons(sizeof(end));
|
||||
iov[i].iov_base = &end;
|
||||
iov[i].iov_len = sizeof(end);
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
- HMAC_Final(&ctx, hdr.sh_hmac, &hmac_len);
|
||||
+ spamd_hmac_final(ctx, hdr.sh_hmac, &hmac_len);
|
||||
|
||||
/* Send message to the target hosts */
|
||||
sync_send(iov, i);
|
||||
- HMAC_CTX_cleanup(&ctx);
|
||||
+ spamd_hmac_cleanup(ctx);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -527,7 +543,7 @@ sync_addr(time_t now, time_t expire, char *ip, u_int16
|
||||
struct spam_synctlv_addr sd;
|
||||
struct spam_synctlv_hdr end;
|
||||
int i = 0;
|
||||
- HMAC_CTX ctx;
|
||||
+ spamd_hmac_ctx ctx;
|
||||
u_int hmac_len;
|
||||
|
||||
if (debug)
|
||||
@@ -537,8 +553,8 @@ sync_addr(time_t now, time_t expire, char *ip, u_int16
|
||||
bzero(&hdr, sizeof(hdr));
|
||||
bzero(&sd, sizeof(sd));
|
||||
|
||||
- HMAC_CTX_init(&ctx);
|
||||
- HMAC_Init(&ctx, sync_key, strlen(sync_key), EVP_sha1());
|
||||
+ spamd_hmac_ctx_init(ctx);
|
||||
+ spamd_hmac_sha1_init(ctx, sync_key, strlen(sync_key));
|
||||
|
||||
/* Add SPAM sync packet header */
|
||||
hdr.sh_version = SPAM_SYNC_VERSION;
|
||||
@@ -547,7 +563,7 @@ sync_addr(time_t now, time_t expire, char *ip, u_int16
|
||||
hdr.sh_length = htons(sizeof(hdr) + sizeof(sd) + sizeof(end));
|
||||
iov[i].iov_base = &hdr;
|
||||
iov[i].iov_len = sizeof(hdr);
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
/* Add single SPAM sync address entry */
|
||||
@@ -558,7 +574,7 @@ sync_addr(time_t now, time_t expire, char *ip, u_int16
|
||||
sd.sd_ip = inet_addr(ip);
|
||||
iov[i].iov_base = &sd;
|
||||
iov[i].iov_len = sizeof(sd);
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
/* Add end marker */
|
||||
@@ -566,14 +582,14 @@ sync_addr(time_t now, time_t expire, char *ip, u_int16
|
||||
end.st_length = htons(sizeof(end));
|
||||
iov[i].iov_base = &end;
|
||||
iov[i].iov_len = sizeof(end);
|
||||
- HMAC_Update(&ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
+ spamd_hmac_update(ctx, iov[i].iov_base, iov[i].iov_len);
|
||||
i++;
|
||||
|
||||
- HMAC_Final(&ctx, hdr.sh_hmac, &hmac_len);
|
||||
+ spamd_hmac_final(ctx, hdr.sh_hmac, &hmac_len);
|
||||
|
||||
/* Send message to the target hosts */
|
||||
sync_send(iov, i);
|
||||
- HMAC_CTX_cleanup(&ctx);
|
||||
+ spamd_hmac_cleanup(ctx);
|
||||
}
|
||||
|
||||
void
|
@ -7,7 +7,6 @@
|
||||
|
||||
SPAMDUSER=%%SPAMDUSER%%
|
||||
SPAMDGROUP=%%SPAMDGROUP%%
|
||||
FILE="/etc/services"
|
||||
|
||||
check_db() {
|
||||
DB=/var/db/spamd
|
||||
@ -25,48 +24,6 @@ check_db() {
|
||||
fi
|
||||
}
|
||||
|
||||
check_service() {
|
||||
local SERVICE PORT PROTO COMMENT
|
||||
|
||||
SERVICE=$1
|
||||
PORT=$2
|
||||
PROTO=$3
|
||||
COMMENT=$4
|
||||
|
||||
# check
|
||||
OK=no
|
||||
HAS_SERVICE=no
|
||||
COUNT=1
|
||||
for i in $(grep ^${SERVICE} ${FILE}); do
|
||||
if [ ${COUNT} -eq 1 ] && [ x"${i}" = x"${SERVICE}" ]; then
|
||||
HAS_SERVICE=yes
|
||||
elif [ ${COUNT} -eq 2 ] && [ "${HAS_SERVICE}" = "yes" ] && \
|
||||
[ x"${i}" = x"${PORT}/${PROTO}" ]; then
|
||||
OK=yes
|
||||
break
|
||||
fi
|
||||
COUNT=$(( ${COUNT} + 1 ))
|
||||
done
|
||||
# add an entry for SERVICE to /etc/services
|
||||
if [ "${OK}" = "no" ]; then
|
||||
echo "==> add entry \"${SERVICE} ${PORT}/${PROTO}\""
|
||||
(
|
||||
grep -v -e "^${SERVICE}.*${PORT}/${PROTO}" ${FILE}
|
||||
echo "${SERVICE} ${PORT}/${PROTO} # ${COMMENT}"
|
||||
) >> ${FILE}.new
|
||||
mv ${FILE}.new ${FILE}
|
||||
fi
|
||||
}
|
||||
|
||||
# always add service entries
|
||||
if [ "$2" = "PRE-INSTALL" ]; then
|
||||
echo "Checking ${FILE} for missing service entries"
|
||||
[ ! -f ${FILE} ] && echo "==> cannot find ${FILE} ... => exit" && exit 1
|
||||
check_service spamd 8025 tcp "spamd(8)"
|
||||
check_service spamd-sync 8025 udp "spamd(8) synchronisation"
|
||||
check_service spamd-cfg 8026 tcp "spamd(8) configuration"
|
||||
fi
|
||||
|
||||
if [ "$2" = "POST-INSTALL" ]; then
|
||||
check_db
|
||||
fi
|
||||
|
@ -3,7 +3,10 @@
|
||||
message: <<EOM
|
||||
To enable spamd you need:
|
||||
|
||||
1) Enable spamd in /etc/rc.conf with the following line:
|
||||
1) add required spamd entries to /etc/services, run command
|
||||
%%PREFIX%%/sbin/add-spamd-to-etc-service
|
||||
|
||||
2) Enable spamd in /etc/rc.conf with the following line:
|
||||
obspamd_enable="YES"
|
||||
obspamlogd_enable="YES"
|
||||
|
||||
@ -11,11 +14,11 @@ To enable spamd you need:
|
||||
obspamlogd_pflog_if. This interface will be created and removed
|
||||
by the rc script of spamlogd.
|
||||
|
||||
2) Configuration template is available in %%PREFIX%%/etc/spamd as
|
||||
3) Configuration template is available in %%PREFIX%%/etc/spamd as
|
||||
spamd.conf.sample file. Copy then to spamd.conf file and
|
||||
edit to suit your needs.
|
||||
|
||||
3) mount fdescfs to /dev/fd with the following line in /etc/fstab
|
||||
4) mount fdescfs to /dev/fd with the following line in /etc/fstab
|
||||
fdescfs /dev/fd fdescfs rw 0 0
|
||||
|
||||
Note for XEN users:
|
||||
@ -25,7 +28,7 @@ To enable spamd you need:
|
||||
device pf
|
||||
device pflog
|
||||
|
||||
4) Add following lines to the pf.conf(5)
|
||||
5) Add following lines to the pf.conf(5)
|
||||
|
||||
table <spamd-white> persist
|
||||
no rdr inet proto tcp from <spamd-white> to any \
|
||||
@ -35,7 +38,7 @@ To enable spamd you need:
|
||||
|
||||
FreeBSD only features (not in OpenBSD):
|
||||
- sync for spamdb (parameter -Y)
|
||||
See %%PREFIX%%/%%DOCSDIR%%/ for usage.
|
||||
See %%DOCSDIR%%/ for usage.
|
||||
EOM
|
||||
}
|
||||
]
|
||||
|
@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ex:ts=4:sw=4:noet
|
||||
#-*- mode: makefile; tab-width: 4; -*-
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
#if [ "$2" = "DEINSTALL" ]; then
|
||||
# Disabled until pkg runs DEINSTALL before INSTALL in upgrades
|
||||
if false; then
|
||||
FILE="/etc/services"
|
||||
echo "===> Removing spamd entries from ${FILE}"
|
||||
sed -i '' \
|
||||
-e "/^spamd-sync.*8025/d" \
|
||||
-e "/^spamd-cfg.*8026/d" \
|
||||
-e "/^spamd.*8025/d" \
|
||||
${FILE}
|
||||
fi
|
Loading…
Reference in New Issue
Block a user