]> diplodocus.org Git - nmh/blobdiff - sbr/mts.c
Don't `else' after return. Simplify control flow.
[nmh] / sbr / mts.c
index d28f285111045fb602bf17399050532cfdd03aee..285ced5dd5ae3c177e6f2a1a658bcff6cb7fd57c 100644 (file)
--- a/sbr/mts.c
+++ b/sbr/mts.c
@@ -8,13 +8,10 @@
  */
 
 #include <h/mh.h>   /* for snprintf() */
-#include <h/nmh.h>
 #include <h/utils.h>
 
 #define nmhetcdir(file) NMHETCDIR#file
 
-#include <ctype.h>
-#include <stdio.h>
 #include <h/mts.h>
 #include <pwd.h>
 #include <sys/socket.h>
@@ -23,7 +20,7 @@
 /*
  * static prototypes
  */
-static char *tailor_value (unsigned char *);
+static char *tailor_value (char *);
 static void getuserinfo (void);
 static const char *get_mtsconf_pathname(void);
 static const char *get_mtsuserconf_pathname(void);
@@ -54,6 +51,8 @@ char *uucplfil = "";
 char *mmdlm1 = "\001\001\001\001\n";
 char *mmdlm2 = "\001\001\001\001\n";
 
+char *spoollocking = DEFAULT_LOCKING;
+
 /* Cache the username, fullname, and mailbox of the user */
 static char username[BUFSIZ];
 static char fullname[BUFSIZ];
@@ -62,8 +61,8 @@ static char localmbox[BUFSIZ];
 /*
  * MTS specific variables
  */
-static char *sm_method = "smtp";
-int  sm_mts    = MTS_SENDMAIL_SMTP;
+static char *mts_method = "smtp";
+int  sm_mts    = MTS_SMTP;
 char *sendmail = SENDMAILPATH;
 
 /*
@@ -79,13 +78,6 @@ char *pophost    = "";
 char *maildelivery = nmhetcdir(/maildelivery);
 
 
-/*
- * Aliasing Facility (doesn't belong here)
- */
-int Everyone = NOTOK;
-static char *everyone = "-1";
-char *NoShell = "";
-
 /*
  * Customize the MTS settings for nmh by adjusting
  * the file mts.conf in the nmh etc directory.
@@ -102,35 +94,52 @@ static struct bind binds[] = {
     { "systemname", &systemname },
     { "mmdfldir", &mmdfldir },
     { "mmdflfil", &mmdflfil },
+    { "spoollocking", &spoollocking },
     { "uucpldir", &uucpldir },
     { "uucplfil", &uucplfil },
     { "mmdelim1", &mmdlm1 },
     { "mmdelim2", &mmdlm2 },
-    { "mts",      &sm_method },
+    { "mts",      &mts_method },
     { "sendmail", &sendmail  },
     { "clientname",  &clientname },
     { "servers", &servers },
     { "pophost", &pophost },
 
     { "maildelivery", &maildelivery },
-    { "everyone", &everyone },
-    { "noshell", &NoShell },
     { NULL, NULL }
 };
 
 
+/* Convert name of mts method to integer value and store it. */
+void
+save_mts_method (const char *value) {
+    if (! strcasecmp (value, "smtp")) {
+        mts_method = "smtp";
+        sm_mts = MTS_SMTP;
+    } else if (! strcasecmp (value, "sendmail/smtp")  ||
+               ! strcasecmp (value, "sendmail")) {
+        mts_method = "sendmail/smtp";
+        sm_mts = MTS_SENDMAIL_SMTP;
+    } else if (! strcasecmp (value, "sendmail/pipe")) {
+        mts_method = "sendmail/pipe";
+        sm_mts = MTS_SENDMAIL_PIPE;
+    } else {
+        adios (NULL, "unsupported mts selection \"%s\"", value);
+    }
+}
+
+
 /*
  * Read the configuration file for the nmh interface
  * to the mail transport system (MTS).
  */
 
 void
