diff options
Diffstat (limited to 'usr.sbin/smtpd/map.c')
-rw-r--r-- | usr.sbin/smtpd/map.c | 184 |
1 files changed, 1 insertions, 183 deletions
diff --git a/usr.sbin/smtpd/map.c b/usr.sbin/smtpd/map.c index 2c1927709e2..63b9c684a4b 100644 --- a/usr.sbin/smtpd/map.c +++ b/usr.sbin/smtpd/map.c @@ -1,4 +1,4 @@ -/* $OpenBSD: map.c,v 1.13 2010/04/21 20:10:24 gilles Exp $ */ +/* $OpenBSD: map.c,v 1.14 2010/04/21 21:04:29 gilles Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org> @@ -37,42 +37,6 @@ 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 *); -void map_db_close(void *); -char *map_db_get(void *, char *, size_t *); -int map_db_put(void *, char *, char *); - -/* stdio(3) backend */ -void *map_stdio_open(char *); -void map_stdio_close(void *); -char *map_stdio_get(void *, char *, size_t *); -int map_stdio_put(void *, char *, char *); - - -struct map_backend { - enum map_src source; - void *(*open)(char *); - void (*close)(void *); - char *(*get)(void *, char *, size_t *); - int (*put)(void *, char *, char *); -} map_backends[] = { - { S_DB, - map_db_open, map_db_close, map_db_get, map_db_put }, - { S_FILE, - 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_VIRTUAL, NULL }, - { K_SECRETS, NULL } -}; - struct map * map_findbyname(struct smtpd *env, const char *name) { @@ -134,149 +98,3 @@ end: backend->close(hdl); return ret; } - -struct map_backend * -map_backend_lookup(enum map_src source) -{ - u_int8_t i; - - for (i = 0; i < nitems(map_backends); ++i) - if (map_backends[i].source == source) - break; - - if (i == nitems(map_backends)) - fatalx("invalid map type"); - - 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 * -map_db_open(char *src) -{ - return dbopen(src, O_RDONLY, 0600, DB_HASH, NULL); -} - -void -map_db_close(void *hdl) -{ - DB *db = hdl; - - db->close(db); -} - -char * -map_db_get(void *hdl, char *key, size_t *len) -{ - int ret; - DBT dbk; - DBT dbv; - DB *db = hdl; - char *result = NULL; - - dbk.data = key; - dbk.size = strlen(dbk.data) + 1; - - if ((ret = db->get(db, &dbk, &dbv, 0)) != 0) - return NULL; - - result = calloc(dbv.size, 1); - if (result == NULL) - fatal("calloc"); - (void)strlcpy(result, dbv.data, dbv.size); - - *len = dbv.size; - - return result; -} - -int -map_db_put(void *hdl, char *key, char *val) -{ - return 0; -} - - -/* stdio(3) backend */ -void * -map_stdio_open(char *src) -{ - return fopen(src, "r"); -} - -void -map_stdio_close(void *hdl) -{ - FILE *fp = hdl; - - fclose(fp); -} - -char * -map_stdio_get(void *hdl, char *key, size_t *len) -{ - char *buf, *lbuf; - size_t flen; - char *keyp; - char *valp; - FILE *fp = hdl; - char *result = NULL; - - lbuf = NULL; - while ((buf = fgetln(fp, &flen))) { - if (buf[flen - 1] == '\n') - buf[flen - 1] = '\0'; - else { - if ((lbuf = malloc(flen + 1)) == NULL) - err(1, NULL); - memcpy(lbuf, buf, flen); - lbuf[flen] = '\0'; - buf = lbuf; - } - - keyp = buf; - while (isspace((int)*keyp)) - ++keyp; - if (*keyp == '\0' || *keyp == '#') - continue; - - valp = keyp; - strsep(&valp, " \t:"); - if (valp == NULL || valp == keyp) - continue; - - if (strcmp(keyp, key) != 0) - continue; - - result = strdup(valp); - if (result == NULL) - err(1, NULL); - *len = strlen(result); - - break; - } - free(lbuf); - - return result; -} - -int -map_stdio_put(void *hdl, char *key, char *val) -{ - return 0; -} |