From 127c96f49905291b4566c2a1bc25d882ae111466 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 1 Oct 2006 20:45:46 +0000 Subject: r19017: Merge from Samba3: Attempt to fix the BSD RAW-CHKPATH failures: In Samba3 we rely on opendir returning ENOTDIR when the file opened is not a directory. Can we merge this back into Samba4? This includes the tabs->spaces fix requested by Stefan. Volker (This used to be commit 7b9ee1171ddc89537ba3b286f20c722fb70c980b) --- source4/lib/replace/repdir_getdents.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source4/lib/replace/repdir_getdents.c') diff --git a/source4/lib/replace/repdir_getdents.c b/source4/lib/replace/repdir_getdents.c index 07b9568dc1..6b115c4c4f 100644 --- a/source4/lib/replace/repdir_getdents.c +++ b/source4/lib/replace/repdir_getdents.c @@ -68,6 +68,7 @@ struct dir_buf { DIR *opendir(const char *dname) { struct dir_buf *d; + struct stat sb; d = malloc(sizeof(*d)); if (d == NULL) { errno = ENOMEM; @@ -78,6 +79,17 @@ DIR *opendir(const char *dname) free(d); return NULL; } + if (fstat(d->fd, &sb) < 0) { + close(d->fd); + free(d); + return NULL; + } + if (!S_ISDIR(sb.st_mode)) { + close(d->fd); + free(d); + errno = ENOTDIR; + return NULL; + } d->ofs = 0; d->seekpos = 0; d->nbytes = 0; -- cgit