Re: fakeroot problem

2002-05-13 Thread Thomas Bushnell, BSG
Roland McGrath <[EMAIL PROTECTED]> writes: > However, I think diskfs should not return EOPNOTSUPP for this case. On > Unix systems I have tried, trying to execute a device file (that has > execute bits set) fails with EACCES. That seems like the appropriate error > for attempting to open a syml

Re: fakeroot problem

2002-05-12 Thread Roland McGrath
> On Sun, May 12, 2002 at 03:59:23PM -0400, Roland McGrath wrote: > > That seems like a reasonable deduction. I've made fakeroot treat > > EOPNOTSUPP like EACCES here. > > But we get ENOTDIR because of lookup_error mangling, not EOPNOTSUPP. Oh, right. I wasn't thinking about file_name_lookup_u

Re: fakeroot problem

2002-05-12 Thread Marcus Brinkmann
On Sun, May 12, 2002 at 03:59:23PM -0400, Roland McGrath wrote: > That seems like a reasonable deduction. I've made fakeroot treat > EOPNOTSUPP like EACCES here. But we get ENOTDIR because of lookup_error mangling, not EOPNOTSUPP. > I also made it try zero openmodes if all else > fails. Thanks

Re: fakeroot problem

2002-05-12 Thread Roland McGrath
> The problem is symbolic links. We get ENOTDIR from file_name_lookup_under > when trying to open a symbolic link to a file with the O_EXEC bit set, and > we don't catch this in netfs_attempt_fakeroot. I have not verified it, but > had I to venture a guess I would say this comes from the EOPNOTS

Re: fakeroot problem

2002-05-12 Thread Marcus Brinkmann
On Sun, May 05, 2002 at 04:27:47PM -0400, Roland McGrath wrote: > Oh, that EISDIR must be from opening with write permission in > netfs_attempt_lookup. I made it check for EROFS or EISDIR as it does for > EACCES. If there are other possible errors for an O_RDWR open that aren't > possible for a

Re: fakeroot problem

2002-05-11 Thread Thomas Bushnell, BSG
Roland McGrath <[EMAIL PROTECTED]> writes: > To make cases like the current state less confusing, perhaps netfs (and > diskfs) should do something special for an EOPNOTSUPP return from > *_get_translator in lookup/getroot. It will only come up there if > S_IPTRANS is set, which the *_validate_st

Re: fakeroot problem

2002-05-11 Thread Marcus Brinkmann
On Sat, May 11, 2002 at 04:17:25PM -0400, Roland McGrath wrote: > Oh yeah, the patch: > + err = netfs_validate_stat (netfs_root_node, 0); > + if (err) > +error (6, err, "Cannot stat underlying node"); > + > + netfs_root_node->nn_stat.st_mode &= ~(S_IPTRANS | S_IATRANS); > + netfs_root_nod

Re: fakeroot problem

2002-05-11 Thread Roland McGrath
Oh yeah, the patch: Index: fakeroot.c === RCS file: /cvsroot/hurd/hurd/trans/fakeroot.c,v retrieving revision 1.6 diff -u -b -p -r1.6 fakeroot.c --- fakeroot.c 6 May 2002 00:40:14 - 1.6 +++ fakeroot.c 11 May 2002 20:13:1

Re: fakeroot problem

2002-05-11 Thread Roland McGrath
The intent of fakeroot is to be unaware of translators in the underlying directory tree. That is, to use the translated nodes transparently; that's why its lookups don't use O_NOTRANS. If you think about it, that's the only thing that really makes sense for a translator applied to whole director

Re: fakeroot problem

2002-05-11 Thread Marcus Brinkmann
On Sat, May 11, 2002 at 05:12:15AM +0200, Marcus Brinkmann wrote: > This is indeed what happens, here in more detail: What I describe here is the error in the passive translator case. I tried this change: diff -u -p -r1.6 fakeroot.c --- fakeroot.c 6 May 2002 00:40:14 - 1.6 +++ fakeroo

Re: fakeroot problem

2002-05-10 Thread Marcus Brinkmann
On Sat, May 11, 2002 at 01:51:36AM +0200, Marcus Brinkmann wrote: > Maybe the way netfs_root_node is looked up in the passive translator case is > screwed? I set a breakpoint at netfs_demuxer, and a "chdir fakeroot-test" > gave me three fsys_getroot RPC in sequence before it failed with ENOTDIR.

Re: fakeroot problem

2002-05-10 Thread Marcus Brinkmann
On Sun, May 05, 2002 at 07:07:40PM -0400, Marcus Brinkmann wrote: > Still no cigar though, as trying to lookup bin/bash in the --chroot > case says ENOTDIR (and in a debugging session it seemed to be that the > faked node created by netfs_attempt_lookup didn't have the S_IFDIR flag > set). This s

Re: fakeroot problem

2002-05-05 Thread Marcus Brinkmann
On Sun, May 05, 2002 at 04:27:47PM -0400, Roland McGrath wrote: > Oh, that EISDIR must be from opening with write permission in > netfs_attempt_lookup. I made it check for EROFS or EISDIR as it does for > EACCES. Yeah, that's it. I will also make this change for the O_RDWR case (you did it onl

Re: fakeroot problem

2002-05-05 Thread Roland McGrath
Oh, that EISDIR must be from opening with write permission in netfs_attempt_lookup. I made it check for EROFS or EISDIR as it does for EACCES. If there are other possible errors for an O_RDWR open that aren't possible for a O_RDONLY open, we should check for those as well. Or we could make it j

Re: fakeroot problem

2002-05-05 Thread Roland McGrath
> Can you think of any specific failure case I could test, or is it just a > vague feeling? I can't think of any case reasonable other than the translated underlying node itself that would hit the new code. Maybe firmlink, but that would only come up if there was a firmlink to a fakeroot virtu

Re: fakeroot problem

2002-05-05 Thread Marcus Brinkmann
On Sun, May 05, 2002 at 03:23:39PM -0400, Roland McGrath wrote: > It's not clear to me what case gets EISDIR and what case hangs. $ ./settrans --chroot /bin/bash -i -- /bin /hurd/fakeroot ./settrans: cannot chdir to new root: Is a directory The "cd foo" case is fixed now, it doesn't hang anymor

Re: fakeroot problem

2002-05-05 Thread Thomas Bushnell, BSG
Roland McGrath <[EMAIL PROTECTED]> writes: > Probably the right thing to do is unlock the directory node while doing the > lookups. This is certainly what diskfs does, and it's pretty important. ___ Bug-hurd mailing list [EMAIL PROTECTED] http://mai

Re: fakeroot problem

2002-05-05 Thread Roland McGrath
It's not clear to me what case gets EISDIR and what case hangs. I don't think any special case for "." or anything like that ought to be required. I am as confused as you are. For the EISDIR failure, find where that error is coming from. For the hang, figure out what port it is really talking t