[prev in list] [next in list] [prev in thread] [next in thread] 

List:       proftpd-committers
Subject:    [ProFTPD-committers] CVS: proftpd/src log.c,1.73,1.74 main.c,1.274,1.275 netaddr.c,1.50,1.51
From:       TJ Saunders <castaglia () users ! sourceforge ! net>
Date:       2005-09-19 21:35:41
Message-ID: E1EHTIb-0007kn-09 () sc8-pr-cvs1 ! sourceforge ! net
[Download RAW message or body]

Update of /cvsroot/proftp/proftpd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29737/src

Modified Files:
	log.c main.c netaddr.c 
Log Message:

Bug#2695 - Client IP/host is not logged when client exits.


Index: log.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/src/log.c,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- log.c	14 Jun 2005 01:23:45 -0000	1.73
+++ log.c	19 Sep 2005 21:35:38 -0000	1.74
@@ -429,21 +429,25 @@
 
   memset(serverinfo, '\0', sizeof(serverinfo));
 
-  if (main_server && main_server->ServerFQDN) {
+  if (main_server &&
+      main_server->ServerFQDN) {
+    pr_netaddr_t *remote_addr = pr_netaddr_get_sess_remote_addr();
+    const char *remote_name = pr_netaddr_get_sess_remote_name();
+
     snprintf(serverinfo, sizeof(serverinfo), "%s", main_server->ServerFQDN);
     serverinfo[sizeof(serverinfo)-1] = '\0';
 
-    if (session.c && session.c->remote_name) {
+    if (remote_addr && remote_name) {
       snprintf(serverinfo + strlen(serverinfo),
         sizeof(serverinfo) - strlen(serverinfo), " (%s[%s])",
-        session.c->remote_name,
-        pr_netaddr_get_ipstr(session.c->remote_addr));
+        remote_name, pr_netaddr_get_ipstr(remote_addr));
 
       serverinfo[sizeof(serverinfo)-1] = '\0';
     }
   }
 
-  if (logstderr || !main_server) {
+  if (logstderr ||
+      !main_server) {
     fprintf(stderr, "%s - %s\n", serverinfo, s);
     return;
   }

Index: main.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/src/main.c,v
retrieving revision 1.274
retrieving revision 1.275
diff -u -r1.274 -r1.275
--- main.c	4 Sep 2005 23:57:02 -0000	1.274
+++ main.c	19 Sep 2005 21:35:38 -0000	1.275
@@ -380,8 +380,9 @@
   pr_event_generate("core.exit", NULL);
 
   if (!is_master ||
-      (ServerType == SERVER_INETD && !syntax_check))
+      (ServerType == SERVER_INETD && !syntax_check)) {
     pr_log_pri(PR_LOG_INFO, "FTP session closed.");
+  }
 
   log_closesyslog();
 }
@@ -1235,6 +1236,8 @@
   session.sf_flags = 0;
   session.sp_flags = 0;
 
+  pr_netaddr_set_sess_addrs();
+
   /* Close the write side of the semaphore pipe to tell the parent
    * we are all grown up and have finished housekeeping (closing
    * former listen sockets).

Index: netaddr.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/src/netaddr.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- netaddr.c	5 Sep 2005 00:05:44 -0000	1.50
+++ netaddr.c	19 Sep 2005 21:35:38 -0000	1.51
@@ -33,6 +33,13 @@
 #define IN_IS_ADDR_LOOPBACK(a) \
   ((((long int) (a)->s_addr) & 0xff000000) == 0x7f000000)
 
+static pr_netaddr_t sess_local_addr;
+static int have_sess_local_addr = FALSE;
+
+static pr_netaddr_t sess_remote_addr;
+static char sess_remote_name[PR_TUNABLE_BUFFER_SIZE];
+static int have_sess_remote_addr = FALSE;
+
 /* Do reverse DNS lookups? */
 static int reverse_dns = 1;
 
@@ -1068,3 +1075,46 @@
   return -1;
 }
 
+pr_netaddr_t *pr_netaddr_get_sess_local_addr(void) {
+  if (have_sess_local_addr) {
+    return &sess_local_addr;
+  }
+
+  errno = ENOENT;
+  return NULL;
+}
+
+pr_netaddr_t *pr_netaddr_get_sess_remote_addr(void) {
+  if (have_sess_remote_addr) {
+    return &sess_remote_addr;
+  }
+
+  errno = ENOENT;
+  return NULL;
+}
+
+const char *pr_netaddr_get_sess_remote_name(void) {
+  if (have_sess_remote_addr) {
+    return sess_remote_name;
+  }
+
+  errno = ENOENT;
+  return NULL;
+}
+
+void pr_netaddr_set_sess_addrs(void) {
+  pr_netaddr_set_family(&sess_local_addr,
+    pr_netaddr_get_family(session.c->local_addr));
+  pr_netaddr_set_sockaddr(&sess_local_addr,
+    pr_netaddr_get_sockaddr(session.c->local_addr));
+  have_sess_local_addr = TRUE;
+
+  pr_netaddr_set_family(&sess_remote_addr,
+    pr_netaddr_get_family(session.c->remote_addr));
+  pr_netaddr_set_sockaddr(&sess_remote_addr,
+    pr_netaddr_get_sockaddr(session.c->remote_addr));
+
+  memset(sess_remote_name, '\0', sizeof(sess_remote_name));
+  sstrncpy(sess_remote_name, session.c->remote_name, sizeof(sess_remote_name));
+  have_sess_remote_addr = TRUE;
+}



-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. 
Download it for free - -and be entered to win a 42" plasma tv or your very
own Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
ProFTPD Committers Mailing List
proftpd-committers@proftpd.org
https://lists.sourceforge.net/lists/listinfo/proftp-committers
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic