[SCM] Samba Shared Repository - branch v4-14-stable updated

Karolin Seeger kseeger at samba.org
Tue Apr 20 10:09:22 UTC 2021


The branch, v4-14-stable has been updated
       via  def81d0a59d VERSION: Disable GIT_SNAPSHOT for the 4.14.3 release.
       via  794e1610385 WHATSNEW: Add release notes for Samba 4.14.3.
       via  1cf726dd52f build: Notice if flex is missing at configure time
       via  b74a079a202 s3-iremotewinspool: set the per-request memory context
       via  12bfc430063 build: Only add -Wl,--as-needed when supported
       via  0662726974b s3: smbd: fix deferred renames
       via  f5bb7a55018 s4: torture. Add smb2.lease.rename_wait test to reproduce regression in delay rename for lease break code.
       via  e85d111f54f rpc_server3: Fix a memleak for internal pipes
       via  ed30ce7aa0c spools: avoid leaking memory into the callers mem_ctx
       via  55c76604ca2 pidl: set the per-request memory context in the pidl generator
       via  051585ef361 smbd: free open_rec state in remove_deferred_open_message_smb2_internal()
       via  ebec84c886e smbd: cancel pending poll open timer in poll_open_done()
       via  da71738e987 smbd: reset dangling watch_req pointer in poll_open_done
       via  288c7472083 s3:modules:vfs_virusfilter: Recent New_VFS changes break vfs_virusfilter_openat.
       via  a164468a406 samba-gpupdate: Check sysvol download paths in case-insensitive way
       via  702e0c55989 samba-gpupdate: Test that sysvol paths download in case-insensitive way
       via  231342faf2f idmap_nss: Do not return SID from unixids_to_sids on type mismatch
       via  7628a27a96b idmap_rfc2307: Do not return SID from unixids_to_sids on type mismatch
       via  e7b1ee061ea winbind: Only use unixid2sid mapping when module reports ID_MAPPED
       via  6b8226b7355 smbd: Ensure errno is preserved across fsp destructor
       via  a0862d6d6de third_party: Update socket_wrapper to version 1.3.3
       via  ed3c83a7f8c third_party: Update socket_wrapper to version 1.3.2
       via  6e981465fce VERSION: Bump version up to 4.14.2...
       via  3dceb3ac569 Merge tag 'samba-4.14.2' into v4-14-test
       via  3fa3608e8f0 VERSION: Bump version up to 4.14.1...
      from  5b5f4deb88a WHATSNEW: Add release notes for Samba 4.14.2.

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-14-stable


- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 VERSION                                          |    2 +-
 WHATSNEW.txt                                     |   76 +-
 buildtools/wafsamba/samba_third_party.py         |    2 +-
 pidl/lib/Parse/Pidl/Samba4/NDR/ServerCompat.pm   |    2 +
 python/samba/gpclass.py                          |    5 +-
 python/samba/tests/gpo.py                        |   10 +
 source3/modules/vfs_virusfilter.c                |    8 +-
 source3/rpc_server/rpc_handles.c                 |    6 -
 source3/rpc_server/rpc_ncacn_np.c                |    2 +-
 source3/rpc_server/spoolss/srv_iremotewinspool.c |    2 +
 source3/rpc_server/spoolss/srv_spoolss_nt.c      |    6 +-
 source3/smbd/files.c                             |    3 +
 source3/smbd/open.c                              |    3 +
 source3/smbd/smb2_create.c                       |    1 +
 source3/smbd/smb2_setinfo.c                      |    1 +
 source3/winbindd/idmap_nss.c                     |    6 +-
 source3/winbindd/idmap_rfc2307.c                 |    4 +-
 source3/winbindd/winbindd_dual_srv.c             |    8 +-
 source3/wscript                                  |    9 -
 source4/torture/smb2/lease.c                     |  145 ++
 third_party/socket_wrapper/socket_wrapper.c      | 1710 ++++++++++++++++++----
 third_party/socket_wrapper/socket_wrapper.h      |   89 ++
 third_party/socket_wrapper/wscript               |    8 +-
 wscript                                          |   19 +-
 wscript_configure_embedded_heimdal               |    3 +
 25 files changed, 1802 insertions(+), 328 deletions(-)
 create mode 100644 third_party/socket_wrapper/socket_wrapper.h


