}
static char *
-vpopmail_password_lookup(struct auth_request *auth_request, bool cleartext,
+vpopmail_password_lookup(struct auth_request *auth_request, bool *cleartext,
enum passdb_result *result_r)
{
char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT];
password = NULL;
*result_r = PASSDB_RESULT_USER_DISABLED;
} else {
- if (vpw->pw_clear_passwd != NULL)
+ if (vpw->pw_clear_passwd != NULL) {
password = t_strdup_noconst(vpw->pw_clear_passwd);
- else if (!cleartext)
+ *cleartext = TRUE;
+ } else if (!*cleartext)
password = t_strdup_noconst(vpw->pw_passwd);
else
password = NULL;
{
enum passdb_result result;
char *password;
+ bool cleartext = TRUE;
- password = vpopmail_password_lookup(request, TRUE, &result);
+ password = vpopmail_password_lookup(request, &cleartext, &result);
if (password == NULL) {
callback(result, NULL, 0, request);
return;
enum passdb_result result;
const char *scheme, *tmp_pass;
char *crypted_pass;
+ bool cleartext;
int ret;
- crypted_pass = vpopmail_password_lookup(request, FALSE, &result);
+ crypted_pass = vpopmail_password_lookup(request, &cleartext, &result);
if (crypted_pass == NULL) {
callback(result, request);
return;
}
-
tmp_pass = crypted_pass;
- scheme = password_get_scheme(&tmp_pass);
- if (scheme == NULL)
- scheme = request->passdb->passdb->default_pass_scheme;
+
+ if (cleartext)
+ scheme = "CLEARTEXT";
+ else {
+ scheme = password_get_scheme(&tmp_pass);
+ if (scheme == NULL)
+ scheme = request->passdb->passdb->default_pass_scheme;
+ }
ret = auth_request_password_verify(request, password,
tmp_pass, scheme, "vpopmail");