diff options
author | Andrew Bartlett <abartlet@samba.org> | 2020-11-18 12:11:10 +1300 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2020-11-26 06:52:40 +0000 |
commit | 15609cb91986b3e29c5b1a3b6c69c04829f43eb4 (patch) | |
tree | fd571c7f0dd27a9cd8e6189362913e676641210f /python | |
parent | 53c39a261973f5e0ea1944c82ec14812187ed03f (diff) | |
download | samba-15609cb91986b3e29c5b1a3b6c69c04829f43eb4.tar.gz |
samba-tool domain backup: Confirm the sidForRestore we will put into the backup is free
Otherwise the administrator might only find there is a problem once they
attempt to restore the domain!
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14575
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
Diffstat (limited to 'python')
-rw-r--r-- | python/samba/netcmd/domain_backup.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/python/samba/netcmd/domain_backup.py b/python/samba/netcmd/domain_backup.py index 2977b071ec3..5a46ad13f0c 100644 --- a/python/samba/netcmd/domain_backup.py +++ b/python/samba/netcmd/domain_backup.py @@ -108,6 +108,32 @@ def get_sid_for_restore(samdb, logger): # Construct full SID sid = dom_sid(samdb.get_domain_sid()) + sid_for_restore = str(sid) + '-' + str(rid) + + # Confirm the SID is not already in use + try: + res = samdb.search(scope=ldb.SCOPE_BASE, + base='<SID=%s>' % sid_for_restore, + attrs=[], + controls=['show_deleted:1', + 'show_recycled:1']) + if len(res) != 1: + # This case makes no sense, but neither does a corrupt RID set + raise CommandError("Cannot create backup - " + "this DC's RID pool is corrupt, " + "the next SID (%s) appears to be in use." % + sid_for_restore) + raise CommandError("Cannot create backup - " + "this DC's RID pool is corrupt, " + "the next SID %s points to existing object %s. " + "Please run samba-tool dbcheck on the source DC." % + (sid_for_restore, res[0].dn)) + except ldb.LdbError as e: + (enum, emsg) = e.args + if enum != ldb.ERR_NO_SUCH_OBJECT: + # We want NO_SUCH_OBJECT, anything else is a serious issue + raise + return str(sid) + '-' + str(rid) |