KCC: load samdb before calling kcc.run()
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Mon, 22 Jun 2015 04:38:29 +0000 (16:38 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 29 Oct 2015 04:08:15 +0000 (05:08 +0100)
kcc.run() is a mega-function that does nearly everything, including
loading the database. The --list-valid-dsas and --test-all-reps-from
tasks also want to load the database, but not do all that other run()
stuff, so it makes sense to pull it out. When the samdb has not been
loaded, run() will still load it -- this avoids having to change all
the tests.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/kcc/__init__.py
source4/scripting/bin/samba_kcc

index 458af39b373935c695da8169f8541abf39fe4b4c..d9c47c6172041aa7d4cc9cf6f288a80dd81377f2 100644 (file)
@@ -2361,12 +2361,14 @@ class KCC(object):
         :param force: a boolean indicating whether to overwrite.
 
         """
-        if self.samdb is not None and not force:
-            return
-
-        self.samdb = SamDB(url=dburl,
-                           session_info=system_session(),
-                           credentials=creds, lp=lp)
+        if force or self.samdb is None:
+            try:
+                self.samdb = SamDB(url=dburl,
+                                   session_info=system_session(),
+                                   credentials=creds, lp=lp)
+            except ldb.LdbError, (num, msg):
+                raise KCCError("Unable to open sam database %s : %s" %
+                               (dburl, msg))
 
     def plot_all_connections(self, basename, verify_properties=()):
         """Helper function to plot and verify NTDSConnections
@@ -2420,12 +2422,9 @@ class KCC(object):
                determine link availability (boolean, default False)
         :return: 1 on error, 0 otherwise
         """
-        try:
+        if self.samdb is None:
+            DEBUG_FN("samdb is None; let's load it from %s" % (dburl,))
             self.load_samdb(dburl, lp, creds, force=False)
-        except ldb.LdbError, (num, msg):
-            logger.error("Unable to open sam database %s : %s" %
-                         (dburl, msg))
-            return 1
 
         if forced_local_dsa:
             self.samdb.set_ntds_settings_dn("CN=NTDS Settings,%s" %
index 449edda4c482486b627f4bc479c09914eeb60d77..b0bb61633fbed66932c1c806b66c4b406caed39d 100755 (executable)
@@ -292,13 +292,14 @@ if opts.importldif:
     if rc != 0:
         sys.exit(rc)
 
+
+kcc.load_samdb(opts.dburl, lp, creds, force=False)
+
 if opts.test_all_reps_from:
-    kcc.load_samdb(opts.dburl, lp, creds, force=False)
     test_all_reps_from(kcc, lp, creds, unix_now, rng_seed=opts.seed)
     sys.exit()
 
 if opts.list_valid_dsas:
-    kcc.load_samdb(opts.dburl, lp, creds, force=False)
     print '\n'.join(kcc.list_dsas())
     sys.exit()