89 str->value = (cxmutstr){NULL, 0}; |
89 str->value = (cxmutstr){NULL, 0}; |
90 return 1; |
90 return 1; |
91 } |
91 } |
92 } |
92 } |
93 |
93 |
94 void dav_cfg_bool_set_value(DavConfig *config, CfgBool *cbool, xmlNode *node) { |
94 void dav_cfg_bool_set_node_value(DavConfig *config, CfgBool *cbool, xmlNode *node) { |
95 cbool->node = node; |
95 cbool->node = node; |
96 char *value = util_xml_get_text(node); |
96 char *value = util_xml_get_text(node); |
97 cbool->value = util_getboolean(value); |
97 cbool->value = util_getboolean(value); |
|
98 } |
|
99 |
|
100 static void set_xml_content(xmlNode *node, const char *content) { |
|
101 xmlNode *child = node->children; |
|
102 while(child) { |
|
103 xmlNode *next = child->next; |
|
104 xmlUnlinkNode(child); |
|
105 xmlFreeNode(child); |
|
106 child = next; |
|
107 } |
|
108 |
|
109 if(content) { |
|
110 xmlChar *encoded = xmlEncodeSpecialChars(node->doc, (const xmlChar*)content); |
|
111 if(encoded) { |
|
112 xmlNodeSetContent(node, encoded); |
|
113 xmlFree(encoded); |
|
114 } |
|
115 } |
|
116 } |
|
117 |
|
118 void dav_cfg_string_set_value(DavConfig *config, CfgString *str, xmlNode *parent, cxstring new_value, const char *nodename) { |
|
119 if(str->value.ptr) { |
|
120 cxFree(config->mp->allocator, str->value.ptr); |
|
121 } |
|
122 if(new_value.ptr) { |
|
123 str->value = cx_strdup_a(config->mp->allocator, new_value); |
|
124 } else { |
|
125 str->value = cx_mutstrn(NULL, 0); |
|
126 } |
|
127 |
|
128 if(!str->node) { |
|
129 str->node = xmlNewNode(NULL, (const xmlChar*) nodename); |
|
130 xmlAddChild(parent, str->node); |
|
131 } |
|
132 set_xml_content(str->node, new_value.ptr); |
|
133 } |
|
134 |
|
135 void dav_cfg_bool_set_value(DavConfig *config, CfgBool *cbool, xmlNode *parent, DavBool new_value, const char *nodename) { |
|
136 const char *content = new_value ? "true" : "false"; |
|
137 cbool->value = new_value; |
|
138 if(!cbool->node) { |
|
139 cbool->node = xmlNewNode(NULL, (const xmlChar*) nodename); |
|
140 xmlAddChild(parent, cbool->node); |
|
141 } |
|
142 set_xml_content(cbool->node, content); |
|
143 } |
|
144 |
|
145 void dav_cfg_string_remove(CfgString *str) { |
|
146 if(str->node) { |
|
147 xmlUnlinkNode(str->node); |
|
148 xmlFreeNode(str->node); |
|
149 str->node = NULL; |
|
150 } |
|
151 } |
|
152 |
|
153 void dav_cfg_bool_remove(CfgBool *cbool) { |
|
154 if(cbool->node) { |
|
155 xmlUnlinkNode(cbool->node); |
|
156 xmlFreeNode(cbool->node); |
|
157 cbool->node = NULL; |
|
158 } |
98 } |
159 } |
99 |
160 |
100 |
161 |
101 DavConfig* dav_config_new(xmlDoc *doc) { |
162 DavConfig* dav_config_new(xmlDoc *doc) { |
102 CxMempool *cfg_mp = cxMempoolCreate(128, NULL); |
163 CxMempool *cfg_mp = cxMempoolCreate(128, NULL); |
210 print_error(lineno, "missing value for config element: %s\n", key); |
271 print_error(lineno, "missing value for config element: %s\n", key); |
211 return 1; |
272 return 1; |
212 } |
273 } |
213 |
274 |
214 if(xstreq(key, "name")) { |
275 if(xstreq(key, "name")) { |
215 dav_cfg_string_set_value(config, &repo->name, node); |
276 dav_cfg_string_set_node_value(config, &repo->name, node); |
216 } else if(xstreq(key, "url")) { |
277 } else if(xstreq(key, "url")) { |
217 dav_cfg_string_set_value(config, &repo->url, node); |
278 dav_cfg_string_set_node_value(config, &repo->url, node); |
218 } else if(xstreq(key, "user")) { |
279 } else if(xstreq(key, "user")) { |
219 dav_cfg_string_set_value(config, &repo->user, node); |
280 dav_cfg_string_set_node_value(config, &repo->user, node); |
220 } else if(xstreq(key, "password")) { |
281 } else if(xstreq(key, "password")) { |
221 dav_cfg_string_set_value(config, &repo->password, node); |
282 dav_cfg_string_set_node_value(config, &repo->password, node); |
222 } else if(xstreq(key, "stored-user")) { |
283 } else if(xstreq(key, "stored-user")) { |
223 dav_cfg_string_set_value(config, &repo->stored_user, node); |
284 dav_cfg_string_set_node_value(config, &repo->stored_user, node); |
224 } else if(xstreq(key, "default-key")) { |
285 } else if(xstreq(key, "default-key")) { |
225 dav_cfg_string_set_value(config, &repo->default_key, node); |
286 dav_cfg_string_set_node_value(config, &repo->default_key, node); |
226 } else if(xstreq(key, "full-encryption")) { |
287 } else if(xstreq(key, "full-encryption")) { |
227 dav_cfg_bool_set_value(config, &repo->full_encryption, node); |
288 dav_cfg_bool_set_node_value(config, &repo->full_encryption, node); |
228 } else if(xstreq(key, "content-encryption")) { |
289 } else if(xstreq(key, "content-encryption")) { |
229 dav_cfg_bool_set_value(config, &repo->content_encryption, node); |
290 dav_cfg_bool_set_node_value(config, &repo->content_encryption, node); |
230 } else if(xstreq(key, "decrypt-content")) { |
291 } else if(xstreq(key, "decrypt-content")) { |
231 dav_cfg_bool_set_value(config, &repo->decrypt_content, node); |
292 dav_cfg_bool_set_node_value(config, &repo->decrypt_content, node); |
232 } else if(xstreq(key, "decrypt-name")) { |
293 } else if(xstreq(key, "decrypt-name")) { |
233 dav_cfg_bool_set_value(config, &repo->decrypt_name, node); |
294 dav_cfg_bool_set_node_value(config, &repo->decrypt_name, node); |
234 } else if(xstreq(key, "cert")) { |
295 } else if(xstreq(key, "cert")) { |
235 dav_cfg_string_set_value(config, &repo->cert, node); |
296 dav_cfg_string_set_node_value(config, &repo->cert, node); |
236 } else if(xstreq(key, "verification")) { |
297 } else if(xstreq(key, "verification")) { |
237 dav_cfg_bool_set_value(config, &repo->verification, node); |
298 dav_cfg_bool_set_node_value(config, &repo->verification, node); |
238 } else if(xstreq(key, "ssl-version")) { |
299 } else if(xstreq(key, "ssl-version")) { |
239 repo->ssl_version.node = node; |
300 repo->ssl_version.node = node; |
240 if(xstrEQ(value, "TLSv1")) { |
301 if(xstrEQ(value, "TLSv1")) { |
241 repo->ssl_version.value = CURL_SSLVERSION_TLSv1; |
302 repo->ssl_version.value = CURL_SSLVERSION_TLSv1; |
242 } else if(xstrEQ(value, "SSLv2")) { |
303 } else if(xstrEQ(value, "SSLv2")) { |
518 |
579 |
519 int error = 0; |
580 int error = 0; |
520 while(node) { |
581 while(node) { |
521 if(node->type == XML_ELEMENT_NODE) { |
582 if(node->type == XML_ELEMENT_NODE) { |
522 if(xstreq(node->name, "name")) { |
583 if(xstreq(node->name, "name")) { |
523 dav_cfg_string_set_value(config, &key->name, node); |
584 dav_cfg_string_set_node_value(config, &key->name, node); |
524 } else if(xstreq(node->name, "file")) { |
585 } else if(xstreq(node->name, "file")) { |
525 dav_cfg_string_set_value(config, &key->file, node); |
586 dav_cfg_string_set_node_value(config, &key->file, node); |
526 } else if(xstreq(node->name, "type")) { |
587 } else if(xstreq(node->name, "type")) { |
527 const char *value = util_xml_get_text(node); |
588 const char *value = util_xml_get_text(node); |
528 key->type_node = node; |
589 key->type_node = node; |
529 if(!strcmp(value, "aes128")) { |
590 if(!strcmp(value, "aes128")) { |
530 key->type = DAV_KEY_TYPE_AES128; |
591 key->type = DAV_KEY_TYPE_AES128; |
611 int ret = 0; |
672 int ret = 0; |
612 while(node && !ret) { |
673 while(node && !ret) { |
613 if(node->type == XML_ELEMENT_NODE) { |
674 if(node->type == XML_ELEMENT_NODE) { |
614 int reportmissingvalue = 0; |
675 int reportmissingvalue = 0; |
615 if(xstreq(node->name, "url")) { |
676 if(xstreq(node->name, "url")) { |
616 reportmissingvalue = dav_cfg_string_set_value(config, &proxy->url, node); |
677 reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->url, node); |
617 } else if(xstreq(node->name, "user")) { |
678 } else if(xstreq(node->name, "user")) { |
618 reportmissingvalue = dav_cfg_string_set_value(config, &proxy->user, node); |
679 reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->user, node); |
619 } else if(xstreq(node->name, "password")) { |
680 } else if(xstreq(node->name, "password")) { |
620 reportmissingvalue = dav_cfg_string_set_value(config, &proxy->password, node); |
681 reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->password, node); |
621 } else if(xstreq(node->name, "no")) { |
682 } else if(xstreq(node->name, "no")) { |
622 reportmissingvalue = dav_cfg_string_set_value(config, &proxy->noproxy, node); |
683 reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->noproxy, node); |
623 } else { |
684 } else { |
624 proxy->unknown_elements++; |
685 proxy->unknown_elements++; |
625 } |
686 } |
626 |
687 |
627 if (reportmissingvalue) { |
688 if (reportmissingvalue) { |