The branch, master has been updated via 625dcef vfs_fruit: add an option that allows disabling POSIX rename behaviour via 2a872e2 Correctly set cli->raw_status for libsmbclient in SMB2 code from 0f6d51f s3:libnet:libnet_join: add netbios aliases as SPNs
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 625dcef765adc75c34ee5955a08c6cb77b87f41b Author: Ralph Boehme <s...@samba.org> Date: Mon Apr 11 12:17:22 2016 +0200 vfs_fruit: add an option that allows disabling POSIX rename behaviour https://bugzilla.samba.org/show_bug.cgi?id=11721 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Thu May 5 00:04:50 CEST 2016 on sn-devel-144 commit 2a872e2b66f373b3c96b315b13c9f06a15522e13 Author: Robin McCorkell <ro...@mccorkell.me.uk> Date: Mon May 2 21:48:14 2016 +0100 Correctly set cli->raw_status for libsmbclient in SMB2 code The SMB2 file handling code wasn't correctly setting raw_status, which is used by libsmbclient to report file open errors etc. https://bugzilla.samba.org/show_bug.cgi?id=11276 Signed-off-by: Robin McCorkell <ro...@mccorkell.me.uk> Reviewed-by: Jeremy Allison <j...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/vfs_fruit.8.xml | 11 +++++++++++ source3/libsmb/cli_smb2_fnum.c | 16 +++++++++++++++- source3/modules/vfs_fruit.c | 6 +++++- 3 files changed, 31 insertions(+), 2 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 36d137e..2535f9e 100644 --- a/docs-xml/manpages/vfs_fruit.8.xml +++ b/docs-xml/manpages/vfs_fruit.8.xml @@ -234,6 +234,17 @@ </listitem> </varlistentry> + <varlistentry> + <term>fruit:posix_rename = yes | no</term> + <listitem> + <para>Whether to enable POSIX directory rename behaviour + for OS X clients. Without this, directories can't be + renamed if any client has any file inside it + (recursive!) open.</para> + <para>The default is <emphasis>yes</emphasis>.</para> + </listitem> + </varlistentry> + </variablelist> </refsect1> diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c index c9f4060..a17d918 100644 --- a/source3/libsmb/cli_smb2_fnum.c +++ b/source3/libsmb/cli_smb2_fnum.c @@ -262,6 +262,7 @@ NTSTATUS cli_smb2_create_fnum_recv(struct tevent_req *req, uint16_t *pfnum, NTSTATUS status; if (tevent_req_is_nterror(req, &status)) { + state->cli->raw_status = status; return status; } if (pfnum != NULL) { @@ -270,6 +271,7 @@ NTSTATUS cli_smb2_create_fnum_recv(struct tevent_req *req, uint16_t *pfnum, if (cr != NULL) { *cr = state->cr; } + state->cli->raw_status = NT_STATUS_OK; return NT_STATUS_OK; } @@ -390,7 +392,11 @@ static void cli_smb2_close_fnum_done(struct tevent_req *subreq) NTSTATUS cli_smb2_close_fnum_recv(struct tevent_req *req) { - return tevent_req_simple_recv_ntstatus(req); + struct cli_smb2_close_fnum_state *state = tevent_req_data( + req, struct cli_smb2_close_fnum_state); + NTSTATUS status = tevent_req_simple_recv_ntstatus(req); + state->cli->raw_status = status; + return status; } NTSTATUS cli_smb2_close_fnum(struct cli_state *cli, uint16_t fnum) @@ -2302,6 +2308,7 @@ NTSTATUS cli_smb2_read_recv(struct tevent_req *req, req, struct cli_smb2_read_state); if (tevent_req_is_nterror(req, &status)) { + state->cli->raw_status = status; return status; } /* @@ -2311,6 +2318,7 @@ NTSTATUS cli_smb2_read_recv(struct tevent_req *req, */ *received = (ssize_t)state->received; *rcvbuf = state->buf; + state->cli->raw_status = NT_STATUS_OK; return NT_STATUS_OK; } @@ -2409,6 +2417,7 @@ NTSTATUS cli_smb2_write_recv(struct tevent_req *req, NTSTATUS status; if (tevent_req_is_nterror(req, &status)) { + state->cli->raw_status = status; tevent_req_received(req); return status; } @@ -2416,6 +2425,7 @@ NTSTATUS cli_smb2_write_recv(struct tevent_req *req, if (pwritten != NULL) { *pwritten = (size_t)state->written; } + state->cli->raw_status = NT_STATUS_OK; tevent_req_received(req); return NT_STATUS_OK; } @@ -2573,11 +2583,13 @@ NTSTATUS cli_smb2_writeall_recv(struct tevent_req *req, NTSTATUS status; if (tevent_req_is_nterror(req, &status)) { + state->cli->raw_status = status; return status; } if (pwritten != NULL) { *pwritten = (size_t)state->written; } + state->cli->raw_status = NT_STATUS_OK; return NT_STATUS_OK; } @@ -2838,12 +2850,14 @@ NTSTATUS cli_smb2_splice_recv(struct tevent_req *req, off_t *written) NTSTATUS status; if (tevent_req_is_nterror(req, &status)) { + state->cli->raw_status = status; tevent_req_received(req); return status; } if (written != NULL) { *written = state->written; } + state->cli->raw_status = NT_STATUS_OK; tevent_req_received(req); return NT_STATUS_OK; } diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index bff9b0b..84c40bd 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -132,6 +132,7 @@ struct fruit_config_data { bool unix_info_enabled; bool copyfile_enabled; bool veto_appledouble; + bool posix_rename; /* * Additional options, all enabled by default, @@ -1355,6 +1356,9 @@ static int init_fruit_config(vfs_handle_struct *handle) config->use_copyfile = lp_parm_bool(-1, FRUIT_PARAM_TYPE_NAME, "copyfile", false); + config->posix_rename = lp_parm_bool( + SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, "posix_rename", true); + config->readdir_attr_rsize = lp_parm_bool( SNUM(handle->conn), "readdir_attr", "aapl_rsize", true); @@ -3451,7 +3455,7 @@ static NTSTATUS fruit_create_file(vfs_handle_struct *handle, fsp->aapl_copyfile_supported = true; } - if (fsp->is_directory) { + if (config->posix_rename && fsp->is_directory) { /* * Enable POSIX directory rename behaviour */ -- Samba Shared Repository