~ubuntu-branches/ubuntu/natty/spamassassin/natty

« back to all changes in this revision

Viewing changes to .pc/70_fix-whatis/lib/Mail/SpamAssassin/Util/RegistrarBoundaries.pm

  • Committer: Package Import Robot
  • Author(s): Noah Meyerhans
  • Date: 2010-03-21 23:20:31 UTC
  • mfrom: (0.4.1) (1.4.1) (29.2.1 maverick)
  • Revision ID: package-import@ubuntu.com-20100321232031-ryqjxh9cx27epnka
Tags: 3.3.1-1
* New upstream version.
* Update several patches now that bugfixes have been incorporated
  upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# The (extremely complex) rules for domain delegation.
 
2
# Note that really, this should be called "RegistryBoundaries"; see bug 4605
 
3
 
 
4
# <@LICENSE>
 
5
# Licensed to the Apache Software Foundation (ASF) under one or more
 
6
# contributor license agreements.  See the NOTICE file distributed with
 
7
# this work for additional information regarding copyright ownership.
 
8
# The ASF licenses this file to you under the Apache License, Version 2.0
 
9
# (the "License"); you may not use this file except in compliance with
 
10
# the License.  You may obtain a copy of the License at:
 
11
 
12
#     http://www.apache.org/licenses/LICENSE-2.0
 
13
 
14
# Unless required by applicable law or agreed to in writing, software
 
15
# distributed under the License is distributed on an "AS IS" BASIS,
 
16
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
17
# See the License for the specific language governing permissions and
 
18
# limitations under the License.
 
19
# </@LICENSE>
 
20
 
 
21
package Mail::SpamAssassin::Util::RegistrarBoundaries;
 
22
 
 
23
use strict;
 
24
use warnings;
 
25
use bytes;
 
26
use re 'taint';
 
27
 
 
28
use vars qw (
 
29
  @ISA %TWO_LEVEL_DOMAINS %THREE_LEVEL_DOMAINS %US_STATES %VALID_TLDS
 
30
);
 
31
 
 
32
# The list of currently-valid TLDs for the DNS system.
 
33
#
 
34
# http://data.iana.org/TLD/tlds-alpha-by-domain.txt
 
35
# Version 2008020601, Last Updated Thu Feb  7 09:07:00 2008 UTC
 
36
# The following have been removed from the list because they are
 
37
# inactive, as can be seen in the Wikipedia articles about them
 
38
# as of 2008-02-08, e.g. http://en.wikipedia.org/wiki/.so_%28domain_name%29
 
39
#     bv gb pm sj so um yt
 
40
 
 
41
foreach (qw/
 
42
  ac ad ae aero af ag ai al am an ao aq ar arpa as asia at au aw ax az
 
43
  ba bb bd be bf bg bh bi biz bj bm bn bo br bs bt bw by bz ca cat cc
 
44
  cd cf cg ch ci ck cl cm cn co com coop cr cu cv cx cy cz de dj dk dm
 
45
  do dz ec edu ee eg er es et eu fi fj fk fm fo fr ga gd ge gf gg gh
 
46
  gi gl gm gn gov gp gq gr gs gt gu gw gy hk hm hn hr ht hu id ie il im
 
47
  in info int io iq ir is it je jm jo jobs jp ke kg kh ki km kn kp kr kw
 
48
  ky kz la lb lc li lk lr ls lt lu lv ly ma mc md me mg mh mil mk ml mm
 
49
  mn mo mobi mp mq mr ms mt mu museum mv mw mx my mz na name nc ne net
 
50
  nf ng ni nl no np nr nu nz om org pa pe pf pg ph pk pl pn pr pro ps
 
51
  pt pw py qa re ro rs ru rw sa sb sc sd se sg sh si sk sl sm sn
 
52
  sr st su sv sy sz tc td tel tf tg th tj tk tl tm tn to tp tr travel tt
 
53
  tv tw tz ua ug uk us uy uz va vc ve vg vi vn vu wf ws ye yu za
 
54
  zm zw
 
55
  /) { 
 
56
  $VALID_TLDS{$_} = 1;
 
57
}
 
58
 
 
59
# to resort this, pump the whole list through:
 
