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