mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
hurd: Fix O_DIRECTORY | O_NOFOLLOW
Appending / to the path to be looked up would make us always follow a final symlink, even with O_NOTRANS (since the final resolution is after the '/'). In the O_DIRECTORY | O_NOFOLLOW case, we thus have to really open the node and stat it, which we already do anyway, and check for directory type. * hurd/hurdlookup.c (__hurd_file_name_lookup): Do not append '/' to path when flags contains O_NOFOLLOW. * hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Return ENOTDIR if flags contains O_DIRECTORY and the result is a directory.
This commit is contained in:
parent
489999cc9c
commit
72103e73c9
@ -64,6 +64,10 @@
|
||||
* sysdeps/mach/hurd/cthreads.c: Include <cthreads.h>.
|
||||
* hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Return ELOOP
|
||||
when opening a symlink with O_NOFOLLOW.
|
||||
* hurd/hurdlookup.c (__hurd_file_name_lookup): Do not append '/' to
|
||||
path when flags contains O_NOFOLLOW.
|
||||
* hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Return ENOTDIR
|
||||
if flags contains O_DIRECTORY and the result is a directory.
|
||||
|
||||
2018-03-17 Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
|
||||
|
@ -72,7 +72,7 @@ __hurd_file_name_lookup (error_t (*use_init_port)
|
||||
if (flags & O_NOFOLLOW) /* See lookup-retry.c about O_NOFOLLOW. */
|
||||
flags |= O_NOTRANS;
|
||||
|
||||
if (flags & O_DIRECTORY)
|
||||
if (flags & O_DIRECTORY && (flags & O_NOFOLLOW) == 0)
|
||||
{
|
||||
/* The caller wants to require that the file we look up is a directory.
|
||||
We can do this without an extra RPC by appending a trailing slash
|
||||
|
@ -147,6 +147,8 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
|
||||
err = __io_stat (*result, &st);
|
||||
if (!err)
|
||||
{
|
||||
if (flags & O_DIRECTORY && !S_ISDIR (st.st_mode))
|
||||
err = ENOTDIR;
|
||||
if (S_ISLNK (st.st_mode))
|
||||
err = ELOOP;
|
||||
else if (st.st_mode & (S_IPTRANS|S_IATRANS))
|
||||
|
Loading…
Reference in New Issue
Block a user