[PATCH 3/4] s4 provision: Handle transaction inside create secrets

Matthieu Patou mat at matws.net
Thu May 6 18:17:51 MDT 2010


  create secrets used to leave the commit to calling function which is
  not good for the unittesting
---
 source4/scripting/python/samba/provision.py |   40 +++++++++++++++------------
 1 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py
index 0c1c46c..1976a16 100644
--- a/source4/scripting/python/samba/provision.py
+++ b/source4/scripting/python/samba/provision.py
@@ -738,22 +738,29 @@ def setup_secretsdb(path, setup_path, session_info, backend_credentials, lp):
     secrets_ldb = Ldb(path, session_info=session_info, 
                       lp=lp)
     secrets_ldb.transaction_start()
-    secrets_ldb.load_ldif_file_add(setup_path("secrets.ldif"))
-
-    if backend_credentials is not None and backend_credentials.authentication_requested():
-        if backend_credentials.get_bind_dn() is not None:
-            setup_add_ldif(secrets_ldb, setup_path("secrets_simple_ldap.ldif"), {
-                    "LDAPMANAGERDN": backend_credentials.get_bind_dn(),
-                    "LDAPMANAGERPASS_B64": b64encode(backend_credentials.get_password())
-                    })
-        else:
-            setup_add_ldif(secrets_ldb, setup_path("secrets_sasl_ldap.ldif"), {
-                    "LDAPADMINUSER": backend_credentials.get_username(),
-                    "LDAPADMINREALM": backend_credentials.get_realm(),
-                    "LDAPADMINPASS_B64": b64encode(backend_credentials.get_password())
-                    })
+    try:
+        secrets_ldb.load_ldif_file_add(setup_path("secrets.ldif"))
+
+        if backend_credentials is not None and backend_credentials.authentication_requested():
+            if backend_credentials.get_bind_dn() is not None:
+                setup_add_ldif(secrets_ldb, setup_path("secrets_simple_ldap.ldif"), {
+                        "LDAPMANAGERDN": backend_credentials.get_bind_dn(),
+                        "LDAPMANAGERPASS_B64": b64encode(backend_credentials.get_password())
+                        })
+            else:
+                setup_add_ldif(secrets_ldb, setup_path("secrets_sasl_ldap.ldif"), {
+                        "LDAPADMINUSER": backend_credentials.get_username(),
+                        "LDAPADMINREALM": backend_credentials.get_realm(),
+                        "LDAPADMINPASS_B64": b64encode(backend_credentials.get_password())
+                        })
+
+    except:
+        secrets_ldb.transaction_cancel()
+        raise
+    else:
+        secrets_ldb.transaction_commit()
+        return secrets_ldb
 
-    return secrets_ldb
 
 def setup_privileges(path, setup_path, session_info, lp):
     """Setup the privileges database.
@@ -1484,9 +1491,6 @@ def provision(setup_dir, message, session_info,
     create_phpldapadmin_config(paths.phpldapadminconfig, setup_path, 
                                ldapi_url)
 
-    #Now commit the secrets.ldb to disk
-    secrets_ldb.transaction_commit()
-
     # the commit creates the dns.keytab, now chown it
     dns_keytab_path = os.path.join(paths.private_dir, paths.dns_keytab)
     if (os.path.isfile(dns_keytab_path) and paths.bind_gid is not None):
-- 
1.7.0.4


--------------050001030301000908040904
Content-Type: text/x-patch;
 name="0001-s4-ldb-implement-comparaison-on-the-ldb-Message.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
 filename*0="0001-s4-ldb-implement-comparaison-on-the-ldb-Message.patch"



More information about the samba-technical mailing list