From: Volker Lendecke Date: Mon, 25 May 2020 16:23:31 +0000 (+0200) Subject: libsmb: Use async cli_smb2_mkdir in async cli_mkdir X-Git-Tag: ldb-2.2.0~260 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93675b4f96e6cf40a159dde975aa1d288a035706;p=thirdparty%2Fsamba.git libsmb: Use async cli_smb2_mkdir in async cli_mkdir No need to call the sync wrapper in cli_mkdir() Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index ac546c21f8b..314893b4cf6 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -1982,6 +1982,7 @@ NTSTATUS cli_unlink(struct cli_state *cli, const char *fname, uint16_t mayhave_a ****************************************************************************/ static void cli_mkdir_done(struct tevent_req *subreq); +static void cli_mkdir_done2(struct tevent_req *subreq); struct cli_mkdir_state { int dummy; @@ -2003,6 +2004,15 @@ struct tevent_req *cli_mkdir_send(TALLOC_CTX *mem_ctx, return NULL; } + if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) { + subreq = cli_smb2_mkdir_send(state, ev, cli, dname); + if (tevent_req_nomem(subreq, req)) { + return tevent_req_post(req, ev); + } + tevent_req_set_callback(subreq, cli_mkdir_done2, req); + return req; + } + bytes = talloc_array(state, uint8_t, 1); if (tevent_req_nomem(bytes, req)) { return tevent_req_post(req, ev); @@ -2043,6 +2053,12 @@ static void cli_mkdir_done(struct tevent_req *subreq) tevent_req_done(req); } +static void cli_mkdir_done2(struct tevent_req *subreq) +{ + NTSTATUS status = cli_smb2_mkdir_recv(subreq); + tevent_req_simple_finish_ntstatus(subreq, status); +} + NTSTATUS cli_mkdir_recv(struct tevent_req *req) { return tevent_req_simple_recv_ntstatus(req); @@ -2055,10 +2071,6 @@ NTSTATUS cli_mkdir(struct cli_state *cli, const char *dname) struct tevent_req *req; NTSTATUS status = NT_STATUS_OK; - if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) { - return cli_smb2_mkdir(cli, dname); - } - frame = talloc_stackframe(); if (smbXcli_conn_has_async_calls(cli->conn)) { @@ -2086,6 +2098,7 @@ NTSTATUS cli_mkdir(struct cli_state *cli, const char *dname) } status = cli_mkdir_recv(req); + cli->raw_status = status; /* cli_smb2_mkdir_recv doesn't set this */ fail: TALLOC_FREE(frame);