Don't set delegation flag in client, we're using S4U2Proxy now

A forwardable ticket is still required but we no longer need to send
the TGT to the IPA server. A new flag, --delegate, is available if
the old behavior is required.

Set the minimum n-v-r for mod_auth_kerb and krb5-server to pick up
needed patches for S4U2Proxy to work.

https://fedorahosted.org/freeipa/ticket/1098
https://fedorahosted.org/freeipa/ticket/2246
This commit is contained in:
Rob Crittenden
2012-02-15 17:06:54 +01:00
committed by Martin Kosek
parent 95b1848f19
commit 2da6d6e746
7 changed files with 33 additions and 17 deletions

View File

@@ -93,17 +93,13 @@ Requires(pre): 389-ds-base >= 1.2.10-0.5.a5
Requires: openldap-clients Requires: openldap-clients
Requires: nss Requires: nss
Requires: nss-tools Requires: nss-tools
%if 0%{?fedora} >= 16 Requires: krb5-server >= 1.9.2-6
Requires: krb5-server >= 1.9.1-15
%else
Requires: krb5-server
%endif
Requires: krb5-pkinit-openssl Requires: krb5-pkinit-openssl
Requires: cyrus-sasl-gssapi%{?_isa} Requires: cyrus-sasl-gssapi%{?_isa}
Requires: ntp Requires: ntp
Requires: httpd Requires: httpd
Requires: mod_wsgi Requires: mod_wsgi
Requires: mod_auth_kerb >= 5.4-9 Requires: mod_auth_kerb >= 5.4-8
Requires: mod_nss >= 1.0.8-10 Requires: mod_nss >= 1.0.8-10
Requires: python-ldap Requires: python-ldap
Requires: python-krbV Requires: python-krbV
@@ -672,8 +668,11 @@ fi
%ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/ipa/ca.crt %ghost %attr(0644,root,apache) %config(noreplace) %{_sysconfdir}/ipa/ca.crt
%changelog %changelog
* Tue Jan 31 2012 Rob Crittenden <rcritten@redhat.com> - 2.99.0-15
- Set min for krb5-server to 1.9.2-6 to pick up needed s4u2proxy patches
* Wed Jan 11 2012 Rob Crittenden <rcritten@redhat.com> - 2.99.0-14 * Wed Jan 11 2012 Rob Crittenden <rcritten@redhat.com> - 2.99.0-14
- Set min for mod_auth_kerb to 5.4-9 to pick up s4u2proxy support - Set min for mod_auth_kerb to 5.4-8 to pick up s4u2proxy support
* Fri Dec 9 2011 Alexander Bokovoy <abokovoy@redhat.com> - 2.99.0-13 * Fri Dec 9 2011 Alexander Bokovoy <abokovoy@redhat.com> - 2.99.0-13
- Fix dependency for samba4-devel package - Fix dependency for samba4-devel package

View File

@@ -174,7 +174,7 @@ objectClass: groupOfPrincipals
objectClass: top objectClass: top
cn: ipa-http-delegation cn: ipa-http-delegation
memberPrincipal: HTTP/$HOST@$REALM memberPrincipal: HTTP/$HOST@$REALM
ipaAllowedTarget: cn=ipa-ldap-delegation-targets,cn=etc,$SUFFIX ipaAllowedTarget: cn=ipa-ldap-delegation-targets,cn=s4u2proxy,cn=etc,$SUFFIX
dn: cn=ipa-ldap-delegation-targets,cn=s4u2proxy,cn=etc,$SUFFIX dn: cn=ipa-ldap-delegation-targets,cn=s4u2proxy,cn=etc,$SUFFIX
changetype: add changetype: add

3
ipa.1
View File

@@ -37,6 +37,9 @@ Load configuration from \fIFILE\fR.
\fB\-d\fR, \fB\-\-debug\fR \fB\-d\fR, \fB\-\-debug\fR
Produce full debugging output. Produce full debugging output.
.TP .TP
\fB\-\-\-delegate\fR
Delegate the user's TGT to the IPA server
.TP
\fB\-e\fR \fIKEY=VAL\fR \fB\-e\fR \fIKEY=VAL\fR
Set environmental variable \fIKEY\fR to the value \fIVAL\fR. This option overrides configuration files. Set environmental variable \fIKEY\fR to the value \fIVAL\fR. This option overrides configuration files.
.TP .TP

View File

@@ -110,7 +110,7 @@ class Executioner(Backend):
self.Backend.ldap2.connect(ccache=ccache) self.Backend.ldap2.connect(ccache=ccache)
else: else:
self.Backend.xmlclient.connect(verbose=(self.env.verbose >= 2), self.Backend.xmlclient.connect(verbose=(self.env.verbose >= 2),
fallback=self.env.fallback) fallback=self.env.fallback, delegate=self.env.delegate)
if client_ip is not None: if client_ip is not None:
setattr(context, "client_ip", client_ip) setattr(context, "client_ip", client_ip)

