X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=etc%2Fcnid_dbd%2Fcmd_dbd_scanvol.c;h=8ce6fbf5d624989308b09269eea25d17da7b8279;hp=ba1cd623e0b54dd778ccf2b5a80cdfc3df0a72d4;hb=488cd72fca4df807617a51925d58e620d0e7400c;hpb=40ec4cf6aa9f58d91a7b11f562163b0ffb3b86f4 diff --git a/etc/cnid_dbd/cmd_dbd_scanvol.c b/etc/cnid_dbd/cmd_dbd_scanvol.c index ba1cd623..8ce6fbf5 100644 --- a/etc/cnid_dbd/cmd_dbd_scanvol.c +++ b/etc/cnid_dbd/cmd_dbd_scanvol.c @@ -610,7 +610,7 @@ static cnid_t check_cnid(const char *name, cnid_t did, struct stat *st, int adfi return db_cnid; } -static void check_orphaned(const char *name) +static int check_orphaned(const char *name) { int rc; struct stat sb; @@ -623,7 +623,9 @@ static void check_orphaned(const char *name) if (rc != 0 && errno == ENOENT) { dbd_log(LOGSTD, "Removing orphaned AppleDouble \"%s/%s\"", cwdbuf, name); unlink(name); + return 1; } + return 0; } /* @@ -734,12 +736,13 @@ static int dbd_readdir(int volroot, cnid_t did) **************************************************************************/ /* Check for invalid names and orphaned ._ files */ - if (S_ISREG(st.st_mode) && (strncmp(ep->d_name, "._", strlen("._")) == 0)) - check_orphaned(ep->d_name); - - if (!vol->vfs->vfs_validupath(vol, ep->d_name)) { - dbd_log(LOGSTD, "Ignoring \"%s/%s\"", cwdbuf, ep->d_name); - continue; + if (S_ISREG(st.st_mode) && (strncmp(ep->d_name, "._", strlen("._")) == 0)) { + if (check_orphaned(ep->d_name)) + continue; + if (vol->vfs->vfs_validupath(vol, ep->d_name)) { + dbd_log(LOGSTD, "Bad AppleDouble \"%s/%s\"", cwdbuf, ep->d_name); + continue; + } } /* Check for appledouble file, create if missing, but only if we have addir */