--- a/dav/config.c Sat Oct 03 16:44:50 2015 +0200 +++ b/dav/config.c Sat Oct 03 18:11:07 2015 +0200 @@ -321,6 +321,8 @@ key->type = KEY_AES128; } else if(!strcmp(value, "aes256")) { key->type = KEY_AES256; + } else if(!strcmp(value, "password")) { + key->type = KEY_PASSWORD; } } @@ -331,20 +333,41 @@ if(key->name) { if(key->type == KEY_AES128) { if(key->length < 16) { + fprintf( + stderr, + "Error: Key %s is too small (%d < 16)\n", + key->name, + key->length); return; } key->length = 16; } if(key->type == KEY_AES256) { if(key->length < 32) { + fprintf( + stderr, + "Error: Key %s is too small (%d < 32)\n", + key->name, + key->length); return; } key->length = 32; } + if(key->type == KEY_PASSWORD) { + key->length = 0; + if(key->data) { + // make sure the pw-key is not loaded from a file + free(key->data); + key->data = NULL; + } + } ucx_map_cstr_put(keys, key->name, key); dav_context_add_key(context, key); } else { - // TODO: free + if(key->data) { + free(key->data); + free(key); + } } }