766fcc3
diff -up authconfig-6.2.10/authinfo.py.cacertdir authconfig-6.2.10/authinfo.py
766fcc3
--- authconfig-6.2.10/authinfo.py.cacertdir	2015-03-31 10:40:43.321241910 +0200
32d67a8
+++ authconfig-6.2.10/authinfo.py	2015-04-01 19:05:27.879900326 +0200
766fcc3
@@ -116,7 +116,7 @@ PATH_LIBSSS_AUTOFS = "/usr" + LIBDIR + "
446e70c
 PATH_WINBIND_NET = "/usr/bin/net"
446e70c
 PATH_IPA_CLIENT_INSTALL = "/usr/sbin/ipa-client-install"
446e70c
 
446e70c
-PATH_LDAP_CACERTS = "/etc/openldap/cacerts"
446e70c
+PATH_LDAP_CACERTS = "/etc/openldap/certs"
446e70c
 LDAP_CACERT_DOWNLOADED = "authconfig_downloaded.pem"
446e70c
 
446e70c
 PATH_CONFIG_BACKUPS = "/var/lib/authconfig"
766fcc3
@@ -155,6 +155,13 @@ def matchKey(line, key):
766fcc3
 	else:
766fcc3
 		return False
766fcc3
 
766fcc3
+def matchKeyI(line, key):
766fcc3
+	if line.lower().startswith(key.lower()):
766fcc3
+		# Skip intervening whitespace.
766fcc3
+		return line[len(key):].lstrip()
766fcc3
+	else:
766fcc3
+		return False
766fcc3
+
766fcc3
 def matchKeyEquals(line, key):
766fcc3
 	if line.startswith(key):
766fcc3
 		# Skip intervening whitespace.
