On Fri, 16 Aug 2013 10:06:10 +0200 Cedric Blancher wrote:
> On 15 August 2013 18:54, Glenn Fowler <[email protected]> wrote:
> >
> > some questions / observations / rambling on cd -@
> >
> > on a system that has O_XATTR is there an errno for
> >         open(valid_fd, O_XATTR|O_RDONLY)
> > failing because valid_fd has no extended attributes?

> If a filesystem supports NFSv4 extended attributes then all elements
> in this filesystem, including files, dirs, pipes, fifios etc support
> them.
> If a filesystem doesn't support O_XATTR it will return EINVAL, try it
> with /devices (devfs, device file system):
> ksh -c 'cd -@ /devices/pseudo'
> /home/ced/bin/ksh: cd: /devices/pseudo: [Invalid argument]

thanks

> > reason: I believe that ksh cd should always accept -@ and return
> > the errno from above, even on systems that have no O_XATTR

> You better return ENOTSUP then

right

> > I'm on a 'SunOS hostname 5.11 11.0 i86pc i386 i86pc' and
> > wanted to compare /bin/sh and /bin/bash handling of cd -@ vs ksh
> > and neither support cd -@ -- nice -- I wonder what jumbo patch has those
> > don't answer that, I'm not the solaris maintenance loop

> Bash has -@ on Solaris 11._1_ but not in 11._0_ or 10.

my surprise that /bin/sh didn't have -@

> > also, and this goes to my complaints that there is no path notation
> > for xattr dirs, when any shell /bin/bash is running from an -@ dir
> > it chokes because it can't determine pwd (other shells, ksh too, have
> > problems with that too, more on that below)

> What about returning the shp->pwdfd path, i.e.
> /proc/<pid>/fd/${shp.pwdfd}/ as physical path? Works great here:
> ksh -c 'cd -@ . ; redirect {n}<. ; cd -f $n ; pwd ; :'
> /proc/14894/fd/12

not bad but ephemeral

> > some other weirdness from an interactive session,
> > again because there is no path notation
> > --
> > $ pwd
> > /home/gsf/tst/ksh
> > $ mkdir tmp
> > $ cd -@ tmp
> > $ /bin/bash -c pwd
> > shell-init: error retrieving current directory: getcwd: cannot access 
> > parent directories: No such file or directory
> > pwd: error retrieving current directory: getcwd: cannot access parent 
> > directories: No such file or directory
> > $ /bin/sh -c pwd
> > pwd: cannot access parent directories [No such file or directory]
> > $ /bin/pwd
> > pwd: cannot determine current directory!
> > $ ksh -c pwd
> > pwd: cannot access parent directories [No such file or directory]
> > $ # ouch ksh bit by this too -- does olga's fgetcwd() handle this right?
> > $ pwd
> > /home/gsf/tst/ksh/tmp
> > $ ls
> > SUNWattr_ro  SUNWattr_rw
> > $ cd -@ SUNWattr_ro
> > /home/gsf/arch/sol11.i386/bin/ksh: cd: SUNWattr_ro: [Not a directory]
> > $ # is that the right errno?
> > $ cd -
> > /home/gsf/tst/ksh
> > $ pwd
> > /home/gsf/tst/ksh
> > $ cd -
> > /home/gsf/tst/ksh/tmp
> > $ pwd
> > /home/gsf/tst/ksh/tmp
> > $ ls
> > $ # oops -- not in the -@ dir -- but we are in ~- # oh right, xattrs dirs 
> > don't have pathnames
> > --
> >
> > so a lot of stuff going on there, most of it because -@ dirs are half-baked

> I don't think O_XATTR dirs are half-baked. They just don't have an
> anchor which is connected to / directly. It's even worse with Windows
> or OSX forks, you know? :)

mentioned in prev message, the api is half-baked because it involves re-coding
and that coding is not trivial

> > the worst I guess is that when you are in an -@ dir you can't tell
> > (or can you -- does stat(2) or some other new syscall?)
> > you get a hint when the /bin/pwd algorithm breaks, but it can break for 
> > other
> > reasons that may give similar behavior
> >
> > one could argue that once you 'cd -@' you better know what you are doing
> > but I bet the /bin/bash and /bin/pwd authors thought they knew what they 
> > were doing

> If think the problem is that getcwd() should return a pointer to
> /proc/22214/cwd and /bin/pwd should do the same in case they are in a
> O_XATTR dir.
> All shells, which are a system interface, surely needs support -@, or
> are boned in case they hit a directory which isn't connected to /. NFS
> can put you into the same trouble if you unlink a directory (for
> NFSv2/v3) or have it offlined under your feet (Solaris QFS, SAMFS and
> NFSv4 can do that to you).

the issue is knowing that you are in an O_XATTR dir in the first place
just discovered that O_XATTR dir inode == 0 -- this is for a default
O_XATTR dir -- once a non-default entry is added it gets a real inode

in an O_XATTR dir ".." is a hard link to the parent file
strange to see ".." listed as a regular file, but it makes sense
but its not easy retrieving the path given the inode number of a regular file

> > I belive most of these oddities, and even the need to patch /bin/sh and 
> > /bin/bash and ksh,
> > could have been avoided if xattrs simply stole *something* from the path 
> > namespace
> > even a (pseudo) mount point or /dev entry would work
> >
> >         /dev/xattr/./tmp                # . relative path
> >         /dev/xattr/home/gsf/tst/ksh/tmp # absolute path

> What will happen if O_XATTR directories allow sub directories?

good question -- any path notation would have to handle that

> > this might be able to be emulated if there were an 
> > is_this_an_xattr_dirat(AT_FDCWD, ".") call
> >
> > is it possible to determine if "." is an extended attr dir?
> > maybe ls gives a hint?
> >
> > $ /bin/ls -l .
> > total 2
> > -r--r--r--   1 root     root         156 Aug 15 11:15 SUNWattr_ro
> > -rw-r--r--   1 root     root         472 Aug 15 11:15 SUNWattr_rw
> > $ /bin/ls -ld .
> > drwxrwxrwt   4 gsf      gsf            4 Aug 15 11:15 .
> > $ /bin/ls -@ld .
> > drwxrwxrwt   4 gsf      gsf            4 Aug 15 11:15 .

> 1. -l overrides -@
> 2. -@ will only report @ if there are xattrs in the xattr dir which do
> not belong to the filesystem itself:
> ksh -c 'cd -@ . ; touch x ; ls -@ad . ..'
> drwxr-xr-x   4 ced  ced        177 Aug 16 10:02 .
> drwxr-xr-x@  2 ced  ced        117 Aug 14 23:38 .

so the sole purpose of -@ is, in conjunction with -l, to display an @
after the permissions if a file has non-default extended attributes

thanks

_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to