scripting: Make tdb_copy use the python subprocess module
authorAndrew Bartlett <abartlet@samba.org>
Sun, 17 Feb 2013 06:57:42 +0000 (17:57 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 19 Feb 2013 05:08:19 +0000 (06:08 +0100)
This makes the code more robust to spaces in the file names (etc).

Andrew Bartlett

Reviewed-by: Matthieu Patou <mat@samba.org>
source4/scripting/python/samba/provision/sambadns.py

index 740dd384176fc2c0104b0b35fc986c05590dab25..21675113d6ba1050f75444760ba3c194d0cdf218 100644 (file)
@@ -27,6 +27,7 @@ import time
 import ldb
 from base64 import b64encode
 import samba
+import subprocess
 from samba.ndr import ndr_pack, ndr_unpack
 from samba import setup_file
 from samba.dcerpc import dnsp, misc, security
@@ -738,7 +739,7 @@ def create_zone_file(lp, logger, paths, targetdir, dnsdomain,
         os.system(rndc + " unfreeze " + lp.get("realm"))
 
 
-def tdb_copy(logger, file1, file2):
+def tdb_copy(file1, file2):
     """Copy tdb file using tdbbackup utility and rename it
     """
     # Find the location of tdbbackup tool
@@ -747,9 +748,12 @@ def tdb_copy(logger, file1, file2):
         toolpath = os.path.join(d, "tdbbackup")
         if os.path.exists(toolpath):
             break
-    status = os.system("%s -s '.dns' %s" % (toolpath, file1))
+
+    tdbbackup_cmd = [toolpath, "-s", ".copy.tdb", file1]
+    status = subprocess.call(tdbbackup_cmd, close_fds=True, shell=False)
+
     if status == 0:
-        os.rename("%s.dns" % file1, file2)
+        os.rename("%s.copy.tdb" % file1, file2)
     else:
         raise Exception("Error copying %s" % file1)
 
@@ -816,13 +820,11 @@ def create_samdb_copy(samdb, logger, paths, names, domainsid, domainguid):
     # Copy root, config, schema partitions (and any other if any)
     # Since samdb is open in the current process, copy them in a child process
     try:
-        tdb_copy(logger,
-                 os.path.join(private_dir, "sam.ldb"),
+        tdb_copy(os.path.join(private_dir, "sam.ldb"),
                  os.path.join(dns_dir, "sam.ldb"))
         for nc in partfile:
             pfile = partfile[nc]
-            tdb_copy(logger,
-                     os.path.join(private_dir, pfile),
+            tdb_copy(os.path.join(private_dir, pfile),
                      os.path.join(dns_dir, pfile))
     except:
         logger.error(