The branch, master has been updated via fe8d866d2c6 vfs_ceph: Implement SMB_VFS_FSTATAT via fe16ae1fe83 source3/wscript: Announce deprecation of old Ceph version support via 858b1d064db vfs_ceph: Indicate a successful connection in logs via e657fca589c vfs_ceph: Fix a usage in comments from d63e972aa09 WHATSNEW: Add entry for new save/restore options for smbcacls
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit fe8d866d2c619a16cd114e06802efddea4d08e13 Author: Anoop C S <anoo...@samba.org> Date: Tue Jan 9 11:11:40 2024 +0530 vfs_ceph: Implement SMB_VFS_FSTATAT Signed-off-by: Anoop C S <anoo...@samba.org> Reviewed-by: Guenther Deschner <g...@samba.org> Autobuild-User(master): Günther Deschner <g...@samba.org> Autobuild-Date(master): Fri Jan 26 16:56:59 UTC 2024 on atb-devel-224 commit fe16ae1fe8345259a380eb1d02a20eb043e08d47 Author: Anoop C S <anoo...@samba.org> Date: Thu Jan 25 22:56:26 2024 +0530 source3/wscript: Announce deprecation of old Ceph version support *at() variants for various libcephfs APIs were added with Ceph v17.x. Any other version less than v17.x is soon to be considered EOL[1] which we will now indicate with the help of a warning message during configure time. Going further such a situation will result in disabling the module altogether with the next major Samba version after v4.20. [1] https://docs.ceph.com/en/latest/releases/#ceph-releases-index Signed-off-by: Anoop C S <anoo...@samba.org> Reviewed-by: Guenther Deschner <g...@samba.org> commit 858b1d064db82606c44d5ef5a6098b1b924d5c49 Author: Anoop C S <anoo...@samba.org> Date: Fri Jan 5 12:45:14 2024 +0530 vfs_ceph: Indicate a successful connection in logs Signed-off-by: Anoop C S <anoo...@samba.org> Reviewed-by: Guenther Deschner <g...@samba.org> commit e657fca589ce273d92268889fd9fe8fd98b3a201 Author: Anoop C S <anoo...@samba.org> Date: Mon Dec 18 21:27:44 2023 +0530 vfs_ceph: Fix a usage in comments Signed-off-by: Anoop C S <anoo...@samba.org> Reviewed-by: Guenther Deschner <g...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/modules/vfs_ceph.c | 49 +++++++++++++++++++++++++++++++++++++++++++++- source3/wscript | 23 ++++++++++++---------- 2 files changed, 61 insertions(+), 11 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index 7f0bad8ae33..4387918198e 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -55,7 +55,7 @@ /* * Note, libcephfs's return code model is to return -errno! So we have to - * convert to what Samba expects, with is set errno to -return and return -1 + * convert to what Samba expects, which is to set errno to -return and return -1 */ #define WRAP_RETURN(_res) \ errno = 0; \ @@ -285,6 +285,7 @@ static int cephwrap_connect(struct vfs_handle_struct *handle, connect_ok: handle->data = cmount; + DBG_WARNING("Connection established with the server: %s\n", cookie); /* * Unless we have an async implementation of getxattrat turn this off. */ @@ -944,6 +945,51 @@ static int cephwrap_fstat(struct vfs_handle_struct *handle, files_struct *fsp, S return result; } +static int cephwrap_fstatat(struct vfs_handle_struct *handle, + const struct files_struct *dirfsp, + const struct smb_filename *smb_fname, + SMB_STRUCT_STAT *sbuf, + int flags) +{ + int result = -1; + struct ceph_statx stx = { 0 }; +#ifdef HAVE_CEPH_STATXAT + int dirfd = fsp_get_pathref_fd(dirfsp); + + DBG_DEBUG("[CEPH] fstatat(%p, %d, %s)\n", + handle, dirfd, smb_fname->base_name); + result = ceph_statxat(handle->data, dirfd, smb_fname->base_name, + &stx, SAMBA_STATX_ATTR_MASK, 0); +#else + struct smb_filename *full_fname = NULL; + + full_fname = full_path_from_dirfsp_atname(talloc_tos(), + dirfsp, + smb_fname); + if (full_fname == NULL) { + errno = ENOMEM; + return -1; + } + + DBG_DEBUG("[CEPH] fstatat(%p, %s)\n", + handle, smb_fname_str_dbg(full_fname)); + result = ceph_statx(handle->data, full_fname->base_name, + &stx, SAMBA_STATX_ATTR_MASK, 0); + + TALLOC_FREE(full_fname); +#endif + + DBG_DEBUG("[CEPH] fstatat(...) = %d\n", result); + if (result < 0) { + WRAP_RETURN(result); + } + + init_stat_ex_from_ceph_statx(sbuf, &stx); + DBG_DEBUG("[CEPH] mode = 0x%x\n", sbuf->st_ex_mode); + + return 0; +} + static int cephwrap_lstat(struct vfs_handle_struct *handle, struct smb_filename *smb_fname) { @@ -1858,6 +1904,7 @@ static struct vfs_fn_pointers ceph_fns = { .stat_fn = cephwrap_stat, .fstat_fn = cephwrap_fstat, .lstat_fn = cephwrap_lstat, + .fstatat_fn = cephwrap_fstatat, .unlinkat_fn = cephwrap_unlinkat, .fchmod_fn = cephwrap_fchmod, .fchown_fn = cephwrap_fchown, diff --git a/source3/wscript b/source3/wscript index 12394ef84b1..b76ced59aa4 100644 --- a/source3/wscript +++ b/source3/wscript @@ -1679,16 +1679,19 @@ int main(void) { conf.DEFINE('HAVE_CEPH', '1') conf.CHECK_FUNCS_IN('ceph_select_filesystem', 'cephfs', headers='cephfs/libcephfs.h') - conf.CHECK_FUNCS_IN('ceph_mkdirat', 'cephfs', - headers='cephfs/libcephfs.h') - conf.CHECK_FUNCS_IN('ceph_openat', 'cephfs', - headers='cephfs/libcephfs.h') - conf.CHECK_FUNCS_IN('ceph_unlinkat', 'cephfs', - headers='cephfs/libcephfs.h') - conf.CHECK_FUNCS_IN('ceph_symlinkat', 'cephfs', - headers='cephfs/libcephfs.h') - conf.CHECK_FUNCS_IN('ceph_readlinkat', 'cephfs', - headers='cephfs/libcephfs.h') + conf.DEFINE('HAVE_MANDATORY_CEPH_API', '1') + for api in ['ceph_mkdirat', 'ceph_openat', 'ceph_unlinkat', + 'ceph_symlinkat', 'ceph_readlinkat', 'ceph_statxat']: + if not conf.CHECK_FUNCS_IN(api, 'cephfs', + headers='cephfs/libcephfs.h'): + conf.undefine('HAVE_MANDATORY_CEPH_API') + if not conf.env.HAVE_MANDATORY_CEPH_API: + Logs.warn("Installed Ceph version support is at the verge of " + "deprecation due to the absence of some mandatory " + "libcephfs APIs. This warning there shall result in " + "disabling the Ceph VFS module altogether with the " + "next major Samba version. It is highly recommended " + "to update to a more recent/active version of Ceph.") else: Logs.warn('''Ceph support disabled due to --without-acl-support or lack of ceph_statx support''') -- Samba Shared Repository