The branch, master has been updated via 1e0c79d s3: smbd: Restart reading the incoming SMB2 fd when the send queue is drained. via 07af777 selftest: remove "ea support" from vfs_fruit-related setups. via cbab5c6 vfs_fruit: drop "ea support" from the manpage via 5ef7bd3 testparm: remove check for "ea support" in fruit shares via 4bfd27b smbd: remove coupling between get_ea_names_from_file() and "ea support" via fb95985 smbd: get_ea_list_from_file_path() - remove a duplicate statement via abd8450 smbd: refuse_symlink() - do not fail if the file does not exist from f9aaddc s3:winbindd: fix endless forest trust scan
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 1e0c79ddb34be9a2b9fa92d35387c443c4a381ae Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 2 09:13:23 2017 -0800 s3: smbd: Restart reading the incoming SMB2 fd when the send queue is drained. When the send queue grows greater than xconn->smb2.credits.max/16, smbd_smb2_request_next_incoming() doesn't allocate a new request in state->req. After smbd_smb2_io_handler() is called, it marks the fd not readable as state->req == NULL, and never marks it readable again. Fix by calling smbd_smb2_request_next_incoming() to restart reads inside smbd_smb2_flush_send_queue() which drains the send queue. Reported by <chen.ye...@h3c.com> BUG: https://bugzilla.samba.org/show_bug.cgi?id=12608 Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> Autobuild-User(master): Ralph Böhme <s...@samba.org> Autobuild-Date(master): Fri Mar 3 02:23:20 CET 2017 on sn-devel-144 commit 07af7774f3bd3574be0632284a6ea220b5fb3c76 Author: Uri Simchoni <u...@samba.org> Date: Thu Mar 2 13:02:25 2017 +0200 selftest: remove "ea support" from vfs_fruit-related setups. Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit cbab5c64966cafbfdc6dfe539b3d1c7ba21a4aae Author: Uri Simchoni <u...@samba.org> Date: Thu Mar 2 12:59:16 2017 +0200 vfs_fruit: drop "ea support" from the manpage Now that ea support is not required, drop that comment from the man page. Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 5ef7bd3b5b078702a9ef8ad92768c2d11b3214f5 Author: Uri Simchoni <u...@samba.org> Date: Thu Mar 2 12:56:25 2017 +0200 testparm: remove check for "ea support" in fruit shares Now that ea support is not required for vfs_fruit, drop the check that it's enabled in shares using vfs_fruit. Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 4bfd27b077f0932c82cfe702bd4ba6628f75a526 Author: Uri Simchoni <u...@samba.org> Date: Thu Mar 2 08:39:56 2017 +0200 smbd: remove coupling between get_ea_names_from_file() and "ea support" The "ea support" configuration variable determines whether smbd should attempt to manipulate extended attributes via SMB protocol. It does not pertain to the underlying storage and its support for extended attributes. get_ea_names_from_file() is being used also by vfs_streams_xattr - a module which has nothing to do with client-visible extended attributes. As such, vfs_streams_xattr should be able to operate irrespective of the value of "ea support". This patch moves the check for ea support to the callers. Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit fb95985a0325c660dd964b4132e292b9230ee097 Author: Uri Simchoni <u...@samba.org> Date: Thu Mar 2 08:49:54 2017 +0200 smbd: get_ea_list_from_file_path() - remove a duplicate statement Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit abd845082e4d377231129339d713e1b62a88a8a7 Author: Uri Simchoni <u...@samba.org> Date: Thu Mar 2 08:46:44 2017 +0200 smbd: refuse_symlink() - do not fail if the file does not exist If the file does not exist, it is not a symlink. Current callers use this function to see if extended attributes can be set / fetched. Allow them to try and leave the error code at the discretion of the VFS. Signed-off-by: Uri Simchoni <u...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/vfs_fruit.8.xml | 3 --- selftest/target/Samba3.pm | 5 ----- source3/smbd/nttrans.c | 30 ++++++++++++++++++------------ source3/smbd/smb2_server.c | 14 +++++++++++++- source3/smbd/trans2.c | 14 ++++++++------ source3/utils/testparm.c | 6 ------ 6 files changed, 39 insertions(+), 33 deletions(-) Changeset truncated at 500 lines: diff --git a/docs-xml/manpages/vfs_fruit.8.xml b/docs-xml/manpages/vfs_fruit.8.xml index d209a22..fbe30d3 100644 --- a/docs-xml/manpages/vfs_fruit.8.xml +++ b/docs-xml/manpages/vfs_fruit.8.xml @@ -45,8 +45,6 @@ <command>vfs_streams_xattr</command> which must be loaded together with <command>vfs_fruit</command>.</para> - <para>vfs_fruit requires "ea support = yes".</para> - <para>Be careful when mixing shares with and without vfs_fruit. OS X clients negotiate SMB2 AAPL protocol extensions on the first tcon, so mixing shares with and @@ -273,7 +271,6 @@ <programlisting> <smbconfsection name="[share]"/> - <smbconfoption name="ea support">yes</smbconfoption> <smbconfoption name="vfs objects">catia fruit streams_xattr</smbconfoption> <smbconfoption name="fruit:resource">file</smbconfoption> <smbconfoption name="fruit:metadata">netatalk</smbconfoption> diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index aa50f07..775dc16 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -1654,7 +1654,6 @@ sub provision($$$$$$$$) [vfs_fruit] path = $shrdir vfs objects = catia fruit streams_xattr acl_xattr - ea support = yes fruit:resource = file fruit:metadata = netatalk fruit:locking = netatalk @@ -1663,26 +1662,22 @@ sub provision($$$$$$$$) [vfs_fruit_metadata_stream] path = $shrdir vfs objects = fruit streams_xattr acl_xattr - ea support = yes fruit:resource = file fruit:metadata = stream [vfs_fruit_stream_depot] path = $shrdir vfs objects = fruit streams_depot acl_xattr - ea support = yes fruit:resource = stream fruit:metadata = stream [vfs_wo_fruit] path = $shrdir vfs objects = streams_xattr acl_xattr - ea support = yes [vfs_wo_fruit_stream_depot] path = $shrdir vfs objects = streams_depot acl_xattr - ea support = yes [badname-tmp] path = $badnames_shrdir diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 5f122a9..a5fc625 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -688,16 +688,19 @@ void reply_ntcreate_and_X(struct smb_request *req) p += 8; if (flags & EXTENDED_RESPONSE_REQUIRED) { uint16_t file_status = (NO_EAS|NO_SUBSTREAMS|NO_REPARSETAG); - size_t num_names = 0; unsigned int num_streams = 0; struct stream_struct *streams = NULL; - /* Do we have any EA's ? */ - status = get_ea_names_from_file(ctx, conn, fsp, - smb_fname, NULL, &num_names); - if (NT_STATUS_IS_OK(status) && num_names) { - file_status &= ~NO_EAS; + if (lp_ea_support(SNUM(conn))) { + size_t num_names = 0; + /* Do we have any EA's ? */ + status = get_ea_names_from_file( + ctx, conn, fsp, smb_fname, NULL, &num_names); + if (NT_STATUS_IS_OK(status) && num_names) { + file_status &= ~NO_EAS; + } } + status = vfs_streaminfo(conn, NULL, smb_fname, ctx, &num_streams, &streams); /* There is always one stream, ::$DATA. */ @@ -1334,16 +1337,19 @@ static void call_nt_transact_create(connection_struct *conn, p += 8; if (flags & EXTENDED_RESPONSE_REQUIRED) { uint16_t file_status = (NO_EAS|NO_SUBSTREAMS|NO_REPARSETAG); - size_t num_names = 0; unsigned int num_streams = 0; struct stream_struct *streams = NULL; - /* Do we have any EA's ? */ - status = get_ea_names_from_file(ctx, conn, fsp, - smb_fname, NULL, &num_names); - if (NT_STATUS_IS_OK(status) && num_names) { - file_status &= ~NO_EAS; + if (lp_ea_support(SNUM(conn))) { + size_t num_names = 0; + /* Do we have any EA's ? */ + status = get_ea_names_from_file( + ctx, conn, fsp, smb_fname, NULL, &num_names); + if (NT_STATUS_IS_OK(status) && num_names) { + file_status &= ~NO_EAS; + } } + status = vfs_streaminfo(conn, NULL, smb_fname, ctx, &num_streams, &streams); /* There is always one stream, ::$DATA. */ diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c index b0a4afc..acaa012 100644 --- a/source3/smbd/smb2_server.c +++ b/source3/smbd/smb2_server.c @@ -3566,6 +3566,7 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbXsrv_connection *xconn) int ret; int err; bool retry; + NTSTATUS status; if (xconn->smb2.send_queue == NULL) { TEVENT_FD_NOT_WRITEABLE(xconn->transport.fde); @@ -3577,11 +3578,12 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbXsrv_connection *xconn) bool ok; if (e->sendfile_header != NULL) { - NTSTATUS status = NT_STATUS_INTERNAL_ERROR; size_t size = 0; size_t i = 0; uint8_t *buf; + status = NT_STATUS_INTERNAL_ERROR; + for (i=0; i < e->count; i++) { size += e->vector[i].iov_len; } @@ -3653,6 +3655,16 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbXsrv_connection *xconn) talloc_free(e->mem_ctx); } + /* + * Restart reads if we were blocked on + * draining the send queue. + */ + + status = smbd_smb2_request_next_incoming(xconn); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + return NT_STATUS_OK; } diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index f58aacf..b6bf93f 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -75,8 +75,11 @@ static NTSTATUS refuse_symlink(connection_struct *conn, int ret = vfs_stat_smb_basename(conn, smb_fname, &sbuf); - if (ret == -1) { + if (ret == -1 && errno != ENOENT) { return map_nt_error_from_unix(errno); + } else if (ret == -1) { + /* it's not a symlink.. */ + return NT_STATUS_OK; } pst = &sbuf; } @@ -259,10 +262,6 @@ NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx, } *pnum_names = 0; - if (!lp_ea_support(SNUM(conn))) { - return NT_STATUS_OK; - } - status = refuse_symlink(conn, fsp, smb_fname); if (!NT_STATUS_IS_OK(status)) { /* @@ -394,6 +393,10 @@ static NTSTATUS get_ea_list_from_file_path(TALLOC_CTX *mem_ctx, *pea_total_len = 0; *ea_list = NULL; + if (!lp_ea_support(SNUM(conn))) { + return NT_STATUS_OK; + } + if (fsp) { posix_pathnames = (fsp->fsp_name->flags & SMB_FILENAME_POSIX_PATH); @@ -413,7 +416,6 @@ static NTSTATUS get_ea_list_from_file_path(TALLOC_CTX *mem_ctx, } if (num_names == 0) { - *ea_list = NULL; return NT_STATUS_OK; } diff --git a/source3/utils/testparm.c b/source3/utils/testparm.c index 3e80c39..7883bca 100644 --- a/source3/utils/testparm.c +++ b/source3/utils/testparm.c @@ -606,12 +606,6 @@ static void do_per_share_checks(int s) vfs_objects = lp_vfs_objects(s); if (vfs_objects && str_list_check(vfs_objects, "fruit")) { uses_fruit = true; - if (!lp_ea_support(s) && !lp_ea_support(-1)) { - fprintf(stderr, - "ERROR: Service \"%s\" uses vfs_fruit, but " - "that requires \"ea support = yes\".\n\n", - lp_servicename(talloc_tos(), s)); - } } else { doesnt_use_fruit = true; } -- Samba Shared Repository