|
|
ac7d03 |
From 3353a259bb8ace57efcfd784f2a0c0c6884d9966 Mon Sep 17 00:00:00 2001
|
|
|
ac7d03 |
From: Alexander Bokovoy <abokovoy@redhat.com>
|
|
|
ac7d03 |
Date: Wed, 5 Apr 2017 12:37:10 +0300
|
|
|
ac7d03 |
Subject: [PATCH] trust: always use oddjobd helper for fetching trust
|
|
|
ac7d03 |
information
|
|
|
ac7d03 |
|
|
|
ac7d03 |
Since introduction of privilege separation in IPA framework none of the
|
|
|
ac7d03 |
operations that require direct access to the framework's credentials can
|
|
|
ac7d03 |
be done. All authentication has to be performed with GSSAPI.
|
|
|
ac7d03 |
|
|
|
ac7d03 |
As result, we cannot obtain TGT for HTTP/.. principal with kinit
|
|
|
ac7d03 |
anymore, so it is better to re-route all types of trust to oddjobd
|
|
|
ac7d03 |
helper and get rid of casing out two-way trust.
|
|
|
ac7d03 |
|
|
|
ac7d03 |
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1438366
|
|
|
ac7d03 |
|
|
|
ac7d03 |
Reviewed-By: Martin Basti <mbasti@redhat.com>
|
|
|
ac7d03 |
---
|
|
|
ac7d03 |
ipaserver/plugins/trust.py | 43 ++++++++++---------------------------------
|
|
|
ac7d03 |
1 file changed, 10 insertions(+), 33 deletions(-)
|
|
|
ac7d03 |
|
|
|
ac7d03 |
diff --git a/ipaserver/plugins/trust.py b/ipaserver/plugins/trust.py
|
|
|
ac7d03 |
index 3de2458466214044f6b1b5d8560a2a7ac53ede57..0829f8c714f15c4384a89e18ba29e417405c249c 100644
|
|
|
ac7d03 |
--- a/ipaserver/plugins/trust.py
|
|
|
ac7d03 |
+++ b/ipaserver/plugins/trust.py
|
|
|
ac7d03 |
@@ -1742,47 +1742,24 @@ class trust_fetch_domains(LDAPRetrieve):
|
|
|
ac7d03 |
ldap = self.api.Backend.ldap2
|
|
|
ac7d03 |
verify_samba_component_presence(ldap, self.api)
|
|
|
ac7d03 |
|
|
|
ac7d03 |
- trust = self.api.Command.trust_show(
|
|
|
ac7d03 |
- keys[0], all=True, raw=True)['result']
|
|
|
ac7d03 |
+ # Check first that the trust actually exists
|
|
|
ac7d03 |
+ result = self.api.Command.trust_show(keys[0], all=True, raw=True)
|
|
|
ac7d03 |
+ self.obj.warning_if_ad_trust_dom_have_missing_SID(result, **options)
|
|
|
ac7d03 |
|
|
|
ac7d03 |
result = dict()
|
|
|
ac7d03 |
result['result'] = []
|
|
|
ac7d03 |
result['count'] = 0
|
|
|
ac7d03 |
result['truncated'] = False
|
|
|
ac7d03 |
|
|
|
ac7d03 |
- trust_direction = int(trust['ipanttrustdirection'][0])
|
|
|
ac7d03 |
- is_nontransitive = int(trust.get('ipanttrustattributes',
|
|
|
ac7d03 |
- [0])[0]) & LSA_TRUST_ATTRIBUTE_NON_TRANSITIVE
|
|
|
ac7d03 |
# For one-way trust and external trust fetch over DBus.
|
|
|
ac7d03 |
# We don't get the list in this case.
|
|
|
ac7d03 |
- if trust_direction != TRUST_BIDIRECTIONAL or is_nontransitive:
|
|
|
ac7d03 |
- fetch_trusted_domains_over_dbus(self.api, self.log, keys[0])
|
|
|
ac7d03 |
- result['summary'] = unicode(_('List of trust domains successfully refreshed. Use trustdomain-find command to list them.'))
|
|
|
ac7d03 |
- return result
|
|
|
ac7d03 |
-
|
|
|
ac7d03 |
- trustinstance = ipaserver.dcerpc.TrustDomainJoins(self.api)
|
|
|
ac7d03 |
- if not trustinstance.configured:
|
|
|
ac7d03 |
- raise errors.NotFound(
|
|
|
ac7d03 |
- name=_('AD Trust setup'),
|
|
|
ac7d03 |
- reason=_(
|
|
|
ac7d03 |
- 'Cannot perform join operation without own domain '
|
|
|
ac7d03 |
- 'configured. Make sure you have run ipa-adtrust-install '
|
|
|
ac7d03 |
- 'on the IPA server first'
|
|
|
ac7d03 |
- )
|
|
|
ac7d03 |
- )
|
|
|
ac7d03 |
-
|
|
|
ac7d03 |
- trustinstance.populate_remote_domain(keys[0])
|
|
|
ac7d03 |
-
|
|
|
ac7d03 |
- res = fetch_domains_from_trust(self.api, trustinstance, **options)
|
|
|
ac7d03 |
- domains = add_new_domains_from_trust(self.api, trustinstance, trust, res, **options)
|
|
|
ac7d03 |
-
|
|
|
ac7d03 |
- if len(domains) > 0:
|
|
|
ac7d03 |
- result['summary'] = unicode(_('List of trust domains successfully refreshed'))
|
|
|
ac7d03 |
- else:
|
|
|
ac7d03 |
- result['summary'] = unicode(_('No new trust domains were found'))
|
|
|
ac7d03 |
-
|
|
|
ac7d03 |
- result['result'] = domains
|
|
|
ac7d03 |
- result['count'] = len(domains)
|
|
|
ac7d03 |
+ # With privilege separation we also cannot authenticate as
|
|
|
ac7d03 |
+ # HTTP/ principal because we have no access to its key material.
|
|
|
ac7d03 |
+ # Thus, we'll use DBus call out to oddjobd helper in all cases
|
|
|
ac7d03 |
+ fetch_trusted_domains_over_dbus(self.api, self.log, keys[0])
|
|
|
ac7d03 |
+ result['summary'] = unicode(_('List of trust domains successfully '
|
|
|
ac7d03 |
+ 'refreshed. Use trustdomain-find '
|
|
|
ac7d03 |
+ 'command to list them.'))
|
|
|
ac7d03 |
return result
|
|
|
ac7d03 |
|
|
|
ac7d03 |
|
|
|
ac7d03 |
--
|
|
|
ac7d03 |
2.9.3
|
|
|
ac7d03 |
|