Changeset truncated at 500 lines:

diff --git a/VERSION b/VERSION
index a1b3f67bdd1..fbdb45a2349 100644
--- a/VERSION
+++ b/VERSION
@@ -25,7 +25,7 @@
 ########################################################
 SAMBA_VERSION_MAJOR=4
 SAMBA_VERSION_MINOR=14
-SAMBA_VERSION_RELEASE=2
+SAMBA_VERSION_RELEASE=3
 
 ########################################################
 # If a official release has a serious bug              #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 1ef1779c841..71eff9a756c 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,76 @@
+                   ==============================
+                   Release Notes for Samba 4.14.3
+                           April 20, 2021
+                   ==============================
+
+
+This is the latest stable release of the Samba 4.14 release series.
+
+
+Changes since 4.14.2
+--------------------
+
+o  Trever L. Adams <trever.adams at gmail.com>
+   * BUG 14671: s3:modules:vfs_virusfilter: Recent New_VFS changes break
+     vfs_virusfilter_openat.
+
+o  Andrew Bartlett <abartlet at samba.org>
+   * BUG 14586: build: Notice if flex is missing at configure time.
+
+o  Ralph Boehme <slow at samba.org>
+   * BUG 14672: Fix smbd panic when two clients open same file.
+   * BUG 14675: Fix memory leak in the RPC server.
+   * BUG 14679: s3: smbd: fix deferred renames.
+
+o  Samuel Cabrero <scabrero at samba.org>
+   * BUG 14675: s3-iremotewinspool: Set the per-request memory context.
+
+o  Volker Lendecke <vl at samba.org>
+   * BUG 14675: Fix memory leak in the RPC server.
+
+o  Stefan Metzmacher <metze at samba.org>
+   * BUG 11899: third_party: Update socket_wrapper to version 1.3.2.
+   * BUG 14640: third_party: Update socket_wrapper to version 1.3.3.
+
+o  David Mulder <dmulder at suse.com>
+   * BUG 14665: samba-gpupdate: Test that sysvol paths download in
+     case-insensitive way.
+
+o  Sachin Prabhu <sprabhu at redhat.com>
+   * BUG 14662: smbd: Ensure errno is preserved across fsp destructor.
+
+o  Christof Schmitt <cs at samba.org>
+   * BUG 14663: idmap_rfc2307 and idmap_nss return wrong mapping for uid/gid
+     conflict.
+
+o  Martin Schwenke <martin at meltin.net>
+   * BUG 14288: build: Only add -Wl,--as-needed when supported.
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored.  All bug reports should
+be filed under the Samba 4.1 and newer product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
+
+
                    ==============================
                    Release Notes for Samba 4.14.2
                            March 24, 2021
