1: /* hosts.c - find out the official name of a host */
   2: 
   3: /* LINTLIBRARY */
   4: 
   5: /* In the SendMail world, we really don't know what the valid hosts are.
   6:    We could poke around in the sendmail.cf file, but that still isn't a
   7:    guarantee.  As a result, we'll say that everything is a valid host, and
   8:    let SendMail worry about it. */
   9: 
  10: 
  11: #include "../h/strings.h"
  12: #include <stdio.h>
  13: #include "../zotnet/mts.h"
  14: #include <ctype.h>
  15: #ifdef  BSD42
  16: #include <netdb.h>
  17: #endif	BSD42
  18: 
  19: 
  20: #define NOTOK   (-1)
  21: 
  22: 
  23: static struct host {
  24:     char   *h_name;
  25:     char  **h_aliases;
  26:     struct host   *h_next;
  27: }                   hosts;
  28: 
  29: char   *getcpy ();
  30: 
  31: /*  */
  32: 
  33: char   *OfficialName (name)
  34: register char   *name;
  35: {
  36:     register char  *p;
  37:     char   *q,
  38:             site[BUFSIZ];
  39: #ifdef  BSD42
  40:     register struct hostent *hp;
  41: #endif	BSD42
  42:     static char buffer[BUFSIZ];
  43:     register char **r;
  44:     register struct host   *h;
  45: 
  46:     for (p = name, q = site; *p; p++, q++)
  47:     *q = isupper (*p) ? tolower (*p) : *p;
  48:     *q = NULL;
  49:     q = site;
  50: 
  51:     if (uleq (LocalName (), site))
  52:     return LocalName ();
  53: 
  54: #ifdef  BSD41A
  55:     if (rhost (&q) != NOTOK) {
  56:     (void) strcpy (buffer, q);
  57:     free (q);
  58:     return buffer;
  59:     }
  60: #endif	BSD41A
  61: #ifdef  BSD42
  62:     sethostent (1);
  63:     if (hp = gethostbyname (q)) {
  64:     (void) strcpy (buffer, hp -> h_name);
  65:     return buffer;
  66:     }
  67: #endif	BSD42
  68: 
  69:     if (hosts.h_name || init_hs ())
  70:     for (h = hosts.h_next; h; h = h -> h_next)
  71:         if (uleq (h -> h_name, q))
  72:         return h -> h_name;
  73:         else
  74:         for (r = h -> h_aliases; *r; r++)
  75:             if (uleq (*r, q))
  76:             return h -> h_name;
  77: 
  78:     (void) strcpy (buffer, site);
  79:     return buffer;
  80: }
  81: 
  82: /*  */
  83: 
  84: /* Use hostable as an exception file for those hosts that aren't on the
  85:    Internet (listed in /etc/hosts).  These are usually PhoneNet and UUCP
  86:    sites. */
  87: 
  88: 
  89: #define NALIASES    50
  90: 
  91: static int  init_hs () {
  92:     register char  *cp,
  93:                    *dp,
  94:                   **q,
  95:                   **r;
  96:     char    buffer[BUFSIZ],
  97:            *aliases[NALIASES];
  98:     register struct host   *h;
  99:     register FILE  *fp;
 100: 
 101:     if ((fp = fopen (hostable, "r")) == NULL)
 102:     return 0;
 103: 
 104:     h = &hosts;
 105:     while (fgets (buffer, sizeof buffer, fp) != NULL) {
 106:     if (cp = index (buffer, '#'))
 107:         *cp = NULL;
 108:     if (cp = index (buffer, '\n'))
 109:         *cp = NULL;
 110:     for (cp = buffer; *cp; cp++)
 111:         if (isspace (*cp))
 112:         *cp = ' ';
 113:     for (cp = buffer; isspace (*cp); cp++)
 114:         continue;
 115:     if (*cp == NULL)
 116:         continue;
 117: 
 118:     q = aliases;
 119:     if (cp = index (dp = cp, ' ')) {
 120:         *cp = NULL;
 121:         for (cp++; *cp; cp++) {
 122:         while (isspace (*cp))
 123:             cp++;
 124:         if (*cp == NULL)
 125:             break;
 126:         if (cp = index (*q++ = cp, ' '))
 127:             *cp = NULL;
 128:         else
 129:             break;
 130:         if (q >= aliases + NALIASES)
 131:             break;
 132:         }
 133:     }
 134: 
 135:     *q = NULL;
 136: 
 137:     h -> h_next = (struct host *) calloc (1, sizeof *h);
 138:     h = h -> h_next;
 139:     h -> h_name = getcpy (dp);
 140:     r = h -> h_aliases =
 141:         (char **) calloc ((unsigned) (q - aliases + 1), sizeof *q);
 142:     for (q = aliases; *q; q++)
 143:         *r++ = getcpy (*q);
 144:     *r = NULL;
 145:     }
 146: 
 147:     (void) fclose (fp);
 148:     return 1;
 149: }

Defined functions

OfficialName defined in line 33; never used
init_hs defined in line 91; used 1 times
  • in line 69

Defined variables

hosts defined in line 27; used 3 times

Defined struct's

host defined in line 23; used 8 times

Defined macros

NALIASES defined in line 89; used 2 times
NOTOK defined in line 20; used 1 times
  • in line 55
Last modified: 1986-04-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 978
Valid CSS Valid XHTML 1.0 Strict