Hi,
>>>>> On Fri, 28 Jul 2006 07:18:33 +0200
>>>>> manu@... said:
manu> Checked in. Thank you for the input.
manu> I'll wait a bit before releasing 2.1.9, so that we don't have a release
manu> every 8 hour :-)
Thank you.
I made one more patch. Since sa_len is referred, I think it is not
buildable on Linux. And, some cleanups.
I've not test it actually, yet.
Index: acl.c
diff -u -p acl.c.orig acl.c
--- acl.c.orig Fri Jul 28 05:08:32 2006
+++ acl.c Fri Jul 28 16:00:18 2006
@@ -615,7 +615,7 @@ acl_filter(sa, salen, hostname, from, rc
}
if (acl->a_dnsrbl != NULL) {
- if (dnsrbl_check_source(sa, acl->a_dnsrbl) != 0) {
+ if (dnsrbl_check_source(sa, salen, acl->a_dnsrbl) != 0) {
retval |= EXF_DNSRBL;
if (conf.c_debug) {
iptostring(sa, salen,
Index: dnsrbl.c
diff -u -p dnsrbl.c.orig dnsrbl.c
--- dnsrbl.c.orig Fri Jul 28 13:18:56 2006
+++ dnsrbl.c Fri Jul 28 16:30:26 2006
@@ -73,6 +73,7 @@ __RCSID("$Id: dnsrbl.c,v 1.3 2006/07/26
#endif
#include "milter-greylist.h"
+#include "pending.h"
#include "dnsrbl.h"
/*
@@ -88,8 +89,9 @@ dnsrbl_init(void) {
}
int
-dnsrbl_check_source(sa, source)
+dnsrbl_check_source(sa, salen, source)
struct sockaddr *sa;
+ socklen_t salen;
struct dnsrbl_entry *source;
{
#ifdef HAVE_RESN
@@ -99,7 +101,6 @@ dnsrbl_check_source(sa, source)
char req[NS_MAXDNAME + 1];
char ans[NS_MAXMSG + 1];
int anslen;
- void *addr;
ns_msg handle;
ns_rr rr;
int i;
@@ -107,29 +108,14 @@ dnsrbl_check_source(sa, source)
struct sockaddr *blacklisted;
int retval = 0;
- blacklisted = (struct sockaddr *)&source->d_blacklisted;
+ blacklisted = SA(&source->d_blacklisted);
res_ninit(&res);
- reverse_endian((struct sockaddr *)&ss, sa);
+ reverse_endian(SA(&ss), sa, salen);
- switch (ss.ss_family) {
- case AF_INET:
- addr = &((struct sockaddr_in *)&ss)->sin_addr;
- break;
-#ifdef AF_INET6
- case AF_INET6:
- addr = &((struct sockaddr_in6 *)&ss)->sin6_addr;
- break;
-#endif
- default:
- syslog(LOG_ERR, "unexpected address family %d", ss.ss_family);
- exit(EX_SOFTWARE);
- break;
- }
-
- if ((inet_ntop(ss.ss_family, addr, req, NS_MAXDNAME)) == NULL){
- syslog(LOG_ERR, "inet_ntop failed: %s", strerror(errno));
+ if ((iptostring(SA(&ss), salen, req, NS_MAXDNAME)) == NULL) {
+ syslog(LOG_ERR, "iptostring failed: %s", strerror(errno));
retval = -1;
goto end;
}
@@ -204,25 +190,24 @@ end:
/* XXX this code is probably broken with IPv6 */
void
-reverse_endian(dst, src)
+reverse_endian(dst, src, len)
struct sockaddr *src;
struct sockaddr *dst;
+ socklen_t len;
{
- int i, len;
+ int i;
char *src_start;
char *dst_start;
switch (src->sa_family) {
case AF_INET:
- src_start = (char *)&((struct sockaddr_in *)src)->sin_addr;
- dst_start = (char *)&((struct sockaddr_in *)dst)->sin_addr;
- len = sizeof(((struct sockaddr_in *)src)->sin_addr);
+ src_start = (char *)SADDR4(src);
+ dst_start = (char *)SADDR4(dst);
break;
#ifdef AF_INET6
case AF_INET6:
- src_start = (char *)&((struct sockaddr_in6 *)src)->sin6_addr;
- dst_start = (char *)&((struct sockaddr_in6 *)dst)->sin6_addr;
- len = sizeof(((struct sockaddr_in6 *)src)->sin6_addr);
+ src_start = (char *)SADDR6(src);
+ dst_start = (char *)SADDR6(dst);
break;
#endif
default:
@@ -232,7 +217,9 @@ reverse_endian(dst, src)
}
dst->sa_family = src->sa_family;
+#ifdef HAVE_SA_LEN
dst->sa_len = src->sa_len;
+#endif
for (i = 0; i < len; i++)
dst_start[len - 1 - i] = src_start[i];
@@ -247,17 +234,34 @@ dnsrbl_source_add(name, domain, blacklis
struct sockaddr *blacklisted;
{
struct dnsrbl_entry *de;
+ socklen_t len;
if ((de = malloc(sizeof(*de))) == NULL) {
syslog(LOG_ERR, "malloc failed: %s", strerror(errno));
exit(EX_OSERR);
}
+ switch (blacklisted->sa_family) {
+ case AF_INET:
+ len = sizeof(*SADDR4(blacklisted));
+ break;
+#ifdef AF_INET6
+ case AF_INET6:
+ len = sizeof(*SADDR6(blacklisted));
+ break;
+#endif
+ default:
+ syslog(LOG_ERR, "invalid address family %d",
+ blacklisted->sa_family);
+ exit(EX_SOFTWARE);
+ break;
+ }
+
strncpy(de->d_name, name, sizeof(de->d_name));
de->d_name[sizeof(de->d_name) - 1] = '\0';
strncpy(de->d_domain, domain, sizeof(de->d_domain));
de->d_domain[sizeof(de->d_domain) - 1] = '\0';
- memcpy(&de->d_blacklisted, blacklisted, blacklisted->sa_len);
+ memcpy(&de->d_blacklisted, blacklisted, len);
LIST_INSERT_HEAD(&dnsrbl_head, de, d_list);
Index: dnsrbl.h
diff -u dnsrbl.h.orig dnsrbl.h
--- dnsrbl.h.orig Thu Jul 27 21:48:24 2006
+++ dnsrbl.h Fri Jul 28 16:12:53 2006
@@ -45,8 +45,8 @@
};
void dnsrbl_init(void);
-int dnsrbl_check_source(struct sockaddr *, struct dnsrbl_entry *);
-void reverse_endian(struct sockaddr *, struct sockaddr *);
+int dnsrbl_check_source(struct sockaddr *, socklen_t, struct dnsrbl_entry *);
+void reverse_endian(struct sockaddr *, struct sockaddr *, socklen_t);
void dnsrbl_source_add(char *, char *, struct sockaddr *);
struct dnsrbl_entry *dnsrbl_byname(char *);
void dnsrbl_clear(void);
Sincerely,
--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume@... ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/Message
Re: [milter-greylist] milter-greylist 2.1.8 is available
2006-07-28 by Hajimu UMEMOTO
Attachments
- No local attachments were found for this message.