r21293: store the gensec session key for each drsuapi connection
authorStefan Metzmacher <metze@samba.org>
Mon, 12 Feb 2007 10:58:06 +0000 (10:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:48:02 +0000 (14:48 -0500)
metze
(This used to be commit d399739820650bcbe486956374af84c436d3ec16)

source4/libnet/libnet_become_dc.c

index aa4e2287bc4eb6079464c5a2e850dad6afc27621..a302ded4f5b082850603c1d5ba320afc0ce8170a 100644 (file)
@@ -32,6 +32,7 @@
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_security.h"
 #include "librpc/gen_ndr/ndr_drsuapi.h"
+#include "auth/gensec/gensec.h"
 
 struct libnet_BecomeDC_state {
        struct composite_context *creq;
@@ -55,6 +56,7 @@ struct libnet_BecomeDC_state {
                struct libnet_BecomeDC_state *s;
                struct dcerpc_binding *binding;
                struct dcerpc_pipe *pipe;
+               DATA_BLOB gensec_skey;
                struct drsuapi_DsBind bind_r;
                struct GUID bind_guid;
                struct drsuapi_DsBindInfoCtr bind_info_ctr;
@@ -895,6 +897,10 @@ static void becomeDC_drsuapi1_connect_recv(struct composite_context *req)
        c->status = dcerpc_pipe_connect_b_recv(req, s, &s->drsuapi1.pipe);
        if (!composite_is_ok(c)) return;
 
+       c->status = gensec_session_key(s->drsuapi1.pipe->conn->security_state.generic_state,
+                                      &s->drsuapi1.gensec_skey);
+       if (!composite_is_ok(c)) return;
+
        becomeDC_drsuapi_bind_send(s, &s->drsuapi1, becomeDC_drsuapi1_bind_recv);
 }
 
@@ -1585,6 +1591,10 @@ static void becomeDC_drsuapi2_connect_recv(struct composite_context *req)
        c->status = dcerpc_pipe_connect_b_recv(req, s, &s->drsuapi2.pipe);
        if (!composite_is_ok(c)) return;
 
+       c->status = gensec_session_key(s->drsuapi2.pipe->conn->security_state.generic_state,
+                                      &s->drsuapi2.gensec_skey);
+       if (!composite_is_ok(c)) return;
+
        becomeDC_drsuapi_bind_send(s, &s->drsuapi2, becomeDC_drsuapi2_bind_recv);
 }
 
@@ -1639,6 +1649,10 @@ static void becomeDC_drsuapi3_connect_recv(struct composite_context *req)
        c->status = dcerpc_pipe_connect_b_recv(req, s, &s->drsuapi3.pipe);
        if (!composite_is_ok(c)) return;
 
+       c->status = gensec_session_key(s->drsuapi3.pipe->conn->security_state.generic_state,
+                                      &s->drsuapi3.gensec_skey);
+       if (!composite_is_ok(c)) return;
+
        becomeDC_drsuapi3_pull_schema_send(s);
 }