[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Mar 31 23:59:01 UTC 2022


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 <slow at samba.org>
Date:   Tue Mar 29 17:29:18 2022 +0200

    smbd: consolidate nested if expressions
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Mar 31 23:58:54 UTC 2022 on sn-devel-184

commit 643da37fd139413651a6198fb0f6e550f7de6584
Author: Ralph Boehme <slow at 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 <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 8ad0febd1347ddf355581da38eea89228f89507b
Author: Ralph Boehme <slow at 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 <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 8532d7b38cdb8538336d9ffc8e818e818e2d72d9
Author: Ralph Boehme <slow at 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 <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 24f4bea5b8eb3c71ca85c9444d57b736078525d9
Author: Ralph Boehme <slow at 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 <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at 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



More information about the samba-cvs mailing list