commit ef0e7fdd3e921d612220a830436bb9862bca61ac
parent 03e25db3b8e5e938f1bb1009d747514b1315cae7
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date: Sun, 4 Dec 2016 11:23:47 +0100
accept NAMESPACE responses without hierarchy delimiter
RFC2342 states that the delimiter may be NIL, which some servers
apparently actually make use of.
REFMAIL: CAM0xXk_FQ83CPrd37iQCMKtc1B2P8=u-r5jX0n2WE5Y+3483nQ@mail.gmail.com
Diffstat:
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/drv_imap.c b/src/drv_imap.c
@@ -638,6 +638,12 @@ next_arg( char **ps )
}
static int
+is_opt_atom( list_t *list )
+{
+ return list && list->val && list->val != LIST;
+}
+
+static int
is_atom( list_t *list )
{
return list && list->val && list->val != NIL && list->val != LIST;
@@ -850,7 +856,7 @@ parse_namespace_check( list_t *list )
goto bad;
if (!is_atom( list->child ))
goto bad;
- if (!is_atom( list->child->next ))
+ if (!is_opt_atom( list->child->next ))
goto bad;
/* Namespace response extensions may follow here; we don't care. */
}
@@ -2147,17 +2153,17 @@ static void
imap_open_store_namespace2( imap_store_t *ctx )
{
imap_store_conf_t *cfg = (imap_store_conf_t *)ctx->gen.conf;
- list_t *nsp, *nsp_1st, *nsp_1st_ns, *nsp_1st_dl;
+ list_t *nsp, *nsp_1st;
/* XXX for now assume 1st personal namespace */
if (is_list( (nsp = ctx->ns_personal) ) &&
- is_list( (nsp_1st = nsp->child) ) &&
- is_atom( (nsp_1st_ns = nsp_1st->child) ) &&
- is_atom( (nsp_1st_dl = nsp_1st_ns->next) ))
+ is_list( (nsp_1st = nsp->child) ))
{
+ list_t *nsp_1st_ns = nsp_1st->child;
+ list_t *nsp_1st_dl = nsp_1st_ns->next;
if (!ctx->prefix && cfg->use_namespace)
ctx->prefix = nsp_1st_ns->val;
- if (!ctx->delimiter)
+ if (!ctx->delimiter && is_atom( nsp_1st_dl ))
ctx->delimiter = nfstrdup( nsp_1st_dl->val );
}
imap_open_store_finalize( ctx );