diff options
-rwxr-xr-x | ipa-python/ipa-python.spec.in | 2 | ||||
-rw-r--r-- | ipa-python/ipautil.py | 65 |
2 files changed, 65 insertions, 2 deletions
diff --git a/ipa-python/ipa-python.spec.in b/ipa-python/ipa-python.spec.in index 7d270b4f..77446495 100755 --- a/ipa-python/ipa-python.spec.in +++ b/ipa-python/ipa-python.spec.in @@ -10,7 +10,7 @@ Source0: http://www.freeipa.org/downloads/%{name}-%{version}.tgz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch BuildRequires: python-devel -Requires: python-kerberos +Requires: python-kerberos gnupg %{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} diff --git a/ipa-python/ipautil.py b/ipa-python/ipautil.py index 117171c4..649a3f20 100644 --- a/ipa-python/ipautil.py +++ b/ipa-python/ipautil.py @@ -73,11 +73,13 @@ def write_tmp_file(txt): return fd def run(args, stdin=None): - p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) if stdin: + p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) stdout,stderr = p.communicate(stdin) else: + p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) stdout,stderr = p.communicate() + logging.info(stdout) logging.info(stderr) @@ -115,6 +117,67 @@ def backup_file(fname): if file_exists(fname): os.rename(fname, fname + ".orig") +# uses gpg to compress and encrypt a file +def encrypt_file(source, dest, password, workdir = None): + if type(source) is not StringType or not len(source): + raise ValueError('Missing Source File') + #stat it so that we get back an exception if it does no t exist + os.stat(source) + + if type(dest) is not StringType or not len(dest): + raise ValueError('Missing Destination File') + + if type(password) is not StringType or not len(password): + raise ValueError('Missing Password') + + #create a tempdir so that we can clean up with easily + tempdir = tempfile.mkdtemp('', 'ipa-', workdir) + gpgdir = tempdir+"/.gnupg" + + try: + try: + #give gpg a fake dir so that we can leater remove all + #the cruft when we clean up the tempdir + os.mkdir(gpgdir) + args = ['/usr/bin/gpg', '--homedir', gpgdir, '--passphrase-fd', '0', '--yes', '--no-tty', '-o', dest, '-c', source] + run(args, password) + except: + raise + finally: + #job done, clean up + shutil.rmtree(tempdir, ignore_errors=True) + + +def decrypt_file(source, dest, password, workdir = None): + if type(source) is not StringType or not len(source): + raise ValueError('Missing Source File') + #stat it so that we get back an exception if it does no t exist + os.stat(source) + + if type(dest) is not StringType or not len(dest): + raise ValueError('Missing Destination File') + + if type(password) is not StringType or not len(password): + raise ValueError('Missing Password') + + #create a tempdir so that we can clean up with easily + tempdir = tempfile.mkdtemp('', 'ipa-', workdir) + gpgdir = tempdir+"/.gnupg" + + try: + try: + #give gpg a fake dir so that we can leater remove all + #the cruft when we clean up the tempdir + os.mkdir(gpgdir) + args = ['/usr/bin/gpg', '--homedir', gpgdir, '--passphrase-fd', '0', '--yes', '--no-tty', '-o', dest, '-d', source] + run(args, password) + except: + raise + finally: + #job done, clean up + shutil.rmtree(tempdir, ignore_errors=True) + + class CIDict(dict): """ Case-insensitive but case-respecting dictionary. |