diff options
-rwxr-xr-x | source4/scripting/bin/rebuildextendeddn | 127 |
1 files changed, 61 insertions, 66 deletions
diff --git a/source4/scripting/bin/rebuildextendeddn b/source4/scripting/bin/rebuildextendeddn index 1154b7cb46..5ab90c9fbd 100755 --- a/source4/scripting/bin/rebuildextendeddn +++ b/source4/scripting/bin/rebuildextendeddn @@ -8,17 +8,16 @@ # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007-2008 # Copyright (C) Andrew Bartlett <abartlet@samba.org> 2008 # -# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # @@ -47,17 +46,17 @@ parser.add_option_group(options.VersionOptions(parser)) credopts = options.CredentialsOptions(parser) parser.add_option_group(credopts) parser.add_option("--targetdir", type="string", metavar="DIR", - help="Set target directory") + help="Set target directory") opts = parser.parse_args()[0] def message(text): - """print a message if quiet is not set.""" - if not opts.quiet: - print text + """print a message if quiet is not set.""" + if not opts.quiet: + print text if len(sys.argv) == 1: - opts.interactive = True + opts.interactive = True lp = sambaopts.get_loadparm() smbconf = lp.configfile @@ -70,70 +69,66 @@ session = system_session() def get_paths(targetdir=None,smbconf=None): - if targetdir is not None: - if (not os.path.exists(os.path.join(targetdir, "etc"))): - os.makedirs(os.path.join(targetdir, "etc")) - smbconf = os.path.join(targetdir, "etc", "smb.conf") - if smbconf is None: - smbconf = param.default_path() + if targetdir is not None: + if (not os.path.exists(os.path.join(targetdir, "etc"))): + os.makedirs(os.path.join(targetdir, "etc")) + smbconf = os.path.join(targetdir, "etc", "smb.conf") + if smbconf is None: + smbconf = param.default_path() - if not os.path.exists(smbconf): - print >>sys.stderr, "Unable to find smb.conf .. "+smbconf - parser.print_usage() - sys.exit(1) + if not os.path.exists(smbconf): + print >>sys.stderr, "Unable to find smb.conf .. "+smbconf + parser.print_usage() + sys.exit(1) - lp = param.LoadParm() - lp.load(smbconf) - paths = provision_paths_from_lp(lp,"foo") - return paths + lp = param.LoadParm() + lp.load(smbconf) + paths = provision_paths_from_lp(lp,"foo") + return paths def rebuild_en_dn(credentials,session_info,paths): - lp = param.LoadParm() - lp.load(paths.smbconf) - names = ProvisionNames() - names.domain = lp.get("workgroup") - names.realm = lp.get("realm") - names.rootdn = "DC=" + names.realm.replace(".",",DC=") - - attrs = ["dn" ] - dn = "" - sam_ldb = Ldb(paths.samdb, session_info=session_info, credentials=credentials,lp=lp) - attrs2 = ["schemaNamingContext"] - res2 = sam_ldb.search(expression="(objectClass=*)",base="", scope=SCOPE_BASE, attrs=attrs2) - attrs.extend(get_linked_attributes(ldb.Dn(sam_ldb,str(res2[0]["schemaNamingContext"])),sam_ldb).keys()) - attrs.extend(get_dnsyntax_attributes(ldb.Dn(sam_ldb,str(res2[0]["schemaNamingContext"])),sam_ldb)), - sam_ldb.transaction_start() - res = sam_ldb.search(expression="(cn=*)", scope=SCOPE_SUBTREE, attrs=attrs,controls=["search_options:1:2"] -) - mod = "" - for i in range (0,len(res)): - #print >>sys.stderr,res[i].dn - dn = res[i].dn - for att in res[i]: - if ( (att != "dn" and att != "cn") and not (res[i][att] is None) ): - m = ldb.Message() - m.dn = ldb.Dn(sam_ldb, str(dn)) - saveatt = [] - for j in range (0,len( res[i][att])): - mod = mod +att +": "+str(res[i][att][j])+"\n" - saveatt.append(str(res[i][att][j])) - m[att] = ldb.MessageElement(saveatt, ldb.FLAG_MOD_REPLACE, att) - sam_ldb.modify(m) - res3 = sam_ldb.search(expression="(&(dn=%s)(%s=*))"%(dn,att),scope=SCOPE_SUBTREE, attrs=[att],controls=["search_options:1:2"]) - if( len(res3) == 0 or (len(res3[0][att])!= len(saveatt))): - print >>sys.stderr, str(dn) + " has no attr " +att+ " or a wrong value" - for satt in saveatt: - print >>sys.stderr,str(att)+" = "+satt - sam_ldb.transaction_cancel() - sam_ldb.transaction_commit() - - - - -paths = get_paths(targetdir=opts.targetdir,smbconf=smbconf) - + lp = param.LoadParm() + lp.load(paths.smbconf) + names = ProvisionNames() + names.domain = lp.get("workgroup") + names.realm = lp.get("realm") + names.rootdn = "DC=" + names.realm.replace(".",",DC=") + + attrs = ["dn" ] + dn = "" + sam_ldb = Ldb(paths.samdb, session_info=session_info, credentials=credentials,lp=lp) + attrs2 = ["schemaNamingContext"] + res2 = sam_ldb.search(expression="(objectClass=*)",base="", scope=SCOPE_BASE, attrs=attrs2) + attrs.extend(get_linked_attributes(ldb.Dn(sam_ldb,str(res2[0]["schemaNamingContext"])),sam_ldb).keys()) + attrs.extend(get_dnsyntax_attributes(ldb.Dn(sam_ldb,str(res2[0]["schemaNamingContext"])),sam_ldb)) + sam_ldb.transaction_start() + res = sam_ldb.search(expression="(cn=*)", scope=SCOPE_SUBTREE, attrs=attrs,controls=["search_options:1:2"]) + mod = "" + for i in range (0,len(res)): + #print >>sys.stderr,res[i].dn + dn = res[i].dn + for att in res[i]: + if ( (att != "dn" and att != "cn") and not (res[i][att] is None) ): + m = ldb.Message() + m.dn = ldb.Dn(sam_ldb, str(dn)) + saveatt = [] + for j in range (0,len( res[i][att])): + mod = mod +att +": "+str(res[i][att][j])+"\n" + saveatt.append(str(res[i][att][j])) + m[att] = ldb.MessageElement(saveatt, ldb.FLAG_MOD_REPLACE, att) + sam_ldb.modify(m) + res3 = sam_ldb.search(expression="(&(dn=%s)(%s=*))"%(dn,att),scope=SCOPE_SUBTREE, attrs=[att],controls=["search_options:1:2"]) + if( len(res3) == 0 or (len(res3[0][att])!= len(saveatt))): + print >>sys.stderr, str(dn) + " has no attr " +att+ " or a wrong value" + for satt in saveatt: + print >>sys.stderr,str(att)+" = "+satt + sam_ldb.transaction_cancel() + sam_ldb.transaction_commit() + + +paths = get_paths(targetdir=opts.targetdir, smbconf=smbconf) rebuild_en_dn(creds,session,paths) |