Blame SOURCES/0005-Fall-back-to-krbprincipalname-when-validating-host-a_rhbz#1979625.patch

b1d427
From 8ad535b618d60fa016061212ff85d0ad28ccae59 Mon Sep 17 00:00:00 2001
b1d427
From: Rob Crittenden <rcritten@redhat.com>
b1d427
Date: Mon, 12 Jul 2021 11:02:10 -0400
b1d427
Subject: [PATCH] Fall back to krbprincipalname when validating host auth
b1d427
 indicators
b1d427
b1d427
When adding a new host the principal cannot be determined because it
b1d427
relies on either:
b1d427
b1d427
a) an entry to already exist
b1d427
b) krbprincipalname be a component of the dn
b1d427
b1d427
As a result the full dn is being passed into ipapython.Kerberos
b1d427
which can't parse it.
b1d427
b1d427
Look into the entry in validate_validate_auth_indicator() for
b1d427
krbprincipalname in this case.
b1d427
b1d427
https://pagure.io/freeipa/issue/8206
b1d427
b1d427
Signed-off-by: Rob Crittenden <rcritten@redhat.com>
b1d427
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
b1d427
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
b1d427
---
b1d427
 ipaserver/plugins/service.py             |  5 +++++
b1d427
 ipatests/test_xmlrpc/test_host_plugin.py | 11 +++++++++++
b1d427
 2 files changed, 16 insertions(+)
b1d427
b1d427
diff --git a/ipaserver/plugins/service.py b/ipaserver/plugins/service.py
b1d427
index cfbbff3c6..498f5e444 100644
b1d427
--- a/ipaserver/plugins/service.py
b1d427
+++ b/ipaserver/plugins/service.py
b1d427
@@ -209,6 +209,11 @@ def validate_auth_indicator(entry):
b1d427
     # and shouldn't be allowed to have auth indicators.
b1d427
     # https://pagure.io/freeipa/issue/8206
b1d427
     pkey = api.Object['service'].get_primary_key_from_dn(entry.dn)
b1d427
+    if pkey == str(entry.dn):
b1d427
+        # krbcanonicalname may not be set yet if this is a host entry,
b1d427
+        # try krbprincipalname
b1d427
+        if 'krbprincipalname' in entry:
b1d427
+            pkey = entry['krbprincipalname']
b1d427
     principal = kerberos.Principal(pkey)
b1d427
     server = api.Command.server_find(principal.hostname)['result']
b1d427
     if server:
b1d427
diff --git a/ipatests/test_xmlrpc/test_host_plugin.py b/ipatests/test_xmlrpc/test_host_plugin.py
b1d427
index 9cfde3565..ff50e796c 100644
b1d427
--- a/ipatests/test_xmlrpc/test_host_plugin.py
b1d427
+++ b/ipatests/test_xmlrpc/test_host_plugin.py
b1d427
@@ -615,6 +615,17 @@ class TestProtectedMaster(XMLRPC_test):
b1d427
         )):
b1d427
             command()
b1d427
 
b1d427
+    def test_add_non_master_with_auth_ind(self, host5):
b1d427
+        host5.ensure_missing()
b1d427
+        command = host5.make_command(
b1d427
+            'host_add', host5.fqdn, krbprincipalauthind=['radius'],
b1d427
+            force=True
b1d427
+        )
b1d427
+        result = command()
b1d427
+        # The fact that the command succeeds exercises the change but
b1d427
+        # let's check the indicator as well.
b1d427
+        assert result['result']['krbprincipalauthind'] == ('radius',)
b1d427
+
b1d427
 
b1d427
 @pytest.mark.tier1
b1d427
 class TestValidation(XMLRPC_test):
b1d427
-- 
b1d427
2.31.1
b1d427