summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorKen Harris <Ken.Harris@mathworks.com>2010-12-20 10:44:48 -0800
committerJeremy Allison <jra@samba.org>2010-12-20 20:59:55 +0100
commit09aea038139f8717d38f0fdae6be9cf46bd86b15 (patch)
tree8e46e992c37008beabfdfdcb69250407a68c60ce /source3/smbd
parente7707d5abd7365c89405963c7cac0c0382d9179e (diff)
downloadsamba-09aea038139f8717d38f0fdae6be9cf46bd86b15.tar.gz
samba-09aea038139f8717d38f0fdae6be9cf46bd86b15.tar.bz2
samba-09aea038139f8717d38f0fdae6be9cf46bd86b15.zip
CREATE in a compound CREATE/NOTIFY sequence was being passed through set_operation_credits()
twice (ultimately perhaps because of bug 7331 involving this compound sequence and the need to be ready for any incoming CANCEL of the NOTIFY). This had the server thinking it had granted more credit than it actually had, which lead to zero-credits being granted in interim NOTIFY responses. Autobuild-User: Jeremy Allison <jra@samba.org> Autobuild-Date: Mon Dec 20 20:59:55 CET 2010 on sn-devel-104
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/smb2_server.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 924e41fa48..025f4036fc 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -1443,23 +1443,6 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req)
req->subreq = NULL;
- smb2_setup_nbt_length(req->out.vector, req->out.vector_count);
-
- /* Set credit for this operation (zero credits if this
- is a final reply for an async operation). */
- smb2_set_operation_credit(req->sconn,
- req->async ? NULL : &req->in.vector[i],
- &req->out.vector[i]);
-
- if (req->do_signing) {
- NTSTATUS status;
- status = smb2_signing_sign_pdu(req->session->session_key,
- &req->out.vector[i], 3);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
- }
-
req->current_idx += 3;
if (req->current_idx < req->out.vector_count) {
@@ -1482,6 +1465,23 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req)
return NT_STATUS_OK;
}
+ smb2_setup_nbt_length(req->out.vector, req->out.vector_count);
+
+ /* Set credit for this operation (zero credits if this
+ is a final reply for an async operation). */
+ smb2_set_operation_credit(req->sconn,
+ req->async ? NULL : &req->in.vector[i],
+ &req->out.vector[i]);
+
+ if (req->do_signing) {
+ NTSTATUS status;
+ status = smb2_signing_sign_pdu(req->session->session_key,
+ &req->out.vector[i], 3);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ }
+
if (DEBUGLEVEL >= 10) {
dbgtext("smbd_smb2_request_reply: sending...\n");
print_req_vectors(req);