static char *akval (struct aka *, char *);
static int aleq (char *, char *);
-static char *scanp (unsigned char *);
+static char *scanp (char *);
static char *getp (char *);
static char *seekp (char *, char *, char **);
static int addfile (struct aka *, char *);
static int addgroup (struct aka *, char *);
static int addmember (struct aka *, char *);
-static int addall (struct aka *);
static char *getalias (char *);
static void add_aka (struct aka *, char *);
static struct aka *akalloc (char *);
static struct home *hmalloc (struct passwd *);
-struct home *seek_home (char *);
/* Do mh alias substitution on 's' and return the results. */
if (!s)
return s; /* XXX */
+ /* It'd be tempting to check for a trailing semicolon and remove
+ it. But that would break the EXMH alias parser on what would
+ then be valid expressions:
+ http://lists.gnu.org/archive/html/nmh-workers/2012-10/msg00039.html
+ */
+
for (; ak; ak = ak->ak_next) {
if (aleq (s, ak->ak_name)) {
return akresult (ak);
if (name) {
/* s is of the form "Blind list: address". If address
is an alias, expand it. */
- struct mailname *mp = getm (name, NULL, 0, AD_NAME, NULL);
+ struct mailname *mp = getm (name, NULL, 0, NULL, 0);
if (mp && mp->m_ingrp) {
char *gname = add (mp->m_gname, NULL);
}
break;
- case '*': /* Everyone */
- addall (ak);
- break;
-
default: /* list */
while ((cp = getalias (pp)))
add_aka (ak, cp);
static char *
-scanp (unsigned char *p)
+scanp (char *p)
{
- while (isspace (*p))
+ while (isspace ((unsigned char) *p))
p++;
return p;
}
static char *
getp (char *p)
{
- register unsigned char *cp = scanp (p);
+ char *cp = scanp (p);
p = cp;
- while (!isspace (*cp) && *cp)
+ while (!isspace ((unsigned char) *cp) && *cp)
cp++;
*cp = 0;
static char *
seekp (char *p, char *c, char **a)
{
- register unsigned char *cp;
+ char *cp;
p = cp = scanp (p);
- while (!isspace (*cp) && *cp && *cp != ':' && *cp != ';')
+ while (!isspace ((unsigned char) *cp) && *cp && *cp != ':' && *cp != ';')
cp++;
*c = *cp;
*cp++ = 0;
}
-static int
-addall (struct aka *ak)
-{
- int noshell = NoShell == NULL || *NoShell == 0;
- register struct home *hm;
-
- init_pw ();
-
- if (Everyone < 0)
- Everyone = EVERYONE;
-
- for (hm = homehead; hm; hm = hm->h_next)
- if ((int) hm->h_uid > Everyone
- && (noshell || strcmp (hm->h_shell, NoShell)))
- add_aka (ak, hm->h_name);
-
- return homehead != NULL;
-}
-
-
static char *
getalias (char *addrs)
{
- register unsigned char *pp, *qp;
+ char *pp, *qp;
static char *cp = NULL;
if (cp == NULL)
return (cp = NULL);
/* Remove leading any space from the address. */
- for (pp = cp; isspace (*pp); pp++)
+ for (pp = cp; isspace ((unsigned char) *pp); pp++)
continue;
if (*pp == 0)
return (cp = NULL);
*qp++ = 0;
for (cp = qp, qp--; qp > pp; qp--)
if (*qp != 0) {
- if (isspace (*qp))
+ if (isspace ((unsigned char) *qp))
*qp = 0;
else
break;
return p;
}
-
-
-struct home *
-seek_home (char *name)
-{
- register struct home *hp;
- struct passwd *pw;
- char lname[32];
- unsigned char *c;
- char *c1;
-
- for (hp = homehead; hp; hp = hp->h_next)
- if (!mh_strcasecmp (name, hp->h_name))
- return hp;
-
- /*
- * The only place where there might be problems.
- * This assumes that ALL usernames are kept in lowercase.
- */
- for (c = name, c1 = lname;
- *c && (c1 - lname < (int) sizeof(lname) - 1);
- c++, c1++) {
- if (isalpha(*c) && isupper(*c))
- *c1 = tolower (*c);
- else
- *c1 = *c;
- }
- *c1 = '\0';
- if ((pw = getpwnam(lname)))
- return(hmalloc(pw));
-
- return NULL;
-}