[PATCH] Add close_fn in fruit and streams_xattr module
Günther Deschner
gd at samba.org
Wed Dec 19 16:46:47 UTC 2018
Hi,
attached two fixes to add close_fns to fruit and streams_xattr, noticed
while adding fruit on top of gluster. More patches will follow to fully
deal with local access to the AppleDouble files.
Please review and push,
Guenther
--
Günther Deschner GPG-ID: 8EE11688
Red Hat gdeschner at redhat.com
Samba Team gd at samba.org
-------------- next part --------------
From 1eba40b1f21583f29ae4487db9ee05396567ebe6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
Date: Tue, 18 Dec 2018 17:18:33 +0100
Subject: [PATCH 1/2] s3-vfs-fruit: add close call
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
https://bugzilla.samba.org/show_bug.cgi?id=13725
We cannot always rely on vfs_default to close the fake fds. This mostly is
relevant when used with another non-local VFS filesystem module such as
gluster.
Guenther
Signed-off-by: Günther Deschner <gd at samba.org>
---
source3/modules/vfs_fruit.c | 55 +++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index 19101efba74..e3085c73c76 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -3719,6 +3719,60 @@ static int fruit_open(vfs_handle_struct *handle,
return fd;
}
+static int fruit_close_rsrc(vfs_handle_struct *handle,
+ files_struct *fsp)
+{
+ int ret;
+ struct fruit_config_data *config = NULL;
+
+ SMB_VFS_HANDLE_GET_DATA(handle, config,
+ struct fruit_config_data, return -1);
+
+ switch (config->rsrc) {
+ case FRUIT_RSRC_STREAM:
+ case FRUIT_RSRC_ADFILE:
+ ret = SMB_VFS_NEXT_CLOSE(handle, fsp);
+ break;
+
+ case FRUIT_RSRC_XATTR:
+ ret = close(fsp->fh->fd);
+ fsp->fh->fd = -1;
+ break;
+
+ default:
+ DBG_ERR("Unexpected rsrc config [%d]\n", config->rsrc);
+ return -1;
+ }
+
+ return ret;
+}
+
+static int fruit_close(vfs_handle_struct *handle,
+ files_struct *fsp)
+{
+ int ret;
+ int fd;
+
+ fd = fsp->fh->fd;
+
+ DBG_DEBUG("Path [%s] fd [%d]\n", smb_fname_str_dbg(fsp->fsp_name), fd);
+
+ if (!is_ntfs_stream_smb_fname(fsp->fsp_name)) {
+ return SMB_VFS_NEXT_CLOSE(handle, fsp);
+ }
+
+ if (is_afpinfo_stream(fsp->fsp_name)) {
+ ret = close(fd);
+ fsp->fh->fd = -1;
+ } else if (is_afpresource_stream(fsp->fsp_name)) {
+ ret = fruit_close_rsrc(handle, fsp);
+ } else {
+ ret = SMB_VFS_NEXT_CLOSE(handle, fsp);
+ }
+
+ return ret;
+}
+
static int fruit_rename(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname_src,
const struct smb_filename *smb_fname_dst)
@@ -7029,6 +7083,7 @@ static struct vfs_fn_pointers vfs_fruit_fns = {
.rename_fn = fruit_rename,
.rmdir_fn = fruit_rmdir,
.open_fn = fruit_open,
+ .close_fn = fruit_close,
.pread_fn = fruit_pread,
.pwrite_fn = fruit_pwrite,
.pread_send_fn = fruit_pread_send,
--
2.19.2
From bc481a1bcec7367d85f69042d5d8d48abc13b629 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd at samba.org>
Date: Tue, 18 Dec 2018 17:20:29 +0100
Subject: [PATCH 2/2] s3-vfs-streams_xattr: add close call
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
https://bugzilla.samba.org/show_bug.cgi?id=13725
We cannot always rely on vfs_default to close the fake fds. This mostly is
relevant when used with another non-local VFS filesystem module such as
gluster.
Guenther
Signed-off-by: Günther Deschner <gd at samba.org>
---
source3/modules/vfs_streams_xattr.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c
index 9f4bc13b034..213a8367541 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -554,6 +554,31 @@ static int streams_xattr_open(vfs_handle_struct *handle,
return -1;
}
+static int streams_xattr_close(vfs_handle_struct *handle,
+ files_struct *fsp)
+{
+ int ret;
+ int fd;
+
+ fd = fsp->fh->fd;
+
+ DBG_DEBUG("streams_xattr_close called [%s] fd [%d]\n",
+ smb_fname_str_dbg(fsp->fsp_name), fd);
+
+ if (!is_ntfs_stream_smb_fname(fsp->fsp_name)) {
+ return SMB_VFS_NEXT_CLOSE(handle, fsp);
+ }
+
+ if (is_ntfs_default_stream_smb_fname(fsp->fsp_name)) {
+ return SMB_VFS_NEXT_CLOSE(handle, fsp);
+ }
+
+ ret = close(fd);
+ fsp->fh->fd = -1;
+
+ return ret;
+}
+
static int streams_xattr_unlink(vfs_handle_struct *handle,
const struct smb_filename *smb_fname)
{
@@ -1653,6 +1678,7 @@ static struct vfs_fn_pointers vfs_streams_xattr_fns = {
.fs_capabilities_fn = streams_xattr_fs_capabilities,
.connect_fn = streams_xattr_connect,
.open_fn = streams_xattr_open,
+ .close_fn = streams_xattr_close,
.stat_fn = streams_xattr_stat,
.fstat_fn = streams_xattr_fstat,
.lstat_fn = streams_xattr_lstat,
--
2.19.2
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: OpenPGP digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20181219/02de84b5/signature.sig>
More information about the samba-technical
mailing list