1*57837e0bSDavid du Colombier #include <u.h>
2*57837e0bSDavid du Colombier #include <libc.h>
3*57837e0bSDavid du Colombier #include <bio.h>
4*57837e0bSDavid du Colombier #include <ndb.h>
5*57837e0bSDavid du Colombier #include "whois.h"
6*57837e0bSDavid du Colombier
7*57837e0bSDavid du Colombier typedef struct Country Country;
8*57837e0bSDavid du Colombier
9*57837e0bSDavid du Colombier struct Country
10*57837e0bSDavid du Colombier {
11*57837e0bSDavid du Colombier char *code;
12*57837e0bSDavid du Colombier char *name;
13*57837e0bSDavid du Colombier };
14*57837e0bSDavid du Colombier
15*57837e0bSDavid du Colombier Country badc[] =
16*57837e0bSDavid du Colombier {
17*57837e0bSDavid du Colombier {"af", "afghanistan"},
18*57837e0bSDavid du Colombier {"cu", "cuba"},
19*57837e0bSDavid du Colombier {"ir", "iran"},
20*57837e0bSDavid du Colombier {"iq", "iraq"},
21*57837e0bSDavid du Colombier {"ly", "libya"},
22*57837e0bSDavid du Colombier {"kp", "north korea"},
23*57837e0bSDavid du Colombier {"sd", "sudan"},
24*57837e0bSDavid du Colombier {"sy", "syria"},
25*57837e0bSDavid du Colombier { 0, 0 }
26*57837e0bSDavid du Colombier };
27*57837e0bSDavid du Colombier
28*57837e0bSDavid du Colombier Country goodc[] =
29*57837e0bSDavid du Colombier {
30*57837e0bSDavid du Colombier // the original, us and canada
31*57837e0bSDavid du Colombier {"us", "united states of america"},
32*57837e0bSDavid du Colombier {"ca", "canada"},
33*57837e0bSDavid du Colombier {"gov", "gov"},
34*57837e0bSDavid du Colombier {"mil", "mil"},
35*57837e0bSDavid du Colombier
36*57837e0bSDavid du Colombier // the european union
37*57837e0bSDavid du Colombier { "eu", "european union" },
38*57837e0bSDavid du Colombier { "be", "belgium" },
39*57837e0bSDavid du Colombier { "de", "germany" },
40*57837e0bSDavid du Colombier { "fr", "france" },
41*57837e0bSDavid du Colombier { "it", "italy" },
42*57837e0bSDavid du Colombier { "lu", "luxembourg" },
43*57837e0bSDavid du Colombier { "nl", "netherlands" },
44*57837e0bSDavid du Colombier { "dk", "denmark" },
45*57837e0bSDavid du Colombier { "ie", "ireland" },
46*57837e0bSDavid du Colombier { "gb", "great britain" },
47*57837e0bSDavid du Colombier { "uk", "united kingdom" },
48*57837e0bSDavid du Colombier { "gr", "greece" },
49*57837e0bSDavid du Colombier { "es", "spain" },
50*57837e0bSDavid du Colombier { "pt", "portugal" },
51*57837e0bSDavid du Colombier { "au", "australia" },
52*57837e0bSDavid du Colombier { "fi", "finland" },
53*57837e0bSDavid du Colombier { "se", "sweden" },
54*57837e0bSDavid du Colombier
55*57837e0bSDavid du Colombier // the rest
56*57837e0bSDavid du Colombier {"au", "australia"},
57*57837e0bSDavid du Colombier {"no", "norway"},
58*57837e0bSDavid du Colombier {"cz", "czech republic"},
59*57837e0bSDavid du Colombier {"hu", "hungary"},
60*57837e0bSDavid du Colombier {"pl", "poland"},
61*57837e0bSDavid du Colombier {"jp", "japan"},
62*57837e0bSDavid du Colombier {"ch", "switzerland"},
63*57837e0bSDavid du Colombier {"nz", "new zealand"},
64*57837e0bSDavid du Colombier { 0, 0 }
65*57837e0bSDavid du Colombier };
66*57837e0bSDavid du Colombier
67*57837e0bSDavid du Colombier char *gov[] =
68*57837e0bSDavid du Colombier {
69*57837e0bSDavid du Colombier "gov",
70*57837e0bSDavid du Colombier "gouv",
71*57837e0bSDavid du Colombier "mil",
72*57837e0bSDavid du Colombier "government",
73*57837e0bSDavid du Colombier 0,
74*57837e0bSDavid du Colombier };
75*57837e0bSDavid du Colombier
76*57837e0bSDavid du Colombier Country allc[] =
77*57837e0bSDavid du Colombier {
78*57837e0bSDavid du Colombier { "ad", "andorra" },
79*57837e0bSDavid du Colombier { "ae", "united arab emirates" },
80*57837e0bSDavid du Colombier { "af", "afghanistan" },
81*57837e0bSDavid du Colombier { "ag", "antigua and barbuda" },
82*57837e0bSDavid du Colombier { "ai", "anguilla" },
83*57837e0bSDavid du Colombier { "al", "albania" },
84*57837e0bSDavid du Colombier { "am", "armenia" },
85*57837e0bSDavid du Colombier { "an", "netherlands antilles" },
86*57837e0bSDavid du Colombier { "ao", "angola" },
87*57837e0bSDavid du Colombier { "aq", "antarctica" },
88*57837e0bSDavid du Colombier { "ar", "argentina" },
89*57837e0bSDavid du Colombier { "as", "american samoa" },
90*57837e0bSDavid du Colombier { "at", "austria" },
91*57837e0bSDavid du Colombier { "au", "australia" },
92*57837e0bSDavid du Colombier { "aw", "aruba" },
93*57837e0bSDavid du Colombier { "az", "azerbaijan" },
94*57837e0bSDavid du Colombier { "ba", "bosnia and herzegovina" },
95*57837e0bSDavid du Colombier { "bb", "barbados" },
96*57837e0bSDavid du Colombier { "bd", "bangladesh" },
97*57837e0bSDavid du Colombier { "be", "belgium" },
98*57837e0bSDavid du Colombier { "bf", "burkina faso" },
99*57837e0bSDavid du Colombier { "bg", "bulgaria" },
100*57837e0bSDavid du Colombier { "bh", "bahrain" },
101*57837e0bSDavid du Colombier { "bi", "burundi" },
102*57837e0bSDavid du Colombier { "bj", "benin" },
103*57837e0bSDavid du Colombier { "bm", "bermuda" },
104*57837e0bSDavid du Colombier { "bn", "brunei darussalam" },
105*57837e0bSDavid du Colombier { "bo", "bolivia" },
106*57837e0bSDavid du Colombier { "br", "brazil" },
107*57837e0bSDavid du Colombier { "bs", "bahamas" },
108*57837e0bSDavid du Colombier { "bt", "bhutan" },
109*57837e0bSDavid du Colombier { "bu", "burma" },
110*57837e0bSDavid du Colombier { "bv", "bouvet island" },
111*57837e0bSDavid du Colombier { "bw", "botswana" },
112*57837e0bSDavid du Colombier { "by", "belarus" },
113*57837e0bSDavid du Colombier { "bz", "belize" },
114*57837e0bSDavid du Colombier { "ca", "canada" },
115*57837e0bSDavid du Colombier { "cc", "cocos (keeling) islands" },
116*57837e0bSDavid du Colombier { "cf", "central african republic" },
117*57837e0bSDavid du Colombier { "cg", "congo" },
118*57837e0bSDavid du Colombier { "ch", "switzerland" },
119*57837e0bSDavid du Colombier { "ci", "cote d'ivoire (ivory coast)" },
120*57837e0bSDavid du Colombier { "ck", "cook islands" },
121*57837e0bSDavid du Colombier { "cl", "chile" },
122*57837e0bSDavid du Colombier { "cm", "cameroon" },
123*57837e0bSDavid du Colombier { "cn", "china" },
124*57837e0bSDavid du Colombier { "co", "colombia" },
125*57837e0bSDavid du Colombier { "cr", "costa rica" },
126*57837e0bSDavid du Colombier { "cs", "czechoslovakia (former)" },
127*57837e0bSDavid du Colombier { "ct", "canton and enderbury island" },
128*57837e0bSDavid du Colombier { "cu", "cuba" },
129*57837e0bSDavid du Colombier { "cv", "cape verde" },
130*57837e0bSDavid du Colombier { "cx", "christmas island" },
131*57837e0bSDavid du Colombier { "cy", "cyprus" },
132*57837e0bSDavid du Colombier { "cz", "czech republic" },
133*57837e0bSDavid du Colombier { "dd", "german democratic republic" },
134*57837e0bSDavid du Colombier { "de", "germany" },
135*57837e0bSDavid du Colombier { "dj", "djibouti" },
136*57837e0bSDavid du Colombier { "dk", "denmark" },
137*57837e0bSDavid du Colombier { "dm", "dominica" },
138*57837e0bSDavid du Colombier { "do", "dominican republic" },
139*57837e0bSDavid du Colombier { "dz", "algeria" },
140*57837e0bSDavid du Colombier { "ec", "ecuador" },
141*57837e0bSDavid du Colombier { "ee", "estonia" },
142*57837e0bSDavid du Colombier { "eg", "egypt" },
143*57837e0bSDavid du Colombier { "eh", "western sahara" },
144*57837e0bSDavid du Colombier { "er", "eritrea" },
145*57837e0bSDavid du Colombier { "es", "spain" },
146*57837e0bSDavid du Colombier { "et", "ethiopia" },
147*57837e0bSDavid du Colombier { "eu", "european union" },
148*57837e0bSDavid du Colombier { "fi", "finland" },
149*57837e0bSDavid du Colombier { "fj", "fiji" },
150*57837e0bSDavid du Colombier { "fk", "falkland islands (malvinas)" },
151*57837e0bSDavid du Colombier { "fm", "micronesia" },
152*57837e0bSDavid du Colombier { "fo", "faroe islands" },
153*57837e0bSDavid du Colombier { "fr", "france" },
154*57837e0bSDavid du Colombier { "fx", "france, metropolitan" },
155*57837e0bSDavid du Colombier { "ga", "gabon" },
156*57837e0bSDavid du Colombier { "gb", "great britain (uk)" },
157*57837e0bSDavid du Colombier { "gd", "grenada" },
158*57837e0bSDavid du Colombier { "ge", "georgia" },
159*57837e0bSDavid du Colombier { "gf", "french guiana" },
160*57837e0bSDavid du Colombier { "gh", "ghana" },
161*57837e0bSDavid du Colombier { "gi", "gibraltar" },
162*57837e0bSDavid du Colombier { "gl", "greenland" },
163*57837e0bSDavid du Colombier { "gm", "gambia" },
164*57837e0bSDavid du Colombier { "gn", "guinea" },
165*57837e0bSDavid du Colombier { "gp", "guadeloupe" },
166*57837e0bSDavid du Colombier { "gq", "equatorial guinea" },
167*57837e0bSDavid du Colombier { "gr", "greece" },
168*57837e0bSDavid du Colombier { "gs", "s. georgia and s. sandwich isls." },
169*57837e0bSDavid du Colombier { "gt", "guatemala" },
170*57837e0bSDavid du Colombier { "gu", "guam" },
171*57837e0bSDavid du Colombier { "gw", "guinea-bissau" },
172*57837e0bSDavid du Colombier { "gy", "guyana" },
173*57837e0bSDavid du Colombier { "hk", "hong kong" },
174*57837e0bSDavid du Colombier { "hm", "heard and mcdonald islands" },
175*57837e0bSDavid du Colombier { "hn", "honduras" },
176*57837e0bSDavid du Colombier { "hr", "croatia (hrvatska)" },
177*57837e0bSDavid du Colombier { "ht", "haiti" },
178*57837e0bSDavid du Colombier { "hu", "hungary" },
179*57837e0bSDavid du Colombier { "id", "indonesia" },
180*57837e0bSDavid du Colombier { "ie", "ireland" },
181*57837e0bSDavid du Colombier { "il", "israel" },
182*57837e0bSDavid du Colombier { "in", "india" },
183*57837e0bSDavid du Colombier { "io", "british indian ocean territory" },
184*57837e0bSDavid du Colombier { "iq", "iraq" },
185*57837e0bSDavid du Colombier { "ir", "iran" },
186*57837e0bSDavid du Colombier { "is", "iceland" },
187*57837e0bSDavid du Colombier { "it", "italy" },
188*57837e0bSDavid du Colombier { "jm", "jamaica" },
189*57837e0bSDavid du Colombier { "jo", "jordan" },
190*57837e0bSDavid du Colombier { "jp", "japan" },
191*57837e0bSDavid du Colombier { "jt", "johnston island" },
192*57837e0bSDavid du Colombier { "ke", "kenya" },
193*57837e0bSDavid du Colombier { "kg", "kyrgyzstan" },
194*57837e0bSDavid du Colombier { "kh", "cambodia (democratic kampuchea)" },
195*57837e0bSDavid du Colombier { "ki", "kiribati" },
196*57837e0bSDavid du Colombier { "km", "comoros" },
197*57837e0bSDavid du Colombier { "kn", "saint kitts and nevis" },
198*57837e0bSDavid du Colombier { "kp", "korea (north)" },
199*57837e0bSDavid du Colombier { "kr", "korea (south)" },
200*57837e0bSDavid du Colombier { "kw", "kuwait" },
201*57837e0bSDavid du Colombier { "ky", "cayman islands" },
202*57837e0bSDavid du Colombier { "kz", "kazakhstan" },
203*57837e0bSDavid du Colombier { "la", "laos" },
204*57837e0bSDavid du Colombier { "lb", "lebanon" },
205*57837e0bSDavid du Colombier { "lc", "saint lucia" },
206*57837e0bSDavid du Colombier { "li", "liechtenstein" },
207*57837e0bSDavid du Colombier { "lk", "sri lanka" },
208*57837e0bSDavid du Colombier { "lr", "liberia" },
209*57837e0bSDavid du Colombier { "ls", "lesotho" },
210*57837e0bSDavid du Colombier { "lt", "lithuania" },
211*57837e0bSDavid du Colombier { "lu", "luxembourg" },
212*57837e0bSDavid du Colombier { "lv", "latvia" },
213*57837e0bSDavid du Colombier { "ly", "libya" },
214*57837e0bSDavid du Colombier { "ma", "morocco" },
215*57837e0bSDavid du Colombier { "mc", "monaco" },
216*57837e0bSDavid du Colombier { "md", "moldova" },
217*57837e0bSDavid du Colombier { "mg", "madagascar" },
218*57837e0bSDavid du Colombier { "mh", "marshall islands" },
219*57837e0bSDavid du Colombier { "mi", "midway islands" },
220*57837e0bSDavid du Colombier { "mk", "macedonia" },
221*57837e0bSDavid du Colombier { "ml", "mali" },
222*57837e0bSDavid du Colombier { "mm", "myanmar" },
223*57837e0bSDavid du Colombier { "mn", "mongolia" },
224*57837e0bSDavid du Colombier { "mo", "macau" },
225*57837e0bSDavid du Colombier { "mp", "northern mariana islands" },
226*57837e0bSDavid du Colombier { "mq", "martinique" },
227*57837e0bSDavid du Colombier { "mr", "mauritania" },
228*57837e0bSDavid du Colombier { "ms", "montserrat" },
229*57837e0bSDavid du Colombier { "mt", "malta" },
230*57837e0bSDavid du Colombier { "mu", "mauritius" },
231*57837e0bSDavid du Colombier { "mv", "maldives" },
232*57837e0bSDavid du Colombier { "mw", "malawi" },
233*57837e0bSDavid du Colombier { "mx", "mexico" },
234*57837e0bSDavid du Colombier { "my", "malaysia" },
235*57837e0bSDavid du Colombier { "mz", "mozambique" },
236*57837e0bSDavid du Colombier { "na", "namibia" },
237*57837e0bSDavid du Colombier { "nc", "new caledonia" },
238*57837e0bSDavid du Colombier { "ne", "niger" },
239*57837e0bSDavid du Colombier { "nf", "norfolk island" },
240*57837e0bSDavid du Colombier { "ng", "nigeria" },
241*57837e0bSDavid du Colombier { "ni", "nicaragua" },
242*57837e0bSDavid du Colombier { "nl", "netherlands" },
243*57837e0bSDavid du Colombier { "no", "norway" },
244*57837e0bSDavid du Colombier { "np", "nepal" },
245*57837e0bSDavid du Colombier { "nq", "dronning maud land" },
246*57837e0bSDavid du Colombier { "nr", "nauru" },
247*57837e0bSDavid du Colombier { "nt", "neutral zone" },
248*57837e0bSDavid du Colombier { "nu", "niue" },
249*57837e0bSDavid du Colombier { "nz", "new zealand (aotearoa)" },
250*57837e0bSDavid du Colombier { "om", "oman" },
251*57837e0bSDavid du Colombier { "pa", "panama" },
252*57837e0bSDavid du Colombier { "pc", "pacific islands" },
253*57837e0bSDavid du Colombier { "pe", "peru" },
254*57837e0bSDavid du Colombier { "pf", "french polynesia" },
255*57837e0bSDavid du Colombier { "pg", "papua new guinea" },
256*57837e0bSDavid du Colombier { "ph", "philippines" },
257*57837e0bSDavid du Colombier { "pk", "pakistan" },
258*57837e0bSDavid du Colombier { "pl", "poland" },
259*57837e0bSDavid du Colombier { "pm", "st. pierre and miquelon" },
260*57837e0bSDavid du Colombier { "pn", "pitcairn" },
261*57837e0bSDavid du Colombier { "pr", "puerto rico" },
262*57837e0bSDavid du Colombier { "pu", "united states misc. pacific islands" },
263*57837e0bSDavid du Colombier { "pt", "portugal" },
264*57837e0bSDavid du Colombier { "pw", "palau" },
265*57837e0bSDavid du Colombier { "py", "paraguay" },
266*57837e0bSDavid du Colombier { "qa", "qatar" },
267*57837e0bSDavid du Colombier { "re", "reunion" },
268*57837e0bSDavid du Colombier { "ro", "romania" },
269*57837e0bSDavid du Colombier { "ru", "russian federation" },
270*57837e0bSDavid du Colombier { "rw", "rwanda" },
271*57837e0bSDavid du Colombier { "sa", "saudi arabia" },
272*57837e0bSDavid du Colombier { "sb", "solomon islands" },
273*57837e0bSDavid du Colombier { "sc", "seychelles" },
274*57837e0bSDavid du Colombier { "sd", "sudan" },
275*57837e0bSDavid du Colombier { "se", "sweden" },
276*57837e0bSDavid du Colombier { "sg", "singapore" },
277*57837e0bSDavid du Colombier { "sh", "st. helena" },
278*57837e0bSDavid du Colombier { "si", "slovenia" },
279*57837e0bSDavid du Colombier { "sj", "svalbard and jan mayen islands" },
280*57837e0bSDavid du Colombier { "sk", "slovak republic" },
281*57837e0bSDavid du Colombier { "sl", "sierra leone" },
282*57837e0bSDavid du Colombier { "sm", "san marino" },
283*57837e0bSDavid du Colombier { "sn", "senegal" },
284*57837e0bSDavid du Colombier { "so", "somalia" },
285*57837e0bSDavid du Colombier { "sr", "suriname" },
286*57837e0bSDavid du Colombier { "st", "sao tome and principe" },
287*57837e0bSDavid du Colombier { "su", "ussr (former)" },
288*57837e0bSDavid du Colombier { "sv", "el salvador" },
289*57837e0bSDavid du Colombier { "sy", "syria" },
290*57837e0bSDavid du Colombier { "sz", "swaziland" },
291*57837e0bSDavid du Colombier { "tc", "turks and caicos islands" },
292*57837e0bSDavid du Colombier { "td", "chad" },
293*57837e0bSDavid du Colombier { "tf", "french southern territories" },
294*57837e0bSDavid du Colombier { "tg", "togo" },
295*57837e0bSDavid du Colombier { "th", "thailand" },
296*57837e0bSDavid du Colombier { "tj", "tajikistan" },
297*57837e0bSDavid du Colombier { "tk", "tokelau" },
298*57837e0bSDavid du Colombier { "tm", "turkmenistan" },
299*57837e0bSDavid du Colombier { "tn", "tunisia" },
300*57837e0bSDavid du Colombier { "to", "tonga" },
301*57837e0bSDavid du Colombier { "tp", "east timor" },
302*57837e0bSDavid du Colombier { "tr", "turkey" },
303*57837e0bSDavid du Colombier { "tt", "trinidad and tobago" },
304*57837e0bSDavid du Colombier { "tv", "tuvalu" },
305*57837e0bSDavid du Colombier { "tw", "taiwan" },
306*57837e0bSDavid du Colombier { "tz", "tanzania" },
307*57837e0bSDavid du Colombier { "ua", "ukraine" },
308*57837e0bSDavid du Colombier { "ug", "uganda" },
309*57837e0bSDavid du Colombier { "uk", "united kingdom" },
310*57837e0bSDavid du Colombier { "um", "us minor outlying islands" },
311*57837e0bSDavid du Colombier { "us", "united states" },
312*57837e0bSDavid du Colombier { "uy", "uruguay" },
313*57837e0bSDavid du Colombier { "uz", "uzbekistan" },
314*57837e0bSDavid du Colombier { "va", "vatican city state (holy see)" },
315*57837e0bSDavid du Colombier { "vc", "saint vincent and the grenadines" },
316*57837e0bSDavid du Colombier { "ve", "venezuela" },
317*57837e0bSDavid du Colombier { "vg", "virgin islands (british)" },
318*57837e0bSDavid du Colombier { "vi", "virgin islands (u.s.)" },
319*57837e0bSDavid du Colombier { "vn", "viet nam" },
320*57837e0bSDavid du Colombier { "vu", "vanuatu" },
321*57837e0bSDavid du Colombier { "wf", "wallis and futuna islands" },
322*57837e0bSDavid du Colombier { "wk", "wake island" },
323*57837e0bSDavid du Colombier { "ws", "samoa" },
324*57837e0bSDavid du Colombier { "yd", "democratic yemen" },
325*57837e0bSDavid du Colombier { "ye", "yemen" },
326*57837e0bSDavid du Colombier { "yt", "mayotte" },
327*57837e0bSDavid du Colombier { "yu", "yugoslavia" },
328*57837e0bSDavid du Colombier { "za", "south africa" },
329*57837e0bSDavid du Colombier { "zm", "zambia" },
330*57837e0bSDavid du Colombier { "zr", "zaire" },
331*57837e0bSDavid du Colombier { "zw", "zimbabwe" },
332*57837e0bSDavid du Colombier
333*57837e0bSDavid du Colombier {"gov", "gov"},
334*57837e0bSDavid du Colombier {"mil", "mil"},
335*57837e0bSDavid du Colombier
336*57837e0bSDavid du Colombier { 0, 0 }
337*57837e0bSDavid du Colombier };
338*57837e0bSDavid du Colombier
339*57837e0bSDavid du Colombier int classdebug;
340*57837e0bSDavid du Colombier
341*57837e0bSDavid du Colombier static int
incountries(char * s,Country * cp)342*57837e0bSDavid du Colombier incountries(char *s, Country *cp)
343*57837e0bSDavid du Colombier {
344*57837e0bSDavid du Colombier for(; cp->code != 0; cp++)
345*57837e0bSDavid du Colombier if(cistrcmp(s, cp->code) == 0
346*57837e0bSDavid du Colombier || cistrcmp(s, cp->name) == 0)
347*57837e0bSDavid du Colombier return 1;
348*57837e0bSDavid du Colombier return 0;
349*57837e0bSDavid du Colombier }
350*57837e0bSDavid du Colombier
351*57837e0bSDavid du Colombier static int
indomains(char * s,char ** dp)352*57837e0bSDavid du Colombier indomains(char *s, char **dp)
353*57837e0bSDavid du Colombier {
354*57837e0bSDavid du Colombier for(; *dp != nil; dp++)
355*57837e0bSDavid du Colombier if(cistrcmp(s, *dp) == 0)
356*57837e0bSDavid du Colombier return 1;
357*57837e0bSDavid du Colombier
358*57837e0bSDavid du Colombier return 0;
359*57837e0bSDavid du Colombier }
360*57837e0bSDavid du Colombier
361*57837e0bSDavid du Colombier int
classify(char * ip,Ndbtuple * t)362*57837e0bSDavid du Colombier classify(char *ip, Ndbtuple *t)
363*57837e0bSDavid du Colombier {
364*57837e0bSDavid du Colombier int isgov, iscountry, isbadc, isgoodc;
365*57837e0bSDavid du Colombier char dom[256];
366*57837e0bSDavid du Colombier char *df[128];
367*57837e0bSDavid du Colombier Ndbtuple *nt, *x;
368*57837e0bSDavid du Colombier int n;
369*57837e0bSDavid du Colombier
370*57837e0bSDavid du Colombier isgov = iscountry = isbadc = 0;
371*57837e0bSDavid du Colombier isgoodc = 1;
372*57837e0bSDavid du Colombier
373*57837e0bSDavid du Colombier for(nt = t; nt != nil; nt = nt->entry){
374*57837e0bSDavid du Colombier if(strcmp(nt->attr, "country") == 0){
375*57837e0bSDavid du Colombier iscountry = 1;
376*57837e0bSDavid du Colombier if(incountries(nt->val, badc)){
377*57837e0bSDavid du Colombier if(classdebug)fprint(2, "isbadc\n");
378*57837e0bSDavid du Colombier isbadc = 1;
379*57837e0bSDavid du Colombier isgoodc = 0;
380*57837e0bSDavid du Colombier } else if(!incountries(nt->val, goodc)){
381*57837e0bSDavid du Colombier if(classdebug)fprint(2, "!isgoodc\n");
382*57837e0bSDavid du Colombier isgoodc = 0;
383*57837e0bSDavid du Colombier }
384*57837e0bSDavid du Colombier }
385*57837e0bSDavid du Colombier
386*57837e0bSDavid du Colombier /* domain names can always hurt, even without forward verification */
387*57837e0bSDavid du Colombier if(strcmp(nt->attr, "dom") == 0){
388*57837e0bSDavid du Colombier strncpy(dom, nt->val, sizeof dom);
389*57837e0bSDavid du Colombier dom[sizeof(dom)-1] = 0;
390*57837e0bSDavid du Colombier n = getfields(dom, df, nelem(df), 0, ".");
391*57837e0bSDavid du Colombier
392*57837e0bSDavid du Colombier /* a bad country in a domain name is always believed */
393*57837e0bSDavid du Colombier if(incountries(df[n-1], badc)){
394*57837e0bSDavid du Colombier if(classdebug)fprint(2, "isbadc dom\n");
395*57837e0bSDavid du Colombier isbadc = 1;
396*57837e0bSDavid du Colombier isgoodc = 0;
397*57837e0bSDavid du Colombier }
398*57837e0bSDavid du Colombier
399*57837e0bSDavid du Colombier /* a goverment in a domain name is always believed */
400*57837e0bSDavid du Colombier if(n > 1 && indomains(df[n-2], gov))
401*57837e0bSDavid du Colombier isgov = 1;
402*57837e0bSDavid du Colombier }
403*57837e0bSDavid du Colombier }
404*57837e0bSDavid du Colombier if(iscountry == 0){
405*57837e0bSDavid du Colombier /* did the forward lookup work? */
406*57837e0bSDavid du Colombier for(nt = t; nt != nil; nt = nt->entry){
407*57837e0bSDavid du Colombier if(strcmp(nt->attr, "ip") == 0 && strcmp(nt->val, ip) == 0)
408*57837e0bSDavid du Colombier break;
409*57837e0bSDavid du Colombier }
410*57837e0bSDavid du Colombier
411*57837e0bSDavid du Colombier /* see if the domain name ends in a country code */
412*57837e0bSDavid du Colombier if(nt != nil && (x = ndbfindattr(t, nt, "dom")) != nil){
413*57837e0bSDavid du Colombier strncpy(dom, x->val, sizeof dom);
414*57837e0bSDavid du Colombier dom[sizeof(dom)-1] = 0;
415*57837e0bSDavid du Colombier n = getfields(dom, df, nelem(df), 0, ".");
416*57837e0bSDavid du Colombier if(incountries(df[n-1], allc))
417*57837e0bSDavid du Colombier iscountry = 1;
418*57837e0bSDavid du Colombier }
419*57837e0bSDavid du Colombier }
420*57837e0bSDavid du Colombier if(iscountry == 0)
421*57837e0bSDavid du Colombier return Cunknown;
422*57837e0bSDavid du Colombier if(isbadc)
423*57837e0bSDavid du Colombier return Cbadc;
424*57837e0bSDavid du Colombier if(!isgoodc && isgov)
425*57837e0bSDavid du Colombier return Cbadgov;
426*57837e0bSDavid du Colombier return Cok;
427*57837e0bSDavid du Colombier }
428