diff options
| author | Sebastian Heinlein <devel@glatzor.de> | 2012-05-30 10:15:35 +0200 |
|---|---|---|
| committer | Sebastian Heinlein <devel@glatzor.de> | 2012-05-30 10:15:35 +0200 |
| commit | 8ab2e648e11c321c31d88e4c135066bf85816160 (patch) | |
| tree | e72b9817e20bd503d69be5cf4495b76a51f43888 | |
| parent | e65c125fb031c219317c77724a6b4213cb3c695b (diff) | |
| download | python-apt-8ab2e648e11c321c31d88e4c135066bf85816160.tar.gz | |
Import AptAuth.py from software-properites as auth.py
| -rw-r--r-- | apt/auth.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/apt/auth.py b/apt/auth.py new file mode 100644 index 00000000..04ee8b76 --- /dev/null +++ b/apt/auth.py @@ -0,0 +1,98 @@ +# dialog_apt_key.py.in - edit the apt keys +# +# Copyright (c) 2004 Canonical +# +# Author: Michael Vogt <mvo@debian.org> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA + +import atexit +import gettext +import os +import shutil +import subprocess +import tempfile + +from subprocess import PIPE + +# gettext convenient +_ = gettext.gettext +def dummy(e): return e +N_ = dummy + +# some known keys +N_("Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>") +N_("Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>") + +class AptAuth: + def __init__(self, rootdir="/"): + self.gpg = ["/usr/bin/gpg"] + self.base_opt = self.gpg + [ + "--no-options", + "--no-default-keyring", + "--no-auto-check-trustdb", + "--trust-model", "always", + "--keyring", os.path.join(rootdir, "etc/apt/trusted.gpg"), + ] + self.tmpdir = tempfile.mkdtemp() + self.base_opt += ["--secret-keyring", + os.path.join(self.tmpdir, "secring.gpg")] + self.base_opt += ["--trustdb-name", + os.path.join(self.tmpdir, "trustdb.gpg")] + self.list_opt = self.base_opt + ["--with-colons", + "--batch", + "--list-keys"] + self.rm_opt = self.base_opt + ["--quiet", + "--batch", + "--delete-key", + "--yes"] + self.add_opt = self.base_opt + ["--quiet", + "--batch", + "--import"] + atexit.register(self._cleanup_tmpdir) + + def _cleanup_tmpdir(self): + shutil.rmtree(self.tmpdir) + + def list(self): + res = [] + #print self.list_opt + p = subprocess.Popen(self.list_opt,stdout=PIPE).stdout + for line in p.readlines(): + fields = line.split(":") + if fields[0] == "pub": + name = fields[9] + res.append("%s %s\n%s" %((fields[4])[-8:],fields[5], _(name))) + return res + + def add(self, filename): + #print "request to add " + filename + cmd = self.add_opt[:] + cmd.append(filename) + p = subprocess.Popen(cmd) + return (p.wait() == 0) + + def update(self): + cmd = ["/usr/bin/apt-key", "update"] + p = subprocess.Popen(cmd) + return (p.wait() == 0) + + def rm(self, key): + #print "request to remove " + key + cmd = self.rm_opt[:] + cmd.append(key) + p = subprocess.Popen(cmd) + return (p.wait() == 0) |
