[SCM] Samba Shared Repository - branch master updated

Ralph Böhme slow at samba.org
Mon Jul 8 17:57:02 UTC 2019


The branch, master has been updated
       via  59cca4c5d69 WHATSNEW.txt: change "mangled names" default to "illegal"
       via  bf5d5fd17c0 docs/xml: change default for "mangled names" to "illegal"
       via  5806affefdb selftest: explicitly set "mangled names = yes"
       via  ad385bf2ed9 WHATSNEW.txt: disable SMB1 by default!
       via  3264b1f317d docs-xml: change "client min protocol" to SMB2_02
       via  d216db5cd54 selftest: explicitly set "client min protocol = CORE"
       via  840b8501b43 docs-xml: change "server min protocol" to SMB2_02
       via  c163ef20f88 selftest: explicitly set "server min protocol = LANMAN1"
       via  32766db2104 smbd: Move fcb_or_dos_open() out of open_file_ntcreate()
       via  b16f7113ebf smbd: Slightly simplify open_mode_check()
       via  9c81d7ec8d0 vfs_fruit: Fix a typo
       via  aab429c1d97 smbd: Slightly simplify fsp_lease_update()
       via  cb2e6226fe6 smbd: Simplify smbd_smb2_setinfo_send()
       via  81011f5ea1f smbd: Make get_relative_fid_filename() static to open.c
       via  9f0820f9ef2 smbd: Make find_share_mode_entry() static to locking.c
      from  6b96ae8316b auth/kerberos: clang: Fix same instances of 'Value stored is never read'

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 59cca4c5d699be80b4ed22b40d8914787415c507
Author: Ralph Boehme <slow at samba.org>
Date:   Mon Jul 8 15:26:02 2019 +0200

    WHATSNEW.txt: change "mangled names" default to "illegal"
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at samba.org>
    Autobuild-Date(master): Mon Jul  8 17:56:50 UTC 2019 on sn-devel-184

