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:
parent
a7036a9e47
commit
89e6a5263e
@ -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 */
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user