From faf334aeb87ccc6680987bbd1fae8faf81969fed Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sun, 18 May 2008 15:14:36 +0000 Subject: [PATCH] httpd: fix obscure case when user runs httpd -i from command line for testing. (fixes bug 3334) function old new delta httpd_main 743 757 +14 handle_incoming_and_exit 2657 2669 +12 log_and_exit 75 43 -32 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 26/-32) Total: -6 bytes --- networking/httpd.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/networking/httpd.c b/networking/httpd.c index f835d80ca..4094061a8 100644 --- a/networking/httpd.c +++ b/networking/httpd.c @@ -944,9 +944,12 @@ static void log_and_exit(void) /* Paranoia. IE said to be buggy. It may send some extra data * or be confused by us just exiting without SHUT_WR. Oh well. */ shutdown(1, SHUT_WR); + /* Why?? + (this also messes up stdin when user runs httpd -i from terminal) ndelay_on(0); while (read(0, iobuf, IOBUF_SIZE) > 0) continue; + */ if (verbose > 2) bb_error_msg("closed"); @@ -1821,11 +1824,13 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) rmt_ip = ntohl(fromAddr->u.sin6.sin6_addr.s6_addr32[3]); #endif if (ENABLE_FEATURE_HTTPD_CGI || DEBUG || verbose) { + /* NB: can be NULL (user runs httpd -i by hand?) */ rmt_ip_str = xmalloc_sockaddr2dotted(&fromAddr->u.sa); } if (verbose) { /* this trick makes -v logging much simpler */ - applet_name = rmt_ip_str; + if (rmt_ip_str) + applet_name = rmt_ip_str; if (verbose > 2) bb_error_msg("connected"); } @@ -2255,7 +2260,9 @@ static void mini_httpd_inetd(void) { len_and_sockaddr fromAddr; + memset(&fromAddr, 0, sizeof(fromAddr)); fromAddr.len = LSA_SIZEOF_SA; + /* NB: can fail if user runs it by hand and types in http cmds */ getpeername(0, &fromAddr.u.sa, &fromAddr.len); handle_incoming_and_exit(&fromAddr); } -- 2.25.1