]> git.ipfire.org Git - people/ms/dma.git/commitdiff
dma: add the MAILNAME and MAILNAMEFILE config options
authorSimon Schubert <corecode@dragonflybsd.org>
Thu, 9 Jul 2009 12:37:16 +0000 (14:37 +0200)
committerSimon Schubert <corecode@dragonflybsd.org>
Thu, 16 Jul 2009 14:13:05 +0000 (16:13 +0200)
Submitted-by: Peter Pentchev <roam@ringlet.net>
conf.c
dma.8
dma.c
dma.h

diff --git a/conf.c b/conf.c
index 161edcd08fcd467fadc4ab9797389949e9c74633..e587c3082a6530ace0ca2449f6fdda7197df4ae6 100644 (file)
--- 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 0a1330c162b2cbb5a87b199ebab23abb22c7f6e8..bb178bcdc83c929dde3f8ddf76fef67c5bbf56a1 100644 (file)
--- 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 44a49c5cc4ad808ab0cf7b5e4046a6e1200c3a5d..6219faba0f667e624f785a8df82a4d81bcd45cf9 100644 (file)
--- 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 ff472028501be7e255d9bd7382feb40113a959d9..49a2ae6b338d653d7b9374d54978d829c663b6c2 100644 (file)
--- a/dma.h
+++ b/dma.h
@@ -121,6 +121,8 @@ struct config {
 #ifdef HAVE_CRYPTO
        SSL *ssl;
 #endif /* HAVE_CRYPTO */
+       char *mailname;
+       char *mailnamefile;
 };