diff options
author | 2015-11-23 21:50:12 +0000 | |
---|---|---|
committer | 2015-11-23 21:50:12 +0000 | |
commit | 787a07c518c21f49b65a4828659dc655d71f9d98 (patch) | |
tree | a25bb385d8833a6071d9f2031c5063237b99d2d3 | |
parent | sync to GENERIC (diff) | |
download | wireguard-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/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpd-api.h | 5 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpd.h | 3 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpd/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/smtpd/table.c | 32 |
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) |