summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbd/ipc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c
index 97b338a536..08494b4dca 100644
--- a/source3/smbd/ipc.c
+++ b/source3/smbd/ipc.c
@@ -227,12 +227,23 @@ static void api_dcerpc_cmd(connection_struct *conn, struct smb_request *req,
{
struct tevent_req *subreq;
struct dcerpc_cmd_state *state;
+ bool busy;
if (!fsp_is_np(fsp)) {
api_no_reply(conn, req);
return;
}
+ /*
+ * Trans requests are only allowed
+ * if no other Trans or Read is active
+ */
+ busy = np_read_in_progress(fsp->fake_file_handle);
+ if (busy) {
+ reply_nterror(req, NT_STATUS_PIPE_BUSY);
+ return;
+ }
+
state = talloc(req, struct dcerpc_cmd_state);
if (state == NULL) {
reply_nterror(req, NT_STATUS_NO_MEMORY);