The branch, master has been updated
       via  61cfbf3... s3-rpc_server: Cleanup the way we free pipe auth data
       via  636de43... cleaup: Reformat cli_get_session_key()
      from  3b502d8... s3-dcerpc: Fix potential memleak

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


- Log -----------------------------------------------------------------
commit 61cfbf342fb508477bd45ed8378af7ba6f147727
Author: Simo Sorce <[email protected]>
Date:   Sat Jul 17 16:34:33 2010 -0400

    s3-rpc_server: Cleanup the way we free pipe auth data

commit 636de433ac9cb658c35b8fc45933d8dcb98a991e
Author: Simo Sorce <[email protected]>
Date:   Mon Jul 19 15:43:22 2010 -0400

    cleaup: Reformat cli_get_session_key()
    
    merge cli_get_session_key

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

Summary of changes:
 source3/rpc_client/cli_pipe.c |   43 ++++++++++++++++++++---------------------
 source3/rpc_server/srv_pipe.c |   23 ++++++++++++---------
 2 files changed, 34 insertions(+), 32 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index c3712f7..6de2e80 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -3836,6 +3836,7 @@ NTSTATUS cli_get_session_key(TALLOC_CTX *mem_ctx,
                             struct rpc_pipe_client *cli,
                             DATA_BLOB *session_key)
 {
+       struct pipe_auth_data *a = cli->auth;
        DATA_BLOB sk;
 
        if (!session_key || !cli) {
@@ -3847,29 +3848,27 @@ NTSTATUS cli_get_session_key(TALLOC_CTX *mem_ctx,
        }
 
        switch (cli->auth->auth_type) {
-               case PIPE_AUTH_TYPE_SCHANNEL:
-                       *session_key = data_blob_talloc(mem_ctx,
-                               
cli->auth->a_u.schannel_auth->creds->session_key, 16);
-                       break;
-               case PIPE_AUTH_TYPE_NTLMSSP:
-               case PIPE_AUTH_TYPE_SPNEGO_NTLMSSP:
-                       sk = 
auth_ntlmssp_get_session_key(cli->auth->a_u.auth_ntlmssp_state);
-                       *session_key = data_blob_dup_talloc(mem_ctx, &sk);
-                       break;
-               case PIPE_AUTH_TYPE_KRB5:
-               case PIPE_AUTH_TYPE_SPNEGO_KRB5:
-                       *session_key = data_blob_talloc(mem_ctx,
-                               cli->auth->a_u.kerberos_auth->session_key.data,
-                               
cli->auth->a_u.kerberos_auth->session_key.length);
-                       break;
-               case PIPE_AUTH_TYPE_NONE:
-                       *session_key = data_blob_talloc(mem_ctx,
-                               cli->auth->user_session_key.data,
-                               cli->auth->user_session_key.length);
-                       break;
-               default:
-                       return NT_STATUS_NO_USER_SESSION_KEY;
+       case PIPE_AUTH_TYPE_SCHANNEL:
+               sk = data_blob_const(a->a_u.schannel_auth->creds->session_key,
+                                    16);
+               break;
+       case PIPE_AUTH_TYPE_NTLMSSP:
+       case PIPE_AUTH_TYPE_SPNEGO_NTLMSSP:
+               sk = auth_ntlmssp_get_session_key(a->a_u.auth_ntlmssp_state);
+               break;
+       case PIPE_AUTH_TYPE_KRB5:
+       case PIPE_AUTH_TYPE_SPNEGO_KRB5:
+               sk = data_blob_const(a->a_u.kerberos_auth->session_key.data,
+                                    a->a_u.kerberos_auth->session_key.length);
+               break;
+       case PIPE_AUTH_TYPE_NONE:
+               sk = data_blob_const(a->user_session_key.data,
+                                    a->user_session_key.length);
+               break;
+       default:
+               return NT_STATUS_NO_USER_SESSION_KEY;
        }
 
+       *session_key = data_blob_dup_talloc(mem_ctx, &sk);
        return NT_STATUS_OK;
 }
diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c
index 508cb3f..056bf58 100644
--- a/source3/rpc_server/srv_pipe.c
+++ b/source3/rpc_server/srv_pipe.c
@@ -94,6 +94,14 @@ static void free_pipe_schannel_auth_data(struct 
pipe_auth_data *auth)
        TALLOC_FREE(auth->a_u.schannel_auth);
 }
 
+static void free_pipe_auth_data(struct pipe_auth_data *auth)
+{
+       if (auth->auth_data_free_func) {
+               (*auth->auth_data_free_func)(auth);
+               auth->auth_data_free_func = NULL;
+       }
+}
+
 static DATA_BLOB generic_session_key(void)
 {
        return data_blob("SystemLibraryDTC", 16);
@@ -602,8 +610,7 @@ bool api_pipe_bind_auth3(pipes_struct *p, struct 
ncacn_packet *pkt)
 
  err:
 
-       free_pipe_ntlmssp_auth_data(&p->auth);
-       p->auth.a_u.auth_ntlmssp_state = NULL;
+       free_pipe_auth_data(&p->auth);
 
        return False;
 }
@@ -651,9 +658,7 @@ static bool setup_bind_nak(pipes_struct *p, struct 
ncacn_packet *pkt)
        p->out_data.data_sent_length = 0;
        p->out_data.current_pdu_sent = 0;
 
-       if (p->auth.auth_data_free_func) {
-               (*p->auth.auth_data_free_func)(&p->auth);
-       }
+       free_pipe_auth_data(&p->auth);
        p->auth.auth_level = DCERPC_AUTH_LEVEL_NONE;
        p->auth.auth_type = PIPE_AUTH_TYPE_NONE;
        p->pipe_bound = False;
@@ -860,7 +865,7 @@ static bool pipe_spnego_auth_bind_negotiate(pipes_struct *p,
 
        if (p->auth.auth_type == PIPE_AUTH_TYPE_SPNEGO_NTLMSSP && 
p->auth.a_u.auth_ntlmssp_state) {
                /* Free any previous auth type. */
-               free_pipe_ntlmssp_auth_data(&p->auth);
+               free_pipe_auth_data(&p->auth);
        }
 
        if (!got_kerberos_mechanism) {
@@ -988,8 +993,7 @@ static bool pipe_spnego_auth_bind_continue(pipes_struct *p,
        data_blob_free(&auth_blob);
        data_blob_free(&auth_reply);
 
-       free_pipe_ntlmssp_auth_data(&p->auth);
-       p->auth.a_u.auth_ntlmssp_state = NULL;
+       free_pipe_auth_data(&p->auth);
 
        return False;
 }
@@ -1170,8 +1174,7 @@ static bool pipe_ntlmssp_auth_bind(pipes_struct *p,
 
   err:
 
-       free_pipe_ntlmssp_auth_data(&p->auth);
-       p->auth.a_u.auth_ntlmssp_state = NULL;
+       TALLOC_FREE(a);
        return False;
 }
 


-- 
Samba Shared Repository

Reply via email to