summaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorGilles Chehade <gilles@cvs.openbsd.org>2009-10-12 18:19:47 +0000
committerGilles Chehade <gilles@cvs.openbsd.org>2009-10-12 18:19:47 +0000
commit4c85db8b5736693bd819a09987f0dc89a9f1c24d (patch)
tree52720f2d03c22df54feaebfdb7a33f45399b9bf7 /usr.sbin
parent8c6e2facbc71f7315f683084309517df13be135a (diff)
to support virtual domains properly, smtpd needed to have the domain stored
as a key in the virtual map, which means that to support virtual domain for openbsd.org I would do: openbsd.org whatevervalue gilles@openbsd.org gilles this commit teaches makemap how to deduce the special domain keys based on the entries for that domain, so that only the second line is needed now.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/smtpd/makemap.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/usr.sbin/smtpd/makemap.c b/usr.sbin/smtpd/makemap.c
index bb940aff167..4291d5033f3 100644
--- a/usr.sbin/smtpd/makemap.c
+++ b/usr.sbin/smtpd/makemap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: makemap.c,v 1.20 2009/08/08 00:02:22 gilles Exp $ */
+/* $OpenBSD: makemap.c,v 1.21 2009/10/12 18:19:46 gilles Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org>
@@ -221,8 +221,11 @@ parse_entry(char *line, size_t len, size_t lineno)
{
DBT key;
DBT val;
+ DBT domkey;
+ DBT domval;
char *keyp;
char *valp;
+ char *domp;
keyp = line;
while (isspace((int)*keyp))
@@ -259,6 +262,22 @@ parse_entry(char *line, size_t len, size_t lineno)
warn("dbput");
return 0;
}
+
+ /* add key for domain */
+ if ((domp = strrchr(key.data, '@')) != NULL) {
+ domkey.data = domp + 1;
+ domkey.size = strlen(domkey.data) + 1;
+
+ domval.data = "<empty>";
+ domval.size = strlen(domval.data) + 1;
+
+ if (db->put(db, &domkey, &domval, 0) == -1) {
+ warn("dbput");
+ return 0;
+ }
+ }
+
+
dbputs++;
free(val.data);