diff -uNr whois-5.2.0/config.h whois-5.2.3/config.h
--- whois-5.2.0/config.h	2014-08-02 03:31:54.000000000 +0200
+++ whois-5.2.3/config.h	2014-12-26 19:56:21.000000000 +0100
@@ -81,6 +81,15 @@
 # define RANDOM_DEVICE "/dev/urandom"
 #endif
 
+/* use arc4random_buf instead if it is available */
+#if (defined __FreeBSD__ && __FreeBSD__ >= 9) || \
+    (defined __NetBSD__  && __NetBSD_Version__ >= 600000000) || \
+    (defined OpenBSD && OpenBSD >= 200805) || \
+    (defined __APPLE__ && defined __MACH__)
+# define HAVE_ARC4RANDOM_BUF
+# undef RANDOM_DEVICE
+#endif
+
 #ifdef ENABLE_NLS
 # ifndef NLS_CAT_NAME
 #  define NLS_CAT_NAME   "whois"
diff -uNr whois-5.2.0/data.h whois-5.2.3/data.h
--- whois-5.2.0/data.h	2014-08-02 03:41:06.000000000 +0200
+++ whois-5.2.3/data.h	2014-10-16 01:57:19.000000000 +0200
@@ -11,17 +11,13 @@
     "whois.apnic.net",
     "whois.afrinic.net",
     "rr.arin.net",		/* does not accept the old syntax */
-    "whois.6bone.net",		/* 3.0.0b1 */
     "whois.connect.com.au",	/* 3.0.0b1 */
     "whois.nic.fr",
-    "whois.telstra.net",
     "whois.restena.lu",
     "rr.level3.net",		/* 3.0.0a13 */
     "whois.ripn.net",
     "whois.arnes.si",
-    "www.registry.co.ug",
     "whois.nic.ir",
-    "whois.nic.ck",
     "whois.ra.net",
     "whois.bgpmon.net",
     NULL
@@ -159,6 +155,11 @@
     NULL,	NULL
 };
 
