]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/vfs/extattr.c
debug instead of error loglevel
[netatalk.git] / libatalk / vfs / extattr.c
index 0115c1534bca209cb9b43e82ed2ba32a8a93695b..c98b6ea14f751e3f0293dec15f67c7d2afb89ab8 100644 (file)
@@ -63,7 +63,7 @@
 
 /******** Solaris EA helper function prototypes ********/
 #ifdef HAVE_ATTROPEN
-#define SOLARIS_ATTRMODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP
+#define SOLARIS_ATTRMODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
 static int solaris_write_xattr(int attrfd, const char *value, size_t size);
 static ssize_t solaris_read_xattr(int attrfd, void *value, size_t size);
 static ssize_t solaris_list_xattr(int attrdirfd, char *list, size_t size);
@@ -88,6 +88,31 @@ static const char *prefix(const char *uname)
 #endif
 }
 
+int sys_getxattrfd(int fd, const char *uname, int oflag, ...)
+{
+#if defined HAVE_ATTROPEN
+    int eafd;
+    va_list args;
+    mode_t mode = 0;
+
+    if (oflag & O_CREAT) {
+        va_start(args, oflag);
+        mode = va_arg(args, mode_t);
+        va_end(args);
+    }
+
+    if (oflag & O_CREAT)
+        eafd = solaris_openat(fd, uname, oflag | O_XATTR, mode);
+    else
+        eafd = solaris_openat(fd, uname, oflag | O_XATTR, mode);
+
+    return eafd;
+#else
+    errno = ENOSYS;
+    return -1;
+#endif
+}
+
 ssize_t sys_getxattr (const char *path, const char *uname, void *value, size_t size)
 {
        const char *name = prefix(uname);
@@ -825,7 +850,7 @@ static ssize_t solaris_list_xattr(int attrdirfd, char *list, size_t size)
        }
 
        if (closedir(dirp) == -1) {
-               LOG(log_debug, logtype_default, "closedir dirp failed: %s\n",strerror(errno));
+               LOG(log_error, logtype_default, "closedir dirp: %s",strerror(errno));
                return -1;
        }
        return len;
@@ -841,21 +866,38 @@ static int solaris_unlinkat(int attrdirfd, const char *name)
 
 static int solaris_attropen(const char *path, const char *attrpath, int oflag, mode_t mode)
 {
-       int filedes = attropen(path, attrpath, oflag, mode);
-       if (filedes == -1) {
-               LOG(log_maxdebug, logtype_default, "attropen FAILED: path: %s, name: %s, errno: %s",
-            path, attrpath, strerror(errno));
-        errno = ENOATTR;
+       int filedes;
+
+       if ((filedes = attropen(path, attrpath, oflag, mode)) == -1) {
+        switch (errno) {
+        case ENOENT:
+        case EEXIST:
+            break;
+        default:
+            LOG(log_error, logtype_default, "attropen(\"%s\", ea:'%s'): %s",
+                path, attrpath, strerror(errno));
+            errno = ENOATTR;
+            break;
+        }
        }
        return filedes;
 }
 
 static int solaris_openat(int fildes, const char *path, int oflag, mode_t mode)
 {
-       int filedes = openat(fildes, path, oflag, mode);
-       if (filedes == -1) {
-               LOG(log_maxdebug, logtype_default, "openat FAILED: fd: %d, path: %s, errno: %s",
-            filedes, path, strerror(errno));
+       int filedes;
+
+       if ((filedes = openat(fildes, path, oflag, mode)) == -1) {
+        switch (errno) {
+        case ENOENT:
+        case EEXIST:
+            break;
+        default:
+            LOG(log_error, logtype_default, "openat(\"%s\"): %s",
+                path, strerror(errno));
+            errno = ENOATTR;
+            break;
+        }
        }
        return filedes;
 }
@@ -865,7 +907,8 @@ static int solaris_write_xattr(int attrfd, const char *value, size_t size)
        if ((ftruncate(attrfd, 0) == 0) && (write(attrfd, value, size) == size)) {
                return 0;
        } else {
-               LOG(log_maxdebug, logtype_default, "solaris_write_xattr FAILED!");
+               LOG(log_error, logtype_default, "solaris_write_xattr: %s",
+            strerror(errno));
                return -1;
        }
 }