If the DNS zones already exist but don't contain our own records, add
them. This patch introduces the ipalib.api into the installers. For now,
the code is still little messy. Later patches will abandon the way we
create zones now and use ipalib.api exclusively.

Martin
>From 09c8e86063113acb444ad32117b1dba839eae115 Mon Sep 17 00:00:00 2001
From: Martin Nagy <mn...@redhat.com>
Date: Wed, 2 Sep 2009 16:22:50 +0200
Subject: [PATCH 3/3] Add A and PTR records of ourselves during installation

If the DNS zones already exist but don't contain our own records, add
them. This patch introduces the ipalib.api into the installers. For now,
the code is still little messy. Later patches will abandon the way we
create zones now and use ipalib.api exclusively.
---
 install/tools/ipa-replica-install |    8 +++++++-
 install/tools/ipa-server-install  |    7 ++++++-
 ipaserver/install/bindinstance.py |   19 ++++++++++++++++---
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/install/tools/ipa-replica-install b/install/tools/ipa-replica-install
index 6dd9488..0571f94 100755
--- a/install/tools/ipa-replica-install
+++ b/install/tools/ipa-replica-install
@@ -31,7 +31,7 @@ from ipaserver.install import dsinstance, replication, installutils, krbinstance
 from ipaserver.install import bindinstance, httpinstance, ntpinstance, certs
 from ipaserver import ipaldap
 from ipapython import version
-from ipalib import util
+from ipalib import api, util
 
 CACERT="/usr/share/ipa/html/ca.crt"
 
@@ -361,6 +361,12 @@ def main():
     service.restart("krb5kdc")
 
     if options.setup_dns:
+        # First bootstrap the plug-in framework
+        api.bootstrap(in_server=True)
+        api.finalize()
+        api.Backend.ldap2.connect(bind_dn="cn=Directory Manager",
+                                  bind_pw=config.dirman_password)
+
         install_bind(config, options)
 
     # Call client install script
diff --git a/install/tools/ipa-server-install b/install/tools/ipa-server-install
index 306bed5..cad1a3c 100755
--- a/install/tools/ipa-server-install
+++ b/install/tools/ipa-server-install
@@ -51,7 +51,7 @@ from ipaserver.install.installutils import *
 
 from ipapython import sysrestore
 from ipapython.ipautil import *
-from ipalib import util
+from ipalib import api, util
 
 pw_name = None
 
@@ -646,6 +646,11 @@ def main():
     bind = bindinstance.BindInstance(fstore, dm_password)
     bind.setup(host_name, ip_address, realm_name, domain_name, dns_forwarders)
     if options.setup_dns:
+        # First bootstrap the plug-in framework
+        api.bootstrap(in_server=True)
+        api.finalize()
+        api.Backend.ldap2.connect(bind_dn="cn=Directory Manager", bind_pw=dm_password)
+
         bind.create_instance()
     else:
         bind.create_sample_bind_zone()
diff --git a/ipaserver/install/bindinstance.py b/ipaserver/install/bindinstance.py
index e2c91f3..2a922a3 100644
--- a/ipaserver/install/bindinstance.py
+++ b/ipaserver/install/bindinstance.py
@@ -28,7 +28,7 @@ import service
 from ipaserver import ipaldap
 from ipapython import sysrestore
 from ipapython import ipautil
-from ipalib import util
+from ipalib import api, util
 
 def check_inst():
     # So far this file is always present in both RHEL5 and Fedora if all the necessary
@@ -122,15 +122,19 @@ class BindInstance(service.Service):
 
         zone_dn = "idnsName=%s,cn=dns,%s" % (self.domain, self.suffix)
         reverse_zone_dn = "idnsName=%s.in-addr.arpa,cn=dns,%s" % (self.reverse_subnet, self.suffix)
+        a_rr_dn = "idnsName=%s,%s" % (self.host, zone_dn)
+        ptr_rr_dn = "idnsName=%s,%s" % (self.reverse_host, reverse_zone_dn)
 
         server = ldap.initialize("ldap://"; + self.fqdn)
         server.simple_bind_s()
         if object_exists(zone_dn):
-            pass # TODO: Add dns records to the zone
+            if not object_exists(a_rr_dn):
+                self.step("adding our A record", self.__setup_a_record)
         else:
             self.step("setting up our zone", self.__setup_zone)
         if object_exists(reverse_zone_dn):
-            pass # TODO: Add dns records to the reverse zone
+            if not object_exists(ptr_rr_dn):
+                self.step("adding our PTR record", self.__setup_ptr_record)
         else:
             self.step("setting up reverse zone", self.__setup_reverse_zone)
 
@@ -173,6 +177,15 @@ class BindInstance(service.Service):
     def __setup_reverse_zone(self):
         self._ldap_mod("dns_reverse.ldif", self.sub_dict)
 
+    def __setup_a_record(self):
+        api.Command.dns_add_rr(unicode(self.domain), unicode(self.host),
+                               u'A', unicode(self.ip_address))
+
+    def __setup_ptr_record(self):
+        api.Command.dns_add_rr(unicode(self.reverse_subnet + ".in-addr.arpa"),
+                               unicode(self.reverse_host), u'PTR',
+                               unicode(self.host))
+
     def __setup_principal(self):
         dns_principal = "DNS/" + self.fqdn + "@" + self.realm
         installutils.kadmin_addprinc(dns_principal)
-- 
1.6.2.5

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to