[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#699593: login: wrong egid



Hi,

I don't think GNU/kFreeBSD's behaviour is wrong;  but we may need to fix
some applications that suffer problems, including bash.


Maybe this is related to the problem (a wild guess really - the first
thing that jumped out at me as being wrong).  There are checks for
__FreeBSD__ relating to euid/egid, and they may also need to check for
__FreeBSD_kernel__

bash-4.2/lib/sh/eaccess.c:
> int
> sh_eaccess (path, mode)
>      char *path;
>      int mode;
> {
>   int ret;
> 
>   if (path_is_devfd (path))
>     return (sh_stataccess (path, mode));
> 
> #if defined (HAVE_FACCESSAT) && defined (AT_EACCESS)
>   return (faccessat (AT_FDCWD, path, mode, AT_EACCESS));
> #elif defined (HAVE_EACCESS)            /* FreeBSD */
>   ret = eaccess (path, mode);   /* XXX -- not always correct for X_OK */
> #  if defined (__FreeBSD__)
>   if (ret == 0 && current_user.euid == 0 && mode == X_OK)
>     return (sh_stataccess (path, mode));
> #  endif
>   return ret;

and:

>   if (current_user.uid == current_user.euid && current_user.gid == current_user.egid)
>     {
>       ret = access (path, mode);
> #if defined (__FreeBSD__) || defined (SOLARIS)
>       if (ret == 0 && current_user.euid == 0 && mode == X_OK)
>         return (sh_stataccess (path, mode));
> #endif
>       return ret;

Regards,
-- 
Steven Chamberlain
steven@pyro.eu.org


Reply to: