oops.. here is the attachment
diff -NurpP --minimal courier-authlib-0.56/authdaemon.c 
courier-authlib-0.56-hack.v02/authdaemon.c
--- courier-authlib-0.56/authdaemon.c   2004-11-21 04:14:58.000000000 +0100
+++ courier-authlib-0.56-hack.v02/authdaemon.c  2005-07-23 08:21:33.000000000 
+0200
@@ -42,9 +42,12 @@ int auth_generic(const char *service,
        char    tbuf[NUMBUFSIZE];
        size_t  l=strlen(service)+strlen(authtype)+strlen(authdata)+1;
        char    *n=libmail_str_size_t(l, tbuf);
-       char    *buf=malloc(strlen(n)+l+20);
+       int     nint = atoi(n) + strlen(getenv("TCPREMOTEIP")) + 1;
+       char    *buf;
        int     rc;
 
+       sprintf(n, "%i", nint);
+       buf = malloc(strlen(n)+l+40);
        courier_authdebug_login_init();
 
        if (!buf)
@@ -53,6 +56,7 @@ int auth_generic(const char *service,
        strcat(strcat(strcpy(buf, "AUTH "), n), "\n");
        strcat(strcat(buf, service), "\n");
        strcat(strcat(buf, authtype), "\n");
+       strcat(strcat(buf, getenv("TCPREMOTEIP")), "\n");
        strcat(buf, authdata);
 
        rc=authdaemondo(buf, callback_func, callback_arg);
diff -NurpP --minimal courier-authlib-0.56/authdaemond.c 
courier-authlib-0.56-hack.v02/authdaemond.c
--- courier-authlib-0.56/authdaemond.c  2005-02-20 05:41:20.000000000 +0100
+++ courier-authlib-0.56-hack.v02/authdaemond.c 2005-07-23 08:24:13.000000000 
+0200
@@ -705,6 +705,8 @@ static void auth(int fd, char *p)
 {
        char *service;
        char *authtype;
+       char *rip;
+       char *env_buf;
        char    *pp;
        struct authstaticinfolist *l;
 
@@ -714,6 +716,14 @@ static void auth(int fd, char *p)
        authtype=p;
        if ((p=strchr(p, '\n')) == 0)   return;
        *p++=0;
+       rip=p;
+       if ((p=strchr(p, '\n')) == 0)   return;
+       *p++=0;
+
+       /* now that we have the remote ip, set the environment variable */
+       env_buf = malloc(sizeof("TCPREMOTEIP=")+strlen(rip)+1);
+       sprintf(env_buf,"TCPREMOTEIP=%s", rip);
+       putenv(env_buf);
 
        pp=malloc(strlen(p)+1);
        if (!pp)
@@ -722,6 +732,8 @@ static void auth(int fd, char *p)
                return;
        }
 
+       pp = strcpy(pp, p);
+
        DPRINTF("received auth request, service=%s, authtype=%s", service, 
authtype);
        for (l=modulelist; l; l=l->next)
        {
@@ -738,6 +750,7 @@ static void auth(int fd, char *p)
                if (rc == 0)
                {
                        free(pp);
+                       free(env_buf);
                        return;
                }
 
@@ -745,6 +758,7 @@ static void auth(int fd, char *p)
                {
                        DPRINTF("%s: TEMPFAIL - no more modules will be tried", 
modname);
                        free(pp);
+                       free(env_buf);
                        return; /* Temporary error */
                }
                DPRINTF("%s: REJECT - try next module", modname);
@@ -752,6 +766,7 @@ static void auth(int fd, char *p)
        DPRINTF("FAIL, all modules rejected");
        writeauth(fd, "FAIL\n", 5);
        free(pp);
+       free(env_buf);
 }
 
 static void idlefunc()
diff -NurpP --minimal courier-authlib-0.56/authmysqllib.c 
courier-authlib-0.56-hack.v02/authmysqllib.c
--- courier-authlib-0.56/authmysqllib.c 2005-02-20 05:41:20.000000000 +0100
+++ courier-authlib-0.56-hack.v02/authmysqllib.c        2005-07-23 
08:37:51.000000000 +0200
@@ -40,6 +40,19 @@ struct var_data {                    
 /* [EMAIL PROTECTED] */
 typedef int (*parsefunc)(const char *, size_t, void *);
 
+char *ip6to4(char * ip6) {
+       char *ip4;
+
+       ip4=strrchr(ip6, ':');
+
+       if(ip4 != NULL) {
+               return ip4+1;
+       }
+
+       /* Probably an ipv4 */
+       return ip6;
+}
+
 static const char *read_env(const char *env)
 {
 static char *mysqlauth=0;
@@ -630,6 +643,8 @@ int         num_fields;
 char           *endp;
 
 const char     *select_clause; /* [EMAIL PROTECTED] */
+const char     *post_query_last_read = NULL,
+               *post_query_pop_before_smtp = NULL;
 
 static const char query[]=
        "SELECT %s, %s, %s, %s, %s, %s, %s, %s, %s, %s FROM %s WHERE %s = \"";
@@ -639,6 +654,9 @@ static const char query[]=
        initui();
 
        select_clause=read_env("MYSQL_SELECT_CLAUSE");
+       post_query_last_read=read_env("MYSQL_QUERY_LASTREAD");
+       post_query_pop_before_smtp=read_env("MYSQL_QUERY_POPB4SMTP");
+
        defdomain=read_env("DEFAULT_DOMAIN");   
        if (!defdomain) defdomain="";
        
@@ -837,6 +855,24 @@ static const char query[]=
                                ui.fullname=strdup(row[8]);
                        if (num_fields > 9 && row[9] && row[9][0])
                                ui.options=strdup(row[9]);
+
+                       /* POST AUTH SQL: update the 'mail_last_read' table */
+                       if (post_query_last_read) {
+                               querybuf = malloc(strlen(post_query_last_read) 
+ strlen(username));
+                               sprintf(querybuf, post_query_last_read, 
username);
+                               DPRINTF("SQL: mail last read: %s", querybuf);
+                               mysql_query(mysql, querybuf);
+                               free(querybuf);
+                       }
+                       
+                       /* POST AUTH SQL: update the 'mail_pop_before_smtp' 
table */
+                       if (post_query_pop_before_smtp) {
+                               querybuf = 
malloc(strlen(post_query_pop_before_smtp) + strlen(get_localpart(username)) + 
strlen(get_domain(username, NULL)) + 20);
+                               sprintf(querybuf, post_query_pop_before_smtp, 
ip6to4(getenv("TCPREMOTEIP")), get_localpart(username), get_domain(username, 
NULL));
+                               DPRINTF("SQL: IMAP before SMTP: %s", querybuf);
+                               mysql_query(mysql, querybuf);
+                               free(querybuf);
+                       }
                }
                else
                {
diff -NurpP --minimal courier-authlib-0.56/authmysqlrc 
courier-authlib-0.56-hack.v02/authmysqlrc
--- courier-authlib-0.56/authmysqlrc    2004-11-14 03:58:16.000000000 +0100
+++ courier-authlib-0.56-hack.v02/authmysqlrc   2005-07-23 06:50:53.000000000 
+0200
@@ -264,3 +264,13 @@ MYSQL_NAME_FIELD   name
 #                      WHERE   local_part='$(local_part)'              \
 #                      AND     domain_name='$(domain)'
 #
+
+##NAME: MYSQL_QUERY_LASTREAD:0
+# 
+# MYSQL_QUERY_LASTREAD    REPLACE INTO mail_last_read (address, tstamp) VALUES 
('%s', NULL)
+
+##NAME: MYSQL_QUERY_POPB4SMTP:0
+# 
+# MYSQL_QUERY_POPB4SMTP   REPLACE INTO mail_pop_before_smtp (ip, expires, 
email_local, email_domain) VALUES (INET_ATON('%s'), NOW() + 1800, '%s', '%s')
+
+

Reply via email to