commit bf5d5fd17c0fa577ffa9750584873ffd8ccfb1b0
Author: Ralph Boehme <slow at samba.org>
Date:   Mon Jul 8 14:14:29 2019 +0200

    docs/xml: change default for "mangled names" to "illegal"
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 5806affefdbec1859bb6b263b95778ad87c8c59c
Author: Ralph Boehme <slow at samba.org>
Date:   Mon Jul 8 15:26:25 2019 +0200

    selftest: explicitly set "mangled names = yes"
    
    This is the current default and what 'make test' assumes currently.
    
    The next commit will change the default to "illegal".
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit ad385bf2ed9a4456def224d1fc74bdd9331f513d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jun 12 19:08:14 2019 +0200

    WHATSNEW.txt: disable SMB1 by default!
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 3264b1f317d6c603cc72eb2a150fe244c47aa3ac
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jun 6 14:07:13 2019 +0200

    docs-xml: change "client min protocol" to SMB2_02
    
    It's time to disable SMB1 by default...
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit d216db5cd5411d1a4a62ce0b7f43b685f9cd107f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jul 8 11:31:27 2019 +0200

    selftest: explicitly set "client min protocol = CORE"
    
    This is the current default and what 'make test' assumes currently.
    
    The next commit will change the default to disable SMB1.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 840b8501b43695802d78726409b69afb4976166a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jun 6 14:07:13 2019 +0200

    docs-xml: change "server min protocol" to SMB2_02
    
    SMB2_02 was available with Windows Vista.
    It's time to turn SMB1 off by default.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit c163ef20f887d6f7a1f3b5ef79adfccbca85cf57
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jul 8 11:55:13 2019 +0200

    selftest: explicitly set "server min protocol = LANMAN1"
    
    This is the current default and what 'make test' assumes currently.
    
    The next commit will change the default to disable SMB1.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 32766db210426d92948a7d81d923f9d669ff3ed6
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Jul 5 09:52:43 2019 +0200

    smbd: Move fcb_or_dos_open() out of open_file_ntcreate()
    
    This is SMB1-only and pre-ntcreate with only 3 callers that look at
    NTCREATEX_OPTIONS_PRIVATE_DENY_[DOS|FCB]. It is a bit less efficient
    if it kicks in (we have to recreate the fsp), but SMB1 is less and
    less popular, and this particular share mode combination from the
    open&x family of calls might not be worth optimizing for.
    
    This adds smb1_utils.[ch] as a kitchen sink for functions that can go
    away once we drop SMB1.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit b16f7113ebfe324b847f136912d24a25b983aae5
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jul 4 13:55:41 2019 +0200

    smbd: Slightly simplify open_mode_check()
    
    If there are no share modes, we'll just not enter the loop.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 9c81d7ec8d0c724dbb714b05ae73175276e67473
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jul 4 13:55:28 2019 +0200

    vfs_fruit: Fix a typo
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit aab429c1d974a9526f5379ba62b38e8d51a11eb6
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jul 4 08:48:05 2019 +0200

    smbd: Slightly simplify fsp_lease_update()
    
    We have already dereferenced fsp->lease
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit cb2e6226fe666c9dc0b1e36411341db729b19d02
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jul 3 13:44:59 2019 +0200

    smbd: Simplify smbd_smb2_setinfo_send()
    
    Avoid an "else" branch
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 81011f5ea1f411ddfae6af527230d480dc2bbbb4
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jul 3 15:33:02 2019 +0200

    smbd: Make get_relative_fid_filename() static to open.c
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 9f0820f9ef2ba1cf5ab8f72a5826689f9453bc69
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Jul 3 11:25:41 2019 +0200

    smbd: Make find_share_mode_entry() static to locking.c
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 WHATSNEW.txt                                       |  32 ++++++
 docs-xml/smbdotconf/filename/manglednames.xml      |   4 +-
 docs-xml/smbdotconf/protocol/clientminprotocol.xml |   8 +-
 docs-xml/smbdotconf/protocol/serverminprotocol.xml |   4 +-
 lib/param/loadparm.c                               |   6 +-
 selftest/selftest.pl                               |   1 +
 selftest/target/Samba3.pm                          |   4 +
 selftest/target/Samba4.pm                          |   3 +
 source3/locking/locking.c                          |   2 +-
 source3/locking/proto.h                            |   2 -
 source3/modules/vfs_fruit.c                        |   2 +-
 source3/param/loadparm.c                           |   6 +-
 source3/smbd/open.c                                | 114 ++-------------------
 source3/smbd/oplock.c                              |   2 +-
 source3/smbd/proto.h                               |   6 --
 source3/smbd/reply.c                               |  40 +++++++-
 source3/smbd/smb1_utils.c                          | 113 ++++++++++++++++++++
 .../smb/smb2_lock.h => source3/smbd/smb1_utils.h   |  23 +++--
 source3/smbd/smb2_setinfo.c                        |   6 +-
 source3/smbd/trans2.c                              |  21 +++-
 source3/wscript_build                              |   1 +
 21 files changed, 251 insertions(+), 149 deletions(-)
 create mode 100644 source3/smbd/smb1_utils.c
 copy libcli/smb/smb2_lock.h => source3/smbd/smb1_utils.h (63%)


Changeset truncated at 500 lines:

diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 9fc05c91f52..1b01e74df13 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -12,6 +12,35 @@ Samba 4.11 will be the next version of the Samba suite.
 UPGRADING
 =========
 
+SMB1 is disabled by default
+---------------------------
+
+The defaults of 'client min protocol' and 'server min protocol'
+have been changed to SMB2_02.
+
+This means clients without support for SMB2 or SMB3 are no longer
+able to connect to smbd (by default).
+
+It also means client tools like smbclient and other,
+as well as applications making use of libsmbclient are no longer
+able to connect to servers without SMB2 or SMB3 support (by default).
+
+It's still possible to allow SMB1 dialects, e.g. NT1, LANMAN2
+and LANMAN1 for client and server, as well as CORE and COREPLUS on
+the client.
+
+Note that most commandline tools e.g. smbclient, smbcacls and others
+also support the --option argument to overwrite smb.conf options,
+e.g. --option='client min protocol=NT1' might be useful.
+
+As Microsoft no longer installs SMB1 support in recent releases
+or uninstalls it after 30 days without usage, the Samba Team
+tries to get remove the SMB1 usage as much as possible.
+
+SMB1 is officially deprecated and might be removed step by step
+in the following years. If you have a strong requirement for SMB1
+(except for supporting old Linux Kernels), please file a bug
+at https://bugzilla.samba.org and let us know about the details.
 
 NEW FEATURES/CHANGES
 ====================
@@ -270,6 +299,9 @@ smb.conf changes
 
   allocation roundup size            Default changed/           0
                                      Deprecated
