Re: [PATCH v3 11/14] daemon: report connection from root-process
From: Erik Faye-Lund <hidden>
Date: 2016-06-15 22:49:45
Subsystem:
the rest · Maintainer:
Linus Torvalds
On Sun, Oct 10, 2010 at 9:31 PM, Erik Faye-Lund [off-list ref] wrote:
On Sun, Oct 10, 2010 at 8:58 PM, Johannes Sixt [off-list ref] wrote:quoted
On Sonntag, 10. Oktober 2010, Erik Faye-Lund wrote:quoted
Report incoming connections from the process that accept() the connection instead of the handling process. This enables "Connection from"-reporting on Windows, where getpeername(0, ...) consistently fails.Is this from the process that you invoke with --serve? then this failure could be due to Winsockets not being initilized. Did you check that?I've tried that, and unfortunately it lack of socket initialization does not seem to be the reason :(
But looking at it a bit more, I can do the following code-reduction on top, changing this to a +10 lines to a -2 lines patch ;)
diff --git a/daemon.c b/daemon.c
index 56a9bed..e9a4839 100644
--- a/daemon.c
+++ b/daemon.c@@ -518,7 +518,7 @@ static void parse_host_arg(char *extra_args, int buflen) } -static int execute(struct sockaddr *addr) +static int execute() { static char line[1000]; int pktlen, len, i;
@@ -1179,22 +1179,10 @@ int main(int argc, char **argv) base_path); if (serve_mode) { - struct sockaddr_storage ss; - struct sockaddr *peer = (struct sockaddr *)&ss; - socklen_t slen = sizeof(ss); - if (inetd_mode && !freopen("/dev/null", "w", stderr)) die_errno("failed to redirect stderr to /dev/null"); - if (!getpeername(0, peer, &slen)) { - int port = -1; - char *addrstr = get_addrstr(&port, peer); - setenv("REMOTE_ADDR", addrstr, 1); - loginfo("[%"PRIuMAX"] Connection from %s:%d", - (uintmax_t)getpid(), addrstr, port); - } - - return execute(peer); + return execute(); } #ifdef _POSIX_VERSION