From 9b0e3bb0c36abd9396f07de988e5c402d8503681 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Fri, 27 Jun 2008 15:36:19 +0200 Subject: net_vampire: add code to vampire to a Kerberos keytab file using DRSUAPI. Guenther (This used to be commit 0ef420c3a478a8adce7483f14b45e9995bfa5e5d) --- source3/utils/net_rpc_samsync.c | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'source3/utils') diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c index e4aa343d06..583984405f 100644 --- a/source3/utils/net_rpc_samsync.c +++ b/source3/utils/net_rpc_samsync.c @@ -278,6 +278,48 @@ NTSTATUS rpc_vampire_keytab_internals(struct net_context *c, return status; } +NTSTATUS rpc_vampire_keytab_ds_internals(struct net_context *c, + const DOM_SID *domain_sid, + const char *domain_name, + struct cli_state *cli, + struct rpc_pipe_client *pipe_hnd, + TALLOC_CTX *mem_ctx, + int argc, + const char **argv) +{ + NTSTATUS status; + struct dssync_context *ctx = NULL; + + status = libnet_dssync_init_context(mem_ctx, + &ctx); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + if (argc >= 1) { + ctx->output_filename = argv[0]; + } + + ctx->cli = pipe_hnd; + ctx->domain_name = domain_name; + ctx->processing_fn = libnet_dssync_dump_keytab; + + status = libnet_dssync(mem_ctx, ctx); + if (!NT_STATUS_IS_OK(status) && ctx->error_message) { + d_fprintf(stderr, "%s\n", ctx->error_message); + goto out; + } + + if (ctx->result_message) { + d_fprintf(stdout, "%s\n", ctx->result_message); + } + + out: + TALLOC_FREE(ctx); + + return status; +} + /** * Basic function for 'net rpc vampire keytab' * @@ -289,6 +331,8 @@ NTSTATUS rpc_vampire_keytab_internals(struct net_context *c, int rpc_vampire_keytab(struct net_context *c, int argc, const char **argv) { + int ret = 0; + if (c->display_usage) { d_printf("Usage\n" "net rpc vampire keytab\n" @@ -296,6 +340,12 @@ int rpc_vampire_keytab(struct net_context *c, int argc, const char **argv) return 0; } + ret = run_rpc_command(c, NULL, PI_DRSUAPI, NET_FLAGS_SEAL, + rpc_vampire_keytab_ds_internals, argc, argv); + if (ret == 0) { + return 0; + } + return run_rpc_command(c, NULL, PI_NETLOGON, 0, rpc_vampire_keytab_internals, argc, argv); } -- cgit