summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2010-04-28 15:15:23 +0200
committerStefan Metzmacher <metze@samba.org>2010-05-27 07:13:55 +0200
commit56ebbb53c80a49f2d8dda8a108afc07669af333e (patch)
tree53b4ab237291b119916c617e3c4aaa75666b6a49 /source3/smbd
parent9a77cb247d00828845df02030e7d174351daf432 (diff)
downloadsamba-56ebbb53c80a49f2d8dda8a108afc07669af333e.tar.gz
samba-56ebbb53c80a49f2d8dda8a108afc07669af333e.tar.bz2
samba-56ebbb53c80a49f2d8dda8a108afc07669af333e.zip
s3:smbd: add PIPE_BUSY handling for SMBtrans calls on named pipes
metze
Diffstat (limited to 'source3/smbd')
-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);