ac7d03
From efd08380bbdda59a63afd584bc4c0ef3426b14ce Mon Sep 17 00:00:00 2001
ac7d03
From: David Kupka <dkupka@redhat.com>
ac7d03
Date: Wed, 14 Jun 2017 15:39:58 +0200
ac7d03
Subject: [PATCH] kra: promote: Get ticket before calling custodia
ac7d03
ac7d03
When installing second (or consequent) KRA instance keys are retrieved
ac7d03
using custodia. Custodia checks that the keys are synchronized in
ac7d03
master's directory server and the check uses GSSAPI and therefore fails
ac7d03
if there's no ticket in ccache.
ac7d03
ac7d03
https://pagure.io/freeipa/issue/7020
ac7d03
ac7d03
Reviewed-By: Stanislav Laznicka <slaznick@redhat.com>
ac7d03
---
ac7d03
 ipaserver/install/kra.py | 21 ++++++++++++++-------
ac7d03
 1 file changed, 14 insertions(+), 7 deletions(-)
ac7d03
ac7d03
diff --git a/ipaserver/install/kra.py b/ipaserver/install/kra.py
ac7d03
index f3454061280661d7b0fc2899142da9dc8783841a..3545b301a977f4b7e7801ca1ef87d594bb3ba54f 100644
ac7d03
--- a/ipaserver/install/kra.py
ac7d03
+++ b/ipaserver/install/kra.py
ac7d03
@@ -10,6 +10,7 @@ import os
ac7d03
 import shutil
ac7d03
 
ac7d03
 from ipalib import api
ac7d03
+from ipalib.install.kinit import kinit_keytab
ac7d03
 from ipaplatform import services
ac7d03
 from ipaplatform.paths import paths
ac7d03
 from ipapython import certdb
ac7d03
@@ -84,13 +85,19 @@ def install(api, replica_config, options):
ac7d03
             return
ac7d03
         krafile = os.path.join(replica_config.dir, 'kracert.p12')
ac7d03
         if options.promote:
ac7d03
-            custodia = custodiainstance.CustodiaInstance(
ac7d03
-                replica_config.host_name,
ac7d03
-                replica_config.realm_name)
ac7d03
-            custodia.get_kra_keys(
ac7d03
-                replica_config.kra_host_name,
ac7d03
-                krafile,
ac7d03
-                replica_config.dirman_password)
ac7d03
+            with ipautil.private_ccache():
ac7d03
+                ccache = os.environ['KRB5CCNAME']
ac7d03
+                kinit_keytab(
ac7d03
+                    'host/{env.host}@{env.realm}'.format(env=api.env),
ac7d03
+                    paths.KRB5_KEYTAB,
ac7d03
+                    ccache)
ac7d03
+                custodia = custodiainstance.CustodiaInstance(
ac7d03
+                    replica_config.host_name,
ac7d03
+                    replica_config.realm_name)
ac7d03
+                custodia.get_kra_keys(
ac7d03
+                    replica_config.kra_host_name,
ac7d03
+                    krafile,
ac7d03
+                    replica_config.dirman_password)
ac7d03
         else:
ac7d03
             cafile = os.path.join(replica_config.dir, 'cacert.p12')
ac7d03
             if not ipautil.file_exists(cafile):
ac7d03
-- 
ac7d03
2.9.4
ac7d03