]> arthur.barton.de Git - netatalk.git/blobdiff - bin/ad/ad_cp.c
Merge 2-1
[netatalk.git] / bin / ad / ad_cp.c
index 15fc3ba509face9ac43db871ee8a8943713357c3..ac0a737a0b5a12cfcc3477ace70f282ba7f5a3e4 100644 (file)
@@ -387,6 +387,10 @@ static int copy(const char *path,
     if (alarmed)
         return -1;
 
+    /* This currently doesn't work with "." */
+    if (strcmp(path, ".") == 0) {
+        ERROR("\".\" not supported");
+    }
     const char *dir = strrchr(path, '/');
     if (dir == NULL)
         dir = path;
@@ -527,11 +531,15 @@ static int copy(const char *path,
 
             /* Get CNID of Parent and add new childir to CNID database */
             ppdid = pdid;
-            did = cnid_for_path(&dvolume, to.p_path, &pdid);
+            if ((did = cnid_for_path(&dvolume, to.p_path, &pdid)) == CNID_INVALID) {
+                SLOG("Error resolving CNID for %s", to.p_path);
+                badcp = rval = 1;
+                return -1;
+            }
 
             struct adouble ad;
             struct stat st;
-            if (stat(to.p_path, &st) != 0) {
+            if (lstat(to.p_path, &st) != 0) {
                 badcp = rval = 1;
                 break;
             }
@@ -589,11 +597,16 @@ static int copy(const char *path,
 
             /* Get CNID of Parent and add new childir to CNID database */
             pdid = did;
-            cnid_t cnid = cnid_for_path(&dvolume, to.p_path, &did);
+            cnid_t cnid;
+            if ((cnid = cnid_for_path(&dvolume, to.p_path, &did)) == CNID_INVALID) {
+                SLOG("Error resolving CNID for %s", to.p_path);
+                badcp = rval = 1;
+                return -1;
+            }
 
             struct adouble ad;
             struct stat st;
-            if (stat(to.p_path, &st) != 0) {
+            if (lstat(to.p_path, &st) != 0) {
                 badcp = rval = 1;
                 break;
             }