mirror of
https://github.com/samba-team/samba.git
synced 2025-12-23 00:23:53 +03:00
Use DsGetDcName in local libnetapi join to find a dc.
Guenther
This commit is contained in:
@@ -715,7 +715,8 @@ LIBNETAPI_OBJ = $(LIBNETAPI_OBJ1) $(LIBNET_OBJ) \
|
|||||||
$(PARAM_WITHOUT_REG_OBJ) $(LIB_NONSMBD_OBJ) \
|
$(PARAM_WITHOUT_REG_OBJ) $(LIB_NONSMBD_OBJ) \
|
||||||
$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
|
$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
|
||||||
$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
|
$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
|
||||||
$(SECRETS_OBJ) $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
|
$(SECRETS_OBJ) $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
|
||||||
|
$(DCUTIL_OBJ) $(LIBADS_OBJ)
|
||||||
|
|
||||||
LIBNET_OBJ = libnet/libnet_conf.o libnet/libnet_join.o
|
LIBNET_OBJ = libnet/libnet_conf.o libnet/libnet_join.o
|
||||||
|
|
||||||
|
|||||||
@@ -36,16 +36,31 @@ static WERROR NetJoinDomainLocal(struct libnetapi_ctx *mem_ctx,
|
|||||||
werr = libnet_init_JoinCtx(mem_ctx, &r);
|
werr = libnet_init_JoinCtx(mem_ctx, &r);
|
||||||
W_ERROR_NOT_OK_RETURN(werr);
|
W_ERROR_NOT_OK_RETURN(werr);
|
||||||
|
|
||||||
if (!server_name || !domain_name) {
|
if (!domain_name) {
|
||||||
return WERR_INVALID_PARAM;
|
return WERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->in.server_name = talloc_strdup(mem_ctx, server_name);
|
|
||||||
W_ERROR_HAVE_NO_MEMORY(r->in.server_name);
|
|
||||||
|
|
||||||
r->in.domain_name = talloc_strdup(mem_ctx, domain_name);
|
r->in.domain_name = talloc_strdup(mem_ctx, domain_name);
|
||||||
W_ERROR_HAVE_NO_MEMORY(r->in.domain_name);
|
W_ERROR_HAVE_NO_MEMORY(r->in.domain_name);
|
||||||
|
|
||||||
|
if (server_name) {
|
||||||
|
r->in.server_name = talloc_strdup(mem_ctx, server_name);
|
||||||
|
W_ERROR_HAVE_NO_MEMORY(r->in.server_name);
|
||||||
|
} else if (join_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) {
|
||||||
|
NTSTATUS status;
|
||||||
|
struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
|
||||||
|
uint32_t flags = DS_DIRECTORY_SERVICE_REQUIRED |
|
||||||
|
DS_WRITABLE_REQUIRED |
|
||||||
|
DS_RETURN_DNS_NAME;
|
||||||
|
status = DsGetDcName(mem_ctx, NULL, domain_name,
|
||||||
|
NULL, NULL, flags, &info);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
return ntstatus_to_werror(status);
|
||||||
|
}
|
||||||
|
r->in.server_name = talloc_strdup(mem_ctx, info->domain_controller_name);
|
||||||
|
W_ERROR_HAVE_NO_MEMORY(r->in.server_name);
|
||||||
|
}
|
||||||
|
|
||||||
if (account_ou) {
|
if (account_ou) {
|
||||||
r->in.account_ou = talloc_strdup(mem_ctx, account_ou);
|
r->in.account_ou = talloc_strdup(mem_ctx, account_ou);
|
||||||
W_ERROR_HAVE_NO_MEMORY(r->in.account_ou);
|
W_ERROR_HAVE_NO_MEMORY(r->in.account_ou);
|
||||||
@@ -158,17 +173,8 @@ static WERROR libnetapi_NetJoinDomain(struct libnetapi_ctx *ctx,
|
|||||||
|
|
||||||
if (!server_name || is_myname_or_ipaddr(server_name)) {
|
if (!server_name || is_myname_or_ipaddr(server_name)) {
|
||||||
|
|
||||||
const char *dc = NULL;
|
|
||||||
|
|
||||||
/* FIXME: DsGetDcName */
|
|
||||||
if (server_name == NULL) {
|
|
||||||
dc = domain_name;
|
|
||||||
} else {
|
|
||||||
dc = domain_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
werr = NetJoinDomainLocal(ctx,
|
werr = NetJoinDomainLocal(ctx,
|
||||||
dc,
|
server_name,
|
||||||
domain_name,
|
domain_name,
|
||||||
account_ou,
|
account_ou,
|
||||||
Account,
|
Account,
|
||||||
|
|||||||
Reference in New Issue
Block a user