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>
6 d957951b 2005-02-11 devnull Biobuf in;
7 d957951b 2005-02-11 devnull Biobuf out;
19 d957951b 2005-02-11 devnull iscomment(char *name)
21 d957951b 2005-02-11 devnull return *name == '#';
25 d957951b 2005-02-11 devnull * is this a fully specified datakit name?
28 d957951b 2005-02-11 devnull isdk(char *name)
30 d957951b 2005-02-11 devnull int slash;
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;
40 d957951b 2005-02-11 devnull return 0;
42 d957951b 2005-02-11 devnull return slash;
46 d957951b 2005-02-11 devnull * Is this an internet domain name?
49 d957951b 2005-02-11 devnull isdomain(char *name)
51 d957951b 2005-02-11 devnull int dot = 0;
52 d957951b 2005-02-11 devnull int alpha = 0;
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;
59 d957951b 2005-02-11 devnull if(*name == '.'){
61 d957951b 2005-02-11 devnull continue;
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;
67 d957951b 2005-02-11 devnull return dot && alpha;
71 d957951b 2005-02-11 devnull * is this an ip address?
74 d957951b 2005-02-11 devnull isip(char *name)
76 d957951b 2005-02-11 devnull int dot = 0;
78 d957951b 2005-02-11 devnull for(; *name; name++){
79 d957951b 2005-02-11 devnull if(*name == '.'){
81 d957951b 2005-02-11 devnull continue;
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;
87 d957951b 2005-02-11 devnull return dot;
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;
95 d957951b 2005-02-11 devnull tprint(void)
97 d957951b 2005-02-11 devnull int i, tab;
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;
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;
113 d957951b 2005-02-11 devnull Bprint(&out, "\t");
114 d957951b 2005-02-11 devnull tab = 1;
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]);
120 d957951b 2005-02-11 devnull case Ip:
121 d957951b 2005-02-11 devnull Bprint(&out, "ip=%s\n", tup[i]);
123 d957951b 2005-02-11 devnull case Dk:
124 d957951b 2005-02-11 devnull p = strrchr(tup[i], '/');
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 ");
131 d957951b 2005-02-11 devnull Bprint(&out, "dk=%s\n", tup[i]);
133 d957951b 2005-02-11 devnull case Sys:
134 d957951b 2005-02-11 devnull Bprint(&out, "sys=%s\n", tup[i]);
140 d957951b 2005-02-11 devnull #define NFIELDS 64
143 d957951b 2005-02-11 devnull * make a database file from a merged uucp/inet database
146 d957951b 2005-02-11 devnull main(void)
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;
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])){
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;
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;
179 d957951b 2005-02-11 devnull ftype[i] = Sys;
181 d957951b 2005-02-11 devnull if(!same && ntup){
182 d957951b 2005-02-11 devnull tprint();
183 d957951b 2005-02-11 devnull ntup = 0;
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;
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]);
200 d957951b 2005-02-11 devnull if(ntup)
201 d957951b 2005-02-11 devnull tprint();
202 d957951b 2005-02-11 devnull exits(0);