32d67a8
@@ -926,9 +933,9 @@ def feedFork(command, echo, query, respo
32d67a8
 		try:
32d67a8
 			c = os.read(master, 1)
32d67a8
 		except OSError as err:
32d67a8
-			if err == errno.EINTR or err == errno.EAGAIN:
32d67a8
+			if err.errno == errno.EINTR or err.errno == errno.EAGAIN:
32d67a8
 				pass
32d67a8
-			elif err == errno.EIO:
32d67a8
+			elif err.errno == errno.EIO:
32d67a8
 				os.close(master)
32d67a8
 				eof = True
32d67a8
 			else:
32d67a8
@@ -1222,14 +1229,13 @@ class CacheBackup(FileBackup):
32d67a8
 		return rv
32d67a8
 
32d67a8
 # indexes for the configs
32d67a8
-(CFG_HESIOD, CFG_YP, CFG_LDAP, CFG_NSSLDAP, CFG_PAMLDAP, CFG_NSLCD, CFG_OPENLDAP, CFG_KRB5,
32d67a8
+(CFG_HESIOD, CFG_YP, CFG_NSSLDAP, CFG_PAMLDAP, CFG_NSLCD, CFG_OPENLDAP, CFG_KRB5,
32d67a8
 	CFG_KRB, CFG_PAM_PKCS11, CFG_SMB, CFG_NSSWITCH, CFG_CACHE,
32d67a8
 	CFG_PAM, CFG_POSTLOGIN_PAM, CFG_PASSWORD_PAM, CFG_FINGERPRINT_PAM, CFG_SMARTCARD_PAM, CFG_AUTHCONFIG, CFG_NETWORK, CFG_LIBUSER, CFG_PWQUALITY,
32d67a8
-	CFG_LOGIN_DEFS, CFG_SSSD, CFG_SHADOW, CFG_PASSWD, CFG_GSHADOW, CFG_GROUP, CFG_DCONF, CFG_DCONF_LOCKS) = list(range(0, 30))
32d67a8
+	CFG_LOGIN_DEFS, CFG_SSSD, CFG_SHADOW, CFG_PASSWD, CFG_GSHADOW, CFG_GROUP, CFG_DCONF, CFG_DCONF_LOCKS) = list(range(0, 29))
32d67a8
 all_configs = [
32d67a8
 	FileBackup("hesiod.conf", SYSCONFDIR+"/hesiod.conf"),
32d67a8
 	FileBackup("yp.conf", SYSCONFDIR+"/yp.conf"),
32d67a8
-	FileBackup("ldap.conf", SYSCONFDIR+"/ldap.conf"),
32d67a8
 	FileBackup("nss_ldap.conf", SYSCONFDIR+"/nss_ldap.conf"),
32d67a8
 	FileBackup("pam_ldap.conf", SYSCONFDIR+"/pam_ldap.conf"),
32d67a8
 	FileBackup("nslcd.conf", SYSCONFDIR+"/nslcd.conf"),
32d67a8
@@ -1627,7 +1633,6 @@ class AuthInfo:
446e70c
 
446e70c
 	# Read LDAP setup from /etc/ldap.conf.
446e70c
 	def readLDAP(self, ref):
446e70c
-		self.ldapCacertDir = PATH_LDAP_CACERTS
446e70c
 		# Open the file.  Bail if it's not there or there's some problem
446e70c
 		# reading it.
446e70c
 		try:
32d67a8
@@ -1640,45 +1645,52 @@ class AuthInfo:
32d67a8
 					f = open(all_configs[CFG_PAMLDAP].origPath, "r")
32d67a8
 				except IOError:
766fcc3
 					try:
32d67a8
-						f = open(all_configs[CFG_LDAP].origPath, "r")
32d67a8
+						f = open(all_configs[CFG_OPENLDAP].origPath, "r")
766fcc3
 					except IOError:
766fcc3
+						self.ldapCacertDir = PATH_LDAP_CACERTS
766fcc3
 						return False
766fcc3
 
766fcc3
 		for line in f:
766fcc3
 			line = line.strip()
766fcc3
 
766fcc3
 			# Is it a "base" statement?
766fcc3
-			value = matchKey(line, "base")
766fcc3
+			value = matchKeyI(line, "base")
766fcc3
 			if value and checkDN(value):
766fcc3
 				# Save the base DN.
766fcc3
 				self.setParam("ldapBaseDN", value, ref)
766fcc3
 				continue
766fcc3
 			# Is it a "host" statement?
766fcc3
-			value = matchKey(line, "host")
766fcc3
+			value = matchKeyI(line, "host")
766fcc3
 			if value:
766fcc3
 				# Save the host name or IP.
766fcc3
 				self.setParam("ldapServer", value, ref)
766fcc3
 				continue
766fcc3
 			# Is it a "uri" statement?
766fcc3
-			value = matchKey(line, "uri")
766fcc3
+			value = matchKeyI(line, "uri")
766fcc3
 			if value:
766fcc3
 				# Save the host name or IP.
766fcc3
 				self.setParam("ldapServer", value, ref)
766fcc3
 				continue
766fcc3
 			# Is it a "ssl" statement?
766fcc3
-			value = matchKey(line, "ssl")
766fcc3
+			value = matchKeyI(line, "ssl")
766fcc3
 			if value:
766fcc3
 				self.setParam("enableLDAPS", matchLine(value, "start_tls"), ref)
766fcc3
 				continue
766fcc3
 			# Is it a "nss_schema" statement?
766fcc3
-			value = matchKey(line, "nss_schema")
766fcc3
+			value = matchKeyI(line, "nss_schema")
446e70c
 			if value:
446e70c
 				self.setParam("ldapSchema", value, ref)
446e70c
 				continue
766fcc3
+			value = matchKeyI(line, "tls_cacertdir")
446e70c
+			if value:
446e70c
+				self.setParam("ldapCacertDir", value, ref)
446e70c
+				continue
446e70c
 			# We'll pull MD5/DES crypt ("pam_password") from the config
446e70c
 			# file, or from the pam_unix PAM config lines.
446e70c
 
446e70c
 		self.ldapServer = self.ldapHostsToURIs(cleanList(self.ldapServer), False)
446e70c
+		if not self.ldapCacertDir:
446e70c
+			self.ldapCacertDir = PATH_LDAP_CACERTS
446e70c
 		f.close()
446e70c
 		return True
446e70c
 
32d67a8
@@ -2747,10 +2759,6 @@ class AuthInfo:
32d67a8
 		return True
32d67a8
 
32d67a8
 	def writeLDAP(self):
32d67a8
-		if os.path.isfile(all_configs[CFG_LDAP].origPath):
32d67a8
-			all_configs[CFG_LDAP].backup(self.backupDir)
32d67a8
-			self.writeLDAP2(all_configs[CFG_LDAP].origPath,
32d67a8
-					"uri", "host", "base", True, True, True)
32d67a8
 		if os.path.isfile(all_configs[CFG_NSSLDAP].origPath):
32d67a8
 			all_configs[CFG_NSSLDAP].backup(self.backupDir)
32d67a8
 			self.writeLDAP2(all_configs[CFG_NSSLDAP].origPath,
32d67a8
@@ -4443,11 +4451,11 @@ class AuthInfo:
446e70c
 			self.uninstallIPA()
446e70c
 
446e70c
 	def testLDAPCACerts(self):
446e70c
-		if self.enableLDAP or self.enableLDAPAuth:
446e70c
+		if self.enableLDAP or self.enableLDAPAuth or self.ldapCacertURL:
446e70c
 			try:
446e70c
 				os.stat(self.ldapCacertDir)
446e70c
 			except OSError as err:
32d67a8
-				if err == errno.ENOENT:
32d67a8
+				if err.errno == errno.ENOENT:
32d67a8
 					os.mkdir(self.ldapCacertDir, 0o755)
32d67a8
 
32d67a8
 			return isEmptyDir(self.ldapCacertDir)
32d67a8
@@ -4455,7 +4463,7 @@ class AuthInfo:
446e70c
 
446e70c
 	def rehashLDAPCACerts(self):
446e70c
 		if ((self.enableLDAP or self.enableLDAPAuth) and
446e70c
-			(self.enableLDAPS or 'ldaps:' in self.ldapServer)):
446e70c
+			(self.enableLDAPS or 'ldaps:' in self.ldapServer)) or self.ldapCacertURL:
446e70c
 			os.system("/usr/sbin/cacertdir_rehash " + self.ldapCacertDir)
446e70c
 
446e70c
 	def downloadLDAPCACert(self):