summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Scott <nathans@sgi.com>2002-03-11 23:42:35 +0000
committerNathan Scott <nathans@sgi.com>2002-03-11 23:42:35 +0000
commit84233d472fbea2750199c9785a3b28a079551905 (patch)
tree57b9f873ecab86d2ea58d1f06a562d2ed5ae3b9e
parent659175e0055fff18ebf5505ab1963dd00b8316a8 (diff)
downloadattr-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--VERSION2
-rw-r--r--debian/changelog4
-rw-r--r--doc/CHANGES6
-rw-r--r--libattr/syscalls.c3
-rw-r--r--man/Makefile2
-rw-r--r--man/man1/Makefile11
-rw-r--r--man/man2/Makefile11
-rw-r--r--man/man3/Makefile11
-rw-r--r--man/man3/attr_get.38
-rw-r--r--man/man3/attr_list.3269
-rw-r--r--man/man3/attr_multi.34
-rw-r--r--man/man3/attr_remove.34
-rw-r--r--man/man3/attr_set.38
-rw-r--r--man/man5/Makefile11
-rw-r--r--man/man5/attr.55
-rw-r--r--test/attr.test22
16 files changed, 359 insertions, 22 deletions
diff --git a/VERSION b/VERSION
index d6fb318..a889a92 100644
--- a/VERSION
+++ b/VERSION
@@ -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