src/server/webdav/xattrbackend.c

Sat, 18 Mar 2023 15:52:35 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 18 Mar 2023 15:52:35 +0100
changeset 480
9f69e4b8b695
parent 479
2a42ba73ecdd
child 481
31affbf33911
permissions
-rw-r--r--

add libxattr

479
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2023 Olaf Wintermann. All rights reserved.
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
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
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include "xattrbackend.h"
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31
480
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
32 #include "../util/util.h"
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
33 #include "../util/libxattr.h"
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
34
479
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 static WebdavBackend webdav_xattr_backend = {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 webdav_xattr_propfind_init,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 webdav_xattr_propfind_do,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 webdav_xattr_propfind_finish,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 webdav_xattr_proppatch_do,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 webdav_xattr_proppatch_finish,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 NULL, // opt_mkcol
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 NULL, // opt_mkcol_finish
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 NULL, // opt_delete
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 NULL, // opt_delete_finish
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 WS_WEBDAV_PROPFIND_USE_VFS | WS_WEBDAV_PROPPATCH_USE_VFS, // settings
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 NULL, // instance
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 NULL // next
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 };
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 int webdav_init_xattr_backend(void) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 if(webdav_register_backend("xattr", webdav_xattr_init, webdav_xattr_create)) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 return 1;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 return 0;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 void* webdav_xattr_init(ServerConfiguration *cfg, pool_handle_t *pool, WSConfigNode *config) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 WebdavXAttrRepository *repo = pool_malloc(pool, sizeof(WebdavXAttrRepository));
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 if(!repo) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 return NULL;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 // TODO: config
480
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
67 repo->xattr_name = "webdav_properties";
479
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 return repo;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 WebdavBackend* webdav_xattr_create(Session *sn, Request *rq, pblock *pb, void *initData) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 WebdavBackend *dav = pool_malloc(sn->pool, sizeof(WebdavBackend));
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 if(!dav) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 return NULL;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 WebdavXAttrBackend *instance = pool_malloc(sn->pool, sizeof(WebdavXAttrBackend));
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 if(!instance) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 return NULL;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 instance->repo = initData;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 *dav = webdav_xattr_backend;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 dav->instance = instance;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 return dav;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 /* -------------------- webdav backend imlementation ----------------------*/
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 int webdav_xattr_propfind_init(
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 WebdavPropfindRequest *rq,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 const char *path,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 const char *href,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 WebdavPList **outplist)
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 {
480
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
100 // make sure the sys vfs is used, because currently only
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
101 // native sysfs xattr is supported
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
102 if(rq->rq->vfs) {
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
103 log_ereport(LOG_FAILURE, "webdav-propfind: xattr backend unsupported with non-native VFS");
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
104 return 1;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
105 }
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
106
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
107 XAttrPropfind *xprop = pool_malloc(rq->sn->pool, sizeof(XAttrPropfind));
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
108 if(!xprop) {
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
109 return 1;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
110 }
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
111 rq->userdata = xprop;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
112
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
113 xprop->base_href = href;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
114 xprop->base_path = path;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
115
479
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 return 0;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119 int webdav_xattr_propfind_do(
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 WebdavPropfindRequest *request,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 WebdavResponse *response,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 VFS_DIR parent,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 WebdavResource *resource,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 struct stat *s)
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 {
480
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
126 Session *sn = request->sn;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
127 Request *rq = request->rq;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
128
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
129 WebdavXAttrBackend *xdav = request->dav->instance;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
130 WebdavXAttrRepository *repo = xdav->repo;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
131 XAttrPropfind *xprop = request->userdata;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
132
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
133 const char *path;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
134 char *path_dp = NULL;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
135 if(!parent) {
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
136 // use base path
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
137 path = xprop->base_path;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
138 } else {
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
139 size_t base_href_len = strlen(xprop->base_href);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
140 size_t base_path_len = strlen(xprop->base_path);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
141 char *res_path = resource->href + base_href_len;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
142 size_t res_path_len = strlen(res_path);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
143
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
144 path_dp = pool_malloc(sn->pool, base_path_len + res_path_len + 2);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
145 memcpy(path_dp, xprop->base_path, base_path_len);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
146 int s = 0;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
147 if(path_dp[base_path_len-1] != '/' && res_path[0] != '/') {
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
148 path_dp[base_path_len] = '/';
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
149 s = 1;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
150 }
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
151 memcpy(path_dp + base_path_len + s, res_path, res_path_len);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
152 path_dp[base_path_len + s + res_path_len] = 0;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
153
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
154 path = path_dp;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
155 }
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
156
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
157 ssize_t xattr_data_len = 0;
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
158 char *xattr_data = xattr_get_alloc(
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
159 sn->pool,
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
160 (libxattr_malloc_func)pool_malloc,
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
161 (libxattr_free_func)pool_free,
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
162 path,
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
163 repo->xattr_name,
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
164 &xattr_data_len);
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
165
9f69e4b8b695 add libxattr
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 479
diff changeset
166
479
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 return 0;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 int webdav_xattr_propfind_finish(WebdavPropfindRequest *rq) {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 return 0;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174 int webdav_xattr_proppatch_do(
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 WebdavProppatchRequest *request,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 WebdavResource *response,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 VFSFile *file,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 WebdavPList **setInOut,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 WebdavPList **removeInOut)
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 return 0;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 }
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184 int webdav_xattr_proppatch_finish(
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 WebdavProppatchRequest *request,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 WebdavResource *response,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187 VFSFile *file,
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 WSBool commit)
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 {
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 return 0;
2a42ba73ecdd add new xattr based webdav backend (unimplemented)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191 }

mercurial