Commit 34aa2a64 authored by Daniel Stan's avatar Daniel Stan

rajout de --strict-recrypt-files

Autre manière de sélectionner les mots de passes à rechiffrer : on sélectionne
les mots de passes dont la liste des rôle est inclue dans la liste souhaitée.
parent 88c699e4
...@@ -773,9 +773,11 @@ def my_update_keys(options): ...@@ -773,9 +773,11 @@ def my_update_keys(options):
"""Met à jour les clés existantes et affiche le résultat""" """Met à jour les clés existantes et affiche le résultat"""
print(update_keys(options).encode("utf-8")) print(update_keys(options).encode("utf-8"))
def recrypt_files(options): def recrypt_files(options, strict=False):
"""Rechiffre les fichiers. """Rechiffre les fichiers.
Ici, la signification de ``options.roles`` est : on ne veut rechiffrer que les fichiers qui ont au moins un de ces roles. Ici, la signification de ``options.roles`` est :
strict => on chiffre les fichiers dont *tous* les rôles sont dans la liste
non strict => on ne veut rechiffrer que les fichiers qui ont au moins un de ces roles.
""" """
rechiffre_roles = options.roles rechiffre_roles = options.roles
_, my_roles_w = get_my_roles(options) _, my_roles_w = get_my_roles(options)
...@@ -785,11 +787,18 @@ def recrypt_files(options): ...@@ -785,11 +787,18 @@ def recrypt_files(options):
# La liste des fichiers # La liste des fichiers
allfiles = all_files(options) allfiles = all_files(options)
# On ne demande que les fichiers qui ont au moins un role dans ``options.roles``
# et dans lesquels on peut écrire def is_wanted(fileroles):
# On drope ce qui ne peut être écrit
if not set(fileroles).intersection(my_roles_w):
return False
if strict:
return set(fileroles).issubset(rechiffre_roles)
else:
return bool(set(fileroles).intersection(rechiffre_roles))
askfiles = [filename for (filename, fileroles) in allfiles.iteritems() askfiles = [filename for (filename, fileroles) in allfiles.iteritems()
if set(fileroles).intersection(options.roles) != set() if is_wanted(fileroles) ]
and set(fileroles).intersection(my_roles_w) != set()]
files = get_files(options, askfiles) files = get_files(options, askfiles)
# Au cas où on aurait échoué à récupérer ne serait-ce qu'un de ces fichiers, # Au cas où on aurait échoué à récupérer ne serait-ce qu'un de ces fichiers,
# on affiche le message d'erreur correspondant et on abandonne. # on affiche le message d'erreur correspondant et on abandonne.
...@@ -915,13 +924,20 @@ if __name__ == "__main__": ...@@ -915,13 +924,20 @@ if __name__ == "__main__":
help="""Rechiffrer les mots de passe. help="""Rechiffrer les mots de passe.
(Avec les mêmes rôles que ceux qu'ils avant. (Avec les mêmes rôles que ceux qu'ils avant.
Cela sert à mettre à jour les recipients pour qui un password est chiffré)""") Cela sert à mettre à jour les recipients pour qui un password est chiffré)""")
action_grp.add_argument('--strict-recrypt-files', action='store_const', dest='action',
default=show_file, const=lambda x:recrypt_files(x, strict=True),
help="""Rechiffrer les mots de passe (mode strict, voir --roles)""")
parser.add_argument('--roles', nargs='?', default=None, parser.add_argument('--roles', nargs='?', default=None,
help="""Liste de roles (séparés par des virgules). help="""Liste de roles (séparés par des virgules). Par défaut, tous les
Avec --edit, le fichier sera chiffré pour exactement ces roles rôles en écriture (sauf pour l'édition, d'un fichier existant).
(par défaut, tous vos rôles en écriture seront utilisés). Avec --edit: le fichier sera chiffré pour exactement ces roles
Avec --recrypt-files, tous les fichiers ayant au moins un de ces roles (et pour lesquels vous avez le droit d'écriture) seront rechiffrés Avec --(strict-)recrypt-files :
(par défaut, tous les fichiers pour lesquels vous avez les droits en écriture sont rechiffrés).""") sert à sélectionnenr les fichiers à rechiffrer
* non-strict: tout fichier possédant un des rôles listé
* strict: tout fichier dont *tous* les rôles sont dans la
liste
""")
parser.add_argument('fname', nargs='?', default=None, parser.add_argument('fname', nargs='?', default=None,
help="Nom du fichier à afficher") help="Nom du fichier à afficher")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment