summaryrefslogtreecommitdiffstats
path: root/ipa-server/ipaserver/bindinstance.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipa-server/ipaserver/bindinstance.py')
-rw-r--r--ipa-server/ipaserver/bindinstance.py55
1 files changed, 42 insertions, 13 deletions
diff --git a/ipa-server/ipaserver/bindinstance.py b/ipa-server/ipaserver/bindinstance.py
index e9824ef0..a331b9d5 100644
--- a/ipa-server/ipaserver/bindinstance.py
+++ b/ipa-server/ipaserver/bindinstance.py
@@ -22,13 +22,14 @@ import tempfile
import shutil
import os
import socket
+import logging
import service
-import sysrestore
+from ipa import sysrestore
from ipa import ipautil
class BindInstance(service.Service):
- def __init__(self):
+ def __init__(self, fstore=None):
service.Service.__init__(self, "named")
self.fqdn = None
self.domain = None
@@ -37,6 +38,11 @@ class BindInstance(service.Service):
self.realm = None
self.sub_dict = None
+ if fstore:
+ self.fstore = fstore
+ else:
+ self.fstore = sysrestore.FileStore('/var/lib/ipa/sysrestore')
+
def setup(self, fqdn, ip_address, realm_name, domain_name):
self.fqdn = fqdn
self.ip_address = ip_address
@@ -68,15 +74,25 @@ class BindInstance(service.Service):
except:
pass
- self.__setup_zone()
- self.__setup_named_conf()
+ self.step("Setting up our zone", self.__setup_zone)
+ self.step("Setting up named.conf", self.__setup_named_conf)
+
+ self.step("restarting named", self.__start)
+ self.step("configuring named to start on boot", self.__enable)
+
+ self.step("Changing resolve.conf to point to ourselves", self.__setup_resolve_conf)
+ def __start(self):
try:
self.backup_state("running", self.is_running())
- self.start()
+ self.restart()
except:
print "named service failed to start"
+ def __enable(self):
+ self.backup_state("enabled", self.is_running())
+ self.chkconfig_on()
+
def __setup_sub_dict(self):
self.sub_dict = dict(FQDN=self.fqdn,
IP=self.ip_address,
@@ -87,13 +103,13 @@ class BindInstance(service.Service):
def __setup_zone(self):
self.backup_state("domain", self.domain)
zone_txt = ipautil.template_file(ipautil.SHARE_DIR + "bind.zone.db.template", self.sub_dict)
- sysrestore.backup_file('/var/named/'+self.domain+'.zone.db')
+ self.fstore.backup_file('/var/named/'+self.domain+'.zone.db')
zone_fd = open('/var/named/'+self.domain+'.zone.db', 'w')
zone_fd.write(zone_txt)
zone_fd.close()
def __setup_named_conf(self):
- sysrestore.backup_file('/etc/named.conf')
+ self.fstore.backup_file('/etc/named.conf')
named_txt = ipautil.template_file(ipautil.SHARE_DIR + "bind.named.conf.template", self.sub_dict)
named_fd = open('/etc/named.conf', 'w')
named_fd.seek(0)
@@ -101,7 +117,8 @@ class BindInstance(service.Service):
named_fd.write(named_txt)
named_fd.close()
- sysrestore.backup_file('/etc/resolve.conf')
+ def __setup_resolve_conf(self):
+ self.fstore.backup_file('/etc/resolve.conf')
resolve_txt = "search "+self.domain+"\nnameserver "+self.ip_address+"\n"
resolve_fd = open('/etc/resolve.conf', 'w')
resolve_fd.seek(0)
@@ -111,16 +128,28 @@ class BindInstance(service.Service):
def uninstall(self):
running = self.restore_state("running")
+ enabled = self.restore_state("enabled")
domain = self.restore_state("domain")
if not running is None:
self.stop()
- if not domain is None:
- sysrestore.restore_file(os.path.join ("/var/named/", domain + ".zone.db"))
-
- sysrestore.restore_file('/etc/named.conf')
- sysrestore.restore_file('/etc/resolve.conf')
+ if not domain is None:
+ try:
+ self.fstore.restore_file(os.path.join ("/var/named/", domain + ".zone.db"))
+ except ValueError, error:
+ logging.debug(error)
+ pass
+
+ for f in ["/etc/named.conf", "/etc/resolve.conf"]:
+ try:
+ self.fstore.restore_file(f)
+ except ValueError, error:
+ logging.debug(error)
+ pass
+
+ if not enabled is None and not enabled:
+ self.chkconfig_off()
if not running is None and running:
self.start()