diff options
author | Gilles Chehade <gilles@cvs.openbsd.org> | 2010-04-21 19:45:08 +0000 |
---|---|---|
committer | Gilles Chehade <gilles@cvs.openbsd.org> | 2010-04-21 19:45:08 +0000 |
commit | fd61b69b0ae66552b57201d46c1bfaa0d75cb766 (patch) | |
tree | 86117cad78ae933b6c0e524383fdf03203a38cef /usr.sbin/smtpd/map.c | |
parent | 732cfb4dd932c051af555740a5cc5412588e1d67 (diff) |
introduce enum map_kind, the map_parsers array and map_parser_lookup()
which will be used to perform stronger checks on map values. they are
unused yet ...
Diffstat (limited to 'usr.sbin/smtpd/map.c')
-rw-r--r-- | usr.sbin/smtpd/map.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/usr.sbin/smtpd/map.c b/usr.sbin/smtpd/map.c index 4e8a5737cff..3b159c77ca4 100644 --- a/usr.sbin/smtpd/map.c +++ b/usr.sbin/smtpd/map.c @@ -1,4 +1,4 @@ -/* $OpenBSD: map.c,v 1.10 2010/04/21 19:37:32 gilles Exp $ */ +/* $OpenBSD: map.c,v 1.11 2010/04/21 19:45:07 gilles Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org> @@ -35,6 +35,7 @@ #include "smtpd.h" struct map_backend *map_backend_lookup(enum map_src); +struct map_parser *map_parser_lookup(enum map_kind); /* db(3) backend */ void *map_db_open(char *); @@ -62,6 +63,15 @@ struct map_backend { map_stdio_open, map_stdio_close, map_stdio_get, map_stdio_put }, }; +struct map_parser { + enum map_kind kind; + void *(*extract)(char *, size_t len); +} map_parsers[] = { + { K_NONE, NULL }, + { K_ALIASES, NULL }, + { K_CREDENTIALS, NULL } +}; + struct map * map_findbyname(struct smtpd *env, const char *name) { @@ -127,6 +137,20 @@ map_backend_lookup(enum map_src source) return &map_backends[i]; } +struct map_parser * +map_parser_lookup(enum map_kind kind) +{ + u_int8_t i; + + for (i = 0; i < nitems(map_parsers); ++i) + if (map_parsers[i].kind == kind) + break; + + if (i == nitems(map_parsers)) + fatalx("invalid map kind"); + + return &map_parsers[i]; +} /* db(3) backend */ void * |