From 157cfd05ea18482f5ac7537bfcea5195a932eb44 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 17 Feb 2013 17:57:42 +1100 Subject: [PATCH] scripting: Make tdb_copy use the python subprocess module This makes the code more robust to spaces in the file names (etc). Andrew Bartlett Reviewed-by: Matthieu Patou (cherry picked from commit 2c2759e408d9c45c2aee0c2578f45edd246afec3) --- source4/scripting/python/samba/provision/sambadns.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source4/scripting/python/samba/provision/sambadns.py b/source4/scripting/python/samba/provision/sambadns.py index 740dd384176..21675113d6b 100644 --- a/source4/scripting/python/samba/provision/sambadns.py +++ b/source4/scripting/python/samba/provision/sambadns.py @@ -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( -- 2.11.4.GIT