From: Andre Noll Date: Thu, 1 Sep 2016 15:13:50 +0000 (+0200) Subject: create: Make the directory scan more robust. X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=66748e15aff805c9d8c5016a74fc51d1e7ef6fe1;p=adu.git create: Make the directory scan more robust. 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. --- diff --git a/create.c b/create.c index af5694c..a3373db 100644 --- 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))) {