--check-keys fonctionne. On signale si on n'arrive pas à importer gnupg, mais on ne crashe pas.

This commit is contained in:
Vincent Le Gallic 2013-07-28 13:45:51 +02:00
parent 0786b90969
commit 0a5af7ecc3
2 changed files with 25 additions and 12 deletions

View file

@ -23,7 +23,7 @@ _cranspasswords_completion(){
cur="${COMP_WORDS[argc]}" cur="${COMP_WORDS[argc]}"
cur_first_char=${cur:0:1} cur_first_char=${cur:0:1}
opts_short="-h -v -c -f -l" opts_short="-h -v -c -f -l"
opts="--help --server --verbose --clipboard --noclipboard --force --edit --view --remove --list --check-keys --update-keys --list-roles --recrypt-files --roles --list-servers" opts="--help --server --verbose --quiet --clipboard --noclipboard --force --edit --view --remove --list --check-keys --update-keys --list-roles --recrypt-files --roles --list-servers"
mkdir -p -m 700 "$role_dir" mkdir -p -m 700 "$role_dir"
mkdir -p -m 700 "$pass_dir" mkdir -p -m 700 "$pass_dir"
@ -48,14 +48,14 @@ _cranspasswords_completion(){
fi fi
if [[ "$last" = "--server" ]]; then if [[ "$last" = "--server" ]]; then
server_list="`$cmd_name --list-servers | grep -- "*" | awk '{print $2}'`" server_list="`$cmd_name --quiet --list-servers | grep -- "*" | awk '{print $2}'`"
COMPREPLY=( $(compgen -W "$server_list" -- $cur ) ) COMPREPLY=( $(compgen -W "$server_list" -- $cur ) )
return 0 return 0
fi fi
if [[ "$last" = "--roles" ]]; then if [[ "$last" = "--roles" ]]; then
if [ ! -f "${role_dir}$server" ]; then if [ ! -f "${role_dir}$server" ]; then
echo "`$cmd_name --server $server --list-roles | grep -- "*" | awk '{print $2}'`" > "${role_dir}$server" echo "`$cmd_name --quiet --server $server --list-roles | grep -- "*" | awk '{print $2}'`" > "${role_dir}$server"
fi fi
role_list="`cat "${role_dir}$server"`" role_list="`cat "${role_dir}$server"`"
COMPREPLY=( $(compgen -W "$role_list" -- $cur ) ) COMPREPLY=( $(compgen -W "$role_list" -- $cur ) )
@ -64,7 +64,7 @@ _cranspasswords_completion(){
if [[ "$last" = "--edit" ]]; then if [[ "$last" = "--edit" ]]; then
if [ ! -f "${pass_dir}${server}-w" ]; then if [ ! -f "${pass_dir}${server}-w" ]; then
echo "`$cmd_name --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}${server}-w" echo "`$cmd_name --quiet --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}${server}-w"
fi fi
pass_list="`cat "${pass_dir}${server}-w"`" pass_list="`cat "${pass_dir}${server}-w"`"
COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) ) COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) )
@ -73,7 +73,7 @@ _cranspasswords_completion(){
if true; then if true; then
if [ ! -f "${pass_dir}$server" ]; then if [ ! -f "${pass_dir}$server" ]; then
echo "`$cmd_name --server $server -l | grep "\( +\| -\)" | awk '{print $2}'`" > "${pass_dir}$server" echo "`$cmd_name --quiet --server $server -l | grep "\( +\| -\)" | awk '{print $2}'`" > "${pass_dir}$server"
fi fi
pass_list="`cat "${pass_dir}$server"`" pass_list="`cat "${pass_dir}$server"`"
COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) ) COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) )

View file

