diff options
author | Andrew Bartlett <abartlet@samba.org> | 2013-02-17 17:57:42 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2013-02-19 06:08:19 +0100 |
commit | 2c2759e408d9c45c2aee0c2578f45edd246afec3 (patch) | |
tree | 62262a239a9ff7999498c0c21945bb058c76cd62 | |
parent | 06780ae82281fb62a08d0c3604d2e679976756c2 (diff) | |
download | samba-2c2759e408d9c45c2aee0c2578f45edd246afec3.tar.gz samba-2c2759e408d9c45c2aee0c2578f45edd246afec3.tar.bz2 samba-2c2759e408d9c45c2aee0c2578f45edd246afec3.zip |
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 <mat@samba.org>
-rw-r--r-- | source4/scripting/python/samba/provision/sambadns.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/source4/scripting/python/samba/provision/sambadns.py b/source4/scripting/python/samba/provision/sambadns.py index 740dd38417..21675113d6 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( |