diff -r 6bb9479d9c64 -r 78935b45e2ce dav/main.c --- a/dav/main.c Sat Aug 17 14:57:17 2013 +0200 +++ b/dav/main.c Mon Aug 19 12:50:42 2013 +0200 @@ -590,10 +590,20 @@ return -1; } - DavResource *res = dav_resource_new(sn, path); + DavResource *res = dav_query(sn, "get - from %s", path); if(!res) { - fprintf(stderr, "error\n"); - return -1; + if(sn->error = DAV_NOT_FOUND) { + res = dav_resource_new(sn, path); + } else { + fprintf(stderr, "error\n"); + return -1; + } + } else if(res->iscollection) { + // TODO: free res + char *newpath = util_concat_path(path, file); + free(path); + path = newpath; + res = dav_resource_new(sn, path); } AESEncrypter *enc = NULL; @@ -602,14 +612,16 @@ char *plain = cmd_getoption(a, "plain"); if(!plain && (keyname || repo)) { kn = keyname ? keyname : repo->default_key; - Key *key = get_key(kn); - if(!key) { - fprintf(stderr, "Key %s not found!\nAbort.\n", kn); - // TODO: free - return -1; - } - if(keyname || repo->encrypt) { - enc = aes_encrypter_new(key, in, (dav_read_func)fread); + if(kn) { + Key *key = get_key(kn); + if(!key) { + fprintf(stderr, "Key %s not found!\nAbort.\n", kn); + // TODO: free + return -1; + } + if(keyname || repo->encrypt) { + enc = aes_encrypter_new(key, in, (dav_read_func)fread); + } } } if(enc) {