From 0a31a5d20e7a05f7fff12003e64ec6f9678a6ae6 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 11 Oct 2024 13:38:07 +0000 Subject: [PATCH] s3:utils: let net_rpc_testjoin() work for ad domains and no ipv4 address Signed-off-by: Stefan Metzmacher Reviewed-by: Andreas Schneider --- source3/utils/net_rpc.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 4e4de84b6e3..384c2218d43 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -502,6 +502,7 @@ int net_rpc_testjoin(struct net_context *c, int argc, const char **argv) if (!dc) { struct netr_DsRGetDCNameInfo *info; + uint32_t flags = DS_RETURN_DNS_NAME; if (!c->msg_ctx) { d_fprintf(stderr, _("Could not initialise message context. " @@ -510,13 +511,31 @@ int net_rpc_testjoin(struct net_context *c, int argc, const char **argv) return -1; } + if (strequal(domain, lp_workgroup())) { + flags |= DS_IS_FLAT_NAME; + } + status = dsgetdcname(mem_ctx, c->msg_ctx, domain, NULL, NULL, - DS_RETURN_DNS_NAME, + flags, &info); + if (NT_STATUS_EQUAL(status, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) && + strequal(domain, lp_workgroup()) && + lp_realm() != NULL) + { + flags &= ~DS_IS_FLAT_NAME; + flags |= DS_IS_DNS_NAME; + status = dsgetdcname(mem_ctx, + c->msg_ctx, + lp_realm(), + NULL, + NULL, + flags, + &info); + } if (!NT_STATUS_IS_OK(status)) { talloc_destroy(mem_ctx); return -1; -- 2.47.3