static NTSTATUS libnet_dssync_lookup_nc(TALLOC_CTX *mem_ctx, struct dssync_context *ctx) { NTSTATUS status; WERROR werr; int32_t level = 1; union drsuapi_DsNameRequest req; int32_t level_out; struct drsuapi_DsNameString names[1]; union drsuapi_DsNameCtr ctr; names[0].str = talloc_asprintf(mem_ctx, "%s\\", ctx->domain_name); NT_STATUS_HAVE_NO_MEMORY(names[0].str); req.req1.codepage = 1252; /* german */ req.req1.language = 0x00000407; /* german */ req.req1.count = 1; req.req1.names = names; req.req1.format_flags = DRSUAPI_DS_NAME_FLAG_NO_FLAGS; req.req1.format_offered = DRSUAPI_DS_NAME_FORMAT_UNKNOWN; req.req1.format_desired = DRSUAPI_DS_NAME_FORMAT_FQDN_1779; status = rpccli_drsuapi_DsCrackNames(ctx->cli, mem_ctx, &ctx->bind_handle, level, &req, &level_out, &ctr, &werr); if (!NT_STATUS_IS_OK(status)) { ctx->error_message = talloc_asprintf(ctx, "Failed to lookup DN for domain name: %s", get_friendly_werror_msg(werr)); return status; } if (!W_ERROR_IS_OK(werr)) { return werror_to_ntstatus(werr); } if (ctr.ctr1->count != 1) { return NT_STATUS_UNSUCCESSFUL; } if (ctr.ctr1->array[0].status != DRSUAPI_DS_NAME_STATUS_OK) { return NT_STATUS_UNSUCCESSFUL; } ctx->nc_dn = talloc_strdup(mem_ctx, ctr.ctr1->array[0].result_name); NT_STATUS_HAVE_NO_MEMORY(ctx->nc_dn); if (!ctx->dns_domain_name) { ctx->dns_domain_name = talloc_strdup_upper(mem_ctx, ctr.ctr1->array[0].dns_domain_name); NT_STATUS_HAVE_NO_MEMORY(ctx->dns_domain_name); } return NT_STATUS_OK; }
static WERROR cracknames(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, struct policy_handle *bind_handle, enum drsuapi_DsNameFormat format_offered, enum drsuapi_DsNameFormat format_desired, int argc, const char **argv, union drsuapi_DsNameCtr *ctr) { NTSTATUS status; WERROR werr; int i; int32_t level = 1; union drsuapi_DsNameRequest req; int32_t level_out; struct drsuapi_DsNameString *names; names = TALLOC_ZERO_ARRAY(mem_ctx, struct drsuapi_DsNameString, argc); W_ERROR_HAVE_NO_MEMORY(names); for (i=0; i<argc; i++) { names[i].str = argv[i]; } req.req1.codepage = 1252; /* german */ req.req1.language = 0x00000407; /* german */ req.req1.count = argc; req.req1.names = names; req.req1.format_flags = DRSUAPI_DS_NAME_FLAG_NO_FLAGS; req.req1.format_offered = format_offered; req.req1.format_desired = format_desired; status = rpccli_drsuapi_DsCrackNames(cli, mem_ctx, bind_handle, level, &req, &level_out, ctr, &werr); if (!NT_STATUS_IS_OK(status)) { return ntstatus_to_werror(status); } if (!W_ERROR_IS_OK(werr)) { return werr; } return WERR_OK; }