/******** 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);
#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);
}
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;
{
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));
+ if (errno != ENOENT)
+ LOG(log_error, logtype_default, "attropen(\"%s\", ea:'%s'): %s",
+ path, attrpath, strerror(errno));
errno = ENOATTR;
}
return filedes;
{
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));
+ if (errno != ENOENT)
+ LOG(log_error, logtype_default, "openat(\"%s\"): %s",
+ path, strerror(errno));
+ errno = ENOATTR;
}
return filedes;
}
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;
}
}