Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# Authors: Alexander Bokovoy <abokovoy@redhat.com> # # Copyright (C) 2011 Red Hat # see file 'COPYING' for use and warranty information # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>.
# Canonical names of services as IPA wants to see them. As we need to have # *some* naming, set them as in Red Hat distributions. Actual implementation # should make them available through knownservices.<name> and take care of # re-mapping internally, if needed 'messagebus', 'nslcd', 'nscd', 'ntpd', 'portmap', 'rpcbind', 'kadmin', 'sshd', 'autofs', 'rpcgssd', 'rpcidmapd', 'pki_tomcatd', 'pki-cad', 'chronyd']
# System may support more time&date services. FreeIPA supports ntpd only, other # services will be disabled during IPA installation
# The common ports for these services. This is used to wait for the # service to become available. 'dirsrv@PKI-IPA.service': [7389], 'PKI-IPA': [7389], 'dirsrv': [389], # this is only used if the incoming instance name is blank 'pki-cad': [9180, 9443, 9444], 'pki-tomcatd@pki-tomcat.service': [8080, 8443], 'pki-tomcat': [8080, 8443], 'pki-tomcatd': [8080, 8443], # used if the incoming instance name is blank }
""" AuthConfig class implements system-independent interface to configure system authentication resources. In Red Hat systems this is done with authconfig(8) utility.
AuthConfig class is nothing more than a tool to gather configuration options and execute their processing. These options then converted by an actual implementation to series of a system calls to appropriate utilities performing real configuration.
IPA *expects* names of AuthConfig's options to follow authconfig(8) naming scheme!
Actual implementation should be done in ipapython/platform/<platform>.py by inheriting from platform.AuthConfig and redefining __build_args() and execute() methods.
from ipapython.platform import platform class PlatformAuthConfig(platform.AuthConfig): def __build_args(): ...
def execute(): ...
authconfig = PlatformAuthConfig ....
See ipapython/platform/redhat.py for a sample implementation that uses authconfig(8) as its backend.
From IPA code perspective, the authentication configuration should be done with use of ipapython.services.authconfig:
from ipapython import services as ipaservices auth_config = ipaservices.authconfig() auth_config.disable("ldap").\ disable("krb5").\ disable("sssd").\ disable("sssdauth").\ disable("mkhomedir").\ add_option("update").\ enable("nis").\ add_parameter("nisdomain","foobar") auth_config.execute()
If you need to re-use existing AuthConfig instance for multiple runs, make sure to call 'AuthConfig.reset()' between the runs. """
self.parameters = {}
self.parameters[option] = True return self
self.parameters[option] = False return self
self.parameters[option] = None return self
self.parameters[option] = [value] return self
# do nothing return None
# do nothing return None
self.parameters = {} return self
""" PlatformService abstracts out external process running on the system which is possible to administer (start, stop, check status, etc).
"""
update_service_list=True): """ When a service is started record the fact in a special file. This allows ipactl stop to always stop all services that have been started via ipa tools """ if not update_service_list: return svc_list = [] try: f = open(SVC_LIST_FILE, 'r') svc_list = json.load(f) except Exception: # not fatal, may be the first service pass
if self.service_name not in svc_list: svc_list.append(self.service_name)
f = open(SVC_LIST_FILE, 'w') json.dump(svc_list, f) f.flush() f.close() return
""" When a service is stopped remove it from the service list file. """ if not update_service_list: return svc_list = [] try: f = open(SVC_LIST_FILE, 'r') svc_list = json.load(f) except Exception: # not fatal, may be the first service pass
while self.service_name in svc_list: svc_list.remove(self.service_name)
f = open(SVC_LIST_FILE, 'w') json.dump(svc_list, f) f.flush() f.close() return
return
return False
return False
return False
return
return
return
return
return
""" KnownServices is an abstract class factory that should give out instances of well-known platform services. Actual implementation must create these instances as its own attributes on first access (or instance creation) and cache them. """
|