Sat, 22 Jun 2019 16:36:52 +0200
move some properties to new namespace
for properties encryption we need to decide which props must be encrypted and the plan is, to decide by namespace
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 | * |
364
3769ba002fd1
updates copyright date
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
257
diff
changeset
|
4 | * Copyright 2018 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 | #ifndef DB_H |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #define DB_H |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
32 | #include <inttypes.h> |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | #include <libidav/webdav.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | #include <ucx/map.h> |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
35 | #include <ucx/buffer.h> |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | #include <time.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | #include <libxml/xmlreader.h> |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | |
523
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
40 | #include "finfo.h" |
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
41 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | #ifdef __cplusplus |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | extern "C" { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | #endif |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | |
522
46f96dcd6eab
adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
521
diff
changeset
|
46 | #define DB_STORE_MODE 1 |
46f96dcd6eab
adds metadata config element for dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
521
diff
changeset
|
47 | #define DB_STORE_OWNER 2 |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
48 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
49 | typedef struct LocalResource LocalResource; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
50 | typedef struct FilePart FilePart; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
51 | typedef struct SyncDatabase SyncDatabase; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | struct LocalResource { |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | char *name; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | char *path; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | char *etag; |
541
e59a989d890d
adds content hash for splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
536
diff
changeset
|
57 | char *hash; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
58 | time_t last_modified; |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
59 | mode_t mode; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
60 | uid_t uid; |
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
61 | gid_t gid; |
190
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
62 | off_t size; |
a76e43d89f55
dav-sync can create and delete empty directories now
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
63 | DavBool isdirectory; |
257
49f3c58cc06c
fixes conflict detection in push command
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
222
diff
changeset
|
64 | DavBool skipped; |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
65 | UcxBuffer *cached_tags; |
523
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
66 | XAttributes *xattr; |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
366
diff
changeset
|
67 | char *tags_hash; |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
68 | char *xattr_hash; |
524
d53fd1006485
store hash of remote xattr and tags in sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
523
diff
changeset
|
69 | char *remote_tags_hash; |
380
8a0c727aa409
adds tag filter for dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
70 | |
572
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
560
diff
changeset
|
71 | char *link_target; |
1eac93fcef77
add link target to sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
560
diff
changeset
|
72 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
73 | FilePart *parts; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
74 | size_t numparts; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
75 | |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
76 | int64_t blocksize; |
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
525
diff
changeset
|
77 | |
523
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
78 | DavBool tags_updated; |
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
79 | DavBool finfo_updated; |
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
80 | DavBool xattr_updated; |
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
81 | DavBool metadata_updated; |
577
f49964cf7228
store link property on push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
572
diff
changeset
|
82 | DavBool link_updated; |
523
923a4528a2ae
adds support for pushing metadata updates
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
522
diff
changeset
|
83 | |
380
8a0c727aa409
adds tag filter for dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
84 | DavBool keep; |
444
761dc4867208
adds dav-sync options for restoring deleted or modified files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
380
diff
changeset
|
85 | DavBool restore; |
550
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
86 | |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
87 | DavBool isnew; |
552
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
88 | LocalResource *origin; |
560
a816e805e5db
store origin of file conflicts
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
552
diff
changeset
|
89 | char *conflict_source; |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | }; |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
92 | struct FilePart { |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
93 | uint64_t block; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
94 | char *hash; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
95 | char *etag; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
96 | }; |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
97 | |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
98 | struct SyncDatabase { |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
99 | UcxMap *resources; |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
100 | UcxMap *conflict; |
49
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
101 | }; |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
102 | |
c5759ac76c1b
dav-sync detects locally removed files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
46
diff
changeset
|
103 | SyncDatabase* load_db(char *name); |
521
c5bbae4b3cca
extends sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
444
diff
changeset
|
104 | int store_db(SyncDatabase *db, char *name, uint32_t settings); |
222
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
105 | void destroy_db(SyncDatabase *db); |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
106 | |
7b73058d782e
fixed some memory leaks in dav-sync pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
216
diff
changeset
|
107 | void local_resource_free(LocalResource *res); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | |
552
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
109 | LocalResource* local_resource_copy(LocalResource *src, const char *new_path); |
e1a12762bf0a
improve copy/move stability and db update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
550
diff
changeset
|
110 | |
536
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
111 | void filepart_free(FilePart *part); |
877f7c4a203b
adds file splitting feature to dav-sync push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
112 | |
550
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
113 | UcxMap* create_hash_index(SyncDatabase *db); |
8c700eae3eb8
add copy/move detection to push
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
541
diff
changeset
|
114 | |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | LocalResource* process_resource(xmlTextReaderPtr reader); |
216
16d6b97fbf33
dav-sync push ignores conflict files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
190
diff
changeset
|
116 | LocalResource* process_conflict(xmlTextReaderPtr reader); |
46
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
117 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
119 | #ifdef __cplusplus |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
120 | } |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
121 | #endif |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
122 | |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
123 | #endif /* DB_H */ |
0542668d0f26
added new sync tool
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
124 |