mirror of
https://sourceware.org/git/glibc.git
synced 2025-10-12 19:04:54 +03:00
Test mkdirat use of mode argument
The test io/tst-mkdirat doesn't verify the permissions on the created directory (thus, doesn't verify at all anything about how mkdirat uses the mode argument). Add checks of this to the existing test. Tested for x86_64.
This commit is contained in:
@@ -53,6 +53,10 @@ prepare (void)
|
|||||||
static int
|
static int
|
||||||
do_test (void)
|
do_test (void)
|
||||||
{
|
{
|
||||||
|
/* Find the current umask. */
|
||||||
|
mode_t mask = umask (022);
|
||||||
|
umask (mask);
|
||||||
|
|
||||||
/* fdopendir takes over the descriptor, make a copy. */
|
/* fdopendir takes over the descriptor, make a copy. */
|
||||||
int dupfd = dup (dir_fd);
|
int dupfd = dup (dir_fd);
|
||||||
if (dupfd == -1)
|
if (dupfd == -1)
|
||||||
@@ -107,6 +111,13 @@ do_test (void)
|
|||||||
puts ("mkdirat did not create a directory");
|
puts ("mkdirat did not create a directory");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if ((st1.st_mode & 01777) != (~mask & 0777))
|
||||||
|
{
|
||||||
|
printf ("mkdirat created directory with wrong mode %o, expected %o\n",
|
||||||
|
(unsigned int) (st1.st_mode & 01777),
|
||||||
|
(unsigned int) (~mask & 0777));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
dupfd = dup (dir_fd);
|
dupfd = dup (dir_fd);
|
||||||
if (dupfd == -1)
|
if (dupfd == -1)
|
||||||
@@ -156,6 +167,37 @@ do_test (void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test again with a different mode. */
|
||||||
|
umask (0);
|
||||||
|
e = mkdirat (dir_fd, "some-dir", 01755);
|
||||||
|
umask (mask);
|
||||||
|
if (e == -1)
|
||||||
|
{
|
||||||
|
puts ("directory creation (different mode) failed");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (fstatat64 (dir_fd, "some-dir", &st1, 0) != 0)
|
||||||
|
{
|
||||||
|
puts ("fstat64 (different mode) failed");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!S_ISDIR (st1.st_mode))
|
||||||
|
{
|
||||||
|
puts ("mkdirat (different mode) did not create a directory");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ((st1.st_mode & 01777) != 01755)
|
||||||
|
{
|
||||||
|
printf ("mkdirat (different mode) created directory with wrong mode %o\n",
|
||||||
|
(unsigned int) (st1.st_mode & 01777));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (unlinkat (dir_fd, "some-dir", AT_REMOVEDIR) != 0)
|
||||||
|
{
|
||||||
|
puts ("unlinkat (different mode) failed");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
close (dir_fd);
|
close (dir_fd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user