Sat, 22 Jun 2019 16:36:52 +0200
move some properties to new namespace
for properties encryption we need to decide which props must be encrypted and the plan is, to decide by namespace
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
4 | * Copyright 2018 Olaf Wintermann. All rights reserved. |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
0bbbb0341606
some code cleanup and bug fixes
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 |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include <stdio.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include <stdlib.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <string.h> |
182
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
32 | #include <stdbool.h> |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | #include <libxml/tree.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | #include "utils.h" |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
36 | #include "session.h" |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | #include "methods.h" |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
38 | #include "crypto.h" |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | #include "ucx/buffer.h" |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | #include "ucx/utils.h" |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | #include "resource.h" |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
43 | #include "xml.h" |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
44 | #include "davqlexec.h" |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | #define xstreq(a,b) xmlStrEqual(BAD_CAST a, BAD_CAST b) |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | DavResource* dav_resource_new(DavSession *sn, char *path) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
49 | //char *href = util_url_path(url); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
50 | //DavResource *res = dav_resource_new_href(sn, href); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
51 | char *parent = util_parent_path(path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
52 | char *name = util_resource_name(path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
53 | char *href = dav_session_create_plain_href(sn, path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
54 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
55 | DavResource *res = dav_resource_new_full(sn, parent, name, href); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
56 | free(parent); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | return res; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | |
42
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
60 | DavResource* dav_resource_new_child(DavSession *sn, DavResource *parent, char *name) { |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
61 | char *path = util_concat_path(parent->path, name); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
62 | char *href = dav_session_create_plain_href(sn, path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
63 | DavResource *res = dav_resource_new_full(sn, parent->path, name, href); |
42
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
64 | free(path); |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
65 | return res; |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
66 | } |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
67 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
69 | DavResource* dav_resource_new_href(DavSession *sn, char *href) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
70 | DavResource *res = ucx_mempool_calloc(sn->mp, 1, sizeof(DavResource)); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | res->session = sn; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | // set name, path and href |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | resource_set_info(res, href); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | // initialize resource data |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | res->data = resource_data_new(sn); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | return res; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
82 | DavResource* dav_resource_new_full(DavSession *sn, char *parent_path, char *name, char *href) { |
268
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
83 | sstr_t n = sstr(name); |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
84 | // the name must not contain path separators |
518
cca3e7aa30ed
fix null pointer dereferenciation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
505
diff
changeset
|
85 | if(n.length > 0 && href) { |
280
6d8784bee427
fixes dav_resource_new_full
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
269
diff
changeset
|
86 | for(int i=0;i<n.length-1;i++) { |
6d8784bee427
fixes dav_resource_new_full
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
269
diff
changeset
|
87 | char c = n.ptr[i]; |
6d8784bee427
fixes dav_resource_new_full
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
269
diff
changeset
|
88 | if(c == '/' || c == '\\') { |
6d8784bee427
fixes dav_resource_new_full
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
269
diff
changeset
|
89 | n = sstr(util_resource_name(href)); |
6d8784bee427
fixes dav_resource_new_full
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
269
diff
changeset
|
90 | break; |
6d8784bee427
fixes dav_resource_new_full
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
269
diff
changeset
|
91 | } |
268
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
92 | } |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
93 | } |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
94 | // remove trailing '/' |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
95 | if(n.length > 0 && n.ptr[n.length-1] == '/') { |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
96 | n.length--; |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
97 | } |
2610eecfc5e5
adds resource name validation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
261
diff
changeset
|
98 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
99 | DavResource *res = ucx_mempool_calloc(sn->mp, 1, sizeof(DavResource)); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
100 | res->session = sn; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
101 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
102 | // set name, path and href |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
103 | res->name = sstrdup_a(sn->mp->allocator, n).ptr; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
104 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
105 | char *path = util_concat_path(parent_path, name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
106 | res->path = dav_session_strdup(sn, path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
107 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
108 | res->href = href; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
109 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
110 | // initialize resource data |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
111 | res->data = resource_data_new(sn); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
112 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
113 | // cache href/path |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
114 | if(href) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
115 | dav_session_cache_path(sn, sstr(path), sstr(href)); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
116 | } |
74
da079dc0724c
fixed many memory leaks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
70
diff
changeset
|
117 | free(path); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
118 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
119 | return res; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
120 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
121 | |
134
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
122 | void resource_free_properties(DavSession *sn, UcxMap *properties) { |
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
123 | UcxMapIterator i = ucx_map_iterator(properties); |
348
b79fb94f9e0a
davqlexec handles xml properties now (not really, but it doesn't destroy everything)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
331
diff
changeset
|
124 | DavXmlNode *node; |
b79fb94f9e0a
davqlexec handles xml properties now (not really, but it doesn't destroy everything)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
331
diff
changeset
|
125 | UCX_MAP_FOREACH(key, node, i) { |
b79fb94f9e0a
davqlexec handles xml properties now (not really, but it doesn't destroy everything)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
331
diff
changeset
|
126 | // TODO: free everything |
b79fb94f9e0a
davqlexec handles xml properties now (not really, but it doesn't destroy everything)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
331
diff
changeset
|
127 | dav_session_free(sn, node); |
134
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
128 | } |
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
129 | ucx_map_free(properties); |
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
130 | } |
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
131 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
132 | void dav_resource_free(DavResource *res) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
133 | DavSession *sn = res->session; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
134 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
135 | dav_session_free(sn, res->name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
136 | dav_session_free(sn, res->path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
137 | if(res->href) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
138 | dav_session_free(sn, res->href); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
139 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
140 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
141 | DavResourceData *data = res->data; |
134
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
142 | resource_free_properties(sn, data->properties); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
143 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
144 | UCX_FOREACH(elm, data->set) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
145 | DavProperty *p = elm->data; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
146 | dav_session_free(sn, p->ns->name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
147 | if(p->ns->prefix) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
148 | dav_session_free(sn, p->ns->prefix); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
149 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
150 | dav_session_free(sn, p->ns); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
151 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
152 | dav_session_free(sn, p->name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
153 | dav_session_free(sn, p->value); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
154 | dav_session_free(sn, p); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
155 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
156 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
157 | UCX_FOREACH(elm, data->remove) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
158 | DavProperty *p = elm->data; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
159 | dav_session_free(sn, p->ns->name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
160 | if(p->ns->prefix) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
161 | dav_session_free(sn, p->ns->prefix); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
162 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
163 | dav_session_free(sn, p->ns); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
164 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
165 | dav_session_free(sn, p->name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
166 | dav_session_free(sn, p); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
167 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
168 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
169 | if(!data->read && data->content) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
170 | dav_session_free(sn, data->content); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
171 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
172 | dav_session_free(sn, data); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
173 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
174 | dav_session_free(sn, res); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
175 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
176 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
177 | void dav_resource_free_all(DavResource *res) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
178 | DavResource *child = res->children; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
179 | dav_resource_free(res); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
180 | while(child) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
181 | DavResource *next = child->next; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
182 | dav_resource_free_all(child); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
183 | child = next; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
184 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
185 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
186 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
187 | void resource_set_href(DavResource *res, sstr_t href) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
188 | res->href = sstrdup_a(res->session->mp->allocator, href).ptr; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
189 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
190 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | void resource_set_info(DavResource *res, char *href_str) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | char *url_str = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | curl_easy_getinfo(res->session->handle, CURLINFO_EFFECTIVE_URL, &url_str); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | sstr_t name = sstr(util_resource_name(href_str)); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | sstr_t href = sstr(href_str); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
196 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
197 | sstr_t base_href = sstr(util_url_path(res->session->base_url)); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | sstr_t path = sstrsubs(href, base_href.length - 1); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
200 | UcxAllocator *a = res->session->mp->allocator; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
201 | CURL *handle = res->session->handle; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
202 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
203 | int nlen = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
204 | char *uname = curl_easy_unescape(handle, name.ptr, name.length , &nlen); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
205 | int plen = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
206 | char *upath = curl_easy_unescape(handle, path.ptr, path.length, &plen); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
207 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
208 | res->name = sstrdup_a(a, sstrn(uname, nlen)).ptr; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
209 | res->href = sstrdup_a(a, href).ptr; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
210 | res->path = sstrdup_a(a, sstrn(upath, plen)).ptr; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
211 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
212 | curl_free(uname); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
213 | curl_free(upath); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
214 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
215 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
216 | DavResourceData* resource_data_new(DavSession *sn) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | DavResourceData *data = ucx_mempool_malloc( |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | sn->mp, |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | sizeof(DavResourceData)); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | if(!data) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | return NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | } |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
223 | data->properties = ucx_map_new_a(sn->mp->allocator, 32); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | data->set = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | data->remove = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | data->content = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | data->read = NULL; |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
228 | data->seek = NULL; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | data->length = 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | return data; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
233 | char* dav_resource_get_href(DavResource *resource) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
234 | if(!resource->href) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
235 | resource->href = dav_session_get_href( |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
236 | resource->session, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
237 | resource->path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
238 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
239 | return resource->href; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
240 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
241 | |
505 | 242 | void resource_add_property(DavResource *res, const char *ns, const char *name, xmlNode *val) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
243 | if(!val) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
244 | return; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | |
505 | 247 | sstr_t key = dav_property_key(ns, name); |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
248 | DavXmlNode *v = dav_convert_xml(res->session, val); |
505 | 249 | ucx_map_sstr_put(((DavResourceData*)res->data)->properties, key, v); |
250 | free(key.ptr); | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
251 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
252 | |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
253 | void resource_add_string_property(DavResource *res, char *ns, char *name, char *val) { |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
254 | if(!val) { |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
255 | return; |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
256 | } |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
257 | |
505 | 258 | sstr_t key = dav_property_key(ns, name); |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
259 | DavXmlNode *v = dav_text_node(res->session, val); |
505 | 260 | ucx_map_sstr_put(((DavResourceData*)res->data)->properties, key, v); |
261 | free(key.ptr); | |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
262 | } |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
263 | |
505 | 264 | DavXmlNode* resource_get_property(DavResource *res, const char *ns, const char *name) { |
265 | sstr_t keystr = dav_property_key(ns, name); | |
266 | UcxKey key = ucx_key(keystr.ptr, keystr.length); | |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
267 | DavXmlNode *property = resource_get_property_k(res, key); |
505 | 268 | free(keystr.ptr); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
269 | return property; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
270 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
271 | |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
272 | DavXmlNode* resource_get_property_k(DavResource *res, UcxKey key) { |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
273 | DavResourceData *data = (DavResourceData*)res->data; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
274 | return ucx_map_get(data->properties, key); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
275 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
276 | |
505 | 277 | sstr_t dav_property_key(const char *ns, const char *name) { |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
278 | return dav_property_key_a(ucx_default_allocator(), ns, name); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
279 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
280 | |
505 | 281 | sstr_t dav_property_key_a(UcxAllocator *a, const char *ns, const char *name) { |
282 | scstr_t ns_str = scstr(ns); | |
283 | scstr_t name_str = scstr(name); | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
284 | |
505 | 285 | return sstrcat_a(a, 4, ns_str, S("\0"), name_str, S("\0")); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
286 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
287 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
288 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
289 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
291 | void resource_add_child(DavResource *parent, DavResource *child) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
292 | child->next = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
293 | if(parent->children) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
294 | DavResource *last = parent->children; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
295 | while(last->next) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
296 | last = last->next; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
297 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
298 | last->next = child; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
299 | child->prev = last; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
300 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
301 | child->prev = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
302 | parent->children = child; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
303 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
304 | child->parent = parent; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
305 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
306 | |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
307 | static int resource_cmp(DavResource *res1, DavResource *res2, DavOrderCriterion *cr) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
308 | if(!(res1 && res2)) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
309 | return 0; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
310 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
311 | |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
312 | int ret; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
313 | if(cr->type == 0) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
314 | switch(cr->column.resprop) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
315 | case DAVQL_RES_NAME: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
316 | ret = strcmp(res1->name, res2->name); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
317 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
318 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
319 | case DAVQL_RES_PATH: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
320 | ret = strcmp(res1->path, res2->path); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
321 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
322 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
323 | case DAVQL_RES_HREF: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
324 | ret = strcmp(res1->href, res2->href); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
325 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
326 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
327 | case DAVQL_RES_CONTENTLENGTH: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
328 | int c = res1->contentlength == res2->contentlength; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
329 | ret = c ? 0 : (res1->contentlength < res2->contentlength?-1:1); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
330 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
331 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
332 | case DAVQL_RES_CONTENTTYPE: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
333 | ret = strcmp(res1->contenttype, res2->contenttype); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
334 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
335 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
336 | case DAVQL_RES_CREATIONDATE: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
337 | int c = res1->creationdate == res2->creationdate; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
338 | ret = c ? 0 : (res1->creationdate < res2->creationdate?-1:1); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
339 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
340 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
341 | case DAVQL_RES_LASTMODIFIED: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
342 | int c = res1->lastmodified == res2->lastmodified; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
343 | ret = c ? 0 : (res1->lastmodified < res2->lastmodified?-1:1); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
344 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
345 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
346 | case DAVQL_RES_ISCOLLECTION: { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
347 | int c = res1->iscollection == res2->iscollection; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
348 | ret = c ? 0 : (res1->iscollection < res2->iscollection?-1:1); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
349 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
350 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
351 | default: ret = 0; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
352 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
353 | } else if(cr->type == 1) { |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
354 | DavXmlNode *xvalue1 = resource_get_property_k(res1, cr->column.property); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
355 | DavXmlNode *xvalue2 = resource_get_property_k(res2, cr->column.property); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
356 | char *value1 = dav_xml_getstring(xvalue1); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
357 | char *value2 = dav_xml_getstring(xvalue2); |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
358 | if(!value1) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
359 | ret = value2 ? -1 : 0; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
360 | } else if(!value2) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
361 | ret = value1 ? 1 : 0; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
362 | } else { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
363 | ret = strcmp(value1, value2); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
364 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
365 | } else { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
366 | return 0; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
367 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
368 | |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
369 | return cr->descending ? -ret : ret; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
370 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
371 | |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
372 | void resource_add_ordered_child(DavResource *parent, DavResource *child, UcxList *ordercr) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
373 | if(!ordercr) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
374 | resource_add_child(parent, child); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
375 | return; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
376 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
377 | |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
378 | child->parent = parent; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
379 | |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
380 | if(!parent->children) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
381 | child->next = NULL; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
382 | child->prev = NULL; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
383 | parent->children = child; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
384 | } else { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
385 | DavResource *resource = parent->children; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
386 | while(resource) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
387 | int r = 0; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
388 | UCX_FOREACH(elm, ordercr) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
389 | DavOrderCriterion *cr = elm->data; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
390 | r = resource_cmp(child, resource, cr); |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
391 | if(r != 0) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
392 | break; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
393 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
394 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
395 | |
140 | 396 | if(r < 0) { |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
397 | // insert child before resource |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
398 | child->prev = resource->prev; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
399 | child->next = resource; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
400 | if(resource->prev) { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
401 | resource->prev->next = child; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
402 | } else { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
403 | parent->children = child; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
404 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
405 | resource->prev = child; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
406 | break; |
140 | 407 | } if(!resource->next) { |
408 | // append child | |
409 | child->prev = resource; | |
410 | child->next = NULL; | |
411 | resource->next = child; | |
412 | break; | |
139
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
413 | } else { |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
414 | resource = resource->next; |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
415 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
416 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
417 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
418 | } |
c6424aebcf5e
implemented davql order by
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
135
diff
changeset
|
419 | |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
420 | char* dav_get_string_property(DavResource *res, char *name) { |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
421 | char *pns; |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
422 | char *pname; |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
423 | dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
424 | if(!pns || !pname) { |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
425 | return NULL; |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
426 | } |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
427 | return dav_get_string_property_ns(res, pns, pname); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
428 | } |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
429 | |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
430 | char* dav_get_string_property_ns(DavResource *res, char *ns, char *name) { |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
431 | DavXmlNode *prop = dav_get_property_ns(res, ns, name); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
432 | if(!prop) { |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
433 | return NULL; |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
434 | } |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
435 | return dav_xml_getstring(prop); |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
436 | } |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
437 | |
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
438 | DavXmlNode* dav_get_property(DavResource *res, char *name) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
439 | char *pns; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
440 | char *pname; |
134
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
441 | dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
269
c89633916e36
fixes crash when using invalid namespace prefix
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
268
diff
changeset
|
442 | if(!pns || !pname) { |
c89633916e36
fixes crash when using invalid namespace prefix
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
268
diff
changeset
|
443 | return NULL; |
c89633916e36
fixes crash when using invalid namespace prefix
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
268
diff
changeset
|
444 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
445 | return dav_get_property_ns(res, pns, pname); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
446 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
447 | |
505 | 448 | DavXmlNode* dav_get_property_ns(DavResource *res, const char *ns, const char *name) { |
269
c89633916e36
fixes crash when using invalid namespace prefix
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
268
diff
changeset
|
449 | if(!ns || !name) { |
c89633916e36
fixes crash when using invalid namespace prefix
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
268
diff
changeset
|
450 | return NULL; |
c89633916e36
fixes crash when using invalid namespace prefix
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
268
diff
changeset
|
451 | } |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
452 | DavXmlNode *property = resource_get_property(res, ns, name); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
453 | DavResourceData *data = res->data; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
454 | // resource_get_property only returns persistent properties |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
455 | // check the remove and set list |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
456 | if(property) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
457 | // if the property is in the remove list, we return NULL |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
458 | UCX_FOREACH(elm, data->remove) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
459 | DavProperty *p = elm->data; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
460 | if(!strcmp(p->name, name) && !strcmp(p->ns->name, ns)) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
461 | return NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
462 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
463 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
464 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
465 | // the set list contains property updates |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
466 | // we return an updated property if possible |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
467 | UCX_FOREACH(elm, data->set) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
468 | DavProperty *p = elm->data; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
469 | if(!strcmp(p->name, name) && !strcmp(p->ns->name, ns)) { |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
470 | return p->value; // TODO: fix |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
471 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
472 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
473 | // no property update |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
474 | return property; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
475 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
476 | |
605
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
477 | static DavProperty* createprop(DavSession *sn, const char *ns, const char *name) { |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
478 | DavProperty *property = dav_session_malloc(sn, sizeof(DavProperty)); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
479 | property->name = dav_session_strdup(sn, name); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
480 | property->value = NULL; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
481 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
482 | DavNamespace *namespace = dav_session_malloc(sn, sizeof(DavNamespace)); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
483 | namespace->prefix = NULL; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
484 | namespace->name = dav_session_strdup(sn, ns); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
485 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
486 | property->ns = namespace; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
487 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
488 | return property; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
489 | } |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
490 | |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
491 | void dav_set_string_property(DavResource *res, char *name, char *value) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
492 | char *pns; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
493 | char *pname; |
134
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
494 | dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
495 | dav_set_string_property_ns(res, pns, pname, value); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
496 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
497 | |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
498 | void dav_set_string_property_ns(DavResource *res, char *ns, char *name, char *value) { |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
499 | UcxAllocator *a = res->session->mp->allocator; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
500 | DavResourceData *data = res->data; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
501 | |
605
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
502 | DavProperty *property = createprop(res->session, ns, name); |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
503 | property->value = dav_text_node(res->session, value); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
504 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
505 | data->set = ucx_list_append_a(a, data->set, property); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
506 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
507 | |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
508 | void dav_set_property(DavResource *res, char *name, DavXmlNode *value) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
509 | char *pns; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
510 | char *pname; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
511 | dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
512 | dav_set_property_ns(res, pns, pname, value); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
513 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
514 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
515 | void dav_set_property_ns(DavResource *res, char *ns, char *name, DavXmlNode *value) { |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
516 | UcxAllocator *a = res->session->mp->allocator; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
517 | DavResourceData *data = res->data; |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
518 | |
605
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
519 | DavProperty *property = createprop(res->session, ns, name); |
361
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
520 | property->value = value; // TODO: copy node? |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
521 | |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
522 | data->set = ucx_list_append_a(a, data->set, property); |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
523 | } |
b6f2462ee055
adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
355
diff
changeset
|
524 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
525 | void dav_remove_property(DavResource *res, char *name) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
526 | char *pns; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
527 | char *pname; |
134
4bccc18820e8
implemented execution of field list expressions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
100
diff
changeset
|
528 | dav_get_property_namespace_str(res->session->context, name, &pns, &pname); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
529 | dav_remove_property_ns(res, pns, pname); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
530 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
531 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
532 | void dav_remove_property_ns(DavResource *res, char *ns, char *name) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
533 | DavResourceData *data = res->data; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
534 | UcxAllocator *a = res->session->mp->allocator; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
535 | |
605
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
536 | DavProperty *property = createprop(res->session, ns, name); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
537 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
538 | data->remove = ucx_list_append_a(a, data->remove, property); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
539 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
540 | |
605
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
541 | void dav_set_encrypted_property_ns(DavResource *res, char *ns, char *name, DavXmlNode *value) { |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
542 | UcxAllocator *a = res->session->mp->allocator; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
543 | DavResourceData *data = res->data; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
544 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
545 | DavProperty *property = createprop(res->session, ns, name); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
546 | property->value = value; // TODO: copy node? |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
547 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
548 | data->crypto_set = ucx_list_append_a(a, data->crypto_set, property); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
549 | } |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
550 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
551 | void dav_set_encrypted_string_property_ns(DavResource *res, char *ns, char *name, char *value) { |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
552 | UcxAllocator *a = res->session->mp->allocator; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
553 | DavResourceData *data = res->data; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
554 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
555 | DavProperty *property = createprop(res->session, ns, name); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
556 | property->value = dav_text_node(res->session, value); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
557 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
558 | data->crypto_set = ucx_list_append_a(a, data->crypto_set, property); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
559 | } |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
560 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
561 | void dav_remove_encrypted_property_ns(DavResource *res, char *ns, char *name) { |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
562 | DavResourceData *data = res->data; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
563 | UcxAllocator *a = res->session->mp->allocator; |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
564 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
565 | DavProperty *property = createprop(res->session, ns, name); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
566 | |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
567 | data->crypto_remove = ucx_list_append_a(a, data->crypto_remove, property); |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
568 | } |
bbc66c72661a
add new api for encrypted properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
589
diff
changeset
|
569 | |
84
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
570 | static int compare_propname(const void *a, const void *b) { |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
571 | const DavPropName *p1 = a; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
572 | const DavPropName *p2 = b; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
573 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
574 | int result = strcmp(p1->ns, p2->ns); |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
575 | if(result) { |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
576 | return result; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
577 | } else { |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
578 | return strcmp(p1->name, p2->name); |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
579 | } |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
580 | } |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
581 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
582 | DavPropName* dav_get_property_names(DavResource *res, size_t *count) { |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
583 | DavResourceData *data = res->data; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
584 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
585 | *count = data->properties->count; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
586 | DavPropName *names = dav_session_calloc( |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
587 | res->session, |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
588 | *count, |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
589 | sizeof(DavPropName)); |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
590 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
591 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
592 | UcxMapIterator i = ucx_map_iterator(data->properties); |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
593 | void *value; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
594 | int j = 0; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
595 | UCX_MAP_FOREACH(key, value, i) { |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
596 | DavPropName *name = &names[j]; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
597 | // the map key is namespace + '\0' + name |
505 | 598 | name->ns = (char*)key.data; |
84
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
599 | for(int k=0;j<key.len;k++) { |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
600 | if(((char*)key.data)[k] == '\0') { |
146
e48048334602
hidden password input
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
144
diff
changeset
|
601 | name->name = (char*)key.data + k + 1; |
84
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
602 | break; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
603 | } |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
604 | } |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
605 | j++; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
606 | } |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
607 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
608 | qsort(names, *count, sizeof(DavPropName), compare_propname); |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
609 | |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
610 | return names; |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
611 | } |
7fca3788261d
added info command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
612 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
613 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
614 | void dav_set_content(DavResource *res, void *stream, dav_read_func read_func, dav_seek_func seek_func) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
615 | DavResourceData *data = res->data; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
616 | data->content = stream; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
617 | data->read = read_func; |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
618 | data->seek = seek_func; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
619 | data->length = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
620 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
621 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
622 | void dav_set_content_data(DavResource *res, char *content, size_t length) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
623 | DavSession *sn = res->session; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
624 | DavResourceData *data = res->data; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
625 | data->content = dav_session_malloc(sn, length); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
626 | memcpy(data->content, content, length); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
627 | data->read = NULL; |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
628 | data->seek = NULL; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
629 | data->length = length; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
630 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
631 | |
178
e137883e620f
using content-length header in dav put
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
155
diff
changeset
|
632 | void dav_set_content_length(DavResource *res, size_t length) { |
e137883e620f
using content-length header in dav put
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
155
diff
changeset
|
633 | DavResourceData *data = res->data; |
e137883e620f
using content-length header in dav put
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
155
diff
changeset
|
634 | data->length = length; |
e137883e620f
using content-length header in dav put
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
155
diff
changeset
|
635 | } |
e137883e620f
using content-length header in dav put
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
155
diff
changeset
|
636 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
637 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
638 | int dav_load(DavResource *res) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
639 | UcxBuffer *rqbuf = create_allprop_propfind_request(); |
135
664aeaec8d25
replaced old davql (still buggy)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
134
diff
changeset
|
640 | int ret = dav_propfind(res->session, res, rqbuf); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
641 | ucx_buffer_free(rqbuf); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
642 | return ret; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
643 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
644 | |
298
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
645 | int dav_load_prop(DavResource *res, DavPropName *properties, size_t numprop) { |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
646 | UcxMempool *mp = ucx_mempool_new(64); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
647 | |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
648 | UcxList *proplist = NULL; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
649 | for(size_t i=0;i<numprop;i++) { |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
650 | DavProperty *p = ucx_mempool_malloc(mp, sizeof(DavProperty)); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
651 | p->name = properties[i].name; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
652 | p->ns = ucx_mempool_malloc(mp, sizeof(DavNamespace)); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
653 | p->ns->name = properties[i].ns; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
654 | if(!strcmp(properties[i].ns, "DAV:")) { |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
655 | p->ns->prefix = "D"; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
656 | } else { |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
657 | p->ns->prefix = ucx_asprintf(mp->allocator, "x%d", i).ptr; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
658 | } |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
659 | p->value = NULL; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
660 | proplist = ucx_list_append_a(mp->allocator, proplist, p); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
661 | } |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
662 | |
475
52e4171d42ce
adds minimal deltav implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
441
diff
changeset
|
663 | UcxBuffer *rqbuf = create_propfind_request(res->session, proplist, "propfind", 0); |
298
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
664 | int ret = dav_propfind(res->session, res, rqbuf); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
665 | ucx_buffer_free(rqbuf); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
666 | ucx_mempool_destroy(mp); |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
667 | return ret; |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
668 | } |
755b8198b071
dav get-property shouldn't send an allprop propfind request
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
280
diff
changeset
|
669 | |
555
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
670 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
671 | /* |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
672 | * read wrapper with integrated hashing |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
673 | */ |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
674 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
675 | typedef struct { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
676 | DAV_SHA_CTX *sha; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
677 | void *stream; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
678 | dav_read_func read; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
679 | dav_seek_func seek; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
680 | int error; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
681 | } HashStream; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
682 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
683 | static void init_hash_stream(HashStream *hstr, void *stream, dav_read_func readfn, dav_seek_func seekfn) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
684 | hstr->sha = NULL; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
685 | hstr->stream = stream; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
686 | hstr->read = readfn; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
687 | hstr->seek = seekfn; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
688 | hstr->error = 0; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
689 | } |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
690 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
691 | static size_t dav_read_h(void *buf, size_t size, size_t nelm, void *stream) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
692 | HashStream *s = stream; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
693 | if(!s->sha) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
694 | s->sha = dav_hash_init(); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
695 | } |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
696 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
697 | size_t r = s->read(buf, size, nelm, s->stream); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
698 | dav_hash_update(s->sha, buf, r); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
699 | return r; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
700 | } |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
701 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
702 | static int dav_seek_h(void *stream, long offset, int whence) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
703 | HashStream *s = stream; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
704 | if(offset == 0 && whence == SEEK_SET) { |
558
1a9e6a5c1e79
fixes several signedness issues
Mike Becker <universe@uap-core.de>
parents:
555
diff
changeset
|
705 | unsigned char buf[DAV_SHA256_DIGEST_LENGTH]; |
555
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
706 | dav_hash_final(s->sha, buf); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
707 | s->sha = NULL; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
708 | } else { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
709 | s->error = 1; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
710 | } |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
711 | return s->seek(s->stream, offset, whence); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
712 | } |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
713 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
714 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
715 | int dav_store(DavResource *res) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
716 | DavSession *sn = res->session; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
717 | DavResourceData *data = res->data; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
718 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
719 | util_set_url(sn, dav_resource_get_href(res)); |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
720 | |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
721 | DavLock *lock = dav_get_lock(sn, res->path); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
722 | char *locktoken = lock ? lock->token : NULL; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
723 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
724 | // store content |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
725 | if(data->content) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
726 | int encryption = DAV_ENCRYPT_CONTENT(sn) && sn->key; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
727 | CURLcode ret; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
728 | if(encryption) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
729 | AESEncrypter *enc = NULL; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
730 | UcxBuffer *buf = NULL; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
731 | if(data->read) { |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
732 | enc = aes_encrypter_new( |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
733 | sn->key, |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
734 | data->content, |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
735 | data->read, |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
736 | data->seek); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
737 | } else { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
738 | buf = ucx_buffer_new(data->content, data->length, 0); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
739 | buf->size = data->length; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
740 | enc = aes_encrypter_new( |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
741 | sn->key, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
742 | buf, |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
743 | (dav_read_func)ucx_buffer_read, |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
744 | (dav_seek_func)dav_buffer_seek); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
745 | } |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
746 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
747 | // put resource |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
748 | ret = do_put_request( |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
749 | sn, |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
750 | locktoken, |
227
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
751 | TRUE, |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
752 | enc, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
753 | (dav_read_func)aes_read, |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
754 | (dav_seek_func)aes_encrypter_reset, |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
755 | 0); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
756 | |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
757 | // get sha256 hash |
555
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
758 | dav_get_hash(&enc->sha256, (unsigned char*)data->hash); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
759 | char *enc_hash = aes_encrypt(data->hash, DAV_SHA256_DIGEST_LENGTH, sn->key); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
760 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
761 | aes_encrypter_close(enc); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
762 | if(buf) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
763 | ucx_buffer_free(buf); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
764 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
765 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
766 | // add crypto properties |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
767 | // TODO: store the properties later |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
768 | if(resource_add_crypto_info(sn, res->href, res->name, enc_hash)) { |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
769 | free(enc_hash); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
770 | return 1; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
771 | } |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
772 | resource_add_string_property(res, DAV_NS, "crypto-hash", enc_hash); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
773 | free(enc_hash); |
555
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
774 | } else if((sn->flags & DAV_SESSION_STORE_HASH) == DAV_SESSION_STORE_HASH) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
775 | HashStream hstr; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
776 | UcxBuffer *iobuf = NULL; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
777 | if(!data->read) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
778 | iobuf = ucx_buffer_new(data->content, data->length, 0); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
779 | iobuf->size = data->length; |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
780 | init_hash_stream( |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
781 | &hstr, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
782 | iobuf, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
783 | (dav_read_func)ucx_buffer_read, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
784 | (dav_seek_func)ucx_buffer_seek); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
785 | } else { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
786 | init_hash_stream( |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
787 | &hstr, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
788 | data->content, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
789 | data->read, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
790 | data->seek); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
791 | } |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
792 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
793 | ret = do_put_request( |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
794 | sn, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
795 | locktoken, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
796 | TRUE, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
797 | &hstr, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
798 | dav_read_h, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
799 | (dav_seek_func)dav_seek_h, |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
800 | data->length); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
801 | |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
802 | if(hstr.sha) { |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
803 | dav_hash_final(hstr.sha, (unsigned char*)data->hash); |
558
1a9e6a5c1e79
fixes several signedness issues
Mike Becker <universe@uap-core.de>
parents:
555
diff
changeset
|
804 | char *hash = util_hexstr((unsigned char*)data->hash, 32); |
555
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
805 | dav_set_string_property_ns(res, DAV_NS, "content-hash", hash); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
806 | free(hash); |
c9ada14ee90e
add session flag for content hash creation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
807 | } |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
808 | } else { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
809 | ret = do_put_request( |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
810 | sn, |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
811 | locktoken, |
227
bf485439222a
fixed locking in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
225
diff
changeset
|
812 | TRUE, |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
813 | data->content, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
814 | data->read, |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
815 | data->seek, |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
816 | data->length); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
817 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
818 | |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
819 | long status = 0; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
820 | curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &status); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
821 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
822 | res->session->error = 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
823 | // cleanup node data |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
824 | if(!data->read) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
825 | ucx_mempool_free(sn->mp, data->content); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
826 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
827 | data->content = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
828 | data->read = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
829 | data->length = 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
830 | } else { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
831 | dav_session_set_error(sn, ret, status); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
832 | return 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
833 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
834 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
835 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
836 | // store properties |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
837 | int r = 0; |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
838 | sn->error = DAV_OK; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
839 | if(data->set || data->remove) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
840 | UcxBuffer *request = create_proppatch_request(data); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
841 | UcxBuffer *response = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND); |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
842 | //printf("request:\n%.*s\n\n", request->pos, request->space); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
843 | |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
844 | CURLcode ret = do_proppatch_request(sn, locktoken, request, response); |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
845 | long status = 0; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
846 | curl_easy_getinfo (sn->handle, CURLINFO_RESPONSE_CODE, &status); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
847 | if(ret == CURLE_OK && status == 207) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
848 | //printf("%s\n", response->space); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
849 | // TODO: parse response |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
850 | // TODO: cleanup node data correctly |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
851 | data->set = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
852 | data->remove = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
853 | } else { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
854 | dav_session_set_error(sn, ret, status); |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
855 | r = -1; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
856 | } |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
857 | |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
858 | ucx_buffer_free(request); |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
859 | ucx_buffer_free(response); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
860 | } |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
861 | |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
862 | return r; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
863 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
864 | |
477
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
865 | #if LIBCURL_VERSION_MAJOR >= 7 && LIBCURL_VERSION_MINOR >= 32 |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
866 | static void set_progressfunc(DavResource *res) { |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
867 | CURL *handle = res->session->handle; |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
868 | curl_easy_setopt(handle, CURLOPT_XFERINFOFUNCTION, dav_session_get_progress); |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
869 | curl_easy_setopt(handle, CURLOPT_XFERINFODATA, res); |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
870 | curl_easy_setopt(handle, CURLOPT_NOPROGRESS, 0L); |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
871 | } |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
872 | |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
873 | static void unset_progressfunc(DavResource *res) { |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
874 | CURL *handle = res->session->handle; |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
875 | curl_easy_setopt(handle, CURLOPT_XFERINFOFUNCTION, NULL); |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
876 | curl_easy_setopt(handle, CURLOPT_XFERINFODATA, NULL); |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
877 | curl_easy_setopt(handle, CURLOPT_NOPROGRESS, 1L); |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
878 | } |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
879 | #else |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
880 | static void set_progressfunc(DavResource *res) { |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
881 | |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
882 | } |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
883 | static void unset_progressfunc(DavResource *res) { |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
884 | |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
885 | } |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
886 | #endif |
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
887 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
888 | int dav_get_content(DavResource *res, void *stream, dav_write_func write_fnc) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
889 | DavSession *sn = res->session; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
890 | CURL *handle = sn->handle; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
891 | util_set_url(res->session, dav_resource_get_href(res)); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
892 | |
144
c2c02c9b3be4
dav-sync detects broken uploads
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
143
diff
changeset
|
893 | // check encryption |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
894 | AESDecrypter *dec = NULL; |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
895 | DavKey *key = NULL; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
896 | if(DAV_DECRYPT_CONTENT(sn)) { |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
897 | char *keyname = dav_get_string_property_ns(res, DAV_NS, "crypto-key"); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
898 | if(keyname) { |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
899 | key = dav_context_get_key(sn->context, keyname); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
900 | if(key) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
901 | dec = aes_decrypter_new(key, stream, write_fnc); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
902 | stream = dec; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
903 | write_fnc = (dav_write_func)aes_write; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
904 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
905 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
906 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
907 | |
74
da079dc0724c
fixed many memory leaks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
70
diff
changeset
|
908 | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, NULL); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
909 | curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, NULL); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
910 | curl_easy_setopt(handle, CURLOPT_PUT, 0L); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
911 | curl_easy_setopt(handle, CURLOPT_UPLOAD, 0L); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
912 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
913 | curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_fnc); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
914 | curl_easy_setopt(handle, CURLOPT_WRITEDATA, stream); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
915 | |
355
5da2cf15eb44
adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
916 | if(sn->get_progress) { |
477
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
917 | set_progressfunc(res); |
355
5da2cf15eb44
adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
918 | } |
5da2cf15eb44
adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
919 | |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
920 | long status = 0; |
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
921 | CURLcode ret = dav_session_curl_perform(sn, &status); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
922 | |
355
5da2cf15eb44
adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
923 | if(sn->get_progress) { |
477
9a406db6729b
makes libidav compatible with libcurl < 7.32
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
475
diff
changeset
|
924 | unset_progressfunc(res); |
355
5da2cf15eb44
adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
925 | } |
5da2cf15eb44
adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
926 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
927 | char *hash = NULL; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
928 | if(dec) { |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
929 | aes_decrypter_shutdown(dec); // get final bytes |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
930 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
931 | // get hash |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
348
diff
changeset
|
932 | unsigned char sha[DAV_SHA256_DIGEST_LENGTH]; |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
933 | dav_get_hash(&dec->sha256, sha); |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
348
diff
changeset
|
934 | hash = util_hexstr(sha, DAV_SHA256_DIGEST_LENGTH); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
935 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
936 | aes_decrypter_close(dec); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
937 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
938 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
939 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
940 | int verify_failed = 0; |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
941 | if(DAV_DECRYPT_CONTENT(sn) && key) { |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
942 | // try to verify the content |
331
9ca1e4706acc
adds initial support for xml properties in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
315
diff
changeset
|
943 | char *res_hash = dav_get_string_property_ns(res, DAV_NS, "crypto-hash"); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
944 | |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
945 | if(res_hash) { |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
946 | size_t len = 0; |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
947 | char *dec_hash = aes_decrypt(res_hash, &len, key); |
542
060a8cda7f62
adds wrapper functions for setting/getting the content hash
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
948 | char *hex_hash = util_hexstr((unsigned char*)dec_hash, len); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
949 | if(strcmp(hash, hex_hash)) { |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
950 | verify_failed = 1; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
951 | } |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
952 | free(dec_hash); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
953 | free(hex_hash); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
954 | } |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
955 | } |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
956 | if(hash) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
957 | free(hash); |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
958 | } |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
959 | |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
960 | if(verify_failed) { |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
961 | res->session->error = DAV_CONTENT_VERIFICATION_ERROR; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
962 | return 1; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
963 | } |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
964 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
965 | res->session->error = DAV_OK; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
966 | return 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
967 | } else { |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
968 | if(hash) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
969 | free(hash); |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
970 | } |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
971 | dav_session_set_error(res->session, ret, status); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
972 | return 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
973 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
974 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
975 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
976 | DavResource* dav_create_child(DavResource *parent, char *name) { |
42
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
977 | DavResource *res = dav_resource_new_child(parent->session, parent, name); |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
978 | if(dav_create(res)) { |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
979 | dav_resource_free(res); |
42
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
980 | return NULL; |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
981 | } else { |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
982 | return res; |
6518b035a9df
added some api functions
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
41
diff
changeset
|
983 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
984 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
985 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
986 | int dav_delete(DavResource *res) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
987 | CURL *handle = res->session->handle; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
988 | util_set_url(res->session, dav_resource_get_href(res)); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
989 | |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
990 | DavLock *lock = dav_get_lock(res->session, res->path); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
991 | char *locktoken = lock ? lock->token : NULL; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
992 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
993 | UcxBuffer *response = ucx_buffer_new(NULL, 4096, UCX_BUFFER_AUTOEXTEND); |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
994 | CURLcode ret = do_delete_request(res->session, locktoken, response); |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
995 | long status = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
996 | curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
997 | int r = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
998 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
999 | res->session->error = DAV_OK; |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
518
diff
changeset
|
1000 | res->exists = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1001 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1002 | // TODO: parse response |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1003 | // TODO: free res |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1004 | } else { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1005 | dav_session_set_error(res->session, ret, status); |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
1006 | r = 1; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1007 | } |
223
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
1008 | |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
1009 | ucx_buffer_free(response); |
cbbdf207e67e
fixed some bugs in dav_create() and dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
1010 | return r; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1011 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1012 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1013 | static int create_ancestors(DavSession *sn, char *href, char *path) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1014 | CURL *handle = sn->handle; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1015 | CURLcode code; |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1016 | |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1017 | DavLock *lock = dav_get_lock(sn, path); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1018 | char *locktoken = lock ? lock->token : NULL; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1019 | |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
1020 | long status = 0; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1021 | int ret = 0; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1022 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1023 | if(strlen(path) <= 1) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1024 | return 0; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1025 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1026 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1027 | char *p = util_parent_path(path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1028 | char *h = util_parent_path(href); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1029 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1030 | for(int i=0;i<2;i++) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1031 | util_set_url(sn, h); |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1032 | code = do_mkcol_request(sn, locktoken); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1033 | curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &status); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1034 | if(status == 201) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1035 | // resource successfully created |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1036 | char *name = util_resource_name(p); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1037 | int len = strlen(name); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1038 | if(name[len - 1] == '/') { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1039 | name[len - 1] = '\0'; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1040 | } |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
1041 | if(resource_add_crypto_info(sn, h, name, NULL)) { |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1042 | sn->error = DAV_ERROR; |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1043 | dav_session_set_errstr(sn, "Cannot set crypto properties for ancestor"); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1044 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1045 | break; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1046 | } else if(status == 405) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1047 | // parent already exists |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1048 | break; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1049 | } else if(status == 409) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1050 | // parent doesn't exist |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1051 | if(create_ancestors(sn, h, p)) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1052 | ret = 1; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1053 | break; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1054 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1055 | } else { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1056 | dav_session_set_error(sn, code, status); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1057 | ret = 1; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1058 | break; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1059 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1060 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1061 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1062 | free(p); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1063 | free(h); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1064 | return ret; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1065 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1066 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1067 | static int create_resource(DavResource *res, int *status) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1068 | DavSession *sn = res->session; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1069 | CURL *handle = sn->handle; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1070 | util_set_url(sn, dav_resource_get_href(res)); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1071 | |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1072 | DavLock *lock = dav_get_lock(res->session, res->path); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1073 | char *locktoken = lock ? lock->token : NULL; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1074 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1075 | CURLcode code; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1076 | if(res->iscollection) { |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1077 | code = do_mkcol_request(sn, locktoken); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1078 | } else { |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
477
diff
changeset
|
1079 | code = do_put_request(sn, locktoken, TRUE, "", NULL, NULL, 0); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1080 | } |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
1081 | long s = 0; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1082 | curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &s); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1083 | *status = s; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1084 | if(code == CURLE_OK && (s >= 200 && s < 300)) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1085 | sn->error = DAV_OK; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1086 | // if the session has encrypted file names, add crypto infos |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1087 | if(!resource_add_crypto_info(sn, res->href, res->name, NULL)) { |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1088 | // do a minimal propfind request |
475
52e4171d42ce
adds minimal deltav implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
441
diff
changeset
|
1089 | UcxBuffer *rqbuf = create_propfind_request(sn, NULL, "propfind", 0); |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1090 | int ret = dav_propfind(sn, res, rqbuf); |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1091 | ucx_buffer_free(rqbuf); |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1092 | return ret; |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1093 | } else { |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1094 | return 1; |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
223
diff
changeset
|
1095 | } |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1096 | } else { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1097 | dav_session_set_error(sn, code, s); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1098 | return 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1099 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1100 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1101 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1102 | int dav_create(DavResource *res) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1103 | int status; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1104 | if(!create_resource(res, &status)) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1105 | // resource successfully created |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
518
diff
changeset
|
1106 | res->exists = 1; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1107 | return 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1108 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1109 | |
441
99c26b1b7327
improves compatibility with owncloud/nextcloud when uploading files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
361
diff
changeset
|
1110 | if(status == 403 || status == 409 || status == 404) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1111 | // create intermediate collections |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1112 | if(create_ancestors(res->session, res->href, res->path)) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1113 | return 1; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1114 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1115 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1116 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1117 | return create_resource(res, &status); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1118 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1119 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1120 | int dav_exists(DavResource *res) { |
493
75a259ec8dea
fixes control flow in cmd_push()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
1121 | // TODO: reimplement with PROPFIND |
75a259ec8dea
fixes control flow in cmd_push()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
1122 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1123 | DavSession *sn = res->session; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1124 | CURL *handle = sn->handle; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1125 | util_set_url(sn, dav_resource_get_href(res)); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1126 | |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1127 | CURLcode ret = do_head_request(sn); |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
1128 | long status = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1129 | curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1130 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
518
diff
changeset
|
1131 | res->exists = 1; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1132 | return 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1133 | } else { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1134 | dav_session_set_error(sn, ret, status); |
525
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
518
diff
changeset
|
1135 | if(status == 404) { |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
518
diff
changeset
|
1136 | res->exists = 0; |
26a1d5b9d9d2
improves metadata support in dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
518
diff
changeset
|
1137 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1138 | return 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1139 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1140 | } |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1141 | |
186
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1142 | static int dav_cp_mv_url(DavResource *res, char *desturl, _Bool copy, _Bool override) { |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1143 | DavSession *sn = res->session; |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1144 | CURL *handle = sn->handle; |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1145 | util_set_url(sn, dav_resource_get_href(res)); |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1146 | |
236
6b4ce32d0c4e
copy/move with lock tokens works now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
227
diff
changeset
|
1147 | DavLock *lock = dav_get_lock(sn, res->path); |
6b4ce32d0c4e
copy/move with lock tokens works now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
227
diff
changeset
|
1148 | char *locktoken = lock ? lock->token : NULL; |
6b4ce32d0c4e
copy/move with lock tokens works now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
227
diff
changeset
|
1149 | |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1150 | CURLcode ret = do_copy_move_request(sn, desturl, locktoken, copy, override); |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1151 | |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
1152 | long status = 0; |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1153 | curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1154 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1155 | return 0; |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1156 | } else { |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1157 | dav_session_set_error(sn, ret, status); |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1158 | return 1; |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1159 | } |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1160 | } |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1161 | |
186
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1162 | static int dav_cp_mv(DavResource *res, char *newpath, _Bool copy, _Bool override) { |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1163 | char *dest = dav_session_get_href(res->session, newpath); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1164 | char *desturl = util_get_url(res->session, dest); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1165 | dav_session_free(res->session, dest); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1166 | |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1167 | int ret = dav_cp_mv_url(res, desturl, copy, override); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1168 | free(desturl); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1169 | return ret; |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1170 | } |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1171 | |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1172 | int dav_copy(DavResource *res, char *newpath) { |
182
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1173 | return dav_cp_mv(res, newpath, true, false); |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1174 | } |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1175 | |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1176 | int dav_move(DavResource *res, char *newpath) { |
182
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1177 | return dav_cp_mv(res, newpath, false, false); |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1178 | } |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1179 | |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1180 | int dav_copy_o(DavResource *res, char *newpath, DavBool override) { |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1181 | return dav_cp_mv(res, newpath, true, override); |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1182 | } |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1183 | |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1184 | int dav_move_o(DavResource *res, char *newpath, DavBool override) { |
ca07f14f7bfe
added override option for copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
1185 | return dav_cp_mv(res, newpath, false, override); |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1186 | } |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
178
diff
changeset
|
1187 | |
186
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1188 | int dav_copyto(DavResource *res, char *url, DavBool override) { |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1189 | return dav_cp_mv_url(res, url, true, override); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1190 | } |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1191 | |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1192 | int dav_moveto(DavResource *res, char *url, DavBool override) { |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1193 | return dav_cp_mv_url(res, url, false, override); |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1194 | } |
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
1195 | |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1196 | int dav_lock(DavResource *res) { |
315
7db4dbf4e6f9
adds lock timeout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
298
diff
changeset
|
1197 | return dav_lock_t(res, 0); |
7db4dbf4e6f9
adds lock timeout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
298
diff
changeset
|
1198 | } |
7db4dbf4e6f9
adds lock timeout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
298
diff
changeset
|
1199 | |
7db4dbf4e6f9
adds lock timeout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
298
diff
changeset
|
1200 | int dav_lock_t(DavResource *res, time_t timeout) { |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1201 | DavSession *sn = res->session; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1202 | CURL *handle = sn->handle; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1203 | util_set_url(sn, dav_resource_get_href(res)); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1204 | |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1205 | UcxBuffer *request = create_lock_request(); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1206 | UcxBuffer *response = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1207 | CURLcode ret = do_lock_request(sn, request, response, timeout); |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1208 | |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1209 | //printf("\nlock\n"); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1210 | //printf("%.*s\n\n", request->size, request->space); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1211 | //printf("%.*s\n\n", response->size, response->space); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1212 | |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
208
diff
changeset
|
1213 | ucx_buffer_free(request); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
208
diff
changeset
|
1214 | |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1215 | long status = 0; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1216 | curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1217 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1218 | LockDiscovery lock; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1219 | if(parse_lock_response(sn, response, &lock)) { |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1220 | sn->error = DAV_ERROR; |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
208
diff
changeset
|
1221 | ucx_buffer_free(response); |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1222 | return -1; |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1223 | } |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
208
diff
changeset
|
1224 | ucx_buffer_free(response); |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1225 | |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1226 | DavLock *l = dav_create_lock(sn, lock.locktoken, lock.timeout); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1227 | free(lock.locktoken); |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1228 | free(lock.timeout); |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1229 | |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1230 | int r = 0; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1231 | if(res->iscollection) { |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1232 | r = dav_add_collection_lock(sn, res->path, l); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1233 | } else { |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1234 | r = dav_add_resource_lock(sn, res->path, l); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1235 | } |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1236 | |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1237 | if(r == 0) { |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1238 | return 0; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1239 | } else { |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1240 | (void)dav_unlock(res); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1241 | sn->error = DAV_ERROR; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1242 | dav_destroy_lock(sn, l); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1243 | return -1; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1244 | } |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1245 | } else { |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1246 | dav_session_set_error(sn, ret, status); |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
208
diff
changeset
|
1247 | ucx_buffer_free(response); |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1248 | return -1; |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1249 | } |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1250 | } |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1251 | |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1252 | int dav_unlock(DavResource *res) { |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1253 | DavSession *sn = res->session; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1254 | CURL *handle = sn->handle; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1255 | util_set_url(sn, dav_resource_get_href(res)); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1256 | |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1257 | DavLock *lock = dav_get_lock(res->session, res->path); |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1258 | if(!lock) { |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1259 | sn->error = DAV_ERROR; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1260 | return -1; |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1261 | } |
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1262 | |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1263 | CURLcode ret = do_unlock_request(sn, lock->token); |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1264 | long status = 0; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1265 | curl_easy_getinfo (handle, CURLINFO_RESPONSE_CODE, &status); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1266 | if(ret == CURLE_OK && (status >= 200 && status < 300)) { |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1267 | dav_remove_lock(sn, res->path, lock); |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1268 | } else { |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1269 | dav_session_set_error(sn, ret, status); |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1270 | return 1; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1271 | } |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1272 | |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1273 | return 0; |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1274 | } |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
205
diff
changeset
|
1275 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1276 | |
505 | 1277 | int resource_add_crypto_info(DavSession *sn, const char *href, const char *name, const char *hash) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1278 | if(!DAV_IS_ENCRYPTED(sn)) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1279 | return 0; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1280 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1281 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
1282 | UcxBuffer *request = create_crypto_proppatch_request(sn, sn->key, name, hash); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1283 | UcxBuffer *response = ucx_buffer_new(NULL, 1024, UCX_BUFFER_AUTOEXTEND); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1284 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1285 | util_set_url(sn, href); |
208
1fb26aca5093
added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
1286 | // TODO: lock |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
1287 | CURLcode ret = do_proppatch_request(sn, NULL, request, response); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
1288 | ucx_buffer_free(request); |
205
bf756f6c3581
fixed some warnings and wrong usage of curl_easy_getinfo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
186
diff
changeset
|
1289 | long status = 0; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1290 | curl_easy_getinfo (sn->handle, CURLINFO_RESPONSE_CODE, &status); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1291 | if(ret == CURLE_OK && status == 207) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1292 | // TODO: parse response |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
1293 | sn->error = DAV_OK; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
1294 | ucx_buffer_free(response); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1295 | return 0; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1296 | } else { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1297 | dav_session_set_error(sn, ret, status); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
146
diff
changeset
|
1298 | ucx_buffer_free(response); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1299 | return 1; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1300 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
1301 | } |
587
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1302 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1303 | /* ----------------------------- crypto-prop ----------------------------- */ |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1304 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1305 | DavXmlNode* create_crypto_prop(DavSession *sn, UcxMap *properties) { |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1306 | if(!sn->key) { |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1307 | return NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1308 | } |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1309 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1310 | UcxBuffer *content = ucx_buffer_new(NULL, 2048, UCX_BUFFER_AUTOEXTEND); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1311 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1312 | // create an xml document containing all properties |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1313 | UcxMap *nsmap = ucx_map_new(8); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1314 | ucx_map_cstr_put(nsmap, "DAV:", strdup("D")); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1315 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1316 | ucx_buffer_puts(content, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1317 | ucx_buffer_puts(content, "<D:prop xmlns:D=\"DAV:\">\n"); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1318 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1319 | UcxMapIterator i = ucx_map_iterator(properties); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1320 | DavProperty *prop; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1321 | UCX_MAP_FOREACH(key, prop, i) { |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1322 | DavXmlNode pnode; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1323 | pnode.type = DAV_XML_ELEMENT; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1324 | pnode.namespace = prop->ns->name; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1325 | pnode.name = prop->name; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1326 | pnode.prev = NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1327 | pnode.next = NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1328 | pnode.children = prop->value; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1329 | pnode.parent = NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1330 | pnode.attributes = NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1331 | pnode.content = NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1332 | pnode.contentlength = 0; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1333 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1334 | dav_print_node(content, (write_func)ucx_buffer_write, nsmap, &pnode); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1335 | ucx_buffer_putc(content, '\n'); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1336 | } |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1337 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1338 | ucx_buffer_puts(content, "</D:prop>"); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1339 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1340 | ucx_map_free_content(nsmap, (ucx_destructor)free); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1341 | ucx_map_free(nsmap); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1342 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1343 | // encrypt xml document |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1344 | char *crypto_prop_content = aes_encrypt(content->space, content->size, sn->key); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1345 | ucx_buffer_free(content); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1346 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1347 | DavXmlNode *ret = NULL; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1348 | if(crypto_prop_content) { |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1349 | ret = dav_text_node(sn, crypto_prop_content); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1350 | free(crypto_prop_content); |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1351 | } |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1352 | return ret; |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1353 | } |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1354 | |
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1355 | UcxMap* parse_crypto_prop(DavSession *sn, DavXmlNode *node) { |
589
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1356 | if(!node || node->type != DAV_XML_TEXT || node->contentlength == 0) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1357 | return NULL; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1358 | } |
587
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1359 | |
589
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1360 | size_t len = 0; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1361 | char *dec_str = aes_decrypt(node->content, &len, sn->key); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1362 | |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1363 | xmlDoc *doc = xmlReadMemory(dec_str, len, NULL, NULL, 0); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1364 | free(dec_str); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1365 | if(!doc) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1366 | return NULL; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1367 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1368 | |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1369 | int err = 0; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1370 | xmlNode *xml_root = xmlDocGetRootElement(doc); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1371 | if(xml_root) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1372 | if( |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1373 | !xml_root->ns || |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1374 | !xstreq(xml_root->name, "prop") || |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1375 | !xstreq(xml_root->ns->href, "DAV:")) |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1376 | { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1377 | err = 1; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1378 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1379 | } else { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1380 | err = 1; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1381 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1382 | |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1383 | if(err) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1384 | xmlFreeDoc(doc); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1385 | return NULL; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1386 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1387 | |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1388 | // ready to get the properties |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1389 | UcxMap *map = ucx_map_new(32); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1390 | xmlNode *n = xml_root->children; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1391 | while(n) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1392 | if(n->type == XML_ELEMENT_NODE && n->ns && n->ns->href) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1393 | DavProperty *property = dav_session_malloc(sn, sizeof(DavProperty)); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1394 | property->name = dav_session_strdup(sn, (const char*)n->name); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1395 | property->ns = dav_session_malloc(sn, sizeof(DavNamespace)); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1396 | property->ns->name = dav_session_strdup(sn, (const char*)n->ns->href); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1397 | property->ns->prefix = n->ns->prefix ? |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1398 | dav_session_strdup(sn, (const char*)n->ns->prefix) : NULL; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1399 | property->value = n->children ? dav_convert_xml(sn, n->children) : NULL; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1400 | |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1401 | sstr_t key = dav_property_key(property->ns->name, property->name); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1402 | ucx_map_sstr_put(map, key, property); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1403 | free(key.ptr); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1404 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1405 | n = n->next; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1406 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1407 | |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1408 | xmlFreeDoc(doc); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1409 | if(map->count == 0) { |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1410 | ucx_map_free(map); |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1411 | return NULL; |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1412 | } |
2514559a6367
add function for decrypting and parsing crypto-prop elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
587
diff
changeset
|
1413 | return map; |
587
3c917df041b8
add func for creating the content of crypto-prop properties
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
1414 | } |