diff -r ff5826fc6a6c -r 5f05e56cb8e2 src/server/webdav/webdav.c --- a/src/server/webdav/webdav.c Tue Dec 31 16:31:29 2019 +0100 +++ b/src/server/webdav/webdav.c Tue Jan 14 20:05:18 2020 +0100 @@ -214,7 +214,8 @@ WebdavResponse *response = (WebdavResponse*)ms; WebdavOperation *op = webdav_operation_create( - sn->pool, + sn, + rq, dav, requestObjects, response); @@ -268,6 +269,15 @@ ret = REQ_ABORTED; } + // if propfind was successful, send the result to the client + if(ret == REQ_PROCEED && multistatus_send(ms, sn->csd)) { + ret = REQ_ABORTED; + // TODO: log error + } else { + // TODO: log error + // TODO: error response + } + return ret; } @@ -563,6 +573,44 @@ return 0; } +int webdav_property_add_nsdef( + WebdavProperty *property, + pool_handle_t *pool, + const char *prefix, + const char *nsuri) +{ + // because we're using a memory pool, we don't free in case stuff in + // case of an error (OOM) - stuff will be freed by destroyinig the pool + + WebdavNSList *new_def = pool_malloc(pool, sizeof(WebdavNSList)); + if(!new_def) { + return 1; + } + WSNamespace *new_ns = pool_malloc(pool, sizeof(WSNamespace)); + if(!new_ns) { + return 1; + } + ZERO(new_ns, sizeof(WSNamespace)); + + new_ns->prefix = (xmlChar*)pool_strdup(pool, prefix); + new_ns->href = (xmlChar*)pool_strdup(pool, nsuri); + if(!new_ns->prefix || !new_ns->href) { + return 1; + } + + new_def->namespace = new_ns; + new_def->prev = NULL; + new_def->next = NULL; + + if(property->nsdef) { + property->nsdef->prev = new_def; + new_def->next = property->nsdef; + } + property->nsdef = new_def; + + return 0; +} + WebdavVFSProperties webdav_vfs_properties( WebdavPropfindRequest *rq, WSBool removefromlist,