diff options
Diffstat (limited to 'usr.sbin/smtpd/makemap.c')
-rw-r--r-- | usr.sbin/smtpd/makemap.c | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/usr.sbin/smtpd/makemap.c b/usr.sbin/smtpd/makemap.c index 50e0b228787..eb76ad6fe73 100644 --- a/usr.sbin/smtpd/makemap.c +++ b/usr.sbin/smtpd/makemap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: makemap.c,v 1.8 2009/02/14 18:37:12 jacekm Exp $ */ +/* $OpenBSD: makemap.c,v 1.9 2009/02/17 23:43:57 jacekm Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org> @@ -37,6 +37,8 @@ #include "smtpd.h" +#define PATH_ALIASES "/etc/mail/aliases" + extern char *__progname; __dead void usage(void); @@ -45,6 +47,8 @@ int parse_entry(char *, size_t, size_t); int make_plain(DBT *, char *); int make_aliases(DBT *, char *); +char *conf_aliases(char *); + DB *db; char *source; char *oflag; @@ -60,21 +64,43 @@ enum output_type { T_ALIASES } type; +/* + * Stub functions so that makemap compiles using minimum object files. + */ +void +purge_config(struct smtpd *env, u_int8_t what) +{ + bzero(env, sizeof(struct smtpd)); +} + +int +ssl_load_certfile(struct smtpd *env, const char *name) +{ + return (0); +} + int main(int argc, char *argv[]) { char dbname[MAXPATHLEN]; char *opts; + char *conf; int ch; + log_init(1); + mode = strcmp(__progname, "newaliases") ? P_MAKEMAP : P_NEWALIASES; + conf = CONF_FILE; type = T_PLAIN; opts = "ho:t:"; if (mode == P_NEWALIASES) - opts = "h"; + opts = "f:h"; while ((ch = getopt(argc, argv, opts)) != -1) { switch (ch) { + case 'f': + conf = optarg; + break; case 'o': oflag = optarg; break; @@ -97,7 +123,7 @@ main(int argc, char *argv[]) if (argc != 0) usage(); type = T_ALIASES; - source = PATH_ALIASES; + source = conf_aliases(conf); } else { if (argc != 1) usage(); @@ -287,11 +313,37 @@ error: return 0; } +char * +conf_aliases(char *cfgpath) +{ + struct smtpd env; + struct map *map; + char *path; + char *p; + + if (parse_config(&env, cfgpath, 0)) + exit(1); + + map = map_findbyname(&env, "aliases"); + if (map == NULL) + return (PATH_ALIASES); + + path = strdup(map->m_config); + if (path == NULL) + err(1, NULL); + p = strstr(path, ".db"); + if (p == NULL || p[3] != '\0') + errx(1, "%s: %s: no .db suffix present", cfgpath, path); + *p = '\0'; + + return (path); +} + void usage(void) { if (mode == P_NEWALIASES) - fprintf(stderr, "usage: %s\n", __progname); + fprintf(stderr, "usage: %s [-f file]\n", __progname); else fprintf(stderr, "usage: %s [-t type] [-o dbfile] file\n", __progname); |