dav/scfg.c

Sun, 17 Dec 2023 14:25:34 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 17 Dec 2023 14:25:34 +0100
changeset 797
edbb20b1438d
parent 783
36a7f2ea7d12
child 816
839fefbdedc7
permissions
-rw-r--r--

[Makefile] fix missing rules preventing dry-runs

We have to support dry-runs, because many IDEs are using
dry-runs to collect build information.

Some rules have dependencies that expect certain files or
directories to be just present. We added respective build
rules which invoke the test program. This way, the behavior
when running make normally is exactly the same, but dry-runs
are also not failing now.

46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
576
62cc92445234 store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 549
diff changeset
4 * Copyright 2019 Olaf Wintermann. All rights reserved.
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0542668d0f26 added new sync tool
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
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include <string.h>
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
32 #include <errno.h>
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include <libidav/utils.h>
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
34 #include <cx/hash_map.h>
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
35 #include <cx/utils.h>
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
36 #include <cx/linked_list.h>
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
37 #include <cx/printf.h>
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 #include "scfg.h"
319
2433b5969d44 disables automatic creation of .dav directory in dav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 316
diff changeset
40 #include "config.h"
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 #define xstreq(a,b) xmlStrEqual(BAD_CAST a, BAD_CAST b)
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
44
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
45 #define print_error(lineno, ...) \
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
46 do {\
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
47 fprintf(stderr, "Error (sync.xml line %u): ", lineno); \
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
48 fprintf(stderr, __VA_ARGS__); \
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
49 fprintf(stderr, "Abort.\n"); \
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
50 } while(0);
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
51 #define print_warning(lineno, ...) \
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
52 do {\
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
53 fprintf(stderr, "Warning (sync.xml line %u): ", lineno); \
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
54 fprintf(stderr, __VA_ARGS__); \
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
55 } while(0);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
56
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 #ifdef _WIN32
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 #define ENV_HOME getenv("USERPROFILE")
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 #else
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 #define ENV_HOME getenv("HOME")
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 #endif /* _WIN32 */
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
63 static CxMap *directories;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
65 CxIterator scfg_directory_iterator() {
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
66 return cxMapIteratorValues(directories);
256
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
67 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
68
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
69 static int create_default_sync_config(char *file) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
70 FILE *out = fopen(file, "w");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
71 if(!out) {
253
1d2be1b31e70 There has never been deliberately fucked up error handling for missing sync.xml.
Mike Becker <universe@uap-core.de>
parents: 252
diff changeset
72 perror("Cannot create config file");
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
73 return -1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
74 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
75
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
76 fputs("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n", out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
77 fputs("<configuration>\n", out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
78 fputs("</configuration>\n", out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
79 fclose(out);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
80
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
81 return 0;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
82 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
83
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
84 static void add_regex_pattern(CxList *list, char *value,
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
85 unsigned short xmlline) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
86 regex_t regex;
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
87 if (regcomp(&regex, value, REG_EXTENDED|REG_NOSUB)) {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
88 print_warning(xmlline,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
89 "Invalid regular expression (%s) ... skipped\n", value);
58
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
90 } else {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
91 cxListAdd(list, &regex);
58
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
92 }
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
93 }
1708cba82ca3 added include / exclude patterns
Mike Becker <universe@uap-core.de>
parents: 56
diff changeset
94
401
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
95 static int scfg_load_filter(
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
96 xmlNode *node,
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
97 CxList *include,
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
98 CxList *exclude,
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
99 CxList *tags)
401
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
100 {
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
101 node = node->children;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
102
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
103 while(node) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
104 if(node->type == XML_ELEMENT_NODE) {
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
105 char *value = util_xml_get_text(node);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
106 if(xstreq(node->name, "include")) {
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
107 if(value) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
108 add_regex_pattern(include, value, node->line);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
109 }
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
110 } else if(xstreq(node->name, "exclude")) {
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
111 if(value) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
112 add_regex_pattern(exclude, value, node->line);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
113 }
401
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
114 } else if(xstreq(node->name, "tags")) {
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
115 if(value) {
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
116 SyncTagFilter *tagfilter = parse_tagfilter_string(
414
ea50585ec9d9 adds tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 402
diff changeset
117 value, DAV_SYNC_TAGFILTER_SCOPE_RESOURCE);
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
118 if(!tagfilter) {
401
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
119 print_error(
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
120 node->line,
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
121 "malformed tag filter: %s\n",
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
122 value);
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
123 return 1;
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
124 } else {
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
125 // get scope
425
ae4d89c3477c fixes dav list return value
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 417
diff changeset
126 xmlChar *scope = xmlGetNoNsProp(node, BAD_CAST "scope");
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
127 if(scope) {
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
128 if(xstreq(scope, "resource"))
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
129 {
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
130 tagfilter->scope =
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
131 DAV_SYNC_TAGFILTER_SCOPE_RESOURCE;
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
132 } else if(xstreq(scope, "collection")) {
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
133 tagfilter->scope =
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
134 DAV_SYNC_TAGFILTER_SCOPE_COLLECTION;
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
135 } else if(xstreq(scope, "all")) {
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
136 tagfilter->scope =
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
137 DAV_SYNC_TAGFILTER_SCOPE_RESOURCE
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
138 | DAV_SYNC_TAGFILTER_SCOPE_COLLECTION;
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
139 } else {
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
140 tagfilter->scope =
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
141 DAV_SYNC_TAGFILTER_SCOPE_RESOURCE;
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
142 }
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
143 }
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
144 xmlFree(scope);
417
f340460a8b5d disables tagfilter for directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 416
diff changeset
145
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
146 cxListAdd(tags, tagfilter);
401
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
147 }
3bb3210f3e6e adds syncdir config element for tag filters
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 368
diff changeset
148 }
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
149 } else {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
150 print_error(node->line,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
151 "unknown filter config element: %s\n", node->name);
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
152 return 1;
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
153 }
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
154 if(!value) {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
155 print_error(node->line,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
156 "missing value for filter: %s\n", node->name);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
157 return 1;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
158 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
159 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
160
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
161 node = node->next;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
162 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
163
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
164 return 0;
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
165 }
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
166
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
167 Filter* parse_filter(xmlNode *node) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
168 CxList *include = cxLinkedListCreate(cxDefaultAllocator, NULL, sizeof(regex_t));
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
169 CxList *exclude = cxLinkedListCreate(cxDefaultAllocator, NULL, sizeof(regex_t));
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
170 CxList *tags = cxLinkedListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS);
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
171
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
172 include->simple_destructor = (cx_destructor_func)regfree;
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
173 exclude->simple_destructor = (cx_destructor_func)regfree;
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
174 // TODO: set tags destructor
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
175
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
176 if(scfg_load_filter(node, include, exclude, tags)) {
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
177 return NULL;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
178 }
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
179
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
180 Filter *filter = malloc(sizeof(Filter));
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
181 filter->include = include;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
182 filter->exclude = exclude;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
183 filter->tags = tags;
658
67c9f88b13c7 adds missing return in parse_filter()
Mike Becker <universe@uap-core.de>
parents: 649
diff changeset
184 return filter;
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
185 }
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
186
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
187 void init_default_filter(Filter *filter) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
188 if(filter->include->size == 0) {
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
189 regex_t matchall;
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
190 regcomp(&matchall, ".*", REG_NOSUB);
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
191 cxListAdd(filter->include, &matchall);
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
192 }
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
193 /*
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
194 if(!filter->exclude) {
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
195 regex_t *matchnothing = malloc(sizeof(regex_t));
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
196 regcomp(matchnothing, "///", REG_NOSUB);
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
197 filter->exclude = ucx_list_append(NULL, matchnothing);
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
198 }
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
199 */
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
200 }
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
201
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
202 static TagFormat str2tagformat(const char *str) {
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
203 if(!strcmp(str, "text")) {
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
204 return TAG_FORMAT_TEXT;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
205 } else if(!strcmp(str, "csv")) {
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
206 return TAG_FORMAT_CSV;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
207 } else if(!strcmp(str, "xml")) {
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
208 return TAG_FORMAT_XML;
363
e9ed8e130ccf adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 361
diff changeset
209 } else if(!strcmp(str, "macos")) {
e9ed8e130ccf adds support for macos file tags
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 361
diff changeset
210 return TAG_FORMAT_MACOS;
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
211 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
212 return TAG_FORMAT_UNKNOWN;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
213 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
214
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
215 #define CHECK_VALUE_RET_NULL(element, value) if(!(value)) \
664
d066a89d5e87 fix tagconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 661
diff changeset
216 {print_error(element->line, "missing value element: %s\n", element->name); return NULL;}
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
217
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
218 static TagConfig* parse_tagconfig(xmlNode *node) {
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
219 TagConfig conf;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
220 conf.store = TAG_STORE_XATTR;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
221 conf.local_format = TAG_FORMAT_TEXT;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
222 conf.server_format = TAG_FORMAT_XML;
368
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
223 conf.xattr_name = NULL;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
224 conf.detect_changes = false;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
225 conf.conflict = TAG_NO_CONFLICT;
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
226 xmlNode *c = node->children;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
227
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
228 // TODO: error handling
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
229 while(c) {
367
4a6a59f89f9f adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 364
diff changeset
230 if(c->type == XML_ELEMENT_NODE) {
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
231 char *value = util_xml_get_text(c);
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
232 if(xstreq(c->name, "local-store")) {
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
233 CHECK_VALUE_RET_NULL(c, value);
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
234 if(xstreq(value, "xattr")) {
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
235 conf.store = TAG_STORE_XATTR;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
236 } else {
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
237 return NULL;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
238 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
239
425
ae4d89c3477c fixes dav list return value
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 417
diff changeset
240 xmlChar *format = xmlGetNoNsProp(node, BAD_CAST "format");
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
241 if(format) {
425
ae4d89c3477c fixes dav list return value
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 417
diff changeset
242 conf.local_format = str2tagformat((char*)format);
416
d7a086201a6e adds attribute for tagfilter scope
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 414
diff changeset
243 xmlFree(format);
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
244 }
368
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
245 } else if(xstreq(c->name, "detect-changes")) {
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
246 CHECK_VALUE_RET_NULL(c, value);
368
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
247 conf.detect_changes = util_getboolean(value);
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
248 } else if(xstreq(c->name, "xattr-name")) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
249 if(!value) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
250 return NULL;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
251 }
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
252 conf.xattr_name = strdup(value);
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
253 } else if(xstreq(c->name, "on-conflict")) {
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
254 CHECK_VALUE_RET_NULL(c, value);
368
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
255 if(xstreq(value, "no_conflict")) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
256 conf.conflict = TAG_NO_CONFLICT;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
257 } else if(xstreq(value, "keep_local")) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
258 conf.conflict = TAG_KEEP_LOCAL;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
259 } else if(xstreq(value, "keep_remote")) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
260 conf.conflict = TAG_KEEP_REMOTE;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
261 } else if(xstreq(value, "merge")) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
262 conf.conflict = TAG_MERGE;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
263 } else {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
264 fprintf(stderr, "on-conflict: unknown value: %s\n", value);
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
265 return NULL;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
266 }
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
267 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
268 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
269 c = c->next;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
270 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
271
368
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
272 if(conf.store == TAG_STORE_XATTR && !conf.xattr_name) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
273 switch(conf.local_format) {
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
274 default:
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
275 case TAG_FORMAT_TEXT:
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
276 case TAG_FORMAT_CSV:
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
277 case TAG_FORMAT_XML: conf.xattr_name = strdup(DEFAULT_TAG_XATTR); break;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
278 case TAG_FORMAT_MACOS: conf.xattr_name = strdup(MACOS_TAG_XATTR); break;
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
279 }
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
280 }
11797f33bc24 adds more tag config options
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 367
diff changeset
281
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
282 TagConfig *tagconfig = malloc(sizeof(TagConfig));
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
283 *tagconfig = conf;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
284 return tagconfig;
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
285 }
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
286
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
287 static SplitConfig* parse_split(xmlNode *node) {
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
288 Filter *filter = NULL;
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
289 char *minsize = NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
290 char *blocksize = NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
291
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
292 xmlNode *c = node->children;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
293 while(c) {
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
294 if(xstreq(c->name, "filter")) {
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
295 filter = parse_filter(node);
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
296 if(filter->tags) {
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
297 fprintf(stderr, "splitconfig: tag filter not supported\n");
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
298 free_filter(*filter);
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
299 free(filter);
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
300 return NULL;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
301 }
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
302 } else if(xstreq(c->name, "minsize")) {
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
303 minsize = util_xml_get_text(c);
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
304 } else if(xstreq(c->name, "blocksize")) {
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
305 blocksize = util_xml_get_text(c);
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
306 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
307 c = c->next;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
308 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
309
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
310 uint64_t sz = 0;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
311 if(!blocksize) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
312 fprintf(stderr, "splitconfig: no blocksize specified\n");
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
313 return NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
314 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
315 size_t bsz_len = strlen(blocksize);
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
316 if(bsz_len < 2) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
317 fprintf(stderr, "splitconfig: blocksize too small\n");
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
318 return NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
319 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
320
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
321 if(!util_szstrtouint(blocksize, &sz)) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
322 fprintf(stderr, "splitconfig: blocksize is not a number\n");
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
323 return NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
324 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
325
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
326 if(!filter && !minsize) {
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
327 fprintf(stderr, "splitconfig: filter or minsize must be specified\n");
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
328 return NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
329 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
330
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
331 int64_t minsz = -1;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
332 if(minsize) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
333 uint64_t m;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
334 if(!util_szstrtouint(minsize, &m)) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
335 fprintf(stderr, "splitconfig: minsize is not a number\n");
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
336 return NULL;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
337 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
338 minsz = (int64_t)m;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
339 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
340
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
341 SplitConfig *sc = calloc(1, sizeof(SplitConfig));
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
342 if(filter) {
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
343 init_default_filter(filter);
536
877f7c4a203b adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 534
diff changeset
344 }
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
345 sc->minsize = minsz;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
346 sc->blocksize = (size_t)sz;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
347 return sc;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
348 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
349
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
350 static CxList* parse_splitconfig(xmlNode *node, int *error) {
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
351 CxList *splitconfig = cxLinkedListCreateSimple(CX_STORE_POINTERS);
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
352 int err = 0;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
353 xmlNode *c = node->children;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
354 while(c) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
355 if(c->type == XML_ELEMENT_NODE && xstreq(c->name, "split")) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
356 SplitConfig *sc = parse_split(c);
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
357 if(sc) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
358 cxListAdd(splitconfig, sc);
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
359 } else {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
360 err = 1;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
361 break;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
362 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
363 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
364 c = c->next;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
365 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
366
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
367 if(error) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
368 *error = err;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
369 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
370 return splitconfig;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
371 }
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
372
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
373 static Versioning* parse_versioning_config(xmlNode *node) {
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
374 Versioning v;
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
375 v.always = FALSE;
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
376 v.type = VERSIONING_SIMPLE;
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
377 v.collection = VERSIONING_DEFAULT_PATH;
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
378
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
379 int err = 0;
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
380
692
56b66fe2b4f5 fix dav-sync deltav versioning
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 679
diff changeset
381 xmlChar *attr_type = xmlGetNoNsProp(node, BAD_CAST "type");
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
382 xmlChar *attr_always = xmlGetNoNsProp(node, BAD_CAST "always");
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
383
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
384 if(attr_type) {
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
385 if(xstreq(attr_type, "simple")) {
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
386 v.type = VERSIONING_SIMPLE;
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
387 } else if(xstreq(attr_type, "deltav")) {
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
388 v.type = VERSIONING_DELTAV;
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
389 } else {
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
390 print_error(node->line,
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
391 "type attribute: unknown value: %s\n",
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
392 attr_type);
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
393 err = 1;
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
394 }
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
395 xmlFree(attr_type);
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
396 }
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
397 if(attr_always) {
700
165811ea12ab add documentation for all new config elements
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 692
diff changeset
398 v.always = util_getboolean((const char*)attr_always);
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
399 xmlFree(attr_always);
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
400 }
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
401
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
402 if(err) {
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
403 return NULL;
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
404 }
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
405
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
406 xmlNode *c = node->children;
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
407 while(c) {
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
408 if(c->type == XML_ELEMENT_NODE) {
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
409 char *value = util_xml_get_text(c);
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
410 if(xstreq(c->name, "history")) {
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
411 CHECK_VALUE_RET_NULL(c, value);
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
412 v.collection = value;
647
8bf1d9688698 change versioning config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 646
diff changeset
413 }
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
414 }
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
415 c = c->next;
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
416 }
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
417
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
418 v.collection = strdup(v.collection);
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
419
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
420 Versioning *versioning = malloc(sizeof(Versioning));
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
421 *versioning = v;
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
422 return versioning;
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
423 }
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
424
256
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
425 static int scfg_load_directory(xmlNode *node) {
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
426 char *name = NULL;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
427 char *path = NULL;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
428 char *trash = NULL;
56
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
429 char *collection = NULL;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
430 char *repository = NULL;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
431 char *database = NULL;
778
bf53db813cc9 add logfile sync config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 747
diff changeset
432 char *logfile = NULL;
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
433 TagConfig *tagconfig = NULL;
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
434 Versioning *versioning = NULL;
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
435 CxList *include = cxLinkedListCreateSimple(sizeof(regex_t));
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
436 CxList *exclude = cxLinkedListCreateSimple(sizeof(regex_t));
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
437 CxList *tagfilter = cxLinkedListCreateSimple(CX_STORE_POINTERS);
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
438 CxList *splitconfig = NULL;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
439 int max_retry = 0;
490
d94c4fd35c21 adds dav-sync restore command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 426
diff changeset
440 int allow_cmd = SYNC_CMD_PULL | SYNC_CMD_PUSH
d94c4fd35c21 adds dav-sync restore command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 426
diff changeset
441 | SYNC_CMD_ARCHIVE | SYNC_CMD_RESTORE;
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
442 bool backuppull = false;
221
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
443 bool lockpull = false;
232
df3fa8637a58 disabled locking in dav-sync by default
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 226
diff changeset
444 bool lockpush = false;
549
af91d3c96994 add hashing config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 539
diff changeset
445 bool hashing = false;
630
046b869a1c49 use hash to check if a file content was really modified
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 623
diff changeset
446 bool store_hash = false;
649
0f4c59ac8c74 implement hash based conflict resolution in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 648
diff changeset
447 bool pull_skip_hashing = false;
623
7870656d302d add element for configuring symlinks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 576
diff changeset
448 //bool detect_copy = false;
316
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
449 time_t lock_timeout = 0;
522
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
450 uint32_t metadata = 0;
623
7870656d302d add element for configuring symlinks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 576
diff changeset
451 uint32_t symlink = 0;
642
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
452 PushStrategy pushstrat = PUSH_STRATEGY_METADATA;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
453
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
454 unsigned short parentlineno = node->line;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
455 node = node->children;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
456 while(node) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
457 if(node->type == XML_ELEMENT_NODE) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
458 char *value = util_xml_get_text(node);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
459 /* every key needs a value */
679
0d352b79363a fix some versioning related bugs and add tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 664
diff changeset
460 if(!value && !xstreq(node->name, "versioning")) {
0d352b79363a fix some versioning related bugs and add tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 664
diff changeset
461 // TODO: only report if value is required
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
462 print_error(node->line,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
463 "missing value for directory element: %s\n",
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
464 node->name);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
465 return 1;
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
466 }
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
467 if(xstreq(node->name, "name")) {
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
468 name = value;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
469 } else if(xstreq(node->name, "path")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
470 path = value;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
471 } else if(xstreq(node->name, "trash")) {
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
472 trash = value;
56
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
473 } else if(xstreq(node->name, "collection")) {
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
474 collection = value;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
475 } else if(xstreq(node->name, "repository")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
476 repository = value;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
477 } else if(xstreq(node->name, "filter")) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
478 if(scfg_load_filter(node, include, exclude, tagfilter)) {
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
479 return 1;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
480 }
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
481 } else if(xstreq(node->name, "database")) {
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
482 database = value;
778
bf53db813cc9 add logfile sync config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 747
diff changeset
483 } else if(xstreq(node->name, "logfile")) {
bf53db813cc9 add logfile sync config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 747
diff changeset
484 logfile = value;
426
9cec06cfeade renames <tags> element to <tagconfig>
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 425
diff changeset
485 } else if(xstreq(node->name, "tagconfig")) {
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
486 tagconfig = parse_tagconfig(node);
534
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
487 } else if(xstreq(node->name, "splitconfig")) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
488 int err = 0;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
489 splitconfig = parse_splitconfig(node, &err);
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
490 if(err) {
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
491 return 1;
9a4857d6444e adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
492 }
522
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
493 } else if(xstreq(node->name, "metadata")) {
646
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
494 uint32_t md = 0;
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
495
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
496 const char *delims = " ,\t\r\n";
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
497 char *metadatastr = strdup(value);
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
498 char *m = strtok(metadatastr, delims);
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
499 while(m) {
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
500 if(!strcmp(m, "mtime")) {
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
501 md |= FINFO_MTIME;
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
502 } else if(!strcmp(m, "mode")) {
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
503 md |= FINFO_MODE;
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
504 } else if(!strcmp(m, "owner")) {
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
505 md |= FINFO_OWNER;
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
506 } else if(!strcmp(m, "xattr")) {
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
507 md |= FINFO_XATTR;
661
1baec7ff8931 add first metadata sync test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 658
diff changeset
508 } else if(!strcmp(m, "all")) {
1baec7ff8931 add first metadata sync test
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 658
diff changeset
509 md |= FINFO_MTIME | FINFO_MODE | FINFO_OWNER | FINFO_XATTR;
646
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
510 }
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
511 m = strtok(NULL, delims);
522
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
512 }
646
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
513 free(metadatastr);
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
514
37a8bfae995e change metadata config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 644
diff changeset
515 metadata = md;
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
516 } else if(xstreq(node->name, "versioning")) {
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
517 versioning = parse_versioning_config(node);
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
518 } else if(xstreq(node->name, "max-retry")) {
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
519 int64_t i;
244
47791bdf1725 changed max-retry meaning and filter configuration in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 233
diff changeset
520 if(util_strtoint(value, &i) && i >= 0) {
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
521 max_retry = (int)i;
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
522 } else {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
523 print_warning(node->line, "unsigned integer value "
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
524 "expected in <max-retry> element\n");
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
525 }
347
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
526 } else if(xstreq(node->name, "allow-cmd")) {
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
527 int cmds = 0;
642
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
528 const char *delims = " ,\t\r\n";
347
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
529 char *cmdstr = strdup(value);
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
530 char *cmd = strtok(cmdstr, delims);
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
531 while(cmd) {
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
532 if(!strcmp(cmd, "pull")) {
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
533 cmds |= SYNC_CMD_PULL;
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
534 } else if(!strcmp(cmd, "push")) {
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
535 cmds |= SYNC_CMD_PUSH;
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
536 } else if(!strcmp(cmd, "archive")) {
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
537 cmds |= SYNC_CMD_ARCHIVE;
490
d94c4fd35c21 adds dav-sync restore command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 426
diff changeset
538 } else if(!strcmp(cmd, "restore")) {
d94c4fd35c21 adds dav-sync restore command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 426
diff changeset
539 cmds |= SYNC_CMD_RESTORE;
347
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
540 }
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
541 cmd = strtok(NULL, delims);
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
542 }
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
543 free(cmdstr);
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
544 allow_cmd = cmds;
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
545
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
546 } else if(xstreq(node->name, "backup-on-pull")) {
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
547 backuppull = util_getboolean(value);
221
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
548 } else if(xstreq(node->name, "lock-pull")) {
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
549 lockpull = util_getboolean(value);
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
550 } else if(xstreq(node->name, "lock-push")) {
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
551 lockpush = util_getboolean(value);
316
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
552 } else if(xstreq(node->name, "lock-timeout")) {
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
553 int64_t t = 0;
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
554 if(util_strtoint(value, &t)) {
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
555 lock_timeout = (time_t)t;
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
556 } else {
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
557 print_warning(node->line, "integer value "
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
558 "expected in <lock-timeout> element\n");
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
559 }
549
af91d3c96994 add hashing config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 539
diff changeset
560 } else if(xstreq(node->name, "hashing")) {
af91d3c96994 add hashing config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 539
diff changeset
561 hashing = util_getboolean(value);
642
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
562 store_hash = hashing;
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
563 } else if(xstreq(node->name, "push-strategy")) {
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
564 if(value) {
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
565 if(xstreq(value, "metadata")) {
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
566 pushstrat = PUSH_STRATEGY_METADATA;
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
567 } else if(xstreq(value, "hash")) {
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
568 pushstrat = PUSH_STRATEGY_HASH;
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
569 }
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
570 }
644
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
571 } else if(xstreq(node->name, "symlink-intern")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
572 if(!value) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
573 print_error(node->line, "missing value");
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
574 } else if(xstreq(value, "sync")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
575 symlink |= SYNC_SYMLINK_SYNC;
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
576 } else if(xstreq(value, "follow")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
577 // nothing, default
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
578 } else if(xstreq(value, "ignore")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
579 symlink |= SYNC_SYMLINK_IGNORE_INTERN;
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
580 } else {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
581 print_error(node->line,
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
582 "unknown value: %s\n", value);
623
7870656d302d add element for configuring symlinks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 576
diff changeset
583 }
644
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
584 } else if(xstreq(node->name, "symlink-extern")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
585 if(!value) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
586 print_error(node->line, "missing value");
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
587 } else if(xstreq(value, "follow")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
588 // nothing, default
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
589 } else if(xstreq(value, "ignore")) {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
590 symlink |= SYNC_SYMLINK_IGNORE_EXTERN;
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
591 } else {
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
592 print_error(node->line,
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
593 "unknown value: %s\n", value);
a38b15061848 refactore symlink config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 642
diff changeset
594 }
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
595 } else {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
596 print_error(node->line,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
597 "unknown directory config element: %s\n", node->name);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
598 return 1;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
599 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
600 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
601 node = node->next;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
602 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
603
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
604 if(!name) {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
605 print_error(parentlineno, "missing name element for directory\n");
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
606 return 1;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
607 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
608 if(!path) {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
609 print_error(parentlineno,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
610 "missing path element for directory %s\n", name);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
611 return 1;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
612 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
613 if(!repository) {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
614 print_error(parentlineno,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
615 "missing repository element for directory %s\n", name);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
616 return 1;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
617 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
618 if(!database) {
254
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
619 print_error(parentlineno,
d7c4ba50b7d8 implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents: 253
diff changeset
620 "missing database element for directory %s\n", name);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
621 return 1;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
622 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
623
521
c5bbae4b3cca extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 491
diff changeset
624 SyncDirectory *dir = calloc(1, sizeof(SyncDirectory));
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
625 dir->name = strdup(name);
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
626 dir->path = scfg_create_path(path);
56
99f7816fcf01 added collection config for sync directories
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 47
diff changeset
627 dir->collection = collection ? strdup(collection) : NULL;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
628 dir->repository = strdup(repository);
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
629 dir->database = strdup(database);
783
36a7f2ea7d12 add error logging
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 778
diff changeset
630 dir->logfile = logfile ? strdup(logfile) : NULL;
361
b6f2462ee055 adds xattr lib and tag support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 347
diff changeset
631 dir->tagconfig = tagconfig;
491
fdc2fb090cc7 adds versioning support for dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 490
diff changeset
632 dir->versioning = versioning;
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
633 dir->max_retry = max_retry;
347
b6ff6be7aa91 adds config option to disable certain commands for specific syncdirs and fixes authmethod config parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 319
diff changeset
634 dir->allow_cmd = allow_cmd;
145
82475dc12dd4 improved dav-sync data-loss prevention
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 144
diff changeset
635 dir->backuppull = backuppull;
221
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
636 dir->lockpull = lockpull;
e22c29b7ee2f using locks in dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 203
diff changeset
637 dir->lockpush = lockpush;
549
af91d3c96994 add hashing config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 539
diff changeset
638 dir->hashing = hashing;
630
046b869a1c49 use hash to check if a file content was really modified
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 623
diff changeset
639 dir->store_hash = store_hash;
649
0f4c59ac8c74 implement hash based conflict resolution in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 648
diff changeset
640 dir->pull_skip_hashing = pull_skip_hashing;
316
9d0505d80044 adds dav-sync lock timeout config element
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 288
diff changeset
641 dir->lock_timeout = lock_timeout;
522
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
642 dir->metadata = metadata;
536
877f7c4a203b adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 534
diff changeset
643 dir->splitconfig = splitconfig;
623
7870656d302d add element for configuring symlinks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 576
diff changeset
644 dir->symlink = symlink;
642
4e23087d3d90 add config element for push strategy
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 630
diff changeset
645 dir->push_strategy = pushstrat;
539
8deb52292c99 fixes more if statements and some warnings
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 536
diff changeset
646 if((metadata & FINFO_MODE) == FINFO_MODE) {
522
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
647 dir->db_settings = DB_STORE_MODE;
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
648 }
539
8deb52292c99 fixes more if statements and some warnings
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 536
diff changeset
649 if((metadata & FINFO_OWNER) == FINFO_OWNER) {
522
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
650 dir->db_settings |= DB_STORE_OWNER;
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
651 }
46f96dcd6eab adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 521
diff changeset
652
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
653 dir->filter.include = include;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
654 dir->filter.exclude = exclude;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
655 dir->filter.tags = tagfilter;
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
656 init_default_filter(&dir->filter);
66
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
657
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
658 if (trash && cx_strtrim(cx_str(trash)).length > 0) {
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
659 if (trash[0] == '/' || trash[0] == '$') {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
660 dir->trash = scfg_create_path(trash);
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
661 } else {
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
662 char *t = util_concat_path(dir->path, trash);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
663 dir->trash = util_concat_path(t, "/");
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
664 free(t);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
665 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
666
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
667 if(dir->trash[strlen(dir->trash)-1] != '/') {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
668 char *t = dir->trash;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
669 dir->trash = util_concat_path(t, "/");
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
670 free(t);
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
671 }
66
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
672 } else {
f8c1f685e08e some bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 65
diff changeset
673 dir->trash = NULL;
65
d4077e8175f3 added optional trash for deleted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 58
diff changeset
674 }
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
675
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
676 cxMapPut(directories, cx_hash_key_str(name), dir);
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
677
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
678 return 0;
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
679 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
680
256
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
681 int load_sync_config() {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
682 directories = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8);
256
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
683
319
2433b5969d44 disables automatic creation of .dav directory in dav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 316
diff changeset
684 if(check_config_dir()) {
2433b5969d44 disables automatic creation of .dav directory in dav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 316
diff changeset
685 fprintf(stderr, "Cannot create .dav directory\n");
2433b5969d44 disables automatic creation of .dav directory in dav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 316
diff changeset
686 return 1;
2433b5969d44 disables automatic creation of .dav directory in dav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 316
diff changeset
687 }
2433b5969d44 disables automatic creation of .dav directory in dav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 316
diff changeset
688
256
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
689 char *file = util_concat_path(ENV_HOME, ".dav/sync.xml");
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
690
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
691 struct stat s;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
692 if(stat(file, &s)) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
693 switch(errno) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
694 case ENOENT: {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
695 if(create_default_sync_config(file)) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
696 return 1;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
697 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
698 break;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
699 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
700 default: {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
701 perror("Cannot load sync.xml");
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
702 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
703 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
704 free(file);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
705 return 0;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
706 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
707
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
708 xmlDoc *doc = xmlReadFile(file, NULL, 0);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
709 if(!doc) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
710 fprintf(stderr, "Cannot load sync.xml\n");
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
711 free(file);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
712 return -1;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
713 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
714
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
715 int ret = 0;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
716 xmlNode *node = xmlDocGetRootElement(doc)->children;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
717 while(node && !ret) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
718 if(node->type == XML_ELEMENT_NODE) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
719 if(xstreq(node->name, "directory")) {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
720 ret = scfg_load_directory(node);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
721 } else {
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
722 print_error(node->line,
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
723 "unknown config element: %s\n", node->name);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
724 ret = 1;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
725 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
726 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
727 node = node->next;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
728 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
729
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
730 xmlFreeDoc(doc);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
731 free(file);
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
732 return ret;
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
733 }
54433cb371df implements check-repositories command for dav-sync
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
734
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
735 SyncDirectory* scfg_get_dir(const char *name) {
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
736 return cxMapGet(directories, cx_hash_key_str(name));
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
737 }
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
738
233
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
739 int scfg_check_dir(SyncDirectory *dir) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
740 struct stat s;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
741 if(stat(dir->path, &s)) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
742 int err = errno;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
743 if(err == ENOENT) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
744 fprintf(stderr, "directory %s does not exist.\n", dir->path);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
745 } else {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
746 fprintf(stderr, "Cannot stat directory %s.\n", dir->path);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
747 perror(NULL);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
748 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
749 fprintf(stderr, "Abort.\n");
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
750 return -1;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
751 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
752
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
753 if(dir->trash) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
754 // create trash directory
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
755 mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
756 if (util_mkdir(dir->trash, mode)) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
757 if (errno != EEXIST) {
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
758 fprintf(stderr, "Cannot create trash directory: %s\nAbort.\n", dir->trash);
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
759 return -1;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
760 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
761 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
762 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
763
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
764 return 0;
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
765 }
d8042cede66c improved dav-sync error handling on startup
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 232
diff changeset
766
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
767 char* scfg_create_path(const char *cfg) {
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
768 if(!cfg) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
769 return NULL;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
770 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
771 if(cfg[0] != '$') {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
772 return strdup(cfg);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
773 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
774
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
775 cxstring s = cx_str(cfg);
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
776 cxstring path = cx_strchr(cx_str(cfg), '/');
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
777 char *localpath = NULL;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
778 if(path.length > 0) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
779 // path = $var/path/
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
780
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
781 cxstring var = cx_strsubsl(s, 1, path.ptr - s.ptr - 1);
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
782 if(var.length > 0) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
783 char *env = cx_strdup(var).ptr;
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
784 char *envval = getenv(env);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
785 free(env);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
786 if(envval) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
787 localpath = util_concat_path(envval, path.ptr);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
788 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
789 fprintf(
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
790 stderr,
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
791 "Environment variable %.*s not set.\nAbort.\n",
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
792 (int)var.length,
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
793 var.ptr);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
794 exit(-1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
795 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
796 } else {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
797 localpath = cx_strdup(path).ptr;
226
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
798 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
799 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
800 // path = $var
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
801 char *envval = getenv(cfg + 1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
802 if(envval) {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
803 localpath = strdup(envval);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
804 } else {
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
805 fprintf(
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
806 stderr,
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
807 "Environment variable %s not set.\nAbort.\n",
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
808 cfg);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
809 exit(-1);
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
810 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
811 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
812 return localpath;
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
813 }
acc997e0d0f9 added support for paths with environment variables in sync.xml
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 225
diff changeset
814
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
815
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
816 int add_directory(SyncDirectory *dir) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
817 char *file = util_concat_path(ENV_HOME, ".dav/sync.xml");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
818 xmlDoc *doc = xmlReadFile(file, NULL, 0);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
819 if(!doc) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
820 free(file);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
821 fprintf(stderr, "Cannot load config.xml\n");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
822 return 1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
823 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
824
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
825 xmlNode *root = xmlDocGetRootElement(doc);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
826
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
827 xmlNode *dirNode = xmlNewNode(NULL, BAD_CAST "directory");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
828 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
829
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
830 xmlNewTextChild(dirNode, NULL, BAD_CAST "name", BAD_CAST dir->name);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
831 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
832
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
833 xmlNewTextChild(dirNode, NULL, BAD_CAST "path", BAD_CAST dir->path);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
834 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
835
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
836 xmlNewTextChild(dirNode, NULL, BAD_CAST "repository", BAD_CAST dir->repository);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
837 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
838
203
9a93ebd71984 fixed add-directory command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 202
diff changeset
839 xmlNewTextChild(dirNode, NULL, BAD_CAST "collection", BAD_CAST dir->collection);
9a93ebd71984 fixed add-directory command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 202
diff changeset
840 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
9a93ebd71984 fixed add-directory command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 202
diff changeset
841
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
842 if(dir->trash) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
843 xmlNewTextChild(dirNode, NULL, BAD_CAST "trash", BAD_CAST dir->trash);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
844 xmlNodeAddContent(dirNode, BAD_CAST "\n\t\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
845 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
846 xmlNewTextChild(dirNode, NULL, BAD_CAST "database", BAD_CAST dir->database);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
847 xmlNodeAddContent(dirNode, BAD_CAST "\n\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
848
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
849 xmlNodeAddContent(root, BAD_CAST "\n\t");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
850 xmlAddChild(root, dirNode);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
851 xmlNodeAddContent(root, BAD_CAST "\n");
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
852
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
853 int ret = 0;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
854 if(xmlSaveFormatFileEnc(file, doc, "UTF-8", 1) == -1) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
855 ret = 1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
856 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
857 xmlFreeDoc(doc);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
858 free(file);
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
859
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
860 return ret;
46
0542668d0f26 added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
861 }
198
44054c452de1 added list-repositories and list-directories commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 185
diff changeset
862
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
863 char* generate_db_name(const char *basename) {
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
864 char *dbname = NULL;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
865 int count = -1;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
866 while(!dbname) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
867 cxmutstr name = count < 0 ?
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
868 cx_asprintf("%s-db.xml", basename) :
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
869 cx_asprintf("%s%d-db.xml", basename, count);
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
870 count++;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
871
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
872 CxIterator i = cxMapIteratorValues(directories);
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
873 bool unique = true;
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
874 cx_foreach(SyncDirectory *, dir, i) {
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
875 if(!cx_strcmp(cx_strcast(name), cx_str(dir->database))) {
200
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
876 unique = false;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
877 break;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
878 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
879 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
880 if(unique) {
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
881 dbname = name.ptr;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
882 break;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
883 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
884 }
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
885 return dbname;
cc474cf2c2f5 added add-directory command to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 198
diff changeset
886 }
224
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
887
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
888 void free_filter(Filter filter) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
889 cxListDestroy(filter.include);
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
890 cxListDestroy(filter.exclude);
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
891 cxListDestroy(filter.tags);
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
892 }
224
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
893
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
894 void free_sync_config() {
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
895 if(directories) {
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
896 CxIterator i = cxMapIteratorValues(directories);
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
897 cx_foreach(SyncDirectory *, dir, i) {
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
898 free(dir->name);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
899 free(dir->path);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
900 free(dir->repository);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
901 free(dir->database);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
902
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
903 if(dir->collection) {
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
904 free(dir->collection);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
905 }
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
906 if(dir->trash) {
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
907 free(dir->trash);
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
908 }
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
909
648
fefe4b6f1048 change split config
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 647
diff changeset
910 free_filter(dir->filter);
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
911
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
912 free(dir);
224
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
913 }
252
6b8e287269fc improves config error reporting and adds check (check-config) command + dav-sync no longer aborts on missing sync.xml
Mike Becker <universe@uap-core.de>
parents: 246
diff changeset
914
747
efbd59642577 ucx 3 update, basic dav commands work, most stuff is still broken
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 700
diff changeset
915 cxMapDestroy(directories);
224
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
916 }
4b55f05f4e00 added more cleanup code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 222
diff changeset
917 }

mercurial