Make it clear that the MMR password can differ from the admin passsword
[kai/samba.git] / source4 / scripting / python / samba / provision.py
index 8abcc2f2e330777a25600253ff03d54bfd51e696..68f61532ad8d44358ae597f49bc3a8733e674e84 100644 (file)
@@ -243,13 +243,13 @@ def provision_paths_from_lp(lp, dnsdomain):
     paths.memberofconf = os.path.join(paths.ldapdir, 
                                       "memberof.conf")
     paths.fedoradsinf = os.path.join(paths.ldapdir, 
-                                   "fedorads.inf")
+                                     "fedorads.inf")
+    paths.fedoradspartitions = os.path.join(paths.ldapdir, 
+                                            "fedorads-partitions.ldif")
     paths.olmmrserveridsconf = os.path.join(paths.ldapdir, 
-                                      "mmr_serverids.conf")
+                                            "mmr_serverids.conf")
     paths.olmmrsyncreplconf = os.path.join(paths.ldapdir, 
-                                      "mmr_syncrepl.conf")
-    paths.olmmron = os.path.join(paths.ldapdir, 
-                                      "mmr_on.conf")
+                                           "mmr_syncrepl.conf")
     paths.hklm = "hklm.ldb"
     paths.hkcr = "hkcr.ldb"
     paths.hkcu = "hkcu.ldb"
