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 <armbru@pond.sub.org>
*
* Known contributors to this file:
* Doug Hay, 1998
- * Markus Armbruster, 2004-2013
+ * Markus Armbruster, 2004-2014
*/
#ifndef MISC_H
#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
* Ken Stevens, 1995
* Steve McClure, 1998-2000
* Ron Koenderink, 2005-2008
- * Markus Armbruster, 2005-2013
+ * Markus Armbruster, 2005-2014
*/
#ifndef NAT_H
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 */
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;
*
* Known contributors to this file:
* Dave Pare, 1994
- * Markus Armbruster, 2005-2013
+ * Markus Armbruster, 2005-2014
*/
#include <config.h>
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);
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);
}
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);
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);
}