-mts_init (char *name)
+mts_init (void)
 {
     const char *cp;
     FILE *fp;
     static int inited = 0;
-    NMH_UNUSED (name);
 
     if (inited++ || (fp = fopen (get_mtsconf_pathname(), "r")) == NULL)
        return;
@@ -144,18 +153,7 @@ mts_init (char *name)
         fclose (fp);
     }
 
-    Everyone = atoi (everyone);
-
-    if (strcmp(sm_method, "smtp") == 0)
-        sm_mts = MTS_SMTP;
-    else if (strcmp(sm_method, "sendmail/smtp") == 0)
-        sm_mts = MTS_SENDMAIL_SMTP;
-    else if (strcmp(sm_method, "sendmail/pipe") == 0)
-        sm_mts = MTS_SENDMAIL_PIPE;
-    else {
-        advise(NULL, "unsupported \"mts\" value in mts.conf: %s", sm_method);
-        sm_mts = MTS_SENDMAIL_SMTP;
-    }
+    save_mts_method (mts_method);
 }
 
 
@@ -167,12 +165,11 @@ mts_init (char *name)
  */
 
 static char *
-tailor_value (unsigned char *s)
+tailor_value (char *s)
 {
     int i, r;
     char *bp;
     char buffer[BUFSIZ];
-    size_t len;
 
     for (bp = buffer; *s; bp++, s++) {
        if (*s != QUOTE) {
@@ -190,13 +187,13 @@ tailor_value (unsigned char *s)
                    break;
 
                default: 
-                   if (!isdigit (*s)) {
+                   if (!isdigit ((unsigned char) *s)) {
                        *bp++ = QUOTE;
                        *bp = *s;
                    }
-                   r = *s != '0' ? 10 : 8;
-                   for (i = 0; isdigit (*s); s++)
-                       i = i * r + *s - '0';
+                   r = ((unsigned char) *s) != '0' ? 10 : 8;
+                   for (i = 0; isdigit ((unsigned char) *s); s++)
+                       i = i * r + ((unsigned char) *s) - '0';
                    s--;
                    *bp = toascii (i);
                    break;
@@ -205,11 +202,7 @@ tailor_value (unsigned char *s)
     }
     *bp = 0;
 
-    len = strlen (buffer) + 1;
-    bp = mh_xmalloc (len);
-    memcpy (bp, buffer, len);
-
-    return bp;
+    return mh_xstrdup(buffer);
 }
 
 /*
@@ -237,7 +230,7 @@ LocalName (int flag)
     if (buf[0])
        return buf;
 
-    mts_init ("mts");
+    mts_init ();
 
     /* check if the mts.conf file specifies a "localname" */
     if (*localname && flag == 0) {
@@ -284,7 +277,7 @@ SystemName (void)
     if (buffer[0])
        return buffer;
 
-    mts_init ("mts");
+    mts_init ();
 
     /* check if mts.conf file specifies a "systemname" */
     if (*systemname) {
@@ -349,9 +342,8 @@ getlocalmbox (void)
 static void
 getuserinfo (void)
 {
-    register unsigned char *cp;
-    register char *np;
-    register struct passwd *pw;
+    char *cp, *np;
+    struct passwd *pw;
 
     if ((pw = getpwuid (getuid ())) == NULL
            || pw->pw_name == NULL
@@ -451,8 +443,7 @@ get_mtsuserconf_pathname (void)
 static void
 mts_read_conf_file (FILE *fp)
 {
-    unsigned char *bp;
-    char *cp, buffer[BUFSIZ];
+    char *bp, *cp, buffer[BUFSIZ];
     struct bind *b;
 
     while (fgets (buffer, sizeof(buffer), fp)) {
@@ -464,7 +455,7 @@ mts_read_conf_file (FILE *fp)
        if (!(bp = strchr(buffer, ':')))
            break;
        *bp++ = 0;
-       while (isspace (*bp))
+       while (isspace ((unsigned char) *bp))
            *bp++ = 0;
 
        for (b = binds; b->keyword; b++)