/*
* static prototypes
*/
+static void read_mts(const char *path);
static char *tailor_value (char *);
static void getuserinfo (void);
-static const char *get_mtsconf_pathname(void);
-static const char *get_mtsuserconf_pathname(void);
+static const char *get_optional_env_var(const char *name, const char *fallback);
static void mts_read_conf_file (FILE *fp);
/*
/*
* nmh mail transport interface customization file
*/
-static char *mtsconf = nmhetcdir(/mts.conf);
-
static char *localname = "";
static char *localdomain = "";
static char *systemname = "";
void
mts_init (void)
{
- const char *cp;
- FILE *fp;
- static int inited = 0;
+ static bool deja_vu;
+ const char *path;
- if (inited++ || (fp = fopen (get_mtsconf_pathname(), "r")) == NULL)
- return;
- mts_read_conf_file(fp);
- fclose (fp);
+ if (deja_vu)
+ return;
+ deja_vu = true;
- cp = get_mtsuserconf_pathname();
- if (cp != NULL &&
- ((fp = fopen (get_mtsuserconf_pathname(), "r")) != NULL)) {
- mts_read_conf_file(fp);
- fclose (fp);
- }
+ path = get_optional_env_var("MHMTSCONF", NMHETCDIR "/mts.conf");
+ read_mts(path);
+
+ path = get_optional_env_var("MHMTSUSERCONF", NULL);
+ if (path)
+ read_mts(path);
save_mts_method (mts_method);
}
+static void read_mts(const char *path)
+{
+ FILE *fp;
+
+ fp = fopen(path, "r");
+ if (!fp)
+ adios(path, "error opening mts.conf:");
+ mts_read_conf_file(fp);
+ if (ferror(fp))
+ adios(path, "error reading mts.conf:");
+ if (fclose(fp))
+ adios(path, "error closing mts.conf:");
+}
+
+
#define QUOTE '\\'
/*
}
username[sizeof(username) - 1] = '\0';
+ /* fullname */
+ np = pw->pw_gecos;
+
+ /* Get the user's real name from the GECOS field. Stop once we hit a ',',
+ which some OSes use to separate other 'finger' information in the GECOS
+ field, like phone number. */
+ for (cp = fullname; *np != '\0' && *np != ','; *cp++ = *np++)
+ continue;
+ *cp = '\0';
+
+ /* The $SIGNATURE environment variable overrides the GECOS field's idea of
+ your real name. If SIGNATURE isn't set, use the Signature profile
+ setting if it exists.
+ Note that post(8) uses context_foil(), so it won't see the profile
+ component. */
+ if ((cp = getenv ("SIGNATURE")) && *cp)
+ strncpy (fullname, cp, sizeof(fullname));
+ else if ((cp = context_find("Signature")))
+ strncpy (fullname, cp, sizeof(fullname));
+ fullname[sizeof(fullname) - 1] = '\0';
+ escape_display_name(fullname, sizeof(fullname));
+
/* localmbox and mboxname */
/* If there's a Local-Mailbox profile component, try to extract
the username from it. But don't try very hard, this assumes
}
mboxname[sizeof(mboxname) - 1] = '\0';
escape_local_part(mboxname, sizeof(mboxname));
-
- /* fullname */
- np = pw->pw_gecos;
-
- /* Get the user's real name from the GECOS field. Stop once we hit a ',',
- which some OSes use to separate other 'finger' information in the GECOS
- field, like phone number. */
- for (cp = fullname; *np != '\0' && *np != ','; *cp++ = *np++)
- continue;
- *cp = '\0';
-
- /* The $SIGNATURE environment variable overrides the GECOS field's idea of
- your real name. If SIGNATURE isn't set, use the Signature profile
- setting if it exists.
- Note that post(8) uses context_foil(), so it won't see the profile
- component. */
- if ((cp = getenv ("SIGNATURE")) && *cp)
- strncpy (fullname, cp, sizeof(fullname));
- else if ((cp = context_find("Signature")))
- strncpy (fullname, cp, sizeof(fullname));
- fullname[sizeof(fullname) - 1] = '\0';
- escape_display_name(fullname, sizeof(fullname));
}
-static const char*
-get_mtsconf_pathname (void)
-{
- const char *cp = getenv ( "MHMTSCONF" );
- if (cp != NULL && *cp != '\0') {
- return cp;
- }
- return mtsconf;
-}
-static const char*
-get_mtsuserconf_pathname (void)
+static const char *
+get_optional_env_var(const char *name, const char *fallback)
{
- const char *cp = getenv ( "MHMTSUSERCONF" );
- if (cp != NULL && *cp != '\0') {
- return cp;
- }
- return NULL;
+ const char *v = getenv(name);
+ if (v)
+ return v;
+ return fallback;
}
+
static void
mts_read_conf_file (FILE *fp)
{