⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 provision.py

📁 samba最新软件
💻 PY
📖 第 1 页 / 共 4 页
字号:
def setup_samdb(path, setup_path, session_info, credentials, lp,                 names, message,                 domainsid, aci, domainguid, policyguid,                 fill, adminpass, krbtgtpass,                 machinepass, invocationid, dnspass,                serverrole, ldap_backend=None,                 ldap_backend_type=None):    """Setup a complete SAM Database.        :note: This will wipe the main SAM database file!    """    erase = (fill != FILL_DRS)    # Also wipes the database    setup_samdb_partitions(path, setup_path, message=message, lp=lp,                           credentials=credentials, session_info=session_info,                           names=names,                            ldap_backend=ldap_backend, serverrole=serverrole,                           ldap_backend_type=ldap_backend_type, erase=erase)    samdb = SamDB(path, session_info=session_info,                   credentials=credentials, lp=lp)    if fill == FILL_DRS:       # We want to finish here, but setup the index before we do so        message("Setting up sam.ldb index")        samdb.load_ldif_file_add(setup_path("provision_index.ldif"))        return samdb    message("Pre-loading the Samba 4 and AD schema")    samdb.set_domain_sid(domainsid)    if serverrole == "domain controller":        samdb.set_invocation_id(invocationid)    load_schema(setup_path, samdb, names.schemadn, names.netbiosname,                 names.configdn, names.sitename)    samdb.transaction_start()            try:        message("Adding DomainDN: %s (permitted to fail)" % names.domaindn)        if serverrole == "domain controller":            domain_oc = "domainDNS"        else:            domain_oc = "samba4LocalDomain"        setup_add_ldif(samdb, setup_path("provision_basedn.ldif"), {            "DOMAINDN": names.domaindn,            "ACI": aci,            "DOMAIN_OC": domain_oc            })        message("Modifying DomainDN: " + names.domaindn + "")        if domainguid is not None:            domainguid_mod = "replace: objectGUID\nobjectGUID: %s\n-" % domainguid        else:            domainguid_mod = ""        setup_modify_ldif(samdb, setup_path("provision_basedn_modify.ldif"), {            "LDAPTIME": timestring(int(time.time())),            "DOMAINSID": str(domainsid),            "SCHEMADN": names.schemadn,             "NETBIOSNAME": names.netbiosname,            "DEFAULTSITE": names.sitename,            "CONFIGDN": names.configdn,            "SERVERDN": names.serverdn,            "POLICYGUID": policyguid,            "DOMAINDN": names.domaindn,            "DOMAINGUID_MOD": domainguid_mod,            })        message("Adding configuration container (permitted to fail)")        setup_add_ldif(samdb, setup_path("provision_configuration_basedn.ldif"), {            "CONFIGDN": names.configdn,             "ACI": aci,            "EXTENSIBLEOBJECT": "# no objectClass: extensibleObject for local ldb",            })        message("Modifying configuration container")        setup_modify_ldif(samdb, setup_path("provision_configuration_basedn_modify.ldif"), {            "CONFIGDN": names.configdn,             "SCHEMADN": names.schemadn,            })        message("Adding schema container (permitted to fail)")        setup_add_ldif(samdb, setup_path("provision_schema_basedn.ldif"), {            "SCHEMADN": names.schemadn,            "ACI": aci,            "EXTENSIBLEOBJECT": "# no objectClass: extensibleObject for local ldb"            })        message("Modifying schema container")        prefixmap = open(setup_path("prefixMap.txt"), 'r').read()        setup_modify_ldif(samdb,             setup_path("provision_schema_basedn_modify.ldif"), {            "SCHEMADN": names.schemadn,            "NETBIOSNAME": names.netbiosname,            "DEFAULTSITE": names.sitename,            "CONFIGDN": names.configdn,            "SERVERDN": names.serverdn,            "PREFIXMAP_B64": b64encode(prefixmap)            })        message("Setting up sam.ldb Samba4 schema")        setup_add_ldif(samdb, setup_path("schema_samba4.ldif"),                        {"SCHEMADN": names.schemadn })        message("Setting up sam.ldb AD schema")        setup_add_ldif(samdb, setup_path("schema.ldif"),                        {"SCHEMADN": names.schemadn})        message("Setting up sam.ldb configuration data")        setup_add_ldif(samdb, setup_path("provision_configuration.ldif"), {            "CONFIGDN": names.configdn,            "NETBIOSNAME": names.netbiosname,            "DEFAULTSITE": names.sitename,            "DNSDOMAIN": names.dnsdomain,            "DOMAIN": names.domain,            "SCHEMADN": names.schemadn,            "DOMAINDN": names.domaindn,            "SERVERDN": names.serverdn            })        message("Setting up display specifiers")        setup_add_ldif(samdb, setup_path("display_specifiers.ldif"),                        {"CONFIGDN": names.configdn})        message("Adding users container (permitted to fail)")        setup_add_ldif(samdb, setup_path("provision_users_add.ldif"), {                "DOMAINDN": names.domaindn})        message("Modifying users container")        setup_modify_ldif(samdb, setup_path("provision_users_modify.ldif"), {                "DOMAINDN": names.domaindn})        message("Adding computers container (permitted to fail)")        setup_add_ldif(samdb, setup_path("provision_computers_add.ldif"), {                "DOMAINDN": names.domaindn})        message("Modifying computers container")        setup_modify_ldif(samdb, setup_path("provision_computers_modify.ldif"), {                "DOMAINDN": names.domaindn})        message("Setting up sam.ldb data")        setup_add_ldif(samdb, setup_path("provision.ldif"), {            "DOMAINDN": names.domaindn,            "NETBIOSNAME": names.netbiosname,            "DEFAULTSITE": names.sitename,            "CONFIGDN": names.configdn,            "SERVERDN": names.serverdn            })        if fill == FILL_FULL:            message("Setting up sam.ldb users and groups")            setup_add_ldif(samdb, setup_path("provision_users.ldif"), {                "DOMAINDN": names.domaindn,                "DOMAINSID": str(domainsid),                "CONFIGDN": names.configdn,                "ADMINPASS_B64": b64encode(adminpass),                "KRBTGTPASS_B64": b64encode(krbtgtpass),                })            if serverrole == "domain controller":                message("Setting up self join")                setup_self_join(samdb, names=names, invocationid=invocationid,                                 dnspass=dnspass,                                  machinepass=machinepass,                                 domainsid=domainsid, policyguid=policyguid,                                setup_path=setup_path)    #We want to setup the index last, as adds are faster unindexed        message("Setting up sam.ldb index")        samdb.load_ldif_file_add(setup_path("provision_index.ldif"))    except:        samdb.transaction_cancel()        raise    samdb.transaction_commit()    return samdbFILL_FULL = "FULL"FILL_NT4SYNC = "NT4SYNC"FILL_DRS = "DRS"def provision(setup_dir, message, session_info,               credentials, smbconf=None, targetdir=None, samdb_fill=FILL_FULL, realm=None,               rootdn=None, domaindn=None, schemadn=None, configdn=None,               serverdn=None,              domain=None, hostname=None, hostip=None, hostip6=None,               domainsid=None, adminpass=None, krbtgtpass=None, domainguid=None,               policyguid=None, invocationid=None, machinepass=None,               dnspass=None, root=None, nobody=None, nogroup=None, users=None,               wheel=None, backup=None, aci=None, serverrole=None,               ldap_backend=None, ldap_backend_type=None, sitename=None):    """Provision samba4        :note: caution, this wipes all existing data!    """    def setup_path(file):        return os.path.join(setup_dir, file)    if domainsid is None:        domainsid = security.random_sid()    else:        domainsid = security.Sid(domainsid)    if policyguid is None:        policyguid = str(uuid.uuid4())    if adminpass is None:        adminpass = misc.random_password(12)    if krbtgtpass is None:        krbtgtpass = misc.random_password(12)    if machinepass is None:        machinepass  = misc.random_password(12)    if dnspass is None:        dnspass = misc.random_password(12)    root_uid = findnss_uid([root or "root"])    nobody_uid = findnss_uid([nobody or "nobody"])    users_gid = findnss_gid([users or "users"])    if wheel is None:        wheel_gid = findnss_gid(["wheel", "adm"])    else:        wheel_gid = findnss_gid([wheel])    if aci is None:        aci = "# no aci for local ldb"    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")    # only install a new smb.conf if there isn't one there already    if not os.path.exists(smbconf):        make_smbconf(smbconf, setup_path, hostname, domain, realm, serverrole,                      targetdir)    lp = param.LoadParm()    lp.load(smbconf)    names = guess_names(lp=lp, hostname=hostname, domain=domain,                         dnsdomain=realm, serverrole=serverrole, sitename=sitename,                        rootdn=rootdn, domaindn=domaindn, configdn=configdn, schemadn=schemadn,                        serverdn=serverdn)    paths = provision_paths_from_lp(lp, names.dnsdomain)    if hostip is None:        hostip = socket.getaddrinfo(names.hostname, None, socket.AF_INET, socket.AI_CANONNAME, socket.IPPROTO_IP)[0][-1][0]    if hostip6 is None:        try:            hostip6 = socket.getaddrinfo(names.hostname, None, socket.AF_INET6, socket.AI_CANONNAME, socket.IPPROTO_IP)[0][-1][0]        except socket.gaierror:             pass    if serverrole is None:        serverrole = lp.get("server role")    assert serverrole in ("domain controller", "member server", "standalone")    if invocationid is None and serverrole == "domain controller":        invocationid = str(uuid.uuid4())    if not os.path.exists(paths.private_dir):        os.mkdir(paths.private_dir)    ldapi_url = "ldapi://%s" % urllib.quote(paths.s4_ldapi_path, safe="")        if ldap_backend is not None:        if ldap_backend == "ldapi":            # provision-backend will set this path suggested slapd command line / fedorads.inf            ldap_backend = "ldapi://%s" % urllib.quote(os.path.join(paths.private_dir, "ldap", "ldapi"), safe="")                 # only install a new shares config db if there is none    if not os.path.exists(paths.shareconf):        message("Setting up share.ldb")        share_ldb = Ldb(paths.shareconf, session_info=session_info,                         credentials=credentials, lp=lp)        share_ldb.load_ldif_file_add(setup_path("share.ldif"))         message("Setting up secrets.ldb")    secrets_ldb = setup_secretsdb(paths.secrets, setup_path,                                   session_info=session_info,                                   credentials=credentials, lp=lp)    message("Setting up the registry")    setup_registry(paths.hklm, setup_path, session_info,                    credentials=credentials, lp=lp)    message("Setting up templates db")    setup_templatesdb(paths.templates, setup_path, session_info=session_info,                       credentials=credentials, lp=lp)    message("Setting up idmap db")    idmap = setup_idmapdb(paths.idmapdb, setup_path, session_info=session_info,                          credentials=credentials, lp=lp)    samdb = setup_samdb(paths.samdb, setup_path, session_info=session_info,                         credentials=credentials, lp=lp, names=names,                        message=message,                         domainsid=domainsid,                         aci=aci, domainguid=domainguid, policyguid=policyguid,                         fill=samdb_fill,                         adminpass=adminpass, krbtgtpass=krbtgtpass,                        invocationid=invocationid,                         machinepass=machinepass, dnspass=dnspass,                        serverrole=serverrole, ldap_backend=ldap_backend,                         ldap_backend_type=ldap_backend_type)    if lp.get("server role") == "domain controller":        if paths.netlogon is None:            message("Existing smb.conf does not have a [netlogon] share, but you are configuring a DC.")            message("Please either remove %s or see the template at %s" %                     ( paths.smbconf, setup_path("provision.smb.conf.dc")))            assert(paths.netlogon is not None)        if paths.sysvol is None:            message("Existing smb.conf does not have a [sysvol] share, but you are configuring a DC.")            message("Please either remove %s or see the template at %s" %                     (paths.smbconf, setup_path("provision.smb.conf.dc")))            assert(paths.sysvol is not None)                                policy_path = os.path.join(paths.sysvol, names.dnsdomain, "Policies",                                    "{" + policyguid + "}")        os.makedirs(policy_path, 0755)        os.makedirs(os.path.join(policy_path, "Machine"), 0755)        os.makedirs(os.path.join(policy_path, "User"), 0755)        if not os.path.isdir(paths.netlogon):            os.makedirs(paths.netlogon, 0755)    if samdb_fill == FILL_FULL:        setup_name_mappings(samdb, idmap, str(domainsid), names.domaindn,                            root_uid=root_uid, nobody_uid=nobody_uid,                            users_gid=users_gid, wheel_gid=wheel_gid)        message("Setting up sam.ldb rootDSE marking as synchronized")        setup_modify_ldif(samdb, setup_path("provision_rootdse_modify.ldif"))        # Only make a zone file on the first DC, it should be replicated with DNS replication        if serverrole == "domain controller":            secrets_ldb = Ldb(paths.secrets, session_info=session_info,                               credentials=credentials, lp=lp)            secretsdb_become_dc(secrets_ldb, setup_path, domain=domain, realm=names.realm,                                netbiosname=names.netbiosname, domainsid=domainsid,                                 keytab_path=paths.keytab, samdb_url=paths.samdb,                                 dns_keytab_path=paths.dns_keytab, dnspass=dnspass,                                 machinepass=machinepass, dnsdomain=names.dnsdomain)            samdb = SamDB(paths.samdb, session_info=session_info,                       credentials=credentials, lp=lp)            domainguid = samdb.searchone(basedn=domaindn, attribute="objectGUID")            assert isinstance(domainguid, str)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -