The branch, master has been updated
       via  2689165... Change the credential handling so that we start with 
maxmux creds, and then return to the client the number of credits per operation 
that they asked for. This is a more sensible algorithm than just blindly 
returning "20" on every reply, although we will probably still need more 
changes to this going forward. Jeremy.
      from  76f4e6f... idl:lsa change string type

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 26891651ec8dd68113ff0f49d996c3e70d55933e
Author: Jeremy Allison <[email protected]>
Date:   Wed Feb 24 16:16:30 2010 -0800

    Change the credential handling so that we start with maxmux creds,
    and then return to the client the number of credits per operation
    that they asked for. This is a more sensible algorithm than just
    blindly returning "20" on every reply, although we will probably
    still need more changes to this going forward.
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/smb2_server.c |   17 ++++++++++-------
 1 files changed, 10 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 9e5be40..1d95d4b 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -234,7 +234,8 @@ static NTSTATUS smbd_smb2_request_create(struct 
smbd_server_connection *sconn,
        return NT_STATUS_OK;
 }
 
-static NTSTATUS smbd_smb2_request_validate(struct smbd_smb2_request *req)
+static NTSTATUS smbd_smb2_request_validate(struct smbd_smb2_request *req,
+                               uint16_t *p_creds_requested)
 {
        int count;
        int idx;
@@ -266,6 +267,8 @@ static NTSTATUS smbd_smb2_request_validate(struct 
smbd_smb2_request *req)
                        return NT_STATUS_INVALID_PARAMETER;
                }
 
+               *p_creds_requested = SVAL(inhdr, SMB2_HDR_CREDIT);
+
                flags = IVAL(inhdr, SMB2_HDR_FLAGS);
                if (idx == 1) {
                        /*
@@ -314,7 +317,7 @@ static NTSTATUS smbd_smb2_request_validate(struct 
smbd_smb2_request *req)
        return NT_STATUS_OK;
 }
 
-static NTSTATUS smbd_smb2_request_setup_out(struct smbd_smb2_request *req)
+static NTSTATUS smbd_smb2_request_setup_out(struct smbd_smb2_request *req, 
uint16_t creds)
 {
        struct iovec *vector;
        int count;
@@ -371,8 +374,7 @@ static NTSTATUS smbd_smb2_request_setup_out(struct 
smbd_smb2_request *req)
                      NT_STATUS_V(NT_STATUS_INTERNAL_ERROR));
                SSVAL(outhdr, SMB2_HDR_OPCODE,
                      SVAL(inhdr, SMB2_HDR_OPCODE));
-               /* Make up a number for now... JRA. FIXME ! FIXME !*/
-               SSVAL(outhdr, SMB2_HDR_CREDIT,          20);
+               SSVAL(outhdr, SMB2_HDR_CREDIT,          creds);
                SIVAL(outhdr, SMB2_HDR_FLAGS,
                      IVAL(inhdr, SMB2_HDR_FLAGS) | SMB2_HDR_FLAG_REDIRECT);
                SIVAL(outhdr, SMB2_HDR_NEXT_COMMAND,    next_command_ofs);
@@ -1510,7 +1512,7 @@ void smbd_smb2_first_negprot(struct 
smbd_server_connection *sconn,
                return;
        }
 
-       status = smbd_smb2_request_setup_out(req);
+       status = smbd_smb2_request_setup_out(req, (uint16_t)lp_maxmux());
        if (!NT_STATUS_IS_OK(status)) {
                smbd_server_connection_terminate(sconn, nt_errstr(status));
                return;
@@ -1533,6 +1535,7 @@ void smbd_smb2_first_negprot(struct 
smbd_server_connection *sconn,
 
 static void smbd_smb2_request_incoming(struct tevent_req *subreq)
 {
+       uint16_t creds_requested = 0;
        struct smbd_server_connection *sconn = tevent_req_callback_data(subreq,
                                               struct smbd_server_connection);
        NTSTATUS status;
@@ -1557,13 +1560,13 @@ static void smbd_smb2_request_incoming(struct 
tevent_req *subreq)
        DEBUG(10,("smbd_smb2_request_incoming: idx[%d] of %d vectors\n",
                 req->current_idx, req->in.vector_count));
 
-       status = smbd_smb2_request_validate(req);
+       status = smbd_smb2_request_validate(req, &creds_requested);
        if (!NT_STATUS_IS_OK(status)) {
                smbd_server_connection_terminate(sconn, nt_errstr(status));
                return;
        }
 
-       status = smbd_smb2_request_setup_out(req);
+       status = smbd_smb2_request_setup_out(req, creds_requested);
        if (!NT_STATUS_IS_OK(status)) {
                smbd_server_connection_terminate(sconn, nt_errstr(status));
                return;


-- 
Samba Shared Repository

Reply via email to