RPC sessions on np connections need the real session key transferred
authorStefan Metzmacher <metze@samba.org>
Sun, 23 Nov 2008 10:24:29 +0000 (11:24 +0100)
committerVolker Lendecke <vl@samba.org>
Sun, 23 Nov 2008 10:48:20 +0000 (11:48 +0100)
source4/rpc_server/dcerpc_server.c
source4/rpc_server/service_rpc.c

index 6f3f6799e7883efcb8773f949f641bdfeab7127e..6e888e5259f755c89c7e2a4af2c99921017c1a89 100644 (file)
@@ -251,8 +251,8 @@ _PUBLIC_ NTSTATUS dcesrv_interface_register(struct dcesrv_context *dce_ctx,
        return NT_STATUS_OK;
 }
 
-static NTSTATUS dcesrv_inherited_session_key(struct dcesrv_connection *p,
-                                             DATA_BLOB *session_key)
+NTSTATUS dcesrv_inherited_session_key(struct dcesrv_connection *p,
+                                     DATA_BLOB *session_key)
 {
        if (p->auth_state.session_info->session_key.length) {
                *session_key = p->auth_state.session_info->session_key;
index e526b17db19cd0a0e9916407321186d0d99bb90f..bb4d6bdaf2a0d2062ff20cb60cdb261449dfbffa 100644 (file)
@@ -27,6 +27,7 @@
 #include "auth/gensec/gensec.h"
 #include "../lib/util/dlinklist.h"
 #include "rpc_server/dcerpc_server.h"
+#include "rpc_server/dcerpc_server_proto.h"
 #include "lib/events/events.h"
 #include "smbd/service_task.h"
 #include "smbd/service_stream.h"
@@ -139,6 +140,10 @@ static void dcesrv_sock_accept(struct stream_connection *srv_conn)
        dcesrv_conn->transport.get_my_addr              = dcesrv_sock_get_my_addr;
        dcesrv_conn->transport.get_peer_addr            = dcesrv_sock_get_peer_addr;
 
+       if (dcesrv_sock->endpoint->ep_description->transport == NCACN_NP) {
+               dcesrv_conn->auth_state.session_key = dcesrv_inherited_session_key;
+       }
+
        srv_conn->private = dcesrv_conn;
 
        irpc_add_name(srv_conn->msg_ctx, "rpc_server");