From 13bc3321026416c6b0245bf180f0bdcaac4174f0 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Fri, 5 Sep 1997 21:40:52 +0000 Subject: (netfs_attempt_lookup): Clear *NODE on errors. Check for lookup permission. Re-arrange code to correctly handle errors. --- hostmux/mux.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'hostmux') diff --git a/hostmux/mux.c b/hostmux/mux.c index 8dc11fc2..50c8e8e1 100644 --- a/hostmux/mux.c +++ b/hostmux/mux.c @@ -58,24 +58,31 @@ netfs_attempt_lookup (struct iouser *user, struct node *dir, if (dir->nn->name) err = ENOTDIR; - else if (strcmp (name, ".") == 0) - /* Current directory -- just add an additional reference to DIR and - return it. */ - { - netfs_nref (dir); - *node = dir; - err = 0; - } - else if (strcmp (name, "..") == 0) - err = EAGAIN; else - err = lookup_host (dir->nn->mux, name, node); + err = fshelp_access (&dir->nn_stat, S_IEXEC, user); - fshelp_touch (&dir->nn_stat, TOUCH_ATIME, hostmux_maptime); + if (! err) + { + if (strcmp (name, ".") == 0) + /* Current directory -- just add an additional reference to DIR and + return it. */ + { + netfs_nref (dir); + *node = dir; + err = 0; + } + else if (strcmp (name, "..") == 0) + err = EAGAIN; + else + err = lookup_host (dir->nn->mux, name, node); - mutex_unlock (&dir->lock); + fshelp_touch (&dir->nn_stat, TOUCH_ATIME, hostmux_maptime); + } - if (! err) + mutex_unlock (&dir->lock); + if (err) + *node = 0; + else mutex_lock (&(*node)->lock); return err; -- cgit v1.2.3