summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2013-02-17 17:57:42 +1100
committerAndrew Bartlett <abartlet@samba.org>2013-02-19 06:08:19 +0100
commit2c2759e408d9c45c2aee0c2578f45edd246afec3 (patch)
tree62262a239a9ff7999498c0c21945bb058c76cd62
parent06780ae82281fb62a08d0c3604d2e679976756c2 (diff)
downloadsamba-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.py16
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(