Esempio n. 1
0
static WERROR cmd_netlogon_dsr_getdcnameex(struct rpc_pipe_client *cli,
					   TALLOC_CTX *mem_ctx, int argc,
					   const char **argv)
{
	WERROR result;
	NTSTATUS status;
	uint32_t flags = DS_RETURN_DNS_NAME;
	const char *server_name = cli->desthost;
	const char *domain_name;
	const char *site_name = NULL;
	struct GUID domain_guid = GUID_zero();
	struct netr_DsRGetDCNameInfo *info = NULL;
	struct dcerpc_binding_handle *b = cli->binding_handle;

	if (argc < 2) {
		fprintf(stderr, "Usage: %s [domain_name] [domain_guid] "
				"[site_name] [flags]\n", argv[0]);
		return WERR_OK;
	}

	domain_name = argv[1];

	if (argc >= 3) {
		if (!NT_STATUS_IS_OK(GUID_from_string(argv[2], &domain_guid))) {
			return WERR_NOMEM;
		}
	}

	if (argc >= 4) {
		site_name = argv[3];
	}

	if (argc >= 5) {
		sscanf(argv[4], "%x", &flags);
	}

	debug_dsdcinfo_flags(1,flags);

	status = dcerpc_netr_DsRGetDCNameEx(b, mem_ctx,
					    server_name,
					    domain_name,
					    &domain_guid,
					    site_name,
					    flags,
					    &info,
					    &result);
	if (!NT_STATUS_IS_OK(status)) {
		return ntstatus_to_werror(status);
	}

	if (!W_ERROR_IS_OK(result)) {
		return result;
	}

	d_printf("DsRGetDCNameEx gave %s\n",
		NDR_PRINT_STRUCT_STRING(mem_ctx, netr_DsRGetDCNameInfo, info));

	return result;
}
Esempio n. 2
0
WERROR DsGetDcName_r(struct libnetapi_ctx *ctx,
                     struct DsGetDcName *r)
{
    WERROR werr;
    NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
    struct dcerpc_binding_handle *b;

    werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
                                        &ndr_table_netlogon,
                                        &b);
    if (!W_ERROR_IS_OK(werr)) {
        goto done;
    }

    status = dcerpc_netr_DsRGetDCNameEx(b,
                                        ctx,
                                        r->in.server_name,
                                        r->in.domain_name,
                                        r->in.domain_guid,
                                        r->in.site_name,
                                        r->in.flags,
                                        (struct netr_DsRGetDCNameInfo **)r->out.dc_info,
                                        &werr);
    if (NT_STATUS_IS_OK(status) && W_ERROR_IS_OK(werr)) {
        goto done;
    }

    status = dcerpc_netr_DsRGetDCName(b,
                                      ctx,
                                      r->in.server_name,
                                      r->in.domain_name,
                                      r->in.domain_guid,
                                      NULL,
                                      r->in.flags,
                                      (struct netr_DsRGetDCNameInfo **)r->out.dc_info,
                                      &werr);
    if (!NT_STATUS_IS_OK(status)) {
        werr = ntstatus_to_werror(status);
        goto done;
    }

done:
    return werr;
}