From 8ea6a7aa50e9d4c81740c1fdb19dca0d8be748e2 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 14 Mar 1999 12:59:57 +0000 Subject: [PATCH] 1999-03-14 Roland McGrath * hurd/hurdlookup.c (__hurd_file_name_lookup_retry): Under O_NOFOLLOW, check for root-owned symlinks and reject them too. --- hurd/hurdlookup.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/hurd/hurdlookup.c b/hurd/hurdlookup.c index 984a101..0714e4a 100644 --- a/hurd/hurdlookup.c +++ b/hurd/hurdlookup.c @@ -23,6 +23,7 @@ #include #include "stdio-common/_itoa.h" #include +#include /* 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 -- 2.7.4