From fddbff3d44adcfa6715afe0a62d0fd49ed890e7b Mon Sep 17 00:00:00 2001 From: Samuel Cabrero Date: Thu, 31 Aug 2023 12:43:22 +0200 Subject: [PATCH] s3:libnetapi: Add NetComposeOfflineDomainJoin() boilerplate BUG: https://bugzilla.samba.org/show_bug.cgi?id=13577 Signed-off-by: Samuel Cabrero Reviewed-by: Andrew Bartlett (cherry picked from commit 532701e3cce9d15e95166ee7c24cd1e4af51fcc4) --- source3/lib/netapi/joindomain.c | 18 +++++++++ source3/lib/netapi/libnetapi.c | 67 +++++++++++++++++++++++++++++++++ source3/lib/netapi/libnetapi.h | 17 +++++++++ 3 files changed, 102 insertions(+) diff --git a/source3/lib/netapi/joindomain.c b/source3/lib/netapi/joindomain.c index 31e3ac74b1e..22457158728 100644 --- a/source3/lib/netapi/joindomain.c +++ b/source3/lib/netapi/joindomain.c @@ -947,3 +947,21 @@ WERROR NetRequestOfflineDomainJoin_l(struct libnetapi_ctx *ctx, return W_ERROR(NERR_JoinPerformedMustRestart); } + +/**************************************************************** +****************************************************************/ + +WERROR NetComposeOfflineDomainJoin_r(struct libnetapi_ctx *ctx, + struct NetComposeOfflineDomainJoin *r) +{ + return WERR_NOT_SUPPORTED; +} + +/**************************************************************** +****************************************************************/ + +WERROR NetComposeOfflineDomainJoin_l(struct libnetapi_ctx *ctx, + struct NetComposeOfflineDomainJoin *r) +{ + return WERR_NOT_SUPPORTED; +} diff --git a/source3/lib/netapi/libnetapi.c b/source3/lib/netapi/libnetapi.c index 2fd97bba75b..29073168ef8 100644 --- a/source3/lib/netapi/libnetapi.c +++ b/source3/lib/netapi/libnetapi.c @@ -392,6 +392,73 @@ NET_API_STATUS NetRequestOfflineDomainJoin(uint8_t *provision_bin_data /* [in] [ return (NET_API_STATUS)r.out.result; } +/**************************************************************** + NetComposeOfflineDomainJoin +****************************************************************/ +NET_API_STATUS NetComposeOfflineDomainJoin(const char *dns_domain_name /* [in] [ref] */, + const char *netbios_domain_name /* [in] [ref] */, + struct domsid *domain_sid /* [in] [ref] */, + struct GUID *domain_guid /* [in] [ref] */, + const char *forest_name /* [in] [ref] */, + const char *machine_account_name /* [in] [ref] */, + const char *machine_account_password /* [in] [ref] */, + const char *dc_name /* [in] [unique] */, + const char *dc_address /* [in] [unique] */, + int domain_is_ad /* [in] */, + uint8_t **compose_bin_data /* [in,out] [unique] */, + uint32_t *compose_bin_data_size /* [in,out] [unique] */, + const char * *compose_text_data /* [in,out] [unique] */) +{ + struct NetComposeOfflineDomainJoin r; + struct libnetapi_ctx *ctx = NULL; + NET_API_STATUS status; + WERROR werr; + TALLOC_CTX *frame = talloc_stackframe(); + + ZERO_STRUCT(r); + + status = libnetapi_getctx(&ctx); + if (status != 0) { + TALLOC_FREE(frame); + return status; + } + + /* In parameters */ + r.in.dns_domain_name = dns_domain_name; + r.in.netbios_domain_name = netbios_domain_name; + r.in.domain_sid = domain_sid; + r.in.domain_guid = domain_guid; + r.in.forest_name = forest_name; + r.in.machine_account_name = machine_account_name; + r.in.machine_account_password = machine_account_password; + r.in.dc_name = dc_name; + r.in.dc_address = dc_address; + r.in.domain_is_ad = domain_is_ad; + r.in.compose_bin_data = compose_bin_data; + r.in.compose_bin_data_size = compose_bin_data_size; + r.in.compose_text_data = compose_text_data; + + /* Out parameters */ + r.out.compose_bin_data = compose_bin_data; + r.out.compose_bin_data_size = compose_bin_data_size; + r.out.compose_text_data = compose_text_data; + + if (DEBUGLEVEL >= 10) { + NDR_PRINT_IN_DEBUG(NetComposeOfflineDomainJoin, &r); + } + + werr = NetComposeOfflineDomainJoin_l(ctx, &r); + + r.out.result = W_ERROR_V(werr); + + if (DEBUGLEVEL >= 10) { + NDR_PRINT_OUT_DEBUG(NetComposeOfflineDomainJoin, &r); + } + + TALLOC_FREE(frame); + return (NET_API_STATUS)r.out.result; +} + /**************************************************************** NetServerGetInfo ****************************************************************/ diff --git a/source3/lib/netapi/libnetapi.h b/source3/lib/netapi/libnetapi.h index d217656845d..784d467ff55 100644 --- a/source3/lib/netapi/libnetapi.h +++ b/source3/lib/netapi/libnetapi.h @@ -83,6 +83,23 @@ WERROR NetRequestOfflineDomainJoin_r(struct libnetapi_ctx *ctx, struct NetRequestOfflineDomainJoin *r); WERROR NetRequestOfflineDomainJoin_l(struct libnetapi_ctx *ctx, struct NetRequestOfflineDomainJoin *r); +NET_API_STATUS NetComposeOfflineDomainJoin(const char *dns_domain_name /* [in] [ref] */, + const char *netbios_domain_name /* [in] [ref] */, + struct domsid *domain_sid /* [in] [ref] */, + struct GUID *domain_guid /* [in] [ref] */, + const char *forest_name /* [in] [ref] */, + const char *machine_account_name /* [in] [ref] */, + const char *machine_account_password /* [in] [ref] */, + const char *dc_name /* [in] [unique] */, + const char *dc_address /* [in] [unique] */, + int domain_is_ad /* [in] */, + uint8_t **provision_bin_data /* [in,out] [unique] */, + uint32_t *provision_bin_data_size /* [in,out] [unique] */, + const char * *provision_text_data /* [in,out] [unique] */); +WERROR NetComposeOfflineDomainJoin_r(struct libnetapi_ctx *ctx, + struct NetComposeOfflineDomainJoin *r); +WERROR NetComposeOfflineDomainJoin_l(struct libnetapi_ctx *ctx, + struct NetComposeOfflineDomainJoin *r); NET_API_STATUS NetServerGetInfo(const char * server_name /* [in] [unique] */, uint32_t level /* [in] */, uint8_t **buffer /* [out] [ref] */); -- 2.47.2