I'm interested in knowing not only what IP the user last auth'd, but also
how they connected.  That gives me more info right from the tables on how a
particular is using the system, and how the system is utilized overall.

 I attached a patch and honestly I haven't even tested yet - just thought
I'd throw it out there..

 - It utilizes a new field 'type' char(10), and puts the text AuthType in
there.  I'm not sure if a table change is handled via README or automated..
 - It also adjusts the vget_lastauth to grab the 'latest' record for that
user from the lastauth table, no matter how they auth'd.
 - The new info is only accessible by direct query.

 Rick


!DSPAM:4cd9a51632711680712101!
diff -u vpopmail-5.4.32-orig/authvchkpw.c vpopmail-5.4.32/authvchkpw.c
--- vpopmail-5.4.32-orig/authvchkpw.c 2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/authvchkpw.c      2010-11-09 12:48:02.908186101 -0600
@@ -157,7 +157,7 @@
 #endif
   if (!(ptr = getenv("TCPERMOTEIP")))
        ptr = "0.0.0.0";
-  vset_lastauth(pw->pw_name, domain, ptr);
+  vset_lastauth(pw->pw_name, domain, ptr, ServiceType );
 #ifdef MIN_LOGIN_INTERVAL
   if(( vget_lastauth(vpw,TheDomain ) - last_time ) < MIN_LOGIN_INTERVAL ) {
     vchkpw_exit(1);
diff -u vpopmail-5.4.32-orig/vauth.c vpopmail-5.4.32/vauth.c
--- vpopmail-5.4.32-orig/vauth.c      2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/vauth.c     2010-11-09 13:21:04.353502283 -0600
@@ -1274,15 +1274,15 @@

 /************************************************************************/
 #ifdef ENABLE_AUTH_LOGGING
-int vset_lastauth(char *user, char *domain, char *remoteip )
+int vset_lastauth(char *user, char *domain, char *remoteip , char *authtype )
 {
  int err;

     if ( (err=vauth_open_update()) != 0 ) return(err);
-
+
     qnprintf( SqlBufUpdate, SQL_BUF_SIZE,
 "replace into lastauth set user='%s', domain='%s', \
-remote_ip='%s', timestamp=%lu", user, domain, remoteip, time(NULL));
+remote_ip='%s', timestamp=%lu, type='%s'", user, domain, remoteip, time(NULL), 
authtype);
     if (mysql_query(&mysql_update,SqlBufUpdate)) {
         vcreate_lastauth_table();
         if (mysql_query(&mysql_update,SqlBufUpdate)) {
@@ -1302,7 +1302,7 @@
     if ( (err=vauth_open_read()) != 0 ) return(err);

     qnprintf( SqlBufRead,  SQL_BUF_SIZE,
-    "select timestamp from lastauth where user='%s' and domain='%s'",
+    "select timestamp from lastauth where user='%s' and domain='%s' order by 
timestamp LIMIT 1",
         pw->pw_name, domain);
     if (mysql_query(&mysql_read,SqlBufRead)) {
         vcreate_lastauth_table();
diff -u vpopmail-5.4.32-orig/vauth.h vpopmail-5.4.32/vauth.h
--- vpopmail-5.4.32-orig/vauth.h      2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/vauth.h     2010-11-09 12:46:01.627550711 -0600
@@ -68,7 +68,7 @@
 void vclose();
 void vclose1();

-int vset_lastauth( char *user, char *domain, char *remoteip);
+int vset_lastauth( char *user, char *domain, char *remoteip, char *authtype);
 time_t vget_lastauth( struct vqpasswd *pw, char *domain);
 char *vget_lastauthip( struct vqpasswd *pw, char *domain);

diff -u vpopmail-5.4.32-orig/vchkpw.c vpopmail-5.4.32/vchkpw.c
--- vpopmail-5.4.32-orig/vchkpw.c     2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/vchkpw.c    2010-11-09 13:16:33.795496514 -0600
@@ -579,7 +579,7 @@
 #ifdef MIN_LOGIN_INTERVAL
   last_time = vget_lastauth(vpw, TheDomain );
 #endif
-  vset_lastauth(TheUser,TheDomain,IpAddr);
+  vset_lastauth(TheUser,TheDomain,IpAddr, AuthType);
 #ifdef MIN_LOGIN_INTERVAL
   if(( vget_lastauth(vpw,TheDomain ) - last_time ) < MIN_LOGIN_INTERVAL ) {
     vchkpw_exit(1);
diff -u vpopmail-5.4.32-orig/vmysql.c vpopmail-5.4.32/vmysql.c
--- vpopmail-5.4.32-orig/vmysql.c     2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/vmysql.c    2010-11-09 13:21:04.353502283 -0600
@@ -1274,15 +1274,15 @@

 /************************************************************************/
 #ifdef ENABLE_AUTH_LOGGING
-int vset_lastauth(char *user, char *domain, char *remoteip )
+int vset_lastauth(char *user, char *domain, char *remoteip , char *authtype )
 {
  int err;

     if ( (err=vauth_open_update()) != 0 ) return(err);
-
+
     qnprintf( SqlBufUpdate, SQL_BUF_SIZE,
 "replace into lastauth set user='%s', domain='%s', \
-remote_ip='%s', timestamp=%lu", user, domain, remoteip, time(NULL));
+remote_ip='%s', timestamp=%lu, type='%s'", user, domain, remoteip, time(NULL), 
authtype);
     if (mysql_query(&mysql_update,SqlBufUpdate)) {
         vcreate_lastauth_table();
         if (mysql_query(&mysql_update,SqlBufUpdate)) {
@@ -1302,7 +1302,7 @@
     if ( (err=vauth_open_read()) != 0 ) return(err);

     qnprintf( SqlBufRead,  SQL_BUF_SIZE,
-    "select timestamp from lastauth where user='%s' and domain='%s'",
+    "select timestamp from lastauth where user='%s' and domain='%s' order by 
timestamp LIMIT 1",
         pw->pw_name, domain);
     if (mysql_query(&mysql_read,SqlBufRead)) {
         vcreate_lastauth_table();
diff -u vpopmail-5.4.32-orig/vmysql.h vpopmail-5.4.32/vmysql.h
--- vpopmail-5.4.32-orig/vmysql.h     2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/vmysql.h    2010-11-09 13:13:15.877302985 -0600
@@ -111,6 +111,7 @@
 domain char(96) NOT NULL,\
 remote_ip char(18) not null,  \
 timestamp bigint default 0 NOT NULL, \
+type char(10) NOT NULL,\
 primary key (user, domain)"

 char *vauth_munch_domain(char *);
diff -u vpopmail-5.4.32-orig/vpopmail.c vpopmail-5.4.32/vpopmail.c
--- vpopmail-5.4.32-orig/vpopmail.c   2010-11-08 09:02:52.000000000 -0600
+++ vpopmail-5.4.32/vpopmail.c  2010-11-09 12:51:22.658966976 -0600
@@ -732,7 +732,7 @@
 #endif

 #ifdef ENABLE_AUTH_LOGGING
-  if (vset_lastauth(username,domain,NULL_REMOTE_IP) !=0) {
+  if (vset_lastauth(username,domain,NULL_REMOTE_IP, "") !=0) {
     /* should we back out of all the work we have done so far? */
     chdir(calling_dir);
     fprintf (stderr, "Failed to create create lastauth entry\n");

Reply via email to