1
# The (extremely complex) rules for domain delegation.
2
# Note that really, this should be called "RegistryBoundaries"; see bug 4605
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:
12
# http://www.apache.org/licenses/LICENSE-2.0
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.
21
package Mail::SpamAssassin::Util::RegistrarBoundaries;
29
@ISA %TWO_LEVEL_DOMAINS %THREE_LEVEL_DOMAINS %US_STATES %VALID_TLDS
32
# The list of currently-valid TLDs for the DNS system.
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
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
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" }'
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
69
com.ac edu.ac gov.ac mil.ac net.ac org.ac
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
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
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
95
com.bt edu.bt gov.bt net.bt org.bt
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
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
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
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
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
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
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
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
167
com.mg edu.mg gov.mg mil.mg nom.mg org.mg prd.mg tm.mg
170
com.mm edu.mm gov.mm net.mm org.mm
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
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
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
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
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
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
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
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
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
249
$TWO_LEVEL_DOMAINS{$_} = 1;
252
# This is required because the .us domain is nuts. See $THREE_LEVEL_DOMAINS
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
264
demon.co.uk esc.edu.ar lkd.co.im plc.co.im
266
$THREE_LEVEL_DOMAINS{$_} = 1;
269
###########################################################################
273
=item ($hostname, $domain) = split_domain ($fqdn)
275
Cut a fully-qualified hostname into the hostname part and the domain
276
part, splitting at the DNS registry boundary.
280
"www.foo.com" => ( "www", "foo.com" )
281
"www.foo.co.uk" => ( "www", "foo.co.uk" )
286
my $domain = lc shift;
290
# www..spamassassin.org -> www.spamassassin.org
293
# leading/trailing dots
297
# Split scalar domain into components
298
my @domparts = split(/\./, $domain);
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]$/)))
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]});
313
elsif (@domparts == 3) {
314
# http://www.neustar.us/policies/docs/rfc_1480.txt
317
# [^\.]+\.${US_STATES}\.us
318
if ($domparts[2] eq 'us') {
319
last if ($US_STATES{$domparts[1]});
322
my $temp = join(".", @domparts);
323
last if ($THREE_LEVEL_DOMAINS{$temp});
326
elsif (@domparts == 2) {
328
my $temp = join(".", @domparts);
329
last if ($TWO_LEVEL_DOMAINS{$temp});
331
push(@hostname, shift @domparts);
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 ...
339
unshift @domparts, pop @hostname if @hostname;
340
$domain = join(".", @domparts);
341
$hostname = join(".", @hostname);
344
($hostname, $domain);
347
###########################################################################
349
=item $domain = trim_domain($fqdn)
351
Cut a fully-qualified hostname into the hostname part and the domain
352
part, returning just the domain.
356
"www.foo.com" => "foo.com"
357
"www.foo.co.uk" => "foo.co.uk"
363
my ($host, $dom) = split_domain($domain);
367
###########################################################################
369
=item $ok = is_domain_valid($dom)
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.
379
sub is_domain_valid {
382
# domains don't have whitespace
383
return 0 if ($dom =~ /\s/);
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});
389
return 1; # nah, it's ok.