]> git.tuebingen.mpg.de Git - adu.git/commitdiff
create: Make the directory scan more robust.
authorAndre Noll <maan@tuebingen.mpg.de>
Thu, 1 Sep 2016 15:13:50 +0000 (17:13 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Fri, 2 Sep 2016 11:58:28 +0000 (13:58 +0200)
The directory traversal of adu calls adu_opendir() of fd.c for every
subdirectory. If this call fails with EACCESS, a warning is printed
but the operation continues, ignoring the directory which could not
be accessed. Other errors are considered fatal, though, and adu aborts
in this case.

This patch continues to scan in this case. This is achieved by making
all errors from adu_opendir non-fatal. In the error case we print a
warning and ignore the directory, but no longer abort.

Thanks to Steffen Schmidt for pointing out this flaw.

create.c

index af5694c4cba8b4148d1b083b5307fb2240335a29..a3373db4ff5d975eb46161512ad8654518abe717 100644 (file)
--- a/create.c
+++ b/create.c
@@ -140,10 +140,9 @@ static int scan_dir(char *dirname, uint64_t *parent_dir_num)
        check_signals();
        DEBUG_LOG("----------------- %llu: %s\n", (long long unsigned)current_dir_num, dirname);
        ret = adu_opendir(dirname, &dir, &cwd_fd);
-       if (ret < 0) {
-               if (ret != -ERRNO_TO_ERROR(EACCES))
-                       return ret;
-               WARNING_LOG("permission denied for %s\n", dirname);
+       if (ret < 0) { /* Non-fatal, continue with next dir */
+               WARNING_LOG("skipping dir %s: %s\n", dirname,
+                       adu_strerror(-ret));
                return 1;
        }
        while ((entry = readdir(dir))) {