From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id F155513877A for ; Wed, 20 Aug 2014 03:55:25 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id BA7F2E079C; Wed, 20 Aug 2014 03:55:24 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 0B6CEE079C for ; Wed, 20 Aug 2014 03:55:20 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id CE62F33FC9F for ; Wed, 20 Aug 2014 03:55:19 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 7A39939AC for ; Wed, 20 Aug 2014 03:55:18 +0000 (UTC) From: "Brian Dolbec" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" Message-ID: <1403908669.85a89cd662ddf8880679badb0626a32114b3d0f4.dol-sen@gentoo> Subject: [gentoo-commits] proj/gentoo-keys:master commit in: gkeys/ X-VCS-Repository: proj/gentoo-keys X-VCS-Files: gkeys/actions.py gkeys/fileops.py gkeys/lib.py X-VCS-Directories: gkeys/ X-VCS-Committer: dol-sen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 85a89cd662ddf8880679badb0626a32114b3d0f4 X-VCS-Branch: master Date: Wed, 20 Aug 2014 03:55:18 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 3ceb6591-3702-4bd5-a813-058a91a7dd60 X-Archives-Hash: 396820862439c1db083ac2dcdd6ab48e commit: 85a89cd662ddf8880679badb0626a32114b3d0f4 Author: Pavlos Ratis gentoo org> AuthorDate: Fri Jun 27 22:37:49 2014 +0000 Commit: Brian Dolbec gmail com> CommitDate: Fri Jun 27 22:37:49 2014 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/gentoo-keys.git;a=commit;h=85a89cd6 use snakeoil in add_key action; minor improvements --- gkeys/actions.py | 55 +++++++++++++++++++++++-------------------------------- gkeys/fileops.py | 30 ++++++++++++++++++++++++++++++ gkeys/lib.py | 9 ++++----- 3 files changed, 57 insertions(+), 37 deletions(-) diff --git a/gkeys/actions.py b/gkeys/actions.py index b7ef9de..f5ea252 100644 --- a/gkeys/actions.py +++ b/gkeys/actions.py @@ -169,42 +169,41 @@ class Actions(object): for key in keyresults: if not key.keydir and not args.nick == '*': self.logger.debug("ACTIONS: listkey; NO keydir... Ignoring") - messages = ["Failed: No keyid's found for %s" % key.name[0]] + messages = ["Failed: No keyid's found for %s" % key.name] else: self.logger.debug("ACTIONS: listkey; listing keydir:" + str(key.keydir)) - results[key.name[0]] = self.gpg.list_keys(key.keydir[0]) + results[key.name] = self.gpg.list_keys(key.keydir) if self.config.options['print_results']: - print(results[key.name[0]].output) - self.logger.debug("data output:\n" + str(results[key.name[0]].output)) + print(results[key.name].output) + self.logger.debug("data output:\n" + str(results[key.name].output)) messages = ["Done."] else: return results return messages + def addkey(self, args): '''Install a key from the seed(s)''' - handler = SeedHandler(self.logger) + if not args.nick: + return ["Please provide a nickname or -n *"] + handler = SeedHandler(self.logger, self.config) kwargs = handler.build_gkeydict(args) self.logger.debug("ACTIONS: addkey; kwargs: %s" % str(kwargs)) - if not args.nick: - return {'Please provide a nickname or -n *': False} - gkey = self.listseed(args) + gkey = self.listseed(args)[1] if gkey: - # get the desired seed - keyresults = self.seeds.list(**kwargs) - if keyresults and not args.nick == '*' and self.output: - self.output(['', keyresults], "\n Found GKEY seeds:") - elif keyresults and self.output: + if gkey and not args.nick == '*' and self.output: + self.output(['', gkey], "\n Found GKEY seeds:") + elif gkey and self.output: self.output(['all'], "\n Installing seeds:") else: self.logger.info("ACTIONS: addkey; " "Matching seed entry not found") if args.nick: - return {"Search failed for: %s" % args.nick: False} + return ["Search failed for: %s" % args.nick] elif args.name: - return {"Search failed for: %s" % args.name: False} + return ["Search failed for: %s" % args.name] else: - return {"Search failed for search term": False} + return ["Search failed for search term"] # get confirmation # fill in code here keydir = self.config.get_key(args.seeds + "-keydir") @@ -212,33 +211,25 @@ class Actions(object): self.gpg = GkeysGPG(self.config, keydir) results = {} failed = [] - for key in keyresults: - if not key.keyid and not key.longkeyid and not args.nick == '*': - self.logger.debug("ACTIONS: addkey; NO key id's to add... Ignoring") - return {"Failed: No keyid's found for %s" % key.name: ''} - elif not key.keyid and not key.longkeyid: - print("No keyid's found for:", key.nick, key.name, "Skipping...") - failed.append(key) - continue + for key in gkey: self.logger.debug("ACTIONS: addkey; adding key:") self.logger.debug("ACTIONS: " + str(key)) - results[key.name[0]] = self.gpg.add_key(key) - for result in results[key.name[0]]: + results[key.name] = self.gpg.add_key(key) + for result in results[key.name]: self.logger.debug("ACTIONS: addkey; result.failed = " + - str(result.failed)) + str(result.failed)) if self.config.options['print_results']: - for result in results[key.name[0]]: + for result in results[key.name]: print("key desired:", key.name, ", key added:", result.username, ", succeeded:", - not result.failed, ", keyid:", result.keyid, - ", fingerprint:", result.fingerprint) + not result.failed,", fingerprint:", result.fingerprint) self.logger.debug("stderr_out: " + str(result.stderr_out)) if result.failed: failed.append(key) if failed and self.output: self.output(failed, "\n Failed to install:") - return {'Completed': True} - return {"No seeds to search or install": False} + return ["Completed"] + return ["No seeds to search or install"] def removekey(self, args): diff --git a/gkeys/fileops.py b/gkeys/fileops.py index 03014d9..da56f2e 100644 --- a/gkeys/fileops.py +++ b/gkeys/fileops.py @@ -1,4 +1,34 @@ import os +from snakeoil.osutils import (ensure_dirs as snakeoil_ensure_dirs) + + +def ensure_dirs(path, gid=-1, uid=-1, mode=0700, minimal=True, failback=None, fatal=False): + '''Wrapper to snakeoil.osutil's ensure_dirs() + This additionally allows for failures to run + cleanup or other code and/or raise fatal errors. + + @param path: directory to ensure exists on disk + @param gid: a valid GID to set any created directories to + @param uid: a valid UID to set any created directories to + @param mode: permissions to set any created directories to + @param minimal: boolean controlling whether or not the specified mode + must be enforced, or is the minimal permissions necessary. For example, + if mode=0755, minimal=True, and a directory exists with mode 0707, + this will restore the missing group perms resulting in 757. + @param failback: function to run in the event of a failed attemp + to create the directory. + @return: True if the directory could be created/ensured to have those + permissions, False if not. + ''' + succeeded = snakeoil_ensure_dirs(path, gid=-1, uid=-1, mode=0700, minimal=True) + if not succeeded: + if failback: + failback() + if fatal: + raise IOError( + "Failed to create directory: %s" % path) + return succeeded + def updatefiles(config, logger): filename = config['dev-seedfile'] diff --git a/gkeys/lib.py b/gkeys/lib.py index c10f9ce..b888367 100644 --- a/gkeys/lib.py +++ b/gkeys/lib.py @@ -20,13 +20,12 @@ with gentoo-keys specific convienience functions. from __future__ import print_function -import os from os.path import join as pjoin from pyGPG.gpg import GPG +from gkeys.fileops import ensure_dirs from gkeys.log import logger - class GkeysGPG(GPG): '''Gentoo-keys primary gpg class''' @@ -77,7 +76,7 @@ class GkeysGPG(GPG): def set_keydir(self, keydir, task, reset=True): logger.debug("basedir: %s, keydir: %s" % (self.basedir, keydir)) - self.keydir = pjoin(self.basedir, keydir[0]) + self.keydir = pjoin(self.basedir, keydir) self.task = task if reset: self.config.options['tasks'][task] = self.config.defaults['tasks'][task][:] @@ -96,8 +95,8 @@ class GkeysGPG(GPG): self.set_keyserver() self.set_keydir(gkey.keydir, 'recv-keys', reset=True) self.set_keyring('pubring.gpg', 'recv-keys', reset=False) - if not os.path.exists(self.keydir): - os.makedirs(self.keydir, mode=0x0700) + logger.debug("LIB: add_key; ensure dirs: " + self.keydir) + ensure_dirs(str(self.keydir)) keyids = gkey.keyid results = [] for keyid in keyids: