diff options
author | Uri Simchoni <uri@samba.org> | 2017-03-21 23:02:48 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2017-03-28 17:45:19 +0200 |
commit | a67802fad505738a10f3c73392db9e6235f13b62 (patch) | |
tree | 223dce704668c3857d7bdb1f9933f3c1ad35ce99 /source3 | |
parent | b224b2033df9543e1b580885956a65161bd50db5 (diff) | |
download | samba-a67802fad505738a10f3c73392db9e6235f13b62.tar.gz |
s3: libsmb: add replace support to SMB2 rename
SMB2 rename operation supports replacing the
destination file if it exists.
Signed-off-by: Uri Simchoni <uri@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libsmb/cli_smb2_fnum.c | 9 | ||||
-rw-r--r-- | source3/libsmb/cli_smb2_fnum.h | 5 | ||||
-rw-r--r-- | source3/libsmb/clifile.c | 4 |
3 files changed, 11 insertions, 7 deletions
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c index 848e077162c..351fccfb645 100644 --- a/source3/libsmb/cli_smb2_fnum.c +++ b/source3/libsmb/cli_smb2_fnum.c @@ -2010,8 +2010,9 @@ NTSTATUS cli_smb2_set_security_descriptor(struct cli_state *cli, ***************************************************************/ NTSTATUS cli_smb2_rename(struct cli_state *cli, - const char *fname_src, - const char *fname_dst) + const char *fname_src, + const char *fname_dst, + bool replace) { NTSTATUS status; DATA_BLOB inbuf = data_blob_null; @@ -2091,6 +2092,10 @@ NTSTATUS cli_smb2_rename(struct cli_state *cli, goto fail; } + if (replace) { + SCVAL(inbuf.data, 0, 1); + } + SIVAL(inbuf.data, 16, converted_size_bytes); memcpy(inbuf.data + 20, converted_str, converted_size_bytes); diff --git a/source3/libsmb/cli_smb2_fnum.h b/source3/libsmb/cli_smb2_fnum.h index 12c42a270ea..43e04713da1 100644 --- a/source3/libsmb/cli_smb2_fnum.h +++ b/source3/libsmb/cli_smb2_fnum.h @@ -132,8 +132,9 @@ NTSTATUS cli_smb2_set_security_descriptor(struct cli_state *cli, uint32_t sec_info, const struct security_descriptor *sd); NTSTATUS cli_smb2_rename(struct cli_state *cli, - const char *fname_src, - const char *fname_dst); + const char *fname_src, + const char *fname_dst, + bool replace); NTSTATUS cli_smb2_set_ea_fnum(struct cli_state *cli, uint16_t fnum, const char *ea_name, diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index 6b32bf1ad4b..e6bc40cf5cb 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -1082,9 +1082,7 @@ NTSTATUS cli_rename(struct cli_state *cli, const char *fname_src, const char *fn NTSTATUS status = NT_STATUS_OK; if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) { - return cli_smb2_rename(cli, - fname_src, - fname_dst); + return cli_smb2_rename(cli, fname_src, fname_dst, false); } frame = talloc_stackframe(); |