head 1.7; access; symbols; locks; strict; comment @ * @; 1.7 date 92.12.15.00.20.22; author jromine; state Exp; branches; next 1.6; 1.6 date 92.01.31.21.37.07; author jromine; state Exp; branches; next 1.5; 1.5 date 90.04.05.15.30.14; author sources; state Exp; branches; next 1.4; 1.4 date 90.04.05.14.43.37; author sources; state Exp; branches; next 1.3; 1.3 date 90.02.06.12.57.57; author sources; state Exp; branches; next 1.2; 1.2 date 90.02.05.14.52.35; author sources; state Exp; branches; next 1.1; 1.1 date 90.02.05.14.52.05; author sources; state Exp; branches; next ; desc @@ 1.7 log @endif sugar @ text @/* hosts.c - find out the official name of a host */ #ifndef lint static char ident[] = "@@(#)$Id: hosts.c,v 1.6 1992/01/31 21:37:07 jromine Exp jromine $"; #endif /* lint */ /* LINTLIBRARY */ /* In the SendMail world, we really don't know what the valid hosts are. We could poke around in the sendmail.cf file, but that still isn't a guarantee. As a result, we'll say that everything is a valid host, and let SendMail worry about it. */ #include "../h/strings.h" #include #include "../zotnet/mts.h" #include #if defined(BSD42) || defined(SOCKETS) #include #endif /* BSD42 or SOCKETS */ #define NOTOK (-1) static struct host { char *h_name; char **h_aliases; struct host *h_next; } hosts; char *getcpy (); static int init_hs(); /* */ char *OfficialName (name) register char *name; { register char *p; char *q, site[BUFSIZ]; #if defined(BSD42) || defined(SOCKETS) register struct hostent *hp; #endif /* BSD42 or SOCKETS */ static char buffer[BUFSIZ]; register char **r; register struct host *h; for (p = name, q = site; *p; p++, q++) *q = isupper (*p) ? tolower (*p) : *p; *q = 0; q = site; if (uleq (LocalName (), site)) return LocalName (); #ifdef BSD41A if (rhost (&q) != NOTOK) { (void) strcpy (buffer, q); free (q); return buffer; } #endif /* BSD41A */ #if defined(BSD42) || defined(SOCKETS) #ifndef BIND sethostent (1); #endif if (hp = gethostbyname (q)) { (void) strcpy (buffer, hp -> h_name); return buffer; } #endif /* BSD42 or SOCKETS */ if (hosts.h_name || init_hs ()) for (h = hosts.h_next; h; h = h -> h_next) if (uleq (h -> h_name, q)) return h -> h_name; else for (r = h -> h_aliases; *r; r++) if (uleq (*r, q)) return h -> h_name; (void) strcpy (buffer, site); return buffer; } /* */ /* Use hostable as an exception file for those hosts that aren't on the Internet (listed in /etc/hosts). These are usually PhoneNet and UUCP sites. */ #define NALIASES 50 static int init_hs () { register char *cp, *dp, **q, **r; char buffer[BUFSIZ], *aliases[NALIASES]; register struct host *h; register FILE *fp; if ((fp = fopen (hostable, "r")) == NULL) return 0; h = &hosts; while (fgets (buffer, sizeof buffer, fp) != NULL) { if (cp = index (buffer, '#')) *cp = 0; if (cp = index (buffer, '\n')) *cp = 0; for (cp = buffer; *cp; cp++) if (isspace (*cp)) *cp = ' '; for (cp = buffer; isspace (*cp); cp++) continue; if (*cp == 0) continue; q = aliases; if (cp = index (dp = cp, ' ')) { *cp = 0; for (cp++; *cp; cp++) { while (isspace (*cp)) cp++; if (*cp == 0) break; if (cp = index (*q++ = cp, ' ')) *cp = 0; else break; if (q >= aliases + NALIASES) break; } } *q = 0; h -> h_next = (struct host *) calloc (1, sizeof *h); h = h -> h_next; h -> h_name = getcpy (dp); r = h -> h_aliases = (char **) calloc ((unsigned) (q - aliases + 1), sizeof *q); for (q = aliases; *q; q++) *r++ = getcpy (*q); *r = 0; } (void) fclose (fp); return 1; } @ 1.6 log @kerberos @ text @d3 2 a4 2 static char ident[] = "@@(#)$Id: hosts.c,v 1.5 1990/04/05 15:30:14 sources Exp jromine $"; #endif lint d20 1 a20 1 #endif BSD42 or SOCKETS d46 1 a46 1 #endif BSD42 or SOCKETS d65 1 a65 1 #endif BSD41A d74 1 a74 1 #endif BSD42 or SOCKETS @ 1.5 log @add ID @ text @d3 1 a3 1 static char ident[] = "@@(#)$Id:$"; d53 1 a53 1 *q = NULL; d114 1 a114 1 *cp = NULL; d116 1 a116 1 *cp = NULL; d122 1 a122 1 if (*cp == NULL) d127 1 a127 1 *cp = NULL; d131 1 a131 1 if (*cp == NULL) d134 1 a134 1 *cp = NULL; d142 1 a142 1 *q = NULL; d151 1 a151 1 *r = NULL; @ 1.4 log @add ID @ text @d3 1 a3 1 static char ident[] = "$Id:"; @ 1.3 log @ANSI Compilance @ text @d2 3 @ 1.2 log @SOCKETS @ text @d31 2 @ 1.1 log @Initial revision @ text @d15 1 a15 1 #ifdef BSD42 d17 1 a17 1 #endif BSD42 d39 1 a39 1 #ifdef BSD42 d41 1 a41 1 #endif BSD42 d61 1 a61 1 #ifdef BSD42 d69 1 a69 1 #endif BSD42 @