@@ -55,8 +128,7 @@ database (https://bugzilla.samba.org/).
 ======================================================================
 
 
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
 
 
                    ==============================
diff --git a/buildtools/wafsamba/samba_third_party.py b/buildtools/wafsamba/samba_third_party.py
index bc2b21f2a55..1c027cb6870 100644
--- a/buildtools/wafsamba/samba_third_party.py
+++ b/buildtools/wafsamba/samba_third_party.py
@@ -24,7 +24,7 @@ Build.BuildContext.CHECK_CMOCKA = CHECK_CMOCKA
 
 @conf
 def CHECK_SOCKET_WRAPPER(conf):
-    return conf.CHECK_BUNDLED_SYSTEM_PKG('socket_wrapper', minversion='1.2.5')
+    return conf.CHECK_BUNDLED_SYSTEM_PKG('socket_wrapper', minversion='1.3.3')
 Build.BuildContext.CHECK_SOCKET_WRAPPER = CHECK_SOCKET_WRAPPER
 
 @conf
diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/ServerCompat.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/ServerCompat.pm
index 54feea0a9ef..d1368c3dbca 100644
--- a/pidl/lib/Parse/Pidl/Samba4/NDR/ServerCompat.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/NDR/ServerCompat.pm
@@ -299,6 +299,7 @@ sub boilerplate_iface($)
 	$self->pidl("/* Update pipes struct opnum */");
 	$self->pidl("p->opnum = opnum;");
 	$self->pidl("p->dce_call = dce_call;");
+	$self->pidl("p->mem_ctx = mem_ctx;");
 	$self->pidl("/* Update pipes struct session info */");
 	$self->pidl("pipe_session_info = p->session_info;");
 	$self->pidl("p->session_info = dce_call->auth_state->session_info;");
@@ -344,6 +345,7 @@ sub boilerplate_iface($)
 	$self->pidl("");
 
 	$self->pidl("p->dce_call = NULL;");
+	$self->pidl("p->mem_ctx = NULL;");
 	$self->pidl("/* Restore session info */");
 	$self->pidl("p->session_info = pipe_session_info;");
 	$self->pidl("p->auth.auth_type = 0;");
diff --git a/python/samba/gpclass.py b/python/samba/gpclass.py
index 1b29711f245..838ef50ac3c 100644
--- a/python/samba/gpclass.py
+++ b/python/samba/gpclass.py
@@ -393,8 +393,9 @@ def cache_gpo_dir(conn, cache, sub_dir):
 
 def check_safe_path(path):
     dirs = re.split('/|\\\\', path)
-    if 'sysvol' in path:
-        dirs = dirs[dirs.index('sysvol') + 1:]
+    if 'sysvol' in path.lower():
+        ldirs = re.split('/|\\\\', path.lower())
+        dirs = dirs[ldirs.index('sysvol') + 1:]
     if '..' not in dirs:
         return os.path.join(*dirs)
     raise OSError(path)
diff --git a/python/samba/tests/gpo.py b/python/samba/tests/gpo.py
index a0dce8d96d7..0afc2091b3e 100644
--- a/python/samba/tests/gpo.py
+++ b/python/samba/tests/gpo.py
@@ -181,6 +181,16 @@ class GPOTests(tests.TestCase):
         self.assertEqual(result, after, 'check_safe_path() didn\'t'
                           ' correctly convert \\ to /')
 
+    def test_check_safe_path_typesafe_name(self):
+        path = '\\\\toady.suse.de\\SysVol\\toady.suse.de\\Policies\\' \
+               '{31B2F340-016D-11D2-945F-00C04FB984F9}\\GPT.INI'
+        expected_path = 'toady.suse.de/Policies/' \
+                        '{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI'
+
+        result = check_safe_path(path)
+        self.assertEqual(result, expected_path,
+            'check_safe_path unable to detect variable case sysvol components')
+
     def test_gpt_ext_register(self):
         this_path = os.path.dirname(os.path.realpath(__file__))
         samba_path = os.path.realpath(os.path.join(this_path, '../../../'))
diff --git a/source3/modules/vfs_virusfilter.c b/source3/modules/vfs_virusfilter.c
index c9f5e2bf908..524e7dfbad9 100644
--- a/source3/modules/vfs_virusfilter.c
+++ b/source3/modules/vfs_virusfilter.c
@@ -1238,11 +1238,7 @@ static int virusfilter_vfs_openat(struct vfs_handle_struct *handle,
 	bool ok1;
 	char *sret = NULL;
 	struct smb_filename *smb_fname = NULL;
-
-	/*
-	 * For now assert this, so SMB_VFS_NEXT_STAT() below works.
-	 */
-	SMB_ASSERT(fsp_get_pathref_fd(dirfsp) == AT_FDCWD);
+	SMB_STRUCT_STAT sbuf = smb_fname_in->st;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, config,
 				struct virusfilter_config, return -1);
@@ -1284,7 +1280,7 @@ static int virusfilter_vfs_openat(struct vfs_handle_struct *handle,
 		goto virusfilter_vfs_open_next;
 	}
 
-	ret = SMB_VFS_NEXT_STAT(handle, smb_fname);
+	ret = SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf);
 	if (ret != 0) {
 
 		/*
diff --git a/source3/rpc_server/rpc_handles.c b/source3/rpc_server/rpc_handles.c
index 45968746440..9ef93231466 100644
--- a/source3/rpc_server/rpc_handles.c
+++ b/source3/rpc_server/rpc_handles.c
@@ -60,12 +60,6 @@ int make_base_pipes_struct(TALLOC_CTX *mem_ctx,
 		return ENOMEM;
 	}
 
-	p->mem_ctx = talloc_named(p, 0, "pipe %s %p", pipe_name, p);
-	if (!p->mem_ctx) {
-		talloc_free(p);
-		return ENOMEM;
-	}
-
 	p->msg_ctx = msg_ctx;
 	p->transport = transport;
 
diff --git a/source3/rpc_server/rpc_ncacn_np.c b/source3/rpc_server/rpc_ncacn_np.c
index 9ba271c2479..494b002e714 100644
--- a/source3/rpc_server/rpc_ncacn_np.c
+++ b/source3/rpc_server/rpc_ncacn_np.c
@@ -476,7 +476,7 @@ static struct tevent_req *rpcint_bh_raw_call_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
-	state->call = talloc_zero(hs->conn, struct dcesrv_call_state);
+	state->call = talloc_zero(state, struct dcesrv_call_state);
 	if (tevent_req_nomem(state->call, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/source3/rpc_server/spoolss/srv_iremotewinspool.c b/source3/rpc_server/spoolss/srv_iremotewinspool.c
index 26b225818f8..d6a983c722a 100644
--- a/source3/rpc_server/spoolss/srv_iremotewinspool.c
+++ b/source3/rpc_server/spoolss/srv_iremotewinspool.c
@@ -100,6 +100,7 @@ static NTSTATUS iremotewinspool__op_dispatch_internal(struct dcesrv_call_state *
 	/* Update pipes struct opnum */
 	p->opnum = opnum;
 	p->dce_call = dce_call;
+	p->mem_ctx = mem_ctx;
 	/* Update pipes struct session info */
 	pipe_session_info = p->session_info;
 	p->session_info = dce_call->auth_state->session_info;
@@ -1238,6 +1239,7 @@ fail:
 	}
 
 	p->dce_call = NULL;
