Re: [PATCH v3 11/14] daemon: report connection from root-process
- From
Erik Faye-Lund <kusmabite@gmail.com>
- Date
- Oct 10, 2010, 19:42 UTC
- Message-ID
- <AANLkTinEmrHMfw0z=uwOs9FDRcta3gwcEvc1MBi+_7C-@mail.gmail.com>
- In-Reply-To
- <AANLkTinz69u-hh-URqBrpdcrm+84N2BC7Ov4O8xeuW73@mail.gmail.com>
On Sun, Oct 10, 2010 at 9:31 PM, Erik Faye-Lund <kusmabite@gmail.com> wrote:
Show 17 quoted lines
> On Sun, Oct 10, 2010 at 8:58 PM, Johannes Sixt <j6t@kdbg.org> wrote: >> On Sonntag, 10. Oktober 2010, Erik Faye-Lund wrote: >>> 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