#undef strcasecmp
-NTSTATUS dsdb_trust_forest_info_from_lsa(TALLOC_CTX *mem_ctx,
- const struct lsa_ForestTrustInformation *lfti,
- struct ForestTrustInfo **_fti)
-{
- struct ForestTrustInfo *fti;
- uint32_t i;
-
- *_fti = NULL;
-
- fti = talloc_zero(mem_ctx, struct ForestTrustInfo);
- if (fti == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
-
- fti->version = 1;
- fti->count = lfti->count;
- fti->records = talloc_zero_array(mem_ctx,
- struct ForestTrustInfoRecordArmor,
- fti->count);
- if (fti->records == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_NO_MEMORY;
- }
-
- for (i = 0; i < fti->count; i++) {
- const struct lsa_ForestTrustRecord *lftr = lfti->entries[i];
- struct ForestTrustInfoRecord *ftr = &fti->records[i].record;
- struct ForestTrustString *str = NULL;
- const struct lsa_StringLarge *lstr = NULL;
- const struct lsa_ForestTrustDomainInfo *linfo = NULL;
- struct ForestTrustDataDomainInfo *info = NULL;
-
- if (lftr == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- ftr->flags = lftr->flags;
- ftr->timestamp = lftr->time;
- ftr->type = (enum ForestTrustInfoRecordType)lftr->type;
-
- switch (lftr->type) {
- case LSA_FOREST_TRUST_TOP_LEVEL_NAME:
- lstr = &lftr->forest_trust_data.top_level_name;
- str = &ftr->data.name;
-
- str->string = talloc_strdup(mem_ctx, lstr->string);
- if (str->string == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_NO_MEMORY;
- }
-
- break;
-
- case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX:
- lstr = &lftr->forest_trust_data.top_level_name_ex;
- str = &ftr->data.name;
-
- str->string = talloc_strdup(mem_ctx, lstr->string);
- if (str->string == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_NO_MEMORY;
- }
-
- break;
-
- case LSA_FOREST_TRUST_DOMAIN_INFO:
- linfo = &lftr->forest_trust_data.domain_info;
- info = &ftr->data.info;
-
- if (linfo->domain_sid == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_INVALID_PARAMETER;
- }
- info->sid = *linfo->domain_sid;
-
- lstr = &linfo->dns_domain_name;
- str = &info->dns_name;
- str->string = talloc_strdup(mem_ctx, lstr->string);
- if (str->string == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_NO_MEMORY;
- }
-
- lstr = &linfo->netbios_domain_name;
- str = &info->netbios_name;
- str->string = talloc_strdup(mem_ctx, lstr->string);
- if (str->string == NULL) {
- TALLOC_FREE(fti);
- return NT_STATUS_NO_MEMORY;
- }
-
- break;
-
- default:
- return NT_STATUS_NOT_SUPPORTED;
- }
- }
-
- *_fti = fti;
- return NT_STATUS_OK;
-}
-
-static NTSTATUS dsdb_trust_forest_record_to_lsa(TALLOC_CTX *mem_ctx,
- const struct ForestTrustInfoRecord *ftr,
- struct lsa_ForestTrustRecord **_lftr)
-{
- struct lsa_ForestTrustRecord *lftr = NULL;
- const struct ForestTrustString *str = NULL;
- struct lsa_StringLarge *lstr = NULL;
- const struct ForestTrustDataDomainInfo *info = NULL;
- struct lsa_ForestTrustDomainInfo *linfo = NULL;
-
- *_lftr = NULL;
-
- lftr = talloc_zero(mem_ctx, struct lsa_ForestTrustRecord);
- if (lftr == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
-
- lftr->flags = ftr->flags;
- lftr->time = ftr->timestamp;
- lftr->type = (enum lsa_ForestTrustRecordType)ftr->type;
-
- switch (lftr->type) {
- case LSA_FOREST_TRUST_TOP_LEVEL_NAME:
- lstr = &lftr->forest_trust_data.top_level_name;
- str = &ftr->data.name;
-
- lstr->string = talloc_strdup(mem_ctx, str->string);
- if (lstr->string == NULL) {
- TALLOC_FREE(lftr);
- return NT_STATUS_NO_MEMORY;
- }
-
- break;
-
- case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX:
- lstr = &lftr->forest_trust_data.top_level_name_ex;
- str = &ftr->data.name;
-
- lstr->string = talloc_strdup(mem_ctx, str->string);
- if (lstr->string == NULL) {
- TALLOC_FREE(lftr);
- return NT_STATUS_NO_MEMORY;
- }
-
- break;
-
- case LSA_FOREST_TRUST_DOMAIN_INFO:
- linfo = &lftr->forest_trust_data.domain_info;
- info = &ftr->data.info;
-
- linfo->domain_sid = dom_sid_dup(lftr, &info->sid);
- if (linfo->domain_sid == NULL) {
- TALLOC_FREE(lftr);
- return NT_STATUS_NO_MEMORY;
- }
-
- lstr = &linfo->dns_domain_name;
- str = &info->dns_name;
- lstr->string = talloc_strdup(mem_ctx, str->string);
- if (lstr->string == NULL) {
- TALLOC_FREE(lftr);
- return NT_STATUS_NO_MEMORY;
- }
-
- lstr = &linfo->netbios_domain_name;
- str = &info->netbios_name;
- lstr->string = talloc_strdup(mem_ctx, str->string);
- if (lstr->string == NULL) {
- TALLOC_FREE(lftr);
- return NT_STATUS_NO_MEMORY;
- }
-
- break;
-
- default:
- return NT_STATUS_NOT_SUPPORTED;
- }
-
- *_lftr = lftr;
- return NT_STATUS_OK;
-}
-
-NTSTATUS dsdb_trust_forest_info_to_lsa(TALLOC_CTX *mem_ctx,
- const struct ForestTrustInfo *fti,
- struct lsa_ForestTrustInformation **_lfti)
-{
- struct lsa_ForestTrustInformation *lfti;
- uint32_t i;
-
- *_lfti = NULL;
-
- if (fti->version != 1) {
- return NT_STATUS_INVALID_PARAMETER;
- }
-
- lfti = talloc_zero(mem_ctx, struct lsa_ForestTrustInformation);
- if (lfti == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
-
- lfti->count = fti->count;
- lfti->entries = talloc_zero_array(mem_ctx,
- struct lsa_ForestTrustRecord *,
- lfti->count);
- if (lfti->entries == NULL) {
- TALLOC_FREE(lfti);
- return NT_STATUS_NO_MEMORY;
- }
-
- for (i = 0; i < fti->count; i++) {
- struct ForestTrustInfoRecord *ftr = &fti->records[i].record;
- struct lsa_ForestTrustRecord *lftr = NULL;
- NTSTATUS status;
-
- status = dsdb_trust_forest_record_to_lsa(lfti->entries, ftr,
- &lftr);
- if (!NT_STATUS_IS_OK(status)) {
- TALLOC_FREE(lfti);
- return NT_STATUS_NO_MEMORY;
- }
- lfti->entries[i] = lftr;
- }
-
- *_lfti = lfti;
- return NT_STATUS_OK;
-}
static NTSTATUS dsdb_trust_forest_info_add_record(struct lsa_ForestTrustInformation *fti,
const struct lsa_ForestTrustRecord *ftr)