diff options
author | Andrew Tridgell <tridge@samba.org> | 2009-09-18 14:12:02 -0700 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2009-09-18 14:12:02 -0700 |
commit | 716ddc2a897eacd08aed7ff4bee165e418ff63cc (patch) | |
tree | 9f400d977baa55edc70fa39e1346fb2dda975a27 /source4/scripting/bin/reorgldb.py | |
parent | c6d58efa4b1ad5ff4a9e0f224b8a9789d8f82faf (diff) | |
parent | c2139e8e5646a8558d70c1ca4ce2d755497de8e1 (diff) | |
download | samba-716ddc2a897eacd08aed7ff4bee165e418ff63cc.tar.gz samba-716ddc2a897eacd08aed7ff4bee165e418ff63cc.tar.bz2 samba-716ddc2a897eacd08aed7ff4bee165e418ff63cc.zip |
Merge branch 'master' of /home/tridge/samba/git/combined
Diffstat (limited to 'source4/scripting/bin/reorgldb.py')
-rwxr-xr-x | source4/scripting/bin/reorgldb.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/source4/scripting/bin/reorgldb.py b/source4/scripting/bin/reorgldb.py new file mode 100755 index 0000000000..571363fdc7 --- /dev/null +++ b/source4/scripting/bin/reorgldb.py @@ -0,0 +1,60 @@ +#!/usr/bin/python +# +# Copyright (C) Matthieu Patou <mat@matws.net> 2009 +# This script realize an offline reorganisation of an LDB +# file it helps to reduce (sometime drastically) the +# size of LDB files. +import sys +import optparse +import os +sys.path.insert(0, "bin/python") + +import samba +from samba.credentials import DONT_USE_KERBEROS +from samba.auth import system_session +from samba import Ldb, substitute_var, valid_netbios_name, check_all_substituted +from ldb import SCOPE_SUBTREE, SCOPE_ONELEVEL, SCOPE_BASE, LdbError +import ldb +import samba.getopt as options +from samba.samdb import SamDB +from samba import param +from samba.provision import ProvisionPaths, ProvisionNames,provision_paths_from_lp, Schema + +parser = optparse.OptionParser("provision [options]") +sambaopts = options.SambaOptions(parser) +parser.add_option_group(sambaopts) +parser.add_option_group(options.VersionOptions(parser)) +credopts = options.CredentialsOptions(parser) +parser.add_option_group(credopts) +parser.add_option("--database", type="string", metavar="FILE", + help="LDB to reorganize") +opts = parser.parse_args()[0] +lp = sambaopts.get_loadparm() +smbconf = lp.configfile + +if not opts.database: + print "Parameter database is mandatory" + sys.exit(1) +creds = credopts.get_credentials(lp) +creds.set_kerberos_state(DONT_USE_KERBEROS) +session = system_session() +empty = ldb.Message() +newname="%s.new"%(opts.database) +if os.path.exists(newname): + os.remove(newname) +old_ldb = Ldb(opts.database, session_info=session, credentials=creds,lp=lp) +new_ldb = Ldb(newname,session_info=session, credentials=creds,lp=lp) + +new_ldb.transaction_start() +res = old_ldb.search(expression="(dn=*)",base="", scope=SCOPE_SUBTREE) +for i in range(0,len(res)): + if str(res[i].dn) == "@BASEINFO": + continue + if str(res[i].dn).startswith("@INDEX:"): + continue + delta = new_ldb.msg_diff(empty,res[i]) + delta.dn = res[i].dn + delta.remove("distinguishedName") + new_ldb.add(delta) + +new_ldb.transaction_commit() |