diff options
| author | Stefan Metzmacher <metze@samba.org> | 2023-06-21 12:07:08 +0200 |
|---|---|---|
| committer | Andrew Bartlett <abartlet@samba.org> | 2023-06-21 19:08:37 +0000 |
| commit | e92988ec9467e603e5c1aa7f8d337deebbf282dd (patch) | |
| tree | 71eee2deeee5f11634f86255c255c21ea60e5b6d /python/samba | |
| parent | ea2712336b28ffda938b4d0b1b17d8eaafb7714d (diff) | |
| download | samba-e92988ec9467e603e5c1aa7f8d337deebbf282dd.tar.gz samba-e92988ec9467e603e5c1aa7f8d337deebbf282dd.tar.bz2 samba-e92988ec9467e603e5c1aa7f8d337deebbf282dd.zip | |
samba-tool: move some parts of 'domain level [show|raise]' in to try/except
This just adds indentation for now, the following changes will
add transactions...
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'python/samba')
| -rw-r--r-- | python/samba/netcmd/domain/level.py | 97 |
1 files changed, 50 insertions, 47 deletions
diff --git a/python/samba/netcmd/domain/level.py b/python/samba/netcmd/domain/level.py index 48701376f51..5f22ffcaac1 100644 --- a/python/samba/netcmd/domain/level.py +++ b/python/samba/netcmd/domain/level.py @@ -68,53 +68,56 @@ class cmd_domain_level(Command): domain_dn = samdb.domain_dn() - res_forest = samdb.search("CN=Partitions,%s" % samdb.get_config_basedn(), - scope=ldb.SCOPE_BASE, attrs=["msDS-Behavior-Version"]) - assert len(res_forest) == 1 - - res_domain = samdb.search(domain_dn, scope=ldb.SCOPE_BASE, - attrs=["msDS-Behavior-Version", "nTMixedDomain"]) - assert len(res_domain) == 1 - - res_domain_cross = samdb.search("CN=Partitions,%s" % samdb.get_config_basedn(), - scope=ldb.SCOPE_SUBTREE, - expression="(&(objectClass=crossRef)(nCName=%s))" % domain_dn, - attrs=["msDS-Behavior-Version"]) - assert len(res_domain_cross) == 1 - - res_dc_s = samdb.search("CN=Sites,%s" % samdb.get_config_basedn(), - scope=ldb.SCOPE_SUBTREE, expression="(objectClass=nTDSDSA)", - attrs=["msDS-Behavior-Version"]) - assert len(res_dc_s) >= 1 - - # default values, since "msDS-Behavior-Version" does not exist on Windows 2000 AD - level_forest = DS_DOMAIN_FUNCTION_2000 - level_domain = DS_DOMAIN_FUNCTION_2000 - - if "msDS-Behavior-Version" in res_forest[0]: - level_forest = int(res_forest[0]["msDS-Behavior-Version"][0]) - if "msDS-Behavior-Version" in res_domain[0]: - level_domain = int(res_domain[0]["msDS-Behavior-Version"][0]) - level_domain_mixed = int(res_domain[0]["nTMixedDomain"][0]) - - min_level_dc = None - for msg in res_dc_s: - if "msDS-Behavior-Version" in msg: - if min_level_dc is None or int(msg["msDS-Behavior-Version"][0]) < min_level_dc: - min_level_dc = int(msg["msDS-Behavior-Version"][0]) - else: - min_level_dc = DS_DOMAIN_FUNCTION_2000 - # well, this is the least - break - - if level_forest < DS_DOMAIN_FUNCTION_2000 or level_domain < DS_DOMAIN_FUNCTION_2000: - raise CommandError("Domain and/or forest function level(s) is/are invalid. Correct them or reprovision!") - if min_level_dc < DS_DOMAIN_FUNCTION_2000: - raise CommandError("Lowest function level of a DC is invalid. Correct this or reprovision!") - if level_forest > level_domain: - raise CommandError("Forest function level is higher than the domain level(s). Correct this or reprovision!") - if level_domain > min_level_dc: - raise CommandError("Domain function level is higher than the lowest function level of a DC. Correct this or reprovision!") + try: + res_forest = samdb.search("CN=Partitions,%s" % samdb.get_config_basedn(), + scope=ldb.SCOPE_BASE, attrs=["msDS-Behavior-Version"]) + assert len(res_forest) == 1 + + res_domain = samdb.search(domain_dn, scope=ldb.SCOPE_BASE, + attrs=["msDS-Behavior-Version", "nTMixedDomain"]) + assert len(res_domain) == 1 + + res_domain_cross = samdb.search("CN=Partitions,%s" % samdb.get_config_basedn(), + scope=ldb.SCOPE_SUBTREE, + expression="(&(objectClass=crossRef)(nCName=%s))" % domain_dn, + attrs=["msDS-Behavior-Version"]) + assert len(res_domain_cross) == 1 + + res_dc_s = samdb.search("CN=Sites,%s" % samdb.get_config_basedn(), + scope=ldb.SCOPE_SUBTREE, expression="(objectClass=nTDSDSA)", + attrs=["msDS-Behavior-Version"]) + assert len(res_dc_s) >= 1 + + # default values, since "msDS-Behavior-Version" does not exist on Windows 2000 AD + level_forest = DS_DOMAIN_FUNCTION_2000 + level_domain = DS_DOMAIN_FUNCTION_2000 + + if "msDS-Behavior-Version" in res_forest[0]: + level_forest = int(res_forest[0]["msDS-Behavior-Version"][0]) + if "msDS-Behavior-Version" in res_domain[0]: + level_domain = int(res_domain[0]["msDS-Behavior-Version"][0]) + level_domain_mixed = int(res_domain[0]["nTMixedDomain"][0]) + + min_level_dc = None + for msg in res_dc_s: + if "msDS-Behavior-Version" in msg: + if min_level_dc is None or int(msg["msDS-Behavior-Version"][0]) < min_level_dc: + min_level_dc = int(msg["msDS-Behavior-Version"][0]) + else: + min_level_dc = DS_DOMAIN_FUNCTION_2000 + # well, this is the least + break + + if level_forest < DS_DOMAIN_FUNCTION_2000 or level_domain < DS_DOMAIN_FUNCTION_2000: + raise CommandError("Domain and/or forest function level(s) is/are invalid. Correct them or reprovision!") + if min_level_dc < DS_DOMAIN_FUNCTION_2000: + raise CommandError("Lowest function level of a DC is invalid. Correct this or reprovision!") + if level_forest > level_domain: + raise CommandError("Forest function level is higher than the domain level(s). Correct this or reprovision!") + if level_domain > min_level_dc: + raise CommandError("Domain function level is higher than the lowest function level of a DC. Correct this or reprovision!") + except Exception as e: + raise e if subcommand == "show": self.message("Domain and forest function level for domain '%s'" % domain_dn) |