View File

@@ -139,6 +139,7 @@ DEFAULT_CONFIG = (
('prompt_all', False), ('prompt_all', False),
('interactive', True), ('interactive', True),
('fallback', True), ('fallback', True),
('delegate', False),
# Enable certain optional plugins: # Enable certain optional plugins:
('enable_ra', False), ('enable_ra', False),

View File

@@ -530,6 +530,9 @@ class API(DictProxy):
parser.add_option('-d', '--debug', action='store_true', parser.add_option('-d', '--debug', action='store_true',
help='Produce full debuging output', help='Produce full debuging output',
) )
parser.add_option('--delegate', action='store_true',
help='Delegate the TGT to the IPA server',
)
parser.add_option('-v', '--verbose', action='count', parser.add_option('-v', '--verbose', action='count',
help='Produce more verbose output. A second -v displays the XML-RPC request', help='Produce more verbose output. A second -v displays the XML-RPC request',
) )
@@ -570,7 +573,7 @@ class API(DictProxy):
pass pass
overrides[str(key.strip())] = value.strip() overrides[str(key.strip())] = value.strip()
for key in ('conf', 'debug', 'verbose', 'prompt_all', 'interactive', for key in ('conf', 'debug', 'verbose', 'prompt_all', 'interactive',
'fallback'): 'fallback', 'delegate'):
value = getattr(options, key, None) value = getattr(options, key, None)
if value is not None: if value is not None:
overrides[key] = value overrides[key] = value

View File

@@ -232,6 +232,7 @@ class KerbTransport(SSLTransport):
""" """
Handles Kerberos Negotiation authentication to an XML-RPC server. Handles Kerberos Negotiation authentication to an XML-RPC server.
""" """
flags = kerberos.GSS_C_MUTUAL_FLAG | kerberos.GSS_C_SEQUENCE_FLAG
def _handle_exception(self, e, service=None): def _handle_exception(self, e, service=None):
(major, minor) = ipautil.get_gsserror(e) (major, minor) = ipautil.get_gsserror(e)
@@ -257,10 +258,7 @@ class KerbTransport(SSLTransport):
service = "HTTP@" + host.split(':')[0] service = "HTTP@" + host.split(':')[0]
try: try:
(rc, vc) = kerberos.authGSSClientInit(service, (rc, vc) = kerberos.authGSSClientInit(service, self.flags)
kerberos.GSS_C_DELEG_FLAG |
kerberos.GSS_C_MUTUAL_FLAG |
kerberos.GSS_C_SEQUENCE_FLAG)
except kerberos.GSSError, e: except kerberos.GSSError, e:
self._handle_exception(e) self._handle_exception(e)
@@ -284,6 +282,14 @@ class KerbTransport(SSLTransport):
return (host, extra_headers, x509) return (host, extra_headers, x509)
class DelegatedKerbTransport(KerbTransport):
"""
Handles Kerberos Negotiation authentication and TGT delegation to an
XML-RPC server.
"""
flags = kerberos.GSS_C_DELEG_FLAG | kerberos.GSS_C_MUTUAL_FLAG | \
kerberos.GSS_C_SEQUENCE_FLAG
class xmlclient(Connectible): class xmlclient(Connectible):
""" """
Forwarding backend plugin for XML-RPC client. Forwarding backend plugin for XML-RPC client.
@@ -303,7 +309,7 @@ class xmlclient(Connectible):
""" """
if not hasattr(self.conn, '_ServerProxy__transport'): if not hasattr(self.conn, '_ServerProxy__transport'):
return None return None
if isinstance(self.conn._ServerProxy__transport, KerbTransport): if type(self.conn._ServerProxy__transport) in (KerbTransport, DelegatedKerbTransport):
scheme = "https" scheme = "https"
else: else:
scheme = "http" scheme = "http"
@@ -337,13 +343,17 @@ class xmlclient(Connectible):
return servers return servers
def create_connection(self, ccache=None, verbose=False, fallback=True): def create_connection(self, ccache=None, verbose=False, fallback=True,
delegate=False):
servers = self.get_url_list() servers = self.get_url_list()
serverproxy = None serverproxy = None
for server in servers: for server in servers:
kw = dict(allow_none=True, encoding='UTF-8') kw = dict(allow_none=True, encoding='UTF-8')
kw['verbose'] = verbose kw['verbose'] = verbose
if server.startswith('https://'): if server.startswith('https://'):
if delegate:
kw['transport'] = DelegatedKerbTransport()
else:
kw['transport'] = KerbTransport() kw['transport'] = KerbTransport()
else: else:
kw['transport'] = LanguageAwareTransport() kw['transport'] = LanguageAwareTransport()