Blame


1 d957951b 2005-02-11 devnull #include <u.h>
2 d957951b 2005-02-11 devnull #include <libc.h>
3 d957951b 2005-02-11 devnull #include <bio.h>
4 d957951b 2005-02-11 devnull #include <ctype.h>
5 d957951b 2005-02-11 devnull
6 d957951b 2005-02-11 devnull Biobuf in;
7 d957951b 2005-02-11 devnull Biobuf out;
8 d957951b 2005-02-11 devnull
9 d957951b 2005-02-11 devnull enum
10 d957951b 2005-02-11 devnull {
11 d957951b 2005-02-11 devnull Empty,
12 d957951b 2005-02-11 devnull Sys,
13 d957951b 2005-02-11 devnull Dk,
14 d957951b 2005-02-11 devnull Ip,
15 226d80b8 2006-04-01 devnull Domain
16 d957951b 2005-02-11 devnull };
17 d957951b 2005-02-11 devnull
18 d957951b 2005-02-11 devnull int
19 d957951b 2005-02-11 devnull iscomment(char *name)
20 d957951b 2005-02-11 devnull {
21 d957951b 2005-02-11 devnull return *name == '#';
22 d957951b 2005-02-11 devnull }
23 d957951b 2005-02-11 devnull
24 d957951b 2005-02-11 devnull /*
25 d957951b 2005-02-11 devnull * is this a fully specified datakit name?
26 d957951b 2005-02-11 devnull */
27 d957951b 2005-02-11 devnull int
28 d957951b 2005-02-11 devnull isdk(char *name)
29 d957951b 2005-02-11 devnull {
30 d957951b 2005-02-11 devnull int slash;
31 d957951b 2005-02-11 devnull
32 d957951b 2005-02-11 devnull slash = 0;
33 d957951b 2005-02-11 devnull for(; *name; name++){
34 3bd56b04 2005-09-09 devnull if(isalnum((uchar)*name))
35 d957951b 2005-02-11 devnull continue;
36 d957951b 2005-02-11 devnull if(*name == '/'){
37 d957951b 2005-02-11 devnull slash = 1;
38 d957951b 2005-02-11 devnull continue;
39 d957951b 2005-02-11 devnull }
40 d957951b 2005-02-11 devnull return 0;
41 d957951b 2005-02-11 devnull }
42 d957951b 2005-02-11 devnull return slash;
43 d957951b 2005-02-11 devnull }
44 d957951b 2005-02-11 devnull
45 d957951b 2005-02-11 devnull /*
46 d957951b 2005-02-11 devnull * Is this an internet domain name?
47 d957951b 2005-02-11 devnull */
48 d957951b 2005-02-11 devnull int
49 d957951b 2005-02-11 devnull isdomain(char *name)
50 d957951b 2005-02-11 devnull {
51 d957951b 2005-02-11 devnull int dot = 0;
52 d957951b 2005-02-11 devnull int alpha = 0;
53 d957951b 2005-02-11 devnull
54 d957951b 2005-02-11 devnull for(; *name; name++){
55 3bd56b04 2005-09-09 devnull if(isalpha((uchar)*name) || *name == '-'){
56 d957951b 2005-02-11 devnull alpha = 1;
57 d957951b 2005-02-11 devnull continue;
58 d957951b 2005-02-11 devnull }
59 d957951b 2005-02-11 devnull if(*name == '.'){
60 d957951b 2005-02-11 devnull dot = 1;
61 d957951b 2005-02-11 devnull continue;
62 d957951b 2005-02-11 devnull }
63 3bd56b04 2005-09-09 devnull if(isdigit((uchar)*name))
64 d957951b 2005-02-11 devnull continue;
65 d957951b 2005-02-11 devnull return 0;
66 d957951b 2005-02-11 devnull }
67 d957951b 2005-02-11 devnull return dot && alpha;
68 d957951b 2005-02-11 devnull }
69 d957951b 2005-02-11 devnull
70 d957951b 2005-02-11 devnull /*
71 d957951b 2005-02-11 devnull * is this an ip address?
72 d957951b 2005-02-11 devnull */
73 d957951b 2005-02-11 devnull int
74 d957951b 2005-02-11 devnull isip(char *name)
75 d957951b 2005-02-11 devnull {
76 d957951b 2005-02-11 devnull int dot = 0;
77 d957951b 2005-02-11 devnull
78 d957951b 2005-02-11 devnull for(; *name; name++){
79 d957951b 2005-02-11 devnull if(*name == '.'){
80 d957951b 2005-02-11 devnull dot = 1;
81 d957951b 2005-02-11 devnull continue;
82 d957951b 2005-02-11 devnull }
83 3bd56b04 2005-09-09 devnull if(isdigit((uchar)*name))
84 d957951b 2005-02-11 devnull continue;
85 d957951b 2005-02-11 devnull return 0;
86 d957951b 2005-02-11 devnull }
87 d957951b 2005-02-11 devnull return dot;
88 d957951b 2005-02-11 devnull }
89 d957951b 2005-02-11 devnull
90 d957951b 2005-02-11 devnull char tup[64][64];
91 d957951b 2005-02-11 devnull int ttype[64];
92 d957951b 2005-02-11 devnull int ntup;
93 d957951b 2005-02-11 devnull
94 d957951b 2005-02-11 devnull void
95 d957951b 2005-02-11 devnull tprint(void)
96 d957951b 2005-02-11 devnull {
97 d957951b 2005-02-11 devnull int i, tab;
98 d957951b 2005-02-11 devnull char *p;
99 d957951b 2005-02-11 devnull
100 d957951b 2005-02-11 devnull tab = 0;
101 d957951b 2005-02-11 devnull for(i = 0; i < ntup; i++){
102 d957951b 2005-02-11 devnull if(ttype[i] == Sys){
103 d957951b 2005-02-11 devnull Bprint(&out, "sys = %s\n", tup[i]);
104 d957951b 2005-02-11 devnull tab = 1;
105 d957951b 2005-02-11 devnull ttype[i] = Empty;
106 d957951b 2005-02-11 devnull break;
107 d957951b 2005-02-11 devnull }
108 d957951b 2005-02-11 devnull }
109 d957951b 2005-02-11 devnull for(i = 0; i < ntup; i++){
110 d957951b 2005-02-11 devnull if(ttype[i] == Empty)
111 d957951b 2005-02-11 devnull continue;
112 d957951b 2005-02-11 devnull if(tab)
113 d957951b 2005-02-11 devnull Bprint(&out, "\t");
114 d957951b 2005-02-11 devnull tab = 1;
115 d957951b 2005-02-11 devnull
116 d957951b 2005-02-11 devnull switch(ttype[i]){
117 d957951b 2005-02-11 devnull case Domain:
118 d957951b 2005-02-11 devnull Bprint(&out, "dom=%s\n", tup[i]);
119 d957951b 2005-02-11 devnull break;
120 d957951b 2005-02-11 devnull case Ip:
121 d957951b 2005-02-11 devnull Bprint(&out, "ip=%s\n", tup[i]);
122 d957951b 2005-02-11 devnull break;
123 d957951b 2005-02-11 devnull case Dk:
124 d957951b 2005-02-11 devnull p = strrchr(tup[i], '/');
125 d957951b 2005-02-11 devnull if(p){
126 d957951b 2005-02-11 devnull p++;
127 d957951b 2005-02-11 devnull if((*p == 'C' || *p == 'R')
128 d957951b 2005-02-11 devnull && strncmp(tup[i], "nj/astro/", p-tup[i]) == 0)
129 d957951b 2005-02-11 devnull Bprint(&out, "flavor=console ");
130 d957951b 2005-02-11 devnull }
131 d957951b 2005-02-11 devnull Bprint(&out, "dk=%s\n", tup[i]);
132 d957951b 2005-02-11 devnull break;
133 d957951b 2005-02-11 devnull case Sys:
134 d957951b 2005-02-11 devnull Bprint(&out, "sys=%s\n", tup[i]);
135 d957951b 2005-02-11 devnull break;
136 d957951b 2005-02-11 devnull }
137 d957951b 2005-02-11 devnull }
138 d957951b 2005-02-11 devnull }
139 d957951b 2005-02-11 devnull
140 d957951b 2005-02-11 devnull #define NFIELDS 64
141 d957951b 2005-02-11 devnull
142 d957951b 2005-02-11 devnull /*
143 d957951b 2005-02-11 devnull * make a database file from a merged uucp/inet database
144 d957951b 2005-02-11 devnull */
145 d957951b 2005-02-11 devnull void
146 d957951b 2005-02-11 devnull main(void)
147 d957951b 2005-02-11 devnull {
148 d957951b 2005-02-11 devnull int n, i, j;
149 d957951b 2005-02-11 devnull char *l;
150 d957951b 2005-02-11 devnull char *fields[NFIELDS];
151 d957951b 2005-02-11 devnull int ftype[NFIELDS];
152 d957951b 2005-02-11 devnull int same, match;
153 d957951b 2005-02-11 devnull
154 d957951b 2005-02-11 devnull Binit(&in, 0, OREAD);
155 d957951b 2005-02-11 devnull Binit(&out, 1, OWRITE);
156 d957951b 2005-02-11 devnull ntup = 0;
157 d957951b 2005-02-11 devnull while(l = Brdline(&in, '\n')){
158 d957951b 2005-02-11 devnull l[Blinelen(&in)-1] = 0;
159 d957951b 2005-02-11 devnull n = getfields(l, fields, NFIELDS, 1, " \t");
160 d957951b 2005-02-11 devnull same = 0;
161 d957951b 2005-02-11 devnull for(i = 0; i < n; i++){
162 d957951b 2005-02-11 devnull if(iscomment(fields[i])){
163 d957951b 2005-02-11 devnull n = i;
164 d957951b 2005-02-11 devnull break;
165 d957951b 2005-02-11 devnull }
166 d957951b 2005-02-11 devnull if(isdomain(fields[i])){
167 d957951b 2005-02-11 devnull ftype[i] = Domain;
168 d957951b 2005-02-11 devnull for(j = 0; j < ntup; j++)
169 d957951b 2005-02-11 devnull if(ttype[j] == Domain && strcmp(fields[i], tup[j]) == 0){
170 d957951b 2005-02-11 devnull same = 1;
171 d957951b 2005-02-11 devnull ftype[i] = Empty;
172 d957951b 2005-02-11 devnull break;
173 d957951b 2005-02-11 devnull }
174 d957951b 2005-02-11 devnull } else if(isip(fields[i]))
175 d957951b 2005-02-11 devnull ftype[i] = Ip;
176 d957951b 2005-02-11 devnull else if(isdk(fields[i]))
177 d957951b 2005-02-11 devnull ftype[i] = Dk;
178 d957951b 2005-02-11 devnull else
179 d957951b 2005-02-11 devnull ftype[i] = Sys;
180 d957951b 2005-02-11 devnull }
181 d957951b 2005-02-11 devnull if(!same && ntup){
182 d957951b 2005-02-11 devnull tprint();
183 d957951b 2005-02-11 devnull ntup = 0;
184 d957951b 2005-02-11 devnull }
185 d957951b 2005-02-11 devnull for(i = 0; i < n; i++){
186 d957951b 2005-02-11 devnull match = 0;
187 d957951b 2005-02-11 devnull for(j = 0; j < ntup; j++){
188 d957951b 2005-02-11 devnull if(ftype[i] == ttype[j] && strcmp(fields[i], tup[j]) == 0){
189 d957951b 2005-02-11 devnull match = 1;
190 d957951b 2005-02-11 devnull break;
191 d957951b 2005-02-11 devnull }
192 d957951b 2005-02-11 devnull }
193 d957951b 2005-02-11 devnull if(!match){
194 d957951b 2005-02-11 devnull ttype[ntup] = ftype[i];
195 d957951b 2005-02-11 devnull strcpy(tup[ntup], fields[i]);
196 d957951b 2005-02-11 devnull ntup++;
197 d957951b 2005-02-11 devnull }
198 d957951b 2005-02-11 devnull }
199 d957951b 2005-02-11 devnull }
200 d957951b 2005-02-11 devnull if(ntup)
201 d957951b 2005-02-11 devnull tprint();
202 d957951b 2005-02-11 devnull exits(0);
203 d957951b 2005-02-11 devnull }