dav/main.c

changeset 21
78935b45e2ce
parent 18
651989681053
child 22
e593f7e41be0
--- 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) {

mercurial