* fhandler.cc (fhandler_base::fhaccess): Avoid always setting errno to EACCESS

when return value is < 0.  Rely on errno being set properly.
This commit is contained in:
Christopher Faylor 2004-01-25 23:39:26 +00:00
parent 6bc774fc6b
commit d7231d7224
2 changed files with 22 additions and 14 deletions

View File

@ -1,3 +1,8 @@
2004-01-25 Christopher Faylor <cgf@redhat.com>
* fhandler.cc (fhandler_base::fhaccess): Avoid always setting errno to
EACCESS when return value is < 0. Rely on errno being set properly.
2004-01-25 Christopher Faylor <cgf@redhat.com> 2004-01-25 Christopher Faylor <cgf@redhat.com>
* sigproc.cc (proc_subproc): Don't protect *child's* handle. * sigproc.cc (proc_subproc): Don't protect *child's* handle.

View File

@ -353,12 +353,12 @@ fhandler_base::fhaccess (int flags)
if (is_fs_special ()) if (is_fs_special ())
/* short circuit */; /* short circuit */;
else if (has_attribute (FILE_ATTRIBUTE_READONLY) && (flags & W_OK)) else if (has_attribute (FILE_ATTRIBUTE_READONLY) && (flags & W_OK))
goto eaccess_done;
else if (has_acls () && allow_ntsec)
{ {
set_errno (EACCES); res = check_file_access (get_win32_name (), flags);
goto done; goto done;
} }
else if (has_acls () && allow_ntsec)
return check_file_access (get_win32_name (), flags);
struct __stat64 st; struct __stat64 st;
if (fstat (&st)) if (fstat (&st))
@ -369,15 +369,15 @@ fhandler_base::fhaccess (int flags)
if (st.st_uid == myself->uid) if (st.st_uid == myself->uid)
{ {
if (!(st.st_mode & S_IRUSR)) if (!(st.st_mode & S_IRUSR))
goto done; goto eaccess_done;
} }
else if (st.st_gid == myself->gid) else if (st.st_gid == myself->gid)
{ {
if (!(st.st_mode & S_IRGRP)) if (!(st.st_mode & S_IRGRP))
goto done; goto eaccess_done;
} }
else if (!(st.st_mode & S_IROTH)) else if (!(st.st_mode & S_IROTH))
goto done; goto eaccess_done;
} }
if (flags & W_OK) if (flags & W_OK)
@ -385,15 +385,15 @@ fhandler_base::fhaccess (int flags)
if (st.st_uid == myself->uid) if (st.st_uid == myself->uid)
{ {
if (!(st.st_mode & S_IWUSR)) if (!(st.st_mode & S_IWUSR))
goto done; goto eaccess_done;
} }
else if (st.st_gid == myself->gid) else if (st.st_gid == myself->gid)
{ {
if (!(st.st_mode & S_IWGRP)) if (!(st.st_mode & S_IWGRP))
goto done; goto eaccess_done;
} }
else if (!(st.st_mode & S_IWOTH)) else if (!(st.st_mode & S_IWOTH))
goto done; goto eaccess_done;
} }
if (flags & X_OK) if (flags & X_OK)
@ -401,20 +401,23 @@ fhandler_base::fhaccess (int flags)
if (st.st_uid == myself->uid) if (st.st_uid == myself->uid)
{ {
if (!(st.st_mode & S_IXUSR)) if (!(st.st_mode & S_IXUSR))
goto done; goto eaccess_done;
} }
else if (st.st_gid == myself->gid) else if (st.st_gid == myself->gid)
{ {
if (!(st.st_mode & S_IXGRP)) if (!(st.st_mode & S_IXGRP))
goto done; goto eaccess_done;
} }
else if (!(st.st_mode & S_IXOTH)) else if (!(st.st_mode & S_IXOTH))
goto done; goto eaccess_done;
} }
res = 0; res = 0;
goto done;
eaccess_done:
set_errno (EACCES);
done: done:
if (res)
set_errno (EACCES);
debug_printf ("returning %d", res); debug_printf ("returning %d", res);
return res; return res;
} }