60
#  perl -e '$/=undef; $_=<>; foreach(split) { ($a,$b) = split(/\./, $_, 2); $t{$b}->{$_}=1; } foreach (sort keys %t) { print "  ",join(" ", sort keys %{$t{$_}}),"\n" }'
 
61
#
 
62
# http://www.neustar.us/policies/docs/rfc_1480.txt
 
63
# data originally from http://spamcheck.freeapp.net/two-level-tlds
 
64
# The freeapp.net site now says that information on the site is obsolete
 
65
# See discussion and sources in comments of bug 5677
 
66
# updated as per bug 5815
 
67
foreach(qw/
 
68
 
 
69
  com.ac edu.ac gov.ac mil.ac net.ac org.ac
 
70
  nom.ad
 
71
  ac.ae co.ae com.ae gov.ae mil.ae name.ae net.ae org.ae pro.ae sch.ae
 
72
  com.af edu.af gov.af net.af
 
73
  co.ag com.ag net.ag nom.ag org.ag
 
74
  com.ai edu.ai gov.ai net.ai off.ai org.ai
 
75
  com.al edu.al gov.al net.al org.al
 
76
  com.an edu.an net.an org.an
 
77
  co.ao ed.ao gv.ao it.ao og.ao pb.ao
 
78
  com.ar edu.ar gov.ar int.ar mil.ar net.ar org.ar
 
79
  e164.arpa in-addr.arpa ip6.arpa iris.arpa uri.arpa urn.arpa
 
80
  ac.at co.at gv.at or.at priv.at
 
81
  act.au asn.au com.au conf.au csiro.au edu.au gov.au id.au info.au net.au nsw.au nt.au org.au otc.au oz.au qld.au sa.au tas.au telememo.au vic.au wa.au
 
82
  com.aw
 
83
  biz.az com.az edu.az gov.az info.az int.az mil.az name.az net.az org.az pp.az
 
84
  co.ba com.ba edu.ba gov.ba mil.ba net.ba org.ba rs.ba unbi.ba unsa.ba
 
85
  com.bb edu.bb gov.bb net.bb org.bb
 
86
  ac.bd com.bd edu.bd gov.bd mil.bd net.bd org.bd
 
87
  ac.be belgie.be dns.be fgov.be
 
88
  gov.bf
 
89
  biz.bh cc.bh com.bh edu.bh gov.bh info.bh net.bh org.bh
 
90
  com.bm edu.bm gov.bm net.bm org.bm
 
91
  com.bn edu.bn net.bn org.bn
 
92
  com.bo edu.bo gob.bo gov.bo int.bo mil.bo net.bo org.bo tv.bo
 
93
  adm.br adv.br agr.br am.br arq.br art.br ato.br bio.br bmd.br cim.br cng.br cnt.br com.br coop.br dpn.br ecn.br edu.br eng.br esp.br etc.br eti.br far.br fm.br fnd.br fot.br fst.br g12.br ggf.br gov.br imb.br ind.br inf.br jor.br lel.br mat.br med.br mil.br mus.br net.br nom.br not.br ntr.br odo.br org.br ppg.br pro.br psc.br psi.br qsl.br rec.br slg.br srv.br tmp.br trd.br tur.br tv.br vet.br zlg.br
 
94
  com.bs net.bs org.bs
 
95
  com.bt edu.bt gov.bt net.bt org.bt
 
96
  co.bw org.bw
 
97
  gov.by mil.by
 
98
  com.bz net.bz org.bz
 
99
  ab.ca bc.ca gc.ca mb.ca nb.ca nf.ca nl.ca ns.ca nt.ca nu.ca on.ca pe.ca qc.ca sk.ca yk.ca
 
100
  co.ck edu.ck gov.ck net.ck org.ck
 
101
  ac.cn ah.cn bj.cn com.cn cq.cn edu.cn fj.cn gd.cn gov.cn gs.cn gx.cn gz.cn ha.cn hb.cn he.cn hi.cn hk.cn hl.cn hn.cn jl.cn js.cn jx.cn ln.cn mo.cn net.cn nm.cn nx.cn org.cn qh.cn sc.cn sd.cn sh.cn sn.cn sx.cn tj.cn tw.cn xj.cn xz.cn yn.cn zj.cn
 
102
  arts.co com.co edu.co firm.co gov.co info.co int.co mil.co net.co nom.co org.co rec.co store.co web.co
 
103
  lkd.co.im ltd.co.im plc.co.im
 
104
  au.com br.com cn.com de.com eu.com gb.com hu.com no.com qc.com ru.com sa.com se.com uk.com us.com uy.com za.com
 
105
  ac.cr co.cr ed.cr fi.cr go.cr or.cr sa.cr
 
106
  com.cu edu.cu gov.cu inf.cu net.cu org.cu
 
107
  gov.cx
 
108
  ac.cy biz.cy com.cy ekloges.cy gov.cy ltd.cy name.cy net.cy org.cy parliament.cy press.cy pro.cy tm.cy
 
109
  co.dk
 
110
  com.dm edu.dm gov.dm net.dm org.dm
 
111
  art.do com.do edu.do gob.do gov.do mil.do net.do org.do sld.do web.do
 
112
  art.dz asso.dz com.dz edu.dz gov.dz net.dz org.dz pol.dz
 
113
  com.ec edu.ec fin.ec gov.ec info.ec k12.ec med.ec mil.ec net.ec org.ec pro.ec
 
114
  co.ee com.ee edu.ee fie.ee med.ee org.ee pri.ee
 
115
  com.eg edu.eg eun.eg gov.eg mil.eg net.eg org.eg sci.eg
 
116
  com.er edu.er gov.er ind.er mil.er net.er org.er
 
117
  com.es edu.es gob.es nom.es org.es
 
118
  biz.et com.et edu.et gov.et info.et name.et net.et org.et
 
119
  aland.fi
 
120
  ac.fj biz.fj com.fj gov.fj id.fj info.fj mil.fj name.fj net.fj org.fj pro.fj school.fj
 
121
  ac.fk co.fk com.fk gov.fk net.fk nom.fk org.fk
 
122
  aeroport.fr assedic.fr asso.fr avocat.fr avoues.fr barreau.fr cci.fr chambagri.fr chirurgiens-dentistes.fr com.fr experts-comptables.fr geometre-expert.fr gouv.fr greta.fr huissier-justice.fr medecin.fr nom.fr notaires.fr pharmacien.fr port.fr prd.fr presse.fr tm.fr veterinaire.fr
 
123
  com.ge edu.ge gov.ge mil.ge net.ge org.ge pvt.ge
 
124
  ac.gg alderney.gg co.gg gov.gg guernsey.gg ind.gg ltd.gg net.gg org.gg sark.gg sch.gg
 
125
  com.gh edu.gh gov.gh mil.gh org.gh
 
126
  com.gi edu.gi gov.gi ltd.gi mod.gi org.gi
 
127
  ac.gn com.gn gov.gn net.gn org.gn
 
128
  asso.gp com.gp edu.gp net.gp org.gp
 
129
  com.gr edu.gr gov.gr net.gr org.gr
 
130
  com.gt edu.gt gob.gt ind.gt mil.gt net.gt org.gt
 
131
  com.gu edu.gu gov.gu mil.gu net.gu org.gu
 
132
  com.hk edu.hk gov.hk idv.hk net.hk org.hk
 
133
  com.hn edu.hn gob.hn mil.hn net.hn org.hn
 
134
  com.hr from.hr iz.hr name.hr
 
135
  adult.ht art.ht asso.ht com.ht coop.ht edu.ht firm.ht gouv.ht info.ht med.ht net.ht org.ht perso.ht pol.ht pro.ht rel.ht shop.ht
 
136
  2000.hu ac.hu agrar.hu bolt.hu casino.hu city.hu co.hu edu.hu erotica.hu erotika.hu film.hu forum.hu games.hu gov.hu hotel.hu info.hu ingatlan.hu jogasz.hu konyvelo.hu lakas.hu media.hu news.hu org.hu priv.hu reklam.hu sex.hu shop.hu sport.hu suli.hu szex.hu tm.hu tozsde.hu utazas.hu video.hu
 
137
  ac.id co.id go.id mil.id net.id or.id sch.id web.id
 
138
  gov.ie
 
139
  ac.il co.il gov.il idf.il k12.il muni.il net.il org.il
 
140
  ac.im co.im gov.im net.im nic.im org.im
 
141
  ac.in co.in edu.in ernet.in firm.in gen.in gov.in ind.in mil.in net.in nic.in org.in res.in
 
142
  com.io gov.io mil.io net.io org.io
 
143
  ac.ir co.ir gov.ir id.ir net.ir org.ir sch.ir
 
144
  edu.it gov.it
 
145
  ac.je co.je gov.je ind.je jersey.je ltd.je net.je org.je sch.je
 
146
  com.jm edu.jm gov.jm net.jm org.jm
 
147
  com.jo edu.jo gov.jo mil.jo net.jo org.jo
 
148
  ac.jp ad.jp aichi.jp akita.jp aomori.jp chiba.jp co.jp ed.jp ehime.jp fukui.jp fukuoka.jp fukushima.jp gifu.jp go.jp gov.jp gr.jp gunma.jp hiroshima.jp hokkaido.jp hyogo.jp ibaraki.jp ishikawa.jp iwate.jp kagawa.jp kagoshima.jp kanagawa.jp kanazawa.jp kawasaki.jp kitakyushu.jp kobe.jp kochi.jp kumamoto.jp kyoto.jp lg.jp matsuyama.jp mie.jp miyagi.jp miyazaki.jp nagano.jp nagasaki.jp nagoya.jp nara.jp ne.jp net.jp niigata.jp oita.jp okayama.jp okinawa.jp or.jp org.jp osaka.jp saga.jp saitama.jp sapporo.jp sendai.jp shiga.jp shimane.jp shizuoka.jp takamatsu.jp tochigi.jp tokushima.jp tokyo.jp tottori.jp toyama.jp utsunomiya.jp wakayama.jp yamagata.jp yamaguchi.jp yamanashi.jp yokohama.jp
 
149
  ac.ke co.ke go.ke ne.ke new.ke or.ke sc.ke
 
150
  com.kg edu.kg gov.kg mil.kg net.kg org.kg
 
151
  com.kh edu.kh gov.kh mil.kh net.kh org.kh per.kh
 
152
  ac.kr busan.kr chungbuk.kr chungnam.kr co.kr daegu.kr daejeon.kr es.kr gangwon.kr go.kr gwangju.kr gyeongbuk.kr gyeonggi.kr gyeongnam.kr hs.kr incheon.kr jeju.kr jeonbuk.kr jeonnam.kr kg.kr kyonggi.kr mil.kr ms.kr ne.kr or.kr pe.kr re.kr sc.kr seoul.kr ulsan.kr
 
153
  com.kw edu.kw gov.kw mil.kw net.kw org.kw
 
154
  com.ky edu.ky gov.ky net.ky org.ky
 
155
  com.kz edu.kz gov.kz mil.kz net.kz org.kz
 
156
  com.la net.la org.la
 
157
  com.lb edu.lb gov.lb mil.lb net.lb org.lb
 
158
  com.lc edu.lc gov.lc net.lc org.lc
 
159
  assn.lk com.lk edu.lk gov.lk grp.lk hotel.lk int.lk ltd.lk net.lk ngo.lk org.lk sch.lk soc.lk web.lk
 
160
  com.lr edu.lr gov.lr net.lr org.lr
 
161
  co.ls org.ls
 
162
  gov.lt mil.lt
 
163
  asn.lv com.lv conf.lv edu.lv gov.lv id.lv mil.lv net.lv org.lv
 
164
  biz.ly com.ly edu.ly gov.ly id.ly med.ly net.ly org.ly plc.ly sch.ly
 
165
  ac.ma co.ma gov.ma net.ma org.ma press.ma
 
166
  asso.mc tm.mc
 
167
  com.mg edu.mg gov.mg mil.mg nom.mg org.mg prd.mg tm.mg
 
168
  army.mil navy.mil
 
169
  com.mk org.mk
 
170
  com.mm edu.mm gov.mm net.mm org.mm
 
171
  edu.mn gov.mn org.mn
 
172
  com.mo edu.mo gov.mo net.mo org.mo
 
173
  music.mobi weather.mobi
 
174
  com.mt edu.mt gov.mt net.mt org.mt tm.mt uu.mt
 
175
  co.mu com.mu
 
176
  aero.mv biz.mv com.mv coop.mv edu.mv gov.mv info.mv int.mv mil.mv museum.mv name.mv net.mv org.mv pro.mv
 
177
  ac.mw co.mw com.mw coop.mw edu.mw gov.mw int.mw museum.mw net.mw org.mw
 
178
  com.mx edu.mx gob.mx net.mx org.mx
 
179
  com.my edu.my gov.my mil.my name.my net.my org.my
 
180
  alt.na com.na cul.na edu.na net.na org.na telecom.na unam.na
 
181
  com.nc net.nc org.nc
 
182
  de.net gb.net uk.net
 
183
  ac.ng com.ng edu.ng gov.ng net.ng org.ng sch.ng
 
184
  com.ni edu.ni gob.ni net.ni nom.ni org.ni
 
185
  fhs.no folkebibl.no fylkesbibl.no herad.no idrett.no kommune.no mil.no museum.no priv.no stat.no tel.no vgs.no
 
186
  com.np edu.np gov.np mil.np net.np org.np
 
187
  biz.nr co.nr com.nr edu.nr fax.nr gov.nr info.nr mob.nr mobil.nr mobile.nr net.nr org.nr tel.nr tlf.nr
 
188
  ac.nz co.nz cri.nz geek.nz gen.nz govt.nz iwi.nz maori.nz mil.nz net.nz org.nz school.nz
 
189
  ac.om biz.om co.om com.om edu.om gov.om med.om mil.om mod.om museum.om net.om org.om pro.om sch.om
 
190
  dk.org eu.org
 
191
  abo.pa ac.pa com.pa edu.pa gob.pa ing.pa med.pa net.pa nom.pa org.pa sld.pa
 
192
  com.pe edu.pe gob.pe mil.pe net.pe nom.pe org.pe
 
193
  com.pf edu.pf org.pf
 
194
  ac.pg com.pg net.pg
 
195
  com.ph edu.ph gov.ph mil.ph net.ph ngo.ph org.ph
 
196
  biz.pk com.pk edu.pk fam.pk gob.pk gok.pk gon.pk gop.pk gos.pk gov.pk net.pk org.pk web.pk
 
197
  agro.pl aid.pl art.pl atm.pl auto.pl bialystok.pl biz.pl com.pl edu.pl gda.pl gdansk.pl gmina.pl gov.pl gsm.pl info.pl katowice.pl krakow.pl lodz.pl lublin.pl mail.pl media.pl miasta.pl mil.pl net.pl ngo.pl nieruchomosci.pl nom.pl olsztyn.pl opole.pl org.pl pc.pl powiat.pl poznan.pl priv.pl realestate.pl rel.pl sex.pl shop.pl sklep.pl slupsk.pl sos.pl szczecin.pl szkola.pl targi.pl tm.pl torun.pl tourism.pl travel.pl turystyka.pl warszawa.pl waw.pl wroc.pl wroclaw.pl za.pl zgora.pl
 
198
  biz.pr com.pr edu.pr gov.pr info.pr isla.pr name.pr net.pr org.pr pro.pr
 
199
  cpa.pro law.pro med.pro
 
200
  com.ps edu.ps gov.ps net.ps org.ps plo.ps sec.ps
 
201
  com.pt edu.pt gov.pt int.pt net.pt nome.pt org.pt publ.pt
 
202
  com.py edu.py gov.py net.py org.py
 
203
  com.qa edu.qa gov.qa net.qa org.qa
 
204
  asso.re com.re nom.re
 
205
  arts.ro com.ro firm.ro info.ro nom.ro nt.ro org.ro rec.ro store.ro tm.ro www.ro
 
206
  ac.rs co.rs edu.rs gov.rs in.rs org.rs
 
207
  ac.ru adygeya.ru altai.ru amur.ru amursk.ru arkhangelsk.ru astrakhan.ru baikal.ru bashkiria.ru belgorod.ru bir.ru bryansk.ru buryatia.ru cbg.ru chel.ru chelyabinsk.ru chita.ru chukotka.ru chuvashia.ru cmw.ru com.ru dagestan.ru dudinka.ru e-burg.ru edu.ru fareast.ru gov.ru grozny.ru int.ru irkutsk.ru ivanovo.ru izhevsk.ru jamal.ru jar.ru joshkar-ola.ru k-uralsk.ru kalmykia.ru kaluga.ru kamchatka.ru karelia.ru kazan.ru kchr.ru kemerovo.ru khabarovsk.ru khakassia.ru khv.ru kirov.ru kms.ru koenig.ru komi.ru kostroma.ru krasnoyarsk.ru kuban.ru kurgan.ru kursk.ru kustanai.ru kuzbass.ru lipetsk.ru magadan.ru magnitka.ru mari-el.ru mari.ru marine.ru mil.ru mordovia.ru mosreg.ru msk.ru murmansk.ru mytis.ru nakhodka.ru nalchik.ru net.ru nkz.ru nnov.ru norilsk.ru nov.ru novosibirsk.ru nsk.ru omsk.ru orenburg.ru org.ru oryol.ru oskol.ru palana.ru penza.ru perm.ru pp.ru pskov.ru ptz.ru pyatigorsk.ru rnd.ru rubtsovsk.ru ryazan.ru sakhalin.ru samara.ru saratov.ru simbirsk.ru smolensk.ru snz.ru spb.ru stavropol.ru stv.ru surgut.ru syzran.ru tambov.ru tatarstan.ru test.ru tom.ru tomsk.ru tsaritsyn.ru tsk.ru tula.ru tuva.ru tver.ru tyumen.ru udm.ru udmurtia.ru ulan-ude.ru vdonsk.ru vladikavkaz.ru vladimir.ru vladivostok.ru volgograd.ru vologda.ru voronezh.ru vrn.ru vyatka.ru yakutia.ru yamal.ru yaroslavl.ru yekaterinburg.ru yuzhno-sakhalinsk.ru zgrad.ru
 
208
  ac.rw co.rw com.rw edu.rw gouv.rw gov.rw int.rw mil.rw net.rw
 
209
  com.sa edu.sa gov.sa med.sa net.sa org.sa pub.sa sch.sa
 
210
  com.sb edu.sb gov.sb net.sb org.sb
 
211
  com.sc edu.sc gov.sc net.sc org.sc
 
212
  com.sd edu.sd gov.sd info.sd med.sd net.sd org.sd sch.sd tv.sd
 
213
  ab.se ac.se bd.se brand.se c.se d.se e.se f.se fh.se fhsk.se fhv.se g.se h.se i.se k.se komforb.se kommunalforbund.se komvux.se lanarb.se lanbib.se m.se mil.se n.se naturbruksgymn.se o.se org.se parti.se pp.se press.se s.se sshn.se t.se tm.se u.se w.se x.se y.se z.se
 
214
  com.sg edu.sg gov.sg idn.sg net.sg org.sg per.sg
 
215
  com.sh edu.sh gov.sh mil.sh net.sh org.sh
 
216
  edu.sk gov.sk mil.sk
 
217
  co.st com.st consulado.st edu.st embaixada.st gov.st mil.st net.st org.st principe.st saotome.st store.st
 
218
  com.sv edu.sv gob.sv org.sv red.sv
 
219
  com.sy gov.sy net.sy org.sy
 
220
  at.tf bg.tf ca.tf ch.tf cz.tf de.tf edu.tf eu.tf int.tf net.tf pl.tf ru.tf sg.tf us.tf
 
221
  ac.th co.th go.th in.th mi.th net.th or.th
 
222
  ac.tj biz.tj co.tj com.tj edu.tj go.tj gov.tj int.tj mil.tj name.tj net.tj org.tj web.tj
 
223
  com.tn edunet.tn ens.tn fin.tn gov.tn ind.tn info.tn intl.tn nat.tn net.tn org.tn rnrt.tn rns.tn rnu.tn tourism.tn
 
224
  gov.to
 
225
  gov.tp
 
226
  av.tr bbs.tr bel.tr biz.tr com.tr dr.tr edu.tr gen.tr gov.tr info.tr k12.tr mil.tr name.tr net.tr org.tr pol.tr tel.tr web.tr
 
227
  aero.tt at.tt au.tt be.tt biz.tt ca.tt co.tt com.tt coop.tt de.tt dk.tt edu.tt es.tt eu.tt fr.tt gov.tt info.tt int.tt it.tt jobs.tt mobi.tt museum.tt name.tt net.tt nic.tt org.tt pro.tt se.tt travel.tt uk.tt us.tt
 
228
  co.tv gov.tv
 
229
  club.tw com.tw ebiz.tw edu.tw game.tw gov.tw idv.tw mil.tw net.tw org.tw
 
230
  ac.tz co.tz go.tz ne.tz or.tz
 
231
  cherkassy.ua chernigov.ua chernovtsy.ua ck.ua cn.ua co.ua com.ua crimea.ua cv.ua dn.ua dnepropetrovsk.ua donetsk.ua dp.ua edu.ua gov.ua if.ua in.ua ivano-frankivsk.ua kh.ua kharkov.ua kherson.ua khmelnitskiy.ua kiev.ua kirovograd.ua km.ua kr.ua ks.ua kv.ua lg.ua lugansk.ua lutsk.ua lviv.ua mk.ua net.ua nikolaev.ua od.ua odessa.ua org.ua pl.ua poltava.ua rovno.ua rv.ua sebastopol.ua sumy.ua te.ua ternopil.ua uzhgorod.ua vinnica.ua vn.ua zaporizhzhe.ua zhitomir.ua zp.ua zt.ua
 
232
  ac.ug co.ug go.ug ne.ug or.ug sc.ug
 
233
  ac.uk bl.uk british-library.uk co.uk edu.uk gov.uk icnet.uk jet.uk ltd.uk me.uk mod.uk national-library-scotland.uk net.uk nhs.uk nic.uk nls.uk org.uk parliament.uk plc.uk police.uk sch.uk
 
234
  ak.us al.us ar.us az.us ca.us co.us ct.us dc.us de.us dni.us fed.us fl.us ga.us hi.us ia.us id.us il.us in.us isa.us kids.us ks.us ky.us la.us ma.us md.us me.us mi.us mn.us mo.us ms.us mt.us nc.us nd.us ne.us nh.us nj.us nm.us nsn.us nv.us ny.us oh.us ok.us or.us pa.us ri.us sc.us sd.us tn.us tx.us ut.us va.us vt.us wa.us wi.us wv.us wy.us
 
235
  com.uy edu.uy gub.uy mil.uy net.uy org.uy
 
236
  vatican.va
 
237
  arts.ve bib.ve co.ve com.ve edu.ve firm.ve gov.ve info.ve int.ve mil.ve net.ve nom.ve org.ve rec.ve store.ve tec.ve web.ve
 
238
  co.vi com.vi edu.vi gov.vi net.vi org.vi
 
239
  ac.vn biz.vn com.vn edu.vn gov.vn health.vn info.vn int.vn name.vn net.vn org.vn pro.vn
 
240
  ch.vu com.vu de.vu edu.vu fr.vu net.vu org.vu
 
241
  com.ws edu.ws gov.ws net.ws org.ws
 
242
  com.ye edu.ye gov.ye mil.ye net.ye org.ye
 
243
  ac.yu co.yu edu.yu org.yu
 
244
  ac.za alt.za bourse.za city.za co.za edu.za gov.za law.za mil.za net.za ngo.za nom.za org.za school.za tm.za web.za
 
245
  ac.zm co.zm gov.zm org.zm sch.zm
 
246
  ac.zw co.zw gov.zw org.zw
 
247
 
 
248
 /) {
 
249
  $TWO_LEVEL_DOMAINS{$_} = 1;
 
250
}
 
