From: Stefan Metzmacher Date: Tue, 11 Feb 2025 22:19:51 +0000 (+0100) Subject: libcli/lsarpc: let trust_forest_{record_lsa_2to1,info_to_lsa}() handle SCANNER_INFO X-Git-Tag: tevent-0.17.0~694 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ce5e3777979057cb4721b86e141243f67cb7b8a4;p=thirdparty%2Fsamba.git libcli/lsarpc: let trust_forest_{record_lsa_2to1,info_to_lsa}() handle SCANNER_INFO We need to convert the [LSA_]FOREST_TRUST_SCANNER_INFO record into a binary record, but with LSA_FOREST_TRUST_SCANNER_INFO as type. Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme --- diff --git a/libcli/lsarpc/util_lsarpc.c b/libcli/lsarpc/util_lsarpc.c index f279e197277..ab5406004dd 100644 --- a/libcli/lsarpc/util_lsarpc.c +++ b/libcli/lsarpc/util_lsarpc.c @@ -822,6 +822,12 @@ static NTSTATUS trust_forest_record_lsa_2to1(TALLOC_CTX *mem_ctx, const struct lsa_ForestTrustRecord2 *lftr2, struct lsa_ForestTrustRecord *lftr) { + const struct lsa_ForestTrustDomainInfo *s_sdi = NULL; + union ForestTrustData fta = { .unknown = { .size = 0, }, }; + struct ForestTrustDataDomainInfo *d_sdi = NULL; + enum ndr_err_code ndr_err; + DATA_BLOB blob = { .length = 0, }; + if (lftr2 == NULL) { return NT_STATUS_INVALID_PARAMETER; } @@ -859,8 +865,33 @@ static NTSTATUS trust_forest_record_lsa_2to1(TALLOC_CTX *mem_ctx, return NT_STATUS_OK; case LSA_FOREST_TRUST_SCANNER_INFO: - /* TODO */ - break; + fta.scanner_info.sub_type = FOREST_TRUST_SCANNER_INFO; + s_sdi = &lftr2->forest_trust_data.scanner_info; + d_sdi = &fta.scanner_info.info; + + if (s_sdi->domain_sid != NULL) { + d_sdi->sid = *s_sdi->domain_sid; + } else { + d_sdi->sid = (struct dom_sid) { .sid_rev_num = 0, }; + } + + d_sdi->dns_name.string = s_sdi->dns_domain_name.string; + d_sdi->netbios_name.string = s_sdi->netbios_domain_name.string; + + ndr_err = ndr_push_union_blob(&blob, + mem_ctx, + &fta, + FOREST_TRUST_SCANNER_INFO, + (ndr_push_flags_fn_t)ndr_push_ForestTrustData); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + return ndr_map_error2ntstatus(ndr_err); + } + + lftr->type = LSA_FOREST_TRUST_SCANNER_INFO; + lftr->forest_trust_data.data.data = blob.data; + lftr->forest_trust_data.data.length = blob.length; + + return NT_STATUS_OK; } return NT_STATUS_NOT_SUPPORTED;