check that requested file is actually a directory
authorKirk McKusick <mckusic@ucbvax.Berkeley.EDU>
Thu, 11 Mar 1982 15:46:50 +0000 (07:46 -0800)
committerKirk McKusick <mckusic@ucbvax.Berkeley.EDU>
Thu, 11 Mar 1982 15:46:50 +0000 (07:46 -0800)
SCCS-vsn: lib/libc/gen/opendir.c 4.2

usr/src/lib/libc/gen/opendir.c

index 9449c31..94e20e7 100644 (file)
@@ -1,8 +1,9 @@
 /* Copyright (c) 1982 Regents of the University of California */
 
 /* Copyright (c) 1982 Regents of the University of California */
 
-static char sccsid[] = "@(#)opendir.c 4.1 %G%";
+static char sccsid[] = "@(#)opendir.c 4.2 %G%";
 
 #include <sys/types.h>
 
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <ndir.h>
 
 /*
 #include <ndir.h>
 
 /*
@@ -12,7 +13,8 @@ DIR *
 opendir(name)
        char *name;
 {
 opendir(name)
        char *name;
 {
-       DIR *dirp;
+       register DIR *dirp;
+       struct stat sbuf;
 
        dirp = (DIR *)malloc(sizeof(DIR));
        dirp->dd_fd = open(name, 0);
 
        dirp = (DIR *)malloc(sizeof(DIR));
        dirp->dd_fd = open(name, 0);
@@ -20,6 +22,11 @@ opendir(name)
                free(dirp);
                return NULL;
        }
                free(dirp);
                return NULL;
        }
+       fstat(dirp->dd_fd, &sbuf);
+       if ((sbuf.st_mode & S_IFDIR) == 0) {
+               free(dirp);
+               return NULL;
+       }
        dirp->dd_loc = 0;
        return dirp;
 }
        dirp->dd_loc = 0;
        return dirp;
 }