Blame SOURCES/0001-join-always-add-service-principals.patch

539d92
From cd296bf24e7cc56fb8d00bad7e9a56c539894309 Mon Sep 17 00:00:00 2001
539d92
From: Sumit Bose <sbose@redhat.com>
539d92
Date: Tue, 19 Mar 2019 20:44:36 +0100
539d92
Subject: [PATCH 1/2] join: always add service principals
539d92
539d92
If currently --service-name is given during the join only the service
539d92
names given by this option are added as service principal names. As a
539d92
result the default 'host' service principal name might be missing which
539d92
might cause issues e.g. with SSSD and sshd.
539d92
539d92
The patch makes sure the default service principals 'host' and
539d92
'RestrictedKrbHost' are always added during join.
539d92
539d92
Related to https://bugzilla.redhat.com/show_bug.cgi?id=1644311
539d92
---
539d92
 library/adenroll.c | 36 ++++++++++++++++++++++++++++++------
539d92
 1 file changed, 30 insertions(+), 6 deletions(-)
539d92
539d92
diff --git a/library/adenroll.c b/library/adenroll.c
539d92
index 58362c2..d1f746c 100644
539d92
--- a/library/adenroll.c
539d92
+++ b/library/adenroll.c
539d92
@@ -288,16 +288,23 @@ ensure_computer_password (adcli_result res,
539d92
 }
539d92
 
539d92
 static adcli_result
539d92
-ensure_service_names (adcli_result res,
539d92
-                      adcli_enroll *enroll)
539d92
+ensure_default_service_names (adcli_enroll *enroll)
539d92
 {
539d92
 	int length = 0;
539d92
 
539d92
-	if (res != ADCLI_SUCCESS)
539d92
-		return res;
539d92
+	if (enroll->service_names != NULL) {
539d92
+		length = seq_count (enroll->service_names);
539d92
 
539d92
-	if (enroll->service_names || enroll->service_principals)
539d92
-		return ADCLI_SUCCESS;
539d92
+		/* Make sure there is no entry with an unexpected case. AD
539d92
+		 * would not care but since the client side is case-sensitive
539d92
+		 * we should make sure we use the expected spelling. */
539d92
+		seq_remove_unsorted (enroll->service_names,
539d92
+		                     &length, "host",
539d92
+		                     (seq_compar)strcasecmp, free);
539d92
+		seq_remove_unsorted (enroll->service_names,
539d92
+		                     &length, "RestrictedKrbHost",
539d92
+		                     (seq_compar)strcasecmp, free);
539d92
+	}
539d92
 
539d92
 	/* The default ones specified by MS */
539d92
 	enroll->service_names = _adcli_strv_add (enroll->service_names,
539d92
@@ -307,6 +314,19 @@ ensure_service_names (adcli_result res,
539d92
 	return ADCLI_SUCCESS;
539d92
 }
539d92
 
539d92
+static adcli_result
539d92
+ensure_service_names (adcli_result res,
539d92
+                      adcli_enroll *enroll)
539d92
+{
539d92
+	if (res != ADCLI_SUCCESS)
539d92
+		return res;
539d92
+
539d92
+	if (enroll->service_names || enroll->service_principals)
539d92
+		return ADCLI_SUCCESS;
539d92
+
539d92
+	return ensure_default_service_names (enroll);
539d92
+}
539d92
+
539d92
 static adcli_result
539d92
 add_service_names_to_service_principals (adcli_enroll *enroll)
539d92
 {
539d92
@@ -2039,6 +2059,10 @@ adcli_enroll_join (adcli_enroll *enroll,
539d92
 	if (res != ADCLI_SUCCESS)
539d92
 		return res;
539d92
 
539d92
+	res = ensure_default_service_names (enroll);
539d92
+	if (res != ADCLI_SUCCESS)
539d92
+		return res;
539d92
+
539d92
 	res = adcli_enroll_prepare (enroll, flags);
539d92
 	if (res != ADCLI_SUCCESS)
539d92
 		return res;
539d92
-- 
539d92
2.20.1
539d92