Re: Qmail-LDAP with greylist and greetdelay support
Jose Celestino <[email protected]>
| Newsgroups | gmane.mail.qmail.ldap |
|---|---|
| Message-ID | <[email protected]> |
Words by Robert Müller [Mon, Mar 16, 2009 at 09:24:55PM +0100]: > Hi, > > Be careful: Continuation of an older post ;-): > I just took a look at your howto's and software (great work, really!) and > decided to give greetdelay and policyd-integration a try. Unfortunately, > the qenvscan-policyd binary doesn't run on a amd64 kernel. It compiles > fine, but running it results in a segfault. I'm using Debian 5.0. > On a Debian 4.0 x686 it runs fine. > As I'm not a developer - can you please help? > Try the attached patch (couldn't try it as I don't have a policy server and whatever needed). -- Jose Celestino | http://japc.uncovering.org/files/japc-pgpkey.asc ---------------------------------------------------------------- "One man’s theology is another man’s belly laugh." -- Robert A. Heinlein
qenvscan-policyd-cycle_overflow.diff
(text/x-diff, 1.7 KB)
--- qenvscan-policyd/qenvscan-policyd.c 2009-03-16 21:24:59.000000000 +0000
+++ qenvscan-policyd-japc/qenvscan-policyd.c 2009-03-16 21:24:07.000000000 +0000
@@ -65,6 +65,7 @@
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
+#include <limits.h>
#define SIZEOF_INT sizeof(int)
@@ -88,8 +89,8 @@
char answer[32];
char *policyd_server, *policyd_env_port, *end_ptr;
- char *key[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- char *value[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ char *key[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ char *value[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char *query;
int keylens[8];
@@ -121,7 +122,7 @@
key[4] = "client_name=";
key[5] = "sender=";
key[6] = "recipient=";
- key[7] = argv[3] != NULL ? "helo_name=" : 0;
+ key[7] = argv[3] != NULL ? "helo_name=" : NULL;
value[0] = "smtpd_access_policy";
value[1] = "SMTP";
@@ -132,33 +133,27 @@
value[6] = argv[2];
value[7] = argv[3] != NULL ? argv[3] : 0;
- for (i=0;i<sizeof(key)/SIZEOF_INT;i++) {
- if (key[i] != NULL) {
+ for (i=0; key[i]; i++) {
keylens[i] = strlen(key[i]);
keylen += keylens[i];
}
- }
- for (i=0;i<sizeof(value)/SIZEOF_INT;i++) {
- if (value[i] != NULL) {
+ for (i=0; value[i]; i++) {
valuelens[i] = strlen(value[i]);
valuelen += valuelens[i];
}
- }
len = keylen + valuelen + sizeof(key)/SIZEOF_INT + 2;
query = malloc(len);
- for (i=j=0;i<sizeof(key)/SIZEOF_INT && j<len;i++) {
- if (key[i] != NULL && value[i] != NULL) {
+ for (i=j=0; key[i] && value[i] && j<len;i++) {
strcpy(query+j, key[i]);
j += keylens[i];
strcpy(query+j, value[i]);
j += valuelens[i];
query[j++] = '\n';
}
- }
query[j++] = '\n';
query[j++] = '\0';