diff options
| author | Matthieu Patou <mat@matws.net> | 2011-11-02 20:24:20 +0100 | 
|---|---|---|
| committer | Matthieu Patou <mat@samba.org> | 2011-11-02 22:35:00 +0100 | 
| commit | 2db221c3845e2b1c44f8237c550704dca41df91a (patch) | |
| tree | 975f963c077cabf56898fe756fadfab26e0db708 /source4/scripting | |
| parent | 23d3880725da4cb92062b5945b7c93202f4ea504 (diff) | |
| download | samba-2db221c3845e2b1c44f8237c550704dca41df91a.tar.gz samba-2db221c3845e2b1c44f8237c550704dca41df91a.tar.bz2 samba-2db221c3845e2b1c44f8237c550704dca41df91a.zip  | |
s4-sites: Document, fix under optimal coding, use exceptions
Autobuild-User: Matthieu Patou <mat@samba.org>
Autobuild-Date: Wed Nov  2 22:35:00 CET 2011 on sn-devel-104
Diffstat (limited to 'source4/scripting')
| -rw-r--r-- | source4/scripting/python/samba/netcmd/sites.py | 40 | ||||
| -rw-r--r-- | source4/scripting/python/samba/sites.py | 68 | 
2 files changed, 86 insertions, 22 deletions
diff --git a/source4/scripting/python/samba/netcmd/sites.py b/source4/scripting/python/samba/netcmd/sites.py index a63b52442e..f5223db5f8 100644 --- a/source4/scripting/python/samba/netcmd/sites.py +++ b/source4/scripting/python/samba/netcmd/sites.py @@ -23,7 +23,7 @@  import os  from samba import sites -from samba import Ldb +from samba.samdb import SamDB  from samba.auth import system_session  from samba.netcmd import (      Command, @@ -42,20 +42,20 @@ class cmd_sites_create(Command):      def run(self, sitename, sambaopts=None, credopts=None, versionopts=None):          lp = sambaopts.get_loadparm()          creds = credopts.get_credentials(lp, fallback_machine=True) -        name = "sam.ldb" -        path = lp.get("private dir") -        url = os.path.join(path, name) +        url =  lp.private_path("sam.ldb") +          if not os.path.exists(url):              raise CommandError("secret database not found at %s " % url) -        samdb = Ldb(url=url, session_info=system_session(), -            credentials=creds, lp=lp) +        samdb = SamDB(url=url, session_info=system_session(), +                      credentials=creds, lp=lp)          samdb.transaction_start() -        ok = sites.create_site(samdb, samdb.get_config_basedn(), sitename) -        samdb.transaction_commit() - -        if not ok: -            raise CommandError("Error while creating site %s" % sitename) +        try: +            ok = sites.create_site(samdb, samdb.get_config_basedn(), sitename) +            samdb.transaction_commit() +        except sites.SiteAlreadyExistsException, e: +            samdb.transaction_cancel() +            raise CommandError("Error while creating site %s, error: %s" % (sitename, str(e)))          self.outf.write("Site %s created !\n" % sitename) @@ -69,20 +69,20 @@ class cmd_sites_delete(Command):      def run(self, sitename, sambaopts=None, credopts=None, versionopts=None):          lp = sambaopts.get_loadparm()          creds = credopts.get_credentials(lp, fallback_machine=True) -        name = "sam.ldb" -        path = lp.get("private dir") -        url = os.path.join(path, name) +        url =  lp.private_path("sam.ldb") +          if not os.path.exists(url):              raise CommandError("secret database not found at %s " % url) -        samdb = Ldb(url=url, session_info=system_session(), +        samdb = SamDB(url=url, session_info=system_session(),              credentials=creds, lp=lp)          samdb.transaction_start() -        ok = sites.delete_site(samdb, samdb.get_config_basedn(), sitename) -        samdb.transaction_commit() - -        if not ok: -            raise CommandError("Error while creating site %s" % sitename) +        try: +            ok = sites.delete_site(samdb, samdb.get_config_basedn(), sitename) +            samdb.transaction_commit() +        except sites.SiteException, e: +            samdb.transaction_cancel() +            raise CommandError("Error while removing site %s, error: %s" % (sitename, str(e)))          self.outf.write("Site %s removed!\n" % sitename) diff --git a/source4/scripting/python/samba/sites.py b/source4/scripting/python/samba/sites.py index d1d0e75973..f18441cbbb 100644 --- a/source4/scripting/python/samba/sites.py +++ b/source4/scripting/python/samba/sites.py @@ -22,11 +22,59 @@  import ldb  from ldb import FLAG_MOD_ADD + +class SiteException(Exception): +    """Base element for Sites errors""" + +    def __init__(self, value): +        self.value = value + +    def __str__(self): +        return "SiteException: " + self.value + + +class SiteNotFoundException(SiteException): +    """Raised when the site is not found and it's expected to exists.""" + +    def __init__(self, value): +        self.value = value + +    def __str__(self): +        return "SiteNotFoundException: " + self.value + +class SiteAlreadyExistsException(SiteException): +    """Raised when the site is not found and it's expected not to exists.""" + +    def __init__(self, value): +        self.value = value + +    def __str__(self): +        return "SiteAlreadyExists: " + self.value + +class SiteServerNotEmptyException(SiteException): +    """Raised when the site still has servers attached.""" + +    def __init__(self, value): +        self.value = value + +    def __str__(self): +        return "SiteServerNotEmpty: " + self.value +  def create_site(samdb, configDn, siteName): +    """ +    Create a site + +    :param samdb: A samdb connection +    :param configDn: The DN of the configuration partition +    :param siteName: Name of the site to create +    :return: True upon success +    :raise SiteAlreadyExists: if the site to be created already exists. +    """ +      ret = samdb.search(base=configDn, scope=ldb.SCOPE_SUBTREE,                      expression='(&(objectclass=Site)(cn=%s))' % siteName)      if len(ret) != 0: -        raise Exception('A site with the name %s already exists' % siteName) +        raise SiteAlreadyExistsException('A site with the name %s already exists' % siteName)      m = ldb.Message()      m.dn = ldb.Dn(samdb, "Cn=%s,CN=Sites,%s" % (siteName, str(configDn))) @@ -49,14 +97,30 @@ def create_site(samdb, configDn, siteName):      return True  def delete_site(samdb, configDn, siteName): +    """ +    Delete a site +    :param samdb: A samdb connection +    :param configDn: The DN of the configuration partition +    :param siteName: Name of the site to delete +    :return: True upon success +    :raise SiteNotFoundException: if the site to be deleted do not exists. +    :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 do not exists' % siteName) +      ret = samdb.search(base=dnserver, scope=ldb.SCOPE_ONELEVEL,                      expression='(objectclass=server)')      if len(ret) != 0: -        raise Exception('Site %s still has servers in it, move them before removal' % siteName) +        raise SiteServerNotEmptyException('Site %s still has servers in it, move them before removal' % siteName)      samdb.delete(dnsite, ["tree_delete:0"])  | 
