Thu, 28 Nov 2024 17:53:13 +0100
revert property set/remove list changes
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2023 Olaf Wintermann. All rights reserved. |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include "config.h" |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <stdio.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | #include <stdlib.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | #include <string.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | #include <sys/types.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | #include <cx/hash_map.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | #include <errno.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | #include <libxml/tree.h> |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | #include "utils.h" |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | #define xstreq(a,b) xmlStrEqual(BAD_CAST a, BAD_CAST b) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | #define xstrEQ(a,b) !xmlStrcasecmp(BAD_CAST a, BAD_CAST b) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | #define print_error(lineno, ...) \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | do {\ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | fprintf(stderr, "Error (config.xml line %u): ", lineno); \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | fprintf(stderr, __VA_ARGS__); \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | fprintf(stderr, "Abort.\n"); \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | } while(0); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | #define print_warning(lineno, ...) \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | do {\ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | fprintf(stderr, "Warning (config.xml line %u): ", lineno); \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | fprintf(stderr, __VA_ARGS__); \ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | } while(0); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | #ifdef _WIN32 |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | #define ENV_HOME getenv("USERPROFILE") |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | #else |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | #define ENV_HOME getenv("HOME") |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | #endif /* _WIN32 */ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | static int load_repository( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | DavCfgRepository **list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | DavCfgRepository **list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | xmlNode *reponode); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | static int load_key( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | DavCfgKey **list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | DavCfgKey **list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | xmlNode *keynode); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | static int load_proxy( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | DavConfig *config, DavCfgProxy *proxy, xmlNode *proxynode, int type); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | static int load_namespace( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | DavCfgNamespace **list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | DavCfgNamespace **list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | xmlNode *node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | static int load_secretstore(DavConfig *config, xmlNode *node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
82 | int dav_cfg_string_set_node_value(DavConfig *config, CfgString *str, xmlNode *node) { |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | str->node = node; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | char *value = util_xml_get_text(node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | if(value) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | str->value = cx_strdup_a(config->mp->allocator, cx_str(value)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | return 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | str->value = (cxmutstr){NULL, 0}; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
94 | void dav_cfg_bool_set_node_value(DavConfig *config, CfgBool *cbool, xmlNode *node) { |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | cbool->node = node; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | char *value = util_xml_get_text(node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | cbool->value = util_getboolean(value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
100 | static void set_xml_content(xmlNode *node, const char *content) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
101 | xmlNode *child = node->children; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
102 | while(child) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
103 | xmlNode *next = child->next; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
104 | xmlUnlinkNode(child); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
105 | xmlFreeNode(child); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
106 | child = next; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
107 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
108 | |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
109 | if(content) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
110 | xmlChar *encoded = xmlEncodeSpecialChars(node->doc, (const xmlChar*)content); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
111 | if(encoded) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
112 | xmlNodeSetContent(node, encoded); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
113 | xmlFree(encoded); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
114 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
115 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
116 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
117 | |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
118 | void dav_cfg_string_set_value(DavConfig *config, CfgString *str, xmlNode *parent, cxstring new_value, const char *nodename) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
119 | if(str->value.ptr) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
120 | cxFree(config->mp->allocator, str->value.ptr); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
121 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
122 | if(new_value.ptr) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
123 | str->value = cx_strdup_a(config->mp->allocator, new_value); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
124 | } else { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
125 | str->value = cx_mutstrn(NULL, 0); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
126 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
127 | |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
128 | if(!str->node) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
129 | str->node = xmlNewNode(NULL, (const xmlChar*) nodename); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
130 | xmlAddChild(parent, str->node); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
131 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
132 | set_xml_content(str->node, new_value.ptr); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
133 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
134 | |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
135 | void dav_cfg_bool_set_value(DavConfig *config, CfgBool *cbool, xmlNode *parent, DavBool new_value, const char *nodename) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
136 | const char *content = new_value ? "true" : "false"; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
137 | cbool->value = new_value; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
138 | if(!cbool->node) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
139 | cbool->node = xmlNewNode(NULL, (const xmlChar*) nodename); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
140 | xmlAddChild(parent, cbool->node); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
141 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
142 | set_xml_content(cbool->node, content); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
143 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
144 | |
837
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
145 | void dav_cfg_int_set_value(DavConfig *config, CfgInt *cint, xmlNode *parent, int64_t new_value, const char *nodename) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
146 | char content[32]; |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
147 | snprintf(content, 32, "%" PRId64, new_value); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
148 | cint->value = new_value; |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
149 | if(!cint->node) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
150 | cint->node = xmlNewNode(NULL, (const xmlChar*) nodename); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
151 | xmlAddChild(parent, cint->node); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
152 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
153 | set_xml_content(cint->node, content); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
154 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
155 | |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
156 | void dav_cfg_uint_set_value(DavConfig *config, CfgUInt *cint, xmlNode *parent, uint64_t new_value, const char *nodename) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
157 | char content[32]; |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
158 | snprintf(content, 32, "%" PRIu64, new_value); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
159 | cint->value = new_value; |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
160 | if(!cint->node) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
161 | cint->node = xmlNewNode(NULL, (const xmlChar*) nodename); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
162 | xmlAddChild(parent, cint->node); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
163 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
164 | set_xml_content(cint->node, content); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
165 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
166 | |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
167 | void dav_cfg_string_remove(CfgString *str) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
168 | if(str->node) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
169 | xmlUnlinkNode(str->node); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
170 | xmlFreeNode(str->node); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
171 | str->node = NULL; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
172 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
173 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
174 | |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
175 | void dav_cfg_bool_remove(CfgBool *cbool) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
176 | if(cbool->node) { |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
177 | xmlUnlinkNode(cbool->node); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
178 | xmlFreeNode(cbool->node); |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
179 | cbool->node = NULL; |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
180 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
181 | } |
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
182 | |
837
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
183 | void dav_cfg_int_remove(CfgInt *cint) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
184 | if(cint->node) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
185 | xmlUnlinkNode(cint->node); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
186 | xmlFreeNode(cint->node); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
187 | cint->node = NULL; |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
188 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
189 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
190 | |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
191 | void dav_cfg_uint_remove(CfgUInt *cint) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
192 | if(cint->node) { |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
193 | xmlUnlinkNode(cint->node); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
194 | xmlFreeNode(cint->node); |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
195 | cint->node = NULL; |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
196 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
197 | } |
b5984d5cc40c
add utility functions for setting CfgInt/CfgUInt values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
836
diff
changeset
|
198 | |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | |
827
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
200 | DavConfig* dav_config_new(xmlDoc *doc) { |
826
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
201 | CxMempool *cfg_mp = cxMempoolCreate(128, NULL); |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
202 | DavConfig *config = cxMalloc(cfg_mp->allocator, sizeof(DavConfig)); |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
203 | memset(config, 0, sizeof(DavConfig)); |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
204 | config->mp = cfg_mp; |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
205 | |
827
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
206 | if(!doc) { |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
207 | doc = xmlNewDoc(BAD_CAST "1.0"); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
208 | xmlNode *root = xmlNewNode(NULL, BAD_CAST "configuration"); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
209 | xmlDocSetRootElement(doc, root); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
210 | } |
826
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
211 | config->doc = doc; |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
212 | |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
213 | return config; |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
214 | } |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
215 | |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
216 | DavConfig* dav_config_load(cxmutstr xmlfilecontent, int *error) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | xmlDoc *doc = xmlReadMemory(xmlfilecontent.ptr, xmlfilecontent.length, NULL, NULL, 0); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | if(!doc) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | if(error) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | *error = DAV_CONFIG_ERROR_XML; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | return NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | |
827
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
225 | DavConfig *config = dav_config_new(doc); |
826
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
226 | CxMempool *cfg_mp = config->mp; |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | cxMempoolRegister(cfg_mp, doc, (cx_destructor_func)xmlFreeDoc); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | DavCfgRepository *repos_begin = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | DavCfgRepository *repos_end = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | DavCfgKey *keys_begin = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | DavCfgKey *keys_end = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | DavCfgNamespace *namespaces_begin = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
234 | DavCfgNamespace *namespaces_end = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | xmlNode *xml_root = xmlDocGetRootElement(doc); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | xmlNode *node = xml_root->children; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | int ret = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
239 | while(node && !ret) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
240 | if(node->type == XML_ELEMENT_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
241 | if(xstreq(node->name, "repository")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
242 | ret = load_repository(config, &repos_begin, &repos_end, node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
243 | } else if(xstreq(node->name, "key")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
244 | ret = load_key(config, &keys_begin, &keys_end, node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | } else if (xstreq(node->name, "http-proxy")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | config->http_proxy = cxCalloc(config->mp->allocator, 1, sizeof(DavCfgProxy)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
247 | ret = load_proxy(config, config->http_proxy, node, DAV_HTTP_PROXY); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
248 | } else if (xstreq(node->name, "https-proxy")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
249 | config->https_proxy = cxCalloc(config->mp->allocator, 1, sizeof(DavCfgProxy)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
250 | ret = load_proxy(config, config->https_proxy, node, DAV_HTTPS_PROXY); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
251 | } else if (xstreq(node->name, "namespace")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
252 | ret = load_namespace(config, &namespaces_begin, &namespaces_end, node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
253 | } else if (xstreq(node->name, "secretstore")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
254 | ret = load_secretstore(config, node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
255 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
256 | fprintf(stderr, "Unknown config element: %s\n", node->name); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
257 | ret = 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
258 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
259 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
260 | node = node->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
261 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
262 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
263 | config->repositories = repos_begin; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
264 | config->keys = keys_begin; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
265 | config->namespaces = namespaces_begin; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
266 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
267 | if(ret != 0 && error) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
268 | *error = ret; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
269 | cxMempoolDestroy(cfg_mp); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
270 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
271 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
272 | return config; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
273 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
274 | |
796
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
275 | void dav_config_free(DavConfig *config) { |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
276 | cxMempoolDestroy(config->mp); |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
277 | } |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
278 | |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
279 | CxBuffer* dav_config2buf(DavConfig *config) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
280 | xmlChar* xmlText = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
281 | int textLen = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
282 | xmlDocDumpFormatMemory(config->doc, &xmlText, &textLen, 1); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
283 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
284 | if(!xmlText) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
285 | return NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
286 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
287 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
288 | CxBuffer *buf = cxBufferCreate(NULL, textLen, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
289 | cxBufferWrite(xmlText, 1, textLen, buf); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | xmlFree(xmlText); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
291 | return buf; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
292 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
293 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
294 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
295 | static int repo_add_config( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
296 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
297 | DavCfgRepository *repo, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
298 | xmlNode* node) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
299 | { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
300 | unsigned short lineno = node->line; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
301 | char *key = (char*)node->name; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
302 | char *value = util_xml_get_text(node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
303 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
304 | /* every key needs a value */ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
305 | if(!value) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
306 | /* TODO: maybe this should only be reported, if the key is valid |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
307 | * But this makes the code very ugly. |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
308 | */ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
309 | print_error(lineno, "missing value for config element: %s\n", key); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
310 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
311 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
312 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
313 | if(xstreq(key, "name")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
314 | dav_cfg_string_set_node_value(config, &repo->name, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
315 | } else if(xstreq(key, "url")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
316 | dav_cfg_string_set_node_value(config, &repo->url, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | } else if(xstreq(key, "user")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
318 | dav_cfg_string_set_node_value(config, &repo->user, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | } else if(xstreq(key, "password")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
320 | dav_cfg_string_set_node_value(config, &repo->password, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
321 | } else if(xstreq(key, "stored-user")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
322 | dav_cfg_string_set_node_value(config, &repo->stored_user, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
323 | } else if(xstreq(key, "default-key")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
324 | dav_cfg_string_set_node_value(config, &repo->default_key, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
325 | } else if(xstreq(key, "full-encryption")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
326 | dav_cfg_bool_set_node_value(config, &repo->full_encryption, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
327 | } else if(xstreq(key, "content-encryption")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
328 | dav_cfg_bool_set_node_value(config, &repo->content_encryption, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
329 | } else if(xstreq(key, "decrypt-content")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
330 | dav_cfg_bool_set_node_value(config, &repo->decrypt_content, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
331 | } else if(xstreq(key, "decrypt-name")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
332 | dav_cfg_bool_set_node_value(config, &repo->decrypt_name, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
333 | } else if(xstreq(key, "cert")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
334 | dav_cfg_string_set_node_value(config, &repo->cert, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
335 | } else if(xstreq(key, "verification")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
336 | dav_cfg_bool_set_node_value(config, &repo->verification, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
337 | } else if(xstreq(key, "ssl-version")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
338 | repo->ssl_version.node = node; |
838
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
339 | int ssl_version = dav_str2ssl_version((const char*)value); |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
340 | if(ssl_version == -1) { |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
341 | print_warning(lineno, "unknown ssl version: %s\n", value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
342 | repo->ssl_version.value = CURL_SSLVERSION_DEFAULT; |
838
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
343 | } else { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
344 | repo->ssl_version.value = ssl_version; |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
345 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
346 | } else if(xstreq(key, "authmethods")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
347 | repo->authmethods.node = node; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
348 | repo->authmethods.value = CURLAUTH_NONE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
349 | const char *delims = " \t\r\n"; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
350 | char *meths = strdup(value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
351 | char *meth = strtok(meths, delims); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
352 | while (meth) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
353 | if(xstrEQ(meth, "basic")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
354 | repo->authmethods.value |= CURLAUTH_BASIC; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
355 | } else if(xstrEQ(meth, "digest")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
356 | repo->authmethods.value |= CURLAUTH_DIGEST; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
357 | } else if(xstrEQ(meth, "negotiate")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
358 | repo->authmethods.value |= CURLAUTH_GSSNEGOTIATE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
359 | } else if(xstrEQ(meth, "ntlm")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
360 | repo->authmethods.value |= CURLAUTH_NTLM; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
361 | } else if(xstrEQ(meth, "any")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
362 | repo->authmethods.value = CURLAUTH_ANY; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
363 | } else if(xstrEQ(meth, "none")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
364 | /* skip */ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
365 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
366 | print_warning(lineno, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
367 | "unknown authentication method: %s\n", meth); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
368 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
369 | meth = strtok(NULL, delims); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
370 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
371 | free(meths); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
372 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
373 | print_error(lineno, "unkown repository config element: %s\n", key); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
374 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
375 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
376 | return 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
377 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
378 | |
838
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
379 | int dav_str2ssl_version(const char *value) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
380 | if(xstrEQ(value, "TLSv1")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
381 | return CURL_SSLVERSION_TLSv1; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
382 | } else if(xstrEQ(value, "SSLv2")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
383 | return CURL_SSLVERSION_SSLv2; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
384 | } else if(xstrEQ(value, "SSLv3")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
385 | return CURL_SSLVERSION_SSLv3; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
386 | } |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
387 | #if LIBCURL_VERSION_MAJOR * 1000 + LIBCURL_VERSION_MINOR >= 7034 |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
388 | else if(xstrEQ(value, "TLSv1.0")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
389 | return CURL_SSLVERSION_TLSv1_0; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
390 | } else if(xstrEQ(value, "TLSv1.1")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
391 | return CURL_SSLVERSION_TLSv1_1; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
392 | } else if(xstrEQ(value, "TLSv1.2")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
393 | return CURL_SSLVERSION_TLSv1_2; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
394 | } |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
395 | #endif |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
396 | #if LIBCURL_VERSION_MAJOR * 1000 + LIBCURL_VERSION_MINOR >= 7052 |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
397 | else if(xstrEQ(value, "TLSv1.3")) { |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
398 | return CURL_SSLVERSION_TLSv1_3; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
399 | } |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
400 | #endif |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
401 | return -1; |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
402 | } |
d262210f8454
move ssl version parser to new function
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
837
diff
changeset
|
403 | |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
404 | static int load_repository( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
405 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
406 | DavCfgRepository **list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
407 | DavCfgRepository **list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
408 | xmlNode *reponode) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
409 | { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
410 | DavCfgRepository *repo = dav_repository_new(config); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
411 | repo->node = reponode; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
412 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
413 | // add repo config from child nodes |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
414 | xmlNode *node = reponode->children; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
415 | int ret = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
416 | while(node && !ret) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
417 | if(node->type == XML_ELEMENT_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
418 | ret = repo_add_config(config, repo, node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
419 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
420 | node = node->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
421 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
422 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
423 | // success: add repo to the configuration, error: free repo |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
424 | if(ret) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
425 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
426 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
427 | cx_linked_list_add( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
428 | (void**)list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
429 | (void**)list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
430 | offsetof(DavCfgRepository, prev), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
431 | offsetof(DavCfgRepository, next), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
432 | repo); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
433 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
434 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
435 | return 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
436 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
437 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
438 | static xmlNode* addXmlNode(xmlNode *node, const char *name, cxmutstr content) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
439 | xmlNode *text1 = xmlNewDocText(node->doc, BAD_CAST "\t\t"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
440 | xmlAddChild(node, text1); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
441 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
442 | cxmutstr ctn = cx_strdup(cx_strcast(content)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
443 | xmlNode *newNode = xmlNewChild(node, NULL, BAD_CAST name, BAD_CAST ctn.ptr); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
444 | free(ctn.ptr); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
445 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
446 | xmlNode *text2 = xmlNewDocText(node->doc, BAD_CAST "\n"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
447 | xmlAddChild(node, text2); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
448 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
449 | return newNode; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
450 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
451 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
452 | void dav_config_add_repository(DavConfig *config, DavCfgRepository *repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
453 | if(repo->node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
454 | fprintf(stderr, "Error: dav_config_add_repository: node already exists\n"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
455 | return; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
456 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
457 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
458 | xmlNode *repoNode = xmlNewNode(NULL, BAD_CAST "repository"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
459 | xmlNode *rtext1 = xmlNewDocText(config->doc, BAD_CAST "\n"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
460 | xmlAddChild(repoNode, rtext1); |
839
23f3b02c6725
safe pwdstore decryption status
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
838
diff
changeset
|
461 | repo->node = repoNode; |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
462 | if(repo->name.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
463 | repo->name.node = addXmlNode(repoNode, "name", repo->name.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
464 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
465 | if(repo->url.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
466 | repo->url.node = addXmlNode(repoNode, "url", repo->url.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
467 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
468 | if(repo->user.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
469 | repo->user.node = addXmlNode(repoNode, "user", repo->user.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
470 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
471 | if(repo->password.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
472 | repo->password.node = addXmlNode(repoNode, "password", repo->password.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
473 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
474 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
475 | if(repo->stored_user.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
476 | repo->stored_user.node = addXmlNode(repoNode, "stored-user", repo->stored_user.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
477 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
478 | if(repo->default_key.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
479 | repo->default_key.node = addXmlNode(repoNode, "default-key", repo->default_key.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
480 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
481 | if(repo->cert.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
482 | repo->cert.node = addXmlNode(repoNode, "cert", repo->cert.value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
483 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
484 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
485 | // TODO: implement booleans |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
486 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
487 | // indent closing tag |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
488 | xmlNode *rtext2 = xmlNewDocText(config->doc, BAD_CAST "\t"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
489 | xmlAddChild(repoNode, rtext2); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
490 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
491 | // add repository to internal list |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
492 | DavCfgRepository **list_begin = &config->repositories; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
493 | cx_linked_list_add( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
494 | (void**)list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
495 | NULL, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
496 | offsetof(DavCfgRepository, prev), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
497 | offsetof(DavCfgRepository, next), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
498 | repo); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
499 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
500 | // add repository element to the xml document |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
501 | xmlNode *xml_root = xmlDocGetRootElement(config->doc); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
502 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
503 | xmlNode *text1 = xmlNewDocText(config->doc, BAD_CAST "\n\t"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
504 | xmlAddChild(xml_root, text1); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
505 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
506 | xmlAddChild(xml_root, repoNode); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
507 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
508 | xmlNode *text2 = xmlNewDocText(config->doc, BAD_CAST "\n"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
509 | xmlAddChild(xml_root, text2); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
510 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
511 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
512 | DavCfgRepository* dav_repository_new(DavConfig *config) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
513 | DavCfgRepository *repo = cxMalloc(config->mp->allocator, sizeof(DavCfgRepository)); |
804
1e24f187c362
fix indentation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
803
diff
changeset
|
514 | memset(repo, 0, sizeof(DavCfgRepository)); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
515 | repo->decrypt_name.value = false; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
516 | repo->decrypt_content.value = true; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
517 | repo->decrypt_properties.value = false; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
518 | repo->verification.value = true; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
519 | repo->ssl_version.value = CURL_SSLVERSION_DEFAULT; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
520 | repo->authmethods.value = CURLAUTH_BASIC; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
521 | return repo; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
522 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
523 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
524 | void dav_repository_free(DavConfig *config, DavCfgRepository *repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
525 | // TODO |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
526 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
527 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
528 | void dav_repository_remove_and_free(DavConfig *config, DavCfgRepository *repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
529 | if(repo->prev) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
530 | repo->prev->next = repo->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
531 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
532 | if(repo->next) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
533 | repo->next->prev = repo->prev; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
534 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
535 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
536 | if(repo->node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
537 | // TODO: remove newline after repo node |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
538 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
539 | xmlUnlinkNode(repo->node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
540 | xmlFreeNode(repo->node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
541 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
542 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
543 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
544 | int dav_repository_get_flags(DavCfgRepository *repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
545 | int flags = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
546 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
547 | DavBool encrypt_content = FALSE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
548 | DavBool encrypt_name = FALSE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
549 | DavBool encrypt_properties = FALSE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
550 | DavBool decrypt_content = FALSE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
551 | DavBool decrypt_name = FALSE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
552 | DavBool decrypt_properties = FALSE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
553 | if(repo->full_encryption.value) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
554 | encrypt_content = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
555 | encrypt_name = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
556 | encrypt_properties = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
557 | decrypt_content = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
558 | decrypt_name = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
559 | decrypt_properties = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
560 | } else if(repo->content_encryption.value) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
561 | encrypt_content = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
562 | decrypt_content = TRUE; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
563 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
564 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
565 | if(decrypt_content) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
566 | flags |= DAV_SESSION_DECRYPT_CONTENT; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
567 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
568 | if(decrypt_name) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
569 | flags |= DAV_SESSION_DECRYPT_NAME; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
570 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
571 | if(decrypt_properties) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
572 | flags |= DAV_SESSION_DECRYPT_PROPERTIES; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
573 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
574 | if(encrypt_content) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
575 | flags |= DAV_SESSION_ENCRYPT_CONTENT; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
576 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
577 | if(encrypt_name) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
578 | flags |= DAV_SESSION_ENCRYPT_NAME; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
579 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
580 | if(encrypt_properties) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
581 | flags |= DAV_SESSION_ENCRYPT_PROPERTIES; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
582 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
583 | return flags; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
584 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
585 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
586 | void dav_repository_set_url(DavConfig *config, DavCfgRepository *repo, cxstring newurl) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
587 | if(repo->url.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
588 | cxFree(config->mp->allocator, repo->url.value.ptr); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
589 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
590 | repo->url.value = cx_strdup_a(config->mp->allocator, newurl); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
591 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
592 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
593 | void dav_repository_set_auth(DavConfig *config, DavCfgRepository *repo, cxstring user, cxstring password) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
594 | const CxAllocator *a = config->mp->allocator; |
827
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
595 | if(user.length > 0) { |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
596 | repo->user.value = cx_strdup_a(a, user); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
597 | } |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
598 | if(password.length > 0) { |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
599 | char *pwenc = util_base64encode(password.ptr, password.length); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
600 | repo->password.value = cx_strdup_a(a, cx_str(pwenc)); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
601 | free(pwenc); |
d9928f11970f
fix load_config stores wrong xml doc pointer in the config object
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
826
diff
changeset
|
602 | } |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
603 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
604 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
605 | cxmutstr dav_repository_get_decodedpassword(DavCfgRepository *repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
606 | cxmutstr pw = { NULL, 0 }; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
607 | if(repo->password.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
608 | pw = cx_mutstr(util_base64decode(repo->password.value.ptr)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
609 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
610 | return pw; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
611 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
612 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
613 | |
845
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
614 | void dav_config_add_key(DavConfig *config, DavCfgKey *key) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
615 | cx_linked_list_add( |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
616 | (void**)&config->keys, |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
617 | NULL, |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
618 | offsetof(DavCfgKey, prev), |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
619 | offsetof(DavCfgKey, next), |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
620 | key); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
621 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
622 | if(key->node) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
623 | fprintf(stderr, "Error: dav_config_add_key: node already exists\n"); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
624 | return; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
625 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
626 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
627 | xmlNode *keyNode = xmlNewNode(NULL, BAD_CAST "key"); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
628 | xmlNode *rtext1 = xmlNewDocText(config->doc, BAD_CAST "\n"); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
629 | xmlAddChild(keyNode, rtext1); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
630 | key->node = keyNode; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
631 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
632 | if(key->name.value.ptr) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
633 | key->name.node = addXmlNode(keyNode, "name", key->name.value); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
634 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
635 | const char *type = dav_config_keytype_str(key->type); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
636 | if(type) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
637 | key->type_node = addXmlNode(keyNode, "type", cx_mutstr((char*)type)); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
638 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
639 | if(key->file.value.ptr) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
640 | key->file.node = addXmlNode(keyNode, "file", key->file.value); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
641 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
642 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
643 | // indent closing tag |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
644 | xmlNode *rtext2 = xmlNewDocText(config->doc, BAD_CAST "\t"); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
645 | xmlAddChild(keyNode, rtext2); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
646 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
647 | // add key element to the xml document |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
648 | xmlNode *xml_root = xmlDocGetRootElement(config->doc); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
649 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
650 | xmlNode *text1 = xmlNewDocText(config->doc, BAD_CAST "\n\t"); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
651 | xmlAddChild(xml_root, text1); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
652 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
653 | xmlAddChild(xml_root, keyNode); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
654 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
655 | xmlNode *text2 = xmlNewDocText(config->doc, BAD_CAST "\n"); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
656 | xmlAddChild(xml_root, text2); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
657 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
658 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
659 | DavCfgKey* dav_key_new(DavConfig *config) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
660 | DavCfgKey *key = cxMalloc(config->mp->allocator, sizeof(DavCfgKey)); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
661 | memset(key, 0, sizeof(DavCfgKey)); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
662 | key->type = DAV_KEY_TYPE_AES256; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
663 | return key; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
664 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
665 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
666 | void dav_key_remove_and_free(DavConfig *config, DavCfgKey *key) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
667 | cx_linked_list_remove( |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
668 | (void**)&config->keys, |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
669 | NULL, |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
670 | offsetof(DavCfgKey, prev), |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
671 | offsetof(DavCfgKey, next), |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
672 | key); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
673 | if(key->node) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
674 | // TODO: remove newline after key node |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
675 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
676 | xmlUnlinkNode(key->node); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
677 | xmlFreeNode(key->node); |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
678 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
679 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
680 | |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
681 | |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
682 | static int load_key( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
683 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
684 | DavCfgKey **list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
685 | DavCfgKey **list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
686 | xmlNode *keynode) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
687 | { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
688 | xmlNode *node = keynode->children; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
689 | DavCfgKey *key = cxMalloc(config->mp->allocator, sizeof(DavCfgKey)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
690 | memset(key, 0, sizeof(DavCfgKey)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
691 | key->type = DAV_KEY_TYPE_AES256; |
845
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
692 | key->node = keynode; |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
693 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
694 | int error = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
695 | while(node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
696 | if(node->type == XML_ELEMENT_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
697 | if(xstreq(node->name, "name")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
698 | dav_cfg_string_set_node_value(config, &key->name, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
699 | } else if(xstreq(node->name, "file")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
700 | dav_cfg_string_set_node_value(config, &key->file, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
701 | } else if(xstreq(node->name, "type")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
702 | const char *value = util_xml_get_text(node); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
703 | key->type_node = node; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
704 | if(!strcmp(value, "aes128")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
705 | key->type = DAV_KEY_TYPE_AES128; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
706 | } else if(!strcmp(value, "aes256")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
707 | key->type = DAV_KEY_TYPE_AES256; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
708 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
709 | print_error(node->line, "unknown key type %s\n", value); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
710 | error = 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
711 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
712 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
713 | key->unknown_elements++; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
714 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
715 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
716 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
717 | node = node->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
718 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
719 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
720 | if(!key->name.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
721 | error = 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
722 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
723 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
724 | if(!error) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
725 | error = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
726 | size_t expected_length = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
727 | if(key->type == DAV_KEY_TYPE_AES128) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
728 | expected_length = 16; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
729 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
730 | if(key->type == DAV_KEY_TYPE_AES256) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
731 | expected_length = 32; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
732 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
733 | /* |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
734 | if(key->length < expected_length) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
735 | print_error(keynode->line, "key %s is too small (%zu < %zu)\n", |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
736 | key->name, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
737 | key->length, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
738 | expected_length); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
739 | error = 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
740 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
741 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
742 | // add key to context |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
743 | if(!error) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
744 | cxMapPut(keys, cx_hash_key_str(key->name), key); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
745 | dav_context_add_key(context, key); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
746 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
747 | */ |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
748 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
749 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
750 | // cleanup |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
751 | if(error) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
752 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
753 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
754 | // add key to the configuration |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
755 | cx_linked_list_add( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
756 | (void**)list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
757 | (void**)list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
758 | offsetof(DavCfgKey, prev), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
759 | offsetof(DavCfgKey, next), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
760 | key); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
761 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
762 | return 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
763 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
764 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
765 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
766 | static int load_proxy( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
767 | DavConfig *config, DavCfgProxy *proxy, xmlNode *proxynode, int type) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
768 | { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
769 | const char *stype; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
770 | if(type == DAV_HTTPS_PROXY) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
771 | stype = "https"; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
772 | } else if(type == DAV_HTTP_PROXY) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
773 | stype = "http"; |
805
bff983370565
make DavContext mt-safe
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
804
diff
changeset
|
774 | } else { |
bff983370565
make DavContext mt-safe
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
804
diff
changeset
|
775 | fprintf(stderr, "unknown proxy type\n"); |
bff983370565
make DavContext mt-safe
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
804
diff
changeset
|
776 | return 1; |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
777 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
778 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
779 | if(!proxy) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
780 | // no xml error - so report this directly via fprintf |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
781 | fprintf(stderr, "no memory reserved for %s proxy.\n", stype); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
782 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
783 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
784 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
785 | xmlNode *node = proxynode->children; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
786 | int ret = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
787 | while(node && !ret) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
788 | if(node->type == XML_ELEMENT_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
789 | int reportmissingvalue = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
790 | if(xstreq(node->name, "url")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
791 | reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->url, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
792 | } else if(xstreq(node->name, "user")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
793 | reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->user, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
794 | } else if(xstreq(node->name, "password")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
795 | reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->password, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
796 | } else if(xstreq(node->name, "no")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
797 | reportmissingvalue = dav_cfg_string_set_node_value(config, &proxy->noproxy, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
798 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
799 | proxy->unknown_elements++; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
800 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
801 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
802 | if (reportmissingvalue) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
803 | print_error(node->line, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
804 | "missing value for proxy configuration element: %s\n", |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
805 | node->name); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
806 | ret = 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
807 | break; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
808 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
809 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
810 | node = node->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
811 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
812 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
813 | if(!ret && !proxy->url.value.ptr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
814 | print_error(proxynode->line, "missing url for %s proxy.\n", stype); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
815 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
816 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
817 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
818 | return ret; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
819 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
820 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
821 | static char* get_attr_content(xmlNode *node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
822 | // TODO: remove code duplication (util_xml_get_text) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
823 | while(node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
824 | if(node->type == XML_TEXT_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
825 | return (char*)node->content; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
826 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
827 | node = node->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
828 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
829 | return NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
830 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
831 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
832 | static int load_namespace( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
833 | DavConfig *config, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
834 | DavCfgNamespace **list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
835 | DavCfgNamespace **list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
836 | xmlNode *node) |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
837 | { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
838 | const char *prefix = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
839 | const char *uri = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
840 | xmlAttr *attr = node->properties; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
841 | while(attr) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
842 | if(attr->type == XML_ATTRIBUTE_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
843 | char *value = get_attr_content(attr->children); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
844 | if(!value) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
845 | print_error( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
846 | node->line, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
847 | "missing value for attribute %s\n", (char*)attr->name); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
848 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
849 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
850 | if(xstreq(attr->name, "prefix")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
851 | prefix = value; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
852 | } else if(xstreq(attr->name, "uri")) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
853 | uri = value; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
854 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
855 | print_error( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
856 | node->line, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
857 | "unexpected attribute %s\n", (char*)attr->name); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
858 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
859 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
860 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
861 | attr = attr->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
862 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
863 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
864 | if(!prefix) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
865 | print_error(node->line, "missing prefix attribute\n"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
866 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
867 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
868 | if(!uri) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
869 | print_error(node->line, "missing uri attribute\n"); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
870 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
871 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
872 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
873 | DavCfgNamespace *ns = cxMalloc(config->mp->allocator, sizeof(DavCfgNamespace)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
874 | memset(ns, 0, sizeof(DavCfgNamespace)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
875 | ns->node = node; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
876 | ns->prefix = cx_strdup_a(config->mp->allocator, cx_str(prefix)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
877 | ns->uri = cx_strdup_a(config->mp->allocator, cx_str(uri)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
878 | cx_linked_list_add( |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
879 | (void**)list_begin, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
880 | (void**)list_end, |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
881 | offsetof(DavCfgNamespace, prev), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
882 | offsetof(DavCfgNamespace, next), |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
883 | ns); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
884 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
885 | return 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
886 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
887 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
888 | static int load_secretstore(DavConfig *config, xmlNode *node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
889 | // currently only one secretstore is supported |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
890 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
891 | if(config->secretstore) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
892 | return 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
893 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
894 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
895 | config->secretstore = cxCalloc(config->mp->allocator, 1, sizeof(DavCfgSecretStore)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
896 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
897 | node = node->children; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
898 | int error = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
899 | while(node) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
900 | if(node->type == XML_ELEMENT_NODE) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
901 | if(xstreq(node->name, "unlock-command")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
902 | dav_cfg_string_set_node_value(config, &config->secretstore->unlock_cmd, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
903 | } else if(xstreq(node->name, "lock-command")) { |
836
7842c7665cd0
add utility functions for setting CfgString/CfgBool values
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
827
diff
changeset
|
904 | dav_cfg_string_set_node_value(config, &config->secretstore->lock_cmd, node); |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
905 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
906 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
907 | node = node->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
908 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
909 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
910 | return error; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
911 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
912 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
913 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
914 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
915 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
916 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
917 | DavCfgRepository* dav_config_get_repository(DavConfig *config, cxstring name) { |
826
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
918 | if(!config) { |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
919 | return NULL; |
b6e9fd3f1951
fix dav add-repo crash in case .dav/config.xml doesn't exist
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
823
diff
changeset
|
920 | } |
795
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
921 | DavCfgRepository *repo = config->repositories; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
922 | while(repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
923 | if(!cx_strcmp(cx_strcast(repo->name.value), name)) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
924 | return repo; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
925 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
926 | repo = repo->next; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
927 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
928 | return NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
929 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
930 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
931 | DavCfgRepository* dav_config_url2repo(DavConfig *config, const char *url, char **path) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
932 | cxmutstr p; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
933 | DavCfgRepository *repo = dav_config_url2repo_s(config, cx_str(url), &p); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
934 | *path = p.ptr; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
935 | return repo; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
936 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
937 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
938 | DavCfgRepository* dav_config_url2repo_s(DavConfig *config, cxstring url, cxmutstr *path) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
939 | path->ptr = NULL; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
940 | path->length = 0; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
941 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
942 | int s; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
943 | if(cx_strprefix(url, CX_STR("http://"))) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
944 | s = 7; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
945 | } else if(cx_strprefix(url, CX_STR("https://"))) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
946 | s = 8; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
947 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
948 | s = 1; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
949 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
950 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
951 | // split URL into repository and path |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
952 | cxstring r = cx_strsubs(url, s); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
953 | cxstring p = cx_strchr(r, '/'); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
954 | r = cx_strsubsl(url, 0, url.length-p.length); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
955 | if(p.length == 0) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
956 | p = cx_strn("/", 1); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
957 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
958 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
959 | DavCfgRepository *repo = dav_config_get_repository(config, r); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
960 | if(repo) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
961 | *path = cx_strdup(p); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
962 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
963 | // TODO: who is responsible for freeing this repository? |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
964 | // how can the callee know, if he has to call free()? |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
965 | repo = dav_repository_new(config); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
966 | repo->name.value = cx_strdup_a(config->mp->allocator, CX_STR("")); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
967 | if(url.ptr[url.length-1] == '/') { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
968 | repo->url.value = cx_strdup_a(config->mp->allocator, url); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
969 | *path = cx_strdup(CX_STR("/")); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
970 | } else if (cx_strchr(url, '/').length > 0) { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
971 | // TODO: fix the following workaround after |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
972 | // fixing the inconsistent behavior of util_url_*() |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
973 | cxstring repo_url = util_url_base_s(url); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
974 | repo->url.value = cx_strdup_a(config->mp->allocator, repo_url); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
975 | *path = cx_strdup(util_url_path_s(url)); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
976 | } else { |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
977 | repo->url.value = cx_strdup(url); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
978 | *path = cx_strdup(CX_STR("/")); |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
979 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
980 | } |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
981 | |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
982 | return repo; |
05647e862a17
add new config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
983 | } |
796
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
984 | |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
985 | int dav_config_keytype(DavCfgKeyType type) { |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
986 | switch(type) { |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
987 | default: break; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
988 | case DAV_KEY_TYPE_AES256: return DAV_KEY_AES256; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
989 | case DAV_KEY_TYPE_AES128: return DAV_KEY_AES128; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
990 | } |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
991 | return 0; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
992 | } |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
993 | |
845
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
994 | const char* dav_config_keytype_str(DavCfgKeyType type) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
995 | switch(type) { |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
996 | default: break; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
997 | case DAV_KEY_TYPE_AES256: return "aes256"; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
998 | case DAV_KEY_TYPE_AES128: return "aes128"; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
999 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
1000 | return NULL; |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
1001 | } |
8ac8bf29e2ee
add cfg functions for modifying keys
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
839
diff
changeset
|
1002 | |
796
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1003 | int dav_config_register_keys(DavConfig *config, DavContext *ctx, dav_loadkeyfile_func loadkey) { |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1004 | for(DavCfgKey *key=config->keys;key;key=key->next) { |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1005 | char *file = cx_strdup_m(key->file.value).ptr; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1006 | cxmutstr keycontent = loadkey(file); |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1007 | free(file); |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1008 | |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1009 | // TODO: check key length |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1010 | |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1011 | if(!keycontent.ptr) { |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1012 | return 1; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1013 | } |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1014 | |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1015 | DavKey *davkey = calloc(1, sizeof(DavKey)); |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1016 | davkey->name = cx_strdup_m(key->name.value).ptr; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1017 | davkey->type = dav_config_keytype(key->type); |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1018 | davkey->data = keycontent.ptr; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1019 | davkey->length = keycontent.length; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1020 | |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1021 | dav_context_add_key(ctx, davkey); |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1022 | } |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1023 | return 0; |
81e0f67386a6
remove old config loader
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
795
diff
changeset
|
1024 | } |
823
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1025 | |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1026 | int dav_config_register_namespaces(DavConfig *config, DavContext *ctx) { |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1027 | DavCfgNamespace *ns = config->namespaces; |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1028 | while(ns) { |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1029 | dav_add_namespace(ctx, ns->prefix.ptr, ns->uri.ptr); |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1030 | ns = ns->next; |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1031 | } |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1032 | return 0; |
04c60a353331
add configured namespaces to the dav context
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
805
diff
changeset
|
1033 | } |