freeipa/ipaserver
Alexander Bokovoy 3c38aea6fc ipaserver/dcerpc: fix exclusion entry with a forest trust domain info returned
When looking through the topology of a trusted forest, we should support
all types of forest trust records. Since Samba Python bindings parse the
data into a typed structure, a type of the record has to be taken into
account or there will be type mismatch when accessing elements of the
union:

        typedef [switch_type(lsa_ForestTrustRecordType)] union {
                [case(LSA_FOREST_TRUST_TOP_LEVEL_NAME)] lsa_StringLarge top_level_name;
                [case(LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX)] lsa_StringLarge top_level_name_ex;
                [case(LSA_FOREST_TRUST_DOMAIN_INFO)] lsa_ForestTrustDomainInfo domain_info;
                [default] lsa_ForestTrustBinaryData data;
        } lsa_ForestTrustData;

        typedef struct {
                lsa_ForestTrustRecordFlags flags;
                lsa_ForestTrustRecordType type;
                NTTIME_hyper time;
                [switch_is(type)] lsa_ForestTrustData forest_trust_data;
        } lsa_ForestTrustRecord;

        typedef [public] struct {
                [range(0,4000)] uint32 count;
                [size_is(count)] lsa_ForestTrustRecord **entries;
        } lsa_ForestTrustInformation;

Each entry in the lsa_ForestTrustInformation has forest_trust_data
member but its content depends on the value of a type member
(forest_trust_data is a union of all possible structures).

Previously we assumed only TLN or TLN exclusion record which were
of the same type (lsa_StringLarge). Access to forest_trust_data.string
fails when forest_trust_data's type is lsa_ForestTrustDomainInfo as it
has no string member.

Fix the code by properly accessing the dns_domain_name from the
lsa_ForestTrustDomainInfo structure.

Fixes: https://pagure.io/freeipa/issue/7828
Reviewed-By: Christian Heimes <cheimes@redhat.com>
2019-01-10 11:24:08 +01:00
..
advise Add install/remove package helpers to advise 2018-12-11 13:46:52 +01:00
dnssec Py3: Remove subclassing from object 2018-09-27 11:49:04 +02:00
install Use debug logger in ntpd_cleanup() 2019-01-09 11:15:35 +01:00
plugins Handle service_del with bad service name 2018-12-11 12:14:32 +01:00
secrets Py3: Replace six.moves imports 2018-10-05 12:06:19 +02:00
__init__.py Change FreeIPA license to GPLv3+ 2010-12-20 17:19:53 -05:00
dcerpc_common.py Py3: Replace six.text_type with str 2018-09-27 16:11:18 +02:00
dcerpc.py ipaserver/dcerpc: fix exclusion entry with a forest trust domain info returned 2019-01-10 11:24:08 +01:00
dns_data_management.py Py3: Remove subclassing from object 2018-09-27 11:49:04 +02:00
Makefile.am Build: Makefiles for Python packages 2016-11-09 13:08:32 +01:00
masters.py Unify and simplify LDAP service discovery 2018-11-21 08:57:08 +01:00
p11helper.py pylint 2.2: Fix unnecessary pass statement 2018-11-26 16:54:43 +01:00
rpcserver.py Py3: Replace six.moves imports 2018-10-05 12:06:19 +02:00
servroles.py pylint 2.2: Fix unnecessary pass statement 2018-11-26 16:54:43 +01:00
setup.cfg Port all setup.py to setuptools 2016-10-20 18:43:37 +02:00
setup.py Cleanup shebang and executable bit 2018-07-05 19:46:42 +02:00
topology.py Py3: Remove subclassing from object 2018-09-27 11:49:04 +02:00