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>
etc/dma/dma.conf
libexec/dma/conf.c
libexec/dma/dma.8
libexec/dma/dma.c
libexec/dma/dma.h

index 5251df9..6376a41 100644 (file)
@@ -44,3 +44,11 @@ AUTHPATH /etc/dma/auth.conf
 # Uncomment if you want the bounce message to include the complete original
 # message, not just the headers.
 #FULLBOUNCE
+
+# The name to be used when introducing this host, if different from
+# the result of "hostname".  If specified, this overrides MAILNAMEFILE.
+#MAILNAME mail.example.net
+
+# The name of the file to read the MAILNAME from; if this file is not
+# present, the result of "hostname" will be used.
+#MAILNAMEFILE /etc/mailname
index 161edcd..e587c30 100644 (file)
@@ -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)
index 0a1330c..bb178bc 100644 (file)
@@ -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
index 44a49c5..6219fab 100644 (file)
@@ -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;
 }
 
index ff47202..49a2ae6 100644 (file)
@@ -121,6 +121,8 @@ struct config {
 #ifdef HAVE_CRYPTO
        SSL *ssl;
 #endif /* HAVE_CRYPTO */
+       char *mailname;
+       char *mailnamefile;
 };