commit 3bfc3c5063b5c5a02d77c97dd43461e7e19ca0f7
Author: Oswald Buddenhagen <o...@users.sf.net>
Date:   Fri Jun 3 18:06:50 2022 +0200

    forbid nesting maildir Path under Inbox again
    
    it was never documented, and i can't really think of a case where
    someone would actually want it, as the MUA side of things would be just
    weird. additionally, the case of Path being Inbox+'/' did not work
    anyway. will reconsider and fix the latter case if someone complains.
    
    reverts 98bd2b11.

 src/drv_maildir.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/drv_maildir.c b/src/drv_maildir.c
index 0f94519c..8327d233 100644
--- a/src/drv_maildir.c
+++ b/src/drv_maildir.c
@@ -365,7 +365,7 @@ maildir_list_maildirpp( maildir_store_t *ctx, int flags, 
const char *inbox )
 
 static int
 maildir_list_recurse( maildir_store_t *ctx, int isBox, int flags,
-                      const char *inbox, uint inboxLen, const char *basePath, 
uint basePathLen,
+                      const char *inbox, uint inboxLen,
                       char *path, int pathLen, char *name, int nameLen )
 {
        DIR *dir;
@@ -402,8 +402,6 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, int 
flags,
                pl += pathLen;
                if (inbox && equals( path, pl, inbox, inboxLen )) {
                        // Inbox nested into Path.
-               } else if (basePath && equals( path, pl, basePath, basePathLen 
)) {
-                       // Path nested into Inbox.
                } else {
                        if (style == SUB_LEGACY) {
                                if (*ent == '.') {
@@ -431,7 +429,7 @@ maildir_list_recurse( maildir_store_t *ctx, int isBox, int 
flags,
                                add_string_list( &ctx->boxes, name );
                        path[pl] = 0;
                        name[nl++] = '/';
-                       if (maildir_list_recurse( ctx, isBox + 1, flags, inbox, 
inboxLen, basePath, basePathLen, path, pl, name, nl ) < 0) {
+                       if (maildir_list_recurse( ctx, isBox + 1, flags, inbox, 
inboxLen, path, pl, name, nl ) < 0) {
                                closedir( dir );
                                return -1;
                        }
@@ -451,9 +449,8 @@ maildir_list_inbox( maildir_store_t *ctx, int flags )
        ctx->listed |= LIST_INBOX;
 
        add_string_list( &ctx->boxes, "INBOX" );
-       const char *basePath = ctx->conf->path;
        return maildir_list_recurse(
-               ctx, 1, flags, NULL, 0, basePath, basePath ? strlen( basePath ) 
- 1 : 0,
+               ctx, 1, flags, NULL, 0,
                path, nfsnprintf( path, _POSIX_PATH_MAX, "%s/", 
ctx->conf->inbox ),
                name, nfsnprintf( name, _POSIX_PATH_MAX, "INBOX/" ) );
 }
@@ -471,7 +468,7 @@ maildir_list_path( maildir_store_t *ctx, int flags )
                return -1;
        const char *inbox = ctx->conf->inbox;
        return maildir_list_recurse(
-               ctx, 0, flags, inbox, strlen( inbox ), NULL, 0,
+               ctx, 0, flags, inbox, strlen( inbox ),
                path, nfsnprintf( path, _POSIX_PATH_MAX, "%s", ctx->conf->path 
),
                name, 0 );
 }
@@ -1908,9 +1905,17 @@ maildir_parse_store( conffile_t *cfg, store_conf_t 
**storep )
        }
        if (!store->inbox)
                store->inbox = expand_strdup( "~/Maildir", NULL );
-       if (store->sub_style == SUB_MAILDIRPP && store->path) {
-               error( "Maildir store '%s': Setting Path is incompatible with 
'SubFolders Maildir++'\n", store->name );
-               cfg->err = 1;
+       if (store->path) {
+               if (store->sub_style == SUB_MAILDIRPP) {
+                       error( "Maildir store '%s': Setting Path is 
incompatible with 'SubFolders Maildir++'\n", store->name );
+                       cfg->err = 1;
+               } else {
+                       uint inboxLen = strlen( store->inbox );
+                       if (starts_with( store->path, -1, store->inbox, 
inboxLen ) && store->path[inboxLen] == '/') {
+                               error( "Maildir store '%s': Path cannot be 
nested under Inbox\n", store->name );
+                               cfg->err = 1;
+                       }
+               }
        }
        nfasprintf( &store->info_prefix, "%c2,", store->info_delimiter );
        nfasprintf( &store->info_stop, "%c,", store->info_delimiter );


_______________________________________________
isync-devel mailing list
isync-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to