dav/config.c

changeset 150
37fb12574acd
parent 147
458a8dc68048
child 154
3cfb4670d9e6
equal deleted inserted replaced
149:509e9e1cbdcc 150:37fb12574acd
300 void load_key(xmlNode *keynode) { 300 void load_key(xmlNode *keynode) {
301 xmlNode *node = keynode->children; 301 xmlNode *node = keynode->children;
302 Key *key = calloc(1, sizeof(Key)); 302 Key *key = calloc(1, sizeof(Key));
303 key->type = KEY_AES256; 303 key->type = KEY_AES256;
304 304
305 int error = 0;
305 while(node) { 306 while(node) {
306 if(node->type == XML_ELEMENT_NODE) { 307 if(node->type == XML_ELEMENT_NODE) {
307 char *value = util_xml_get_text(node); 308 char *value = util_xml_get_text(node);
308 if(!value) { 309 if(!value) {
309 // next 310 // next
313 // load key file 314 // load key file
314 sstr_t key_data = load_key_file(value); 315 sstr_t key_data = load_key_file(value);
315 if(key_data.length > 0) { 316 if(key_data.length > 0) {
316 key->data = key_data.ptr; 317 key->data = key_data.ptr;
317 key->length = key_data.length; 318 key->length = key_data.length;
319 } else {
320 fprintf(stderr, "Error: Cannot key from file: %s\n", value);
321 error = 1;
318 } 322 }
319 } else if(xstreq(node->name, "type")) { 323 } else if(xstreq(node->name, "type")) {
320 if(!strcmp(value, "aes128")) { 324 if(!strcmp(value, "aes128")) {
321 key->type = KEY_AES128; 325 key->type = KEY_AES128;
322 } else if(!strcmp(value, "aes256")) { 326 } else if(!strcmp(value, "aes256")) {
328 332
329 } 333 }
330 node = node->next; 334 node = node->next;
331 } 335 }
332 336
333 if(key->name) { 337 if(!error && key->name) {
338 error = 0;
334 if(key->type == KEY_AES128) { 339 if(key->type == KEY_AES128) {
335 if(key->length < 16) { 340 if(key->length < 16) {
336 fprintf( 341 fprintf(
337 stderr, 342 stderr,
338 "Error: Key %s is too small (%d < 16)\n", 343 "Error: Key %s is too small (%zu < 16)\n",
339 key->name, 344 key->name,
340 key->length); 345 key->length);
341 return; 346 error = 1;
342 } 347 }
343 key->length = 16; 348 key->length = 16;
344 } 349 }
345 if(key->type == KEY_AES256) { 350 if(key->type == KEY_AES256) {
346 if(key->length < 32) { 351 if(key->length < 32) {
347 fprintf( 352 fprintf(
348 stderr, 353 stderr,
349 "Error: Key %s is too small (%d < 32)\n", 354 "Error: Key %s is too small (%zu < 32)\n",
350 key->name, 355 key->name,
351 key->length); 356 key->length);
352 return; 357 error = 1;
353 } 358 }
354 key->length = 32; 359 key->length = 32;
355 } 360 }
356 if(key->type == KEY_PASSWORD) { 361 if(key->type == KEY_PASSWORD) {
357 key->length = 0; 362 key->length = 0;
359 // make sure the pw-key is not loaded from a file 364 // make sure the pw-key is not loaded from a file
360 free(key->data); 365 free(key->data);
361 key->data = NULL; 366 key->data = NULL;
362 } 367 }
363 } 368 }
364 ucx_map_cstr_put(keys, key->name, key); 369
365 dav_context_add_key(context, key); 370 // add key to context
366 } else { 371 if(!error) {
372 ucx_map_cstr_put(keys, key->name, key);
373 dav_context_add_key(context, key);
374 }
375 }
376
377 // cleanup
378 if(error) {
367 if(key->data) { 379 if(key->data) {
368 free(key->data); 380 free(key->data);
369 free(key); 381 }
370 } 382 free(key);
371 } 383 }
372 } 384 }
373 385
374 sstr_t load_key_file(char *filename) { 386 sstr_t load_key_file(char *filename) {
375 sstr_t k; 387 sstr_t k;

mercurial