]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/findlib/find_one.c
Merge branch 'master' into basejobv3
[bacula/bacula] / bacula / src / findlib / find_one.c
index 38fbfa47b350c6de370d197d03870675cbfaf5dd..4d23539eefafcbef7c4426974f6cb713b2df8e9f 100644 (file)
@@ -299,6 +299,35 @@ static bool check_changes(JCR *jcr, FF_PKT *ff_pkt)
    return true;
 }
 
+static bool have_ignoredir(FF_PKT *ff_pkt)
+{
+   struct stat sb;
+   char tmp_name[MAXPATHLEN];
+   char *ignoredir;
+
+   /* Ensure that pointers are defined */
+   if (!ff_pkt->fileset || !ff_pkt->fileset->incexe) {
+      return false;
+   }
+   ignoredir = ff_pkt->fileset->incexe->ignoredir;
+   
+   if (ignoredir) {
+      if (strlen(ff_pkt->fname) + strlen(ignoredir) + 2 > MAXPATHLEN) {
+         return false;
+      }
+
+      strcpy(tmp_name, ff_pkt->fname);
+      strcat(tmp_name, "/");
+      strcat(tmp_name, ignoredir);
+      if (stat(tmp_name, &sb) == 0) {
+         Dmsg2(100, "Directory '%s' ignored (found %s)\n",
+               ff_pkt->fname, ignoredir);
+         return true;      /* Just ignore this directory */
+      } 
+   }
+   return false;
+}
+
 /*
  * Find a single file.
  * handle_file is the callback for handling the file.
@@ -528,44 +557,12 @@ find_one_file(JCR *jcr, FF_PKT *ff_pkt,
       bool recurse = true;
       bool volhas_attrlist = ff_pkt->volhas_attrlist;    /* Remember this if we recurse */
 
-      /*
-       * If we are using Win32 (non-portable) backup API, don't check
-       *  access as everything is more complicated, and
-       *  in principle, we should be able to access everything.
-       */
-      if (!have_win32_api() || (ff_pkt->flags & FO_PORTABLE)) {
-         if (access(fname, R_OK) == -1 && geteuid() != 0) {
-            /* Could not access() directory */
-            ff_pkt->type = FT_NOACCESS;
-            ff_pkt->ff_errno = errno;
-            rtn_stat = handle_file(jcr, ff_pkt, top_level);
-            if (ff_pkt->linked) {
-               ff_pkt->linked->FileIndex = ff_pkt->FileIndex;
-            }
-            return rtn_stat;
-         }
-      }
-
       /*
        * Ignore this directory and everything below if the file .nobackup
        * (or what is defined for IgnoreDir in this fileset) exists
        */
-      if (ff_pkt->ignoredir != NULL) {
-         struct stat sb;
-         char fname[MAXPATHLEN];
-
-         if (strlen(ff_pkt->fname) + strlen("/") +
-            strlen(ff_pkt->ignoredir) + 1 > MAXPATHLEN)
-            return 1;   /* Is this wisdom? */
-
-         strcpy(fname, ff_pkt->fname);
-         strcat(fname, "/");
-         strcat(fname, ff_pkt->ignoredir);
-         if (stat(fname, &sb) == 0) {
-            Dmsg2(100, "Directory '%s' ignored (found %s)\n",
-               ff_pkt->fname, ff_pkt->ignoredir);
-            return 1;      /* Just ignore this directory */
-         }
+      if (have_ignoredir(ff_pkt)) {
+         return 1; /* Just ignore this directory */
       }
 
       /* Build a canonical directory name with a trailing slash in link var */