From: Volker Lendecke Date: Wed, 5 Jul 2023 07:06:58 +0000 (+0200) Subject: libsmb: Add sync cli_mknod() for smbclient3's use X-Git-Tag: tevent-0.16.0~524 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=88258e17738d742634d12150e1c951cceb458ff5;p=thirdparty%2Fsamba.git libsmb: Add sync cli_mknod() for smbclient3's use Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index 30c36e4c314..daeea4a3a50 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -1312,6 +1312,38 @@ NTSTATUS cli_mknod_recv(struct tevent_req *req) return tevent_req_simple_recv_ntstatus(req); } +NTSTATUS +cli_mknod(struct cli_state *cli, const char *fname, mode_t mode, dev_t dev) +{ + TALLOC_CTX *frame = talloc_stackframe(); + struct tevent_context *ev; + struct tevent_req *req; + NTSTATUS status = NT_STATUS_NO_MEMORY; + + if (smbXcli_conn_has_async_calls(cli->conn)) { + /* + * Can't use sync call while an async call is in flight + */ + status = NT_STATUS_INVALID_PARAMETER; + goto fail; + } + ev = samba_tevent_context_init(frame); + if (ev == NULL) { + goto fail; + } + req = cli_mknod_send(ev, ev, cli, fname, mode, dev); + if (req == NULL) { + goto fail; + } + if (!tevent_req_poll_ntstatus(req, ev, &status)) { + goto fail; + } + status = cli_mknod_recv(req); +fail: + TALLOC_FREE(frame); + return status; +} + /**************************************************************************** Rename a file. ****************************************************************************/ diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h index 1d17cc8cb76..a7c58264f0e 100644 --- a/source3/libsmb/proto.h +++ b/source3/libsmb/proto.h @@ -335,6 +335,8 @@ struct tevent_req *cli_mknod_send( mode_t mode, dev_t dev); NTSTATUS cli_mknod_recv(struct tevent_req *req); +NTSTATUS +cli_mknod(struct cli_state *cli, const char *fname, mode_t mode, dev_t dev); struct tevent_req *cli_rename_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct cli_state *cli,