From ad743c1e41635a903aed50935afcb411f8388408 Mon Sep 17 00:00:00 2001 From: Robert James Kaes Date: Mon, 22 Oct 2001 15:56:11 +0000 Subject: Fixed a problem where a user's variable would be uninitialized if a DNS lookup failed. --- ChangeLog | 8 ++++++++ src/sock.c | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 4c9cbeb..2570a1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-10-22 Robert James Kaes + + * src/sock.c (getpeer_string): + * src/sock.c (getpeer_ip): When the DNS lookup fails, we need to + initialized the user's buffer to an empty string; otherwise, the + user's buffer will contain garbage and cause a SEGFAULT. Thanks to + Jeffrey Wheelhouse for finding this bug. + 2001-10-18 Robert James Kaes * src/reqs.c (connect_to_upstream): Moved the code needed to diff --git a/src/sock.c b/src/sock.c index 46e5170..6e5f839 100644 --- a/src/sock.c +++ b/src/sock.c @@ -1,4 +1,4 @@ -/* $Id: sock.c,v 1.8 2001-09-16 20:11:07 rjkaes Exp $ +/* $Id: sock.c,v 1.9 2001-10-22 15:56:11 rjkaes Exp $ * * Sockets are created and destroyed here. When a new connection comes in from * a client, we need to copy the socket and the create a second socket to the @@ -162,6 +162,7 @@ char *getpeer_ip(int fd, char *ipaddr) if (getpeername(fd, (struct sockaddr*)&name, &namelen) != 0) { log_message(LOG_ERR, "Connect: 'could not get peer name'"); + *ipaddr = '\0'; } else { strlcpy(ipaddr, inet_ntoa(*(struct in_addr*)&name.sin_addr.s_addr), @@ -186,6 +187,7 @@ char *getpeer_string(int fd, char *string) if (getpeername(fd, (struct sockaddr *)&name, &namelen) != 0) { log_message(LOG_ERR, "Connect: 'could not get peer name'"); + *string = '\0'; } else { LOCK(); peername = gethostbyaddr((char *)&name.sin_addr.s_addr, -- cgit v1.2.3