+  client min protocol                Changed default            SMB2_02
+  server min protocol                Changed default            SMB2_02
+  mangled names                      Changed default            illegal
   web port                           Removed
   fruit:zero_file_id                 Changed default            False
 
diff --git a/docs-xml/smbdotconf/filename/manglednames.xml b/docs-xml/smbdotconf/filename/manglednames.xml
index 972834e561a..d6a5cf0ac15 100644
--- a/docs-xml/smbdotconf/filename/manglednames.xml
+++ b/docs-xml/smbdotconf/filename/manglednames.xml
@@ -72,6 +72,6 @@
 	from Windows/DOS and will retain the same basename. Mangled names 
 	do not change between sessions.</para>
 </description>
-<value type="default">yes</value>
-<value type="example">illegal</value>
+<value type="default">illegal</value>
+<value type="example">no</value>
 </samba:parameter>
diff --git a/docs-xml/smbdotconf/protocol/clientminprotocol.xml b/docs-xml/smbdotconf/protocol/clientminprotocol.xml
index fb8f87e4016..1eb07adc0c2 100644
--- a/docs-xml/smbdotconf/protocol/clientminprotocol.xml
+++ b/docs-xml/smbdotconf/protocol/clientminprotocol.xml
@@ -9,13 +9,17 @@
 
 	<para>Normally this option should not be set as the automatic
 	negotiation phase in the SMB protocol takes care of choosing
-	the appropriate protocol.</para>
+	the appropriate protocol unless you connect to a legacy SMB1-only server.</para>
 
 	<para>See <related>client max protocol</related> for a full list
 	of available protocols.</para>
 
 	<para>IPC$ connections for DCERPC e.g. in winbindd, are handled by the
 	<smbconfoption name="client ipc min protocol"/> option.</para>
+
+	<para>Note that most command line tools support
+	--option='client min protocol=NT1', so it may not be required to
+	enable SMB1 protocols globally in smb.conf.</para>
 </description>
 
 <related>client max protocol</related>
@@ -23,6 +27,6 @@
 <related>client ipc min protocol</related>
 <related>client ipc max protocol</related>
 
-<value type="default">CORE</value>
+<value type="default">SMB2_02</value>
 <value type="example">NT1</value>
 </samba:parameter>
diff --git a/docs-xml/smbdotconf/protocol/serverminprotocol.xml b/docs-xml/smbdotconf/protocol/serverminprotocol.xml
index 4765f5b88e0..1079eb89bae 100644
--- a/docs-xml/smbdotconf/protocol/serverminprotocol.xml
+++ b/docs-xml/smbdotconf/protocol/serverminprotocol.xml
@@ -10,7 +10,7 @@
 
 	<para>Normally this option should not be set as the automatic negotiation
 	phase in the SMB protocol takes care of choosing the appropriate
-	protocol.</para>
+	protocol unless you have legacy clients which are SMB1 capable only.</para>
 
 	<para>See <related>server max protocol</related> for a full list
 	of available protocols.</para>
@@ -18,6 +18,6 @@
 
 <related>server max protocol</related>
 
-<value type="default">LANMAN1</value>
+<value type="default">SMB2_02</value>
 <value type="example">NT1</value>
 </samba:parameter>
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 26b61789b3f..883d4167bf4 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2711,9 +2711,9 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 	lpcfg_do_global_parameter(lp_ctx, "host msdfs", "true");
 
 	lpcfg_do_global_parameter(lp_ctx, "LargeReadwrite", "True");
-	lpcfg_do_global_parameter(lp_ctx, "server min protocol", "LANMAN1");
+	lpcfg_do_global_parameter(lp_ctx, "server min protocol", "SMB2_02");
 	lpcfg_do_global_parameter(lp_ctx, "server max protocol", "SMB3");
-	lpcfg_do_global_parameter(lp_ctx, "client min protocol", "CORE");
+	lpcfg_do_global_parameter(lp_ctx, "client min protocol", "SMB2_02");
 	lpcfg_do_global_parameter(lp_ctx, "client max protocol", "default");
 	lpcfg_do_global_parameter(lp_ctx, "client ipc min protocol", "default");
 	lpcfg_do_global_parameter(lp_ctx, "client ipc max protocol", "default");
@@ -2839,7 +2839,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 
 	lpcfg_do_global_parameter(lp_ctx, "winbind nested groups", "True");
 
