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(  | 
