[SCM] Samba Shared Repository - branch master updated

Simo Sorce idra at samba.org
Wed Jul 21 17:15:36 MDT 2010


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 <idra at samba.org>
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 <idra at samba.org>
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


More information about the samba-cvs mailing list