mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Add ODS manager abstraction to ipaplatform
OpenDNSSEC 1.4 and 2.x use different commands to initialize kasp.db and manage zones. ipaplatform.tasks abstracts the commands. Note: I added the logic to the base task instead of having different implementations for Red Hat and Debian platforms. Eventually Fedora is going to move to OpenDNSSEC 2.x, too. The design will make it easier to support OpenDNSSEC 2.x on Fedora. Signed-off-by: Christian Heimes <cheimes@redhat.com> Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com> Reviewed-By: Rob Crittenden <rcritten@redhat.com>
This commit is contained in:
@@ -186,7 +186,7 @@ class BasePathNamespace:
|
|||||||
ODS_KSMUTIL = "/usr/bin/ods-ksmutil"
|
ODS_KSMUTIL = "/usr/bin/ods-ksmutil"
|
||||||
ODS_SIGNER = "/usr/sbin/ods-signer"
|
ODS_SIGNER = "/usr/sbin/ods-signer"
|
||||||
ODS_ENFORCER = None
|
ODS_ENFORCER = None
|
||||||
ODS_ENFORCER_SETUP = None
|
ODS_ENFORCER_DB_SETUP = None
|
||||||
OPENSSL = "/usr/bin/openssl"
|
OPENSSL = "/usr/bin/openssl"
|
||||||
PK12UTIL = "/usr/bin/pk12util"
|
PK12UTIL = "/usr/bin/pk12util"
|
||||||
SOFTHSM2_UTIL = "/usr/bin/softhsm2-util"
|
SOFTHSM2_UTIL = "/usr/bin/softhsm2-util"
|
||||||
|
|||||||
@@ -24,10 +24,12 @@ This module contains default platform-specific implementations of system tasks.
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import os
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from pkg_resources import parse_version
|
from pkg_resources import parse_version
|
||||||
|
|
||||||
|
from ipaplatform.constants import constants
|
||||||
from ipaplatform.paths import paths
|
from ipaplatform.paths import paths
|
||||||
from ipapython import ipautil
|
from ipapython import ipautil
|
||||||
|
|
||||||
@@ -272,5 +274,37 @@ class BaseTaskNamespace:
|
|||||||
if fstore is not None and fstore.has_file(paths.RESOLV_CONF):
|
if fstore is not None and fstore.has_file(paths.RESOLV_CONF):
|
||||||
fstore.restore_file(paths.RESOLV_CONF)
|
fstore.restore_file(paths.RESOLV_CONF)
|
||||||
|
|
||||||
|
def run_ods_setup(self):
|
||||||
|
"""Initialize a new kasp.db
|
||||||
|
"""
|
||||||
|
if paths.ODS_KSMUTIL is not None:
|
||||||
|
cmd = [paths.ODS_KSMUTIL, 'setup']
|
||||||
|
else:
|
||||||
|
cmd = [paths.ODS_ENFORCER_DB_SETUP]
|
||||||
|
return ipautil.run(cmd, stdin="y", runas=constants.ODS_USER)
|
||||||
|
|
||||||
|
def run_ods_manager(self, params, **kwargs):
|
||||||
|
"""Run OpenDNSSEC manager command (ksmutil, enforcer)
|
||||||
|
|
||||||
|
:param params: parameter for ODS command
|
||||||
|
:param kwargs: additional arguments for ipautil.run()
|
||||||
|
:return: result from ipautil.run()
|
||||||
|
"""
|
||||||
|
assert params[0] != 'setup'
|
||||||
|
|
||||||
|
if paths.ODS_KSMUTIL is not None:
|
||||||
|
# OpenDNSSEC 1.4
|
||||||
|
cmd = [paths.ODS_KSMUTIL]
|
||||||
|
else:
|
||||||
|
# OpenDNSSEC 2.x
|
||||||
|
cmd = [paths.ODS_ENFORCER]
|
||||||
|
cmd.extend(params)
|
||||||
|
|
||||||
|
# run commands as ODS user
|
||||||
|
if os.geteuid() == 0:
|
||||||
|
kwargs['runas'] = constants.ODS_USER
|
||||||
|
|
||||||
|
return ipautil.run(cmd, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
tasks = BaseTaskNamespace()
|
tasks = BaseTaskNamespace()
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ class DebianPathNamespace(BasePathNamespace):
|
|||||||
CERTMONGER_COMMAND_TEMPLATE = "/usr/lib/ipa/certmonger/%s"
|
CERTMONGER_COMMAND_TEMPLATE = "/usr/lib/ipa/certmonger/%s"
|
||||||
ODS_KSMUTIL = None
|
ODS_KSMUTIL = None
|
||||||
ODS_ENFORCER = "/usr/sbin/ods-enforcer"
|
ODS_ENFORCER = "/usr/sbin/ods-enforcer"
|
||||||
ODS_ENFORCER_SETUP = "/usr/sbin/ods-enforcer-db-setup"
|
ODS_ENFORCER_DB_SETUP = "/usr/sbin/ods-enforcer-db-setup"
|
||||||
UPDATE_CA_TRUST = "/usr/sbin/update-ca-certificates"
|
UPDATE_CA_TRUST = "/usr/sbin/update-ca-certificates"
|
||||||
BIND_LDAP_DNS_IPA_WORKDIR = "/var/cache/bind/dyndb-ldap/ipa/"
|
BIND_LDAP_DNS_IPA_WORKDIR = "/var/cache/bind/dyndb-ldap/ipa/"
|
||||||
BIND_LDAP_DNS_ZONE_WORKDIR = "/var/cache/bind/dyndb-ldap/ipa/master/"
|
BIND_LDAP_DNS_ZONE_WORKDIR = "/var/cache/bind/dyndb-ldap/ipa/master/"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ except ImportError:
|
|||||||
from xml.etree import ElementTree as etree
|
from xml.etree import ElementTree as etree
|
||||||
|
|
||||||
from ipapython import ipa_log_manager, ipautil
|
from ipapython import ipa_log_manager, ipautil
|
||||||
from ipaplatform.paths import paths
|
from ipaplatform.tasks import tasks
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -135,12 +135,7 @@ class ODSMgr:
|
|||||||
|
|
||||||
Raises CalledProcessError if returncode != 0.
|
Raises CalledProcessError if returncode != 0.
|
||||||
"""
|
"""
|
||||||
if paths.ODS_ENFORCER is not None:
|
result = tasks.run_ods_manager(params, capture_output=True)
|
||||||
cmd = [paths.ODS_ENFORCER]
|
|
||||||
else:
|
|
||||||
cmd = [paths.ODS_KSMUTIL]
|
|
||||||
cmd.extend(params)
|
|
||||||
result = ipautil.run(cmd, capture_output=True)
|
|
||||||
return result.output
|
return result.output
|
||||||
|
|
||||||
def get_ods_zonelist(self):
|
def get_ods_zonelist(self):
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from ipapython import ipautil
|
|||||||
from ipaplatform import services
|
from ipaplatform import services
|
||||||
from ipaplatform.constants import constants
|
from ipaplatform.constants import constants
|
||||||
from ipaplatform.paths import paths
|
from ipaplatform.paths import paths
|
||||||
|
from ipaplatform.tasks import tasks
|
||||||
from ipalib import errors, api
|
from ipalib import errors, api
|
||||||
from ipaserver import p11helper
|
from ipaserver import p11helper
|
||||||
from ipalib.constants import SOFTHSM_DNSSEC_TOKEN_LABEL
|
from ipalib.constants import SOFTHSM_DNSSEC_TOKEN_LABEL
|
||||||
@@ -279,11 +280,6 @@ class OpenDNSSECInstance(service.Service):
|
|||||||
if not self.fstore.has_file(paths.OPENDNSSEC_KASP_DB):
|
if not self.fstore.has_file(paths.OPENDNSSEC_KASP_DB):
|
||||||
self.fstore.backup_file(paths.OPENDNSSEC_KASP_DB)
|
self.fstore.backup_file(paths.OPENDNSSEC_KASP_DB)
|
||||||
|
|
||||||
if paths.ODS_ENFORCER is not None:
|
|
||||||
ods_cmd = paths.ODS_ENFORCER
|
|
||||||
else:
|
|
||||||
ods_cmd = paths.ODS_KSMUTIL
|
|
||||||
|
|
||||||
if self.kasp_db_file:
|
if self.kasp_db_file:
|
||||||
# copy user specified kasp.db to proper location and set proper
|
# copy user specified kasp.db to proper location and set proper
|
||||||
# privileges
|
# privileges
|
||||||
@@ -292,20 +288,16 @@ class OpenDNSSECInstance(service.Service):
|
|||||||
os.chmod(paths.OPENDNSSEC_KASP_DB, 0o660)
|
os.chmod(paths.OPENDNSSEC_KASP_DB, 0o660)
|
||||||
|
|
||||||
# regenerate zonelist.xml
|
# regenerate zonelist.xml
|
||||||
cmd = [ods_cmd, 'zonelist', 'export']
|
result = tasks.run_ods_manager(
|
||||||
result = ipautil.run(
|
['zonelist', 'export'], capture_output=True
|
||||||
cmd, runas=constants.ODS_USER, capture_output=True
|
|
||||||
)
|
)
|
||||||
if paths.ODS_ENFORCER is not None:
|
with open(paths.OPENDNSSEC_ZONELIST_FILE, 'w') as f:
|
||||||
with open(paths.OPENDNSSEC_ZONELIST_FILE, 'w') as f:
|
f.write(result.output)
|
||||||
f.write(result.output)
|
os.fchown(f.fileno(), self.ods_uid, self.ods_gid)
|
||||||
os.fchown(f.fileno(), self.ods_uid, self.ods_gid)
|
os.fchmod(f.fileno(), 0o660)
|
||||||
os.fchmod(f.fileno(), 0o660)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# initialize new kasp.db
|
# initialize new kasp.db
|
||||||
cmd = [ods_cmd, 'setup']
|
tasks.run_ods_setup()
|
||||||
ipautil.run(cmd, stdin="y", runas=constants.ODS_USER)
|
|
||||||
|
|
||||||
def __setup_dnskeysyncd(self):
|
def __setup_dnskeysyncd(self):
|
||||||
# set up dnskeysyncd this is DNSSEC master
|
# set up dnskeysyncd this is DNSSEC master
|
||||||
|
|||||||
Reference in New Issue
Block a user