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);