]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: Avoid problems with trailing '/' in base_dir.
authorTimo Sirainen <tss@iki.fi>
Thu, 25 Mar 2010 15:33:40 +0000 (17:33 +0200)
committerTimo Sirainen <tss@iki.fi>
Thu, 25 Mar 2010 15:33:40 +0000 (17:33 +0200)
--HG--
branch : HEAD

src/config/old-set-parser.c
src/master/master-settings.c

index fa02a3e9097cc7f3f8b135d06fe5dedbda6740cc..224703b6a8f1e1842cb30bc7b5f9abaeca6f20d1 100644 (file)
@@ -59,9 +59,14 @@ old_settings_handle_root(struct config_parser_context *ctx,
                         const char *key, const char *value)
 {
        const char *p;
+       unsigned int len;
 
-       if (strcmp(key, "base_dir") == 0)
+       if (strcmp(key, "base_dir") == 0) {
+               len = strlen(value);
+               if (len > 0 && value[len-1] == '/')
+                       value = t_strndup(value, len-1);
                ctx->old->base_dir = p_strdup(ctx->pool, value);
+       }
        if (strcmp(key, "protocols") == 0) {
                char **protos, **s;
                bool have_imap = FALSE, have_imaps = FALSE;
index 9ce63d9648f40cc4b851868865ff3288ffd566f7..8e497a0ba8008ee1d26a5190255fdfc38342c404 100644 (file)
@@ -348,9 +348,15 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
        struct service_settings *const *services;
        const char *const *strings;
        ARRAY_TYPE(const_string) all_listeners;
-       unsigned int i, j, count, process_limit;
+       unsigned int i, j, count, len, process_limit;
        unsigned int auth_client_limit, max_auth_client_processes;
 
+       len = strlen(set->base_dir);
+       if (len > 0 && set->base_dir[len-1] == '/') {
+               /* drop trailing '/' */
+               set->base_dir = p_strndup(pool, set->base_dir, len - 1);
+       }
+
        if (set->last_valid_uid != 0 &&
            set->first_valid_uid > set->last_valid_uid) {
                *error_r = "first_valid_uid can't be larger than last_valid_uid";