From 39da061ce1712764119e25870ab8589593100680 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Mon, 8 May 2006 15:15:57 +0000 Subject: [PATCH] - patch to remove gethostbyname() (bug #190296) --- telnet-gethostbyname.patch | 48 ++++++++++++++++++++++++++++++++++++++ telnet.spec | 7 +++++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 telnet-gethostbyname.patch diff --git a/telnet-gethostbyname.patch b/telnet-gethostbyname.patch new file mode 100644 index 0000000..e1c1976 --- /dev/null +++ b/telnet-gethostbyname.patch @@ -0,0 +1,48 @@ +--- netkit-telnet-0.17/telnet/commands.c.old 2006-04-30 10:24:49.000000000 -0700 ++++ netkit-telnet-0.17/telnet/commands.c 2006-04-30 10:37:10.000000000 -0700 +@@ -1669,9 +1669,15 @@ + + /* If this is not the full name, try to get it via DNS */ + if (strchr(hbuf, '.') == 0) { +- struct hostent *he = gethostbyname(hbuf); +- if (he != 0) +- strncpy(hbuf, he->h_name, sizeof hbuf-1); ++ struct addrinfo hints; ++ struct addrinfo *res; ++ memset (&hints, '\0', sizeof (hints)); ++ hints.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG | AI_CANONNAME; ++ if (getaddrinfo (hbuf, NULL, &hints, &res) == 0) { ++ if (res->ai_canonname != NULL) ++ strncpy(hbuf, res->ai_canonname, sizeof hbuf-1); ++ freeaddrinfo (res); ++ } + hbuf[sizeof hbuf-1] = '\0'; + } + +@@ -2832,17 +2838,15 @@ + if (!c) + cp2 = 0; + +- if ((tmp = inet_addr(cp)) != -1) { +- sin_addr.s_addr = tmp; +- } else if ((host = gethostbyname(cp))) { +-#if defined(h_addr) +- memmove((caddr_t)&sin_addr, +- host->h_addr_list[0], +- sizeof(sin_addr)); +-#else +- memmove((caddr_t)&sin_addr, host->h_addr, +- sizeof(sin_addr)); +-#endif ++ struct addrinfo hints; ++ memset (&hints, '\0', sizeof (hints)); ++ // XXX The code here seems to allow only IPv4 addresses. ++ hints.ai_family = AF_INET; ++ hints.ai_flags = AI_ADDRCONFIG; ++ struct addrinfo *aires; ++ if (getaddrinfo (cp, NULL, &hints, &aires) == 0) { ++ sin_addr = ((struct sockaddr_in *) aires->ai_addr)->sin_addr; ++ freeaddrinfo (aires); + } else { + *cpp = cp; + return(0); diff --git a/telnet.spec b/telnet.spec index 289f7ce..ac3d23a 100644 --- a/telnet.spec +++ b/telnet.spec @@ -1,7 +1,7 @@ Summary: The client program for the telnet remote login protocol. Name: telnet Version: 0.17 -Release: 35.2.1 +Release: 36 Epoch: 1 License: BSD Group: Applications/Internet @@ -22,6 +22,7 @@ Patch13: telnet-0.17-conf.patch Patch14: telnet-0.17-cleanup_race.patch Patch15: telnetd-0.17-pty_read.patch Patch16: telnet-0.17-CAN-2005-468_469.patch +Patch17: telnet-gethostbyname.patch BuildPreReq: ncurses-devel Buildroot: %{_tmppath}/%{name}-root @@ -60,6 +61,7 @@ mv telnet telnet-NETKIT %patch14 -p1 -b .cleanup_race %patch15 -p0 -b .pty_read %patch16 -p1 -b .CAN-2005-468_469 +%patch17 -p1 -b .gethost %build export OPT_FLAGS="$RPM_OPT_FLAGS -g" @@ -125,6 +127,9 @@ rm -rf ${RPM_BUILD_ROOT} %{_mandir}/man8/telnetd.8* %changelog +* Mon May 08 2006 Harald Hoyer - 1:0.17-36 +- patch to remove gethostbyname() (bug #190296) + * Fri Feb 10 2006 Jesse Keating - 1:0.17-35.2.1 - bump again for double-long bug on ppc(64)