python/samba: Fix py2/3 relative module import issue
[samba.git] / python / samba / subnets.py
index e859f06e46de63dff1bc471e7f47cb04fc8d6127..50c6e58cb99c2b5dd817e5de26b6a357cf44605b 100644 (file)
@@ -22,7 +22,8 @@
 
 import ldb
 from ldb import FLAG_MOD_ADD, FLAG_MOD_REPLACE, LdbError
-from sites import SiteNotFoundException
+from . sites import SiteNotFoundException
+
 
 class SubnetException(Exception):
     """Base element for Subnet errors"""
@@ -85,7 +86,8 @@ def create_subnet(samdb, configDn, subnet_name, site_name):
         m["siteObject"] = ldb.MessageElement(str(dn_site), FLAG_MOD_ADD,
                                              "siteObject")
         samdb.add(m)
-    except ldb.LdbError as (enum, estr):
+    except ldb.LdbError as e:
+        (enum, estr) = e.args
         if enum == ldb.ERR_INVALID_DN_SYNTAX:
             raise SubnetInvalid("%s is not a valid subnet: %s" % (subnet_name, estr))
         elif enum == ldb.ERR_ENTRY_ALREADY_EXISTS:
@@ -121,13 +123,50 @@ def delete_subnet(samdb, configDn, subnet_name):
                            expression="objectClass=subnet")
         if len(ret) != 1:
             raise SubnetNotFound('Subnet %s does not exist' % subnet_name)
-    except LdbError as (enum, estr):
+    except LdbError as e1:
+        (enum, estr) = e1.args
         if enum == ldb.ERR_NO_SUCH_OBJECT:
             raise SubnetNotFound('Subnet %s does not exist' % subnet_name)
 
     samdb.delete(dnsubnet)
 
 
+def rename_subnet(samdb, configDn, subnet_name, new_name):
+    """Rename a subnet.
+
+    :param samdb: A samdb connection
+    :param configDn: The DN of the configuration partition
+    :param subnet_name: Name of the subnet to rename
+    :param new_name: New name for the subnet
+    :return: None
+    :raise SubnetNotFound: if the subnet to be renamed does not exist.
+    :raise SubnetExists: if the subnet to be created already exists.
+    """
+    dnsubnet = ldb.Dn(samdb, "CN=Subnets,CN=Sites")
+    if dnsubnet.add_base(configDn) == False:
+        raise SubnetException("dnsubnet.add_base() failed")
+    if dnsubnet.add_child("CN=X") == False:
+        raise SubnetException("dnsubnet.add_child() failed")
+    dnsubnet.set_component(0, "CN", subnet_name)
+
+    newdnsubnet = ldb.Dn(samdb, str(dnsubnet))
+    newdnsubnet.set_component(0, "CN", new_name)
+    try:
+        samdb.rename(dnsubnet, newdnsubnet)
+    except LdbError as e2:
+        (enum, estr) = e2.args
+        if enum == ldb.ERR_NO_SUCH_OBJECT:
+            raise SubnetNotFound('Subnet %s does not exist' % subnet)
+        elif enum == ldb.ERR_ENTRY_ALREADY_EXISTS:
+            raise SubnetAlreadyExists('A subnet with the CIDR %s already exists'
+                                      % new_name)
+        elif enum == ldb.ERR_INVALID_DN_SYNTAX:
+            raise SubnetInvalid("%s is not a valid subnet: %s" % (new_name,
+                                                                  estr))
+        else:
+            raise
+
+
 def set_subnet_site(samdb, configDn, subnet_name, site_name):
     """Assign a subnet to a site.
 
@@ -154,7 +193,8 @@ def set_subnet_site(samdb, configDn, subnet_name, site_name):
                            expression="objectClass=subnet")
         if len(ret) != 1:
             raise SubnetNotFound('Subnet %s does not exist' % subnet_name)
-    except LdbError as (enum, estr):
+    except LdbError as e3:
+        (enum, estr) = e3.args
         if enum == ldb.ERR_NO_SUCH_OBJECT:
             raise SubnetNotFound('Subnet %s does not exist' % subnet_name)
 
@@ -173,7 +213,8 @@ def set_subnet_site(samdb, configDn, subnet_name, site_name):
                            expression="objectClass=site")
         if len(ret) != 1:
             raise SiteNotFoundException('Site %s does not exist' % site_name)
-    except LdbError as (enum, estr):
+    except LdbError as e4:
+        (enum, estr) = e4.args
         if enum == ldb.ERR_NO_SUCH_OBJECT:
             raise SiteNotFoundException('Site %s does not exist' % site_name)