summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgilles <gilles@openbsd.org>2015-11-23 21:50:12 +0000
committergilles <gilles@openbsd.org>2015-11-23 21:50:12 +0000
commit787a07c518c21f49b65a4828659dc655d71f9d98 (patch)
treea25bb385d8833a6071d9f2031c5063237b99d2d3
parentsync to GENERIC (diff)
downloadwireguard-openbsd-787a07c518c21f49b65a4828659dc655d71f9d98.tar.xz
wireguard-openbsd-787a07c518c21f49b65a4828659dc655d71f9d98.zip
allow table API to lookup for mailaddr mappings
ok sunil@, ok jung@
-rw-r--r--usr.sbin/smtpd/makemap/Makefile4
-rw-r--r--usr.sbin/smtpd/smtpd-api.h5
-rw-r--r--usr.sbin/smtpd/smtpd.h3
-rw-r--r--usr.sbin/smtpd/smtpd/Makefile4
-rw-r--r--usr.sbin/smtpd/table.c32
5 files changed, 23 insertions, 25 deletions
diff --git a/usr.sbin/smtpd/makemap/Makefile b/usr.sbin/smtpd/makemap/Makefile
index ca051f8ea57..0d2848affe5 100644
--- a/usr.sbin/smtpd/makemap/Makefile
+++ b/usr.sbin/smtpd/makemap/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.25 2015/10/06 00:30:30 deraadt Exp $
+# $OpenBSD: Makefile,v 1.26 2015/11/23 21:50:12 gilles Exp $
.PATH: ${.CURDIR}/..
@@ -19,7 +19,7 @@ CFLAGS+= -Wsign-compare
CFLAGS+= -DNO_IO
SRCS= aliases.c dict.c expand.c limit.c log.c makemap.c parse.y \
- table.c to.c tree.c util.c
+ mailaddr.c table.c to.c tree.c util.c
SRCS+= table_static.c
SRCS+= table_db.c
diff --git a/usr.sbin/smtpd/smtpd-api.h b/usr.sbin/smtpd/smtpd-api.h
index 3359df2dff0..8a598310709 100644
--- a/usr.sbin/smtpd/smtpd-api.h
+++ b/usr.sbin/smtpd/smtpd-api.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtpd-api.h,v 1.24 2015/11/05 09:14:31 sunil Exp $ */
+/* $OpenBSD: smtpd-api.h,v 1.25 2015/11/23 21:50:12 gilles Exp $ */
/*
* Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@@ -199,8 +199,9 @@ enum table_service {
K_SOURCE = 0x20, /* returns struct source */
K_MAILADDR = 0x40, /* returns struct mailaddr */
K_ADDRNAME = 0x80, /* returns struct addrname */
+ K_MAILADDRMAP = 0x100, /* returns struct maddrmap */
};
-#define K_ANY 0xff
+#define K_ANY 0xfff
enum {
PROC_TABLE_OK,
diff --git a/usr.sbin/smtpd/smtpd.h b/usr.sbin/smtpd/smtpd.h
index 35ec79af471..4e13f1f70d1 100644
--- a/usr.sbin/smtpd/smtpd.h
+++ b/usr.sbin/smtpd/smtpd.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtpd.h,v 1.484 2015/11/05 09:14:31 sunil Exp $ */
+/* $OpenBSD: smtpd.h,v 1.485 2015/11/23 21:50:12 gilles Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -146,6 +146,7 @@ union lookup {
struct userinfo userinfo;
struct mailaddr mailaddr;
struct addrname addrname;
+ struct maddrmap *maddrmap;
};
/*
diff --git a/usr.sbin/smtpd/smtpd/Makefile b/usr.sbin/smtpd/smtpd/Makefile
index b74b7f2c0cd..120aebae1b4 100644
--- a/usr.sbin/smtpd/smtpd/Makefile
+++ b/usr.sbin/smtpd/smtpd/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.79 2015/10/06 00:30:32 deraadt Exp $
+# $OpenBSD: Makefile,v 1.80 2015/11/23 21:50:12 gilles Exp $
.PATH: ${.CURDIR}/..
@@ -7,7 +7,7 @@ PROG= smtpd
SRCS= aliases.c bounce.c ca.c compress_backend.c config.c \
control.c crypto.c delivery.c dict.c dns.c envelope.c esc.c \
expand.c forward.c iobuf.c ioev.c limit.c lka.c lka_session.c \
- log.c mda.c mproc.c \
+ log.c mailaddr.c mda.c mproc.c \
mta.c mta_session.c parse.y pony.c queue.c queue_backend.c \
ruleset.c runq.c scheduler.c scheduler_backend.c \
smtp.c smtp_session.c smtpd.c ssl.c \
diff --git a/usr.sbin/smtpd/table.c b/usr.sbin/smtpd/table.c
index 6e8753f60ad..d0217ac8e13 100644
--- a/usr.sbin/smtpd/table.c
+++ b/usr.sbin/smtpd/table.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: table.c,v 1.19 2015/01/20 17:37:54 deraadt Exp $ */
+/* $OpenBSD: table.c,v 1.20 2015/11/23 21:50:12 gilles Exp $ */
/*
* Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@@ -97,6 +97,7 @@ table_service_name(enum table_service s)
case K_SOURCE: return "SOURCE";
case K_MAILADDR: return "MAILADDR";
case K_ADDRNAME: return "ADDRNAME";
+ case K_MAILADDRMAP: return "MAILADDRMAP";
default: return "???";
}
}
@@ -366,28 +367,12 @@ table_mailaddr_match(const char *s1, const char *s2)
{
struct mailaddr m1;
struct mailaddr m2;
- char *p;
if (! text_to_mailaddr(&m1, s1))
return 0;
if (! text_to_mailaddr(&m2, s2))
return 0;
-
- if (! table_domain_match(m1.domain, m2.domain))
- return 0;
-
- if (m2.user[0]) {
- /* if address from table has a tag, we must respect it */
- if (strchr(m2.user, '+') == NULL) {
- /* otherwise, strip tag from session address if any */
- p = strchr(m1.user, '+');
- if (p)
- *p = '\0';
- }
- if (strcasecmp(m1.user, m2.user))
- return 0;
- }
- return 1;
+ return mailaddr_match(&m1, &m2);
}
static int table_match_mask(struct sockaddr_storage *, struct netaddr *);
@@ -616,6 +601,17 @@ table_parse_lookup(enum table_service service, const char *key,
return (-1);
return (1);
+ case K_MAILADDRMAP:
+ lk->maddrmap = calloc(1, sizeof(*lk->maddrmap));
+ if (lk->maddrmap == NULL)
+ return (-1);
+ maddrmap_init(lk->maddrmap);
+ if (! mailaddr_line(lk->maddrmap, line)) {
+ maddrmap_free(lk->maddrmap);
+ return (-1);
+ }
+ return (1);
+
case K_ADDRNAME:
if (parse_sockaddr((struct sockaddr *)&lk->addrname.addr,
PF_UNSPEC, key) == -1)