svn commit: samba r14653 - in branches/SAMBA_4_0/source/rpc_server: .

metze at samba.org metze at samba.org
Wed Mar 22 16:23:20 GMT 2006


Author: metze
Date: 2006-03-22 16:23:19 +0000 (Wed, 22 Mar 2006)
New Revision: 14653

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14653

Log:
make sure we always have a valid session_info

metze
Modified:
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
   branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2006-03-22 15:41:01 UTC (rev 14652)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2006-03-22 16:23:19 UTC (rev 14653)
@@ -289,15 +289,25 @@
 NTSTATUS dcesrv_endpoint_connect(struct dcesrv_context *dce_ctx,
 				 TALLOC_CTX *mem_ctx,
 				 const struct dcesrv_endpoint *ep,
+				 struct auth_session_info *session_info,
 				 struct event_context *event_ctx,
 				 uint32_t state_flags,
 				 struct dcesrv_connection **_p)
 {
 	struct dcesrv_connection *p;
 
+	if (!session_info) {
+		return NT_STATUS_ACCESS_DENIED;
+	}
+
 	p = talloc(mem_ctx, struct dcesrv_connection);
 	NT_STATUS_HAVE_NO_MEMORY(p);
 
+	if (!talloc_reference(p, session_info)) {
+		talloc_free(p);
+		return NT_STATUS_NO_MEMORY;
+	}
+
 	p->dce_ctx = dce_ctx;
 	p->endpoint = ep;
 	p->contexts = NULL;
@@ -307,7 +317,7 @@
 	p->partial_input = data_blob(NULL, 0);
 	p->auth_state.auth_info = NULL;
 	p->auth_state.gensec_security = NULL;
-	p->auth_state.session_info = NULL;
+	p->auth_state.session_info = session_info;
 	p->auth_state.session_key = dcesrv_generic_session_key;
 	p->event_ctx = event_ctx;
 	p->processing = False;
@@ -340,12 +350,9 @@
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
-	status = dcesrv_endpoint_connect(dce_ctx, mem_ctx, ep, event_ctx, state_flags, dce_conn_p);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	status = dcesrv_endpoint_connect(dce_ctx, mem_ctx, ep, session_info, event_ctx, state_flags, dce_conn_p);
+	NT_STATUS_NOT_OK_RETURN(status);
 
-	(*dce_conn_p)->auth_state.session_info = talloc_reference((*dce_conn_p), session_info);
 	(*dce_conn_p)->auth_state.session_key = dcesrv_inherited_session_key;
 
 	/* TODO: check security descriptor of the endpoint here 

Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c	2006-03-22 15:41:01 UTC (rev 14652)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_sock.c	2006-03-22 16:23:19 UTC (rev 14653)
@@ -31,6 +31,7 @@
 #include "lib/messaging/irpc.h"
 #include "system/network.h"
 #include "netif/netif.h"
+#include "auth/auth.h"
 
 struct dcesrv_socket_context {
 	const struct dcesrv_endpoint *endpoint;
@@ -97,10 +98,20 @@
 	struct dcesrv_socket_context *dcesrv_sock = 
 		talloc_get_type(srv_conn->private, struct dcesrv_socket_context);
 	struct dcesrv_connection *dcesrv_conn = NULL;
+	struct auth_session_info *session_info = NULL;
 
+	status = auth_anonymous_session_info(srv_conn, &session_info);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0,("dcesrv_sock_accept: auth_anonymous_session_info failed: %s\n", 
+			nt_errstr(status)));
+		stream_terminate_connection(srv_conn, nt_errstr(status));
+		return;
+	}
+
 	status = dcesrv_endpoint_connect(dcesrv_sock->dcesrv_ctx,
 					 srv_conn,
 					 dcesrv_sock->endpoint,
+					 session_info,
 					 srv_conn->event.ctx,
 					 DCESRV_CALL_STATE_FLAG_MAY_ASYNC,
 					 &dcesrv_conn);



More information about the samba-cvs mailing list