Sat, 22 Jun 2019 16:36:52 +0200
move some properties to new namespace
for properties encryption we need to decide which props must be encrypted and the plan is, to decide by namespace
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
576
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
4 | * Copyright 2019 Olaf Wintermann. All rights reserved. |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include <time.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include <stdio.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <stdlib.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | #include <string.h> |
124
41939c8f3f9c
expression compiler generates byte code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
119
diff
changeset
|
33 | #include <errno.h> |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
34 | #include <ctype.h> |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | #include <ucx/string.h> |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
36 | #include <ucx/buffer.h> |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
37 | #include <ucx/utils.h> |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | #include <libxml/tree.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | #include <curl/curl.h> |
152
ff854d3df20c
fixed windows build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
151
diff
changeset
|
40 | |
153
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
41 | #ifdef _WIN32 |
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
42 | #include <conio.h> |
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
43 | #define getpasswordchar() getch() |
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
44 | #else |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
45 | #include <termios.h> |
153
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
46 | #define getpasswordchar() getchar() |
152
ff854d3df20c
fixed windows build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
151
diff
changeset
|
47 | #endif |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
49 | #include "webdav.h" |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
50 | #include "utils.h" |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
51 | #include "crypto.h" |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
52 | #include "session.h" |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
53 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
54 | /* |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | #include <openssl/hmac.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | #include <openssl/evp.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | #include <openssl/bio.h> |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | #include <openssl/buffer.h> |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
59 | #include <openssl/rand.h> |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
60 | */ |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
62 | static size_t extractval(sstr_t str, char *result, char delim) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
63 | size_t n = 0; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
64 | for(size_t i = 0; i < str.length ; i++) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
65 | if(isdigit(str.ptr[i])) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
66 | result[n++] = str.ptr[i]; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
67 | } else if(str.ptr[i] != delim) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
68 | return 0; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
69 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
70 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
71 | result[n] = '\0'; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
72 | return n; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
73 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
74 | |
186
05d11fbcaeb3
improved copy/move
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
75 | static time_t parse_iso8601(char *iso8601str) { |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
76 | |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
77 | // safety |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
78 | if(!iso8601str) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
79 | return 0; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
80 | } |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
81 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
82 | // local vars |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
83 | struct tm tparts; |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
84 | memset(&tparts, 0, sizeof(struct tm)); |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
85 | long val; |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
86 | char conv[16]; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
87 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
88 | // work on the trimmed string |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
89 | sstr_t date = sstrtrim(sstr(iso8601str)); |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
90 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
91 | sstr_t time = sstrchr(date, 'T'); |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
92 | if(time.length == 0) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
93 | return 0; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
94 | } |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
95 | date.length = time.ptr - date.ptr; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
96 | time.ptr++; time.length--; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
97 | |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
98 | sstr_t tzinfo; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
99 | if((tzinfo = sstrchr(time, 'Z')).length > 0 || |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
100 | (tzinfo = sstrchr(time, '+')).length > 0 || |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
101 | (tzinfo = sstrchr(time, '-')).length > 0) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
102 | |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
103 | time.length = tzinfo.ptr - time.ptr; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
104 | } |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
105 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
106 | // parse date |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
107 | if((date.length != 8 && date.length != 10) |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
108 | || extractval(date, conv , '-') != 8) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
109 | return 0; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
110 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
111 | val = atol(conv); |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
112 | if(val < 19000000L) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
113 | return 0; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
114 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
115 | tparts.tm_mday = val % 100; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
116 | tparts.tm_mon = (val % 10000) / 100 - 1; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
117 | tparts.tm_year = val / 10000 - 1900; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
118 | |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
119 | // parse time and skip possible fractional seconds |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
120 | sstr_t frac; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
121 | if((frac = sstrchr(time, '.')).length > 0 || |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
122 | (frac = sstrchr(time, ',')).length > 0) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
123 | time.length = frac.ptr - time.ptr; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
124 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
125 | if((time.length != 6 && time.length != 8) |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
126 | || extractval(time, conv , ':') != 6) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
127 | return 0; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
128 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
129 | val = atol(conv); |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
130 | tparts.tm_sec = val % 100; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
131 | tparts.tm_min = (val % 10000) / 100; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
132 | tparts.tm_hour = val / 10000; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
133 | |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
134 | |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
135 | // parse time zone (if any) |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
136 | if(tzinfo.length == 0) { |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
137 | // local time |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
138 | tparts.tm_isdst = -1; |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
139 | return mktime(&tparts); |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
140 | } else if(!sstrcmp(tzinfo, S("Z"))) { |
184
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
141 | #ifdef __FreeBSD__ |
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
142 | return timegm(&tparts); |
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
143 | #else |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
144 | return mktime(&tparts) - timezone; |
184
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
145 | #endif |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
146 | } else if(tzinfo.ptr[0] == '+' || tzinfo.ptr[0] == '-') { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
147 | int sign = (tzinfo.ptr[0] == '+') ? -1 : 1; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
148 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
149 | if(tzinfo.length > 6) { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
150 | return 0; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
151 | } else { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
152 | tzinfo.ptr++; tzinfo.length--; |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
153 | extractval(tzinfo, conv, ':'); |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
154 | val = atol(conv); |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
155 | val = 60 * (val / 100) + (val % 100); |
184
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
156 | #ifdef __FreeBSD__ |
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
157 | return timegm(&tparts) + (time_t) (60 * val * sign); |
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
158 | #else |
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
159 | return mktime(&tparts) - timezone + (time_t) (60 * val * sign); |
7ba3c97b31ff
fixed FreeBSD build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
181
diff
changeset
|
160 | #endif |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
161 | } |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
162 | } else { |
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
163 | return 0; |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
164 | } |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
165 | } |
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
166 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
168 | time_t util_parse_creationdate(char *str) { |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
169 | // parse a ISO-8601 date (rfc-3339) |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
170 | // example: 2012-11-29T21:35:35Z |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | if(!str) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | return 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | } |
160
ba8f1691c0ee
added parser for iso8601 dates
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
174 | |
177
3c0734eeab33
better and better and better iso8601 parser
Mike Becker <universe@uap-core.de>
parents:
176
diff
changeset
|
175 | return parse_iso8601(str); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
178 | time_t util_parse_lastmodified(char *str) { |
158
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
179 | // parse a rfc-1123 date |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | // example: Thu, 29 Nov 2012 21:35:35 GMT |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | if(!str) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | return 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | } else { |
158
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
184 | time_t result = curl_getdate(str, NULL); |
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
185 | if(result == -1) { |
329
2dc61cc5a8ac
adds error message to dav, when an invalid date format is specified for the -u option
Mike Becker <universe@uap-core.de>
parents:
254
diff
changeset
|
186 | // fall back to the ISO-8601 format (e.g. Microsoft Sharepoint |
2dc61cc5a8ac
adds error message to dav, when an invalid date format is specified for the -u option
Mike Becker <universe@uap-core.de>
parents:
254
diff
changeset
|
187 | // illegally uses this format for lastmodified, but also some |
2dc61cc5a8ac
adds error message to dav, when an invalid date format is specified for the -u option
Mike Becker <universe@uap-core.de>
parents:
254
diff
changeset
|
188 | // users might want to give an ISO-8601 date) |
158
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
189 | return util_parse_creationdate(str); |
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
190 | } else { |
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
191 | return result; |
33237261321e
added fallback for util_parse_lastmodified, because some servers incorrectly use ISO-8601 dates for lastmodified - TODO: implement the ISO-8601 parsing
Mike Becker <universe@uap-core.de>
parents:
153
diff
changeset
|
192 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
534
diff
changeset
|
196 | int util_getboolean(const char *v) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
197 | if(v[0] == 'T' || v[0] == 't') { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | return 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
200 | return 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
201 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
202 | |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
534
diff
changeset
|
203 | int util_strtouint(const char *str, uint64_t *value) { |
512
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
204 | char *end; |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
205 | errno = 0; |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
206 | uint64_t val = strtoull(str, &end, 0); |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
207 | if(errno == 0) { |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
208 | *value = val; |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
209 | return 1; |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
210 | } else { |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
211 | return 0; |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
212 | } |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
213 | } |
3320a015a3bc
fixes signed vs unsigned inaccuracy for the -T option
Mike Becker <universe@uap-core.de>
parents:
505
diff
changeset
|
214 | |
535
d814ee31c04f
adds blocksize also to the sync db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
534
diff
changeset
|
215 | int util_strtoint(const char *str, int64_t *value) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
216 | char *end; |
124
41939c8f3f9c
expression compiler generates byte code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
119
diff
changeset
|
217 | errno = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | int64_t val = strtoll(str, &end, 0); |
124
41939c8f3f9c
expression compiler generates byte code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
119
diff
changeset
|
219 | if(errno == 0) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | *value = val; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | return 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | return 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | |
534
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
227 | int util_szstrtouint(const char *str, uint64_t *value) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
228 | char *end; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
229 | errno = 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
230 | size_t len = strlen(str); |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
231 | uint64_t val = strtoull(str, &end, 0); |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
232 | if(end == str+len) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
233 | *value = val; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
234 | return 1; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
235 | } else if(end == str+len-1) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
236 | uint64_t mul = 1; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
237 | switch(end[0]) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
238 | case 'k': |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
239 | case 'K': mul = 1024; break; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
240 | case 'm': |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
241 | case 'M': mul = 1024*1024; break; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
242 | case 'g': |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
243 | case 'G': mul = 1024*1024*1024; break; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
244 | default: return 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
245 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
246 | |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
247 | uint64_t result = 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
248 | if(util_uint_mul(val, mul, &result)) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
249 | return 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
250 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
251 | *value = result; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
252 | return 1; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
253 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
254 | return 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
255 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
256 | |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
257 | int util_uint_mul(uint64_t a, uint64_t b, uint64_t *result) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
258 | if(a == 0 || b == 0) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
259 | *result = 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
260 | return 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
261 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
262 | uint64_t r = a * b; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
263 | if(r / b == a) { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
264 | *result = r; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
265 | return 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
266 | } else { |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
267 | *result = 0; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
268 | return 1; |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
269 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
270 | } |
9a4857d6444e
adds dav-sync splitconfig parser
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
512
diff
changeset
|
271 | |
151
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
272 | char* util_url_base(char *url) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
273 | sstr_t u = sstr(url); |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
274 | int len = u.length; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
275 | int slashcount = 0; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
276 | int slmax; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
277 | if(len > 7 && !strncasecmp(url, "http://", 7)) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
278 | slmax = 3; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
279 | } else if(len > 8 && !strncasecmp(url, "https://", 8)) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
280 | slmax = 3; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
281 | } else { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
282 | slmax = 1; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
283 | } |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
284 | char c; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
285 | int i = 0; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
286 | for(i=0;i<len;i++) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
287 | c = url[i]; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
288 | if(c == '/') { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
289 | slashcount++; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
290 | if(slashcount == slmax) { |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
291 | i++; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
292 | break; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
293 | } |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
294 | } |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
295 | } |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
296 | sstr_t server = sstrsubsl(u, 0, i); |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
297 | server = sstrdup(server); |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
298 | return server.ptr; |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
299 | } |
a316613205dc
fixed some memory leaks, content verification and dav info
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
150
diff
changeset
|
300 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
301 | char* util_url_path(char *url) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
302 | char *path = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
303 | size_t len = strlen(url); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
304 | int slashcount = 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
305 | int slmax; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
306 | if(len > 7 && !strncasecmp(url, "http://", 7)) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
307 | slmax = 3; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
308 | } else if(len > 8 && !strncasecmp(url, "https://", 8)) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
309 | slmax = 3; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
310 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
311 | slmax = 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
312 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
313 | char c; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
314 | for(int i=0;i<len;i++) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
315 | c = url[i]; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
316 | if(c == '/') { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | slashcount++; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
318 | if(slashcount == slmax) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | path = url + i; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
320 | break; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
321 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
322 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
323 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
324 | return path; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
325 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
326 | |
66 | 327 | char* util_url_decode(DavSession *sn, char *url) { |
328 | char *unesc = curl_easy_unescape(sn->handle, url, strlen(url), NULL); | |
329 | char *ret = strdup(unesc); | |
330 | curl_free(unesc); | |
331 | return ret; | |
332 | } | |
333 | ||
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
334 | static size_t util_header_callback(char *buffer, size_t size, |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
335 | size_t nitems, void *data) { |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
336 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
337 | sstr_t sbuffer = sstrn(buffer, size*nitems); |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
338 | |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
339 | UcxMap *map = (UcxMap*) data; |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
340 | |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
341 | // if we get a status line, clear the map and exit |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
342 | if(sstrprefix(sbuffer, S("HTTP/"))) { |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
343 | ucx_map_free_content(map, free); |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
344 | ucx_map_clear(map); |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
345 | return size*nitems; |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
346 | } |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
347 | |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
348 | // if we get the terminating CRLF, just exit |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
349 | if(!sstrcmp(sbuffer, S("\r\n"))) { |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
350 | return 2; |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
351 | } |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
352 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
353 | sstr_t key = sbuffer; |
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
354 | sstr_t value = sstrchr(sbuffer, ':'); |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
355 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
356 | if(value.length == 0) { |
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
357 | return 0; // invalid header line |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
358 | } |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
359 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
360 | key.length = value.ptr - key.ptr; |
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
361 | value.ptr++; value.length--; |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
362 | |
174
e7e56c56d126
updated ucx and used new sstrlower in util_header_callback
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
363 | key = sstrlower(sstrtrim(key)); |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
364 | value = sstrdup(sstrtrim(value)); |
174
e7e56c56d126
updated ucx and used new sstrlower in util_header_callback
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
365 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
366 | ucx_map_sstr_put(map, key, value.ptr); |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
367 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
368 | free(key.ptr); |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
369 | |
173
947843245525
improved util_header_callback by using sstr_t
Mike Becker <universe@uap-core.de>
parents:
170
diff
changeset
|
370 | return sbuffer.length; |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
371 | } |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
372 | |
543
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
373 | int util_path_isrelated(const char *path1, const char *path2) { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
374 | scstr_t p1 = scstr(path1); |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
375 | scstr_t p2 = scstr(path2); |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
376 | |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
377 | if(p1.ptr[p1.length-1] == '/') { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
378 | p1.length--; |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
379 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
380 | if(p2.ptr[p2.length-1] == '/') { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
381 | p2.length--; |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
382 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
383 | |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
384 | if(p2.length < p1.length) { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
385 | return 0; |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
386 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
387 | |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
388 | if(!sstrcmp(p1, p2)) { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
389 | return 1; |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
390 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
391 | |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
392 | if(sstrprefix(p2, p1)) { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
393 | if(p2.ptr[p1.length] == '/') { |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
394 | return 1; |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
395 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
396 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
397 | |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
398 | return 0; |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
399 | } |
2f85df8cd35e
fixes that pull downloads the history collection
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
542
diff
changeset
|
400 | |
575
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
401 | char* util_path_normalize(const char *path) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
402 | size_t len = strlen(path); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
403 | UcxBuffer *buf = ucx_buffer_new(NULL, len+1, UCX_BUFFER_AUTOEXTEND); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
404 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
405 | if(path[0] == '/') { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
406 | ucx_buffer_putc(buf, '/'); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
407 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
408 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
409 | int add_separator = 0; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
410 | int seg_start = 0; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
411 | for(int i=0;i<=len;i++) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
412 | char c = path[i]; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
413 | if(c == '/' || c == '\0') { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
414 | const char *seg_ptr = path+seg_start; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
415 | int seg_len = i - seg_start; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
416 | if(seg_ptr[0] == '/') { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
417 | seg_ptr++; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
418 | seg_len--; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
419 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
420 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
421 | if(seg_len > 0) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
422 | scstr_t seg = scstrn(seg_ptr, seg_len); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
423 | if(!sstrcmp(seg, SC(".."))) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
424 | for(int j=buf->pos;j>=0;j--) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
425 | char t = buf->space[j]; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
426 | if(t == '/' || j == 0) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
427 | buf->pos = j; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
428 | buf->size = j; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
429 | buf->space[j] = 0; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
430 | add_separator = t == '/' ? 1 : 0; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
431 | break; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
432 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
433 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
434 | } else if(!sstrcmp(seg, SC("."))) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
435 | // ignore |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
436 | } else { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
437 | if(add_separator) { |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
438 | ucx_buffer_putc(buf, '/'); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
439 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
440 | ucx_buffer_write(seg_ptr, 1, seg_len, buf); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
441 | add_separator = 1; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
442 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
443 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
444 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
445 | seg_start = i; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
446 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
447 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
448 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
449 | ucx_buffer_putc(buf, 0); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
450 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
451 | |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
452 | char *space = buf->space; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
453 | buf->flags = 0; // disable autofree |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
454 | ucx_buffer_free(buf); |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
455 | return space; |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
456 | } |
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
457 | |
576
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
458 | char* util_create_relative_path(const char *abspath, const char *base) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
459 | size_t path_len = strlen(abspath); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
460 | size_t base_len = strlen(base); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
461 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
462 | if(abspath[path_len-1] == '/') { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
463 | path_len--; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
464 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
465 | if(base[base_len-1] == '/') { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
466 | base_len--; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
467 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
468 | // get base parent |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
469 | for(int i=base_len-1;i>=0;i--) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
470 | if(base[i] == '/') { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
471 | base_len = i+1; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
472 | break; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
473 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
474 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
475 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
476 | size_t max = path_len > base_len ? base_len : path_len; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
477 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
478 | // get prefix of abspath and base |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
479 | // this dir is the root of the link |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
480 | size_t i; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
481 | size_t last_dir = 0; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
482 | for(i=0;i<max;i++) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
483 | char c = abspath[i]; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
484 | if(c != base[i]) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
485 | break; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
486 | } else if(c == '/') { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
487 | last_dir = i; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
488 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
489 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
490 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
491 | char *ret = NULL; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
492 | UcxBuffer *out = NULL; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
493 | if(last_dir+1 < base_len) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
494 | // base is deeper than the link root, we have to go backwards |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
495 | int dircount = 0; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
496 | for(int i=last_dir+1;i<base_len;i++) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
497 | if(base[i] == '/') { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
498 | dircount++; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
499 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
500 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
501 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
502 | out = ucx_buffer_new(NULL, dircount*3+path_len-last_dir, UCX_BUFFER_AUTOEXTEND); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
503 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
504 | for(int i=0;i<dircount;i++) { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
505 | ucx_buffer_puts(out, "../"); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
506 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
507 | } else { |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
508 | out = ucx_buffer_new(NULL, 1024, path_len - last_dir); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
509 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
510 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
511 | ucx_buffer_puts(out, abspath + last_dir + 1); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
512 | ucx_buffer_putc(out, 0); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
513 | out->flags = 0; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
514 | ret = out->space; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
515 | ucx_buffer_free(out); |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
516 | |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
517 | return ret; |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
518 | } |
62cc92445234
store relative link in LocalResource
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
575
diff
changeset
|
519 | |
575
f746f601c35c
add util_path_normalize
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
558
diff
changeset
|
520 | |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
521 | void util_capture_header(CURL *handle, UcxMap* map) { |
176
747f3796eddd
improved util_capture_header when deactivating the capturing
Mike Becker <universe@uap-core.de>
parents:
174
diff
changeset
|
522 | if(map) { |
747f3796eddd
improved util_capture_header when deactivating the capturing
Mike Becker <universe@uap-core.de>
parents:
174
diff
changeset
|
523 | curl_easy_setopt(handle, CURLOPT_HEADERFUNCTION, util_header_callback); |
747f3796eddd
improved util_capture_header when deactivating the capturing
Mike Becker <universe@uap-core.de>
parents:
174
diff
changeset
|
524 | curl_easy_setopt(handle, CURLOPT_HEADERDATA, map); |
747f3796eddd
improved util_capture_header when deactivating the capturing
Mike Becker <universe@uap-core.de>
parents:
174
diff
changeset
|
525 | } else { |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
526 | curl_easy_setopt(handle, CURLOPT_HEADERFUNCTION, NULL); |
176
747f3796eddd
improved util_capture_header when deactivating the capturing
Mike Becker <universe@uap-core.de>
parents:
174
diff
changeset
|
527 | curl_easy_setopt(handle, CURLOPT_HEADERDATA, NULL); |
170
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
528 | } |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
529 | } |
cf054cded046
added depth header workaround for Microsoft IIS (tested with sharepoint)
Mike Becker <universe@uap-core.de>
parents:
161
diff
changeset
|
530 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
531 | char* util_resource_name(char *url) { |
590
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
532 | sstr_t urlstr = sstr(url); |
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
533 | if(urlstr.ptr[urlstr.length-1] == '/') { |
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
534 | urlstr.length--; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
535 | } |
590
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
536 | sstr_t resname = sstrrchr(urlstr, '/'); |
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
537 | if(resname.length > 1) { |
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
538 | return resname.ptr+1; |
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
539 | } else { |
cda8093116f2
reduces code complexity of util_resource_name()
Mike Becker <universe@uap-core.de>
parents:
578
diff
changeset
|
540 | return url; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
541 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
542 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
543 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
544 | int util_mkdir(char *path, mode_t mode) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
545 | #ifdef _WIN32 |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
546 | return mkdir(path); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
547 | #else |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
548 | return mkdir(path, mode); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
549 | #endif |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
550 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
551 | |
372
2e15ff88a0ab
adds tag management commands to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
552 | char* util_concat_path(const char *url_base, const char *p) { |
2e15ff88a0ab
adds tag management commands to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
553 | sstr_t base = sstr((char*)url_base); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
554 | sstr_t path; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
555 | if(p) { |
372
2e15ff88a0ab
adds tag management commands to dav-sync
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
556 | path = sstr((char*)p); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
557 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
558 | path = sstrn("", 0); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
559 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
560 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
561 | int add_separator = 0; |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
562 | if(base.length != 0 && base.ptr[base.length-1] == '/') { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
563 | if(path.ptr[0] == '/') { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
564 | base.length--; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
565 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
566 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
567 | if(path.length == 0 || path.ptr[0] != '/') { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
568 | add_separator = 1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
569 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
570 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
571 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
572 | sstr_t url; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
573 | if(add_separator) { |
70 | 574 | url = sstrcat(3, base, sstr("/"), path); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
575 | } else { |
70 | 576 | url = sstrcat(2, base, path); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
577 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
578 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
579 | return url.ptr; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
580 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
581 | |
505 | 582 | char* util_get_url(DavSession *sn, const char *href) { |
583 | scstr_t base = scstr(sn->base_url); | |
584 | scstr_t href_str = scstr(href); | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
585 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
586 | char *base_path = util_url_path(sn->base_url); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
587 | base.length -= strlen(base_path); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
588 | |
70 | 589 | sstr_t url = sstrcat(2, base, href_str); |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
177
diff
changeset
|
590 | return url.ptr; |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
177
diff
changeset
|
591 | } |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
177
diff
changeset
|
592 | |
505 | 593 | void util_set_url(DavSession *sn, const char *href) { |
181
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
177
diff
changeset
|
594 | char *url = util_get_url(sn, href); |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
177
diff
changeset
|
595 | curl_easy_setopt(sn->handle, CURLOPT_URL, url); |
a8f8cdbf85df
implemented webdav copy and move method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
177
diff
changeset
|
596 | free(url); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
597 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
598 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
599 | char* util_path_to_url(DavSession *sn, char *path) { |
69
0dbdd7e8c1fc
fixed incorrect use of UcxBuffer
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
600 | char *space = malloc(256); |
0dbdd7e8c1fc
fixed incorrect use of UcxBuffer
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
601 | UcxBuffer *url = ucx_buffer_new(space, 256, UCX_BUFFER_AUTOEXTEND); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
602 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
603 | // add base url |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
604 | ucx_buffer_write(sn->base_url, 1, strlen(sn->base_url), url); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
605 | // remove trailing slash |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
606 | ucx_buffer_seek(url, -1, SEEK_CUR); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
607 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
608 | sstr_t p = sstr(path); |
74
da079dc0724c
fixed many memory leaks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
71
diff
changeset
|
609 | ssize_t ntk = 0; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
610 | sstr_t *tks = sstrsplit(p, S("/"), &ntk); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
611 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
612 | for(int i=0;i<ntk;i++) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
613 | sstr_t node = tks[i]; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
614 | if(node.length > 0) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
615 | char *esc = curl_easy_escape(sn->handle, node.ptr, node.length); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
616 | ucx_buffer_putc(url, '/'); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
617 | ucx_buffer_write(esc, 1, strlen(esc), url); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
618 | curl_free(esc); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
619 | } |
74
da079dc0724c
fixed many memory leaks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
71
diff
changeset
|
620 | free(node.ptr); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
621 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
622 | free(tks); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
623 | if(path[p.length-1] == '/') { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
624 | ucx_buffer_putc(url, '/'); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
625 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
626 | ucx_buffer_putc(url, 0); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
627 | |
69
0dbdd7e8c1fc
fixed incorrect use of UcxBuffer
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
628 | space = url->space; |
0dbdd7e8c1fc
fixed incorrect use of UcxBuffer
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
629 | ucx_buffer_free(url); |
0dbdd7e8c1fc
fixed incorrect use of UcxBuffer
Mike Becker <universe@uap-core.de>
parents:
66
diff
changeset
|
630 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
631 | return space; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
632 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
39
diff
changeset
|
633 | |
578
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
634 | char* util_parent_path(const char *path) { |
bb1e60fada74
create symlinks on pull
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
576
diff
changeset
|
635 | char *name = util_resource_name((char*)path); |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
636 | size_t namelen = strlen(name); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
637 | size_t pathlen = strlen(path); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
638 | size_t parentlen = pathlen - namelen; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
639 | char *parent = malloc(parentlen + 1); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
640 | memcpy(parent, path, parentlen); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
641 | parent[parentlen] = '\0'; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
642 | return parent; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
643 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
644 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
645 | |
254
d7c4ba50b7d8
implements xmlErrorFunc for dav sync + adds line numbers to error reporting in both config checkers
Mike Becker <universe@uap-core.de>
parents:
228
diff
changeset
|
646 | char* util_xml_get_text(const xmlNode *elm) { |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
647 | xmlNode *node = elm->children; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
648 | while(node) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
649 | if(node->type == XML_TEXT_NODE) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
650 | return (char*)node->content; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
651 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
652 | node = node->next; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
653 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
654 | return NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
655 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
656 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
657 | |
505 | 658 | char* util_base64decode(const char *in) { |
39
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
659 | int len = 0; |
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
660 | return util_base64decode_len(in, &len); |
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
661 | } |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
662 | |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
663 | #define WHITESPACE 64 |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
664 | #define EQUALS 65 |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
665 | #define INVALID 66 |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
666 | static char b64dectable[] = { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
667 | 66,66,66,66,66,66,66,66,66,66,64,66,66,66,66,66,66,66,66,66,66,66,66,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
668 | 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,62,66,66,66,63,52,53, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
669 | 54,55,56,57,58,59,60,61,66,66,66,65,66,66,66, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
670 | 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,66,66,66,66,66,66,26,27,28, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
671 | 29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
672 | 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
673 | 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
674 | 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
675 | 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
676 | 66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
677 | 66,66,66,66,66,66 |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
678 | }; |
505 | 679 | char* util_base64decode_len(const char* in, int *outlen) { |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
680 | /* code is mostly from wikibooks */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
681 | |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
682 | size_t inlen = strlen(in); |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
683 | size_t bufsize = (inlen*3) / 4; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
684 | char *outbuf = malloc(bufsize+1); |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
685 | *outlen = -1; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
686 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
687 | unsigned char *out = (unsigned char*)outbuf; |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
688 | |
505 | 689 | const char *end = in + inlen; |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
690 | char iter = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
691 | uint32_t buf = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
692 | size_t len = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
693 | |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
694 | while (in < end) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
695 | unsigned char c = b64dectable[*in++]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
696 | |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
697 | switch (c) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
698 | case WHITESPACE: continue; /* skip whitespace */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
699 | case INVALID: { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
700 | /* invalid input */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
701 | outbuf[0] = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
702 | return outbuf; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
703 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
704 | case EQUALS: { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
705 | /* pad character, end of data */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
706 | in = end; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
707 | continue; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
708 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
709 | default: { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
710 | buf = buf << 6 | c; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
711 | iter++; // increment the number of iteration |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
712 | /* If the buffer is full, split it into bytes */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
713 | if (iter == 4) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
714 | if ((len += 3) > bufsize) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
715 | /* buffer overflow */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
716 | outbuf[0] = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
717 | return outbuf; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
718 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
719 | *(out++) = (buf >> 16) & 255; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
720 | *(out++) = (buf >> 8) & 255; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
721 | *(out++) = buf & 255; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
722 | buf = 0; iter = 0; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
723 | |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
724 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
725 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
726 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
727 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
728 | |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
729 | if (iter == 3) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
730 | if ((len += 2) > bufsize) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
731 | /* buffer overflow */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
732 | outbuf[0] = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
733 | return outbuf; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
734 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
735 | *(out++) = (buf >> 10) & 255; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
736 | *(out++) = (buf >> 2) & 255; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
737 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
738 | else if (iter == 2) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
739 | if (++len > bufsize) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
740 | /* buffer overflow */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
741 | outbuf[0] = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
742 | return outbuf; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
743 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
744 | *(out++) = (buf >> 4) & 255; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
745 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
746 | |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
747 | *outlen = len; /* modify to reflect the actual output size */ |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
748 | outbuf[len] = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
749 | return outbuf; |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
750 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
751 | |
39
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
752 | |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
753 | static char* b64enctable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
505 | 754 | char* util_base64encode(const char *in, size_t len) { |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
755 | // calculate length of base64 output and create buffer |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
756 | size_t outlen = 4 * ((len + 2) / 3); |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
757 | int pad = len % 3; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
758 | |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
759 | char *out = malloc(outlen + 1); |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
760 | out[outlen] = 0; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
761 | size_t pos = 0; |
39
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
762 | |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
763 | // encode blocks of 3 bytes |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
764 | size_t i; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
765 | size_t blockend = len - pad; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
766 | for(i=0;i<blockend;i++) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
767 | unsigned char b1 = in[i++]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
768 | unsigned char b2 = in[i++]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
769 | unsigned char b3 = in[i]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
770 | uint32_t inb = b1 << 16 | (b2 << 8) | b3; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
771 | out[pos++] = b64enctable[(inb >> 18) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
772 | out[pos++] = b64enctable[(inb >> 12) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
773 | out[pos++] = b64enctable[(inb >> 6) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
774 | out[pos++] = b64enctable[(inb) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
775 | } |
39
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
776 | |
344
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
777 | // encode last bytes |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
778 | if(pad > 0) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
779 | char p[3] = {0, 0, 0}; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
780 | for(int j=0;i<len;i++) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
781 | p[j++] = in[i]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
782 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
783 | unsigned char b1 = p[0]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
784 | unsigned char b2 = p[1]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
785 | unsigned char b3 = p[2]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
786 | uint32_t inb = (b1 << 16) | (b2 << 8) | b3; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
787 | out[pos++] = b64enctable[(inb >> 18) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
788 | out[pos++] = b64enctable[(inb >> 12) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
789 | out[pos++] = b64enctable[(inb >> 6) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
790 | out[pos++] = b64enctable[(inb) & 63]; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
791 | for(int k=outlen-1;k>=outlen-(3-pad);k--) { |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
792 | out[k] = '='; |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
793 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
794 | } |
72791e299d64
removes openssl dependencies for base64
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
337
diff
changeset
|
795 | |
39
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
796 | return out; |
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
797 | } |
3e55bed345f9
added some aes functions + ucx update
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
33
diff
changeset
|
798 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
799 | char* util_encrypt_str(DavSession *sn, char *str, char *key) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
800 | DavKey *k = dav_context_get_key(sn->context, key); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
801 | if(!k) { |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
802 | sn->error = DAV_ERROR; |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
803 | sstr_t err = ucx_sprintf("Key %s not found", key); |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
804 | dav_session_set_errstr(sn, err.ptr); |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
805 | free(err.ptr); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
806 | return NULL; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
807 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
808 | |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
809 | return util_encrypt_str_k(sn, str, k); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
810 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
811 | |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
812 | char* util_encrypt_str_k(DavSession *sn, char *str, DavKey *key) { |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
813 | char *enc_str = aes_encrypt(str, strlen(str), key); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
814 | char *ret_str = dav_session_strdup(sn, enc_str); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
815 | free(enc_str); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
816 | return ret_str; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
817 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
818 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
819 | char* util_decrypt_str(DavSession *sn, char *str, char *key) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
820 | DavKey *k = dav_context_get_key(sn->context, key); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
821 | if(!k) { |
225
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
822 | sn->error = DAV_ERROR; |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
823 | sstr_t err = ucx_sprintf("Key %s not found", key); |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
824 | dav_session_set_errstr(sn, err.ptr); |
a297c2e28fa1
improved error handling in libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
189
diff
changeset
|
825 | free(err.ptr); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
826 | return NULL; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
827 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
828 | |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
829 | return util_decrypt_str_k(sn, str, k); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
830 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
831 | |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
832 | char* util_decrypt_str_k(DavSession *sn, char *str, DavKey *key) { |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
833 | size_t len = 0; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
834 | char *dec_str = aes_decrypt(str, &len, key); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
835 | char *ret_str = dav_session_strdup(sn, dec_str); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
836 | free(dec_str); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
837 | return ret_str; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
838 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
839 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
840 | char* util_random_str() { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
841 | unsigned char *str = malloc(25); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
842 | str[24] = '\0'; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
843 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
844 | sstr_t t = S( |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
845 | "01234567890" |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
846 | "abcdefghijklmnopqrstuvwxyz" |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
847 | "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
848 | const unsigned char *table = (const unsigned char*)t.ptr; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
849 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
850 | #ifdef DAV_USE_OPENSSL |
337
d7bda914d120
replaces RAND_pseudo_bytes with RAND_bytes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
329
diff
changeset
|
851 | RAND_bytes(str, 24); |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
852 | #else |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
853 | dav_rand_bytes(str, 24); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
344
diff
changeset
|
854 | #endif |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
855 | for(int i=0;i<24;i++) { |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
856 | int c = str[i] % t.length; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
857 | str[i] = table[c]; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
858 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
859 | |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
860 | return (char*)str; |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
861 | } |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
862 | |
33
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
863 | /* |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
864 | * gets a substring from 0 to the appearance of the token |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
865 | * tokens are separated by space |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
866 | * sets sub to the substring and returns the remaining string |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
867 | */ |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
868 | sstr_t util_getsubstr_until_token(sstr_t str, sstr_t token, sstr_t *sub) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
869 | int i; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
870 | int token_start = -1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
871 | int token_end = -1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
872 | for(i=0;i<=str.length;i++) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
873 | int c; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
874 | if(i == str.length) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
875 | c = ' '; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
876 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
877 | c = str.ptr[i]; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
878 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
879 | if(c < 33) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
880 | if(token_start != -1) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
881 | token_end = i; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
882 | size_t len = token_end - token_start; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
883 | sstr_t tk = sstrsubsl(str, token_start, len); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
884 | //printf("token: {%.*s}\n", token.length, token.ptr); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
885 | if(!sstrcmp(tk, token)) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
886 | *sub = sstrtrim(sstrsubsl(str, 0, token_start)); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
887 | break; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
888 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
889 | token_start = -1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
890 | token_end = -1; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
891 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
892 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
893 | if(token_start == -1) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
894 | token_start = i; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
895 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
896 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
897 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
898 | |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
899 | if(i < str.length) { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
900 | return sstrtrim(sstrsubs(str, i)); |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
901 | } else { |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
902 | str.ptr = NULL; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
903 | str.length = 0; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
904 | return str; |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
905 | } |
0bbbb0341606
some code cleanup and bug fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
906 | } |
119
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
907 | |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
908 | sstr_t util_readline(FILE *stream) { |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
909 | UcxBuffer *buf = ucx_buffer_new(NULL, 128, UCX_BUFFER_AUTOEXTEND); |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
910 | |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
911 | int c; |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
912 | while((c = fgetc(stream)) != '\n') { |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
913 | ucx_buffer_putc(buf, c); |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
914 | } |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
915 | |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
916 | sstr_t str = sstrdup(sstrtrim(sstrn(buf->space, buf->size))); |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
917 | ucx_buffer_free(buf); |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
918 | return str; |
451607eeff05
added initial code for config commands
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
919 | } |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
920 | |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
921 | char* util_password_input(char *prompt) { |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
922 | fprintf(stderr, "%s", prompt); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
923 | fflush(stderr); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
924 | |
153
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
925 | #ifndef _WIN32 |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
926 | // hide terminal input |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
927 | struct termios oflags, nflags; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
928 | tcgetattr(fileno(stdin), &oflags); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
929 | nflags = oflags; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
930 | nflags.c_lflag &= ~ECHO; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
931 | nflags.c_lflag |= ECHONL; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
932 | if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) { |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
933 | perror("tcsetattr"); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
934 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
935 | #endif |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
936 | |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
937 | // read password input |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
938 | UcxBuffer *buf = ucx_buffer_new(NULL, 128, UCX_BUFFER_AUTOEXTEND); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
939 | int c = 0; |
153
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
940 | while((c = getpasswordchar()) != EOF) { |
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
941 | if(c == '\n' || c == '\r') { |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
942 | break; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
943 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
944 | ucx_buffer_putc(buf, c); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
945 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
946 | ucx_buffer_putc(buf, 0); |
153
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
947 | fflush(stdin); |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
948 | |
153
272173064319
implemented hidden password input for windows by using conio
Mike Becker <universe@uap-core.de>
parents:
152
diff
changeset
|
949 | #ifndef _WIN32 |
147
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
950 | // restore terminal settings |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
951 | if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) { |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
952 | perror("tcsetattr"); |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
953 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
954 | #endif |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
955 | |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
956 | char *str = buf->space; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
957 | free(buf); // only free the UcxBuffer struct |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
958 | return str; |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
959 | } |
458a8dc68048
added password based keys and fixed crash when keys are missing
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
124
diff
changeset
|
960 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
961 | |
542
060a8cda7f62
adds wrapper functions for setting/getting the content hash
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
535
diff
changeset
|
962 | char* util_hexstr(const unsigned char *data, size_t len) { |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
963 | size_t buflen = 2*len + 4; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
964 | UcxBuffer *buf = ucx_buffer_new(malloc(buflen), buflen + 1, 0); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
965 | for(int i=0;i<len;i++) { |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
966 | ucx_bprintf(buf, "%x", data[i]); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
967 | } |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
968 | ucx_buffer_putc(buf, 0); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
969 | char *str = buf->space; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
970 | ucx_buffer_free(buf); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
971 | return str; |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
149
diff
changeset
|
972 | } |
544
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
973 | |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
974 | void util_remove_trailing_pathseparator(char *path) { |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
975 | size_t len = strlen(path); |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
976 | if(len < 2) { |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
977 | return; |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
978 | } |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
979 | |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
980 | if(path[len-1] == '/') { |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
981 | path[len-1] = '\0'; |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
982 | } |
9e85e1ec1155
adds semi functional download of splitted files
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
543
diff
changeset
|
983 | } |
545
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
984 | |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
985 | char* util_file_hash(const char *path) { |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
986 | FILE *in = fopen(path, "r"); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
987 | if(!in) { |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
988 | return NULL; |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
989 | } |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
990 | |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
991 | DAV_SHA_CTX *sha = dav_hash_init(); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
992 | char *buf = malloc(16384); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
993 | |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
994 | size_t r; |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
995 | while((r = fread(buf, 1, 16384, in)) > 0) { |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
996 | dav_hash_update(sha, buf, r); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
997 | } |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
998 | |
558
1a9e6a5c1e79
fixes several signedness issues
Mike Becker <universe@uap-core.de>
parents:
545
diff
changeset
|
999 | unsigned char hash[DAV_SHA256_DIGEST_LENGTH]; |
545
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
1000 | dav_hash_final(sha, hash); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
1001 | free(buf); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
1002 | fclose(in); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
1003 | |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
1004 | return util_hexstr(hash, DAV_SHA256_DIGEST_LENGTH); |
268157722a0e
store content hash for splitted resources in the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
544
diff
changeset
|
1005 | } |