annotate mts/sendmail/hosts.c @ 0:bce86c4163a3

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