From ebe7ade71848bc2c34e05f09b5124a62b6d20569 Mon Sep 17 00:00:00 2001 From: Simon Schubert Date: Thu, 9 Jul 2009 14:37:16 +0200 Subject: [PATCH] dma: add the MAILNAME and MAILNAMEFILE config options Submitted-by: Peter Pentchev --- conf.c | 8 ++++++++ dma.8 | 14 ++++++++++++++ dma.c | 30 +++++++++++++++++++++++++++++- dma.h | 2 ++ 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/conf.c b/conf.c index 161edcd..e587c30 100644 --- a/conf.c +++ b/conf.c @@ -236,6 +236,14 @@ parse_conf(const char *config_path, struct config *config) if (data != NULL) config->certfile = strdup(data); } + else if (strcmp(word, "MAILNAME") == 0) { + if (data != NULL) + config->mailname = strdup(data); + } + else if (strcmp(word, "MAILNAMEFILE") == 0) { + if (data != NULL) + config->mailnamefile = strdup(data); + } else if (strcmp(word, "VIRTUAL") == 0) config->features |= VIRTUAL; else if (strcmp(word, "STARTTLS") == 0) diff --git a/dma.8 b/dma.8 index 0a1330c..bb178bc 100644 --- a/dma.8 +++ b/dma.8 @@ -222,6 +222,20 @@ This option is handy if you are behind a dialup line. .Xc Uncomment if you want the bounce message to include the complete original message, not just the headers. +.It Ic MAILNAME Xo +(string, default=empty) +.Xc +The name to be used when introducing this host, if different from +the result of +.Xr hostname 1 . +If specified, this option overrides +.Sq MAILNAMEFILE . +.It Ic MAILNAMEFILE Xo +(string, default=empty) +.Xc +The name of the file to read the +.Sq MAILNAME +from. .El .Ss virtusertable The diff --git a/dma.c b/dma.c index 44a49c5..6219fab 100644 --- a/dma.c +++ b/dma.c @@ -80,10 +80,38 @@ char * hostname(void) { static char name[MAXHOSTNAMELEN+1]; + int initialized = 0; + FILE *fp; + size_t len; + + if (initialized) + return (name); + if (config->mailname != NULL && config->mailname[0] != '\0') { + snprintf(name, sizeof(name), "%s", config->mailname); + initialized = 1; + return (name); + } + if (config->mailnamefile != NULL && config->mailnamefile[0] != '\0') { + fp = fopen(config->mailnamefile, "r"); + if (fp != NULL) { + if (fgets(name, sizeof(name), fp) != NULL) { + len = strlen(name); + while (len > 0 && + (name[len - 1] == '\r' || + name[len - 1] == '\n')) + name[--len] = '\0'; + if (name[0] != '\0') { + initialized = 1; + return (name); + } + } + fclose(fp); + } + } if (gethostname(name, sizeof(name)) != 0) strcpy(name, "(unknown hostname)"); - + initialized = 1; return name; } diff --git a/dma.h b/dma.h index ff47202..49a2ae6 100644 --- a/dma.h +++ b/dma.h @@ -121,6 +121,8 @@ struct config { #ifdef HAVE_CRYPTO SSL *ssl; #endif /* HAVE_CRYPTO */ + char *mailname; + char *mailnamefile; }; -- 2.47.3