commit f2137b684220e68f19491975b9b500ee080a22f6
Author: Oswald Buddenhagen <[email protected]>
Date:   Sat Jul 27 15:32:49 2013 +0200

    allow the mailbox names in LIST responses to be literals
    
    Lotus Domino seems to send them like that.

 src/drv_imap.c |   30 ++++++++++++++++++++++++------
 1 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/drv_imap.c b/src/drv_imap.c
index c5bb7f3..b3a4bac 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -881,12 +881,13 @@ parse_response_code( imap_store_t *ctx, struct imap_cmd 
*cmd, char *s )
        return RESP_OK;
 }
 
+static int parse_list_rsp_p2( imap_store_t *, list_t *, char * );
+
 static int
 parse_list_rsp( imap_store_t *ctx, list_t *list, char *cmd )
 {
        char *arg;
        list_t *lp;
-       int l;
 
        if (!list) {
                error( "IMAP error: malformed LIST response\n" );
@@ -902,25 +903,42 @@ parse_list_rsp( imap_store_t *ctx, list_t *list, char 
*cmd )
        arg = next_arg( &cmd );
        if (!ctx->delimiter)
                ctx->delimiter = *arg;
-       arg = next_arg( &cmd );
+       return parse_list( ctx, cmd, parse_list_rsp_p2 );
+}
+
+static int
+parse_list_rsp_p2( imap_store_t *ctx, list_t *list, char *cmd )
+{
+       char *arg;
+       int l;
+
+       (void)cmd;
+       if (!is_atom( list )) {
+               error( "IMAP error: malformed LIST response\n" );
+               free_list( list );
+               return LIST_BAD;
+       }
+       arg = list->val;
        if (memcmp( arg, "INBOX", 5 ) || (arg[5] && arg[5] != ctx->delimiter)) {
                l = strlen( ctx->gen.conf->path );
                if (memcmp( arg, ctx->gen.conf->path, l ))
-                       return LIST_OK;
+                       goto skip;
                arg += l;
                if (!memcmp( arg, "INBOX", 5 ) && (!arg[5] || arg[5] == 
ctx->delimiter)) {
                        if (!arg[5])
                                warn( "IMAP warning: ignoring INBOX in %s\n", 
ctx->gen.conf->path );
-                       return LIST_OK;
+                       goto skip;
                }
        }
        if (!memcmp( arg + strlen( arg ) - 5, ".lock", 5 )) /* workaround 
broken servers */
-               return LIST_OK;
+               goto skip;
        if (map_name( arg, ctx->delimiter, '/') < 0) {
                warn( "IMAP warning: ignoring mailbox %s (reserved character 
'/' in name)\n", arg );
-               return LIST_OK;
+               goto skip;
        }
        add_string_list( &ctx->gen.boxes, arg );
+  skip:
+       free_list( list );
        return LIST_OK;
 }
 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to