@ -19,11 +19,16 @@ import re
import random import random
import string import string
import datetime import datetime
#import gnupg #disponible seulement sous wheezy try:
import gnupg #disponible seulement sous wheezy
except ImportError:
if sys.stderr.isatty() and not any([opt in sys.argv for opt in ["-q", "--quiet"]]):
sys.stderr.write(u"Package python-gnupg introuvable, vous ne pourrez pas vérifiez les clés.\n".encode("utf-8"))
try: try:
import clientconfig as config import clientconfig as config
except ImportError: except ImportError:
print "Read the README" if sys.stderr.isatty() and not any([opt in sys.argv for opt in ["-q", "--quiet"]]):
sys.stderr.write(u"Va lire le fichier README.\n".encode("utf-8"))
sys.exit(1) sys.exit(1)
#: pattern utilisé pour détecter la ligne contenant le mot de passe dans les fichiers #: pattern utilisé pour détecter la ligne contenant le mot de passe dans les fichiers
@ -184,7 +189,8 @@ def check_keys():
failed = False failed = False
for (mail, fpr) in keys.values(): for (mail, fpr) in keys.values():
if fpr: if fpr:
if VERB: print (u"Checking %s" % (mail)).encode("utf-8") if VERB:
print (u"Checking %s" % (mail)).encode("utf-8")
corresponds = [key for key in localkeys if key["fingerprint"] == fpr] corresponds = [key for key in localkeys if key["fingerprint"] == fpr]
# On vérifie qu'on possède la clé… # On vérifie qu'on possède la clé…
if len(corresponds) == 1: if len(corresponds) == 1:
@ -237,7 +243,8 @@ def encrypt(roles, contents):
stdin.close() stdin.close()
out = stdout.read().decode("utf-8") out = stdout.read().decode("utf-8")
if out == '': if out == '':
if VERB: print u"Échec de chiffrement".encode("utf-8") if VERB:
print u"Échec de chiffrement".encode("utf-8")
return None return None
else: else:
return out return out
@ -442,6 +449,7 @@ def remove_file(fname):
def my_check_keys(): def my_check_keys():
"""Vérifie les clés et affiche un message en fonction du résultat""" """Vérifie les clés et affiche un message en fonction du résultat"""
print u"Vérification que les clés sont valides (uid correspondant au login) et de confiance."
print (check_keys() and u"Base de clés ok" or u"Erreurs dans la base").encode("utf-8") print (check_keys() and u"Base de clés ok" or u"Erreurs dans la base").encode("utf-8")
def my_update_keys(): def my_update_keys():
@ -496,6 +504,8 @@ if __name__ == "__main__":
help="Utilisation d'un serveur alternatif (test, backup, etc)") help="Utilisation d'un serveur alternatif (test, backup, etc)")
parser.add_argument('-v', '--verbose', action='store_true', default=False, parser.add_argument('-v', '--verbose', action='store_true', default=False,
help="Mode verbeux") help="Mode verbeux")
parser.add_argument('-q', '--quiet', action='store_true', default=False,
help="Mode silencieux. Cache les message d'erreurs (override --verbose).")
parser.add_argument('-c', '--clipboard', action='store_true', default=None, parser.add_argument('-c', '--clipboard', action='store_true', default=None,
help="Stocker le mot de passe dans le presse papier") help="Stocker le mot de passe dans le presse papier")
parser.add_argument('--no-clip', '--noclip', '--noclipboard', action='store_false', default=None, parser.add_argument('--no-clip', '--noclip', '--noclipboard', action='store_false', default=None,
@ -541,7 +551,8 @@ if __name__ == "__main__":
parsed = parser.parse_args(sys.argv[1:]) parsed = parser.parse_args(sys.argv[1:])
SERVER = config.servers[parsed.server] SERVER = config.servers[parsed.server]
VERB = parsed.verbose QUIET = parsed.quiet
VERB = parsed.verbose and not QUIET
if parsed.clipboard != None: if parsed.clipboard != None:
CLIPBOARD = parsed.clipboard CLIPBOARD = parsed.clipboard
FORCED = parsed.force FORCED = parsed.force
@ -551,8 +562,10 @@ if __name__ == "__main__":
if parsed.action.func_code.co_argcount == 0: if parsed.action.func_code.co_argcount == 0:
parsed.action() parsed.action()
elif parsed.fname == None: elif parsed.fname == None:
print u"Vous devez fournir un nom de fichier avec cette commande".encode("utf-8") if not QUIET:
parser.print_help() print u"Vous devez fournir un nom de fichier avec cette commande".encode("utf-8")
parser.print_help()
sys.exit(1)
else: else:
parsed.action(parsed.fname) parsed.action(parsed.fname)