libidav/config.c

changeset 827
d9928f11970f
parent 826
b6e9fd3f1951
--- 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) {

mercurial