svn commit: samba r11841 - in branches/SAMBA_3_0/source/lib: .
jra at samba.org
jra at samba.org
Tue Nov 22 06:04:01 GMT 2005
Author: jra
Date: 2005-11-22 06:04:00 +0000 (Tue, 22 Nov 2005)
New Revision: 11841
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11841
Log:
Fix #3262 from Timur Bakeyev to improve reporting on FreeBSD DOS
attribute errors.
Jeremy.
Modified:
branches/SAMBA_3_0/source/lib/system.c
Changeset:
Modified: branches/SAMBA_3_0/source/lib/system.c
===================================================================
--- branches/SAMBA_3_0/source/lib/system.c 2005-11-22 05:21:29 UTC (rev 11840)
+++ branches/SAMBA_3_0/source/lib/system.c 2005-11-22 06:04:00 UTC (rev 11841)
@@ -1370,6 +1370,8 @@
support for IRIX and (Net|Free)BSD also. Expand as other systems have them.
****************************************************************************/
+/* Possible error codes are: ENOATTR, ERANGE, ENOTSUP. From stat(2):
+ EBADF, ENOENT, ENOTDIR, ELOOP, EFAULT, EACCES, ENOMEM, ENAMETOOLONG. */
ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t size)
{
#if defined(HAVE_GETXATTR)
@@ -1385,18 +1387,17 @@
* the returned value to the size of the buffer, so we have to check
* that the buffer is large enough to fit the returned value.
*/
- retval = extattr_get_file(path, attrnamespace, attrname, NULL, 0);
-
- if (retval == -1) {
- return -1;
+ if((retval=extattr_get_file(path, attrnamespace, attrname, NULL, 0)) >= 0) {
+ if(retval > size) {
+ errno = ERANGE;
+ return -1;
+ }
+ if((retval=extattr_get_file(path, attrnamespace, attrname, value, size)) >= 0)
+ return retval;
}
- if(retval > size) {
- errno = ERANGE;
- return -1;
- }
-
- return extattr_get_file(path, attrnamespace, attrname, value, size);
+ DEBUG(10,("sys_getxattr: extattr_get_file() failed with: %s\n", strerror(errno)));
+ return -1;
#elif defined(HAVE_ATTR_GET)
int retval, flags = 0;
int valuelength = (int)size;
@@ -1424,18 +1425,17 @@
EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER;
const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1;
- retval = extattr_get_link(path, attrnamespace, attrname, NULL, 0);
-
- if (retval == -1) {
- return -1;
+ if((retval=extattr_get_link(path, attrnamespace, attrname, NULL, 0)) >= 0) {
+ if(retval > size) {
+ errno = ERANGE;
+ return -1;
+ }
+ if((retval=extattr_get_link(path, attrnamespace, attrname, value, size)) >= 0)
+ return retval;
}
-
- if(retval > size) {
- errno = ERANGE;
- return -1;
- }
-
- return extattr_get_link(path, attrnamespace, attrname, value, size);
+
+ DEBUG(10,("sys_lgetxattr: extattr_get_link() failed with: %s\n", strerror(errno)));
+ return -1;
#elif defined(HAVE_ATTR_GET)
int retval, flags = ATTR_DONTFOLLOW;
int valuelength = (int)size;
@@ -1463,18 +1463,17 @@
EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER;
const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1;
- retval = extattr_get_fd(filedes, attrnamespace, attrname, NULL, 0);
-
- if (retval == -1) {
- return -1;
+ if((retval=extattr_get_fd(filedes, attrnamespace, attrname, NULL, 0)) >= 0) {
+ if(retval > size) {
+ errno = ERANGE;
+ return -1;
+ }
+ if((retval=extattr_get_fd(filedes, attrnamespace, attrname, value, size)) >= 0)
+ return retval;
}
-
- if(retval > size) {
- errno = ERANGE;
- return -1;
- }
-
- return extattr_get_fd(filedes, attrnamespace, attrname, value, size);
+
+ DEBUG(10,("sys_fgetxattr: extattr_get_fd() failed with: %s\n", strerror(errno)));
+ return -1;
#elif defined(HAVE_ATTR_GETF)
int retval, flags = 0;
int valuelength = (int)size;
@@ -1566,7 +1565,7 @@
errno = ERANGE;
return -1;
}
- /* Shift the results back, so we can prepend prefixes */
+ /* Shift results back, so we can prepend prefixes */
buf = memmove(list + len, list, list_size);
for(i = 0; i < list_size; i += len + 1) {
@@ -1652,6 +1651,8 @@
#endif
+/* Possible error codes are: ERANGE, ENOTSUP. From stat(2):
+ EBADF, ENOENT, ENOTDIR, ELOOP, EFAULT, EACCES, ENOMEM, ENAMETOOLONG. */
ssize_t sys_listxattr (const char *path, char *list, size_t size)
{
#if defined(HAVE_LISTXATTR)
@@ -1700,6 +1701,8 @@
#endif
}
+/* Possible error codes are: ENOATTR, ENOTSUP. From stat(2):
+ EBADF, ENOENT, ENOTDIR, ELOOP, EFAULT, EACCES, ENOMEM, ENAMETOOLONG. */
int sys_removexattr (const char *path, const char *name)
{
#if defined(HAVE_REMOVEXATTR)
@@ -1777,6 +1780,8 @@
#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */
#endif
+/* Possible error codes are: EEXIST, ENOATTR, ENOSPC, EDQUOT, ENOTSUP. From
+ stat(2): EBADF, ENOENT, ENOTDIR, ELOOP, EFAULT, EACCES, ENOMEM, ENAMETOOLONG. */
int sys_setxattr (const char *path, const char *name, const void *value, size_t size, int flags)
{
#if defined(HAVE_SETXATTR)
@@ -1796,6 +1801,7 @@
errno = ENOATTR;
return -1;
}
+ /* Ignore other errors */
}
else {
/* CREATE attribute, that already exists */
@@ -1841,6 +1847,7 @@
errno = ENOATTR;
return -1;
}
+ /* Ignore other errors */
}
else {
/* CREATE attribute, that already exists */
@@ -1887,6 +1894,7 @@
errno = ENOATTR;
return -1;
}
+ /* Ignore other errors */
}
else {
/* CREATE attribute, that already exists */
More information about the samba-cvs
mailing list