~mdw
/
qmail
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
addrcheck: Take the domain as following the last `@', not the first.
[qmail]
/
addrcheck.c
diff --git
a/addrcheck.c
b/addrcheck.c
index
b463bd8
..
63281a3
100644
(file)
--- a/
addrcheck.c
+++ b/
addrcheck.c
@@
-5,6
+5,7
@@
#include "addrcheck.h"
#include <errno.h>
#include <unistd.h>
#include "addrcheck.h"
#include <errno.h>
#include <unistd.h>
+#include <fcntl.h>
/* #define DEBUG */
#ifdef DEBUG
/* #define DEBUG */
#ifdef DEBUG
@@
-131,9
+132,10
@@
static int localprobe(int cdb, const char *sender,
if (pipe(p) || (kid = fork()) == -1)
return (-1);
if (!kid) {
if (pipe(p) || (kid = fork()) == -1)
return (-1);
if (!kid) {
+ close(0); open("/dev/null", O_RDONLY);
dup2(p[1], 1);
dup2(p[1], 1);
- close(
p[0]
);
- close(p[1]);
+ close(
2); open("/dev/null", O_WRONLY
);
+ close(p[
0]); close(p[
1]);
execl("/usr/bin/userv", "/usr/bin/userv",
"-f", "stdin=/dev/null",
u.s, serv.s,
execl("/usr/bin/userv", "/usr/bin/userv",
"-f", "stdin=/dev/null",
u.s, serv.s,
@@
-259,9
+261,10
@@
int addrcheck(int cdb, const char *addr, const char *sender, int *rc)
int at, len, dot;
int err = 0;
uint32 dlen;
int at, len, dot;
int err = 0;
uint32 dlen;
+ static stralloc l = STRALLOC_INIT;
len = str_len(addr);
len = str_len(addr);
- at = str_chr(addr, '@');
+ at = str_
r
chr(addr, '@');
if (!addr[at])
return (local(cdb, addr, len, sender, rc));
if (!addr[at])
return (local(cdb, addr, len, sender, rc));
@@
-278,8
+281,11
@@
int addrcheck(int cdb, const char *addr, const char *sender, int *rc)
return (-1);
if (!err) { *rc = 1; return (0); }
if (dlen != 0) { errno = EINVAL; return (-1); }
return (-1);
if (!err) { *rc = 1; return (0); }
if (dlen != 0) { errno = EINVAL; return (-1); }
-
- return (local(cdb, addr, at, sender, rc));
+ l.len = 0;
+ if (!stralloc_catb(&l, addr, at) ||
+ !stralloc_0(&l))
+ return (-1);
+ return (local(cdb, l.s, l.len - 1, sender, rc));
}
#ifdef TEST
}
#ifdef TEST