libidav/session.c

Sat, 22 Jun 2019 16:36:52 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 22 Jun 2019 16:36:52 +0200
changeset 607
5dc7fe41e8f8
parent 601
1fbca22dd700
child 742
7e67689241fd
permissions
-rw-r--r--

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

43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
404
5c08b8e14df8 updates copyright notice
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 355
diff changeset
4 * Copyright 2018 Olaf Wintermann. All rights reserved.
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
03076907b58a added file name encryption
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
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <string.h>
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <ucx/buffer.h>
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include <ucx/utils.h>
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include "utils.h"
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 #include "session.h"
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 #include "resource.h"
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 #include "methods.h"
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 DavSession* dav_session_new(DavContext *context, char *base_url) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 if(!base_url) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 return NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 sstr_t url = sstr(base_url);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 if(url.length == 0) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 return NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 DavSession *sn = malloc(sizeof(DavSession));
355
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
50 memset(sn, 0, sizeof(DavSession));
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 sn->mp = ucx_mempool_new(DAV_SESSION_MEMPOOL_SIZE);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 sn->pathcache = ucx_map_new_a(sn->mp->allocator, DAV_PATH_CACHE_SIZE);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 sn->key = NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 sn->errorstr = NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 sn->error = DAV_OK;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 sn->flags = 0;
497
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
57
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
58 dav_session_set_baseurl(sn, base_url);
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
59
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 sn->handle = curl_easy_init();
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 curl_easy_setopt(sn->handle, CURLOPT_FOLLOWLOCATION, 1L);
208
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
62
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
63 // create lock manager
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
64 DavLockManager *locks = ucx_mempool_malloc(sn->mp, sizeof(DavLockManager));
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
65 locks->resource_locks = ucx_map_new_a(sn->mp->allocator, 16);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
66 locks->collection_locks = NULL;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
67 sn->locks = locks;
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 // set proxy
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 DavProxy *proxy = sstrprefix(url, S("https")) ? context->https_proxy
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 : context->http_proxy;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 if (proxy->url) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 curl_easy_setopt(sn->handle, CURLOPT_PROXY, proxy->url);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 if (proxy->username) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 curl_easy_setopt(sn->handle, CURLOPT_PROXYUSERNAME,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 proxy->username);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 if (proxy->password) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 curl_easy_setopt(sn->handle, CURLOPT_PROXYPASSWORD,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 proxy->password);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 } else {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 // TODO: prompt
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 if(proxy->no_proxy) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 curl_easy_setopt(sn->handle, CURLOPT_NOPROXY,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 proxy->no_proxy);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 // set url
420
ad419882e06e sets curl default protocol to http
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 404
diff changeset
92 #if LIBCURL_VERSION_NUM >= 0x072D00
ad419882e06e sets curl default protocol to http
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 404
diff changeset
93 curl_easy_setopt(sn->handle, CURLOPT_DEFAULT_PROTOCOL, "http");
ad419882e06e sets curl default protocol to http
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 404
diff changeset
94 #endif
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 curl_easy_setopt(sn->handle, CURLOPT_URL, base_url);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96
68
f6d3db6113d3 added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents: 43
diff changeset
97 // add to context
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 context->sessions = ucx_list_append(context->sessions, sn);
68
f6d3db6113d3 added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents: 43
diff changeset
99 sn->context = context;
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 return sn;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 DavSession* dav_session_new_auth(
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 DavContext *context,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 char *base_url,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 char *user,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 char *password)
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 DavSession *sn = dav_session_new(context, base_url);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 if(!sn) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 return NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 dav_session_set_auth(sn, user, password);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 return sn;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 void dav_session_set_auth(DavSession *sn, char *user, char *password) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 if(user && password) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 size_t ulen = strlen(user);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 size_t plen = strlen(password);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 size_t upwdlen = ulen + plen + 2;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 char *upwdbuf = malloc(upwdlen);
104
6fb4d24d9df9 added davqlexec source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
124 snprintf(upwdbuf, upwdlen, "%s:%s", user, password);
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 curl_easy_setopt(sn->handle, CURLOPT_USERPWD, upwdbuf);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 free(upwdbuf);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129
497
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
130 void dav_session_set_baseurl(DavSession *sn, char *base_url) {
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
131 if(sn->base_url) {
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
132 ucx_mempool_free(sn->mp, sn->base_url);
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
133 }
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
134
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
135 sstr_t url = sstr(base_url);
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
136 if(url.ptr[url.length - 1] == '/') {
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
137 sstr_t url = sstrdup_a(sn->mp->allocator, sstr(base_url));
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
138 sn->base_url = url.ptr;
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
139 } else {
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
140 char *url_str = ucx_mempool_malloc(sn->mp, url.length + 2);
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
141 memcpy(url_str, base_url, url.length);
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
142 url_str[url.length] = '/';
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
143 url_str[url.length + 1] = '\0';
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
144 sn->base_url = url_str;
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
145 }
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
146 }
411bd1098175 fixes DavSession creation in dav-sync with enabled encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 496
diff changeset
147
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 void dav_session_enable_encryption(DavSession *sn, DavKey *key, int flags) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 sn->key = key;
68
f6d3db6113d3 added verbose option + encryption flag fixes
Mike Becker <universe@uap-core.de>
parents: 43
diff changeset
150 // TODO: review sanity
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151 if(flags != 0) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 sn->flags |= flags;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 } else {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154 sn->flags |= DAV_SESSION_ENCRYPT_CONTENT;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157
354
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
158 void dav_session_set_authcallback(DavSession *sn, dav_auth_func func, void *userdata) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
159 sn->auth_prompt = func;
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
160 sn->authprompt_userdata = userdata;
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
161 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
162
355
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
163 void dav_session_set_progresscallback(DavSession *sn, dav_progress_func get, dav_progress_func put, void *userdata) {
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
164 sn->get_progress = get;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
165 sn->put_progress = put;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
166 sn->progress_userdata = userdata;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
167 }
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
168
354
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
169 CURLcode dav_session_curl_perform(DavSession *sn, long *status) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
170 return dav_session_curl_perform_buf(sn, NULL, NULL, status);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
171 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
172
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
173 CURLcode dav_session_curl_perform_buf(DavSession *sn, UcxBuffer *request, UcxBuffer *response, long *status) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
174 CURLcode ret = curl_easy_perform(sn->handle);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
175 long http_status;
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
176 curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &http_status);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
177 if(ret == CURLE_OK && http_status == 401 && sn->auth_prompt) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
178 if(!sn->auth_prompt(sn, sn->authprompt_userdata)) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
179 if(request) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
180 ucx_buffer_seek(request, 0, SEEK_SET);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
181 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
182 if(response) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
183 ucx_buffer_seek(response, 0, SEEK_SET);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
184 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
185 ret = curl_easy_perform(sn->handle);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
186 curl_easy_getinfo(sn->handle, CURLINFO_RESPONSE_CODE, &http_status);
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
187 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
188 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
189 if(status) {
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
190 *status = http_status;
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
191 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
192 return ret;
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
193 }
067ea2315a8a moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 292
diff changeset
194
355
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
195 int dav_session_get_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
196 DavResource *res = clientp;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
197 DavSession *sn = res->session;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
198 if(sn->get_progress) {
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
199 sn->get_progress(res, (int64_t)dltotal, (int64_t)dlnow, sn->progress_userdata);
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
200 }
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
201 return 0;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
202 }
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
203
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
204 int dav_session_put_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) {
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
205 DavResource *res = clientp;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
206 DavSession *sn = res->session;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
207 if(sn->put_progress) {
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
208 sn->put_progress(res, (int64_t)ultotal, (int64_t)ulnow, sn->progress_userdata);
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
209 }
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
210 return 0;
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
211 }
5da2cf15eb44 adds primitive progress indicator
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 354
diff changeset
212
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
213 void dav_session_set_error(DavSession *sn, CURLcode c, int status) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
214 if(status > 0) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
215 switch(status) {
100
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
216 default: {
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
217 switch(c) {
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
218 default: sn->error = DAV_ERROR;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
219 }
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
220 break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
221 }
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
222 case 401: sn->error = DAV_UNAUTHORIZED; break;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
223 case 403: sn->error = DAV_FORBIDDEN; break;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
224 case 404: sn->error = DAV_NOT_FOUND; break;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
225 case 405: sn->error = DAV_METHOD_NOT_ALLOWED; break;
238
b167226fb804 added support for error codes 407,413,414 and 511
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
226 case 407: sn->error = DAV_PROXY_AUTH_REQUIRED; break;
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
227 case 409: sn->error = DAV_CONFLICT; break;
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 437
diff changeset
228 case 412: sn->error = DAV_PRECONDITION_FAILED; break;
238
b167226fb804 added support for error codes 407,413,414 and 511
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
229 case 413: sn->error = DAV_REQUEST_ENTITY_TOO_LARGE; break;
b167226fb804 added support for error codes 407,413,414 and 511
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
230 case 414: sn->error = DAV_REQUEST_URL_TOO_LONG; break;
207
de23f8881e9f fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 199
diff changeset
231 case 423: sn->error = DAV_LOCKED; break;
238
b167226fb804 added support for error codes 407,413,414 and 511
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
232 case 511: sn->error = DAV_NET_AUTH_REQUIRED; break;
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
233 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
234 } else {
100
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
235 switch(c) {
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
236 case CURLE_UNSUPPORTED_PROTOCOL: sn->error = DAV_UNSUPPORTED_PROTOCOL; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
237 case CURLE_COULDNT_RESOLVE_PROXY: sn->error = DAV_COULDNT_RESOLVE_PROXY; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
238 case CURLE_COULDNT_RESOLVE_HOST: sn->error = DAV_COULDNT_RESOLVE_HOST; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
239 case CURLE_COULDNT_CONNECT: sn->error = DAV_COULDNT_CONNECT; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
240 case CURLE_OPERATION_TIMEDOUT: sn->error = DAV_TIMEOUT; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
241 case CURLE_SSL_CONNECT_ERROR:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
242 case CURLE_PEER_FAILED_VERIFICATION:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
243 case CURLE_SSL_ENGINE_NOTFOUND:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
244 case CURLE_SSL_ENGINE_SETFAILED:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
245 case CURLE_SSL_CERTPROBLEM:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
246 case CURLE_SSL_CIPHER:
601
1fbca22dd700 fix incompatibility with libcurl 7.62
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 600
diff changeset
247 #ifndef CURLE_SSL_CACERT
100
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
248 case CURLE_SSL_CACERT:
601
1fbca22dd700 fix incompatibility with libcurl 7.62
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 600
diff changeset
249 #endif
100
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
250 case CURLE_SSL_CACERT_BADFILE:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
251 case CURLE_SSL_SHUTDOWN_FAILED:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
252 case CURLE_SSL_CRL_BADFILE:
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
253 case CURLE_SSL_ISSUER_ERROR: sn->error = DAV_SSL_ERROR; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
254 default: sn->error = DAV_ERROR; break;
f4127c4d1018 improved error messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
255 }
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
256 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
257 if(c != CURLE_OK) {
225
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
258 dav_session_set_errstr(sn, curl_easy_strerror(c));
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
259 } else {
225
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
260 dav_session_set_errstr(sn, NULL);
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
262 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
263
225
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
264 void dav_session_set_errstr(DavSession *sn, const char *str) {
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
265 if(sn->errorstr) {
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
266 dav_session_free(sn, sn->errorstr);
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
267 }
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
268 char *errstr = NULL;
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
269 if(str) {
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
270 errstr = dav_session_strdup(sn, str);
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
271 }
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
272 sn->errorstr = errstr;
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
273 }
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
274
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
275 void dav_session_destroy(DavSession *sn) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
276 // remove session from context
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 UcxList *sessions = sn->context->sessions;
505
481802342fdf ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 497
diff changeset
278 ssize_t i = ucx_list_find(sessions, sn, ucx_cmp_ptr, NULL);
74
da079dc0724c fixed many memory leaks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 68
diff changeset
279 if(i >= 0) {
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
280 UcxList *elm = ucx_list_get(sessions, i);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
281 if(elm) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
282 sn->context->sessions = ucx_list_remove(sessions, elm);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
283 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
284 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
285
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
286 ucx_mempool_destroy(sn->mp);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
287 curl_easy_cleanup(sn->handle);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
288 free(sn);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
289 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
290
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
291
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
292 void* dav_session_malloc(DavSession *sn, size_t size) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
293 return ucx_mempool_malloc(sn->mp, size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
294 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
295
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
296 void* dav_session_calloc(DavSession *sn, size_t nelm, size_t size) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
297 return ucx_mempool_calloc(sn->mp, nelm, size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
298 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
299
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
300 void* dav_session_realloc(DavSession *sn, void *ptr, size_t size) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
301 return ucx_mempool_realloc(sn->mp, ptr, size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
302 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
303
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
304 void dav_session_free(DavSession *sn, void *ptr) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
305 ucx_mempool_free(sn->mp, ptr);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
306 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
307
225
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
308 char* dav_session_strdup(DavSession *sn, const char *str) {
a297c2e28fa1 improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
309 return sstrdup_a(sn->mp->allocator, sstr((char*)str)).ptr;
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
310 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
311
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
312
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
313 char* dav_session_create_plain_href(DavSession *sn, char *path) {
437
70c7d8e437f9 fixes that decrypt-name can decrypt a path and not only the name
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 420
diff changeset
314 if(!DAV_ENCRYPT_NAME(sn) && !DAV_DECRYPT_NAME(sn)) {
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
315 // non encrypted file names
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
316 char *url = util_path_to_url(sn, path);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
317 char *href = dav_session_strdup(sn, util_url_path(url));
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
318 free(url);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
319 return href;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
320 } else {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
321 return NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
322 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
323 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
324
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
325 char* dav_session_get_href(DavSession *sn, char *path) {
437
70c7d8e437f9 fixes that decrypt-name can decrypt a path and not only the name
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 420
diff changeset
326 if(DAV_DECRYPT_NAME(sn) || DAV_ENCRYPT_NAME(sn)) {
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
327 sstr_t p = sstr(path);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
328 UcxBuffer *href = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
329 UcxBuffer *pbuf = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
330 int start = 0;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
331 int begin = 0;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
332
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
333 // check path cache
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
334 char *cp = strdup(path);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
335 //printf("cp: %s\n", cp);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
336 while(strlen(cp) > 1) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
337 char *cached = ucx_map_cstr_get(sn->pathcache, cp);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
338 if(cached) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
339 start = strlen(cp);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
340 begin = start;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
341 ucx_buffer_puts(href, cached);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
342 break;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
343 } else {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
344 // check, if the parent path is cached
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
345 char *f = cp;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
346 cp = util_parent_path(cp);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
347 free(f);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
348 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
349 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
350 free(cp);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
351 if(href->pos == 0) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
352 // if there are no cached elements we have to add the base url path
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
353 // to the href buffer
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
354 ucx_buffer_puts(href, util_url_path(sn->base_url));
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
355 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
356
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
357 // create resource for name lookup
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
358 sstr_t rp = sstrdup(sstrn(path, start));
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
359 DavResource *root = dav_resource_new(sn, rp.ptr);
150
37fb12574acd added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 135
diff changeset
360 free(rp.ptr);
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
361 resource_set_href(root, sstrn(href->space, href->pos));
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
362
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
363 // create request buffer for propfind requests
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
364 UcxBuffer *rqbuf = create_basic_propfind_request();
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
365
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
366 sstr_t remaining = sstrsubs(p, start);
74
da079dc0724c fixed many memory leaks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 68
diff changeset
367 ssize_t nelm = 0;
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
368 sstr_t *elms = sstrsplit(remaining, S("/"), &nelm);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
369 DavResource *res = root;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
370 ucx_buffer_puts(pbuf, res->path);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
371 // iterate over all remaining path elements
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
372 for(int i=0;i<nelm;i++) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
373 sstr_t elm = elms[i];
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
374 if(elm.length > 0) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
375 //printf("elm: %.*s\n", elm.length, elm.ptr);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
376 DavResource *child = dav_find_child(sn, res, rqbuf, elm.ptr);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
377
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
378 // if necessary add a path separator
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
379 if(pbuf->space[pbuf->pos-1] != '/') {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
380 if(href->space[href->pos-1] != '/') {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
381 ucx_buffer_putc(href, '/');
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
382 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
383 ucx_buffer_putc(pbuf, '/');
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
384 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
385 // add last path/href to the cache
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
386 sstr_t pp = sstrn(pbuf->space, pbuf->size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
387 sstr_t hh = sstrn(href->space, href->size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
388 dav_session_cache_path(sn, pp, hh);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
389
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
390 ucx_buffer_write(elm.ptr, 1, elm.length, pbuf);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
391 if(child) {
591
793af8666b3a fixes missing url encoding in dav_session_get_href() with enabled name decryption
Mike Becker <universe@uap-core.de>
parents: 505
diff changeset
392 // href is already URL encoded, so don't encode again
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
393 ucx_buffer_puts(href, util_resource_name(child->href));
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
394 res = child;
496
5979ea04175e fixes dav_session_get_href() generating random names when encrypt-name is disabled
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 491
diff changeset
395 } else if(DAV_ENCRYPT_NAME(sn)) {
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
396 char *random_name = util_random_str();
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
397 ucx_buffer_puts(href, random_name);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
398 free(random_name);
496
5979ea04175e fixes dav_session_get_href() generating random names when encrypt-name is disabled
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 491
diff changeset
399 } else {
591
793af8666b3a fixes missing url encoding in dav_session_get_href() with enabled name decryption
Mike Becker <universe@uap-core.de>
parents: 505
diff changeset
400 // path is not URL encoded, so we have to do this here
793af8666b3a fixes missing url encoding in dav_session_get_href() with enabled name decryption
Mike Becker <universe@uap-core.de>
parents: 505
diff changeset
401 scstr_t resname = scstr(util_resource_name(path));
600
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
402 // the name of collections ends with
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
403 // a trailing slash, which MUST NOT be encoded
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
404 if(resname.ptr[resname.length-1] == '/') {
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
405 char *esc = curl_easy_escape(sn->handle,
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
406 resname.ptr, resname.length-1);
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
407 ucx_buffer_write(esc, 1, strlen(esc), href);
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
408 ucx_buffer_putc(href, '/');
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
409 curl_free(esc);
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
410 } else {
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
411 char *esc = curl_easy_escape(sn->handle,
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
412 resname.ptr, resname.length);
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
413 ucx_buffer_write(esc, 1, strlen(esc), href);
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
414 curl_free(esc);
8e7f02fd7b9b fixes incorrect URL encoding of the trailing slash for collection names
Mike Becker <universe@uap-core.de>
parents: 591
diff changeset
415 }
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
416 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
417 }
151
a316613205dc fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 150
diff changeset
418
a316613205dc fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 150
diff changeset
419 // cleanup
a316613205dc fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 150
diff changeset
420 free(elm.ptr);
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
421 }
151
a316613205dc fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 150
diff changeset
422 free(elms);
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
423
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
424 // if necessary add a path separator
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
425 if(p.ptr[p.length-1] == '/') {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
426 if(href->space[href->pos-1] != '/') {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
427 ucx_buffer_putc(href, '/');
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
428 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
429 ucx_buffer_putc(pbuf, '/');
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
430 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
431 // add the final path to the cache
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
432 sstr_t pp = sstrn(pbuf->space, pbuf->size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
433 sstr_t hh = sstrn(href->space, href->size);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
434 dav_session_cache_path(sn, pp, hh);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
435
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
436 sstr_t href_str = sstrdup_a(
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
437 sn->mp->allocator,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
438 sstrn(href->space,
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
439 href->size));
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
440
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
441 // cleanup
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
442 dav_resource_free_all(root);
150
37fb12574acd added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 135
diff changeset
443 ucx_buffer_free(rqbuf);
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
444 ucx_buffer_free(pbuf);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
445 ucx_buffer_free(href);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
446
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
447 return href_str.ptr;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
448 } else {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
449 return dav_session_create_plain_href(sn, path);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
450 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
451 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
452
292
0a47ffc8b73b fixes wrong int type that results in a crash on some platforms
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 238
diff changeset
453 DavResource* dav_find_child(DavSession *sn, DavResource *res, UcxBuffer *rqbuf, char *name) {
135
664aeaec8d25 replaced old davql (still buggy)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 104
diff changeset
454 if(res && !dav_propfind(sn, res, rqbuf)) {
43
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
455 DavResource *child = res->children;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
456 while(child) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
457 if(!strcmp(child->name, name)) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
458 return child;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
459 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
460 child = child->next;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
461 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
462 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
463 return NULL;
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
464 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
465
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
466 void dav_session_cache_path(DavSession *sn, sstr_t path, sstr_t href) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
467 char *elm = ucx_map_sstr_get(sn->pathcache, path);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
468 if(!elm) {
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
469 href = sstrdup_a(sn->mp->allocator, href);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
470 ucx_map_sstr_put(sn->pathcache, path, href.ptr);
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
471 }
03076907b58a added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
472 }
208
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
473
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
474
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
475 DavLock* dav_create_lock(DavSession *sn, char *token, char *timeout) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
476 DavLock *lock = dav_session_malloc(sn, sizeof(DavLock));
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
477 lock->path = NULL;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
478 lock->token = dav_session_strdup(sn, token);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
479
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
480 // TODO: timeout
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
481
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
482 return lock;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
483 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
484
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
485 void dav_destroy_lock(DavSession *sn, DavLock *lock) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
486 dav_session_free(sn, lock->token);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
487 if(lock->path) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
488 dav_session_free(sn, lock->path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
489 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
490 dav_session_free(sn, lock);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
491 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
492
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
493 int dav_add_resource_lock(DavSession *sn, char *path, DavLock *lock) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
494 DavLockManager *locks = sn->locks;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
495 if(ucx_map_cstr_get(locks->resource_locks, path)) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
496 return -1;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
497 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
498
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
499 ucx_map_cstr_put(locks->resource_locks, path, lock);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
500 return 0;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
501 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
502
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
503 static void insert_lock(DavSession *sn, UcxList *elm, UcxList *newelm) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
504 UcxList *next = elm->next;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
505 if(next) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
506 next->prev = newelm;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
507 newelm->next = next;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
508 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
509 newelm->prev = elm;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
510 elm->next = newelm;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
511 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
512
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
513 int dav_add_collection_lock(DavSession *sn, char *path, DavLock *lock) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
514 DavLockManager *locks = sn->locks;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
515 if(!locks->collection_locks) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
516 locks->collection_locks = ucx_list_append_a(
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
517 sn->mp->allocator,
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
518 NULL,
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
519 lock);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
520 lock->path = dav_session_strdup(sn, path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
521 return 0;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
522 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
523
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
524 UcxList *elm = locks->collection_locks;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
525 for(;;) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
526 DavLock *l = elm->data;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
527 int cmp = strcmp(path, l->path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
528 if(cmp > 0) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
529 UcxList *newelm = ucx_list_append_a(sn->mp->allocator, NULL, lock);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
530 lock->path = dav_session_strdup(sn, path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
531 insert_lock(sn, elm, newelm);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
532 } else if(cmp == 0) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
533 return -1;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
534 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
535
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
536 if(elm->next) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
537 elm = elm->next;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
538 } else {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
539 UcxList *newelm = ucx_list_append_a(sn->mp->allocator, NULL, lock);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
540 lock->path = dav_session_strdup(sn, path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
541 ucx_list_concat(elm, newelm);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
542 break;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
543 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
544 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
545
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
546 return 0;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
547 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
548
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
549 DavLock* dav_get_lock(DavSession *sn, char *path) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
550 DavLockManager *locks = sn->locks;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
551
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
552 DavLock *lock = ucx_map_cstr_get(locks->resource_locks, path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
553 if(lock) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
554 return lock;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
555 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
556
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
557 sstr_t p = sstr(path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
558 UCX_FOREACH(elm, locks->collection_locks) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
559 DavLock *cl = elm->data;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
560 int cmd = strcmp(path, cl->path);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
561 if(cmd == 0) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
562 return cl;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
563 } else if(sstrprefix(p, sstr(cl->path))) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
564 return cl;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
565 } else if(cmd > 0) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
566 break;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
567 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
568 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
569
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
570 return NULL;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
571 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
572
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
573 void dav_remove_lock(DavSession *sn, char *path, DavLock *lock) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
574 DavLockManager *locks = sn->locks;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
575
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
576 if(ucx_map_cstr_remove(locks->resource_locks, path)) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
577 return;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
578 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
579
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
580 UcxList *rm = NULL;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
581 UCX_FOREACH(elm, locks->collection_locks) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
582 DavLock *cl = elm->data;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
583 if(cl == lock) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
584 rm = elm;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
585 break;
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
586 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
587 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
588
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
589 if(rm) {
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
590 locks->collection_locks = ucx_list_remove_a(
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
591 sn->mp->allocator,
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
592 locks->collection_locks,
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
593 rm);
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
594 }
1fb26aca5093 added API for webdav locking
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 207
diff changeset
595 }

mercurial