-	lpcfg_do_global_parameter(lp_ctx, "mangled names", "True");
+	lpcfg_do_global_parameter(lp_ctx, "mangled names", "illegal");
 
 	lpcfg_do_global_parameter_var(lp_ctx, "smb2 max credits", "%u", DEFAULT_SMB2_MAX_CREDITS);
 
diff --git a/selftest/selftest.pl b/selftest/selftest.pl
index 9e3d81801a6..5d4fcf25734 100755
--- a/selftest/selftest.pl
+++ b/selftest/selftest.pl
@@ -646,6 +646,7 @@ sub write_clientconf($$$)
 	ldb:nosync = true
 	system:anonymous = true
 	client lanman auth = Yes
+	client min protocol = CORE
 	log level = 1
 	torture:basedir = $clientdir
 #We don't want to pass our self-tests if the PAC code is wrong
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index 6ce61a8b4ed..5c327cab543 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -1661,6 +1661,9 @@ sub provision($$$$$$$$$)
 	panic action = cd $self->{srcdir} && $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
 	smbd:suicide mode = yes
 
+	client min protocol = CORE
+	server min protocol = LANMAN1
+
 	workgroup = $domain
 
 	private dir = $privatedir
@@ -1721,6 +1724,7 @@ sub provision($$$$$$$$$)
 	dos filemode = yes
 	strict rename = yes
 	strict sync = yes
+	mangled names = yes
 	vfs objects = acl_xattr fake_acls xattr_tdb streams_depot time_audit full_audit
 
 	full_audit:syslog = no
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index a1676d6428f..02cdfc18bad 100755
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -796,6 +796,9 @@ sub provision_raw_step1($$)
 	lanman auth = Yes
 	ntlm auth = Yes
 	rndc command = true
+	client min protocol = CORE
+	server min protocol = LANMAN1
+	mangled names = yes
 	dns update command = $ctx->{samba_dnsupdate}
 	spn update command = $ctx->{python} $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_spnupdate -s $ctx->{smb_conf}
 	gpo update command = $ctx->{python} $ENV{SRCDIR_ABS}/source4/scripting/bin/samba-gpupdate -s $ctx->{smb_conf} --target=Computer
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index e173034165c..d87a882d14f 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -834,7 +834,7 @@ bool set_share_mode(struct share_mode_lock *lck,
 	return true;
 }
 
