"""Manipulating sites."""
import ldb
-from ldb import FLAG_MOD_ADD
+from ldb import FLAG_MOD_ADD, LdbError
class SiteException(Exception):
"""
ret = samdb.search(base=configDn, scope=ldb.SCOPE_SUBTREE,
- expression='(&(objectclass=Site)(cn=%s))' % siteName)
+ expression='(&(objectclass=Site)(cn=%s))' % siteName)
if len(ret) != 0:
raise SiteAlreadyExistsException('A site with the name %s already exists' % siteName)
:raise SiteServerNotEmpty: if the site has still servers in it.
"""
- dnsites = ldb.Dn(samdb, "CN=Sites,%s" % (str(configDn)))
- dnsite = ldb.Dn(samdb, "Cn=%s,CN=Sites,%s" % (siteName, str(configDn)))
- dnserver = ldb.Dn(samdb, "Cn=Servers,%s" % str(dnsite))
-
- ret = samdb.search(base=dnsites, scope=ldb.SCOPE_ONELEVEL,
- expression='(dn=%s)' % str(dnsite))
- if len(ret) != 1:
- raise SiteNotFoundException('Site %s does not exist' % siteName)
-
- ret = samdb.search(base=dnserver, scope=ldb.SCOPE_ONELEVEL,
- expression='(objectclass=server)')
+ dnsite = ldb.Dn(samdb, "CN=Sites")
+ if dnsite.add_base(configDn) == False:
+ raise SiteException("dnsites.add_base() failed")
+ if dnsite.add_child("CN=X") == False:
+ raise SiteException("dnsites.add_child() failed")
+ dnsite.set_component(0, "CN", siteName)
+
+ dnservers = ldb.Dn(samdb, "CN=Servers")
+ dnservers.add_base(dnsite)
+
+ try:
+ ret = samdb.search(base=dnsite, scope=ldb.SCOPE_BASE,
+ expression="objectClass=site")
+ if len(ret) != 1:
+ raise SiteNotFoundException('Site %s does not exist' % siteName)
+ except LdbError as e:
+ (enum, estr) = e.args
+ if enum == ldb.ERR_NO_SUCH_OBJECT:
+ raise SiteNotFoundException('Site %s does not exist' % siteName)
+
+ ret = samdb.search(base=dnservers, scope=ldb.SCOPE_ONELEVEL,
+ expression='(objectclass=server)')
if len(ret) != 0:
raise SiteServerNotEmptyException('Site %s still has servers in it, move them before removal' % siteName)