1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-27 14:04:05 +03:00

s3: Add cli_smb()

This is a sync wrapper around cli_smb_send/cli_smb_recv. This is a hack to
speed up converting libsmb/ away from cli_send_smb/cli_receive_smb. Some
routines in libsmb/ are only called in one place in smbtorture for example,
where making it async right now is not worth it. With cli_smb_send/cli_smb_recv
in place, pushing the asynchronosity out one level is "just" boilerplate code
that is easy to do should it become necessary.
This commit is contained in:
Volker Lendecke 2010-02-07 13:24:41 +01:00
parent a7036a9e47
commit 89e6a5263e
2 changed files with 43 additions and 0 deletions

View File

@ -2327,6 +2327,13 @@ NTSTATUS cli_echo_recv(struct tevent_req *req);
NTSTATUS cli_echo(struct cli_state *cli, uint16_t num_echos, DATA_BLOB data);
bool cli_ucs2(struct cli_state *cli);
bool is_andx_req(uint8_t cmd);
NTSTATUS cli_smb(TALLOC_CTX *mem_ctx, struct cli_state *cli,
uint8_t smb_command, uint8_t additional_flags,
uint8_t wct, uint16_t *vwv,
uint32_t num_bytes, const uint8_t *bytes,
struct tevent_req **result_parent,
uint8_t min_wct, uint8_t *pwct, uint16_t **pvwv,
uint32_t *pnum_bytes, uint8_t **pbytes);
/* The following definitions come from libsmb/clierror.c */

View File

@ -961,3 +961,39 @@ bool is_andx_req(uint8_t cmd)
return false;
}
NTSTATUS cli_smb(TALLOC_CTX *mem_ctx, struct cli_state *cli,
uint8_t smb_command, uint8_t additional_flags,
uint8_t wct, uint16_t *vwv,
uint32_t num_bytes, const uint8_t *bytes,
struct tevent_req **result_parent,
uint8_t min_wct, uint8_t *pwct, uint16_t **pvwv,
uint32_t *pnum_bytes, uint8_t **pbytes)
{
struct tevent_context *ev;
struct tevent_req *req = NULL;
NTSTATUS status = NT_STATUS_NO_MEMORY;
if (cli_has_async_calls(cli)) {
return NT_STATUS_INVALID_PARAMETER;
}
ev = tevent_context_init(mem_ctx);
if (ev == NULL) {
goto fail;
}
req = cli_smb_send(mem_ctx, ev, cli, smb_command, additional_flags,
wct, vwv, num_bytes, bytes);
if (req == NULL) {
goto fail;
}
if (!tevent_req_poll_ntstatus(req, ev, &status)) {
goto fail;
}
status = cli_smb_recv(req, min_wct, pwct, pvwv, pnum_bytes, pbytes);
fail:
TALLOC_FREE(ev);
if (NT_STATUS_IS_OK(status)) {
*result_parent = req;
}
return status;
}