r21236: store and orint the dcerpc session key, gensec session key and user nthash
authorStefan Metzmacher <metze@samba.org>
Thu, 8 Feb 2007 10:44:54 +0000 (10:44 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:44:51 +0000 (14:44 -0500)
values for each drsuapi connection in RPC-DSSYNC

metze

source/torture/rpc/dssync.c

index 90fe2bcfe1a5dddfd38b500d55308a672fba5024..ee2d265cd780126313b69e71fcc1a97f68015954 100644 (file)
 #include "libcli/ldap/ldap_client.h"
 #include "torture/torture.h"
 #include "torture/ldap/proto.h"
+#include "libcli/auth/libcli_auth.h"
+#include "lib/crypto/crypto.h"
+#include "auth/credentials/credentials.h"
+#include "libcli/auth/libcli_auth.h"
+#include "auth/gensec/gensec.h"
 
 struct DsSyncBindInfo {
        struct dcerpc_pipe *pipe;
@@ -37,6 +42,9 @@ struct DsSyncBindInfo {
        struct drsuapi_DsBindInfo28 our_bind_info28;
        struct drsuapi_DsBindInfo28 peer_bind_info28;
        struct policy_handle bind_handle;
+       DATA_BLOB dce_key;
+       DATA_BLOB gen_key;
+       struct samr_Password nthash;
 };
 
 struct DsSyncLDAPInfo {
@@ -113,6 +121,7 @@ static struct DsSyncTest *test_create_context(TALLOC_CTX *mem_ctx)
        ctx->admin.drsuapi.req.out.bind_handle          = &ctx->admin.drsuapi.bind_handle;
 
        /* ctx->new_dc ...*/
+       ctx->new_dc.credentials                 = cmdline_credentials;
 
        our_bind_info28                         = &ctx->new_dc.drsuapi.our_bind_info28;
        our_bind_info28->supported_extensions   |= DRSUAPI_SUPPORTED_EXTENSION_BASE;
@@ -172,6 +181,7 @@ static BOOL _test_DsBind(struct DsSyncTest *ctx, struct cli_credentials *credent
        NTSTATUS status;
        BOOL ret = True;
        struct event_context *event = NULL;
+       const struct samr_Password *nthash;
 
        status = dcerpc_pipe_connect_b(ctx,
                                       &b->pipe, ctx->drsuapi_binding, 
@@ -214,6 +224,20 @@ static BOOL _test_DsBind(struct DsSyncTest *ctx, struct cli_credentials *credent
                }
        }
 
+       dcerpc_fetch_session_key(b->pipe, &b->dce_key);
+       gensec_session_key(b->pipe->conn->security_state.generic_state, &b->gen_key);
+       nthash = cli_credentials_get_nt_hash(credentials, NULL);
+       if (nthash) b->nthash = *nthash;
+
+       if (lp_parm_bool(-1,"dssync","print_pwd_blobs",False)) {
+               DEBUG(0,("DCERPC session key:\n"));
+               dump_data(0, b->dce_key.data, b->dce_key.length);
+               DEBUG(0,("GENSEC session key:\n"));
+               dump_data(0, b->gen_key.data, b->gen_key.length);
+               DEBUG(0,("CREDENTIALS nthash:\n"));
+               dump_data(0, b->nthash.hash, sizeof(b->nthash.hash));
+       }
+
        return ret;
 }
 
@@ -635,7 +659,7 @@ BOOL torture_rpc_dssync(struct torture_context *torture)
        ret &= _test_DsBind(ctx, ctx->admin.credentials, &ctx->admin.drsuapi);
        ret &= test_LDAPBind(ctx, ctx->admin.credentials, &ctx->admin.ldap);
        ret &= test_GetInfo(ctx);
-       ret &= _test_DsBind(ctx, ctx->admin.credentials, &ctx->new_dc.drsuapi);
+       ret &= _test_DsBind(ctx, ctx->new_dc.credentials, &ctx->new_dc.drsuapi);
        ret &= test_FetchData(ctx);
        ret &= test_FetchNT4Data(ctx);