changeset 20499:f5fa391e098a

passdb-static: Support password scheme This allows password argument to provide scheme instead of defaulting to plain. If no scheme is provided, plain is defaulted.
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Tue, 05 Jul 2016 14:41:41 +0300
parents 43c279a779f5
children e67b0284f6d1
files src/auth/passdb-static.c
diffstat 1 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/passdb-static.c	Mon Jul 04 11:57:43 2016 +0300
+++ b/src/auth/passdb-static.c	Tue Jul 05 14:41:41 2016 +0300
@@ -3,6 +3,7 @@
 #include "auth-common.h"
 #include "passdb.h"
 #include "passdb-template.h"
+#include "password-scheme.h"
 
 struct static_passdb_module {
 	struct passdb_module module;
@@ -11,7 +12,7 @@
 };
 
 static enum passdb_result
-static_save_fields(struct auth_request *request, const char **password_r)
+static_save_fields(struct auth_request *request, const char **password_r, const char **scheme_r)
 {
 	struct static_passdb_module *module =
 		(struct static_passdb_module *)request->passdb->passdb;
@@ -28,8 +29,18 @@
 		auth_request_log_info(request, AUTH_SUBSYS_DB,
 			"No password returned (and no nopassword)");
 		*password_r = NULL;
+		*scheme_r = NULL;
 		return PASSDB_RESULT_PASSWORD_MISMATCH;
 	}
+
+	*scheme_r = password_get_scheme(password_r);
+
+	if (*scheme_r == NULL)
+		*scheme_r = STATIC_PASS_SCHEME;
+
+	auth_request_set_field(request, "password",
+			       *password_r, *scheme_r);
+
 	return PASSDB_RESULT_OK;
 }
 
@@ -39,16 +50,18 @@
 {
 	enum passdb_result result;
 	const char *static_password;
+	const char *static_scheme;
+
 	int ret;
 
-	result = static_save_fields(request, &static_password);
+	result = static_save_fields(request, &static_password, &static_scheme);
 	if (result != PASSDB_RESULT_OK) {
 		callback(result, request);
 		return;
 	}
 
 	ret = auth_request_password_verify(request, password, static_password,
-					   STATIC_PASS_SCHEME, AUTH_SUBSYS_DB);
+					   static_scheme, AUTH_SUBSYS_DB);
 	if (ret <= 0) {
 		callback(PASSDB_RESULT_PASSWORD_MISMATCH, request);
 		return;
@@ -63,10 +76,11 @@
 {
 	enum passdb_result result;
 	const char *static_password;
+	const char *static_scheme;
 
-	result = static_save_fields(request, &static_password);
+	result = static_save_fields(request, &static_password, &static_scheme);
 	passdb_handle_credentials(result, static_password,
-				  STATIC_PASS_SCHEME, callback, request);
+				  static_scheme, callback, request);
 }
 
 static struct passdb_module *