*** sendmail/src/sendmail.h.orig Wed Jul 23 18:27:00 1986 --- sendmail/src/sendmail.h Thu Feb 26 18:46:07 1987 *************** *** 321,326 **** --- 325,336 ---- # define HOSTBEGIN '\035' /* hostname lookup begin */ # define HOSTEND '\036' /* hostname lookup end */ + #if defined(DBM) && defined(UUCPDOMAIN) + /* brace characters for uucp name lookup */ + # define UUCPBEGIN '\016' /* uucpname lookup begin */ + # define UUCPEND '\017' /* uucpname lookup end */ + #endif + /* \001 is also reserved as the macro expansion character */ /* ** Information about hosts that we have looked up recently. *************** *** 531,536 **** --- 543,549 ---- EXTERN char *mxhosts[MAXMXHOSTS+1]; /* for MX RRs */ EXTERN char *TrustedUsers[MAXTRUST+1]; /* list of trusted users */ EXTERN char *UserEnviron[MAXUSERENVIRON+1]; /* saved user environment */ + EXTERN char *PaliasFile; /* location of pathalias file */ /* ** Trace information */ *** sendmail/src/daemon.c.orig Wed Jul 23 18:27:01 1986 --- sendmail/src/daemon.c Wed Mar 18 13:18:36 1987 *************** *** 604,606 **** --- 607,712 ---- } #endif DAEMON + + #if defined(DBM) && defined(UUCPDOMAIN) + /* XXX */ + #ifdef sun + #undef NULL + #endif + #include + /* XXX */ + #ifdef sun + #undef NULL + #define NULL 0 + #endif + + /* + ** PATHALIAS -- return the shortest path to this host. + ** + ** Parameters: + ** hbuf -- a buffer containing a hostname. + ** + ** Returns: + ** The shortest known path to this host. + ** + ** Side Effects: + ** none. + */ + datum + pathalias(hbuf) + register char *hbuf; + { + register char *bptr; + register datum hdatum; + + hdatum.dptr = hbuf; + hdatum.dsize = strlen(hbuf) + 1; + hdatum = fetch(hdatum); + if (hdatum.dptr != NULL) + if ((bptr = rindex(hdatum.dptr, '%')) == NULL || + *(bptr + 1) != 's') + hdatum.dptr = NULL; + else if (*(bptr + 2) == '@') + /* path!%s@host -> path!host!%s */ + (void) sprintf(bptr, "%s!%%s", bptr + 3); + return hdatum; + } + + + /* + ** MAPUUCPHOSTNAME -- turn a hostname into the shortest uucp path + ** + ** Parameters: + ** hbuf -- a buffer containing a hostname. + ** hbsize -- the size of hbuf. + ** + ** Returns: + ** none. + ** + ** Side Effects: + ** Looks up the host specified in hbuf. Replace it + ** with the shortest uucp path to that host. + */ + mapuucpname(hbuf, hbsize) + register char *hbuf; + register int hbsize; + { + register char *bptr; + register datum hdatum; + register bool mapped = FALSE; + + makelower(hbuf); + hdatum = pathalias(hbuf); + if (hdatum.dptr != NULL && hdatum.dsize <= hbsize) { + (void) strcpy(hbuf, hdatum.dptr); + return; + } + if ((bptr = rindex(hbuf, '.')) == NULL) + return; + if (strncmp(bptr, ".uucp", sizeof ".uucp") == 0) { + /* try host with .uucp removed */ + *bptr = '\0'; + hdatum = pathalias(hbuf); + *bptr = '.'; + if (hdatum.dptr != NULL && hdatum.dsize <= hbsize) + (void) strcpy(hbuf, hdatum.dptr); + } + else + { + /* keep removing left-most subdomain until a match is found */ + for (bptr = hbuf; + !mapped && (bptr = index(++bptr, '.')) != NULL; + mapped = hdatum.dptr != NULL && + hdatum.dsize + strlen(hbuf) + 1 <= hbsize) + hdatum = pathalias(bptr); + if (!mapped || (bptr = rindex(hdatum.dptr, '!')) == NULL) + return; + *bptr = '\0'; + if ((bptr = malloc(strlen(hbuf) + 1)) != NULL) { + (void) strcpy(bptr, hbuf); + (void) sprintf(hbuf, "%s!%s!%%s", hdatum.dptr, bptr); + (void) free(bptr); + } + } + } + #endif *** sendmail/src/main.c.orig Thu Jan 30 14:03:53 1986 --- sendmail/src/main.c Mon Jan 26 14:33:20 1987 *************** *** 808,813 **** --- 812,822 ---- /* and finally the hostname lookup characters */ '[', HOSTBEGIN, ']', HOSTEND, + #if defined(DBM) && defined(UUCPDOMAIN) + /* and the uucpname lookup characters */ + '{', UUCPBEGIN, '}', UUCPEND, + + #endif '\0' }; *** sendmail/src/parseaddr.c.orig Wed Apr 2 19:04:03 1986 --- sendmail/src/parseaddr.c Wed Mar 18 12:10:50 1987 *************** *** 741,747 **** --- 741,751 ---- char pvpbuf[PSBUFSIZE]; extern char *DelimChar; + #if defined(DBM) && defined(UUCPDOMAIN) + if (**rvp != HOSTBEGIN && **rvp != UUCPBEGIN) + #else if (**rvp != HOSTBEGIN) + #endif continue; /* *************** *** 753,759 **** --- 757,769 ---- hbrvp = rvp; /* extract the match part */ + #if defined(DBM) && defined(UUCPDOMAIN) + while (*++rvp != NULL && + (**rvp != HOSTEND && **hbrvp == HOSTBEGIN || + **rvp != UUCPEND && **hbrvp == UUCPBEGIN)) + #else while (*++rvp != NULL && **rvp != HOSTEND) + #endif continue; if (*rvp != NULL) *rvp++ = NULL; *************** *** 764,770 **** --- 774,801 ---- /* look it up */ cataddr(++hbrvp, buf, sizeof buf); + #if defined(DBM) && defined(UUCPDOMAIN) + if (**(hbrvp - 1) == HOSTBEGIN) + maphostname(buf, sizeof buf); + else + { + #ifdef sun + (void) dbmclose(); + #endif + if (dbminit(PaliasFile) == 0) + #ifdef sun + { + #endif + mapuucpname(buf, sizeof buf); + #ifdef sun + (void) dbmclose(); + } + #endif + (void) dbminit(AliasFile); + } + #else maphostname(buf, sizeof buf); + #endif /* scan the new host name */ olddelimchar = DelimChar; *** sendmail/src/alias.c.orig Thu Apr 17 23:18:56 1986 --- sendmail/src/alias.c Mon Jan 26 14:26:42 1987 *************** *** 92,97 **** --- 92,100 ---- p = aliaslookup(a->q_user); if (p == NULL) return; + #if defined(DBM) && defined(UUCPDOMAIN) + p = newstr(p); + #endif /* ** Match on Alias. *** sendmail/src/Makefile.orig Wed Jul 23 18:29:21 1986 --- sendmail/src/Makefile Sat Feb 14 13:23:50 1987 *************** *** 36,42 **** CHMOD= chmod O= -O COPTS= ! CCONFIG=-I../include -DVMUNIX -DMXDOMAIN -DOLDJEEVES CFLAGS= $O $(COPTS) $(CCONFIG) ASMSED= ../include/asm.sed AR= -ar --- 36,42 ---- CHMOD= chmod O= -O COPTS= ! CCONFIG=-I../include -DVMUNIX -DMXDOMAIN -DOLDJEEVES -DUUCPDOMAIN CFLAGS= $O $(COPTS) $(CCONFIG) ASMSED= ../include/asm.sed AR= -ar *** sendmail/src/readcf.c.orig Sat Jan 11 03:18:47 1986 --- sendmail/src/readcf.c Thu Feb 26 18:41:55 1987 *************** *** 913,918 **** --- 913,925 ---- WkTimeFact = atoi(val); break; + case 'p': /* pathalias file */ + if (val[0] == '\0') + PaliasFile = "palias"; + else + PaliasFile = newstr(val); + break; + default: break; }