diff options
author | Nathan Scott <nathans@sgi.com> | 2002-03-11 23:42:35 +0000 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2002-03-11 23:42:35 +0000 |
commit | 84233d472fbea2750199c9785a3b28a079551905 (patch) | |
tree | 57b9f873ecab86d2ea58d1f06a562d2ed5ae3b9e | |
parent | 659175e0055fff18ebf5505ab1963dd00b8316a8 (diff) | |
download | attr-84233d472fbea2750199c9785a3b28a079551905.tar.gz |
man page and test script updates from Andreas. fix syscall numbering
a/ on sparc (fremovexattr was wrong) and b/ if arch doesn't have numbers
defined yet, handle it cleanly (errno.h missing).
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | debian/changelog | 4 | ||||
-rw-r--r-- | doc/CHANGES | 6 | ||||
-rw-r--r-- | libattr/syscalls.c | 3 | ||||
-rw-r--r-- | man/Makefile | 2 | ||||
-rw-r--r-- | man/man1/Makefile | 11 | ||||
-rw-r--r-- | man/man2/Makefile | 11 | ||||
-rw-r--r-- | man/man3/Makefile | 11 | ||||
-rw-r--r-- | man/man3/attr_get.3 | 8 | ||||
-rw-r--r-- | man/man3/attr_list.3 | 269 | ||||
-rw-r--r-- | man/man3/attr_multi.3 | 4 | ||||
-rw-r--r-- | man/man3/attr_remove.3 | 4 | ||||
-rw-r--r-- | man/man3/attr_set.3 | 8 | ||||
-rw-r--r-- | man/man5/Makefile | 11 | ||||
-rw-r--r-- | man/man5/attr.5 | 5 | ||||
-rw-r--r-- | test/attr.test | 22 |
16 files changed, 359 insertions, 22 deletions
@@ -3,5 +3,5 @@ # PKG_MAJOR=2 PKG_MINOR=0 -PKG_REVISION=4 +PKG_REVISION=5 PKG_BUILD=0 diff --git a/debian/changelog b/debian/changelog index 2009092..e2096e0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -attr (2.0.4-1) unstable; urgency=low +attr (2.0.5-1) unstable; urgency=low * New upstream bugfix release - -- Nathan Scott <nathans@debian.org> Tue, 5 Mar 2002 13:58:58 +1100 + -- Nathan Scott <nathans@debian.org> Tue, 12 Mar 2002 09:31:30 +1100 attr (2.0.3-1) unstable; urgency=low diff --git a/doc/CHANGES b/doc/CHANGES index 5b58aaf..e5579c1 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,3 +1,9 @@ +attr-2.0.5 (12 March 2002) + - Fix build for architectures which don't have syscalls yet + - Fix the syscall number used on Sparc for fremovexattr(2) + - Test script updates + - Man page updates + attr-2.0.4 (05 March 2002) - A minor change to the test/run script diff --git a/libattr/syscalls.c b/libattr/syscalls.c index 12af483..a151198 100644 --- a/libattr/syscalls.c +++ b/libattr/syscalls.c @@ -36,6 +36,7 @@ * indirection. This avoids the dependency on kernel sources. */ +#include <errno.h> #include <unistd.h> #if defined (__i386__) @@ -65,7 +66,7 @@ # define __NR_flistxattr 180 # define __NR_removexattr 181 # define __NR_lremovexattr 182 -# define __NR_fremovexattr 183 +# define __NR_fremovexattr 186 #elif defined (__ia64__) # define HAVE_XATTR_SYSCALLS 1 # define __NR_setxattr 1217 diff --git a/man/Makefile b/man/Makefile index 671042a..d6b3de3 100644 --- a/man/Makefile +++ b/man/Makefile @@ -35,7 +35,7 @@ include $(TOPDIR)/include/builddefs SUBDIRS = man1 man2 man3 man5 -default install install-dev install-lib: $(SUBDIRS) +default install install-dev install-lib html ps: $(SUBDIRS) $(SUBDIRS_MAKERULE) include $(BUILDRULES) diff --git a/man/man1/Makefile b/man/man1/Makefile index a3408d2..18f478c 100644 --- a/man/man1/Makefile +++ b/man/man1/Makefile @@ -38,6 +38,7 @@ MAN_SECTION = 1 MAN_PAGES = $(shell echo *.$(MAN_SECTION)) MAN_DEST = $(PKG_MAN_DIR)/man$(MAN_SECTION) LSRCFILES = $(MAN_PAGES) +LDIRT = $(MAN_PAGES:%=%.ps) $(MAN_PAGES:%=%.html) default : $(MAN_PAGES) @@ -47,3 +48,13 @@ install : default $(INSTALL) -m 755 -d $(MAN_DEST) $(INSTALL_MAN) install-dev install-lib: + +html : $(MAN_PAGES:%=%.html) +ps : $(MAN_PAGES:%=%.ps) + +%.$(MAN_SECTION).ps : %.$(MAN_SECTION) + groff -man -T ps $< > $@ + +%.$(MAN_SECTION).html : %.$(MAN_SECTION) + groff -man -T html $< > $@ + diff --git a/man/man2/Makefile b/man/man2/Makefile index fc65438..453ab78 100644 --- a/man/man2/Makefile +++ b/man/man2/Makefile @@ -38,6 +38,7 @@ MAN_SECTION = 2 MAN_PAGES = $(shell echo *.$(MAN_SECTION)) MAN_DEST = $(PKG_MAN_DIR)/man$(MAN_SECTION) LSRCFILES = $(MAN_PAGES) +LDIRT = $(MAN_PAGES:%=%.ps) $(MAN_PAGES:%=%.html) default install : $(MAN_PAGES) @@ -47,3 +48,13 @@ install-dev : default $(INSTALL) -m 755 -d $(MAN_DEST) $(INSTALL_MAN) install-lib: + +html : $(MAN_PAGES:%=%.html) +ps : $(MAN_PAGES:%=%.ps) + +%.$(MAN_SECTION).ps : %.$(MAN_SECTION) + groff -man -T ps $< > $@ + +%.$(MAN_SECTION).html : %.$(MAN_SECTION) + groff -man -T html $< > $@ + diff --git a/man/man3/Makefile b/man/man3/Makefile index 029c2c4..32a0030 100644 --- a/man/man3/Makefile +++ b/man/man3/Makefile @@ -38,6 +38,7 @@ MAN_SECTION = 3 MAN_PAGES = $(shell echo *.$(MAN_SECTION)) MAN_DEST = $(PKG_MAN_DIR)/man$(MAN_SECTION) LSRCFILES = $(MAN_PAGES) +LDIRT = $(MAN_PAGES:%=%.ps) $(MAN_PAGES:%=%.html) default install : $(MAN_PAGES) @@ -47,3 +48,13 @@ install-dev : default $(INSTALL) -m 755 -d $(MAN_DEST) $(INSTALL_MAN) install-lib: + +html : $(MAN_PAGES:%=%.html) +ps : $(MAN_PAGES:%=%.ps) + +%.$(MAN_SECTION).ps : %.$(MAN_SECTION) + groff -man -T ps $< > $@ + +%.$(MAN_SECTION).html : %.$(MAN_SECTION) + groff -man -T html $< > $@ + diff --git a/man/man3/attr_get.3 b/man/man3/attr_get.3 index bff7c86..f573843 100644 --- a/man/man3/attr_get.3 +++ b/man/man3/attr_get.3 @@ -7,11 +7,11 @@ attr_get, attr_getf \- get the value of a user attribute of a filesystem object .nf .B #include <attr/attributes.h> .sp -.B "int attr_get (const char \(**path, const char \(**attrname, " -.B " char \(**attrvalue, int \(**valuelength, int flags);" +.B "int attr_get (const char **path, const char **attrname, " +.B " char **attrvalue, int **valuelength, int flags);" .PP -.B "int attr_getf (int fd, const char \(**attrname, " -.B " char \(**attrvalue, int \(**valuelength, int flags);" +.B "int attr_getf (int fd, const char **attrname, " +.B " char **attrvalue, int **valuelength, int flags);" .Op .SH DESCRIPTION The diff --git a/man/man3/attr_list.3 b/man/man3/attr_list.3 index e69de29..4037d28 100644 --- a/man/man3/attr_list.3 +++ b/man/man3/attr_list.3 @@ -0,0 +1,269 @@ +.TH ATTR_LIST 3 +.SH NAME +attr_list, attr_listf \- list the names of the user attributes of a filesystem object +.SH C SYNOPSIS +.PP +.sp +.nf +.B #include <attr/attributes.h> +.sp +.B "int attr_list (const char **path, char **buffer, " +.B " const int buffersize, int flags," +.B " attrlist_cursor_t **cursor);" +.PP +.B "int attr_listf (int fd, char **buffer, " +.B " const int buffersize, int flags," +.B " attrlist_cursor_t **cursor);" +.Op +.SH DESCRIPTION +The +.I attr_list +and +.I attr_listf +functions provide a way to list the existing attributes of a +filesystem object. +.P +.I Path\^ +points to a path name for a filesystem object, and +.I fd\^ +refers to the file descriptor associated with a file. +The +.I buffer +will be filled with a structure describing at least a portion of the +attributes associated with the given filesystem object. +.I Buffer +will be overwritten with an \f4attrlist_t\fP structure +containing a list of the attributes associated with +that filesystem object, up to a maximum of +.I buffersize +bytes. +The +.I buffer +must be sufficiently large to hold the appropriate data structures +plus at least one maximally sized attribute name, +but cannot be more than ATTR_MAX_VALUELEN (currently 64KB) bytes in length. +.PP +.Op c p a +The contents of an \f4attrlist_t\fP structure include the following members: +.P +.RS 3 +.nf +.ft 4 +.ta 9n 22n +__int32_t al_count; /** number of entries in attrlist **/ +__int32_t al_more; /** T/F: more attrs (do syscall again) **/ +__int32_t al_offset[1]; /** byte offsets of attrs [var-sized] **/ +.ft 1 +.fi +.RE +.PP +The +.I al_count +field shows the number of attributes represented in this buffer, +which is also the number of elements in the +.I al_offset +array. +The +.I al_more +field will be non-zero if another +.I attr_list +call would result in more attributes. +The +.I al_offset +array contains the byte offset within the +.I buffer +of the structure describing each of the attributes, +an \f4attrlist_ent_t\fP structure. +The \f4ATTR_ENTRY(buffer, index)\fP macro will help with decoding the list. +It takes a pointer to the +.I buffer +and an +.I index +into the +.I al_offset +array and returns a pointer to the corresponding +\f4attrlist_ent_t\fP structure. +.PP +The contents of an \f4attrlist_ent_t\fP structure +include the following members: +.P +.RS 3 +.nf +.ft 4 +.ta 9n 22n +u_int32_t a_valuelen; /** number bytes in value of attr **/ +char a_name[]; /** attr name (NULL terminated) **/ +.ft 1 +.fi +.Op +.RE +.PP +The +.I a_valuelen +field shows the size in bytes of the value +associated with the attribute whose name is stored in the +.I a_name +field. +The name is a NULL terminated string. +.PP +Note that the value of the attribute cannot be obtained through +this interface, the +.I attr_get +call should be used to get the value. +The +.I attr_list +interface tells the calling process how large of a buffer +it must have in order to get the attribute\'s value. +.PP +The +.I flags +argument can contain the following symbols bitwise OR\'ed together: +.TP +.SM +\%ATTR_ROOT +List the attributes that are in the +.B root +address space, not in the +.B user +address space. +(limited to use by super-user only) +.TP +.SM +\%ATTR_DONTFOLLOW +Do not follow symbolic links when resolving a +.I path +on an +.I attr_list +function call. +The default is to follow symbolic links. +.PP +The +.I cursor +argument is a pointer to an opaque data structure that the kernel uses +to track the calling process\'s position in the attribute list. +The only valid operations on a +.I cursor +are to pass it into an +.I attr_list +function call or to zero it out. +It should be zero\'ed out before the first +.I attr_list +call. +Note that multi-threaded applications may keep more than one +.I cursor +in order to serve multiple contexts, ie: the +.I attr_list +call is "thread-safe". +.PP +.I attr_list +will fail if one or more of the following are true: +.TP 17 +.SM +\%[ENOENT] +The named file does not exist. +.TP +.SM +\%[EPERM] +The effective user +.SM ID +does not match the owner of the file +and the effective user +.SM ID +is not super-user. +.TP +.SM +\%[ENOTDIR] +A component of the +path prefix +is not a directory. +.TP +.SM +\%[EACCES] +Search permission is denied on a +component of the +path prefix. +.TP +.SM +\%[EINVAL] +A bit was set in the +.I flag +argument that is not defined for this system call, +or the buffer was too small or too large. +.TP +.SM +\%[EFAULT] +Either +.I Path +or +.I buffer +points outside the allocated address space of the process, or +.I buffer +or +.I bufsize +are not 32bit aligned. +.TP +.SM +\%[ELOOP] +A path name lookup involved too many symbolic links. +.TP +.SM +\%[ENAMETOOLONG] +The length of +.I path +exceeds +.SM +.RI { MAXPATHLEN }, +or a pathname component is longer than +.SM +.RI { MAXNAMELEN }. +.TP +.SM +\%[ENOATTR] +.I attribute\^ +does not exist for this file. +.PP +.I attr_listf\^ +will fail if: +.TP 15 +.SM +\%[EINVAL] +A bit was set in the +.I flag +argument that is not defined for this system call, or +.I fd\^ +refers to a socket, not a file, +or the buffer was too small or too large. +.TP +.SM +\%[EFAULT] +Either +.I Path +or +.I buffer +points outside the allocated address space of the process, or +.I buffer +or +.I bufsize +are not 32bit aligned. +.TP +.SM +\%[EBADF] +.I Fd\^ +does not refer to a valid descriptor. +.SH "SEE ALSO" +attr(1), +.br +attrctl(2), +.br +attr_get(3), attr_getf(3), +.br +attr_multi(3), attr_multif(3) +.br +attr_remove(3), attr_removef(3), +.br +attr_set(3), attr_set(3) +.SH "DIAGNOSTICS" +Upon successful completion, a value of 0 is returned. +Otherwise, a value of \-1 is returned and +.I errno\^ +is set to indicate the error. diff --git a/man/man3/attr_multi.3 b/man/man3/attr_multi.3 index 699d218..aaab0b2 100644 --- a/man/man3/attr_multi.3 +++ b/man/man3/attr_multi.3 @@ -7,10 +7,10 @@ attr_multi, attr_multif \- manipulate multiple user attributes on a filesystem o .nf .B #include <attr/attributes.h> .sp -.B "int attr_multi (const char \(**path, attr_multiop_t \(**oplist, " +.B "int attr_multi (const char **path, attr_multiop_t **oplist, " .B " int count, int flags);" .PP -.B "int attr_multif (int fd, attr_multiop_t \(**oplist, " +.B "int attr_multif (int fd, attr_multiop_t **oplist, " .B " int count, int flags);" .Op .SH DESCRIPTION diff --git a/man/man3/attr_remove.3 b/man/man3/attr_remove.3 index 4360c5f..ccae1dd 100644 --- a/man/man3/attr_remove.3 +++ b/man/man3/attr_remove.3 @@ -7,9 +7,9 @@ attr_remove, attr_removef \- remove a user attribute of a filesystem object .nf .B #include <attr/attributes.h> .sp -.B "int attr_remove (const char \(**path, const char \(**attrname, int flags);" +.B "int attr_remove (const char **path, const char **attrname, int flags);" .PP -.B "int attr_removef (int fd, const char \(**attrname, int flags);" +.B "int attr_removef (int fd, const char **attrname, int flags);" .Op .SH DESCRIPTION The diff --git a/man/man3/attr_set.3 b/man/man3/attr_set.3 index 79b1e83..567ba74 100644 --- a/man/man3/attr_set.3 +++ b/man/man3/attr_set.3 @@ -7,12 +7,12 @@ attr_set, attr_setf \- set the value of a user attribute of a filesystem object .nf .B #include <attr/attributes.h> .sp -.B "int attr_set (const char \(**path, const char \(**attrname, " -.B " const char \(**attrvalue, const int valuelength," +.B "int attr_set (const char **path, const char **attrname, " +.B " const char **attrvalue, const int valuelength," .B " int flags);" .PP -.B "int attr_setf (int fd, const char \(**attrname, " -.B " const char \(**attrvalue, const int valuelength," +.B "int attr_setf (int fd, const char **attrname, " +.B " const char **attrvalue, const int valuelength," .B " int flags);" .Op .SH DESCRIPTION diff --git a/man/man5/Makefile b/man/man5/Makefile index cdda319..f92d130 100644 --- a/man/man5/Makefile +++ b/man/man5/Makefile @@ -38,6 +38,7 @@ MAN_SECTION = 5 MAN_PAGES = $(shell echo *.$(MAN_SECTION)) MAN_DEST = $(PKG_MAN_DIR)/man$(MAN_SECTION) LSRCFILES = $(MAN_PAGES) +LDIRT = $(MAN_PAGES:%=%.ps) $(MAN_PAGES:%=%.html) default : $(MAN_PAGES) @@ -47,3 +48,13 @@ install : default $(INSTALL) -m 755 -d $(MAN_DEST) $(INSTALL_MAN) install-dev install-lib: + +html : $(MAN_PAGES:%=%.html) +ps : $(MAN_PAGES:%=%.ps) + +%.$(MAN_SECTION).ps : %.$(MAN_SECTION) + groff -man -T ps $< > $@ + +%.$(MAN_SECTION).html : %.$(MAN_SECTION) + groff -man -T html $< > $@ + diff --git a/man/man5/attr.5 b/man/man5/attr.5 index e9ef83e..501addb 100644 --- a/man/man5/attr.5 +++ b/man/man5/attr.5 @@ -85,16 +85,11 @@ In the current ext2 and ext3 filesystem implementations, all extended attributes must fit on a single filesystem block (1024, 2048 or 4096 bytes, depending on the block size specified when the filesystem was created). This limit may be removed in a future version. -Device special files cannot be associated with extended user attributes -(but they may be associated with extended system attributes). Permissions -of device special files define access to the devices rather than to the -device special files. .PP In the XFS filesystem implementation, there is no practical limit on the number of extended attributes associated with a file, and the algorithms used to store extended attribute information on disk are scalable (stored either inline in the inode, as an extent, or in a B+ tree). -XFS allows extended attributes to be associated with device inodes. .SH ADDITIONAL NOTES Since the filesystems on which extended attributes are stored might also be used on architectures with a different byte order and machine word diff --git a/test/attr.test b/test/attr.test index 0e1c4b5..2a220be 100644 --- a/test/attr.test +++ b/test/attr.test @@ -168,3 +168,25 @@ $ ls -s f g h 0 g 0 h $ rm f g h +! +! Attributes of symlinks vs. the files pointed to +! +$ touch f +$ ln -s f l +$ setfattr -n user.filename -v f l +$ setfattr -h -n user.filename -v l l +$ getfattr -d f l +# file: f +user.filename="f" + +# file: l +user.filename="f" + +$ getfattr -h -d f l +# file: f +user.filename="f" + +# file: l +user.filename="l" + +$ rm f l |