libidav/config.c

changeset 836
7842c7665cd0
parent 827
d9928f11970f
child 837
b5984d5cc40c
equal deleted inserted replaced
835:b4285fb0f582 836:7842c7665cd0
77 DavCfgNamespace **list_end, 77 DavCfgNamespace **list_end,
78 xmlNode *node); 78 xmlNode *node);
79 static int load_secretstore(DavConfig *config, xmlNode *node); 79 static int load_secretstore(DavConfig *config, xmlNode *node);
80 80
81 81
82 int dav_cfg_string_set_value(DavConfig *config, CfgString *str, xmlNode *node) { 82 int dav_cfg_string_set_node_value(DavConfig *config, CfgString *str, xmlNode *node) {
83 str->node = node; 83 str->node = node;
84 char *value = util_xml_get_text(node); 84 char *value = util_xml_get_text(node);
85 if(value) { 85 if(value) {
86 str->value = cx_strdup_a(config->mp->allocator, cx_str(value)); 86 str->value = cx_strdup_a(config->mp->allocator, cx_str(value));
87 return 0; 87 return 0;
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) {
722 node = node->children; 783 node = node->children;
723 int error = 0; 784 int error = 0;
724 while(node) { 785 while(node) {
725 if(node->type == XML_ELEMENT_NODE) { 786 if(node->type == XML_ELEMENT_NODE) {
726 if(xstreq(node->name, "unlock-command")) { 787 if(xstreq(node->name, "unlock-command")) {
727 dav_cfg_string_set_value(config, &config->secretstore->unlock_cmd, node); 788 dav_cfg_string_set_node_value(config, &config->secretstore->unlock_cmd, node);
728 } else if(xstreq(node->name, "lock-command")) { 789 } else if(xstreq(node->name, "lock-command")) {
729 dav_cfg_string_set_value(config, &config->secretstore->lock_cmd, node); 790 dav_cfg_string_set_node_value(config, &config->secretstore->lock_cmd, node);
730 } 791 }
731 } 792 }
732 node = node->next; 793 node = node->next;
733 } 794 }
734 795

mercurial