From 0035609ce58a6d83cc8623cb1573697962df3033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Fri, 11 Oct 2024 18:16:45 +0300 Subject: [PATCH] PROPPATCH: use right namespace prefix in response (#5082) * PROPPATCH: use right namespace prefix in response * http_dav.c: stylistic changes --------- Co-authored-by: Ken Murchison --- imap/http_dav.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/imap/http_dav.c b/imap/http_dav.c index 8c783d5c97..f67eaa82e3 100644 --- a/imap/http_dav.c +++ b/imap/http_dav.c @@ -113,6 +113,9 @@ static const struct dav_namespace_t { { XML_NS_SYSFLAG, "SF" }, }; +#define NUM_KNOWN_NAMESPACES \ + (sizeof(known_namespaces) / sizeof(struct dav_namespace_t)) + static const struct match_type_t dav_match_types[] = { { "contains", MATCH_TYPE_CONTAINS }, { "equals", MATCH_TYPE_EQUALS }, @@ -3702,6 +3705,7 @@ static int do_proppatch(struct proppatch_ctx *pctx, xmlNodePtr instr) entry++); if (entry->name) { + prop->ns = pctx->ns[entry->ns]; int rights = httpd_myrights(httpd_authstate, pctx->txn->req_tgt.mbentry); if (!entry->put) { @@ -3738,7 +3742,14 @@ static int do_proppatch(struct proppatch_ctx *pctx, xmlNodePtr instr) } else if (pctx->txn->req_tgt.namespace->id != URL_NS_PRINCIPAL) { /* Write "dead" property */ - proppatch_todb(prop, set, pctx, propstat, NULL); + for (size_t i = 0; i < NUM_KNOWN_NAMESPACES; i++) { + if (!strcmp((const char *) prop->ns->href, + known_namespaces[i].href)) { + prop->ns = pctx->ns[i]; + break; + } + } + proppatch_todb_internal(prop, set, pctx, propstat, NULL, 1); } } }