The branch, master has been updated
via 8831eec914a docs-xml: enable SMB3 Unix Extensions by default
via a2f127db4a3 s3/param: remove widelinks check and warning for SMB3
UNIX Extensions
via e8b49a59ee4 s3:locking: make sure brl_conflict_posix() is only
called with 2 POSIX_LOCKS
via 0a1e3638154 s3:locking: assert POSIX_LOCK in brl_[un]lock_posix()
via c779bb7c858 s3:locking: init_strict_lock_struct() already calls
lp_posix_cifsu_locktype()
via 2bdf72a8227 smbd: fix lock_flav initialization in
smbd_smb2_lock_send()
via ce8a65054d5 smbd: fix check for POSIX opens in
have_file_open_below()
via 6e662bf5781 smbd: fix checks for POSIX opens in file_find_subpath()
from a96f0542c83 vfs_ceph_new: Do not resolve by inode number
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 8831eec914a37f5b60f86020656ddbd9d1c951e4
Author: Ralph Boehme <[email protected]>
Date: Wed Mar 5 18:02:39 2025 +0100
docs-xml: enable SMB3 Unix Extensions by default
Signed-off-by: Ralph Boehme <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
Reviewed-by: Stefan Metzmacher <[email protected]>
Autobuild-User(master): Ralph Böhme <[email protected]>
Autobuild-Date(master): Fri Mar 7 20:06:31 UTC 2025 on atb-devel-224
commit a2f127db4a3184f68844c75bcaf8bd1927bfb17c
Author: Ralph Boehme <[email protected]>
Date: Wed Mar 5 18:00:33 2025 +0100
s3/param: remove widelinks check and warning for SMB3 UNIX Extensions
SMB3 POSIX clients won't be able to create real symlinks, so we can relax
these
checks.
Signed-off-by: Ralph Boehme <[email protected]>
Reviewed-by: Volker Lendecke <[email protected]>
commit e8b49a59ee424b77942d0e68eb97f3e267264a09
Author: Ralph Boehme <[email protected]>
Date: Fri Mar 7 14:51:26 2025 +0100
s3:locking: make sure brl_conflict_posix() is only called with 2 POSIX_LOCKS
Otherwise we hit the assert if the caller is a windows lock
and the conflicting one a posix lock.
Or in the non-developer build we don't enforce the windows locking
rules.
Pair-Programmed-With: Stefan Metzmacher <[email protected]>
Signed-off-by: Ralph Boehme <[email protected]>
Signed-off-by: Stefan Metzmacher <[email protected]>
commit 0a1e3638154f955b9383517af2ca4192bf81046f
Author: Ralph Boehme <[email protected]>
Date: Fri Mar 7 14:47:49 2025 +0100
s3:locking: assert POSIX_LOCK in brl_[un]lock_posix()
This makes it clearer and prevents possible problems in future.
Pair-Programmed-With: Stefan Metzmacher <[email protected]>
Signed-off-by: Ralph Boehme <[email protected]>
Signed-off-by: Stefan Metzmacher <[email protected]>
commit c779bb7c8584ba9ba5961ecfeb6ba2e5089c6312
Author: Stefan Metzmacher <[email protected]>
Date: Fri Mar 7 13:50:54 2025 +0100
s3:locking: init_strict_lock_struct() already calls
lp_posix_cifsu_locktype()
There is no need to do it in the caller and pass an unused argument.
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Ralph Boehme <[email protected]>
commit 2bdf72a822758e50655542a844a59861bdd779ff
Author: Ralph Boehme <[email protected]>
Date: Fri Mar 7 14:14:32 2025 +0100
smbd: fix lock_flav initialization in smbd_smb2_lock_send()
Right above we did
if (posix_handle) {
locks[i].lock_flav = POSIX_LOCK;
} else {
locks[i].lock_flav = WINDOWS_LOCK;
}
which came in with commit f68fffa85d1de992384a210bb0b9261cda3fb168,
apparently forgetting to remove the previously existing initialization
locks[i].lock_flav=WINDOWS_LOCK.
Pair-Programmed-With: Stefan Metzmacher <[email protected]>
Signed-off-by: Ralph Boehme <[email protected]>
Signed-off-by: Stefan Metzmacher <[email protected]>
commit ce8a65054d59c0eca7317a6e34b20b138e17393b
Author: Ralph Boehme <[email protected]>
Date: Fri Mar 7 12:57:24 2025 +0100
smbd: fix check for POSIX opens in have_file_open_below()
Pair-Programmed-With: Stefan Metzmacher <[email protected]>
Signed-off-by: Ralph Boehme <[email protected]>
Signed-off-by: Stefan Metzmacher <[email protected]>
commit 6e662bf5781728e048c560eafe00c4bb6f0db316
Author: Ralph Boehme <[email protected]>
Date: Fri Mar 7 12:57:07 2025 +0100
smbd: fix checks for POSIX opens in file_find_subpath()
Pair-Programmed-With: Stefan Metzmacher <[email protected]>
Signed-off-by: Ralph Boehme <[email protected]>
Signed-off-by: Stefan Metzmacher <[email protected]>
-----------------------------------------------------------------------
Summary of changes:
docs-xml/smbdotconf/protocol/smb3unixextensions.xml | 4 ++--
lib/param/loadparm.c | 2 ++
source3/locking/brlock.c | 12 +++++++-----
source3/locking/locking.c | 1 -
source3/locking/proto.h | 1 -
source3/modules/vfs_default.c | 4 ----
source3/param/loadparm.c | 9 ++-------
source3/smbd/dir.c | 7 +++++--
source3/smbd/files.c | 4 +++-
source3/smbd/smb1_aio.c | 2 --
source3/smbd/smb1_reply.c | 8 --------
source3/smbd/smb2_aio.c | 2 --
source3/smbd/smb2_ioctl_filesys.c | 1 -
source3/smbd/smb2_lock.c | 1 -
source3/smbd/smb2_read.c | 1 -
source3/smbd/smb2_write.c | 1 -
16 files changed, 21 insertions(+), 39 deletions(-)
Changeset truncated at 500 lines:
diff --git a/docs-xml/smbdotconf/protocol/smb3unixextensions.xml
b/docs-xml/smbdotconf/protocol/smb3unixextensions.xml
index 4c0319976a7..269cf52962c 100644
--- a/docs-xml/smbdotconf/protocol/smb3unixextensions.xml
+++ b/docs-xml/smbdotconf/protocol/smb3unixextensions.xml
@@ -3,7 +3,7 @@
type="boolean"
xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
<description>
- <para>Experimental SMB 3.1.1 Unix Extensions.</para>
+ <para>Support for SMB 3.1.1 Unix Extensions.</para>
</description>
- <value type="default">no</value>
+ <value type="default">yes</value>
</samba:parameter>
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index ae397330598..30a45511cb8 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -3080,6 +3080,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX
*mem_ctx)
lpcfg_do_global_parameter(lp_ctx, "smb3 directory leases", "Auto");
+ lpcfg_do_global_parameter(lp_ctx, "smb3 unix extensions", "yes");
+
lpcfg_do_global_parameter(lp_ctx, "server multi channel support",
"yes");
lpcfg_do_global_parameter(lp_ctx, "kerberos encryption types", "all");
diff --git a/source3/locking/brlock.c b/source3/locking/brlock.c
index b0295174954..0c5dab19389 100644
--- a/source3/locking/brlock.c
+++ b/source3/locking/brlock.c
@@ -246,10 +246,8 @@ static bool brl_conflict(const struct lock_struct *lck1,
static bool brl_conflict_posix(const struct lock_struct *lck1,
const struct lock_struct *lck2)
{
-#if defined(DEVELOPER)
SMB_ASSERT(lck1->lock_flav == POSIX_LOCK);
SMB_ASSERT(lck2->lock_flav == POSIX_LOCK);
-#endif
/* Read locks never conflict. */
if (lck1->lock_type == READ_LOCK && lck2->lock_type == READ_LOCK) {
@@ -757,6 +755,8 @@ static NTSTATUS brl_lock_posix(struct byte_range_lock
*br_lck,
bool break_oplocks = false;
NTSTATUS status;
+ SMB_ASSERT(plock->lock_flav == POSIX_LOCK);
+
/* No zero-zero locks for POSIX. */
if (plock->start == 0 && plock->size == 0) {
return NT_STATUS_INVALID_PARAMETER;
@@ -1024,6 +1024,8 @@ static bool brl_unlock_posix(struct byte_range_lock
*br_lck,
struct lock_struct *locks = br_lck->lock_data;
bool overlap_found = False;
+ SMB_ASSERT(plock->lock_flav == POSIX_LOCK);
+
/* No zero-zero locks for POSIX. */
if (plock->start == 0 && plock->size == 0) {
return False;
@@ -1272,10 +1274,10 @@ NTSTATUS brl_lockquery(struct byte_range_lock *br_lck,
const struct lock_struct *exlock = &locks[i];
bool conflict = False;
- if (exlock->lock_flav == WINDOWS_LOCK) {
- conflict = brl_conflict(exlock, &lock);
- } else {
+ if (lock_flav == POSIX_LOCK && exlock->lock_flav == POSIX_LOCK)
{
conflict = brl_conflict_posix(exlock, &lock);
+ } else {
+ conflict = brl_conflict(exlock, &lock);
}
if (conflict) {
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index dd963e4fbaa..fefbf88f20a 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -91,7 +91,6 @@ void init_strict_lock_struct(files_struct *fsp,
br_off start,
br_off size,
enum brl_type lock_type,
- enum brl_flavour lock_flav,
struct lock_struct *plock)
{
SMB_ASSERT(lock_type == READ_LOCK || lock_type == WRITE_LOCK);
diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index 8e03ad8cf5a..adfe5fede8f 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -98,7 +98,6 @@ void init_strict_lock_struct(files_struct *fsp,
br_off start,
br_off size,
enum brl_type lock_type,
- enum brl_flavour lock_flav,
struct lock_struct *plock);
bool strict_lock_check_default(files_struct *fsp,
struct lock_struct *plock);
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 5d16cbb5bf3..d0cdffa790a 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -2337,7 +2337,6 @@ static NTSTATUS vfswrap_offload_fast_copy(struct
tevent_req *req, int fsctl)
state->src_off,
state->remaining,
READ_LOCK,
- lp_posix_cifsu_locktype(state->src_fsp),
&lck);
ok = SMB_VFS_STRICT_LOCK_CHECK(state->src_fsp->conn,
@@ -2357,7 +2356,6 @@ static NTSTATUS vfswrap_offload_fast_copy(struct
tevent_req *req, int fsctl)
state->dst_off,
state->remaining,
WRITE_LOCK,
- lp_posix_cifsu_locktype(state->dst_fsp),
&lck);
ok = SMB_VFS_STRICT_LOCK_CHECK(state->dst_fsp->conn,
@@ -2453,7 +2451,6 @@ static NTSTATUS vfswrap_offload_write_loop(struct
tevent_req *req)
state->src_off,
state->next_io_size,
READ_LOCK,
- lp_posix_cifsu_locktype(state->src_fsp),
&read_lck);
ok = SMB_VFS_STRICT_LOCK_CHECK(state->src_fsp->conn,
@@ -2517,7 +2514,6 @@ static void vfswrap_offload_write_read_done(struct
tevent_req *subreq)
state->dst_off,
state->next_io_size,
WRITE_LOCK,
- lp_posix_cifsu_locktype(state->dst_fsp),
&write_lck);
ok = SMB_VFS_STRICT_LOCK_CHECK(state->dst_fsp->conn,
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index e04288d2304..9e528e395f1 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -259,6 +259,7 @@ static const struct loadparm_service _sDefault =
.spotlight_backend = SPOTLIGHT_BACKEND_NOINDEX,
.honor_change_notify_privilege = false,
.volume_serial_number = -1,
+ .smb3_unix_extensions = true,
.dummy = ""
};
@@ -4740,12 +4741,6 @@ void widelinks_warning(int snum)
"These parameters are incompatible. "
"Wide links will be disabled for this share.\n",
lp_const_servicename(snum));
- } else if (lp_smb3_unix_extensions(snum)) {
- DBG_ERR("Share '%s' has wide links and SMB3 Unix "
- "extensions enabled. "
- "These parameters are incompatible. "
- "Wide links will be disabled for this share.\n",
- lp_const_servicename(snum));
}
}
}
@@ -4753,7 +4748,7 @@ void widelinks_warning(int snum)
bool lp_widelinks(int snum)
{
/* wide links is always incompatible with unix extensions */
- if (lp_smb1_unix_extensions() || lp_smb3_unix_extensions(snum)) {
+ if (lp_smb1_unix_extensions()) {
/*
* Unless we have "allow insecure widelinks"
* turned on.
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index afc9c74dfdd..f934ae74019 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -1293,6 +1293,7 @@ void RewindDir(struct smb_Dir *dir_hnd)
}
struct have_file_open_below_state {
+ bool dirfsp_is_posix;
bool found_one;
};
@@ -1307,7 +1308,9 @@ static int have_file_open_below_fn(const struct
share_mode_data *data,
return 0;
}
- if (e->flags & SHARE_MODE_FLAG_POSIX_OPEN) {
+ if (state->dirfsp_is_posix &&
+ e->flags & SHARE_MODE_FLAG_POSIX_OPEN)
+ {
/* Ignore POSIX opens */
return 0;
}
@@ -1324,7 +1327,7 @@ static int have_file_open_below_fn(const struct
share_mode_data *data,
bool have_file_open_below(struct files_struct *fsp)
{
struct have_file_open_below_state state = {
- .found_one = false,
+ .dirfsp_is_posix = fsp->fsp_flags.posix_open,
};
int ret;
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 01af0162845..ea8542b6ba4 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -2203,7 +2203,9 @@ bool file_find_subpath(files_struct *dir_fsp)
if (fsp == dir_fsp) {
continue;
}
- if (fsp->fsp_flags.posix_open) {
+ if (dir_fsp->fsp_flags.posix_open &&
+ fsp->fsp_flags.posix_open)
+ {
continue;
}
diff --git a/source3/smbd/smb1_aio.c b/source3/smbd/smb1_aio.c
index d54a3727312..a242c4112aa 100644
--- a/source3/smbd/smb1_aio.c
+++ b/source3/smbd/smb1_aio.c
@@ -86,7 +86,6 @@ NTSTATUS schedule_aio_read_and_X(connection_struct *conn,
(uint64_t)startpos,
(uint64_t)smb_maxcnt,
READ_LOCK,
- lp_posix_cifsu_locktype(fsp),
&aio_ex->lock);
/* Take the lock until the AIO completes. */
@@ -250,7 +249,6 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
(uint64_t)startpos,
(uint64_t)numtowrite,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&aio_ex->lock);
/* Take the lock until the AIO completes. */
diff --git a/source3/smbd/smb1_reply.c b/source3/smbd/smb1_reply.c
index d3f08a53706..bcfdf96c633 100644
--- a/source3/smbd/smb1_reply.c
+++ b/source3/smbd/smb1_reply.c
@@ -3098,7 +3098,6 @@ void reply_readbraw(struct smb_request *req)
(uint64_t)startpos,
(uint64_t)maxcount,
READ_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -3368,7 +3367,6 @@ Returning short read of maximum allowed for compatibility
with Windows 2000.\n",
(uint64_t)startpos,
(uint64_t)numtoread,
READ_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -3449,7 +3447,6 @@ static void send_file_readX(connection_struct *conn,
struct smb_request *req,
(uint64_t)startpos,
(uint64_t)smb_maxcnt,
READ_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -3975,7 +3972,6 @@ void reply_writebraw(struct smb_request *req)
(uint64_t)startpos,
(uint64_t)tcount,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -4195,7 +4191,6 @@ void reply_writeunlock(struct smb_request *req)
(uint64_t)startpos,
(uint64_t)numtowrite,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -4331,7 +4326,6 @@ void reply_write(struct smb_request *req)
(uint64_t)startpos,
(uint64_t)numtowrite,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -4632,7 +4626,6 @@ void reply_write_and_X(struct smb_request *req)
(uint64_t)startpos,
(uint64_t)numtowrite,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
@@ -5341,7 +5334,6 @@ void reply_writeclose(struct smb_request *req)
(uint64_t)startpos,
(uint64_t)numtowrite,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
diff --git a/source3/smbd/smb2_aio.c b/source3/smbd/smb2_aio.c
index fc97bdc075a..85e17ab551b 100644
--- a/source3/smbd/smb2_aio.c
+++ b/source3/smbd/smb2_aio.c
@@ -368,7 +368,6 @@ NTSTATUS schedule_smb2_aio_read(connection_struct *conn,
(uint64_t)startpos,
(uint64_t)smb_maxcnt,
READ_LOCK,
- lp_posix_cifsu_locktype(fsp),
&aio_ex->lock);
/* Take the lock until the AIO completes. */
@@ -517,7 +516,6 @@ NTSTATUS schedule_aio_smb2_write(connection_struct *conn,
in_offset,
(uint64_t)in_data.length,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&aio_ex->lock);
/* Take the lock until the AIO completes. */
diff --git a/source3/smbd/smb2_ioctl_filesys.c
b/source3/smbd/smb2_ioctl_filesys.c
index 1a8d1c2affa..1fa0eea632a 100644
--- a/source3/smbd/smb2_ioctl_filesys.c
+++ b/source3/smbd/smb2_ioctl_filesys.c
@@ -460,7 +460,6 @@ static NTSTATUS fsctl_zero_data(TALLOC_CTX *mem_ctx,
zdata_info.file_off,
len,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lck);
if (!SMB_VFS_STRICT_LOCK_CHECK(fsp->conn, fsp, &lck)) {
diff --git a/source3/smbd/smb2_lock.c b/source3/smbd/smb2_lock.c
index b90fbb1dfcb..d39066c906f 100644
--- a/source3/smbd/smb2_lock.c
+++ b/source3/smbd/smb2_lock.c
@@ -460,7 +460,6 @@ static struct tevent_req *smbd_smb2_lock_send(TALLOC_CTX
*mem_ctx,
} else {
locks[i].brltype = UNLOCK_LOCK;
}
- locks[i].lock_flav = WINDOWS_LOCK;
DBG_DEBUG("index %"PRIu16" offset=%"PRIu64", count=%"PRIu64", "
"smblctx = %"PRIu64" type %d\n",
diff --git a/source3/smbd/smb2_read.c b/source3/smbd/smb2_read.c
index fc207850c91..3affa8a3317 100644
--- a/source3/smbd/smb2_read.c
+++ b/source3/smbd/smb2_read.c
@@ -579,7 +579,6 @@ static struct tevent_req *smbd_smb2_read_send(TALLOC_CTX
*mem_ctx,
in_offset,
in_length,
READ_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
diff --git a/source3/smbd/smb2_write.c b/source3/smbd/smb2_write.c
index 87f6640a085..2c26f838571 100644
--- a/source3/smbd/smb2_write.c
+++ b/source3/smbd/smb2_write.c
@@ -387,7 +387,6 @@ static struct tevent_req *smbd_smb2_write_send(TALLOC_CTX
*mem_ctx,
in_offset,
in_data.length,
WRITE_LOCK,
- lp_posix_cifsu_locktype(fsp),
&lock);
if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
--
Samba Shared Repository