xref: /plan9/sys/src/cmd/ip/httpd/classify.c (revision 57837e0bd5c9fc29e2017ad8430ad11f4e09d373)
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