mirror of git://sourceware.org/git/glibc.git
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 <fcntl.h>
|
||||||
#include "stdio-common/_itoa.h"
|
#include "stdio-common/_itoa.h"
|
||||||
#include <hurd/term.h>
|
#include <hurd/term.h>
|
||||||
|
#include <hurd/paths.h>
|
||||||
|
|
||||||
|
|
||||||
/* Translate the error from dir_lookup into the error the user sees. */
|
/* 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;
|
struct stat st;
|
||||||
err = __io_stat (*result, &st);
|
err = __io_stat (*result, &st);
|
||||||
if (!err
|
if (!err
|
||||||
&& st.st_uid != 0
|
|
||||||
&& (st.st_mode & (S_IPTRANS|S_IATRANS)))
|
&& (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
|
/* We got a successful translation. Now apply any open-time
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue