#!/usr/bin/env python # # Copyright (C) Matthieu Patou 2010 # # # 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 . __docformat__ = "restructuredText" import optparse import sys # Allow to run from s4 source directory (without installing samba) sys.path.insert(0, "bin/python") import samba.getopt as options from samba.credentials import DONT_USE_KERBEROS from samba.auth import system_session from samba import param from samba.provision import find_provision_key_parameters from samba.upgradehelpers import (get_paths, get_ldbs) from ldb import SCOPE_BASE, Message, MessageElement, Dn, FLAG_MOD_ADD parser = optparse.OptionParser("chgtdcpass [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) (opts, args) = parser.parse_args() lp = sambaopts.get_loadparm() smbconf = lp.configfile creds = credopts.get_credentials(lp) creds.set_kerberos_state(DONT_USE_KERBEROS) if len(args) > 0: num_contacts = int(args[0]) else: num_contacts = 10000 if __name__ == '__main__': paths = get_paths(param, smbconf=smbconf) session = system_session() ldbs = get_ldbs(paths, creds, session, lp) ldbs.startTransactions() names = find_provision_key_parameters(ldbs.sam, ldbs.secrets, ldbs.idmap, paths, smbconf, lp) contactdn = "OU=Contacts,%s" % str(names.domaindn) res = ldbs.sam.search(expression="(distinguishedName=%s)" % contactdn, base=str(names.domaindn), scope=SCOPE_BASE) if (len(res) == 0): msg = Message() msg.dn = Dn(ldbs.sam, contactdn) msg["objectClass"] = MessageElement("organizationalUnit", FLAG_MOD_ADD, "objectClass") ldbs.sam.add(msg) print "Creating %d contacts" % num_contacts count = 0 increment = num_contacts / 10 if increment > 5000: increment = 5000 while (count < num_contacts): msg = Message() msg.dn = Dn(ldbs.sam, "CN=contact%d,%s" % (count + 1, contactdn)) msg["objectClass"] = MessageElement("contact", FLAG_MOD_ADD, "objectClass") if count !=0 and (count % increment) == 0: print "Added contacts: %d" % count ldbs.sam.add(msg) count += 1 ldbs.groupedCommit()