Blame SOURCES/authconfig-6.2.8-norestart.patch

977b74
diff -up authconfig-6.2.8/authinfo.py.norestart authconfig-6.2.8/authinfo.py
977b74
--- authconfig-6.2.8/authinfo.py.norestart	2014-01-17 15:42:31.512947910 +0100
977b74
+++ authconfig-6.2.8/authinfo.py	2014-01-29 14:58:17.010078820 +0100
977b74
@@ -80,11 +80,6 @@ PATH_PWCONV = "/usr/sbin/pwconv"
977b74
 PATH_RPCBIND = "/sbin/rpcbind"
977b74
 PATH_NSCD = "/usr/sbin/nscd"
977b74
 PATH_NSLCD = "/usr/sbin/nslcd"
977b74
-PATH_DBBIND = "/usr/sbin/dbbind"
977b74
-PATH_DBIBIND = "/usr/sbin/dbibind"
977b74
-PATH_HESIODBIND = "/usr/sbin/hesiodbind"
977b74
-PATH_LDAPBIND = "/usr/sbin/ldapbind"
977b74
-PATH_ODBCBIND = "/usr/sbin/odbcbind"
977b74
 PATH_WINBIND = "/usr/sbin/winbindd"
977b74
 PATH_SSSD = "/usr/sbin/sssd"
977b74
 PATH_YPBIND = "/usr/sbin/ypbind"
977b74
@@ -848,77 +843,13 @@ try:
977b74
 except OSError:
977b74
 	Service = SysVInitService()
977b74
 
977b74
-def toggleCachingService(enableCaching, nostart, onlystart):
977b74
-	if not nostart:
977b74
-		if enableCaching:
977b74
-			if not onlystart:
977b74
-				Service.stop("nscd")
977b74
-			Service.start("nscd")
977b74
-		else:
977b74
-			try:
977b74
-				Service.stop("nscd")
977b74
-			except OSError:
977b74
-				pass
977b74
-	return True
977b74
-
977b74
-def toggleNisService(enableNis, nisDomain, nostart, onlystart):
977b74
-	if enableNis and nisDomain:
977b74
-		if not nostart:
977b74
-			os.system("/bin/domainname " + nisDomain)
977b74
-		try:
977b74
-			os.system("[[ $(getsebool allow_ypbind) == *off* ]] && setsebool -P allow_ypbind 1")
977b74
-			os.stat(PATH_RPCBIND)
977b74
-			Service.enable("rpcbind")
977b74
-			if not nostart:
977b74
-				Service.start("rpcbind")
977b74
-		except OSError:
977b74
-			pass
977b74
-		try:
977b74
-			os.stat(PATH_YPBIND)
977b74
-			Service.enable("ypbind")
977b74
-			if not nostart:
977b74
-				if not onlystart:
977b74
-					Service.stop("ypbind")
977b74
-				Service.start("ypbind")
977b74
-		except OSError:
977b74
-			pass
977b74
-	else:
977b74
-		if not nostart:
977b74
-			os.system("/bin/domainname \"(none)\"")
977b74
-		try:
977b74
-			os.system("[[ $(getsebool allow_ypbind) == *on* ]] && setsebool -P allow_ypbind 0")
977b74
-			os.stat(PATH_YPBIND)
977b74
-			if not nostart:
977b74
-				try:
977b74
-					Service.stop("ypbind")
977b74
-				except OSError:
977b74
-					pass
977b74
-			Service.disable("ypbind")
977b74
-		except OSError:
977b74
-			pass
977b74
-	return True
977b74
-
977b74
-def toggleLDAPService(enableLDAP):
977b74
-	if enableLDAP:
977b74
-		try:
977b74
-			os.system("[[ $(getsebool authlogin_nsswitch_use_ldap) == *off* ]] && setsebool -P authlogin_nsswitch_use_ldap 1")
977b74
-		except OSError:
977b74
-			pass
977b74
-	else:
977b74
-		try:
977b74
-			os.system("[[ $(getsebool authlogin_nsswitch_use_ldap) == *on* ]] && setsebool -P authlogin_nsswitch_use_ldap 0")
977b74
-		except OSError:
977b74
-			pass
977b74
-	return True
977b74
-
977b74
-def toggleSplatbindService(enable, path, name, nostart, onlystart):
977b74
+def toggleSplatbindService(enable, path, name, nostart):
977b74
 	if enable:
977b74
 		try:
977b74
 			os.stat(path)
977b74
 			Service.enable(name)
977b74
 			if not nostart:
977b74
-				if not onlystart:
977b74
-					Service.stop(name)
977b74
+				Service.stop(name)
977b74
 				Service.start(name)