251
 
 
252
# This is required because the .us domain is nuts. See $THREE_LEVEL_DOMAINS
 
253
# below.
 
254
#
 
255
foreach (qw/
 
256
  ak al ar az ca co ct dc de fl ga gu hi ia id il in ks ky la ma md me mi 
 
257
  mn mo ms mt nc nd ne nh nj nm nv ny oh ok or pa pr ri sc sd tn tx ut va vi 
 
258
  vt wa wi wv wy
 
259
  /) {
 
260
  $US_STATES{$_} = 1;
 
261
}
 
262
 
 
263
foreach (qw/
 
264
  demon.co.uk esc.edu.ar lkd.co.im plc.co.im
 
265
 /) {
 
266
  $THREE_LEVEL_DOMAINS{$_} = 1;
 
267
}
 
268
 
 
269
###########################################################################
 
270
 
 
271
=over 4
 
272
 
 
273
=item ($hostname, $domain) = split_domain ($fqdn)
 
274
 
 
275
Cut a fully-qualified hostname into the hostname part and the domain
 
276
part, splitting at the DNS registry boundary.
 
277
 
 
278
Examples:
 
279
 
 
280
    "www.foo.com" => ( "www", "foo.com" )
 
281
    "www.foo.co.uk" => ( "www", "foo.co.uk" )
 
