mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-16 10:00:12 +00:00
1999-03-14 Roland McGrath <roland@baalperazim.frob.com>
* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): Under O_NOFOLLOW, check for root-owned symlinks and reject them too.
This commit is contained in:
parent
91ea72b7d2
commit
8ea6a7aa50
@ -23,6 +23,7 @@
|
||||
#include <fcntl.h>
|
||||
#include "stdio-common/_itoa.h"
|
||||
#include <hurd/term.h>
|
||||
#include <hurd/paths.h>
|
||||
|
||||
|
||||
/* Translate the error from dir_lookup into the error the user sees. */
|
||||
@ -197,9 +198,24 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
|
||||
struct stat st;
|
||||
err = __io_stat (*result, &st);
|
||||
if (!err
|
||||
&& st.st_uid != 0
|
||||
&& (st.st_mode & (S_IPTRANS|S_IATRANS)))
|
||||
err = ENOENT;
|
||||
{
|
||||
if (st.st_uid != 0)
|
||||
err = ENOENT;
|
||||
else if (st.st_mode & S_IPTRANS)
|
||||
{
|
||||
char buf[1024];
|
||||
char *trans = buf;
|
||||
size_t translen = sizeof buf;
|
||||
err = __file_get_translator (*result,
|
||||
&trans, &translen);
|
||||
if (!err
|
||||
&& translen > sizeof _HURD_SYMLINK
|
||||
&& !memcmp (trans,
|
||||
_HURD_SYMLINK, sizeof _HURD_SYMLINK))
|
||||
err = ENOENT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* We got a successful translation. Now apply any open-time
|
||||
|
Loading…
Reference in New Issue
Block a user