diff -r b6e9fd3f1951 -r d9928f11970f libidav/config.c --- a/libidav/config.c Wed Jul 24 23:45:31 2024 +0200 +++ b/libidav/config.c Fri Sep 13 18:21:04 2024 +0200 @@ -98,15 +98,17 @@ } -DavConfig* dav_config_new(void) { +DavConfig* dav_config_new(xmlDoc *doc) { CxMempool *cfg_mp = cxMempoolCreate(128, NULL); DavConfig *config = cxMalloc(cfg_mp->allocator, sizeof(DavConfig)); memset(config, 0, sizeof(DavConfig)); config->mp = cfg_mp; - xmlDoc *doc = xmlNewDoc(BAD_CAST "1.0"); - xmlNode *root = xmlNewNode(NULL, BAD_CAST "configuration"); - xmlDocSetRootElement(doc, root); + if(!doc) { + doc = xmlNewDoc(BAD_CAST "1.0"); + xmlNode *root = xmlNewNode(NULL, BAD_CAST "configuration"); + xmlDocSetRootElement(doc, root); + } config->doc = doc; return config; @@ -121,7 +123,7 @@ return NULL; } - DavConfig *config = dav_config_new(); + DavConfig *config = dav_config_new(doc); CxMempool *cfg_mp = config->mp; cxMempoolRegister(cfg_mp, doc, (cx_destructor_func)xmlFreeDoc); @@ -484,10 +486,14 @@ void dav_repository_set_auth(DavConfig *config, DavCfgRepository *repo, cxstring user, cxstring password) { const CxAllocator *a = config->mp->allocator; - repo->user.value = cx_strdup_a(a, user); - char *pwenc = util_base64encode(password.ptr, password.length); - repo->password.value = cx_strdup_a(a, cx_str(pwenc)); - free(pwenc); + if(user.length > 0) { + repo->user.value = cx_strdup_a(a, user); + } + if(password.length > 0) { + char *pwenc = util_base64encode(password.ptr, password.length); + repo->password.value = cx_strdup_a(a, cx_str(pwenc)); + free(pwenc); + } } cxmutstr dav_repository_get_decodedpassword(DavCfgRepository *repo) {