85 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); |
85 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); |
86 sstr_t s; |
86 sstr_t s; |
87 |
87 |
88 int add_crypto_name = 1; |
88 int add_crypto_name = 1; |
89 int add_crypto_key = 1; |
89 int add_crypto_key = 1; |
|
90 int add_crypto_hash = 1; |
90 char *crypto_ns = "idav"; |
91 char *crypto_ns = "idav"; |
91 UcxMap *namespaces = ucx_map_new(8); |
92 UcxMap *namespaces = ucx_map_new(8); |
92 UCX_FOREACH(elm, properties) { |
93 UCX_FOREACH(elm, properties) { |
93 DavProperty *p = elm->data; |
94 DavProperty *p = elm->data; |
94 if(strcmp(p->ns->name, "DAV:")) { |
95 if(strcmp(p->ns->name, "DAV:")) { |
102 add_crypto_name = 0; |
103 add_crypto_name = 0; |
103 crypto_ns = p->ns->prefix; |
104 crypto_ns = p->ns->prefix; |
104 } else if(!strcmp(p->name, "crypto-key")) { |
105 } else if(!strcmp(p->name, "crypto-key")) { |
105 add_crypto_key = 0; |
106 add_crypto_key = 0; |
106 crypto_ns = p->ns->prefix; |
107 crypto_ns = p->ns->prefix; |
|
108 } else if(!strcmp(p->name, "crypto-hash")) { |
|
109 add_crypto_hash = 0; |
|
110 crypto_ns = p->ns->prefix; |
107 } |
111 } |
108 } |
112 } |
109 } |
113 } |
110 |
114 |
111 DavNamespace idav_ns; |
115 DavNamespace idav_ns; |
164 ucx_buffer_putc(buf, '<'); |
168 ucx_buffer_putc(buf, '<'); |
165 ucx_buffer_puts(buf, crypto_ns); |
169 ucx_buffer_puts(buf, crypto_ns); |
166 s = S(":crypto-key />\n"); |
170 s = S(":crypto-key />\n"); |
167 ucx_buffer_write(s.ptr, 1, s.length, buf); |
171 ucx_buffer_write(s.ptr, 1, s.length, buf); |
168 } |
172 } |
|
173 if(add_crypto_hash) { |
|
174 ucx_buffer_putc(buf, '<'); |
|
175 ucx_buffer_puts(buf, crypto_ns); |
|
176 s = S(":crypto-hash />\n"); |
|
177 ucx_buffer_write(s.ptr, 1, s.length, buf); |
|
178 } |
169 } |
179 } |
170 |
180 |
171 // extra properties |
181 // extra properties |
172 UCX_FOREACH(elm, properties) { |
182 UCX_FOREACH(elm, properties) { |
173 DavProperty *prop = elm->data; |
183 DavProperty *prop = elm->data; |
211 s = S("<D:resourcetype />\n"); |
221 s = S("<D:resourcetype />\n"); |
212 ucx_buffer_write(s.ptr, 1, s.length, buf); |
222 ucx_buffer_write(s.ptr, 1, s.length, buf); |
213 s = S("<i:crypto-key />\n"); |
223 s = S("<i:crypto-key />\n"); |
214 ucx_buffer_write(s.ptr, 1, s.length, buf); |
224 ucx_buffer_write(s.ptr, 1, s.length, buf); |
215 s = S("<i:crypto-name />\n"); |
225 s = S("<i:crypto-name />\n"); |
|
226 ucx_buffer_write(s.ptr, 1, s.length, buf); |
|
227 s = S("<i:crypto-hash />\n"); |
216 ucx_buffer_write(s.ptr, 1, s.length, buf); |
228 ucx_buffer_write(s.ptr, 1, s.length, buf); |
217 s = S("</D:prop>\n"); |
229 s = S("</D:prop>\n"); |
218 ucx_buffer_write(s.ptr, 1, s.length, buf); |
230 ucx_buffer_write(s.ptr, 1, s.length, buf); |
219 |
231 |
220 // end |
232 // end |
783 ucx_buffer_write(s.ptr, 1, s.length, buf); |
795 ucx_buffer_write(s.ptr, 1, s.length, buf); |
784 |
796 |
785 return buf; |
797 return buf; |
786 } |
798 } |
787 |
799 |
788 UcxBuffer* create_crypto_proppatch_request(DavSession *sn, DavKey *key, char *name) { |
800 UcxBuffer* create_crypto_proppatch_request(DavSession *sn, DavKey *key, char *name, char *hash) { |
789 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); |
801 UcxBuffer *buf = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); |
790 sstr_t s; |
802 sstr_t s; |
791 |
803 |
792 s = S("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); |
804 s = S("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); |
793 ucx_buffer_write(s.ptr, 1, s.length, buf); |
805 ucx_buffer_write(s.ptr, 1, s.length, buf); |
799 ucx_buffer_write(s.ptr, 1, s.length, buf); |
811 ucx_buffer_write(s.ptr, 1, s.length, buf); |
800 |
812 |
801 if(DAV_ENCRYPT_NAME(sn)) { |
813 if(DAV_ENCRYPT_NAME(sn)) { |
802 s = S("<idav:crypto-name>"); |
814 s = S("<idav:crypto-name>"); |
803 ucx_buffer_write(s.ptr, 1, s.length, buf); |
815 ucx_buffer_write(s.ptr, 1, s.length, buf); |
804 char *crname = aes_encrypt(name, key); |
816 char *crname = aes_encrypt(name, strlen(name), key); |
805 ucx_buffer_puts(buf, crname); |
817 ucx_buffer_puts(buf, crname); |
806 free(crname); |
818 free(crname); |
807 s = S("</idav:crypto-name>\n"); |
819 s = S("</idav:crypto-name>\n"); |
808 ucx_buffer_write(s.ptr, 1, s.length, buf); |
820 ucx_buffer_write(s.ptr, 1, s.length, buf); |
809 } |
821 } |
811 s = S("<idav:crypto-key>"); |
823 s = S("<idav:crypto-key>"); |
812 ucx_buffer_write(s.ptr, 1, s.length, buf); |
824 ucx_buffer_write(s.ptr, 1, s.length, buf); |
813 ucx_buffer_puts(buf, key->name); |
825 ucx_buffer_puts(buf, key->name); |
814 s = S("</idav:crypto-key>\n"); |
826 s = S("</idav:crypto-key>\n"); |
815 ucx_buffer_write(s.ptr, 1, s.length, buf); |
827 ucx_buffer_write(s.ptr, 1, s.length, buf); |
|
828 |
|
829 if(hash) { |
|
830 s = S("<idav:crypto-hash>"); |
|
831 ucx_buffer_write(s.ptr, 1, s.length, buf); |
|
832 ucx_buffer_puts(buf, hash); |
|
833 s = S("</idav:crypto-hash>\n"); |
|
834 ucx_buffer_write(s.ptr, 1, s.length, buf); |
|
835 } |
816 |
836 |
817 s = S("</D:prop>\n</D:set>\n</D:propertyupdate>\n"); |
837 s = S("</D:prop>\n</D:set>\n</D:propertyupdate>\n"); |
818 ucx_buffer_write(s.ptr, 1, s.length, buf); |
838 ucx_buffer_write(s.ptr, 1, s.length, buf); |
819 |
839 |
820 return buf; |
840 return buf; |