282
 
 
283
=cut
 
284
 
 
285
sub split_domain {
 
286
  my $domain = lc shift;
 
287
  my $hostname = '';
 
288
 
 
289
  if ($domain) {
 
290
    # www..spamassassin.org -> www.spamassassin.org
 
291
    $domain =~ tr/././s;
 
292
 
 
293
    # leading/trailing dots
 
294
    $domain =~ s/^\.+//;
 
295
    $domain =~ s/\.+$//;
 
296
 
 
297
    # Split scalar domain into components
 
298
    my @domparts = split(/\./, $domain);
 
299
    my @hostname;
 
300
 
 
301
    while (@domparts > 1) { # go until we find the TLD
 
302
      if (@domparts == 4) {
 
303
        if ($domparts[3] eq 'us' &&
 
304
            (($domparts[0] eq 'pvt' && $domparts[1] eq 'k12') ||
 
305
             ($domparts[0] =~ /^c[io]$/)))
 
306
        {
 
307
          # http://www.neustar.us/policies/docs/rfc_1480.txt
 
308
          # "Fire-Dept.CI.Los-Angeles.CA.US"
 
309
          # "<school-name>.PVT.K12.<state>.US"
 
310
          last if ($US_STATES{$domparts[2]});
 
311
        }
 
312
      }
 
313
      elsif (@domparts == 3) {
 
314
        # http://www.neustar.us/policies/docs/rfc_1480.txt
 
315
        # demon.co.uk
 
316
        # esc.edu.ar
 
317
        # [^\.]+\.${US_STATES}\.us
 
318
        if ($domparts[2] eq 'us') {
 
319
          last if ($US_STATES{$domparts[1]});
 
320
        }
 
321
        else {
 
322
          my $temp = join(".", @domparts);
 
323
          last if ($THREE_LEVEL_DOMAINS{$temp});
 
324
        }
 
325
      }
 
326
      elsif (@domparts == 2) {
 
327
        # co.uk, etc.
 
328
        my $temp = join(".", @domparts);
 
329
        last if ($TWO_LEVEL_DOMAINS{$temp});
 
330
      }
 
331
      push(@hostname, shift @domparts);
 
332
    }
 
333
 
 
334
    # Look for a sub-delegated TLD
 
335
    # use @domparts to skip trying to match on TLDs that can't possibly
 
336
    # match, but keep in mind that the hostname can be blank, so 4TLD needs 4,
 
337
    # 3TLD needs 3, 2TLD needs 2 ...
 
338
    #
 
339
    unshift @domparts, pop @hostname if @hostname;
 
340
    $domain = join(".", @domparts);
 
341
    $hostname = join(".", @hostname);
 
342
  }
 
343
 
 
344
  ($hostname, $domain);
 
345
}
 
