1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-28 01:58:17 +03:00

libnet dssync: support lists of dns (instead of one dn) for single object replication.

Just specify several DNs separated by spaces on the command line of
"net rpc vampire keytab" to get the passwords for each of these
accouns via single object replication.

Michael
(This used to be commit 6e53dc2db882d88470be5dfa1155b420fac8e6c5)
This commit is contained in:
Michael Adam 2008-07-30 13:02:36 +02:00
parent ab5a6712b6
commit f060b744ef
3 changed files with 28 additions and 18 deletions

View File

@ -630,7 +630,9 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
union drsuapi_DsGetNCChangesRequest req;
struct replUpToDateVectorBlob *old_utdv = NULL;
struct replUpToDateVectorBlob *pnew_utdv = NULL;
const char *dn;
const char **dns;
uint32_t dn_count;
uint32_t count;
status = ctx->ops->startup(ctx, mem_ctx, &old_utdv);
if (!NT_STATUS_IS_OK(status)) {
@ -640,25 +642,31 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
goto out;
}
if (ctx->single && ctx->object_dn) {
dn = ctx->object_dn;
if (ctx->single && ctx->object_dns) {
dns = ctx->object_dns;
dn_count = ctx->object_count;
} else {
dn = ctx->nc_dn;
dns = &ctx->nc_dn;
dn_count = 1;
}
status = libnet_dssync_build_request(mem_ctx, ctx, dn, old_utdv, &level,
&req);
if (!NT_STATUS_IS_OK(status)) {
goto out;
}
for (count=0; count < dn_count; count++) {
status = libnet_dssync_build_request(mem_ctx, ctx,
dns[count],
old_utdv, &level,
&req);
if (!NT_STATUS_IS_OK(status)) {
goto out;
}
status = libnet_dssync_getncchanges(mem_ctx, ctx, level, &req,
&pnew_utdv);
if (!NT_STATUS_IS_OK(status)) {
ctx->error_message = talloc_asprintf(mem_ctx,
"Failed to call DsGetNCCHanges: %s",
nt_errstr(status));
goto out;
status = libnet_dssync_getncchanges(mem_ctx, ctx, level, &req,
&pnew_utdv);
if (!NT_STATUS_IS_OK(status)) {
ctx->error_message = talloc_asprintf(mem_ctx,
"Failed to call DsGetNCCHanges: %s",
nt_errstr(status));
goto out;
}
}
status = ctx->ops->finish(ctx, mem_ctx, pnew_utdv);

View File

@ -37,7 +37,8 @@ struct dssync_context {
const char *nc_dn;
bool single;
bool repl_nodiff;
const char *object_dn;
uint32_t object_count;
const char **object_dns;
struct policy_handle bind_handle;
DATA_BLOB session_key;
const char *output_filename;

View File

@ -302,7 +302,8 @@ static NTSTATUS rpc_vampire_keytab_ds_internals(struct net_context *c,
ctx->output_filename = argv[0];
}
if (argc >= 2) {
ctx->object_dn = argv[1];
ctx->object_dns = &argv[1];
ctx->object_count = argc - 1;
ctx->single = true;
}