summaryrefslogtreecommitdiff
path: root/source3/utils/net_rpc_samsync.c
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2008-06-27 15:36:19 +0200
committerGünther Deschner <gd@samba.org>2008-07-01 10:02:01 +0200
commit9b0e3bb0c36abd9396f07de988e5c402d8503681 (patch)
tree34dd41e6540be60d4b47bffde4af4d0cab939d77 /source3/utils/net_rpc_samsync.c
parentfc836440a5c4ad1a3a5f0de0e64b4cd83e28e3c9 (diff)
downloadsamba-9b0e3bb0c36abd9396f07de988e5c402d8503681.tar.gz
samba-9b0e3bb0c36abd9396f07de988e5c402d8503681.tar.bz2
samba-9b0e3bb0c36abd9396f07de988e5c402d8503681.zip
net_vampire: add code to vampire to a Kerberos keytab file using DRSUAPI.
Guenther (This used to be commit 0ef420c3a478a8adce7483f14b45e9995bfa5e5d)
Diffstat (limited to 'source3/utils/net_rpc_samsync.c')
-rw-r--r--source3/utils/net_rpc_samsync.c50
1 files changed, 50 insertions, 0 deletions
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);
}