📄 addrsbr.c
字号:
mp -> m_type = UUCPHOST; goto got_host; }#endif /* not MMDFMTS */ if (up && uleq (dfhost, LocalName ()) && uleq (up, host)) {/* uucpaddr@<uucp> [local] */ if (pp = index (mbox, '!')) { *pp++ = NULL; mp -> m_host = getcpy (mbox); mp -> m_mbox = getcpy (pp); } else { mp -> m_host = getcpy (SystemName ()); mp -> m_mbox = getcpy (mbox); } mp -> m_type = UUCPHOST; goto got_host; }#endif /* MF */ mp -> m_mbox = getcpy (mbox); mp -> m_host = getcpy (host); } else { if (pp = index (mbox, '!')) { *pp++ = '\0'; mp -> m_mbox = getcpy (pp); mp -> m_host = getcpy (mbox); mp -> m_type = UUCPHOST; } else { mp -> m_nohost = 1; mp -> m_mbox = getcpy (mbox);#ifdef DUMB if (route == NULL && dftype == LOCALHOST) { mp -> m_host = NULLCP; mp -> m_type = dftype; } else#endif /* DUMB */ { mp -> m_host = route ? NULLCP : getcpy (dfhost); mp -> m_type = route ? NETHOST : dftype; } } goto got_host; }/* */ if (wanthost == AD_NHST) mp -> m_type = uleq (LocalName (), mp -> m_host) ? LOCALHOST : NETHOST;#ifdef DUMB else mp -> m_type = uleq (LocalName (), mp -> m_host) ? LOCALHOST : NETHOST;#else /* not DUMB */ else if (pp = OfficialName (mp -> m_host)) { got_real_host: ; free (mp -> m_host); mp -> m_host = getcpy (pp); mp -> m_type = uleq (LocalName (), mp -> m_host) ? LOCALHOST : NETHOST; } else { if (dp = index (mp -> m_host, '.')) { *dp = NULL; if (pp = OfficialName (mp -> m_host)) goto got_real_host; *dp = '.'; } mp -> m_type = BADHOST; }#endif /* not DUMB */got_host: ; if (route) mp -> m_path = getcpy (route); mp -> m_ingrp = ingrp; if (grp) mp -> m_gname = getcpy (grp); if (note) mp -> m_note = getcpy (note);#endif /* not BERK */ return mp;}/* */void mnfree (mp)register struct mailname *mp;{ if (!mp) return; if (mp -> m_text) free (mp -> m_text); if (mp -> m_pers) free (mp -> m_pers); if (mp -> m_mbox) free (mp -> m_mbox); if (mp -> m_host) free (mp -> m_host); if (mp -> m_path) free (mp -> m_path); if (mp -> m_gname) free (mp -> m_gname); if (mp -> m_note) free (mp -> m_note);#ifdef MHMTS if (mp -> m_aka) free (mp -> m_aka);#endif /* MHMTS */ free ((char *) mp);}/* */char *auxformat (mp, extras)register struct mailname *mp;int extras;{#ifndef BERK#ifdef MF char *up = UucpChan ();#endif /* MF */ static char addr[BUFSIZ];#endif /* not BERK */ static char buffer[BUFSIZ];#ifdef BERK /* this "if" is a crufty hack to handle "visible" aliases */ if (mp->m_pers && !extras) (void) sprintf (buffer, "%s <%s>", mp->m_pers, mp->m_mbox); else (void) strcpy (buffer, mp -> m_text);#else /* not BERK */#ifdef MF if (up && mp -> m_type == UUCPHOST)#ifdef MMDFMTS (void) sprintf (addr, "%s!%s%%%s@%s", mp -> m_host, mp -> m_mbox, up, LocalName ());#else /* not MMDFMTS */ (void) sprintf (addr, "%s@%s.%s", mp -> m_mbox, mp -> m_host, up);#endif /* not MMDFMTS */ else #endif /* MF */#ifdef DUMB if (mp -> m_nohost) (void) strcpy (addr, mp -> m_mbox ? mp -> m_mbox : ""); else#endif /* DUMB */#ifndef BANG if (mp -> m_type != UUCPHOST) (void) sprintf (addr, mp -> m_host ? "%s%s@%s" : "%s%s", mp -> m_path ? mp -> m_path : "", mp -> m_mbox, mp -> m_host); else#endif /* not BANG */ (void) sprintf (addr, "%s!%s", mp -> m_host, mp -> m_mbox); if (!extras) return addr; if (mp -> m_pers || mp -> m_path) if (mp -> m_note) (void) sprintf (buffer, "%s %s <%s>", legal_person (mp -> m_pers ? mp -> m_pers : mp -> m_mbox), mp -> m_note, addr); else (void) sprintf (buffer, "%s <%s>", legal_person (mp -> m_pers ? mp -> m_pers : mp -> m_mbox), addr); else if (mp -> m_note) (void) sprintf (buffer, "%s %s", addr, mp -> m_note); else (void) strcpy (buffer, addr);#endif /* not BERK */ return buffer;}/* */#if defined(BERK) || (defined(DUMB) && !defined(MMDFMTS) && !defined(SMTP))#define REALLYDUMB#else#undef REALLYDUMB#endifchar *adrsprintf (local, domain)char *local, *domain;{ static char addr[BUFSIZ]; if (local == NULL)#ifdef REALLYDUMB return getusr (); else#endif /* REALLYDUMB */ local = getusr (); if (domain == NULL)#ifdef REALLYDUMB return local; else#endif /* REALLYDUMB */ domain = LocalName ();#ifndef BANG (void) sprintf (addr, "%s@%s", local, domain);#else /* BANG */ (void) sprintf (addr, "%s!%s", domain, local);#endif /* BANG */ return addr;}/* */#define W_NIL 0x0000#define W_MBEG 0x0001#define W_MEND 0x0002#define W_MBOX (W_MBEG | W_MEND)#define W_HBEG 0x0004#define W_HEND 0x0008#define W_HOST (W_HBEG | W_HEND)#define WBITS "\020\01MBEG\02MEND\03HBEG\04HEND"int ismymbox (np)register struct mailname *np;{ int oops; register int len, i; register char *cp;#ifndef BERK register char *pp; char buffer[BUFSIZ];#endif /* not BERK */ register struct mailname *mp; static char *am = NULL; static struct mailname mq={NULL}; /* if this is the first call, init. alternate mailboxes list */ if (am == NULL) { mq.m_next = NULL; mq.m_mbox = getusr (); if ((am = m_find ("alternate-mailboxes")) == NULL) am = getusr (); else { mp = &mq; oops = 0; while (cp = getname (am)) if ((mp -> m_next = getm (cp, NULLCP, 0, AD_NAME, NULLCP)) == NULL) admonish (NULLCP, "illegal address: %s", cp), oops++; else { mp = mp -> m_next; mp -> m_type = W_NIL;#ifdef BERK /* check for wildcards on the mailbox name and set m_type accordingly. */ mp -> m_ingrp = strlen (mp -> m_mbox); if (*(mp -> m_mbox) == '*') { mp -> m_type |= W_MBEG; mp -> m_mbox++; --mp -> m_ingrp; } if (mp -> m_mbox[mp -> m_ingrp - 1] == '*') { mp -> m_type |= W_MEND; mp -> m_ingrp--; mp -> m_mbox[mp -> m_ingrp] = 0; }#else /* not BERK */ /* owing to screwy munging, wildcarding is a great idea even under #ifndef BERK, so... */ mp -> m_type = W_NIL; if (*mp -> m_mbox == '*') mp -> m_type |= W_MBEG, mp -> m_mbox++; if (*(cp = mp -> m_mbox + strlen (mp -> m_mbox) - 1) == '*') mp -> m_type |= W_MEND, *cp = '\0'; if (mp -> m_host) { if (*mp -> m_host == '*') mp -> m_type |= W_HBEG, mp -> m_host++; if (*(cp = mp -> m_host + strlen (mp -> m_host) - 1) == '*') mp -> m_type |= W_HEND, *cp = '\0'; } if ((cp = getenv ("MHWDEBUG")) && *cp) fprintf (stderr, "mbox=\"%s\" host=\"%s\" %s\n", mp -> m_mbox, mp -> m_host, sprintb (buffer, (unsigned) mp -> m_type, WBITS));#endif /* not BERK */ } if (oops) advise (NULLCP, "please fix the %s: entry in your %s file", "alternate-mailboxes", mh_profile); } } if (np == NULL) /* XXX */ return 0; #ifdef BERK cp = np -> m_mbox; if (strcmp (cp, mq.m_mbox) == 0) return 1;#else /* not BERK */ switch (np -> m_type) { case NETHOST: len = strlen (cp = LocalName ()); if (!uprf (np -> m_host, cp) || np -> m_host[len] != '.') break; goto local_test; case UUCPHOST: if (!uleq (np -> m_host, SystemName ())) break; /* fall */ case LOCALHOST:local_test: ; if (uleq (np -> m_mbox, mq.m_mbox)) return 1; break; default: break; }#endif /* not BERK */#ifdef BERK len = strlen (cp); for (mp = &mq; mp = mp -> m_next;) if (len >= mp -> m_ingrp) switch (mp -> m_type) { case W_NIL: /* no wildcards */ if (strcmp (cp, mp -> m_mbox) == 0) return 1; break; case W_MBEG: /* wildcard at beginning */ if (strcmp (&cp[len - mp -> m_ingrp], mp -> m_mbox) == 0) return 1; break; case W_MEND: /* wildcard at end */ if (strncmp (cp, mp -> m_mbox, mp -> m_ingrp) == 0) return 1; break; case W_MBEG | W_MEND: /* wildcard at beginning & end */ for (i = 0; i <= len - mp -> m_ingrp; i++) if (strncmp (&cp[i], mp -> m_mbox, mp -> m_ingrp) == 0) return 1; }#else /* not BERK */ for (mp = &mq; mp = mp -> m_next;) { if (np -> m_mbox == NULL) continue; if ((len = strlen (cp = np -> m_mbox)) < (i = strlen (pp = mp -> m_mbox))) continue; switch (mp -> m_type & W_MBOX) { case W_NIL: if (!uleq (cp, pp)) continue; break; case W_MBEG: if (!uleq (cp + len - i, pp)) continue; break; case W_MEND: if (!uprf (cp, pp)) continue; break; case W_MBEG | W_MEND: if (stringdex (pp, cp) < 0) continue; break; } if (mp -> m_nohost) return 1; if (np -> m_host == NULL) continue; if ((len = strlen (cp = np -> m_host)) < (i = strlen (pp = mp -> m_host))) continue; switch (mp -> m_type & W_HOST) { case W_NIL: if (!uleq (cp, pp)) continue; break; case W_HBEG: if (!uleq (cp + len - i, pp)) continue; break; case W_HEND: if (!uprf (cp, pp)) continue; break; case W_HBEG | W_HEND: if (stringdex (pp, cp) < 0) continue; break; } return 1; }#endif /* not BERK */ return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -