The branch, master has been updated via 4b0296995cc smbd: consolidate nested if expressions via 643da37fd13 smbd: remove itime and file_id logic and code via 8ad0febd134 vfs: bump VFS version to 47 via 8532d7b38cd CI: consolidate SMB2-FILEID and SMB2-FILEID-UNIQUE torture test suites via 24f4bea5b8e vfs_fruit: change default for "fruit:zero_file_id" option to yes from 9fa67ba8eeb vfs_shadow_copy2: implement readdir()
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 4b0296995cc316910279f7adeb083d3f17b3e4ab Author: Ralph Boehme <s...@samba.org> Date: Tue Mar 29 17:29:18 2022 +0200 smbd: consolidate nested if expressions Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Thu Mar 31 23:58:54 UTC 2022 on sn-devel-184 commit 643da37fd139413651a6198fb0f6e550f7de6584 Author: Ralph Boehme <s...@samba.org> Date: Mon Mar 28 11:48:37 2022 +0200 smbd: remove itime and file_id logic and code This bases File-Ids on the inode numbers again. The whole stuff was added because at that time Apple clients 1. would be upset by inode number reusage and 2. had a client side bug in their fallback implemetentation that assigns File-Ids on the client side in case the server provides File-Ids of 0. After discussion with folks at Apple it should be safe these days to rely on the Mac to generate its own File-Ids and let Samba return 0 File-Ids. Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 8ad0febd1347ddf355581da38eea89228f89507b Author: Ralph Boehme <s...@samba.org> Date: Wed Mar 30 14:27:26 2022 +0200 vfs: bump VFS version to 47 The VFS version bump to 47 was missed when adding SMB_VFS_FSTATAT(). While at it, fix the version history. Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 8532d7b38cdb8538336d9ffc8e818e818e2d72d9 Author: Ralph Boehme <s...@samba.org> Date: Mon Mar 28 12:38:58 2022 +0200 CI: consolidate SMB2-FILEID and SMB2-FILEID-UNIQUE torture test suites We don't need seperate test suites here, all tests are related to File-Ids. Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 24f4bea5b8eb3c71ca85c9444d57b736078525d9 Author: Ralph Boehme <s...@samba.org> Date: Tue Mar 29 17:38:15 2022 +0200 vfs_fruit: change default for "fruit:zero_file_id" option to yes After discussion with folks at Apple it should be safe these days to rely on the Mac to generate its own File-Ids and let Samba return 0 File-Ids. Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/vfs_fruit.8.xml | 8 ++-- librpc/idl/xattr.idl | 7 ++++ source3/include/includes.h | 8 ---- source3/include/proto.h | 2 - source3/include/vfs.h | 9 +++-- source3/lib/file_id.c | 36 ----------------- source3/lib/file_id.h | 6 --- source3/lib/system.c | 78 ------------------------------------- source3/modules/test_vfs_gpfs.c | 54 ------------------------- source3/modules/vfs_ceph.c | 4 -- source3/modules/vfs_default.c | 4 -- source3/modules/vfs_fruit.c | 2 +- source3/modules/vfs_glusterfs.c | 4 -- source3/modules/vfs_gpfs.c | 43 -------------------- source3/rpc_server/mdssvc/mdssvc.c | 21 ++-------- source3/script/tests/test_itime.sh | 39 ------------------- source3/selftest/tests.py | 4 -- source3/smbd/dosmode.c | 59 ++++++++++------------------ source3/smbd/open.c | 44 +++------------------ source3/smbd/smb2_create.c | 8 ++-- source3/smbd/smb2_query_directory.c | 27 ------------- source3/smbd/trans2.c | 11 +++++- source4/selftest/tests.py | 1 - source4/torture/smb2/create.c | 41 ++----------------- source4/torture/smb2/smb2.c | 1 - 25 files changed, 67 insertions(+), 454 deletions(-) delete mode 100755 source3/script/tests/test_itime.sh Changeset truncated at 500 lines: diff --git a/docs-xml/manpages/vfs_fruit.8.xml b/docs-xml/manpages/vfs_fruit.8.xml index bfaf8e42919..4caf308a612 100644 --- a/docs-xml/manpages/vfs_fruit.8.xml +++ b/docs-xml/manpages/vfs_fruit.8.xml @@ -397,12 +397,12 @@ identifier if the client has negotiated AAPL.</para> <para>Mac applications and / or the Mac SMB client code expect the on-disk file identifier to have the semantics of HFS+ Catalog Node - Identifier (CNID). Samba provides File-IDs based on a file's - initial creation date if the option <smbconfoption name="store dos - attributes"/> is enabled. Returning a file identifier of + Identifier (CNID). Samba provides File-IDs based on a file's inode + number which gets recycled across file creation and deletion and + can therefor not be used for Mac client. Returning a file identifier of zero causes the Mac client to stop using and trusting the file id returned from the server.</para> - <para>The default is <emphasis>no</emphasis>.</para> + <para>The default is <emphasis>yes</emphasis>.</para> </listitem> </varlistentry> diff --git a/librpc/idl/xattr.idl b/librpc/idl/xattr.idl index a2c4f25d0fd..82d4ec5a473 100644 --- a/librpc/idl/xattr.idl +++ b/librpc/idl/xattr.idl @@ -94,12 +94,19 @@ interface xattr NTTIME create_time; } xattr_DosInfo4; + typedef struct { + xattr_DosInfoValidFlags valid_flags; + uint32 attrib; + NTTIME create_time; + } xattr_DosInfo5; + typedef [public,switch_type(uint16)] union { [case(0xFFFF)] xattr_DosInfoFFFFCompat compatinfoFFFF; [case(1)] xattr_DosInfo1 info1; [case(2)] xattr_DosInfo2Old oldinfo2; [case(3)] xattr_DosInfo3 info3; [case(4)] xattr_DosInfo4 info4; + [case(5)] xattr_DosInfo5 info5; } xattr_DosInfo; typedef [public] struct { diff --git a/source3/include/includes.h b/source3/include/includes.h index 510a0b96539..ee0628eb31a 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -183,8 +183,6 @@ typedef sig_atomic_t volatile SIG_ATOMIC_T; /* Is birthtime real, or was it calculated ? */ #define ST_EX_IFLAG_CALCULATED_BTIME (1 << 0) -#define ST_EX_IFLAG_CALCULATED_ITIME (1 << 1) -#define ST_EX_IFLAG_CALCULATED_FILE_ID (1 << 2) /* * Type for stat structure. @@ -193,7 +191,6 @@ typedef sig_atomic_t volatile SIG_ATOMIC_T; struct stat_ex { dev_t st_ex_dev; ino_t st_ex_ino; - uint64_t st_ex_file_id; mode_t st_ex_mode; nlink_t st_ex_nlink; uid_t st_ex_uid; @@ -204,11 +201,6 @@ struct stat_ex { struct timespec st_ex_mtime; struct timespec st_ex_ctime; struct timespec st_ex_btime; /* birthtime */ - /* - * Immutable original birth time aka invented time. Set when a file - * is created, never changes thereafter. May not be set by the client. - */ - struct timespec st_ex_itime; /* invented time */ blksize_t st_ex_blksize; blkcnt_t st_ex_blocks; diff --git a/source3/include/proto.h b/source3/include/proto.h index 916032a931d..2f96a35c531 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -170,12 +170,10 @@ int sys_fcntl_ptr(int fd, int cmd, void *arg); int sys_fcntl_long(int fd, int cmd, long arg); int sys_fcntl_int(int fd, int cmd, int arg); void update_stat_ex_mtime(struct stat_ex *dst, struct timespec write_ts); -void update_stat_ex_itime(struct stat_ex *dst, struct timespec itime); void update_stat_ex_create_time(struct stat_ex *dst, struct timespec create_time); void update_stat_ex_file_id(struct stat_ex *dst, uint64_t file_id); void update_stat_ex_from_saved_stat(struct stat_ex *dst, const struct stat_ex *src); -void create_clock_itime(struct stat_ex *dst); int sys_stat(const char *fname, SMB_STRUCT_STAT *sbuf, bool fake_dir_create_times); int sys_fstat(int fd, SMB_STRUCT_STAT *sbuf, diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 333fdba1548..2694cb5dffc 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -360,13 +360,16 @@ * Version 45 - Remove SYS_ACL_BLOB_GET_FILE * Version 45 - Add SMB_VFS_FCHFLAGS * Version 45 - Remove SMB_VFS_GETXATTR + * Change to Version 46 - will ship with 4.16 * Version 46 - Rename SMB_VFS_KERNEL_FLOCK to SMB_VFS_FILESYSTEM_SHAREMODE * Version 46 - Add flags and xferlen args to SMB_VFS_OFFLOAD_READ_RECV - * Version 46 - Add SMB_VFS_FSTATAT - * Version 46 - Change SMB_VFS_GET_REAL_FILENAME to return NTSTATUS + * Change to Version 47 - will ship with 4.17 + * Version 47 - Add SMB_VFS_FSTATAT + * Version 47 - Change SMB_VFS_GET_REAL_FILENAME to return NTSTATUS + * Version 47 - remove st_ex_itime from struct stat_ex */ -#define SMB_VFS_INTERFACE_VERSION 46 +#define SMB_VFS_INTERFACE_VERSION 47 /* All intercepted VFS operations must be declared as static functions inside module source diff --git a/source3/lib/file_id.c b/source3/lib/file_id.c index 6bfcf1463d2..545437afefa 100644 --- a/source3/lib/file_id.c +++ b/source3/lib/file_id.c @@ -80,39 +80,3 @@ void pull_file_id_24(const char *buf, struct file_id *id) id->extid = IVAL(buf, 16); id->extid |= ((uint64_t)IVAL(buf,20))<<32; } - -uint64_t make_file_id_from_itime(const struct stat_ex *st) -{ - struct timespec itime = st->st_ex_itime; - ino_t ino = st->st_ex_ino; - uint64_t file_id_low; - uint64_t file_id; - - if (st->st_ex_iflags & ST_EX_IFLAG_CALCULATED_ITIME) { - return ino; - } - - round_timespec_to_nttime(&itime); - - file_id_low = itime.tv_nsec; - if (file_id_low == 0) { - /* - * This could be by coincidence, but more likely the filesystem - * is only giving us seconds granularity. We need more fine - * grained granularity for the File-ID, so combine with the - * inode number. - */ - file_id_low = ino & ((1 << 30) - 1); - } - - /* - * Set the high bit so ideally File-IDs based on inode numbers and - * File-IDs based on Birth Time use disjoint ranges, given inodes never - * have the high bit set. - */ - file_id = ((uint64_t)1) << 63; - file_id |= (uint64_t)itime.tv_sec << 30; - file_id |= file_id_low; - - return file_id; -} diff --git a/source3/lib/file_id.h b/source3/lib/file_id.h index 630d154c077..255b1ddc5c5 100644 --- a/source3/lib/file_id.h +++ b/source3/lib/file_id.h @@ -41,10 +41,4 @@ void push_file_id_16(char *buf, const struct file_id *id); void push_file_id_24(char *buf, const struct file_id *id); void pull_file_id_24(const char *buf, struct file_id *id); -/* - * Make a SMB File-ID from itime - */ -struct stat_ex; -uint64_t make_file_id_from_itime(const struct stat_ex *st); - #endif diff --git a/source3/lib/system.c b/source3/lib/system.c index 00d31692e00..da92d9b64c8 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -210,9 +210,6 @@ static void make_create_timespec(const struct stat *pst, struct stat_ex *dst, dst->st_ex_btime = calc_create_time_stat(pst); dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_BTIME; } - - dst->st_ex_itime = dst->st_ex_btime; - dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_ITIME; } /**************************************************************************** @@ -239,19 +236,6 @@ void update_stat_ex_create_time(struct stat_ex *dst, dst->st_ex_iflags &= ~ST_EX_IFLAG_CALCULATED_BTIME; } -void update_stat_ex_itime(struct stat_ex *dst, - struct timespec itime) -{ - dst->st_ex_itime = itime; - dst->st_ex_iflags &= ~ST_EX_IFLAG_CALCULATED_ITIME; -} - -void update_stat_ex_file_id(struct stat_ex *dst, uint64_t file_id) -{ - dst->st_ex_file_id = file_id; - dst->st_ex_iflags &= ~ST_EX_IFLAG_CALCULATED_FILE_ID; -} - void update_stat_ex_from_saved_stat(struct stat_ex *dst, const struct stat_ex *src) { @@ -262,14 +246,6 @@ void update_stat_ex_from_saved_stat(struct stat_ex *dst, if (!(src->st_ex_iflags & ST_EX_IFLAG_CALCULATED_BTIME)) { update_stat_ex_create_time(dst, src->st_ex_btime); } - - if (!(src->st_ex_iflags & ST_EX_IFLAG_CALCULATED_ITIME)) { - update_stat_ex_itime(dst, src->st_ex_itime); - } - - if (!(src->st_ex_iflags & ST_EX_IFLAG_CALCULATED_FILE_ID)) { - update_stat_ex_file_id(dst, src->st_ex_file_id); - } } void init_stat_ex_from_stat (struct stat_ex *dst, @@ -306,60 +282,6 @@ void init_stat_ex_from_stat (struct stat_ex *dst, #else dst->st_ex_flags = 0; #endif - dst->st_ex_file_id = dst->st_ex_ino; - dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_FILE_ID; -} - -/******************************************************************* - Create a clock-derived itime (invented) time. Used to generate - the fileid. -********************************************************************/ - -void create_clock_itime(struct stat_ex *dst) -{ - NTTIME tval; - struct timespec itime; - uint64_t mixin; - uint8_t rval; - - /* Start with the system clock. */ - itime = timespec_current(); - - /* Convert to NTTIME. */ - tval = unix_timespec_to_nt_time(itime); - - /* - * In case the system clock is poor granularity - * (happens on VM or docker images) then mix in - * 8 bits of randomness. - */ - generate_random_buffer((unsigned char *)&rval, 1); - mixin = rval; - - /* - * Shift up by 55 bits. This gives us approx 114 years - * of headroom. - */ - mixin <<= 55; - - /* And OR into the nttime. */ - tval |= mixin; - - /* - * Convert to a unix timespec, ignoring any - * constraints on seconds being higher than - * TIME_T_MAX or lower than TIME_T_MIN. These - * are only needed to allow unix display time functions - * to work correctly, and this is being used to - * generate a fileid. All we care about is the - * NTTIME being valid across all NTTIME ranges - * (which we carefully ensured above). - */ - - itime = nt_time_to_unix_timespec_raw(tval); - - /* And set as a generated itime. */ - update_stat_ex_itime(dst, itime); } /******************************************************************* diff --git a/source3/modules/test_vfs_gpfs.c b/source3/modules/test_vfs_gpfs.c index b03a46a352d..44454f8f40a 100644 --- a/source3/modules/test_vfs_gpfs.c +++ b/source3/modules/test_vfs_gpfs.c @@ -84,59 +84,6 @@ static void test_dosmode_to_gpfs_winattrs(void **state) GPFS_WINATTR_SYSTEM); } -static void test_gpfs_get_file_id(void **state) -{ - struct gpfs_iattr64 iattr; - uint64_t fileid1, fileid2; - NTSTATUS status; - - /* - * Ensure that the generated fileid only depends on the - * ia_inode, ia_gen and ia_modsnapid fields in struct - * gpfs_iattr64 and any changes to these fields result in a - * different file id. - */ - - memset(&iattr, 1, sizeof(iattr)); - iattr.ia_inode = 0x11; - iattr.ia_gen = 0x22; - iattr.ia_modsnapid = 0x33; - status = vfs_gpfs_get_file_id(&iattr, &fileid1); - assert_true(NT_STATUS_IS_OK(status)); - - memset(&iattr, 2, sizeof(iattr)); - iattr.ia_inode = 0x11; - iattr.ia_gen = 0x22; - iattr.ia_modsnapid = 0x33; - status = vfs_gpfs_get_file_id(&iattr, &fileid2); - assert_true(NT_STATUS_IS_OK(status)); - assert_int_equal(fileid1, fileid2); - - iattr.ia_inode = 0x44; - iattr.ia_gen = 0x22; - iattr.ia_modsnapid = 0x33; - status = vfs_gpfs_get_file_id(&iattr, &fileid2); - assert_true(NT_STATUS_IS_OK(status)); - assert_true(NT_STATUS_IS_OK(status)); - assert_int_not_equal(fileid1, fileid2); - - iattr.ia_inode = 0x11; - iattr.ia_gen = 0x44; - iattr.ia_modsnapid = 0x33; - status = vfs_gpfs_get_file_id(&iattr, &fileid2); - assert_true(NT_STATUS_IS_OK(status)); - assert_true(NT_STATUS_IS_OK(status)); - assert_int_not_equal(fileid1, fileid2); - - iattr.ia_inode = 0x11; - iattr.ia_gen = 0x22; - iattr.ia_modsnapid = 0x44; - status = vfs_gpfs_get_file_id(&iattr, &fileid2); - assert_true(NT_STATUS_IS_OK(status)); - assert_true(NT_STATUS_IS_OK(status)); - assert_int_not_equal(fileid1, fileid2); -} - int main(int argc, char **argv) { const struct CMUnitTest tests[] = { @@ -146,7 +93,6 @@ int main(int argc, char **argv) #endif /* #ifdef HAVE_KERNEL_OPLOCKS_LINUX */ cmocka_unit_test(test_gpfs_winattrs_to_dosmode), cmocka_unit_test(test_dosmode_to_gpfs_winattrs), - cmocka_unit_test(test_gpfs_get_file_id), }; cmocka_set_message_output(CM_OUTPUT_SUBUNIT); diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index 9188b7991d4..44c9cf3053a 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -749,12 +749,8 @@ static void init_stat_ex_from_ceph_statx(struct stat_ex *dst, const struct ceph_ dst->st_ex_btime = stx->stx_btime; dst->st_ex_ctime = stx->stx_ctime; dst->st_ex_mtime = stx->stx_mtime; - dst->st_ex_itime = dst->st_ex_btime; - dst->st_ex_iflags = ST_EX_IFLAG_CALCULATED_ITIME; dst->st_ex_blksize = stx->stx_blksize; dst->st_ex_blocks = stx->stx_blocks; - dst->st_ex_file_id = dst->st_ex_ino; - dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_FILE_ID; } static int cephwrap_stat(struct vfs_handle_struct *handle, diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 6c4f15ba39f..7108402a407 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -3294,10 +3294,6 @@ static uint64_t vfswrap_fs_file_id(struct vfs_handle_struct *handle, { uint64_t file_id; - if (!(psbuf->st_ex_iflags & ST_EX_IFLAG_CALCULATED_FILE_ID)) { - return psbuf->st_ex_file_id; - } - if (handle->conn->base_share_dev == psbuf->st_ex_dev) { return (uint64_t)psbuf->st_ex_ino; } diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index 75ddf3226b7..3c19aad8b0a 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -360,7 +360,7 @@ static int init_fruit_config(vfs_handle_struct *handle) config->aapl_zero_file_id = lp_parm_bool(SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, - "zero_file_id", false); + "zero_file_id", true); config->readdir_attr_rsize = lp_parm_bool( SNUM(handle->conn), "readdir_attr", "aapl_rsize", true); diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c index bce73094c54..56a403b5547 100644 --- a/source3/modules/vfs_glusterfs.c +++ b/source3/modules/vfs_glusterfs.c @@ -71,16 +71,12 @@ static void smb_stat_ex_from_stat(struct stat_ex *dst, const struct stat *src) dst->st_ex_btime.tv_sec = src->st_mtime; dst->st_ex_blksize = src->st_blksize; dst->st_ex_blocks = src->st_blocks; - dst->st_ex_file_id = dst->st_ex_ino; - dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_FILE_ID; #ifdef STAT_HAVE_NSEC dst->st_ex_atime.tv_nsec = src->st_atime_nsec; dst->st_ex_mtime.tv_nsec = src->st_mtime_nsec; dst->st_ex_ctime.tv_nsec = src->st_ctime_nsec; dst->st_ex_btime.tv_nsec = src->st_mtime_nsec; #endif - dst->st_ex_itime = dst->st_ex_btime; - dst->st_ex_iflags |= ST_EX_IFLAG_CALCULATED_ITIME; } /* pre-opened glfs_t */ diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 5ef1f5f2e73..5c2b2c3705e 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -1434,40 +1434,6 @@ static unsigned int vfs_gpfs_dosmode_to_winattrs(uint32_t dosmode) return winattrs; } -static NTSTATUS vfs_gpfs_get_file_id(struct gpfs_iattr64 *iattr, - uint64_t *fileid) -{ - uint8_t input[sizeof(gpfs_ino64_t) + - sizeof(gpfs_gen64_t) + - sizeof(gpfs_snapid64_t)]; - uint8_t digest[gnutls_hash_get_len(GNUTLS_DIG_SHA1)]; - int rc; - - DBG_DEBUG("ia_inode 0x%llx, ia_gen 0x%llx, ia_modsnapid 0x%llx\n", - iattr->ia_inode, iattr->ia_gen, iattr->ia_modsnapid); - - SBVAL(input, - 0, iattr->ia_inode); - SBVAL(input, - sizeof(gpfs_ino64_t), iattr->ia_gen); - SBVAL(input, - sizeof(gpfs_ino64_t) + sizeof(gpfs_gen64_t), iattr->ia_modsnapid); - - GNUTLS_FIPS140_SET_LAX_MODE(); - rc = gnutls_hash_fast(GNUTLS_DIG_SHA1, input, sizeof(input), &digest); - GNUTLS_FIPS140_SET_STRICT_MODE(); - - if (rc != 0) { - return gnutls_error_to_ntstatus(rc, - NT_STATUS_HASH_NOT_SUPPORTED); - } - - memcpy(fileid, &digest, sizeof(*fileid)); - DBG_DEBUG("file_id 0x%" PRIx64 "\n", *fileid); - - return NT_STATUS_OK; -} - static struct timespec gpfs_timestruc64_to_timespec(struct gpfs_timestruc64 g) { return (struct timespec) { .tv_sec = g.tv_sec, .tv_nsec = g.tv_nsec }; @@ -1484,8 +1450,6 @@ static NTSTATUS vfs_gpfs_fget_dos_attributes(struct vfs_handle_struct *handle, struct gpfs_iattr64 iattr = { }; unsigned int litemask = 0; struct timespec ts; - uint64_t file_id; - NTSTATUS status; int ret; SMB_VFS_HANDLE_GET_DATA(handle, config, @@ -1556,17 +1520,10 @@ static NTSTATUS vfs_gpfs_fget_dos_attributes(struct vfs_handle_struct *handle, return map_nt_error_from_unix(errno); } - ZERO_STRUCT(file_id); - status = vfs_gpfs_get_file_id(&iattr, &file_id); - if (!NT_STATUS_IS_OK(status)) { - return status; - } - ts = gpfs_timestruc64_to_timespec(iattr.ia_createtime); *dosmode |= vfs_gpfs_winattrs_to_dosmode(iattr.ia_winflags); update_stat_ex_create_time(&fsp->fsp_name->st, ts); - update_stat_ex_file_id(&fsp->fsp_name->st, file_id); return NT_STATUS_OK; } diff --git a/source3/rpc_server/mdssvc/mdssvc.c b/source3/rpc_server/mdssvc/mdssvc.c index 956e097eaf4..d159b86e64d 100644 -- Samba Shared Repository