977b74
 		except OSError:
977b74
 			pass
977b74
@@ -1055,8 +986,9 @@ def read(msgcb):
977b74
 	return info
977b74
 
977b74
 class SaveGroup:
977b74
-	def __init__(self, savefunc, attrlist):
977b74
+	def __init__(self, savefunc, togglefunc, attrlist):
977b74
 		self.saveFunction = savefunc
977b74
+		self.toggleFunction = togglefunc
977b74
 		self.attrlist = attrlist
977b74
 
977b74
 	def attrsDiffer(self, a, b):
977b74
@@ -1429,49 +1361,49 @@ class AuthInfo:
977b74
 		self.sssdConfig = None
977b74
 		self.sssdDomain = None
977b74
 		self.forceSSSDUpdate = None
977b74
-		self.confChanged = False
977b74
 		if SSSDConfig:
977b74
 			try:
977b74
 				self.sssdConfig = SSSDConfig.SSSDConfig()
977b74
 				self.sssdConfig.new_config()
977b74
 			except IOError:
977b74
 				pass
977b74
+		self.toggleFunctions = set()
977b74
 		self.save_groups = [
977b74
-	SaveGroup(self.writeCache, [("enableCache", "b"), ("implicitSSSD", "b")]),
977b74
-	SaveGroup(self.writeHesiod, [("hesiodLHS", "i"), ("hesiodRHS", "i")]),
977b74
-	SaveGroup(self.writeNIS, [("nisDomain", "c"), ("nisLocalDomain", "c"), ("nisServer", "c")]),
977b74
-	SaveGroup(self.writeLDAP, [("ldapServer", "i"), ("ldapBaseDN", "c"), ("enableLDAPS", "b"),
977b74
+	SaveGroup(self.writeCache, self.toggleCachingService, [("enableCache", "b"), ("implicitSSSD", "b")]),
977b74
+	SaveGroup(self.writeHesiod, None, [("hesiodLHS", "i"), ("hesiodRHS", "i")]),
977b74
+	SaveGroup(self.writeNIS, self.toggleNisService, [("nisDomain", "c"), ("nisLocalDomain", "c"), ("nisServer", "c")]),
977b74
+	SaveGroup(self.writeLDAP, None, [("ldapServer", "i"), ("ldapBaseDN", "c"), ("enableLDAPS", "b"),
977b74
 		("ldapSchema", "c"), ("ldapCacertDir", "c"), ("passwordAlgorithm", "i")]),
977b74
-	SaveGroup(self.writeLibuser, [("passwordAlgorithm", "i")]),
977b74
-	SaveGroup(self.writeLogindefs, [("passwordAlgorithm", "i")]), # for now we do not rewrite uidMin
977b74
-        SaveGroup(self.writePWQuality, [("passMinLen", "c"), ("passMinClass", "c"),
977b74
+	SaveGroup(self.writeLibuser, None, [("passwordAlgorithm", "i")]),
977b74
+	SaveGroup(self.writeLogindefs, None, [("passwordAlgorithm", "i")]), # for now we do not rewrite uidMin
977b74
+        SaveGroup(self.writePWQuality, None,  [("passMinLen", "c"), ("passMinClass", "c"),
977b74
                 ("passMaxRepeat", "c"), ("passMaxClassRepeat", "c"), ("passReqLower", "b"),
977b74
                 ("passReqUpper", "b"), ("passReqDigit", "b"), ("passReqOther", "b")]),
977b74
-	SaveGroup(self.writeKerberos, [("kerberosRealm", "c"), ("kerberosKDC", "i"),
977b74
+	SaveGroup(self.writeKerberos, None, [("kerberosRealm", "c"), ("kerberosKDC", "i"),
977b74
 		("smbSecurity", "i"), ("smbRealm", "c"), ("smbServers", "i"),
977b74
 		("kerberosAdminServer", "i"), ("kerberosRealmviaDNS", "b"),
977b74
 		("kerberosKDCviaDNS", "b")]),
977b74
-	SaveGroup(self.writeSSSD, [("ldapServer", "i"), ("ldapBaseDN", "c"), ("enableLDAPS", "b"),
977b74
+	SaveGroup(self.writeSSSD, self.toggleSSSDService, [("ldapServer", "i"), ("ldapBaseDN", "c"), ("enableLDAPS", "b"),
977b74
 		("ldapSchema", "c"), ("ldapCacertDir", "c"), ("enableCacheCreds", "b"),
977b74
 		("kerberosRealm", "c"), ("kerberosKDC", "i"), ("kerberosAdminServer", "i"),
977b74
 		("forceSSSDUpdate", "b"), ("enableLDAP", "b"), ("enableKerberos", "b"),
977b74
 		("enableLDAPAuth", "b"), ("enableIPAv2", "b")]),
977b74
-	SaveGroup(self.writeSmartcard, [("smartcardAction", "i"), ("smartcardModule", "c")]),
977b74
-	SaveGroup(self.writeDConf, [("smartcardAction", "i"), ("smartcardModule", "c"),
977b74
+	SaveGroup(self.writeSmartcard, None, [("smartcardAction", "i"), ("smartcardModule", "c")]),
977b74
+	SaveGroup(self.writeDConf, None, [("smartcardAction", "i"), ("smartcardModule", "c"),
977b74
 		("enableFprintd", "b"), ("enableSmartcard", "b"), ("forceSmartcard", "b")]),
977b74
-	SaveGroup(self.writeWinbind, [("smbWorkgroup", "i"), ("smbServers", "i"),
977b74
+	SaveGroup(self.writeWinbind, self.toggleWinbindService, [("smbWorkgroup", "i"), ("smbServers", "i"),
977b74
 		("smbRealm", "c"), ("smbSecurity", "i"), ("smbIdmapRange", "i"),
977b74
 		("winbindSeparator", "c"), ("winbindTemplateHomedir", "c"),
977b74
 		("winbindTemplatePrimaryGroup", "c"), ("winbindTemplateShell", "c"),
977b74
 		("winbindUseDefaultDomain", "b"), ("winbindOffline", "b"), ("winbindKrb5", "b")]),
977b74
-	SaveGroup(self.writeNSS, [("enableDB", "b"), ("enableDirectories", "b"), ("enableWinbind", "b"),
977b74
+	SaveGroup(self.writeNSS, None, [("enableDB", "b"), ("enableDirectories", "b"), ("enableWinbind", "b"),
977b74
 		("enableOdbcbind", "b"), ("enableNIS3", "b"), ("enableNIS", "b"),
977b74
 		("enableLDAPbind", "b"), ("enableLDAP", "b"), ("enableHesiodbind", "b"),
977b74
 		("enableHesiod", "b"), ("enableDBIbind", "b"), ("enableDBbind", "b"),
977b74
 		("enableCompat", "b"), ("enableWINS", "b"), ("enableMDNS", "b"),
977b74
 		("enableNIS3", "b"), ("enableNIS", "b"), ("enableIPAv2", "b"),
977b74
 		("enableSSSD", "b"), ("preferDNSinHosts", "b"), ("implicitSSSD", "b")]),
977b74
-	SaveGroup(self.writePAM, [("pwqualityArgs", "c"), ("passwdqcArgs", "c"),
977b74
+	SaveGroup(self.writePAM, None, [("pwqualityArgs", "c"), ("passwdqcArgs", "c"),
977b74
 		("localuserArgs", "c"), ("pamAccessArgs", "c"), ("enablePAMAccess", "b"),
977b74
 		("mkhomedirArgs", "c"), ("enableMkHomeDir", "b"), ("algoRounds", "c"),
977b74
 		("passwordAlgorithm", "i"), ("enableShadow", "b"), ("enableNIS", "b"),
977b74
@@ -1484,7 +1416,7 @@ class AuthInfo:
977b74
 		("winbindOffline", "b"), ("winbindKrb5", "b"),
977b74
 		("enableSSSDAuth", "b"), ("enableFprintd", "b"), ("pamLinked", "b"),
977b74
 		("implicitSSSDAuth", "b"), ("systemdArgs", "c"), ("uidMin", "i"), ("enableIPAv2", "b")]),
977b74
-	SaveGroup(self.writeSysconfig, [("passwordAlgorithm", "i"), ("enableShadow", "b"), ("enableNIS", "b"),
977b74
+	SaveGroup(self.writeSysconfig, None, [("passwordAlgorithm", "i"), ("enableShadow", "b"), ("enableNIS", "b"),
977b74
 		("enableLDAP", "b"), ("enableLDAPAuth", "b"), ("enableKerberos", "b"),
977b74
 		("enableEcryptfs", "b"), ("enableSmartcard", "b"), ("forceSmartcard", "b"),
977b74
 		("enableWinbindAuth", "b"), ("enableWinbind", "b"), ("winbindKrb5", "b"), ("enableDB", "b"),
977b74
@@ -1494,8 +1426,15 @@ class AuthInfo:
977b74
 		("enableSSSD", "b"), ("enableSSSDAuth", "b"), ("enableForceLegacy", "b"),
977b74
 		("ipav2Server", "i"), ("ipav2Domain", "i"), ("ipav2Realm", "c"),
977b74
 		("enableIPAv2", "b"), ("ipaDomainJoined", "b"), ("ipav2NoNTP", "b")]),
977b74
-	SaveGroup(self.writeNetwork, [("nisDomain", "c")]),
977b74
-	SaveGroup(self.toggleShadow, [("enableShadow", "b")])]
977b74
+	SaveGroup(self.writeNetwork, None, [("nisDomain", "c")]),
977b74
+	SaveGroup(self.toggleShadow, None, [("enableShadow", "b")]),
977b74
+	SaveGroup(None, self.toggleNisService, [("enableNIS", "b")]),
977b74
+	SaveGroup(None, self.toggleOddjobService, [("enableMkHomeDir", "b")]),
977b74
+	SaveGroup(None, self.toggleLDAPService, [("enableLDAP", "b"), ("enableLDAPAuth", "b"),
977b74
+		("implicitSSSD", "b"), ("implicitSSSDAuth", "b"), ("enableForceLegacy", "b")]),
977b74
+	SaveGroup(None, self.toggleSSSDService, [("implicitSSSD", "b"), ("implicitSSSDAuth", "b"),
977b74
+		("enableIPAv2", "b"), ("enableSSSD", "b"), ("enableSSSDAuth", "b"), ("enableForceLegacy", "b")]),
977b74
+	SaveGroup(None, self.toggleWinbindService, [("enableWinbind", "b"), ("enableWinbindAuth", "b")])]
977b74
 
977b74
 	def setParam(self, attr, value, ref):
977b74
 		oldval = getattr(self, attr)
977b74
@@ -4049,7 +3988,6 @@ class AuthInfo:
977b74
 		self.update()
977b74
 		self.prewriteUpdate()
977b74
 		self.setupBackup(PATH_CONFIG_BACKUPS + "/last")
977b74
-		self.confChanged = True
977b74
 		try:
977b74
 			ret = self.writeLibuser()
977b74
 			ret = ret and self.writeLogindefs()
977b74
@@ -4080,6 +4018,9 @@ class AuthInfo:
977b74
 		except (OSError, IOError):
977b74
 			sys.stderr.write(str(sys.exc_info()[1]) + "\n")
977b74
 			return False
977b74
+		for group in self.save_groups:
977b74
+			if group.toggleFunction:
977b74
+				self.toggleFunctions.add(group.toggleFunction)
977b74
 		return ret
977b74
 
977b74
 	def writeChanged(self, ref):
977b74
@@ -4091,8 +4032,10 @@ class AuthInfo:
977b74
 		try:
977b74
 			for group in self.save_groups:
977b74
 				if group.attrsDiffer(self, ref):
977b74
-					self.confChanged = True
977b74
-					ret = ret and group.saveFunction()
977b74
+					if group.saveFunction:
977b74
+						ret = ret and group.saveFunction()
977b74
+					if group.toggleFunction:
977b74
+						self.toggleFunctions.add(group.toggleFunction)
977b74
 		except (OSError, IOError):
977b74
 			sys.stderr.write(str(sys.exc_info()[1]) + "\n")
977b74
 			return False
977b74
@@ -4326,44 +4269,93 @@ class AuthInfo:
977b74
 		cmd = PATH_IPA_CLIENT_INSTALL + " --uninstall --noac"
977b74
 		os.system(cmd)
977b74
 
977b74
-	def post(self, nostart):
977b74
-		onlystart = not self.confChanged
977b74
-		toggleNisService(self.enableNIS, self.nisDomain, nostart, onlystart)
977b74
-		toggleLDAPService(self.enableLDAP or self.enableLDAPAuth)
977b74
+	def toggleCachingService(self, nostart):
977b74
+		if not nostart:
977b74
+			if self.enableCache:
977b74
+				Service.stop("nscd")
977b74
+				Service.start("nscd")
977b74
+			else:
977b74
+				try:
977b74
+					Service.stop("nscd")
977b74
+				except OSError:
977b74
+					pass
977b74
+		return True
977b74
+	def toggleNisService(self, nostart):
977b74
+		if self.enableNIS and self.nisDomain:
977b74
+			if not nostart:
977b74
+				os.system("/bin/domainname " + self.nisDomain)
977b74
+			try:
977b74
+				os.system("[[ $(getsebool allow_ypbind) == *off* ]] && setsebool -P allow_ypbind 1")
977b74
+				os.stat(PATH_RPCBIND)
977b74
+				Service.enable("rpcbind")
977b74
+				if not nostart:
977b74
+					Service.start("rpcbind")
977b74
+			except OSError:
977b74
+				pass
977b74
+			try:
977b74
+				os.stat(PATH_YPBIND)
977b74
+				Service.enable("ypbind")
977b74
+				if not nostart:
977b74
+					Service.stop("ypbind")
977b74
+					Service.start("ypbind")
977b74
+			except OSError:
977b74
+				pass
977b74
+		else:
977b74
+			if not nostart:
977b74
+				os.system("/bin/domainname \"(none)\"")
977b74
+			try:
977b74
+				os.system("[[ $(getsebool allow_ypbind) == *on* ]] && setsebool -P allow_ypbind 0")
977b74
+				os.stat(PATH_YPBIND)
977b74
+				if not nostart:
977b74
+					try:
977b74
+						Service.stop("ypbind")
977b74
+					except OSError:
977b74
+						pass
977b74
+				Service.disable("ypbind")
977b74
+			except OSError:
977b74
+				pass
977b74
+		return True
977b74
+
977b74
+	def toggleLDAPService(self, nostart):
977b74
+		toggleSplatbindService((self.enableLDAP or self.enableLDAPAuth) and
977b74
+			not self.implicitSSSD,
977b74
+			PATH_NSLCD,
977b74
+			"nslcd", nostart)
977b74
+		if self.enableLDAP:
977b74
+			try:
977b74
+				os.system("[[ $(getsebool authlogin_nsswitch_use_ldap) == *off* ]] && setsebool -P authlogin_nsswitch_use_ldap 1")
977b74
+			except OSError:
977b74
+				pass
977b74
+		else:
977b74
+			try:
977b74
+				os.system("[[ $(getsebool authlogin_nsswitch_use_ldap) == *on* ]] && setsebool -P authlogin_nsswitch_use_ldap 0")
977b74
+			except OSError:
977b74
+				pass
977b74
+		return True
977b74
+
977b74
+	def toggleWinbindService(self, nostart):
977b74
 		toggleSplatbindService(self.enableWinbind or self.enableWinbindAuth,
977b74
 			PATH_WINBIND,
977b74
-			"winbind", nostart, onlystart)
977b74
+			"winbind", nostart)
977b74
+
977b74
+	def toggleSSSDService(self, nostart):
977b74
 		toggleSplatbindService(self.implicitSSSD or self.implicitSSSDAuth or
977b74
 			self.enableIPAv2 or self.enableSSSD or self.enableSSSDAuth,
977b74
 			PATH_SSSD,
977b74
 			"sssd", nostart or not (self.implicitSSSD or self.implicitSSSDAuth
977b74
-			or self.enableIPAv2), onlystart)
977b74
-		toggleSplatbindService((self.enableLDAP or self.enableLDAPAuth) and
977b74
-			not self.implicitSSSD,
977b74
-			PATH_NSLCD,
977b74
-			"nslcd", nostart, onlystart)
977b74
-		toggleSplatbindService(self.enableDBbind,
977b74
-			PATH_DBBIND,
977b74
-			"dbbind", nostart, onlystart)
977b74
-		toggleSplatbindService(self.enableDBIbind,
977b74
-			PATH_DBIBIND,
977b74
-			"dbibind", nostart, onlystart)
977b74
-		toggleSplatbindService(self.enableHesiodbind,
977b74
-			PATH_HESIODBIND,
977b74
-			"hesiodbind", nostart, onlystart)
977b74
-		toggleSplatbindService(self.enableLDAPbind,
977b74
-			PATH_LDAPBIND,
977b74
-			"ldapbind", nostart, onlystart)
977b74
-		toggleSplatbindService(self.enableOdbcbind,
977b74
-			PATH_ODBCBIND,
977b74
-			"odbcbind", nostart, onlystart)
977b74
+			or self.enableIPAv2))
977b74
+
977b74
+	def toggleOddjobService(self, nostart):
977b74
 		if self.enableMkHomeDir and os.access("%s/pam_%s.so"
977b74
 				% (AUTH_MODULE_DIR, "oddjob_mkhomedir"), os.X_OK):
977b74
 			# only switch on and only if pam_oddjob_mkhomedir exists
977b74
 			toggleSplatbindService(True,
977b74
 				PATH_ODDJOBD,
977b74
-				"oddjobd", nostart, onlystart)
977b74
-		toggleCachingService(self.enableCache, nostart, onlystart)
977b74
+				"oddjobd", nostart)
977b74
+
977b74
+	def post(self, nostart):
977b74
+		for togglefunc in self.toggleFunctions:
977b74
+			togglefunc(nostart)
977b74
 		if self.ipaUninstall:
977b74
 			self.uninstallIPA()
977b74