From 9ef4f1bf5018e82cd5944034c97e19b466fda974 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 27 Jan 2014 20:28:39 +0100 Subject: [PATCH] player: Drop long-disabled code to resolve IP addresses Disabled since commit 32fac04 (v4.2.13) because it could at the time use more stack space than we provided. Additional issues: code still uses obsolete gethostbyaddr() rather than getnameinfo(), and we provide only 512 bytes for host names instead of the customary NI_MAXHOST (1025) bytes. All three issues would be easy enough to fix. What's not so easy is to avoid blocking on the synchronous DNS lookup. Without that, connecting repeatedly from a range of addresses with slow reverse lookup could conceivably be employed as a denial of service attack. We've been living without reverse lookup for close to ten years. Bury the corpse, and move on. Bonus: sizeof(struct natstr) is cut in half. Signed-off-by: Markus Armbruster --- include/misc.h | 11 +---------- include/nat.h | 3 +-- include/player.h | 1 - src/lib/player/accept.c | 10 +--------- src/lib/player/player.c | 7 ++----- 5 files changed, 5 insertions(+), 27 deletions(-) diff --git a/include/misc.h b/include/misc.h index 72925327..06157f16 100644 --- a/include/misc.h +++ b/include/misc.h @@ -29,7 +29,7 @@ * * Known contributors to this file: * Doug Hay, 1998 - * Markus Armbruster, 2004-2013 + * Markus Armbruster, 2004-2014 */ #ifndef MISC_H @@ -51,15 +51,6 @@ #define ATTRIBUTE(attrs) #endif -/* - * This uses a lot of thread stack with some versions of GNU libc, - * which can lead to nasty heap smashes (observed with 2.2.93). - * Disabled for now, until we readjust thread stack sizes. - */ -#if 0 -#define RESOLVE_IPADDRESS /* resolve ip addresses into hostnames */ -#endif - #ifndef bit #define bit(x) (1<<(x)) #endif diff --git a/include/nat.h b/include/nat.h index 15c4ecd9..6c83faaf 100644 --- a/include/nat.h +++ b/include/nat.h @@ -31,7 +31,7 @@ * Ken Stevens, 1995 * Steve McClure, 1998-2000 * Ron Koenderink, 2005-2008 - * Markus Armbruster, 2005-2013 + * Markus Armbruster, 2005-2014 */ #ifndef NAT_H @@ -95,7 +95,6 @@ struct natstr { char nat_cnam[20]; /* country name */ char nat_pnam[20]; /* representative */ char nat_hostaddr[46]; /* host addr of last user */ - char nat_hostname[512]; /* hostname of last user, may be empty */ char nat_userid[32]; /* userid of last user, may be empty */ coord nat_xcap, nat_ycap; /* cap location in abs coords */ coord nat_xorg, nat_yorg; /* origin location in abs coords */ diff --git a/include/player.h b/include/player.h index ddd26d6d..7ddfbdcb 100644 --- a/include/player.h +++ b/include/player.h @@ -59,7 +59,6 @@ struct player { struct emp_qelem queue; empth_t *proc; char hostaddr[46]; - char hostname[512]; /* may be empty */ char client[128]; /* may be empty */ char userid[32]; /* may be empty */ int authenticated; diff --git a/src/lib/player/accept.c b/src/lib/player/accept.c index 52982a99..faebf8e5 100644 --- a/src/lib/player/accept.c +++ b/src/lib/player/accept.c @@ -28,7 +28,7 @@ * * Known contributors to this file: * Dave Pare, 1994 - * Markus Armbruster, 2005-2013 + * Markus Armbruster, 2005-2014 */ #include @@ -174,9 +174,6 @@ player_accept(void *unused) int ns; int set = 1; char buf[128]; -#ifdef RESOLVE_IPADDRESS - struct hostent *hostp; -#endif /* auto sockaddr_storage would be simpler, but less portable */ sap = malloc(player_addrlen); @@ -212,11 +209,6 @@ player_accept(void *unused) continue; } logerror("Connect from %s", np->hostaddr); -#ifdef RESOLVE_IPADDRESS - hostp = gethostbyaddr(inaddr, player_addrlen, sap->sa_family); - if (NULL != hostp) - strcpy(np->hostname, hostp->h_name); -#endif /* RESOLVE_IPADDRESS */ sprintf(buf, "Conn%d", conn_cnt++); empth_create(player_login, 1024 * 1024, 0, buf, np); } diff --git a/src/lib/player/player.c b/src/lib/player/player.c index 6181a2e4..96d3b732 100644 --- a/src/lib/player/player.c +++ b/src/lib/player/player.c @@ -80,11 +80,9 @@ player_main(struct player *p) natp->nat_last_login <= natp->nat_last_logout ? ctime(&natp->nat_last_logout) : "?"); pr(" by: %s@%s\n", - natp->nat_userid, - *natp->nat_hostname ? natp->nat_hostname : natp->nat_hostaddr); + natp->nat_userid, natp->nat_hostaddr); } strcpy(natp->nat_userid, player->userid); - strcpy(natp->nat_hostname, player->hostname); strcpy(natp->nat_hostaddr, player->hostaddr); natp->nat_last_login = player->curup; putnat(natp); @@ -289,6 +287,5 @@ quit(void) char * praddr(struct player *p) { - return prbuf("%s@%s", p->userid, - *p->hostname ? p->hostname : p->hostaddr); + return prbuf("%s@%s", p->userid, p->hostaddr); }