libidav/methods.c

changeset 150
37fb12574acd
parent 148
f21ee22170bf
child 156
4b3aecafd6be
equal deleted inserted replaced
149:509e9e1cbdcc 150:37fb12574acd
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;

mercurial