Suse compatibility fix

Removes authselect requirement for Suse
    Use Suse 'pam-config' to configure PAM
    Configures nsswitch.conf
    Removes domainname service since it does not exist on Suse

Fixes: https://pagure.io/freeipa/issue/9174
Signed-off-by: Matthew Davis github@virtual.drop.net
Reviewed-By: Christian Heimes <cheimes@redhat.com>
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
This commit is contained in:
Matthew Davis 2022-06-13 16:06:56 -04:00 committed by Rob Crittenden
parent 5fb9653f4b
commit 86acb96e38
4 changed files with 96 additions and 3 deletions

View File

@ -462,6 +462,7 @@ class BasePathNamespace:
IPA_CCACHE_SWEEPER_GSSPROXY_SOCK = ( IPA_CCACHE_SWEEPER_GSSPROXY_SOCK = (
"/var/lib/gssproxy/ipa_ccache_sweeper.sock" "/var/lib/gssproxy/ipa_ccache_sweeper.sock"
) )
PAM_CONFIG = None
def check_paths(self): def check_paths(self):
"""Check paths for missing files """Check paths for missing files

View File

@ -86,7 +86,7 @@ class SusePathNamespace(BasePathNamespace):
KDESTROY = "/usr/lib/mit/bin/kdestroy" KDESTROY = "/usr/lib/mit/bin/kdestroy"
BIN_KVNO = "/usr/lib/mit/bin/kvno" BIN_KVNO = "/usr/lib/mit/bin/kvno"
UPDATE_CA_TRUST = "/usr/sbin/update-ca-certificates" UPDATE_CA_TRUST = "/usr/sbin/update-ca-certificates"
AUTHSELECT = "/usr/bin/authselect" PAM_CONFIG = "/usr/sbin/pam-config"
paths = SusePathNamespace() paths = SusePathNamespace()

View File

@ -17,7 +17,6 @@ suse_system_units = dict(
(x, "%s.service" % x) for x in base_services.wellknownservices (x, "%s.service" % x) for x in base_services.wellknownservices
) )
suse_system_units["httpd"] = "apache2.service" suse_system_units["httpd"] = "apache2.service"
suse_system_units["dirsrv"] = "dirsrv@.service" suse_system_units["dirsrv"] = "dirsrv@.service"
suse_system_units["pki-tomcatd"] = "pki-tomcatd@pki-tomcat.service" suse_system_units["pki-tomcatd"] = "pki-tomcatd@pki-tomcat.service"
suse_system_units["pki_tomcatd"] = suse_system_units["pki-tomcatd"] suse_system_units["pki_tomcatd"] = suse_system_units["pki-tomcatd"]
@ -163,9 +162,25 @@ class SuseCAService(SuseService):
return False return False
# For services which have no SUSE counterpart
class SuseNoService(base_services.PlatformService):
def start(self):
pass
def stop(self):
pass
def restart(self):
pass
def disable(self):
pass
def suse_service_class_factory(name, api): def suse_service_class_factory(name, api):
if name == "dirsrv": if name == "dirsrv":
return SuseDirectoryService(name, api) return SuseDirectoryService(name, api)
if name == 'domainname':
return SuseNoService(name, api)
if name == "ipa": if name == "ipa":
return SuseIPAService(name, api) return SuseIPAService(name, api)
if name in ("pki-tomcatd", "pki_tomcatd"): if name in ("pki-tomcatd", "pki_tomcatd"):
@ -189,6 +204,6 @@ class SuseServices(base_services.KnownServices):
super().__init__(services) super().__init__(services)
timedate_services = ["ntpd"] timedate_services = base_services.timedate_services
service = suse_service_class_factory service = suse_service_class_factory
knownservices = SuseServices() knownservices = SuseServices()

View File

@ -10,7 +10,9 @@ system tasks.
import logging import logging
from ipaplatform.paths import paths from ipaplatform.paths import paths
from ipaplatform.base.tasks import BaseTaskNamespace as BaseTask
from ipaplatform.redhat.tasks import RedHatTaskNamespace from ipaplatform.redhat.tasks import RedHatTaskNamespace
from ipapython import ipautil
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -42,5 +44,80 @@ class SuseTaskNamespace(RedHatTaskNamespace):
def set_selinux_booleans(self, required_settings, backup_func=None): def set_selinux_booleans(self, required_settings, backup_func=None):
return False # FIXME: Implement after libexec move return False # FIXME: Implement after libexec move
def modify_nsswitch_pam_stack(self, sssd, mkhomedir, statestore,
sudo=True):
# pylint: disable=ipa-forbidden-import
from ipalib import sysrestore # FixMe: break import cycle
# pylint: enable=ipa-forbidden-import
fstore = sysrestore.FileStore(paths.IPA_CLIENT_SYSRESTORE)
logger.debug('Enabling SSSD in nsswitch')
BaseTask.configure_nsswitch_database(self, fstore, 'group',
['sss'], default_value=['compat'])
BaseTask.configure_nsswitch_database(self, fstore, 'passwd',
['sss'], default_value=['compat'])
BaseTask.configure_nsswitch_database(self, fstore, 'shadow',
['sss'], default_value=['compat'])
BaseTask.configure_nsswitch_database(self, fstore, 'netgroup',
['files','sss'], preserve=False,
default_value=['files','nis'])
BaseTask.configure_nsswitch_database(self, fstore, 'automount',
['files','sss'], preserve=False,
default_value=['files','nis'])
if sudo:
BaseTask.enable_sssd_sudo(self,fstore)
logger.debug('Enabling sss in PAM')
try:
ipautil.run([paths.PAM_CONFIG, '--add', '--sss'])
if mkhomedir:
logger.debug('Enabling mkhomedir in PAM')
try:
ipautil.run([paths.PAM_CONFIG, '--add', '--mkhomedir',
'--mkhomedir-umask=0077'])
except ipautil.CalledProcessError:
logger.debug('Failed to configure PAM mkhomedir')
return False
except ipautil.CalledProcessError:
logger.debug('Failed to configure PAM to use SSSD')
return False
return True
def restore_pre_ipa_client_configuration(self, fstore, statestore,
was_sssd_installed,
was_sssd_configured):
if fstore.has_file(paths.NSSWITCH_CONF):
logger.debug('Restoring nsswitch from fstore')
fstore.restore_file(paths.NSSWITCH_CONF)
else:
logger.info('nsswitch not restored')
return False
try:
logger.debug('Removing sssd from PAM')
ipautil.run([paths.PAM_CONFIG, '--delete', '--mkhomedir'])
ipautil.run([paths.PAM_CONFIG, '--delete', '--sss'])
logger.debug('Removing sssd from PAM successed')
except ipautil.CalledProcessError:
logger.debug('Faled to remove sssd from PAM')
return False
return True
def disable_ldap_automount(self, statestore):
# SUSE does not use authconfig or authselect
return BaseTask.disable_ldap_automount(self, statestore)
def modify_pam_to_use_krb5(self, statestore):
# SUSE doesn't use authconfig, this is handled by pam-config
return True
def backup_auth_configuration(self, path):
# SUSE doesn't use authconfig, nothing to backup
return True
def restore_auth_configuration(self, path):
# SUSE doesn't use authconfig, nothing to restore
return True
def migrate_auth_configuration(self, statestore):
# SUSE doesn't have authselect
return True
tasks = SuseTaskNamespace() tasks = SuseTaskNamespace()