@@ -623,7 +623,17 @@ def setup_templatesdb(path, setup_path, session_info, credentials, lp):
     """
     templates_ldb = SamDB(path, session_info=session_info,
                           credentials=credentials, lp=lp)
-    templates_ldb.erase()
+    # Wipes the database
+    try:
+        templates_ldb.erase()
+    except:
+        os.unlink(path)
+
+    templates_ldb.load_ldif_file_add(setup_path("provision_templates_init.ldif"))
+
+    templates_ldb = SamDB(path, session_info=session_info,
+                          credentials=credentials, lp=lp)
+
     templates_ldb.load_ldif_file_add(setup_path("provision_templates.ldif"))
 
 
@@ -735,12 +745,6 @@ def setup_samdb(path, setup_path, session_info, credentials, lp,
     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":
@@ -876,9 +880,6 @@ def setup_samdb(path, setup_path, session_info, credentials, lp,
                                 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
@@ -1148,10 +1149,7 @@ def provision_backend(setup_dir=None, message=None,
                       rootdn=None, domaindn=None, schemadn=None, configdn=None,
                       domain=None, hostname=None, adminpass=None, root=None, serverrole=None, 
                       ldap_backend_type=None, ldap_backend_port=None,
-                     ol_mmr_urls=None, mmr_serverids_config=None, mmr_on_config=None, 
-                     mmr_syncrepl_schema_config=None,
-                     mmr_syncrepl_config_config=None,
-                     mmr_syncrepl_user_config=None ):
+                     ol_mmr_urls=None):
 
     def setup_path(file):
         return os.path.join(setup_dir, file)
@@ -1266,61 +1264,52 @@ def provision_backend(setup_dir=None, message=None,
         refint_config = read_and_sub_file(setup_path("refint.conf"),
                                             { "LINK_ATTRS" : refint_attributes})
 
-########################################################
-### generate serverids and ldap-urls for mmr hosts   ###
-########################################################
-
-       mmr_on_config = " "
-       mmr_serverids_config = " "
-
+# generate serverids, ldap-urls and syncrepl-blocks for mmr hosts
+       mmr_on_config = ""
+       mmr_replicator_acl = ""
+       mmr_serverids_config = ""
+        mmr_syncrepl_schema_config = "" 
+       mmr_syncrepl_config_config = "" 
+       mmr_syncrepl_user_config = "" 
+       
        if ol_mmr_urls is not None:
-               mmr_hosts=ol_mmr_urls
-               mmr_hosts=filter(None,mmr_hosts.split(' ')) 
-               
-               mmr_serverids_config = "# Generated from template mmr_serverids.conf\n" 
-               z=0
-               for i in mmr_hosts:
-                       z=z+1
-                       mmr_serverids_config += read_and_sub_file(setup_path("mmr_serverids.conf"),
-                                                                    { "SERVERID" : str(z),
-                                                                      "LDAPSERVER" : i })
-               mmr_on_config = "MirrorMode On"
+                # For now, make these equal
+                mmr_pass = adminpass
 
-########################################################
-### generate syncrepl-blocks for mmr hosts           ###
-########################################################
+               url_list=filter(None,ol_mmr_urls.split(' ')) 
+                if (len(url_list) == 1):
+                    url_list=filter(None,ol_mmr_urls.split(',')) 
+                     
 
-       mmr_syncrepl_schema_config = " " 
-       mmr_syncrepl_config_config = " " 
-       mmr_syncrepl_user_config = " " 
-       
-       if ol_mmr_urls is not None:
-               mmr_hosts=ol_mmr_urls
-               mmr_hosts=filter(None,mmr_hosts.split(' ')) 
-               mmr_syncrepl_schema_config = "# Generated from template mmr_syncrepl.conf\n" 
-               mmr_syncrepl_config_config = "# Generated from template mmr_syncrepl.conf\n" 
-               mmr_syncrepl_user_config = "# Generated from template mmr_syncrepl.conf\n" 
-               z=0
-               for i in mmr_hosts:
-                       z=z+1
+               mmr_on_config = "MirrorMode On"
+               mmr_replicator_acl = "  by dn=cn=replicator,cn=samba read"
+               serverid=0
+               for url in url_list:
+                       serverid=serverid+1
+                       mmr_serverids_config += read_and_sub_file(setup_path("mmr_serverids.conf"),
+                                                                    { "SERVERID" : str(serverid),
+                                                                      "LDAPSERVER" : url })
+                        rid=serverid*10
+                       rid=rid+1
                        mmr_syncrepl_schema_config += read_and_sub_file(setup_path("mmr_syncrepl.conf"),
-                                                                    {  "RID" : str(z),
+                                                                    {  "RID" : str(rid),
                                                                        "MMRDN": names.schemadn,
-                                                                       "LDAPSERVER" : i })
+                                                                       "LDAPSERVER" : url,
+                                                                        "MMR_PASSWORD": mmr_pass})
 
-               for i in mmr_hosts:
-                       z=z+1
+                       rid=rid+1
                        mmr_syncrepl_config_config += read_and_sub_file(setup_path("mmr_syncrepl.conf"),
-                                                                    {  "RID" : str(z),
+                                                                    {  "RID" : str(rid),
                                                                        "MMRDN": names.configdn,
-                                                                       "LDAPSERVER" : i })
+                                                                       "LDAPSERVER" : url,
+                                                                        "MMR_PASSWORD": mmr_pass})
 
-               for i in mmr_hosts:
-                       z=z+1
+                       rid=rid+1
                        mmr_syncrepl_user_config += read_and_sub_file(setup_path("mmr_syncrepl.conf"),
-                                                                    {  "RID" : str(z),
+                                                                    {  "RID" : str(rid),
                                                                        "MMRDN": names.domaindn,
-                                                                       "LDAPSERVER" : i })
+                                                                       "LDAPSERVER" : url,
+                                                                        "MMR_PASSWORD": mmr_pass })
 
 
         setup_file(setup_path("slapd.conf"), paths.slapdconf,
@@ -1331,6 +1320,7 @@ def provision_backend(setup_dir=None, message=None,
                     "SCHEMADN": names.schemadn,
                     "MEMBEROF_CONFIG": memberof_config,
                     "MIRRORMODE": mmr_on_config,
+                    "REPLICATOR_ACL": mmr_replicator_acl,
                     "MMR_SERVERIDS_CONFIG": mmr_serverids_config,
                     "MMR_SYNCREPL_SCHEMA_CONFIG": mmr_syncrepl_schema_config,
                     "MMR_SYNCREPL_CONFIG_CONFIG": mmr_syncrepl_config_config,
@@ -1355,6 +1345,15 @@ def provision_backend(setup_dir=None, message=None,
                               {"LDAPADMINPASS_B64": b64encode(adminpass),
                                "UUID": str(uuid.uuid4()), 
                                "LDAPTIME": timestring(int(time.time()))} )
+       
+       if ol_mmr_urls is not None:
+          setup_file(setup_path("cn=replicator.ldif"),
+                              os.path.join(paths.ldapdir, "db", "samba",  "cn=samba", "cn=replicator.ldif"),
+                              {"MMR_PASSWORD_B64": b64encode(mmr_pass),
+                               "UUID": str(uuid.uuid4()),
+                               "LDAPTIME": timestring(int(time.time()))} )
+
+
 
         mapping = "schema-map-openldap-2.3"
         backend_schema = "backend-schema.schema"