<member>getwd</member>
<member>getxattr</member>
<member>kernel_flock</member>
- <member>lgetxattr</member>
<member>link</member>
<member>linux_setlease</member>
<member>listxattr</member>
return -1;
}
-static ssize_t skel_lgetxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t
-size)
-{
- errno = ENOSYS;
- return -1;
-}
-
static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size)
{
errno = ENOSYS;
/* EA operations. */
.getxattr_fn = skel_getxattr,
- .lgetxattr_fn = skel_lgetxattr,
.fgetxattr_fn = skel_fgetxattr,
.listxattr_fn = skel_listxattr,
.llistxattr_fn = skel_llistxattr,
return SMB_VFS_NEXT_GETXATTR(handle, path, name, value, size);
}
-static ssize_t skel_lgetxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t
-size)
-{
- return SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size);
-}
-
static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size)
{
return SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, value, size);
/* EA operations. */
.getxattr_fn = skel_getxattr,
- .lgetxattr_fn = skel_lgetxattr,
.fgetxattr_fn = skel_fgetxattr,
.listxattr_fn = skel_listxattr,
.llistxattr_fn = skel_llistxattr,
*)
AC_SEARCH_LIBS(getxattr, [attr])
AC_CHECK_FUNCS(getxattr,[
- AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
+ AC_CHECK_FUNCS(fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
])
AC_CHECK_FUNCS(getea,[
AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
int sys_popen(const char *command);
int sys_pclose(int fd);
ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t size);
-ssize_t sys_lgetxattr (const char *path, const char *name, void *value, size_t size);
ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size);
ssize_t sys_listxattr (const char *path, char *list, size_t size);
ssize_t sys_llistxattr (const char *path, char *list, size_t size);
/* EA operations. */
ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
- ssize_t (*lgetxattr_fn)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
ssize_t (*llistxattr_fn)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
const char *path, const char *name, void *value,
size_t size);
-ssize_t smb_vfs_call_lgetxattr(struct vfs_handle_struct *handle,
- const char *path, const char *name, void *value,
- size_t size);
ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, const char *name,
void *value, size_t size);
#define SMB_VFS_NEXT_GETXATTR(handle,path,name,value,size) \
smb_vfs_call_getxattr((handle)->next,(path),(name),(value),(size))
-#define SMB_VFS_LGETXATTR(conn,path,name,value,size) \
- smb_vfs_call_lgetxattr((conn)->vfs_handles,(path),(name),(value),(size))
-#define SMB_VFS_NEXT_LGETXATTR(handle,path,name,value,size) \
- smb_vfs_call_lgetxattr((handle)->next,(path),(name),(value),(size))
-
#define SMB_VFS_FGETXATTR(fsp,name,value,size) \
smb_vfs_call_fgetxattr((fsp)->conn->vfs_handles, (fsp), (name),(value),(size))
#define SMB_VFS_NEXT_FGETXATTR(handle,fsp,name,value,size) \
#endif
}
-ssize_t sys_lgetxattr (const char *path, const char *name, void *value, size_t size)
-{
-#if defined(HAVE_LGETXATTR)
- return lgetxattr(path, name, value, size);
-#elif defined(HAVE_GETXATTR) && defined(XATTR_ADD_OPT)
- int options = XATTR_NOFOLLOW;
- return getxattr(path, name, value, size, 0, options);
-#elif defined(HAVE_LGETEA)
- return lgetea(path, name, value, size);
-#elif defined(HAVE_EXTATTR_GET_LINK)
- char *s;
- ssize_t retval;
- int attrnamespace = (strncmp(name, "system", 6) == 0) ?
- EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER;
- const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 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;
- }
-
- 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;
- char *attrname = strchr(name,'.') + 1;
-
- if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT;
-
- retval = attr_get(path, attrname, (char *)value, &valuelength, flags);
-
- return retval ? retval : valuelength;
-#elif defined(HAVE_ATTROPEN)
- ssize_t ret = -1;
- int attrfd = solaris_attropen(path, name, O_RDONLY|AT_SYMLINK_NOFOLLOW, 0);
- if (attrfd >= 0) {
- ret = solaris_read_xattr(attrfd, value, size);
- close(attrfd);
- }
- return ret;
-#else
- errno = ENOSYS;
- return -1;
-#endif
-}
-
ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size)
{
#if defined(HAVE_FGETXATTR)
return SMB_VFS_NEXT_GETXATTR(handle, cappath, capname, value, size);
}
-static ssize_t cap_lgetxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t
-size)
-{
- char *cappath = capencode(talloc_tos(), path);
- char *capname = capencode(talloc_tos(), name);
-
- if (!cappath || !capname) {
- errno = ENOMEM;
- return -1;
- }
- return SMB_VFS_NEXT_LGETXATTR(handle, cappath, capname, value, size);
-}
-
static ssize_t cap_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *path, void *value, size_t size)
{
char *cappath = capencode(talloc_tos(), path);
.sys_acl_set_file_fn = cap_sys_acl_set_file,
.sys_acl_delete_def_file_fn = cap_sys_acl_delete_def_file,
.getxattr_fn = cap_getxattr,
- .lgetxattr_fn = cap_lgetxattr,
.fgetxattr_fn = cap_fgetxattr,
.listxattr_fn = cap_listxattr,
.llistxattr_fn = cap_llistxattr,
return ret;
}
-static ssize_t
-catia_lgetxattr(vfs_handle_struct *handle, const char *path,
- const char *name, void *value, size_t size)
-{
- char *mapped_name = NULL;
- NTSTATUS status;
- ssize_t ret;
-
- status = catia_string_replace_allocate(handle->conn,
- name, &mapped_name, vfs_translate_to_unix);
- if (!NT_STATUS_IS_OK(status)) {
- errno = map_errno_from_nt_status(status);
- return -1;
- }
-
-
- ret = SMB_VFS_NEXT_LGETXATTR(handle, path, mapped_name, value, size);
- TALLOC_FREE(mapped_name);
-
- return ret;
-}
-
static ssize_t
catia_listxattr(vfs_handle_struct *handle, const char *path,
char *list, size_t size)
.sys_acl_set_file_fn = catia_sys_acl_set_file,
.sys_acl_delete_def_file_fn = catia_sys_acl_delete_def_file,
.getxattr_fn = catia_getxattr,
- .lgetxattr_fn = catia_lgetxattr,
.listxattr_fn = catia_listxattr,
.llistxattr_fn = catia_llistxattr,
.removexattr_fn = catia_removexattr,
return sys_getxattr(path, name, value, size);
}
-static ssize_t vfswrap_lgetxattr(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size)
-{
- return sys_lgetxattr(path, name, value, size);
-}
-
static ssize_t vfswrap_fgetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size)
{
return sys_fgetxattr(fsp->fh->fd, name, value, size);
/* EA operations. */
.getxattr_fn = vfswrap_getxattr,
- .lgetxattr_fn = vfswrap_lgetxattr,
.fgetxattr_fn = vfswrap_fgetxattr,
.listxattr_fn = vfswrap_listxattr,
.llistxattr_fn = vfswrap_llistxattr,
/* EA operations. */
SMB_VFS_OP_GETXATTR,
- SMB_VFS_OP_LGETXATTR,
SMB_VFS_OP_FGETXATTR,
SMB_VFS_OP_LISTXATTR,
SMB_VFS_OP_LLISTXATTR,
{ SMB_VFS_OP_SYS_ACL_FREE_ACL, "sys_acl_free_acl" },
{ SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER, "sys_acl_free_qualifier" },
{ SMB_VFS_OP_GETXATTR, "getxattr" },
- { SMB_VFS_OP_LGETXATTR, "lgetxattr" },
{ SMB_VFS_OP_FGETXATTR, "fgetxattr" },
{ SMB_VFS_OP_LISTXATTR, "listxattr" },
{ SMB_VFS_OP_LLISTXATTR, "llistxattr" },
return result;
}
-static ssize_t smb_full_audit_lgetxattr(struct vfs_handle_struct *handle,
- const char *path, const char *name,
- void *value, size_t size)
-{
- ssize_t result;
-
- result = SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size);
-
- do_log(SMB_VFS_OP_LGETXATTR, (result >= 0), handle,
- "%s|%s", path, name);
-
- return result;
-}
-
static ssize_t smb_full_audit_fgetxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp,
const char *name, void *value, size_t size)
.sys_acl_free_acl_fn = smb_full_audit_sys_acl_free_acl,
.sys_acl_free_qualifier_fn = smb_full_audit_sys_acl_free_qualifier,
.getxattr_fn = smb_full_audit_getxattr,
- .lgetxattr_fn = smb_full_audit_lgetxattr,
.fgetxattr_fn = smb_full_audit_fgetxattr,
.listxattr_fn = smb_full_audit_listxattr,
.llistxattr_fn = smb_full_audit_llistxattr,
ssize_t);
}
-static ssize_t
-onefs_shadow_copy_lgetxattr(vfs_handle_struct *handle, const char *path,
- const char *name, void *value, size_t size)
-{
- SHADOW_NEXT(LGETXATTR,
- (handle, cpath ?: path, name, value, size),
- ssize_t);
-}
-
static ssize_t
onefs_shadow_copy_listxattr(vfs_handle_struct *handle, const char *path,
char *list, size_t size)
.sys_acl_set_file_fn = onefs_shadow_copy_sys_acl_set_file,
.sys_acl_delete_def_file_fn = onefs_shadow_copy_sys_acl_delete_def_file,
.getxattr_fn = onefs_shadow_copy_getxattr,
- .lgetxattr_fn = onefs_shadow_copy_lgetxattr,
.listxattr_fn = onefs_shadow_copy_listxattr,
.llistxattr_fn = onefs_shadow_copy_llistxattr,
.removexattr_fn = onefs_shadow_copy_removexattr,
return ret;
}
-static ssize_t shadow_copy2_lgetxattr(vfs_handle_struct *handle,
- const char *fname, const char *aname,
- void *value, size_t size)
-{
- time_t timestamp;
- char *stripped;
- ssize_t ret;
- int saved_errno;
- char *conv;
-
- if (!shadow_copy2_strip_snapshot(talloc_tos(), handle, fname,
- ×tamp, &stripped)) {
- return -1;
- }
- if (timestamp == 0) {
- return SMB_VFS_NEXT_LGETXATTR(handle, fname, aname, value,
- size);
- }
- conv = shadow_copy2_convert(talloc_tos(), handle, stripped, timestamp);
- TALLOC_FREE(stripped);
- if (conv == NULL) {
- return -1;
- }
- ret = SMB_VFS_NEXT_LGETXATTR(handle, conv, aname, value, size);
- saved_errno = errno;
- TALLOC_FREE(conv);
- errno = saved_errno;
- return ret;
-}
-
static ssize_t shadow_copy2_listxattr(struct vfs_handle_struct *handle,
const char *fname,
char *list, size_t size)
.mkdir_fn = shadow_copy2_mkdir,
.rmdir_fn = shadow_copy2_rmdir,
.getxattr_fn = shadow_copy2_getxattr,
- .lgetxattr_fn = shadow_copy2_lgetxattr,
.listxattr_fn = shadow_copy2_listxattr,
.removexattr_fn = shadow_copy2_removexattr,
.lremovexattr_fn = shadow_copy2_lremovexattr,
return result;
}
-static ssize_t smb_time_audit_lgetxattr(struct vfs_handle_struct *handle,
- const char *path, const char *name,
- void *value, size_t size)
-{
- ssize_t result;
- struct timespec ts1,ts2;
- double timediff;
-
- clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size);
- clock_gettime_mono(&ts2);
- timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
-
- if (timediff > audit_timeout) {
- smb_time_audit_log("lgetxattr", timediff);
- }
-
- return result;
-}
-
static ssize_t smb_time_audit_fgetxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp,
const char *name, void *value,
.sys_acl_free_acl_fn = smb_time_audit_sys_acl_free_acl,
.sys_acl_free_qualifier_fn = smb_time_audit_sys_acl_free_qualifier,
.getxattr_fn = smb_time_audit_getxattr,
- .lgetxattr_fn = smb_time_audit_lgetxattr,
.fgetxattr_fn = smb_time_audit_fgetxattr,
.listxattr_fn = smb_time_audit_listxattr,
.llistxattr_fn = smb_time_audit_llistxattr,
return handle->fns->getxattr_fn(handle, path, name, value, size);
}
-ssize_t smb_vfs_call_lgetxattr(struct vfs_handle_struct *handle,
- const char *path, const char *name, void *value,
- size_t size)
-{
- VFS_FIND(lgetxattr);
- return handle->fns->lgetxattr_fn(handle, path, name, value, size);
-}
-
ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
struct files_struct *fsp, const char *name,
void *value, size_t size)
getgrent getgrnam getgrouplist getgrset getmntent getpagesize
getproplist get_proplist_entry getpwanam getpwent_r getrlimit gettext
glob grantpt hstrerror initgroups innetgr
-inotify_init lgetea lgetxattr listea listxattr llistea llistxattr
+inotify_init listea listxattr llistea llistxattr
llseek _llseek __llseek lremoveea lremovexattr _lseek __lseek
lsetea lsetxattr _lstat __lstat lutimes
__lxstat memalign mknod mlock mlockall munlock munlockall