#!/usr/bin/python2.6 from samba.samdb import SamDB import ldb import optparse import sys from samba.param import LoadParm from samba.auth import system_session from univention import config_registry parser = optparse.OptionParser("$prog [options] ") parser.add_option("-v", "--verbose", action="store_true", dest="verbose") parser.add_option("--createsite", action="store_true", dest="createsite") parser.add_option("--createsitelink", action="store_true", dest="createsitelink") parser.add_option("--createsubnet", action="store_true", dest="createsubnet") parser.add_option("--modifysubnet", action="store_true", dest="modifysubnet") parser.add_option("--site", dest="site") parser.add_option("--sitelink", dest="sitelink", default="DEFAULTIPSITELINK") parser.add_option("--subnet", dest="subnet") opts, args = parser.parse_args() if opts.createsitelink: if not opts.sitelink: print >> sys.stderr, "Option --sitelink needed for sitelink creation" sys.exit(1) if opts.createsite: if not opts.site: print >> sys.stderr, "Option --site needed for site creation" sys.exit(1) if not opts.sitelink: print >> sys.stderr, "Option --sitelink needed for site creation" sys.exit(1) if opts.createsubnet or opts.modifysubnet: if not opts.subnet: print >> sys.stderr, "Option --subnet needed for subnet creation" sys.exit(1) if not opts.site: print >> sys.stderr, "Option --site needed for subnet creation" sys.exit(1) if not (opts.createsitelink or opts.createsite or opts.createsubnet or opts.modifysubnet): parser.print_help() lp = LoadParm() lp.load('/etc/samba/smb.conf') samdb = SamDB('/var/lib/samba/private/sam.ldb', session_info=system_session(lp), lp=lp) # samdb = SamDB('ldapi:///var/lib/samba/private/ldap_priv/ldapi') configRegistry = config_registry.ConfigRegistry() configRegistry.load() ldap_base = configRegistry.get('ldap/base') ldif_dict = { 'branchsite_name': opts.site, 'sitelink': opts.sitelink, 'branchsite_subnet': opts.subnet, 'ldap/base': ldap_base } if opts.createsite: if not opts.createsitelink: res = samdb.search("CN=Configuration,%s" % ldap_base, scope=ldb.SCOPE_SUBTREE, expression="(&(objectClass=siteLink)(cn=%s))" % opts.sitelink) if not res: print >> sys.stderr, "sitelink %s not found" % opts.sitelink sys.exit(1) site_add_ldif=''' dn: CN=%(branchsite_name)s,CN=Sites,CN=Configuration,%(ldap/base)s objectClass: site cn: %(branchsite_name)s showInAdvancedViewOnly: TRUE name: %(branchsite_name)s systemFlags: 1107296256 objectCategory: CN=Site,CN=Schema,CN=Configuration,%(ldap/base)s dn: CN=NTDS Site Settings,CN=%(branchsite_name)s,CN=Sites,CN=Configuration,%(ldap/base)s objectClass: nTDSSiteSettings cn: NTDS Site Settings showInAdvancedViewOnly: TRUE name: NTDS Site Settings objectCategory: CN=NTDS-Site-Settings,CN=Schema,CN=Configuration,%(ldap/base)s dn: CN=Servers,CN=%(branchsite_name)s,CN=Sites,CN=Configuration,%(ldap/base)s objectClass: serversContainer cn: Servers showInAdvancedViewOnly: TRUE name: Servers systemFlags: 33554432 objectCategory: CN=Servers-Container,CN=Schema,CN=Configuration,%(ldap/base)s ''' % ldif_dict samdb.add_ldif(site_add_ldif) print "created site %s" % opts.site if not opts.createsitelink: ## and add it to the sitelink sitelink_modify_ldif=''' dn: CN=%(sitelink)s,CN=IP,CN=Inter-Site Transports,CN=Sites,CN=Configuration,%(ldap/base)s changetype: modify add: siteList siteList: CN=%(branchsite_name)s,CN=Sites,CN=Configuration,%(ldap/base)s ''' % ldif_dict samdb.modify_ldif(sitelink_modify_ldif) print "added site %s to sitelink %s" % (opts.site, opts.sitelink) elif opts.site: res = samdb.search("CN=Configuration,%s" % ldap_base, scope=ldb.SCOPE_SUBTREE, expression="(&(objectClass=site)(cn=%s))" % opts.site) if not res: print >> sys.stderr, "site %s not found" % opts.site sys.exit(1) if opts.createsitelink: sitelink_add_ldif=''' dn: CN=%(sitelink)s,CN=IP,CN=Inter-Site Transports,CN=Sites,CN=Configuration,%(ldap/base)s objectClass: siteLink cn: %(sitelink)s cost: 100 showInAdvancedViewOnly: TRUE name: %(sitelink)s systemFlags: 1073741824 objectCategory: CN=Site-Link,CN=Schema,CN=Configuration,%(ldap/base)s replInterval: 180 siteList: CN=%(branchsite_name)s,CN=Sites,CN=Configuration,%(ldap/base)s ''' % ldif_dict samdb.add_ldif(sitelink_add_ldif) print "created sitelink %s" % opts.sitelink if opts.createsubnet: subnet_add_ldif=''' dn: CN=%(branchsite_subnet)s,CN=Subnets,CN=Sites,CN=Configuration,%(ldap/base)s objectClass: subnet cn: %(branchsite_subnet)s showInAdvancedViewOnly: TRUE name: %(branchsite_subnet)s systemFlags: 1073741824 siteObject: CN=%(branchsite_name)s,CN=Sites,CN=Configuration,%(ldap/base)s objectCategory: CN=Subnet,CN=Schema,CN=Configuration,%(ldap/base)s ''' % ldif_dict samdb.add_ldif(subnet_add_ldif) print "created subnet %s for site %s" % (opts.subnet, opts.site) elif opts.modifysubnet: res = samdb.search("CN=Configuration,%s" % ldap_base, scope=ldb.SCOPE_SUBTREE, expression="(&(objectClass=subnet)(cn=%s))" % opts.subnet) if not res: print >> sys.stderr, "subnet %s not found" % opts.subnet sys.exit(1) res = samdb.search("CN=Configuration,%s" % ldap_base, scope=ldb.SCOPE_SUBTREE, expression="(&(objectClass=site)(cn=%s))" % opts.site) if not res: print >> sys.stderr, "site %s not found" % opts.site sys.exit(1) site_dn = res[0]['dn'] subnet_dn = "CN=$(branchsite_subnet)s,CN=Subnets,CN=Sites,CN=Configuration,%(ldap/base)s" % ldif_dict subnet_modify_ldif=''' dn: %s changetype: modify replace: siteObject siteObject: %s ''' % (subnet_dn, site_dn) samdb.modify_ldif(subnet_modify_ldif) print "associated subnet %s with site %s" % (opts.subnet, opts.site)