summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-01-12 02:38:25 +0100
committerMarius Halden <marius.h@lden.org>2016-01-12 02:38:25 +0100
commit6321f828d53e99141642b7d6353c79f1ca762523 (patch)
treeca74f04d95533461730c2ae278a217573a8a56ea
parent9cd7dde45b54f7e09db40197e700e58797101f64 (diff)
downloadspamd-patches-master.tar.gz
spamd-patches-master.tar.bz2
spamd-patches-master.tar.xz
Update datastructures and remove addr8HEADmaster
-rw-r--r--data_structures2
-rw-r--r--spamd-setup.patch132
2 files changed, 61 insertions, 73 deletions
diff --git a/data_structures b/data_structures
index ea1f74b..369e582 100644
--- a/data_structures
+++ b/data_structures
@@ -2,10 +2,8 @@
struct sda6 {
union {
struct in6_addr addr;
- u_int8_t addr8[16]; // To be removed (I hope)
u_int32_t addr32[4];
} _sda6;
-#define addr8 _sda6.addr8
#define addr32 _sda6.addr32
};
diff --git a/spamd-setup.patch b/spamd-setup.patch
index 403fc19..a791b49 100644
--- a/spamd-setup.patch
+++ b/spamd-setup.patch
@@ -5,7 +5,7 @@ RCS file: /cvs/src/libexec/spamd-setup/spamd-setup.c,v
retrieving revision 1.47
diff -u -p -u -r1.47 spamd-setup.c
--- spamd-setup.c 12 Dec 2015 20:09:28 -0000 1.47
-+++ spamd-setup.c 10 Jan 2016 22:08:43 -0000
++++ spamd-setup.c 12 Jan 2016 01:37:04 -0000
@@ -30,6 +30,7 @@
#include <errno.h>
#include <fcntl.h>
@@ -14,39 +14,41 @@ diff -u -p -u -r1.47 spamd-setup.c
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-@@ -42,13 +43,29 @@
+@@ -42,22 +43,40 @@
#define PATH_SPAMD_CONF "/etc/mail/spamd.conf"
#define SPAMD_ARG_MAX 256 /* max # of args to an exec */
-+struct ipv6 {
++struct sda6 {
+ union {
-+ u_int8_t addr8[16];
-+ u_int16_t addr16[8];
-+ u_int32_t addr32[4];
-+ };
++ struct in6_addr addr;
++ u_int32_t addr32[4];
++ } _sda6;
++#define addr32 _sda6.addr32
+};
+
struct cidr {
- u_int32_t addr;
-+ //sa_family_t ai_family;
+ union {
+ u_int32_t addr4;
-+ struct ipv6 addr6;
-+ };
++ struct sda6 addr6;
++ } _addr;
u_int8_t bits;
};
struct bl {
- u_int32_t addr;
-+ //sa_family_t ai_family;
+ union {
+ u_int32_t addr4;
-+ struct ipv6 addr6;
-+ };
++ struct sda6 addr6;
++ } _addr;
int8_t b;
int8_t w;
};
-@@ -58,6 +75,8 @@ struct blacklist {
++#define addr4 _addr.addr4
++#define addr6 _addr.addr6
+
+ struct blacklist {
+ char *name;
char *message;
struct bl *bl;
size_t blc, bls;
@@ -59,10 +61,10 @@ diff -u -p -u -r1.47 spamd-setup.c
u_int8_t maxdiff(u_int32_t, u_int32_t);
struct cidr *range2cidrlist(struct cidr *, u_int *, u_int *, u_int32_t,
u_int32_t);
-+struct cidr *range2cidrlist6(struct cidr *, u_int *, u_int *, struct ipv6 *,
-+ struct ipv6 *);
++struct cidr *range2cidrlist6(struct cidr *, u_int *, u_int *, struct sda6 *,
++ struct sda6 *);
void cidr2range(struct cidr, u_int32_t *, u_int32_t *);
-+void cidr2range6(struct cidr, struct ipv6 *, struct ipv6 *);
++void cidr2range6(struct cidr, struct sda6 *, struct sda6 *);
char *atop(u_int32_t);
-int parse_netblock(char *, struct bl *, struct bl *, int);
+int parse_netblock(char *, struct bl *, struct bl *, struct bl*,
@@ -75,7 +77,7 @@ diff -u -p -u -r1.47 spamd-setup.c
-struct bl *add_blacklist(struct bl *, size_t *, size_t *, gzFile, int);
+int add_blacklist(struct bl **, size_t *, size_t *, struct bl **,
+ size_t *, size_t *, gzFile, int);
-+int cmp_ipv6(const struct ipv6 *, const struct ipv6 *);
++int cmp_ipv6(const struct sda6 *, const struct sda6 *);
int cmpbl(const void *, const void *);
-struct cidr *collapse_blacklist(struct bl *, size_t, u_int *);
-int configure_spamd(u_short, char *, char *, struct cidr *, u_int);
@@ -98,7 +100,7 @@ diff -u -p -u -r1.47 spamd-setup.c
+#define MINIMUM(a,b) (((a)<(b))?(a):(b))
+
+void
-+ipv6_add(struct ipv6 *addr, u_int8_t num)
++ipv6_add(struct sda6 *addr, u_int8_t num)
+{
+ int i;
+ u_int8_t carry;
@@ -120,7 +122,7 @@ diff -u -p -u -r1.47 spamd-setup.c
+}
+
+void
-+ipv6_add2(struct ipv6 *addr, struct ipv6 *src)
++ipv6_add2(struct sda6 *addr, struct sda6 *src)
+{
+ int i, j;
+ u_int8_t carry;
@@ -146,7 +148,7 @@ diff -u -p -u -r1.47 spamd-setup.c
+}
+
+void
-+ipv6_sub(struct ipv6 *addr, u_int8_t num)
++ipv6_sub(struct sda6 *addr, u_int8_t num)
+{
+ int i;
+ u_int8_t carry;
@@ -174,11 +176,11 @@ diff -u -p -u -r1.47 spamd-setup.c
}
+void
-+imask6(struct ipv6 *m, u_int8_t b)
++imask6(struct sda6 *m, u_int8_t b)
+{
+ int i;
+ u_int8_t tmp;
-+ memset(m, 0, sizeof(struct ipv6));
++ memset(m, 0, sizeof(struct sda6));
+
+ for (i = 0; i < 4; i++) {
+ if (b == 0)
@@ -198,9 +200,9 @@ diff -u -p -u -r1.47 spamd-setup.c
}
u_int8_t
-+maxblock6(struct ipv6 *addr, u_int8_t bits)
++maxblock6(struct sda6 *addr, u_int8_t bits)
+{
-+ struct ipv6 m;
++ struct sda6 m;
+ int i;
+
+ while (bits > 0) {
@@ -226,10 +228,10 @@ diff -u -p -u -r1.47 spamd-setup.c
}
+u_int8_t
-+maxdiff6(struct ipv6 *a, struct ipv6 *b)
++maxdiff6(struct sda6 *a, struct sda6 *b)
+{
+ u_int8_t bits = 0;
-+ struct ipv6 m, tmp;
++ struct sda6 m, tmp;
+ int i;
+
+ memcpy(&tmp, b, sizeof(tmp));
@@ -264,12 +266,12 @@ diff -u -p -u -r1.47 spamd-setup.c
}
+struct cidr *
-+range2cidrlist6(struct cidr *list, u_int *cli, u_int *cls, struct ipv6 *start,
-+ struct ipv6 *end)
++range2cidrlist6(struct cidr *list, u_int *cli, u_int *cls, struct sda6 *start,
++ struct sda6 *end)
+{
+ u_int8_t maxsize, diff, btmp;
+ struct cidr *tmp;
-+ struct ipv6 mask;
++ struct sda6 mask;
+ int i;
+
+ while (cmp_ipv6(end, start) >= 0) {
@@ -293,14 +295,14 @@ diff -u -p -u -r1.47 spamd-setup.c
+ maxsize = 128 - maxsize;
+
+ memset(&mask, 0, sizeof(mask));
-+ for (i = 15; i >= 0; i--) {
-+ btmp = MINIMUM(maxsize, 8);
-+ maxsize -= btmp;
-+
-+ mask.addr8[i] = ((1 << btmp) - 1);
-+
++ for (i = 3; i >= 0; i--) {
+ if (maxsize == 0)
+ break;
++
++ btmp = MINIMUM(maxsize, 32);
++ maxsize -= btmp;
++
++ mask.addr32[i] = htonl(0xffffffffU >> (32 - btmp));
+ }
+
+ ipv6_add(&mask, 1);
@@ -320,23 +322,23 @@ diff -u -p -u -r1.47 spamd-setup.c
+}
+
+void
-+cidr2range6(struct cidr cidr, struct ipv6 *start, struct ipv6 *end)
++cidr2range6(struct cidr cidr, struct sda6 *start, struct sda6 *end)
+{
+ int i;
+ u_int8_t tmp, bits = 128 - cidr.bits;
-+ struct ipv6 mask;
++ struct sda6 mask;
+ memset(&mask, 0, sizeof(mask));
+
+ memcpy(start, &cidr.addr6, sizeof(cidr.addr6));
+ memcpy(end, &cidr.addr6, sizeof(cidr.addr6));
+
-+ for (i = 15; i >= 0; i--) {
++ for (i = 3; i >= 0; i--) {
+ if (bits == 0)
+ break;
+
-+ tmp = MINIMUM(bits, 8);
++ tmp = MINIMUM(bits, 32);
+ bits -= tmp;
-+ mask.addr8[i] = ((1 << tmp) - 1);
++ mask.addr32[i] = htonl(0xffffffffU >> (32 - tmp));
+ }
+
+ ipv6_add2(end, &mask);
@@ -359,7 +361,7 @@ diff -u -p -u -r1.47 spamd-setup.c
/* skip leading spaces */
while (*buf == ' ')
-@@ -189,56 +422,130 @@ parse_netblock(char *buf, struct bl *sta
+@@ -189,56 +422,118 @@ parse_netblock(char *buf, struct bl *sta
if (*buf == '#')
return (0);
/* otherwise, look for a netblock of some sort */
@@ -375,7 +377,6 @@ diff -u -p -u -r1.47 spamd-setup.c
+ sizeof(c.addr4)) == -1)
return (0);
- c.addr = ntohl(c.addr);
-+ //c.ai_family = AF_INET;
+ c.addr4 = ntohl(c.addr4);
if (maskbits > 32)
return (0);
@@ -383,7 +384,6 @@ diff -u -p -u -r1.47 spamd-setup.c
- cidr2range(c, &start->addr, &end->addr);
- end->addr += 1;
+ cidr2range(c, &start->addr4, &end->addr4);
-+ //start->ai_family = end->ai_family = AF_INET;
+ end->addr4 += 1;
+
+ ret = AF_INET;
@@ -394,12 +394,10 @@ diff -u -p -u -r1.47 spamd-setup.c
+ if (inet_net_pton(AF_INET6, astring, &c.addr6,
+ sizeof(c.addr6)) == -1)
+ return (0);
-+ //c.ai_family = AF_INET6;
+ if (maskbits > 128)
+ return (0);
+ c.bits = maskbits;
+ cidr2range6(c, &start6->addr6, &end6->addr6);
-+ //start6->ai_family = end6->ai_family = AF_INET6;
+ ipv6_add(&end6->addr6, 1);
+
+ ret = AF_INET6;
@@ -421,12 +419,10 @@ diff -u -p -u -r1.47 spamd-setup.c
+ sizeof(start->addr4)) == -1)
return (0);
- end->addr = ntohl(end->addr) + 1;
-+ //start->ai_family = AF_INET;
+ start->addr4 = ntohl(start->addr4);
+ if (inet_net_pton(AF_INET, astring2, &end->addr4,
+ sizeof(end->addr4)) == -1)
+ return (0);
-+ //end->ai_family = AF_INET;
+ end->addr4 = ntohl(end->addr4) + 1;
if (start > end)
return (0);
@@ -440,11 +436,9 @@ diff -u -p -u -r1.47 spamd-setup.c
+ if (inet_net_pton(AF_INET6, astring, &start6->addr6,
+ sizeof(start6->addr6)) == -1)
+ return (0);
-+ //start6->ai_family = AF_INET6;
+ if (inet_net_pton(AF_INET6, astring2, &end6->addr6,
+ sizeof(end6->addr6)) == -1)
+ return (0);
-+ //end6->ai_family = AF_INET6;
+ ipv6_add(&end6->addr6, 1);
+ if (start6 > end6)
+ return (0);
@@ -462,8 +456,6 @@ diff -u -p -u -r1.47 spamd-setup.c
return (0);
- start->addr = ntohl(start->addr);
- end->addr = start->addr + 1;
-+ //start->ai_family = AF_INET;
-+ //end->ai_family = AF_INET;
+ start->addr4 = ntohl(start->addr4);
+ end->addr4 = start->addr4 + 1;
+
@@ -474,8 +466,6 @@ diff -u -p -u -r1.47 spamd-setup.c
+ if (inet_net_pton(AF_INET6, astring, &start6->addr6,
+ sizeof(start6->addr6)) == -1)
+ return (0);
-+ //start6->ai_family = AF_INET6;
-+ //end6->ai_family = AF_INET6;
+ memcpy(&end6->addr6, &start6->addr6,
+ sizeof(start6->addr6));
+
@@ -523,7 +513,7 @@ diff -u -p -u -r1.47 spamd-setup.c
}
int
-@@ -445,8 +752,9 @@ do_message(FILE *sdc, char *msg)
+@@ -445,8 +740,9 @@ do_message(FILE *sdc, char *msg)
}
/* retrieve a list from fd. add to blacklist bl */
@@ -535,7 +525,7 @@ diff -u -p -u -r1.47 spamd-setup.c
{
int i, n, start, bu = 0, bs = 0, serrno = 0;
char *buf = NULL, *tmp;
-@@ -481,30 +789,55 @@ add_blacklist(struct bl *bl, size_t *blc
+@@ -481,30 +777,55 @@ add_blacklist(struct bl *bl, size_t *blc
/* we assume that there is an IP for every 14 bytes */
if (*blc + bu / 7 >= *bls) {
*bls += bu / 7;
@@ -597,7 +587,7 @@ diff -u -p -u -r1.47 spamd-setup.c
start = i + 1;
}
}
-@@ -512,29 +845,83 @@ add_blacklist(struct bl *bl, size_t *blc
+@@ -512,29 +833,83 @@ add_blacklist(struct bl *bl, size_t *blc
errno = EIO;
bldone:
free(buf);
@@ -611,7 +601,7 @@ diff -u -p -u -r1.47 spamd-setup.c
+}
+
+int
-+cmp_ipv6(const struct ipv6 *a, const struct ipv6 *b)
++cmp_ipv6(const struct sda6 *a, const struct sda6 *b)
+{
+ int i;
+ u_int32_t atmp, btmp;
@@ -643,7 +633,7 @@ diff -u -p -u -r1.47 spamd-setup.c
+int
+cmpbl6(const void *a, const void *b)
+{
-+ struct ipv6 *addr1, *addr2;
++ struct sda6 *addr1, *addr2;
+
+ addr1 = &((struct bl *)a)->addr6;
+ addr2 = &((struct bl *)b)->addr6;
@@ -686,7 +676,7 @@ diff -u -p -u -r1.47 spamd-setup.c
{
int bs = 0, ws = 0, state=0;
u_int cli, cls, i;
-@@ -558,13 +945,13 @@ collapse_blacklist(struct bl *bl, size_t
+@@ -558,13 +933,13 @@ collapse_blacklist(struct bl *bl, size_t
qsort(bl, blc, sizeof(struct bl), cmpbl);
for (i = 0; i < blc;) {
laststate = state;
@@ -702,7 +692,7 @@ diff -u -p -u -r1.47 spamd-setup.c
if (state == 1 && bs == 0)
state = 0;
else if (state == 0 && bs > 0)
-@@ -581,18 +968,73 @@ collapse_blacklist(struct bl *bl, size_t
+@@ -581,18 +956,73 @@ collapse_blacklist(struct bl *bl, size_t
}
laststate = state;
}
@@ -719,7 +709,7 @@ diff -u -p -u -r1.47 spamd-setup.c
+ u_int cli, cls, i;
+ struct cidr *cl;
+ int laststate;
-+ struct ipv6 bstart, addr;
++ struct sda6 bstart, addr;
+
+ memset(&bstart, 0, sizeof(bstart));
+
@@ -779,7 +769,7 @@ diff -u -p -u -r1.47 spamd-setup.c
s = rresvport(&lport);
if (s == -1)
-@@ -612,10 +1054,14 @@ configure_spamd(u_short dport, char *nam
+@@ -612,10 +1042,14 @@ configure_spamd(u_short dport, char *nam
fputs(name, sdc);
do_message(sdc, message);
fprintf(sdc, ";inet;%u", count);
@@ -798,7 +788,7 @@ diff -u -p -u -r1.47 spamd-setup.c
}
fputc('\n', sdc);
fclose(sdc);
-@@ -625,12 +1071,14 @@ configure_spamd(u_short dport, char *nam
+@@ -625,12 +1059,14 @@ configure_spamd(u_short dport, char *nam
int
@@ -815,7 +805,7 @@ diff -u -p -u -r1.47 spamd-setup.c
if (pf == NULL) {
if (pipe(pdes) != 0)
-@@ -659,10 +1107,13 @@ configure_pf(struct cidr *blacklists)
+@@ -659,10 +1095,13 @@ configure_pf(struct cidr *blacklists)
return (-1);
}
}
@@ -833,7 +823,7 @@ diff -u -p -u -r1.47 spamd-setup.c
}
return (0);
}
-@@ -672,9 +1123,10 @@ getlist(char ** db_array, char *name, st
+@@ -672,9 +1111,10 @@ getlist(char ** db_array, char *name, st
struct blacklist *blistnew)
{
char *buf, *method, *file, *message;
@@ -846,7 +836,7 @@ diff -u -p -u -r1.47 spamd-setup.c
gzFile gzf;
if (cgetent(&buf, db_array, name) != 0)
-@@ -686,12 +1138,18 @@ getlist(char ** db_array, char *name, st
+@@ -686,12 +1126,18 @@ getlist(char ** db_array, char *name, st
blc = blistnew->blc;
bls = blistnew->bls;
bl = blistnew->bl;
@@ -865,7 +855,7 @@ diff -u -p -u -r1.47 spamd-setup.c
} else
errx(1, "Must have \"black\" or \"white\" in %s", name);
-@@ -730,10 +1188,10 @@ getlist(char ** db_array, char *name, st
+@@ -730,10 +1176,10 @@ getlist(char ** db_array, char *name, st
errx(1, "gzdopen");
}
free(buf);
@@ -878,7 +868,7 @@ diff -u -p -u -r1.47 spamd-setup.c
errno = serror;
warn("Could not add %slist %s", black ? "black" : "white",
name);
-@@ -742,13 +1200,16 @@ getlist(char ** db_array, char *name, st
+@@ -742,13 +1188,16 @@ getlist(char ** db_array, char *name, st
if (black) {
if (debug)
fprintf(stderr, "blacklist %s %zu entries\n",
@@ -896,7 +886,7 @@ diff -u -p -u -r1.47 spamd-setup.c
} else {
/* whitelist applied to last active blacklist */
if (debug)
-@@ -757,6 +1218,9 @@ getlist(char ** db_array, char *name, st
+@@ -757,6 +1206,9 @@ getlist(char ** db_array, char *name, st
blist->bl = bl;
blist->blc = blc;
blist->bls = bls;
@@ -906,7 +896,7 @@ diff -u -p -u -r1.47 spamd-setup.c
}
return (black);
}
-@@ -764,22 +1228,24 @@ getlist(char ** db_array, char *name, st
+@@ -764,22 +1216,24 @@ getlist(char ** db_array, char *name, st
void
send_blacklist(struct blacklist *blist, in_port_t port)
{