changeset 19741:7b9c6dd8e41d

lib-storage: Deduplicate %{userdb:*} handling for mail_user and mail_storage_service_user
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 10 Feb 2016 19:06:14 +0200
parents 722216cfad93
children b6804ea019a6
files src/lib-storage/mail-storage-service.c src/lib-storage/mail-storage-service.h src/lib-storage/mail-user.c
diffstat 3 files changed, 23 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mail-storage-service.c	Wed Feb 10 18:27:52 2016 +0200
+++ b/src/lib-storage/mail-storage-service.c	Wed Feb 10 19:06:14 2016 +0200
@@ -725,24 +725,31 @@
 	i_set_failure_prefix("%s", ctx->default_log_prefix);
 }
 
+const char *mail_storage_service_fields_var_expand(const char *data,
+						   const char *const *fields)
+{
+	const char *field_name = data;
+	unsigned int i, field_name_len;
+
+	if (fields == NULL)
+		return NULL;
+
+	field_name_len = strlen(field_name);
+	for (i = 0; fields[i] != NULL; i++) {
+		if (strncmp(fields[i], field_name, field_name_len) == 0 &&
+		    fields[i][field_name_len] == '=')
+			return fields[i] + field_name_len+1;
+	}
+	return NULL;
+}
+
 static const char *
 mail_storage_service_input_var_userdb(const char *data, void *context)
 {
 	struct mail_storage_service_user *user = context;
-	const char *field_name = data;
-	unsigned int i, field_name_len;
 
-	if (user == NULL || user->input.userdb_fields == NULL)
-		return NULL;
-
-	field_name_len = strlen(field_name);
-	for (i = 0; user->input.userdb_fields[i] != NULL; i++) {
-		if (strncmp(user->input.userdb_fields[i], field_name,
-			    field_name_len) == 0 &&
-		    user->input.userdb_fields[i][field_name_len] == '=')
-			return user->input.userdb_fields[i] + field_name_len+1;
-	}
-	return NULL;
+	return mail_storage_service_fields_var_expand(data,
+			user == NULL ? NULL : user->input.userdb_fields);
 }
 
 static void
--- a/src/lib-storage/mail-storage-service.h	Wed Feb 10 18:27:52 2016 +0200
+++ b/src/lib-storage/mail-storage-service.h	Wed Feb 10 19:06:14 2016 +0200
@@ -139,6 +139,8 @@
 const struct var_expand_table *
 mail_storage_service_get_var_expand_table(struct mail_storage_service_ctx *ctx,
 					  struct mail_storage_service_input *input);
+const char *mail_storage_service_fields_var_expand(const char *data,
+						   const char *const *fields);
 /* Return the settings pointed to by set_root parameter in _init() */
 void *mail_storage_service_get_settings(struct master_service *service);
 
--- a/src/lib-storage/mail-user.c	Wed Feb 10 18:27:52 2016 +0200
+++ b/src/lib-storage/mail-user.c	Wed Feb 10 19:06:14 2016 +0200
@@ -268,20 +268,8 @@
 mail_user_var_expand_func_userdb(const char *data, void *context)
 {
 	struct mail_user *user = context;
-	const char *field_name = data;
-	unsigned int i, field_name_len;
 
-	if (user->userdb_fields == NULL)
-		return NULL;
-
-	field_name_len = strlen(field_name);
-	for (i = 0; user->userdb_fields[i] != NULL; i++) {
-		if (strncmp(user->userdb_fields[i], field_name,
-			    field_name_len) == 0 &&
-		    user->userdb_fields[i][field_name_len] == '=')
-			return user->userdb_fields[i] + field_name_len+1;
-	}
-	return NULL;
+	return mail_storage_service_fields_var_expand(data, user->userdb_fields);
 }
 
 void mail_user_set_home(struct mail_user *user, const char *home)