+const char *nic_handles_post[] = {
+#include "nic_handles.h"
+    NULL,	NULL
+};
+
 #ifdef HAVE_ICONV
 struct server_charset {
     const char *name;
diff -uNr whois-5.2.0/debian/changelog whois-5.2.3/debian/changelog
--- whois-5.2.0/debian/changelog	2014-09-13 05:13:21.000000000 +0200
+++ whois-5.2.3/debian/changelog	2014-12-26 20:14:35.000000000 +0100
@@ -1,3 +1,36 @@
+whois (5.2.3) unstable; urgency=medium
+
+  * Added the .gw TLD server.
+  * Updated the .bm, .gr, .gt, .md, .np, .py, .tc, .tg, .vi, .net.za,
+    .org.za and .web.za TLD servers. (Closes: #773489)
+  * Removed the .cg TLD server.
+  * Updated the list of new gTLDs.
+  * mkpasswd: use arc4random_buf(3) where available.
+  * mkpasswd: support OpenBSD's new hash 2b.
+  * Updated some IPv4 allocations.
+  * Remove the new_gtlds.h generated file from the Debian source package.
+
+ -- Marco d'Itri <md@linux.it>  Fri, 26 Dec 2014 20:12:24 +0100
+
+whois (5.2.2) unstable; urgency=medium
+
+  * Fixed the code that removes trailing dots. (Closes: #763834)
+  * Added the .xn--d1alf (.мкд, Macedonia) and .xn--node (.გე, Georgia)
+    TLD servers.
+  * Updated the list of new gTLDs.
+
+ -- Marco d'Itri <md@linux.it>  Thu, 06 Nov 2014 03:47:43 +0100
+
+whois (5.2.1) unstable; urgency=medium
+
+  * Added the .aw and .zm TLD servers.
+  * Added the charset for whois.domain.kg.
+  * Updated the list of new gTLDs.
+  * Queries for bare TLDs will be directed to whois.iana.org.
+    (Closes: #763833)
+
+ -- Marco d'Itri <md@linux.it>  Thu, 16 Oct 2014 02:01:20 +0200
+
 whois (5.2.0) unstable; urgency=medium
 
   * Implemented support for the long RIPE flags.
diff -uNr whois-5.2.0/debian/control whois-5.2.3/debian/control
--- whois-5.2.0/debian/control	2013-12-26 18:03:01.000000000 +0100
+++ whois-5.2.3/debian/control	2014-10-16 01:57:19.000000000 +0200
@@ -2,7 +2,7 @@
 Section: net
 Priority: standard
 Maintainer: Marco d'Itri <md@linux.it>
-Standards-Version: 3.9.5
+Standards-Version: 3.9.6
 Build-Depends: debhelper (>= 5), gettext, libidn11-dev
 Vcs-Git: git://github.com/rfc1036/whois.git
 Vcs-Browser: https://github.com/rfc1036/whois
diff -uNr whois-5.2.0/ip_del_list whois-5.2.3/ip_del_list
--- whois-5.2.0/ip_del_list	2014-08-02 03:31:54.000000000 +0200
+++ whois-5.2.3/ip_del_list	2014-12-26 19:56:21.000000000 +0100
@@ -19,6 +19,7 @@
 39.0.0.0/8	apnic
 41.0.0.0/8	afrinic
 42.0.0.0/8	apnic
+43.224.0.0/11	apnic
 43.0.0.0/8	whois.nic.ad.jp
 46.0.0.0/8	ripe
 49.0.0.0/8	apnic
@@ -149,11 +150,6 @@
 196.0.0.0/7	afrinic
 198.0.0.0/7	arin
 
-200.17.0.0/16	whois.nic.br
-200.18.0.0/15	whois.nic.br
-200.20.0.0/16	whois.nic.br
-200.96.0.0/13	whois.nic.br
-200.128.0.0/9	whois.nic.br
 200.0.0.0/7	lacnic
 202.11.0.0/16	whois.nic.ad.jp
 202.13.0.0/16	whois.nic.ad.jp
diff -uNr whois-5.2.0/Makefile whois-5.2.3/Makefile
--- whois-5.2.0/Makefile	2014-08-02 03:31:54.000000000 +0200
+++ whois-5.2.3/Makefile	2014-12-26 20:14:34.000000000 +0100
@@ -87,6 +87,9 @@
 new_gtlds.h: new_gtlds_list make_new_gtlds.pl
 	$(PERL) make_new_gtlds.pl < $< > $@
 
+nic_handles.h: nic_handles_list make_nic_handles.pl
+	$(PERL) make_nic_handles.pl < $< > $@
+
 tld_serv.h: tld_serv_list make_tld_serv.pl
 	$(PERL) make_tld_serv.pl < $< > $@
 
@@ -118,7 +121,7 @@
 
 clean:
 	rm -f Makefile.depend as_del.h as32_del.h ip_del.h ip6_del.h \
-		tld_serv.h servers_charset.h *.o whois mkpasswd
+		new_gtlds.h tld_serv.h servers_charset.h *.o whois mkpasswd
 	rm -f po/*.mo
 
 pos:
diff -uNr whois-5.2.0/make_new_gtlds.pl whois-5.2.3/make_new_gtlds.pl
--- whois-5.2.0/make_new_gtlds.pl	2014-08-02 03:31:54.000000000 +0200
+++ whois-5.2.3/make_new_gtlds.pl	2014-10-16 01:57:19.000000000 +0200
@@ -9,8 +9,8 @@
 	s/^\s+//; s/\s+$//;
 	next if /^$/;
 
-	die "format error: $_" if not /^((?:xn--)?[a-z0-9]+)$/;
+	die "format error: $_" if not /^(xn--[a-z0-9-]+|[a-z]+)$/;
 
-	print qq|    ".$_",\n|;
+	print qq|    "$_",\n|;
 }
 
diff -uNr whois-5.2.0/make_nic_handles.pl whois-5.2.3/make_nic_handles.pl
--- whois-5.2.0/make_nic_handles.pl	1970-01-01 01:00:00.000000000 +0100
+++ whois-5.2.3/make_nic_handles.pl	2014-10-16 01:57:19.000000000 +0200
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+while (<>) {
+	chomp;
+	s/#.*$//;
+	s/^\s+//; s/\s+$//;
+	next if /^$/;
+
+	die "format error: $_" if not
+		(my ($a, $b) = /^(-\w+)\s+([\w\d\.:-]+)$/);
+
+	print qq|    "$a",\t"$b",\n|;
+}
+
diff -uNr whois-5.2.0/make_tld_serv.pl whois-5.2.3/make_tld_serv.pl
--- whois-5.2.0/make_tld_serv.pl	2014-08-02 03:31:54.000000000 +0200
+++ whois-5.2.3/make_tld_serv.pl	2014-10-16 01:57:19.000000000 +0200
@@ -10,7 +10,7 @@
 	next if /^$/;
 
 	die "format error: $_" if not
-		(my ($a, $b) = /^([\w\d\.-]+)\s+([\w\d\.:-]+|[A-Z]+\s+.*)$/);
+		(my ($a, $b) = /^\.(\w[\w\d\.-]+)\s+([\w\d\.:-]+|[A-Z]+\s+.*)$/);
 
 	$b =~ s/^W(?:EB)?\s+/\\x01/;
 	$b =~ s/^VERISIGN\s+/\\x04" "/;
diff -uNr whois-5.2.0/mkpasswd.c whois-5.2.3/mkpasswd.c
--- whois-5.2.0/mkpasswd.c	2014-09-13 02:42:29.000000000 +0200
+++ whois-5.2.3/mkpasswd.c	2014-12-26 19:56:21.000000000 +0100
@@ -86,7 +86,13 @@
 	N_("standard 56 bit DES-based crypt(3)") },
     { "md5",		"$1$",	8,	8,	0, "MD5" },
 #if defined OpenBSD || defined FreeBSD || (defined __SVR4 && defined __sun)
+# if (defined OpenBSD && OpenBSD >= 201405)
+    /* http://marc.info/?l=openbsd-misc&m=139320023202696 */
+    { "bf",		"$2b$", 22,	22,	1, "Blowfish" },
+    { "bfa",		"$2a$", 22,	22,	1, "Blowfish (obsolete $2a$ version)" },
+# else
     { "bf",		"$2a$", 22,	22,	1, "Blowfish" },
+# endif
 #endif
 #if defined HAVE_LINUX_CRYPT_GENSALT
     { "bf",		"$2a$", 22,	22,	1, "Blowfish, system-specific on 8-bit chars" },
@@ -377,20 +383,27 @@
 }
 #endif
 
-#ifdef RANDOM_DEVICE
+#if defined RANDOM_DEVICE || defined HAVE_ARC4RANDOM_BUF
 
 void generate_salt(char *const buf, const unsigned int len)
 {
     unsigned int i;
+    unsigned char *entropy;
+
+#if defined HAVE_ARC4RANDOM_BUF
+    void *entropy = NOFAIL(malloc(len));
+    arc4random_buf(entropy, len);
+#else
+    entropy = get_random_bytes(len);
+#endif
 
-    unsigned char *entropy = get_random_bytes(len * sizeof(unsigned char));
     for (i = 0; i < len; i++)
 	buf[i] = valid_salts[entropy[i] % (sizeof valid_salts - 1)];
     buf[i] = '\0';
     free(entropy);
 }
 
-#else /* RANDOM_DEVICE */
+#else /* RANDOM_DEVICE || HAVE_ARC4RANDOM_BUF */
 
 void generate_salt(char *const buf, const unsigned int len)
 {
@@ -418,7 +431,7 @@
     buf[i] = '\0';
 }
 
-#endif /* RANDOM_DEVICE */
+#endif /* RANDOM_DEVICE || HAVE_ARC4RANDOM_BUF */
 
 void display_help(int error)
 {
diff -uNr whois-5.2.0/new_gtlds.h whois-5.2.3/new_gtlds.h
--- whois-5.2.0/new_gtlds.h	2014-09-13 05:15:04.000000000 +0200
+++ whois-5.2.3/new_gtlds.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,399 +0,0 @@
-    ".academy",
-    ".accountants",
-    ".active",
-    ".actor",
-    ".agency",
-    ".airforce",
-    ".archi",
-    ".army",
-    ".associates",
-    ".attorney",
-    ".auction",
-    ".audio",
-    ".autos",
-    ".axa",
-    ".bar",
-    ".bargains",
-    ".bayern",
-    ".beer",
-    ".berlin",
-    ".best",
-    ".bid",
-    ".bike",
-    ".bio",
-    ".black",
-    ".blackfriday",
-    ".blue",
-    ".bmw",
-    ".bnpparibas",
-    ".boo",
-    ".boutique",
-    ".brussels",
-    ".build",
-    ".builders",
-    ".business",
-    ".buzz",
-    ".bzh",
-    ".cab",
-    ".camera",
-    ".camp",
-    ".cancerresearch",
-    ".capetown",
-    ".capital",
-    ".caravan",
-    ".cards",
-    ".care",
-    ".career",
-    ".careers",
-    ".cash",
-    ".catering",
-    ".center",
-    ".ceo",
-    ".cern",
-    ".cheap",
-    ".christmas",
-    ".church",
-    ".citic",
-    ".city",
-    ".claims",
-    ".cleaning",
-    ".click",
-    ".clinic",
-    ".clothing",
-    ".club",
-    ".codes",
-    ".coffee",
-    ".college",
-    ".cologne",
-    ".com",
-    ".community",
-    ".company",
-    ".computer",
-    ".condos",
-    ".construction",
-    ".consulting",
-    ".contractors",
-    ".cooking",
-    ".cool",
-    ".country",
-    ".credit",
-    ".creditcard",
-    ".cruises",
-    ".cuisinella",
-    ".cymru",
-    ".dad",
-    ".dance",
-    ".dating",
-    ".day",
-    ".deals",
-    ".degree",
-    ".democrat",
-    ".dental",
-    ".dentist",
-    ".desi",
-    ".diamonds",
-    ".diet",
-    ".digital",
-    ".direct",
-    ".directory",
-    ".discount",
-    ".dnp",
-    ".domains",
-    ".durban",
-    ".eat",
-    ".education",
-    ".email",
-    ".engineer",
-    ".engineering",
-    ".enterprises",
-    ".equipment",
-    ".esq",
-    ".estate",
-    ".eus",
-    ".events",
-    ".exchange",
-    ".expert",
-    ".exposed",
-    ".fail",
-    ".farm",
-    ".feedback",
-    ".finance",
-    ".financial",
-    ".fish",
-    ".fishing",
-    ".fitness",
-    ".flights",
-    ".florist",
-    ".foo",
-    ".foundation",
-    ".frl",
-    ".frogans",
-    ".fund",
-    ".furniture",
-    ".futbol",
-    ".gal",
-    ".gallery",
-    ".gbiz",
-    ".gent",
-    ".gift",
-    ".gifts",
-    ".gives",
-    ".glass",
-    ".global",
-    ".globo",
-    ".gmail",
-    ".gmo",
-    ".gmx",
-    ".gop",
-    ".graphics",
-    ".gratis",
-    ".green",
-    ".gripe",
-    ".guide",
-    ".guitars",
-    ".guru",
-    ".hamburg",
-    ".haus",
-    ".healthcare",
-    ".help",
-    ".here",
-    ".hiphop",
-    ".hiv",
-    ".holdings",
-    ".holiday",
-    ".homes",
-    ".horse",
-    ".host",
-    ".hosting",
-    ".house",
-    ".how",
-    ".immo",
-    ".immobilien",
-    ".industries",
-    ".info",
-    ".ing",
-    ".ink",
-    ".institute",
-    ".insure",
-    ".international",
-    ".investments",
-    ".jetzt",
-    ".joburg",
-    ".juegos",
-    ".kaufen",
-    ".kim",
-    ".kitchen",
-    ".kiwi",
-    ".koeln",
-    ".krd",
-    ".kred",
-    ".lacaixa",
-    ".land",
-    ".lawyer",
-    ".lease",
-    ".lgbt",
-    ".life",
-    ".lighting",
-    ".limited",
-    ".limo",
-    ".link",
-    ".loans",
-    ".london",
-    ".lotto",
-    ".ltda",
-    ".luxe",
-    ".luxury",
-    ".maison",
-    ".management",
-    ".mango",
-    ".market",
-    ".marketing",
-    ".media",
-    ".meet",
-    ".melbourne",
-    ".meme",
-    ".menu",
-    ".miami",
-    ".mini",
-    ".moda",
-    ".moe",
-    ".monash",
-    ".mortgage",
-    ".moscow",
-    ".motorcycles",
-    ".mov",
-    ".nagoya",
-    ".navy",
-    ".net",
-    ".network",
-    ".neustar",
-    ".new",
-    ".ngo",
-    ".nhk",
-    ".ninja",
-    ".nra",
-    ".nrw",
-    ".nyc",
-    ".okinawa",
-    ".ong",
-    ".onl",
-    ".ooo",
-    ".org",
-    ".organic",
-    ".otsuka",
-    ".ovh",
-    ".paris",
-    ".partners",
-    ".parts",
-    ".pharmacy",
-    ".photo",
-    ".photography",
-    ".photos",
-    ".physio",
-    ".pics",
-    ".pictures",
-    ".pink",
-    ".pizza",
-    ".place",
-    ".plumbing",
-    ".praxi",
-    ".press",
-    ".prod",
-    ".productions",
-    ".properties",
-    ".property",
-    ".pub",
-    ".qpon",
-    ".quebec",
-    ".realtor",
-    ".recipes",
-    ".red",
-    ".rehab",
-    ".reise",
-    ".reisen",
-    ".ren",
-    ".rentals",
-    ".repair",
-    ".report",
-    ".republican",
-    ".rest",
-    ".restaurant",
-    ".reviews",
-    ".rich",
-    ".rio",
-    ".rocks",
-    ".rodeo",
-    ".rsvp",
-    ".ruhr",
-    ".ryukyu",
-    ".saarland",
-    ".sarl",
-    ".sca",
-    ".scb",
-    ".schmidt",
-    ".schule",
-    ".scot",
-    ".services",
-    ".sexy",
-    ".shiksha",
-    ".shoes",
-    ".singles",
-    ".social",
-    ".software",
-    ".sohu",
-    ".solar",
-    ".solutions",
-    ".soy",
-    ".space",
-    ".spiegel",
-    ".supplies",
-    ".supply",
-    ".support",
-    ".surf",
-    ".surgery",
-    ".suzuki",
-    ".systems",
-    ".tatar",
-    ".tattoo",
-    ".tax",
-    ".technology",
-    ".tienda",
-    ".tips",
-    ".tirol",
-    ".today",
-    ".tokyo",
-    ".tools",
-    ".top",
-    ".town",
-    ".toys",
-    ".trade",
-    ".training",
-    ".university",
-    ".uno",
-    ".uol",
-    ".vacations",
-    ".vegas",
-    ".ventures",
-    ".versicherung",
-    ".vet",
-    ".viajes",
-    ".villas",
-    ".vision",
-    ".vlaanderen",
-    ".vodka",
-    ".vote",
-    ".voting",
-    ".voto",
-    ".voyage",
-    ".wales",
-    ".wang",
-    ".watch",
-    ".webcam",
-    ".website",
-    ".wed",
-    ".whoswho",
-    ".wien",
-    ".wiki",
-    ".williamhill",
-    ".wme",
-    ".works",
-    ".wtc",
-    ".wtf",
-    ".xn--1qqw23a",
-    ".xn--3bst00m",
-    ".xn--3ds443g",
-    ".xn--4gbrim",
-    ".xn--55qw42g",
-    ".xn--55qx5d",
-    ".xn--6frz82g",
-    ".xn--6qq986b3xl",
-    ".xn--80adxhks",
-    ".xn--80asehdb",
-    ".xn--80aswg",
-    ".xn--c1avg",
-    ".xn--cg4bki",
-    ".xn--czr694b",
-    ".xn--czru2d",
-    ".xn--d1acj3b",
-    ".xn--fiq228c5hs",
-    ".xn--fiq64b",
-    ".xn--i1b6b1a6a2e",
-    ".xn--io0a7i",
-    ".xn--kput3i",
-    ".xn--mgbab2bd",
-    ".xn--ngbc5azd",
-    ".xn--nqv7f",
-    ".xn--nqv7fs00ema",
-    ".xn--q9jyb4c",
-    ".xn--rhqv96g",
-    ".xn--ses554g",
-    ".xn--unup4y",
-    ".xn--vhquv",
-    ".xn--xhq521b",
-    ".xn--zfr164b",
-    ".xyz",
-    ".yachts",
-    ".yandex",
-    ".yokohama",
-    ".youtube",
-    ".zone",
diff -uNr whois-5.2.0/new_gtlds_list whois-5.2.3/new_gtlds_list
--- whois-5.2.0/new_gtlds_list	2014-09-13 05:13:16.000000000 +0200
+++ whois-5.2.3/new_gtlds_list	2014-12-26 19:56:21.000000000 +0100
@@ -4,12 +4,19 @@
 # Any exceptions can be handled in tld_serv_list as usual, since it will
 # be checked first.
 
+abogado
 academy
 accountants
 active
 actor
+adult
 agency
 airforce
+allfinanz
+alsace
+amsterdam
+android
+aquarelle
 archi
 army
 associates
@@ -18,6 +25,7 @@
 audio
 autos
 axa
+band
 bar
 bargains
 bayern
@@ -29,18 +37,21 @@
 bio
 black
 blackfriday
+bloomberg
 blue
 bmw
 bnpparibas
 boo
 boutique
 brussels
+budapest
 build
 builders
 business
 buzz
 bzh
 cab
+cal
 camera
 camp
 cancerresearch
@@ -51,13 +62,17 @@
 care
 career
 careers
+cartier
+casa
 cash
 catering
 center
 ceo
 cern
+channel
 cheap
 christmas
+chrome
 church
 citic
 city
@@ -67,11 +82,11 @@
 clinic
 clothing
 club
+coach
 codes
 coffee
 college
 cologne
-com
 community
 company
 computer
@@ -84,6 +99,8 @@
 country
 credit
 creditcard
+cricket
+crs
 cruises
 cuisinella
 cymru
@@ -93,10 +110,12 @@
 day
 deals
 degree
+delivery
 democrat
 dental
 dentist
 desi
+dev
 diamonds
 diet
 digital
@@ -104,33 +123,46 @@
 directory
 discount
 dnp
+docs
 domains
+doosan
 durban
+dvag
 eat
 education
 email
+emerck
+energy
 engineer
 engineering
 enterprises
 equipment
 esq
 estate
+eurovision
 eus
 events
+everbank
 exchange
 expert
 exposed
 fail
 farm
+fashion
 feedback
 finance
 financial
+firmdale
 fish
 fishing
 fitness
 flights
 florist
+flowers
+flsmidth
+fly
 foo
+forsale
 foundation
 frl
 frogans
@@ -139,17 +171,21 @@
 futbol
 gal
 gallery
+garden
 gbiz
 gent
+ggee
 gift
 gifts
 gives
 glass
+gle
 global
 globo
 gmail
 gmo
 gmx
+google
 gop
 graphics
 gratis
@@ -173,16 +209,18 @@
 hosting
 house
 how
+ibm
 immo
 immobilien
 industries
-info
 ing
 ink
 institute
 insure
 international
 investments
+irish
+iwc
 jetzt
 joburg
 juegos
@@ -195,9 +233,13 @@
 kred
 lacaixa
 land
+latrobe
 lawyer
+lds
 lease
+legal
 lgbt
+lidl
 life
 lighting
 limited
@@ -209,6 +251,7 @@
 ltda
 luxe
 luxury
+madrid
 maison
 management
 mango
@@ -218,22 +261,25 @@
 meet
 melbourne
 meme
+memorial
 menu
 miami
 mini
 moda
 moe
 monash
+money
+mormon
 mortgage
 moscow
 motorcycles
 mov
 nagoya
 navy
-net
 network
 neustar
 new
+nexus
 ngo
 nhk
 ninja
@@ -244,13 +290,14 @@
 ong
 onl
 ooo
-org
 organic
+osaka
 otsuka
 ovh
 paris
 partners
 parts
+party
 pharmacy
 photo
 photography
@@ -262,10 +309,14 @@
 pizza
 place
 plumbing
+pohl
+poker
+porn
 praxi
 press
 prod
 productions
+prof
 properties
 property
 pub
@@ -277,6 +328,7 @@
 rehab
 reise
 reisen
+reit
 ren
 rentals
 repair
@@ -287,23 +339,30 @@
 reviews
 rich
 rio
+rip
 rocks
 rodeo
 rsvp
 ruhr
 ryukyu
 saarland
+sale
+samsung
 sarl
 sca
 scb
 schmidt
 schule
+schwarz
+science
 scot
 services
+sew
 sexy
 shiksha
 shoes
 singles
+sky
 social
 software
 sohu
@@ -318,13 +377,16 @@
 surf
 surgery
 suzuki
+sydney
 systems
+taipei
 tatar
 tattoo
 tax
 technology
 tienda
 tips
+tires
 tirol
 today
 tokyo
@@ -334,6 +396,8 @@
 toys
 trade
 training
+trust
+tui
 university
 uno
 uol
@@ -343,6 +407,7 @@
 versicherung
 vet
 viajes
+video
 villas
 vision
 vlaanderen
@@ -357,17 +422,21 @@
 webcam
 website
 wed
+wedding
 whoswho
 wien
 wiki
 williamhill
 wme
+work
 works
+world
 wtc
 wtf
 xn--1qqw23a
 xn--3bst00m
 xn--3ds443g
+xn--45q11c
 xn--4gbrim
 xn--55qw42g
 xn--55qx5d
@@ -379,10 +448,13 @@
 xn--c1avg
 xn--cg4bki
 xn--czr694b
+xn--czrs0t
 xn--czru2d
 xn--d1acj3b
 xn--fiq228c5hs
 xn--fiq64b
+xn--flw351e
+xn--hxt814e
 xn--i1b6b1a6a2e
 xn--io0a7i
 xn--kput3i
@@ -390,16 +462,23 @@
 xn--ngbc5azd
 xn--nqv7f
 xn--nqv7fs00ema
+xn--p1acf
 xn--q9jyb4c
+xn--qcka1pmc
 xn--rhqv96g
 xn--ses554g
 xn--unup4y
+xn--vermgensberater-ctb
+xn--vermgensberatung-pwb
 xn--vhquv
 xn--xhq521b
 xn--zfr164b
 xyz
 yachts
 yandex
+yoga
 yokohama
 youtube
+zip
 zone
+zuerich
diff -uNr whois-5.2.0/nic_handles.h whois-5.2.3/nic_handles.h
--- whois-5.2.0/nic_handles.h	1970-01-01 01:00:00.000000000 +0100
+++ whois-5.2.3/nic_handles.h	2014-10-16 02:03:04.000000000 +0200
@@ -0,0 +1,22 @@
+    "-arin",	"whois.arin.net",
+    "-ripe",	"whois.ripe.net",
+    "-mnt",	"whois.ripe.net",
+    "-lacnic",	"whois.lacnic.net",
+    "-afrinic",	"whois.afrinic.net",
+    "-ap",	"whois.apnic.net",
+    "-cznic",	"whois.nic.cz",
+    "-dk",	"whois.dk-hostmaster.dk",
+    "-il",	"whois.isoc.org.il",
+    "-is",	"whois.isnic.is",
+    "-kg",	"whois.domain.kg",
+    "-coop",	"whois.nic.coop",
+    "-frnic",	"whois.nic.fr",
+    "-lrms",	"whois.afilias.info",
+    "-metu",	"whois.nic.tr",
+    "-nicat",	"whois.nic.at",
+    "-nicci",	"whois.nic.ci",
+    "-irnic",	"whois.nic.ir",
+    "-norid",	"whois.norid.no",
+    "-tel",	"whois.nic.tel",
+    "-adnic",	"whois.nic.org.uy",
+    "-sixxs",	"whois.sixxs.net",
diff -uNr whois-5.2.0/nic_handles_list whois-5.2.3/nic_handles_list
--- whois-5.2.0/nic_handles_list	1970-01-01 01:00:00.000000000 +0100
+++ whois-5.2.3/nic_handles_list	2014-10-16 01:57:19.000000000 +0200
@@ -0,0 +1,22 @@
+-arin	whois.arin.net
+-ripe	whois.ripe.net
+-mnt	whois.ripe.net
+-lacnic	whois.lacnic.net
+-afrinic whois.afrinic.net
+-ap	whois.apnic.net
+-cznic	whois.nic.cz
+-dk	whois.dk-hostmaster.dk
+-il	whois.isoc.org.il
+-is	whois.isnic.is
+-kg	whois.domain.kg
+-coop	whois.nic.coop
+-frnic	whois.nic.fr
+-lrms	whois.afilias.info
+-metu	whois.nic.tr
+-nicat	whois.nic.at
+-nicci	whois.nic.ci
+-irnic	whois.nic.ir
+-norid	whois.norid.no
+-tel	whois.nic.tel
+-adnic	whois.nic.org.uy
+-sixxs	whois.sixxs.net
diff -uNr whois-5.2.0/po/eu.po whois-5.2.3/po/eu.po
--- whois-5.2.0/po/eu.po	2013-04-18 03:29:36.000000000 +0200
+++ whois-5.2.3/po/eu.po	2014-10-16 02:01:05.000000000 +0200
@@ -11,7 +11,7 @@
 "PO-Revision-Date: 2002-08-24 16:22+0200\n"
 "Last-Translator: Aitor Ibaez <aitiba@gmail.com>\n"
 "Language-Team: Euskara <Librezale@librezale.org>\n"
-"Language: \n"
+"Language: eu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff -uNr whois-5.2.0/po/pt_BR.po whois-5.2.3/po/pt_BR.po
--- whois-5.2.0/po/pt_BR.po	2013-04-18 03:29:36.000000000 +0200
+++ whois-5.2.3/po/pt_BR.po	2014-10-16 02:01:05.000000000 +0200
@@ -11,7 +11,7 @@
 "PO-Revision-Date: 2006-04-26 21:03-0300\n"
 "Last-Translator: Anderson Goulart <globalx@gmail.com>\n"
 "Language-Team: Portuguese/Brazil\n"
-"Language: \n"
+"Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
diff -uNr whois-5.2.0/servers_charset_list whois-5.2.3/servers_charset_list
--- whois-5.2.0/servers_charset_list	2014-08-02 03:31:54.000000000 +0200
+++ whois-5.2.3/servers_charset_list	2014-11-12 03:35:56.000000000 +0100
@@ -32,6 +32,7 @@
 whois.nic.it		utf-8
 whois.jprs.jp		iso-2022-jp
 whois.nic.ad.jp		iso-2022-jp
+whois.domain.kg		cp1251
 whois.nic.or.kr		utf-8
 whois.kr		utf-8
 # XXX I had to guess: the server is unable to fully transcode U+49b in the
@@ -40,6 +41,7 @@
 whois.nic.li		utf-8
 whois.domreg.lt		utf-8
 whois.dns.lu		iso-8859-1
+whois.marnet.mk		utf-8
 whois.nic.mu		utf-8
 whois.norid.no		iso-8859-1
 whois.iis.nu		utf-8
diff -uNr whois-5.2.0/tld_serv_list whois-5.2.3/tld_serv_list
--- whois-5.2.0/tld_serv_list	2014-08-21 02:35:29.000000000 +0200
+++ whois-5.2.3/tld_serv_list	2014-12-26 19:56:21.000000000 +0100
@@ -91,7 +91,7 @@
 .bi	whois1.nic.bi
 .bj	whois.nic.bj
 #.bl
-.bm	WEB http://207.228.133.14/cgi-bin/lansaweb?procfun+BMWHO+BMWHO2+WHO
+.bm	WEB http://www.bermudanic.bm/cgi-bin/lansaweb?procfun+BMWHO+BMWHO2+WHO
 .bn	whois.bn	# www.brunet.bn
 .bo	whois.nic.bo
 #.bq
@@ -107,7 +107,7 @@
 .cc	VERISIGN ccwhois.verisign-grs.com
 .cd	whois.nic.cd
 .cf	whois.dot.cf
-.cg	WEB http://www.nic.cg/cgi-bin/whois.pl
+.cg	NONE
 .ch	whois.nic.ch
 .ci	whois.nic.ci
 .ck	NONE
@@ -156,12 +156,12 @@
 .gm	WEB http://www.nic.gm/htmlpages/whois.htm
 .gn	NONE		# http://www.psg.com/dns/gn/
 .gp	WEB https://www.dom-enic.com/whois.html
-.gq	NONE		# NO NIC http://www.getesa.gq/
-.gr	WEB https://grweb.ics.forth.gr/Whois?lang=en
+.gq	whois.dominio.gq
+.gr	WEB https://grweb.ics.forth.gr/public/whois.jsp?lang=en
 .gs	whois.nic.gs
-.gt	WEB http://www.gt/who_is.html
+.gt	WEB http://www.gt/
 .gu	WEB http://gadao.gov.gu/domainsearch.htm
-.gw	NONE		# currently no registry
+.gw	WEB http://nic.gw/en/whois/
 .gy	whois.registry.gy
 .hk	whois.hkirc.hk
 .hm	whois.registry.hm
@@ -185,7 +185,7 @@
 .jp	whois.jprs.jp
 .ke	whois.kenic.or.ke
 .kg	whois.domain.kg
-.kh	NONE		# http://www.mptc.gov.kh/DomainNameRegistrationForm.aspx http://www.nic.net.kh/
+.kh	NONE		# http://www.trc.gov.kh/index.php/en/newsCategory/view?id=42&detail_id=68
 .ki	whois.nic.mu
 .km	NONE		# www.domaine.km
 .kn	WEB http://www.nic.kn/
@@ -207,7 +207,7 @@
 .ly	whois.nic.ly
 .ma	whois.iam.net.ma # www.nic.ma
 .mc	NONE	# www.nic.mc
-.md	WEB http://www.dns.md/wh1.php # whois.nic.md is restricted
+.md	whois.nic.md
 .me	whois.nic.me	# afilias
 #.mf
 .mg	whois.nic.mg
@@ -227,7 +227,7 @@
 .mw	WEB http://www.registrar.mw/
 .mx	whois.mx
 .my	whois.mynic.my
-.mz	NONE		# NIC? www.uem.mz
+.mz	whois.nic.mz
 .na	whois.na-nic.com.na
 .nc	whois.nc
 .ne	NONE		# NIC? http://www.intnet.ne
@@ -236,7 +236,7 @@
 .ni	WEB http://www.nic.ni/
 .nl	whois.domain-registry.nl
 .no	whois.norid.no
-.np	WEB http://register.mos.com.np/userSearchInc.asp
+.np	WEB http://register.mos.com.np/np-whois-lookup
 .nr	WEB http://www.cenpac.net.nr/dns/whois.html
 .nu	whois.iis.nu
 .nz	whois.srs.net.nz
@@ -255,7 +255,7 @@
 .ps	whois.pnina.ps
 .pt	whois.dns.pt
 .pw	whois.nic.pw
-.py	WEB http://www.nic.py/consultas.html
+.py	WEB http://www.nic.py/consulta-datos.php
 .qa	whois.registry.qa
 .re	whois.nic.re
 .ro	whois.rotld.ro
@@ -285,10 +285,10 @@
 .sx	whois.sx
 .sy	whois.tld.sy
 .sz	NONE		# http://www.sispa.org.sz/
-.tc	whois.meridiantld.net
+.tc	whois.nic.tc
 .td	WEB http://www.nic.td/
 .tf	whois.nic.tf
-.tg	WEB http://www.nic.tg/
+.tg	whois.nic.tg
 .th	whois.thnic.co.th
 .tj	WEB http://www.nic.tj/whois.html
 .tk	whois.dot.tk
@@ -329,7 +329,7 @@
 .vc	AFILIAS
 .ve	whois.nic.ve
 .vg	whois.adamsnames.tc
-.vi	WEB http://www.nic.vi/whoisform.htm
+.vi	WEB https://secure.nic.vi/whois-lookup/
 .vn	WEB http://www.vnnic.vn/en/domain
 .vu	vunic.vu
 .wf	whois.nic.wf
@@ -340,10 +340,10 @@
 .alt.za	whois.alt.za
 .co.za	whois.registry.net.za
 .gov.za	whois.gov.za
-.net.za	whois.net.za
-.org.za	WEB http://www.org.za/	# rwhois.org.za:4321 is restricted
-.web.za	whois.web.za
-.za	NONE		# http://www.zadna.org.za/annexure-d.html
+.net.za	net-whois.registry.net.za
+.org.za	org-whois.registry.net.za
+.web.za	web-whois.registry.net.za
+.za	NONE		# http://www.zadna.org.za/content/page/domain-information
 .zm	whois.nic.zm
 .zw	NONE		# http://www.zispa.co.zw/
 
@@ -354,6 +354,7 @@
 .xn--80ao21a		whois.nic.kz		# Kazakhstan
 .xn--90a3ac		whois.rnids.rs		# Serbia
 .xn--clchc0ea0b2g2a9gcd	whois.sgnic.sg		# Singapore, Tamil
+.xn--d1alf		whois.marnet.mk		# Macedonia
 .xn--fiqs8s		cwhois.cnnic.cn		# China, Simplified Chinese
 .xn--fiqz9s		cwhois.cnnic.cn		# China, Traditional Chinese
 .xn--fpcrj9c3d		whois.inregistry.net	# India, Telugu AW
@@ -374,6 +375,7 @@
 .xn--mgbc0a9azcg	NONE			# Morocco
 .xn--mgberp4a5d4ar	whois.nic.net.sa	# Saudi Arabia
 .xn--mgbx4cd0ab		whois.mynic.my		# Malaysia AW
+.xn--node		whois.itdc.ge		# Georgia
 .xn--o3cw4h		whois.thnic.co.th	# Thailand
 .xn--ogbpf8fl		whois.tld.sy		# Syria
 .xn--p1ai		whois.tcinet.ru		# Russian Federation
@@ -385,38 +387,3 @@
 .xn--xkc2dl3a5ee0h	whois.inregistry.net	# India, Tamil AW
 .xn--yfro4i67o		whois.sgnic.sg		# Singapore, Chinese
 .xn--ygbi2ammx		whois.pnina.ps		# Palestinian Territory
-
--dom	whois.networksolutions.com
--org	whois.networksolutions.com
--hst	whois.networksolutions.com
--arin	whois.arin.net
--ripe	whois.ripe.net
--mnt	whois.ripe.net
--lacnic	whois.lacnic.net
--afrinic whois.afrinic.net
--ap	whois.apnic.net
--cn	whois.cnnic.cn
--cz	whois.nic.cz
--dk	whois.dk-hostmaster.dk
--il	whois.isoc.org.il
--is	whois.isnic.is
--kg	whois.domain.kg
--ti	whois.telstra.net
--tw	whois.twnic.net.tw
--coop	whois.nic.coop
--frnic	whois.nic.fr
--gandi	whois.gandi.net
--kenic	whois.kenic.or.ke
--lrms	whois.afilias.info
--metu	whois.nic.tr
--nicat	whois.nic.at
--nicci	whois.nic.ci
--nicir	whois.nic.ir
--norid	whois.norid.no
--rotld	whois.rotld.ro
--sgnic	whois.sgnic.sg
--tel	whois.nic.tel
--uanic	whois.ua
--cunic  whois.cunic.ua
--uynic	whois.nic.org.uy
--sixxs	whois.sixxs.net
diff -uNr whois-5.2.0/version.h whois-5.2.3/version.h
--- whois-5.2.0/version.h	2014-09-13 05:15:04.000000000 +0200
+++ whois-5.2.3/version.h	2014-12-26 19:57:56.000000000 +0100
@@ -1 +1 @@
-#define VERSION "5.2.0"
+#define VERSION "5.2.3"
diff -uNr whois-5.2.0/whois.c whois-5.2.3/whois.c
--- whois-5.2.0/whois.c	2014-09-13 05:13:19.000000000 +0200
+++ whois-5.2.3/whois.c	2014-11-12 03:35:56.000000000 +0100
@@ -442,7 +442,7 @@
 	}
 	regfree(&re);
 #else
-	if (domcmp(s, pattern)) {
+	if (endstrcaseeq(s, pattern)) {
 	    fclose(fp);
 	    return strdup(server);
 	}
@@ -496,6 +496,15 @@
 
     /* no dot and no hyphen means it's a NSI NIC handle or ASN (?) */
     if (!strpbrk(s, ".-")) {
+	/* if it is a TLD or a new gTLD then ask IANA */
+	for (i = 0; tld_serv[i]; i += 2)
+	    if (strcaseeq(s, tld_serv[i]))
+		return strdup("whois.iana.org");
+
+	for (i = 0; new_gtlds[i]; i++)
+	    if (strcaseeq(s, new_gtlds[i]))
+		return strdup("whois.iana.org");
+
 	if (strncaseeq(s, "as", 2) &&		/* it's an AS */
 		(isasciidigit(s[2]) || s[2] == ' '))
 	    return strdup(whereas(atol(s + 2)));
@@ -524,7 +533,7 @@
 
     /* check the TLDs list */
     for (i = 0; tld_serv[i]; i += 2)
-	if (domcmp(s, tld_serv[i]))
+	if (in_domain(s, tld_serv[i]))
 	    return strdup(tld_serv[i + 1]);
 
     /* use the default server name for "new" gTLDs */
@@ -541,6 +550,12 @@
 	for (i = 0; nic_handles[i]; i += 2)
 	    if (strncaseeq(s, nic_handles[i], strlen(nic_handles[i])))
 		return strdup(nic_handles[i + 1]);
+
+	/* search for strings at the end of the word */
+	for (i = 0; nic_handles_post[i]; i += 2)
+	    if (endstrcaseeq(s, nic_handles_post[i]))
+		return strdup(nic_handles_post[i + 1]);
+
 	/* it's probably a network name */
 	return strdup("");
     }
@@ -633,9 +648,9 @@
     /* add useful default flags if there are no flags or multiple arguments */
     if (isripe) { }
     else if (strchr(query, ' ') || *flags) { }
-    else if (streq(server, "whois.denic.de") && domcmp(query, ".de"))
+    else if (streq(server, "whois.denic.de") && in_domain(query, "de"))
 	strcat(buf, "-T dn" DENIC_PARAM_ACE DENIC_PARAM_CHARSET " ");
-    else if (streq(server, "whois.dk-hostmaster.dk") && domcmp(query, ".dk"))
+    else if (streq(server, "whois.dk-hostmaster.dk") && in_domain(query, "dk"))
 	strcat(buf, "--show-handles ");
 
     /* mangle and add the query string */
@@ -1035,18 +1050,50 @@
 }
 
 /* check if dom ends with tld */
-int domcmp(const char *dom, const char *tld)
+int endstrcaseeq(const char *dom, const char *tld)
 {
-    const char *p, *q;
+    size_t dom_len, tld_len;
+    const char *p = NULL;
 
-    for (p = dom; *p; p++); p--;	/* move to the last char */
-    for (q = tld; *q; q++); q--;
-    while (p >= dom && q >= tld && tolower(*p) == *q) {	/* compare backwards */
-	if (q == tld)			/* start of the second word? */
-	    return 1;
-	p--; q--;
-    }
-    return 0;
+    if ((dom_len = strlen(dom)) == 0)
+	return 0;
+
+    if ((tld_len = strlen(tld)) == 0)
+	return 0;
+
+    /* dom cannot be shorter than what we are looking for */
+    if (tld_len > dom_len)
+	return 0;
+
+    p = dom + dom_len - tld_len;
+
+    return strcaseeq(p, tld);
+}
+
+/* check if dom is a subdomain of tld */
+int in_domain(const char *dom, const char *tld)
+{
+    size_t dom_len, tld_len;
+    const char *p = NULL;
+
+    if ((dom_len = strlen(dom)) == 0)
+	return 0;
+
+    if ((tld_len = strlen(tld)) == 0)
+	return 0;
+
+    /* dom cannot be shorter than what we are looking for */
+    /* -1 to ignore dom containing just a dot and tld */
+    if (tld_len >= dom_len - 1)
+	return 0;
+
+    p = dom + dom_len - tld_len;
+
+    /* fail if the character before tld is not a dot */
+    if (*(p - 1) != '.')
+	return 0;
+
+    return strcaseeq(p, tld);
 }
 
 const char *is_new_gtld(const char *s)
@@ -1054,8 +1101,8 @@
     int i;
 
     for (i = 0; new_gtlds[i]; i++)
-	if (domcmp(s, new_gtlds[i]))
-	    return new_gtlds[i] + 1;
+	if (in_domain(s, new_gtlds[i]))
+	    return new_gtlds[i];
 
     return 0;
 }
@@ -1063,7 +1110,7 @@
 /*
  * Attempt to normalize a query by removing trailing dots and whitespace,
  * then convert the domain to punycode.
- * The function assumes that the domain is the last token of they query.
+ * The function assumes that the domain is the last token of the query.
  * Returns a malloc'ed string which needs to be freed by the caller.
  */
 char *normalize_domain(const char *dom)
@@ -1074,10 +1121,15 @@
 #endif
 
     ret = strdup(dom);
-    /* eat trailing dots and blanks */
-    p = ret + strlen(ret);
-    for (; *p == '.' || *p == ' ' || *p == '\t' || p == ret; p--)
+    /* start from the last character */
+    p = ret + strlen(ret) - 1;
+    /* and then eat trailing dots and blanks */
+    while (p > ret) {
+	if (!(*p == '.' || *p == ' ' || *p == '\t'))
+	    break;
 	*p = '\0';
+	p--;
+    }
 
 #ifdef HAVE_LIBIDN
     /* find the start of the last word if there are spaces in the query */
@@ -1235,19 +1287,23 @@
     if (errno || a < 0 || a > 255 || *endptr != '.')
 	return strdup("0.0.0.0");
 
-    if (domcmp(endptr + 1, ".in-addr.arpa")) {
+    if (in_domain(endptr + 1, "in-addr.arpa")) {
 	b = strtol(endptr + 1, &endptr, 10);			/* 1.2. */
 	if (errno || b < 0 || b > 255 || *endptr != '.')
 	    return strdup("0.0.0.0");
 
-	if (domcmp(endptr + 1, ".in-addr.arpa")) {
+	if (in_domain(endptr + 1, "in-addr.arpa")) {
 	    c = strtol(endptr + 1, &endptr, 10);		/* 1.2.3. */
 	    if (errno || c < 0 || c > 255 || *endptr != '.')
 		return strdup("0.0.0.0");
 
-	    if (domcmp(endptr + 1, ".in-addr.arpa"))
+	    if (in_domain(endptr + 1, "in-addr.arpa"))
 		return strdup("0.0.0.0");
+	} else {
+	    c = b; b = a; a = 0;
 	}
+    } else {
+	c = a; a = 0;
     }
 
     new = malloc(sizeof("255.255.255.255"));
diff -uNr whois-5.2.0/whois.h whois-5.2.3/whois.h
--- whois-5.2.0/whois.h	2014-09-13 02:42:29.000000000 +0200
+++ whois-5.2.3/whois.h	2014-10-16 01:57:19.000000000 +0200
@@ -28,7 +28,8 @@
 unsigned long myinet_aton(const char *);
 unsigned long asn32_to_long(const char *);
 int isasciidigit(const char);
-int domcmp(const char *, const char *);
+int endstrcaseeq(const char *, const char *);
+int in_domain(const char *, const char *);
 const char *is_new_gtld(const char *);
 int domfind(const char *, const char *[]);
 char *normalize_domain(const char *);
