]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Deduplicate %{userdb:*} handling for mail_user and mail_storage_service_user
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 10 Feb 2016 17:06:14 +0000 (19:06 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 10 Feb 2016 17:06:14 +0000 (19:06 +0200)
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage-service.h
src/lib-storage/mail-user.c

index c3fdd17097382c857b563ffcdd0c95956887db3c..e64768f6bbf6fcd1309ce4650407e8f476625b3b 100644 (file)
@@ -725,26 +725,33 @@ void mail_storage_service_io_deactivate(struct mail_storage_service_ctx *ctx)
        i_set_failure_prefix("%s", ctx->default_log_prefix);
 }
 
-static const char *
-mail_storage_service_input_var_userdb(const char *data, void *context)
+const char *mail_storage_service_fields_var_expand(const char *data,
+                                                  const char *const *fields)
 {
-       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)
+       if (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;
+       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;
+
+       return mail_storage_service_fields_var_expand(data,
+                       user == NULL ? NULL : user->input.userdb_fields);
+}
+
 static void
 mail_storage_service_var_expand(struct mail_storage_service_ctx *ctx,
                                string_t *str, const char *format,
index 118e8fec1917809a2fb6b98276b768527addc8de..2baf9ba3e14a72d85713ee1167e8e671b7545b1f 100644 (file)
@@ -139,6 +139,8 @@ mail_storage_service_user_get_service_ctx(struct mail_storage_service_user *user
 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);
 
index 3db82d3104afd7e4eb21c56c3ac492c36b405b37..ca7cd96b68f6ee053c618ff66098862251e98404 100644 (file)
@@ -268,20 +268,8 @@ static const char *
 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)