+	p->mem_ctx = NULL;
 	/* Restore session info */
 	p->session_info = pipe_session_info;
 	p->auth.auth_type = 0;
diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
index d20c19d5271..24ea7367ec8 100644
--- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
+++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
@@ -5731,7 +5731,8 @@ static WERROR construct_printer_driver_info_level(TALLOC_CTX *mem_ctx,
 	}
 
 	if (pinfo2->drivername == NULL || pinfo2->drivername[0] == '\0') {
-		return WERR_UNKNOWN_PRINTER_DRIVER;
+		result = WERR_UNKNOWN_PRINTER_DRIVER;
+		goto done;
 	}
 
 	DBG_INFO("Construct printer driver [%s] for [%s]\n",
@@ -7023,7 +7024,8 @@ static WERROR update_printer(struct pipes_struct *p,
 		raddr = tsocket_address_inet_addr_string(p->remote_address,
 							 p->mem_ctx);
 		if (raddr == NULL) {
-			return WERR_NOT_ENOUGH_MEMORY;
+			result = WERR_NOT_ENOUGH_MEMORY;
+			goto done;
 		}
 
 		/* add_printer_hook() will call reload_services() */
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index f60d5979f53..d9fd2b8ea86 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -358,10 +358,12 @@ static int smb_fname_fsp_destructor(struct smb_filename *smb_fname)
 {
 	struct files_struct *fsp = smb_fname->fsp;
 	NTSTATUS status;
+	int saved_errno = errno;
 
 	destroy_fsp_smb_fname_link(&smb_fname->fsp_link);
 
 	if (fsp == NULL) {
+		errno = saved_errno;
 		return 0;
 	}
 
@@ -380,6 +382,7 @@ static int smb_fname_fsp_destructor(struct smb_filename *smb_fname)
 	file_free(NULL, fsp);
 	smb_fname->fsp = NULL;
 
+	errno = saved_errno;
 	return 0;
 }
 
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index b82eb2f02b9..87c14bb4367 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -3040,6 +3040,9 @@ static void poll_open_done(struct tevent_req *subreq)
 
 	status = share_mode_watch_recv(subreq, NULL, NULL);
 	TALLOC_FREE(subreq);
+	open_rec->watch_req = NULL;
+	TALLOC_FREE(open_rec->te);
+
 	DBG_DEBUG("dbwrap_watched_watch_recv returned %s\n",
 		  nt_errstr(status));
 
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index 2dd3745dd32..8ff57c94aa0 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -1714,6 +1714,7 @@ static void remove_deferred_open_message_smb2_internal(struct smbd_smb2_request
 	state->open_was_deferred = false;
 	/* Ensure we don't have any outstanding immediate event. */
 	TALLOC_FREE(state->im);
+	TALLOC_FREE(state->open_rec);
 }
 
 void remove_deferred_open_message_smb2(
diff --git a/source3/smbd/smb2_setinfo.c b/source3/smbd/smb2_setinfo.c
index 646e009a746..e490596a2e0 100644
--- a/source3/smbd/smb2_setinfo.c
+++ b/source3/smbd/smb2_setinfo.c
@@ -214,6 +214,7 @@ static bool delay_rename_lease_break_fn(
 		return false;
 	}
 
+	state->delay = true;
 	break_to = (e_lease_type & ~SMB2_LEASE_HANDLE);
 
 	send_break_message(
diff --git a/source3/winbindd/idmap_nss.c b/source3/winbindd/idmap_nss.c
index 9e1efefeb24..da50e2b4aa7 100644
--- a/source3/winbindd/idmap_nss.c
+++ b/source3/winbindd/idmap_nss.c
@@ -25,6 +25,7 @@
 #include "nsswitch/winbind_client.h"
 #include "idmap.h"
 #include "lib/winbind_util.h"
+#include "libcli/security/dom_sid.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_IDMAP
@@ -55,6 +56,7 @@ static NTSTATUS idmap_nss_unixids_to_sids(struct idmap_domain *dom, struct id_ma
 		struct passwd *pw;
 		struct group *gr;
 		const char *name;
+		struct dom_sid sid;
 		enum lsa_SidType type;
 		bool ret;
 
@@ -86,7 +88,7 @@ static NTSTATUS idmap_nss_unixids_to_sids(struct idmap_domain *dom, struct id_ma
 		   the following call will not recurse so this is safe */
 		(void)winbind_on();
 		/* Lookup name from PDC using lsa_lookup_names() */
-		ret = winbind_lookup_name(dom->name, name, ids[i]->sid, &type);
+		ret = winbind_lookup_name(dom->name, name, &sid, &type);
 		(void)winbind_off();
 
 		if (!ret) {
@@ -99,6 +101,7 @@ static NTSTATUS idmap_nss_unixids_to_sids(struct idmap_domain *dom, struct id_ma
 		switch (type) {
 		case SID_NAME_USER:
 			if (ids[i]->xid.type == ID_TYPE_UID) {
+				sid_copy(ids[i]->sid, &sid);
 				ids[i]->status = ID_MAPPED;
 			}
 			break;
@@ -107,6 +110,7 @@ static NTSTATUS idmap_nss_unixids_to_sids(struct idmap_domain *dom, struct id_ma
 		case SID_NAME_ALIAS:
 		case SID_NAME_WKN_GRP:
 			if (ids[i]->xid.type == ID_TYPE_GID) {
+				sid_copy(ids[i]->sid, &sid);
 				ids[i]->status = ID_MAPPED;
 			}
 			break;
diff --git a/source3/winbindd/idmap_rfc2307.c b/source3/winbindd/idmap_rfc2307.c
index 05259bf8344..4870ca30485 100644
--- a/source3/winbindd/idmap_rfc2307.c
+++ b/source3/winbindd/idmap_rfc2307.c
@@ -229,6 +229,7 @@ static void idmap_rfc2307_map_sid_results(struct idmap_rfc2307_context *ctx,
 
 	for (i = 0; i < count; i++) {
 		char *name;
+		struct dom_sid sid;
 		enum lsa_SidType lsa_type;
 		struct id_map *map;
 		uint32_t id;
@@ -277,7 +278,7 @@ static void idmap_rfc2307_map_sid_results(struct idmap_rfc2307_context *ctx,
 		   the following call will not recurse so this is safe */
 		(void)winbind_on();
 		/* Lookup name from PDC using lsa_lookup_names() */
-		b = winbind_lookup_name(dom_name, name, map->sid, &lsa_type);
+		b = winbind_lookup_name(dom_name, name, &sid, &lsa_type);
 		(void)winbind_off();
 
 		if (!b) {
@@ -301,6 +302,7 @@ static void idmap_rfc2307_map_sid_results(struct idmap_rfc2307_context *ctx,
 		}
 
 		map->status = ID_MAPPED;
+		sid_copy(map->sid, &sid);
 	}
 }
 
diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c
index ffd7bb957b2..32d11e1fa57 100644
--- a/source3/winbindd/winbindd_dual_srv.c
+++ b/source3/winbindd/winbindd_dual_srv.c
@@ -283,8 +283,12 @@ NTSTATUS _wbint_UnixIDs2Sids(struct pipes_struct *p,
 	}
 
 	for (i=0; i<r->in.num_ids; i++) {
-		r->out.xids[i] = maps[i]->xid;
-		sid_copy(&r->out.sids[i], maps[i]->sid);
+		if (maps[i]->status == ID_MAPPED) {
+			r->out.xids[i] = maps[i]->xid;
+			sid_copy(&r->out.sids[i], maps[i]->sid);
+		} else {
+			r->out.sids[i] = (struct dom_sid) { 0 };
+		}
 	}
 
 	TALLOC_FREE(maps);
diff --git a/source3/wscript b/source3/wscript
index ba02a3586b9..adc31ce57b8 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -1838,15 +1838,6 @@ main() {
                            define=None,
                            on_target=False)
 
-    Logs.info("Checking for flex")
-    conf.find_program('flex', var='FLEX')
-    if conf.env['FLEX']:
-        conf.env.FLEXFLAGS = ['-t']
-        conf.CHECK_COMMAND('%s --version' % conf.env.FLEX[0],
-                           msg='Using flex version',
-                           define=None,
-                           on_target=False)
-
     with_spotlight_tracker_backend = (
         conf.CONFIG_SET('HAVE_TRACKER')
         and conf.CONFIG_SET('HAVE_GLIB')
diff --git a/source4/torture/smb2/lease.c b/source4/torture/smb2/lease.c
index d3b8daea310..824db95a4b5 100644
--- a/source4/torture/smb2/lease.c
+++ b/source4/torture/smb2/lease.c
@@ -3722,6 +3722,148 @@ static bool test_lease_timeout(struct torture_context *tctx,
 	return ret;
 }
 
+static bool test_lease_rename_wait(struct torture_context *tctx,
+                               struct smb2_tree *tree)
+{
+	TALLOC_CTX *mem_ctx = talloc_new(tctx);
+	struct smb2_create io;
+	struct smb2_lease ls1;
+	struct smb2_lease ls2;
+	struct smb2_lease ls3;
+	struct smb2_handle h1 = {{0}};
+	struct smb2_handle h2 = {{0}};
+	struct smb2_handle h3 = {{0}};
+	union smb_setfileinfo sinfo;
+	NTSTATUS status;
+	const char *fname_src = "lease_rename_src.dat";
+	const char *fname_dst = "lease_rename_dst.dat";
+	bool ret = true;
+	struct smb2_lease_break_ack ack = {};
+	struct smb2_request *rename_req = NULL;
+	uint32_t caps;
+	unsigned int i;
+
+	caps = smb2cli_conn_server_capabilities(tree->session->transport->conn);
+	if (!(caps & SMB2_CAP_LEASING)) {
+		torture_skip(tctx, "leases are not supported");
+	}
+
+	smb2_util_unlink(tree, fname_src);
+	smb2_util_unlink(tree, fname_dst);
+
+	/* Short timeout for fails. */
+	tree->session->transport->options.request_timeout = 15;
+
+	/* Grab a RH lease. */
+	smb2_lease_create(&io,
+			&ls1,
+			false,
+			fname_src,
+			LEASE1,
+			smb2_util_lease_state("RH"));
+	status = smb2_create(tree, mem_ctx, &io);
+	CHECK_STATUS(status, NT_STATUS_OK);
+	CHECK_CREATED(&io, CREATED, FILE_ATTRIBUTE_ARCHIVE);


-- 
Samba Shared Repository



More information about the samba-cvs mailing list