346
 
 
347
###########################################################################
 
348
 
 
349
=item $domain = trim_domain($fqdn)
 
350
 
 
351
Cut a fully-qualified hostname into the hostname part and the domain
 
352
part, returning just the domain.
 
353
 
 
354
Examples:
 
355
 
 
356
    "www.foo.com" => "foo.com" 
 
357
    "www.foo.co.uk" => "foo.co.uk" 
 
358
 
 
359
=cut
 
360
 
 
361
sub trim_domain {
 
362
  my ($domain) = @_;
 
363
  my ($host, $dom) = split_domain($domain);
 
364
  return $dom;
 
365
}
 
366
 
 
367
###########################################################################
 
368
 
 
369
=item $ok = is_domain_valid($dom)
 
370
 
 
371
Return C<1> if the domain is valid, C<undef> otherwise.  A valid domain
 
372
(a) does not contain whitespace, (b) contains at least one dot, and (c)
 
373
uses a valid TLD or ccTLD.
 
374
 
 
375
=back
 
376
 
 
377
=cut
 
378
 
 
379
sub is_domain_valid {
 
380
  my ($dom) = @_;
 
381
 
 
382
  # domains don't have whitespace
 
383
  return 0 if ($dom =~ /\s/);
 
384
 
 
385
  # ensure it ends in a known-valid TLD, and has at least 1 dot
 
386
  return 0 unless ($dom =~ /\.([^.]+)$/);
 
387
  return 0 unless ($VALID_TLDS{$1});
 
388
 
 
389
  return 1;     # nah, it's ok.
 
390
}
 
391
 
 
392
1;