X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a3544ffdfac9536a2a115dd7afd805a399083e01..035c5db34:/sbr/addrsbr.c?ds=inline diff --git a/sbr/addrsbr.c b/sbr/addrsbr.c index a073e707..b2079bd2 100644 --- a/sbr/addrsbr.c +++ b/sbr/addrsbr.c @@ -104,35 +104,32 @@ getname (const char *addrs) struct mailname * -getm (char *str, char *dfhost, int dftype, int wanthost, char *eresult) +getm (char *str, char *dfhost, int dftype, char *eresult, size_t eresultsize) { char *pp; struct mailname *mp; if (err[0]) { - if (eresult) - strcpy (eresult, err); - else - if (wanthost == AD_HOST) - admonish (NULL, "bad address '%s' - %s", str, err); + if (eresult) { + strncpy (eresult, err, eresultsize); + eresult[eresultsize - 1] = '\0'; + } return NULL; } if (pers == NULL && mbox == NULL && host == NULL && route == NULL && grp == NULL) { - if (eresult) - strcpy (eresult, "null address"); - else - if (wanthost == AD_HOST) - admonish (NULL, "null address '%s'", str); + if (eresult) { + strncpy (eresult, "null address", eresultsize); + eresult[eresultsize - 1] = '\0'; + } return NULL; } if (mbox == NULL && grp == NULL) { - if (eresult) - strcpy (eresult, "no mailbox in address"); - else - if (wanthost == AD_HOST) - admonish (NULL, "no mailbox in address '%s'", str); + if (eresult) { + strncpy (eresult, "no mailbox in address", eresultsize); + eresult[eresultsize - 1] = '\0'; + } return NULL; } @@ -143,11 +140,11 @@ getm (char *str, char *dfhost, int dftype, int wanthost, char *eresult) mp = (struct mailname *) calloc ((size_t) 1, sizeof(*mp)); if (mp == NULL) { - if (eresult) - strcpy (eresult, "insufficient memory to represent address"); - else - if (wanthost == AD_HOST) - adios (NULL, "insufficient memory to represent address"); + if (eresult) { + strncpy (eresult, "insufficient memory to represent address", + eresultsize); + eresult[eresultsize - 1] = '\0'; + } return NULL; } @@ -242,10 +239,13 @@ auxformat (struct mailname *mp, int extras) strncpy (addr, mp->m_mbox ? mp->m_mbox : "", sizeof(addr)); else - if (mp->m_type != UUCPHOST) - snprintf (addr, sizeof(addr), mp->m_host ? "%s%s@%s" : "%s%s", - empty(mp->m_path), empty(mp->m_mbox), mp->m_host); - else + if (mp->m_type != UUCPHOST) { + if (mp->m_host) + snprintf (addr, sizeof(addr), "%s%s@%s", empty(mp->m_path), + empty(mp->m_mbox), mp->m_host); + else snprintf (addr, sizeof(addr), "%s%s", empty(mp->m_path), + empty(mp->m_mbox)); + } else snprintf (addr, sizeof(addr), "%s!%s", mp->m_host, mp->m_mbox); if (!extras) @@ -314,7 +314,7 @@ ismymbox (struct mailname *np) return 0; } - if ((mq.m_next = getm (cp, NULL, 0, AD_NAME, NULL)) == NULL) { + if ((mq.m_next = getm (cp, NULL, 0, NULL, 0)) == NULL) { admonish (NULL, "invalid entry in local-mailbox: %s", cp); return 0; } @@ -334,7 +334,7 @@ ismymbox (struct mailname *np) mp = mq.m_next ? mq.m_next : &mq; oops = 0; while ((cp = getname (am))) { - if ((mp->m_next = getm (cp, NULL, 0, AD_NAME, NULL)) == NULL) { + if ((mp->m_next = getm (cp, NULL, 0, NULL, 0)) == NULL) { admonish (NULL, "illegal address: %s", cp); oops++; } else {