Mutt died on me.  Here's the patch.

BTW, If you're a FreeBSD user, just place this in
/usr/ports/mail/courier-imap/files and the Ports system will include it.

-- 

-----------------------------------------------------------------------
Jeremy Shaffner                           | This space for rent.
[EMAIL PROTECTED]                       | $ grep happiness life
PGP KeyID 0x594A8158 or finger above addy | FreeBSD: The Power to Serve
"Obscurity is the refuge of incompetence." - R.A. Heinlein, SIASL
--- authlib/authmysql.c.orig    Sat Jun 23 18:42:05 2001
+++ authlib/authmysql.c Mon Sep 30 03:58:17 2002
@@ -35,7 +35,7 @@
                return (0);
        }
 
-       authinfo=auth_mysql_getuserinfo(user);
+       authinfo=auth_mysql_getuserinfo(user, pass);
 
        if (!callback_func)
                auth_mysql_cleanup();
@@ -141,7 +141,7 @@
 {
 struct authmysqluserinfo *authinfo;
 
-       authinfo=auth_mysql_getuserinfo(user);
+       authinfo=auth_mysql_getuserinfo(user, pass);
 
        if (!authinfo)
        {
@@ -171,7 +171,7 @@
                return (-1);
        }
 
-       if (auth_mysql_setpass(user, newpass))
+       if (auth_mysql_setpass(user, newpass, pass))
        {
                errno=EPERM;
                return (-1);
--- authlib/authmysql.h.orig    Sun Aug  5 22:12:39 2001
+++ authlib/authmysql.h Mon Sep 30 03:58:17 2002
@@ -20,10 +20,10 @@
        gid_t gid;
        } ;
 
-extern struct authmysqluserinfo *auth_mysql_getuserinfo(const char *);
+extern struct authmysqluserinfo *auth_mysql_getuserinfo(const char *, const char *);
 extern void auth_mysql_cleanup();
 
-extern int auth_mysql_setpass(const char *, const char *);
+extern int auth_mysql_setpass(const char *, const char *, const char *);
 
 struct authinfo;
 
--- authlib/authmysqllib.c.orig Mon Sep 30 03:51:05 2002
+++ authlib/authmysqllib.c      Mon Sep 30 03:58:17 2002
@@ -531,11 +531,12 @@
 
 /* [EMAIL PROTECTED] */
 static char *parse_select_clause (const char *clause, const char *username,
-                                 const char *defdomain)
+                                 const char *passwd, const char *defdomain)
 {
 static struct var_data vd[]={
            {"local_part",      NULL,   sizeof("local_part"),   0},
            {"domain",          NULL,   sizeof("domain"),       0},
+            {"authpass",       NULL,   sizeof("authpass"),   0},
            {NULL,              NULL,   0,                      0}};
 
        if (clause == NULL || *clause == '\0' ||
@@ -544,7 +545,8 @@
        
        vd[0].value     = get_localpart (username);
        vd[1].value     = get_domain (username, defdomain);
-       if (!vd[0].value || !vd[1].value)
+    vd[2].value = passwd;
+       if (!vd[0].value || !vd[1].value || !vd[2].value)
                return NULL;
        
        return (parse_string (clause, vd));
@@ -552,14 +554,15 @@
 
 /* [EMAIL PROTECTED] */
 static char *parse_chpass_clause (const char *clause, const char *username,
-                                 const char *defdomain, const char *newpass,
-                                 const char *newpass_crypt)
+                                 const char *passwd, const char *defdomain, 
+                                 const char *newpass, const char *newpass_crypt)
 {
 static struct var_data vd[]={
            {"local_part",      NULL,   sizeof("local_part"),           0},
            {"domain",          NULL,   sizeof("domain"),               0},
            {"newpass",         NULL,   sizeof("newpass"),              0},
            {"newpass_crypt",   NULL,   sizeof("newpass_crypt"),        0},
+        {"authpass",    NULL,   sizeof("authpass"),     0},
            {NULL,              NULL,   0,                              0}};
 
        if (clause == NULL || *clause == '\0'           ||
@@ -571,14 +574,15 @@
        vd[1].value     = get_domain (username, defdomain);
        vd[2].value     = validate_password (newpass);
        vd[3].value     = validate_password (newpass_crypt);
+       vd[4].value = passwd;
        
        if (!vd[0].value || !vd[1].value ||
-           !vd[2].value || !vd[3].value)       return NULL;
+           !vd[2].value || !vd[3].value || !vd[4].value)       return NULL;
 
        return (parse_string (clause, vd));
 }
 
-struct authmysqluserinfo *auth_mysql_getuserinfo(const char *username)
+struct authmysqluserinfo *auth_mysql_getuserinfo(const char *username, const char 
+*userpass)
 {
 const char *user_table =NULL;
 const char *defdomain  =NULL;
@@ -704,7 +708,7 @@
        else
        {
                /* [EMAIL PROTECTED] */
-               querybuf=parse_select_clause (select_clause, username, defdomain);
+               querybuf=parse_select_clause (select_clause, username, userpass, 
+defdomain);
                if (!querybuf) return 0;
        }
 
@@ -772,7 +776,7 @@
        return (&ui);
 }
 
-int auth_mysql_setpass(const char *user, const char *pass)
+int auth_mysql_setpass(const char *user, const char *pass, const char *userpass)
 {
        char *newpass_crypt;
        const char *newpass_crypt_ptr;
@@ -839,6 +843,7 @@
        {
                sql_buf=parse_chpass_clause(chpass_clause,
                                            user,
+                                           userpass,
                                            defdomain,
                                            pass,
                                            newpass_crypt_ptr);
--- authlib/preauthmysql.c.orig Mon Sep 30 03:51:19 2002
+++ authlib/preauthmysql.c      Mon Sep 30 03:58:17 2002
@@ -29,7 +29,7 @@
 struct authmysqluserinfo *authinfo;
 struct authinfo        aa;
 
-       authinfo=auth_mysql_getuserinfo(user);
+       authinfo=auth_mysql_getuserinfo(user, "");
 
        if (!authinfo)          /* Fatal error - such as MySQL being down */
                return (1);

Reply via email to