On Sat, Aug 31, 2013 at 12:14 AM, Roland Mainz <[email protected]> wrote:
> On Fri, Aug 30, 2013 at 10:41 PM, Glenn Fowler <[email protected]> wrote:
>> On Fri, 30 Aug 2013 22:25:34 +0200 Lionel Cons wrote:
>>> On 30 August 2013 21:01, ольга крыжановская <[email protected]> 
>>> wrote:
>>> > For scripts it may be better to extend /dev/file/ to have /dev/file/xattr:
>>> >
>>> > ksh -c 'mkdir -p foo2 ; redirect {d}<foo2/ ; redirect
>>> > {n}<>/dev/file/xattr:/dev/fd/$d/myxattr ; print -u$n "bla" ; cd -@
>>> > foo2 ; ls ; cat myxattr'     myxattr      SUNWattr_ro  SUNWattr_rw
>>> > bla
>>
>>> Do you have a patch for that? It sounds you found a middle way which
>>> might satisfy Glenn's love for /dev/file and marry it with a sane
>>> approach to access files in xattr directories.
>>
>> I'm looking at this over the long US weekend and am having
>> an off-list discussion picking olga's brain -- this will be resolved
>> one way or another tuesday
>>
>> my "love" isn't so much /dev/file but rather an ast C and script
>> abstraction the contains the effects of attribute directories
>
> Grumpf... I wish it would be easy. The best advice I can offer (after
> today's) mayhem: Please just accept that accessing NFSv4 extended
> attributes only works through a file descriptor for now (the
> "advantage" is that it makes an emulation on Windows easier because
> every acces must go through a fd).
> If someone wishes to have an absolute path IMO the best option is to
> return /proc/$$/fd/$fd/ because it ensures at least access for the
> current and other processes as long as the fd is valid.
[snip]

One more datapoint (since Olga asked and forwarded an email): NFSv4
XATTR directories support subdirectories but only if the underlying
filesystem supports it (Solaris "zfs" and "ufs" don't... I'm not sure
about swap filesystem "tmpfs").

Think about the NFSv4 XATTR directories like a "branch" of the normal
filesystem which has been "cut off". All normal operations apply
(except getting XATTR dirs within XATTR dirs, e.g. nesting is not
allowed), including hard- and softlinks, pipes, fifos and
subdirectories if the underlying filesystems support it (Sun tried to
make it "easier" for itself and treats the XATTR directories as plain
single-level data storage, e.g. doesn't support softlinks, pipe/fifos,
subdirs and softlinks but does support hardlinks for zfs and ufs;
other filesystems are not required to be so restrictive) but all
references are contained within this "cut off branch of the
filesystem", e.g. hardlinks can only reference files inside the XATTR
directory and not files outside it (the same restriction would apply
to relative softlinks).

BTW: Last XATTR hint for today: See |fpathconf(2)|  ... the *XATTR* attributes:
-- snip --
System Calls                                         fpathconf(2)

NAME
     fpathconf, pathconf - get configurable pathname variables

SYNOPSIS
     #include <unistd.h>

     long fpathconf(int fildes, int name);

     long pathconf(const char *path, int name);


DESCRIPTION
     The  fpathconf()  and  pathconf()  functions  determine  the
     current value of a configurable limit or option ( variable )
     that is associated with a file or directory.


     For pathconf(), the path argument points to the pathname  of
     a file or directory.


     For  fpathconf(),  the  fildes  argument  is  an  open  file
     descriptor.


     The name argument represents  the  variable  to  be  queried
     relative  to  that  file  or directory. The variables in the
     following table come from <limits.h> or <unistd.h>  and  the
     symbolic   constants,   defined   in   <unistd.h>,  are  the
     corresponding values used for name:






System Calls                                         fpathconf(2)
SunOS 5.11           Last change: 1 Sep 2009                    2






System Calls                                         fpathconf(2)



     _______________________________________________________________________
               Variable                  Value of name            Notes
     _______________________________________________________________________
      {ACL_ENABLED}                 _PC_ACL_ENABLED            10
     _______________________________________________________________________
      {FILESIZEBITS}                _PC_FILESIZEBITS           3,4
     _______________________________________________________________________
      {LINK_MAX}                    _PC_LINK_MAX               1
     _______________________________________________________________________
      {MAX_CANON}                   _PC_MAX_CANON              2
     _______________________________________________________________________
      {MAX_INPUT}                   _PC_MAX_INPUT              2
     _______________________________________________________________________
      {MIN_HOLE_SIZE}               _PC_MIN_HOLE_SIZE          11
     _______________________________________________________________________
      {NAME_MAX}                    _PC_NAME_MAX               3, 4
     _______________________________________________________________________
      {PATH_MAX}                    _PC_PATH_MAX               4,5
     _______________________________________________________________________
      {PIPE_BUF}                    _PC_PIPE_BUF               6
     _______________________________________________________________________
      {POSIX_ALLOC_SIZE_MIN}        _PC_ALLOC_SIZE_MIN
     _______________________________________________________________________
      {POSIX_REC_INCR_XFER_SIZE}    _PC_REC_INCR_XFER_SIZE
     _______________________________________________________________________
      {POSIX_REC_MAX_XFER_SIZE}     _PC_REC_MAX_XFER_SIZE
     _______________________________________________________________________
      {POSIX_REC_MIN_XFER_SIZE}     _PC_REC_MIN_XFER_SIZE
     _______________________________________________________________________
      {POSIX_REC_XFER_ALIGN}        _PC_REC_XFER_ALIGN
     _______________________________________________________________________
      {SYMLINK_MAX}                 _PC_SYMLINK_MAX            4, 9
     _______________________________________________________________________
      {XATTR_ENABLED}               _PC_XATTR_ENABLED          1
     _______________________________________________________________________
      {SATTR_ENABLED}               _PC_SATTR_ENABLED
     _______________________________________________________________________
      {XATTR_EXISTS}                _PC_XATTR_EXISTS           1
     _______________________________________________________________________
      {SATTR_EXISTS}                _PC_SATTR_EXISTS
     _______________________________________________________________________
      {ACCESS_FILTERING}            _PC_ACCESS_FILTERING       12
     _______________________________________________________________________
      _POSIX_CHOWN_RESTRICTED       _PC_CHOWN_RESTRICTED       7
     _______________________________________________________________________
      _POSIX_NO_TRUNC               _PC_NO_TRUNC               3, 4
     _______________________________________________________________________
      _POSIX_VDISABLE               _PC_VDISABLE               2
     _______________________________________________________________________
      _POSIX_ASYNC_IO               _PC_ASYNC_IO               8
     _______________________________________________________________________
      _POSIX_PRIO_IO                _PC_PRIO_IO                8



SunOS 5.11           Last change: 1 Sep 2009                    3






System Calls                                         fpathconf(2)



     _______________________________________________________________________
    | _POSIX_SYNC_IO             |  _PC_SYNC_IO             |  8           |
    |____________________________|__________________________|______________|
    | _POSIX_TIMESTAMP_RESOLUTION|  _PC_TIMESTAMP_RESOLUTION|  1           |
    |____________________________|__________________________|______________|



     Notes:

         1.   If path or fildes refers to a directory, the  value
              returned applies to the directory itself.

         2.   If path or fildes does  not  refer  to  a  terminal
              file,  it  is unspecified whether an implementation
              supports an association of the variable  name  with
              the specified file.

         3.   If path or fildes refers to a directory, the  value
              returned applies to filenames within the directory.

         4.   If path or fildes does not refer to a directory, it
              is  unspecified  whether an implementation supports
              an association of the variable name with the speci-
              fied file.

         5.   If path or fildes refers to a directory, the  value
              returned  is the maximum length of a relative path-
              name when the specified directory  is  the  working
              directory.

         6.   If path refers to a FIFO, or  fildes  refers  to  a
              pipe  or  FIFO,  the  value returned applies to the
              referenced object. If path or fildes  refers  to  a
              directory,  the  value returned applies to any FIFO
              that exists or can be created within the directory.
              If path or fildes refers to any other type of file,
              it is unspecified whether  an  implementation  sup-
              ports  an association of the variable name with the
              specified file.

         7.   If path or fildes refers to a directory, the  value
              returned  applies  to  any files, other than direc-
              tories, that exist or can  be  created  within  the
              directory.

         8.   If path or fildes refers  to  a  directory,  it  is
              unspecified  whether  an implementation supports an
              association of the variable name with the specified
              file.

         9.   If path or fildes refers to a directory, the  value



SunOS 5.11           Last change: 1 Sep 2009                    4






System Calls                                         fpathconf(2)



              returned is the maximum length of the string that a
              symbolic link in that directory can contain.

         10.  If path or fildes refers to a file or directory  in
              a   file  system  that  supports  ACLs,  the  value
              returned is the bitwise inclusive OR of the follow-
              ing  flags  associated  with ACL types supported by
              the file system; otherwise 0 is returned.

              _ACL_ACE_ENABLED  The  file  system  supports   ACE
                                ACLs.


         _ACL_ACLENT_ENABLED    The  file  system  supports   UFS
                                aclent ACLs.


         11.  If a filesystem supports  the  reporting  of  holes
              (see  lseek(2), pathconf() and fpathconf() return a
              positive number that represents  the  minimum  hole
              size  returned  in  bytes.  The  offsets  of  holes
              returned will be aligned to this same value. A spe-
              cial  value of 1 is returned if the filesystem does
              not specify the minimum hole size but still reports
              holes.

         12.  If path or fildes refers to  a  directory  and  the
              file system in which the directory resides supports
              access filtering, a  non-zero  value  is  returned.
              Otherwise, 0 is returned.

RETURN VALUES
     If name is an invalid value, both pathconf() and fpathconf()
     return -1 and errno is set to indicate the error.


     If the variable corresponding to name has no limit  for  the
     path  or  file  descriptor,  both pathconf() and fpathconf()
     return -1 without changing errno. If pathconf() needs to use
     path  to determine the value of name and pathconf() does not
     support the association of name with the file  specified  by
     path,  or if the process did not have appropriate privileges
     to query the file specified by path, or path does not exist,
     pathconf()  returns  -1  and  errno  is  set to indicate the
     error.


     If fpathconf() needs to use fildes to determine the value of
     name  and  fpathconf()  does  not support the association of
     name with the file specified by fildes, or if fildes  is  an
     invalid file descriptor, fpathconf() returns -1 and errno is
     set to indicate the error.



SunOS 5.11           Last change: 1 Sep 2009                    5






System Calls                                         fpathconf(2)



     Otherwise pathconf()  or  fpathconf()  returns  the  current
     variable  value  for  the file or directory without changing
     errno. The value returned will not be more restrictive  than
     the corresponding value available to the application when it
     was compiled with <limits.h> or <unistd.h>.

ERRORS
     The pathconf() function will fail if:

     EINVAL    The value of name is not valid.


     ELOOP     A loop exists in symbolic links encountered during
               resolution of the path argument.



     The fpathconf() function will fail if:

     EINVAL    The value of name is not valid.



     The pathconf() function may fail if:

     EACCES          Search permission is denied for a  component
                     of the path prefix.


     EINVAL          An association of the variable name with the
                     specified file is not supported.


     ENAMETOOLONG    The length  of  the  path  argument  exceeds
                     {PATH_MAX} or a pathname component is longer
                     than {NAME_MAX}.


     ENAMETOOLONG    As a result of encountering a symbolic  link
                     in  resolution  of  the  path  argument, the
                     length of the  substituted  pathname  string
                     exceeded {PATH_MAX}.


     ENOENT          A component of path does not name an  exist-
                     ing file or path is an empty string.


     ENOTDIR         A component of the  path  prefix  is  not  a
                     directory.





SunOS 5.11           Last change: 1 Sep 2009                    6






System Calls                                         fpathconf(2)



     The fpathconf() function may fail if:

     EBADF     The fildes argument is not a valid  file  descrip-
               tor.


     EINVAL    An association  of  the  variable  name  with  the
               specified file is not supported.


USAGE
     The {SYMLINK_MAX} variable applies only to  the  fpathconf()
     function.

ATTRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Committed                   |
    |_____________________________|_____________________________|
    | MT-Level                    | Async-Signal-Safe           |
    |_____________________________|_____________________________|
    | Standard                    | See standards(5).           |
    |_____________________________|_____________________________|


SEE ALSO
     lseek(2), confstr(3C), limits.h(3HEAD), sysconf(3C),  attri-
     butes(5), standards(5)
-- snip --

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) [email protected]
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to