-struct share_mode_entry *find_share_mode_entry(
+static struct share_mode_entry *find_share_mode_entry(
 	struct share_mode_lock *lck, files_struct *fsp)
 {
 	struct share_mode_data *d = lck->data;
diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index 08d3f2c7ab8..3a086fa0516 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -162,8 +162,6 @@ bool set_share_mode(struct share_mode_lock *lck,
 		    uint16_t op_type,
 		    const struct GUID *client_guid,
 		    const struct smb2_lease_key *lease_key);
-struct share_mode_entry *find_share_mode_entry(struct share_mode_lock *lck,
-					       files_struct *fsp);
 void remove_stale_share_mode_entries(struct share_mode_data *d);
 bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp);
 bool mark_share_mode_disconnected(struct share_mode_lock *lck,
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index b5b8538457e..0be7f20e9af 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -49,7 +49,7 @@
  * streams are deferred to vfs_streams_xattr.
  *
  * The OS X client maps all NTFS illegal characters to the Unicode
- * private range. This module optionally stores the charcters using
+ * private range. This module optionally stores the characters using
  * their native ASCII encoding using vfs_catia. If you're not enabling
  * this feature, you can skip catia from vfs modules.
  *
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index c2e1f341c57..a8d5fdc5954 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -201,7 +201,7 @@ static const struct loadparm_service _sDefault =
 	.oplocks = true,
 	.kernel_oplocks = false,
 	.level2_oplocks = true,
-	.mangled_names = MANGLED_NAMES_YES,
+	.mangled_names = MANGLED_NAMES_ILLEGAL,
 	.wide_links = false,
 	.follow_symlinks = true,
 	.sync_always = false,
@@ -646,9 +646,9 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
 	Globals.max_log_size = 5000;
 	Globals.max_open_files = max_open_files();
 	Globals.server_max_protocol = PROTOCOL_SMB3_11;
-	Globals.server_min_protocol = PROTOCOL_LANMAN1;
+	Globals.server_min_protocol = PROTOCOL_SMB2_02;
 	Globals._client_max_protocol = PROTOCOL_DEFAULT;
-	Globals.client_min_protocol = PROTOCOL_CORE;
+	Globals.client_min_protocol = PROTOCOL_SMB2_02;
 	Globals._client_ipc_max_protocol = PROTOCOL_DEFAULT;
 	Globals._client_ipc_min_protocol = PROTOCOL_DEFAULT;
 	Globals._security = SEC_AUTO;
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index c15e8f67d90..2ee4a2c4fca 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -21,6 +21,7 @@
 */
 
 #include "includes.h"
+#include "smb1_utils.h"
 #include "system/filesys.h"
 #include "lib/util/server_id.h"
 #include "printing.h"
@@ -1644,10 +1645,6 @@ static NTSTATUS open_mode_check(connection_struct *conn,
 {
 	uint32_t i;
 
-	if(lck->data->num_share_modes == 0) {
-		return NT_STATUS_OK;
-	}
-
 	if (is_stat_open(access_mask)) {
 		/* Stat open that doesn't trigger oplock breaks or share mode
 		 * checks... ! JRA. */
@@ -2612,69 +2609,6 @@ static bool open_match_attributes(connection_struct *conn,
 	return True;
 }
 
-/****************************************************************************
- Special FCB or DOS processing in the case of a sharing violation.
- Try and find a duplicated file handle.
-****************************************************************************/
-
-static NTSTATUS fcb_or_dos_open(struct smb_request *req,
-				connection_struct *conn,
-				files_struct *fsp_to_dup_into,
-				const struct smb_filename *smb_fname,
-				struct file_id id,
-				uint16_t file_pid,
-				uint64_t vuid,
-				uint32_t access_mask,
-				uint32_t share_access,
-				uint32_t create_options)
-{
-	files_struct *fsp;
-
-	DEBUG(5,("fcb_or_dos_open: attempting old open semantics for "
-		 "file %s.\n", smb_fname_str_dbg(smb_fname)));
-
-	for(fsp = file_find_di_first(conn->sconn, id); fsp;
-	    fsp = file_find_di_next(fsp)) {
-
-		DEBUG(10,("fcb_or_dos_open: checking file %s, fd = %d, "
-			  "vuid = %llu, file_pid = %u, private_options = 0x%x "
-			  "access_mask = 0x%x\n", fsp_str_dbg(fsp),
-			  fsp->fh->fd, (unsigned long long)fsp->vuid,
-			  (unsigned int)fsp->file_pid,
-			  (unsigned int)fsp->fh->private_options,
-			  (unsigned int)fsp->access_mask ));
-
-		if (fsp != fsp_to_dup_into &&
-		    fsp->fh->fd != -1 &&
-		    fsp->vuid == vuid &&
-		    fsp->file_pid == file_pid &&
-		    (fsp->fh->private_options & (NTCREATEX_OPTIONS_PRIVATE_DENY_DOS |
-						 NTCREATEX_OPTIONS_PRIVATE_DENY_FCB)) &&
-		    (fsp->access_mask & FILE_WRITE_DATA) &&
-		    strequal(fsp->fsp_name->base_name, smb_fname->base_name) &&
-		    strequal(fsp->fsp_name->stream_name,
-			     smb_fname->stream_name)) {
-			DEBUG(10,("fcb_or_dos_open: file match\n"));
-			break;
-		}
-	}
-
-	if (!fsp) {
-		return NT_STATUS_NOT_FOUND;
-	}
-
-	/* quite an insane set of semantics ... */
-	if (is_executable(smb_fname->base_name) &&
-	    (fsp->fh->private_options & NTCREATEX_OPTIONS_PRIVATE_DENY_DOS)) {
-		DEBUG(10,("fcb_or_dos_open: file fail due to is_executable.\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	/* We need to duplicate this fsp. */
-	return dup_file_fsp(req, fsp, access_mask, share_access,
-			    create_options, fsp_to_dup_into);
-}
-
 static void schedule_defer_open(struct share_mode_lock *lck,
 				struct file_id id,
 				struct timeval request_time,
@@ -3551,41 +3485,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 
 		SMB_ASSERT(NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION));
 
-		/* Check if this can be done with the deny_dos and fcb
-		 * calls. */
-		if (private_flags &
-		    (NTCREATEX_OPTIONS_PRIVATE_DENY_DOS|
-		     NTCREATEX_OPTIONS_PRIVATE_DENY_FCB)) {
-			if (req == NULL) {
-				DEBUG(0, ("DOS open without an SMB "
-					  "request!\n"));
-				TALLOC_FREE(lck);
-				fd_close(fsp);
-				return NT_STATUS_INTERNAL_ERROR;
-			}
-
-			/* Use the client requested access mask here,
-			 * not the one we open with. */
-			status = fcb_or_dos_open(req,
-						 conn,
-						 fsp,
-						 smb_fname,
-						 id,
-						 req->smbpid,
-						 req->vuid,
-						 access_mask,
-						 share_access,
-						 create_options);
-
-			if (NT_STATUS_IS_OK(status)) {
-				TALLOC_FREE(lck);
-				if (pinfo) {
-					*pinfo = FILE_WAS_OPENED;
-				}
-				return NT_STATUS_OK;
-			}
-		}
-
 		/*
 		 * This next line is a subtlety we need for
 		 * MS-Access. If a file open will fail due to share
@@ -5532,11 +5431,12 @@ static NTSTATUS create_file_unixpath(connection_struct *conn,
 /*
  * Calculate the full path name given a relative fid.
  */
-NTSTATUS get_relative_fid_filename(connection_struct *conn,
-				   struct smb_request *req,
-				   uint16_t root_dir_fid,
-				   const struct smb_filename *smb_fname,
-				   struct smb_filename **smb_fname_out)
+static NTSTATUS get_relative_fid_filename(
+	connection_struct *conn,
+	struct smb_request *req,
+	uint16_t root_dir_fid,
+	const struct smb_filename *smb_fname,
+	struct smb_filename **smb_fname_out)
 {
 	files_struct *dir_fsp;
 	char *parent_fname = NULL;
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index e1329094d0f..fe88adc9806 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -351,7 +351,7 @@ bool fsp_lease_update(struct files_struct *fsp)
 	NTSTATUS status;
 
 	status = leases_db_get(client_guid,
-			       &fsp->lease->lease.lease_key,
+			       &lease->lease.lease_key,
 			       &fsp->file_id,
 			       &current_state,
 			       &breaking,
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 076702feca5..37eeb9f31ca 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -715,12 +715,6 @@ NTSTATUS create_file_default(connection_struct *conn,
 			     const struct smb2_create_blobs *in_context_blobs,
 			     struct smb2_create_blobs *out_context_blobs);
 
-NTSTATUS get_relative_fid_filename(connection_struct *conn,
-				   struct smb_request *req,
-				   uint16_t root_dir_fid,
-				   const struct smb_filename *smb_fname,
-				   struct smb_filename **smb_fname_out);
-
 /* The following definitions come from smbd/oplock.c  */
 
 uint32_t get_lease_type(const struct share_mode_data *d,
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 87729b23a83..2622681a2da 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -45,6 +45,7 @@
 #include "libcli/smb/smb_signing.h"
 #include "lib/util/sys_rw_data.h"
 #include "librpc/gen_ndr/open_files.h"
+#include "smb1_utils.h"
 
 /****************************************************************************
  Ensure we check the path in *exactly* the same way as W2K for a findfirst/findnext
@@ -2219,8 +2220,23 @@ void reply_open(struct smb_request *req)
 			/* We have re-scheduled this call. */
 			goto out;
 		}
-		reply_openerror(req, status);
-		goto out;
+
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION)) {
+			reply_openerror(req, status);
+			goto out;
+		}
+
+		fsp = fcb_or_dos_open(
+			req,
+			smb_fname,
+			access_mask,
+			share_mode,
+			create_options,
+			private_flags);
+		if (fsp == NULL) {
+			reply_openerror(req, status);
+			goto out;
+		}
 	}
 
 	/* Ensure we're pointing at the correct stat struct. */
@@ -2392,8 +2408,24 @@ void reply_open_and_X(struct smb_request *req)
 			/* We have re-scheduled this call. */
 			goto out;
 		}
-		reply_openerror(req, status);
-		goto out;
+
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION)) {
+			reply_openerror(req, status);
+			goto out;
+		}
+
+		fsp = fcb_or_dos_open(
+			req,
+			smb_fname,
+			access_mask,
+			share_mode,
+			create_options,
+			private_flags);
+		if (fsp == NULL) {
+			reply_openerror(req, status);
+			goto out;
+		}
+		smb_action = FILE_WAS_OPENED;
 	}
 
 	/* Setting the "size" field in vwv9 and vwv10 causes the file to be set to this size,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list