diff --git a/client.py b/client.py index dd1edbe2a79554e759024fa0f24b6e3ccc86366c..25197a9ec9f17f08d8797032ec07640f5fe71001 100755 --- a/client.py +++ b/client.py @@ -300,7 +300,8 @@ def rm_file(filename): def get_my_roles(options): """Retourne la liste des rôles de l'utilisateur, et également la liste des rôles dont il possède le role-w.""" allroles = all_roles(options) - my_roles = [r for (r, users) in allroles.iteritems() if options.serverdata['user'] in users] + distant_username = allroles.pop("whoami") + my_roles = [r for (r, users) in allroles.iteritems() if distant_username in users] my_roles_w = [r[:-2] for r in my_roles if r.endswith("-w")] return (my_roles, my_roles_w) @@ -415,6 +416,7 @@ def get_recipients_of_roles(options, roles): """Renvoie les destinataires d'une liste de rôles""" recipients = set() allroles = all_roles(options) + allroles.pop("whoami") for role in roles: for recipient in allroles[role]: recipients.add(recipient) @@ -513,7 +515,9 @@ def show_files(options): def show_roles(options): """Affiche la liste des roles existants""" print(u"Liste des roles disponibles".encode("utf-8")) - for (role, usernames) in all_roles(options).iteritems(): + allroles = all_roles(options) + allroles.pop("whoami") + for (role, usernames) in allroles.iteritems(): if not role.endswith('-w'): print((u" * %s : %s" % (role, ", ".join(usernames))).encode("utf-8")) diff --git a/clientconfig.example.py b/clientconfig.example.py index 1f87fed37ac1d5107e92ba0bc556b227006b4980..6df14b89aef54280fdb2e70ddab2bfb5540ef806 100755 --- a/clientconfig.example.py +++ b/clientconfig.example.py @@ -17,26 +17,17 @@ server_path = '/usr/local/bin/%s-server' % (cmd_name,) #: Commande à exécuter sur le serveur après y être entré en ssh distant_cmd = "sudo %s" % (server_path,) -#: Username utilisé pour se loguer sur le serveur. -#: Par défaut, prend la valeur de l'username sur le client, -#: il faut donc le remplacer pour ceux qui n'ont pas le même username -#: sur le client et le serveur. -username = os.getenv('USER') - #: Liste des serveurs sur lesquels ont peut récupérer des mots de passe. #: #: Sans précision du paramètre --server, la clé ``'default'`` sera utilisée. #: #: * ``'server_cmd'`` : La commande exécutée sur le client pour appeler #: le script sur le serveur distant. -#: * ``'user'``: L'username sur le serveur servers = { 'default': { 'server_cmd': [ssh_path, 'vert.adm.crans.org', distant_cmd], - 'user' : username }, 'ovh': { 'server_cmd': [ssh_path, 'ovh.crans.org', distant_cmd], - 'user' : username } } diff --git a/server.py b/server.py index 4b30203bc23a18857d0e56ed4379cf1f5e1c3b16..63cd1a5565fcac535c507e4ebffeb49cf76ffde1 100755 --- a/server.py +++ b/server.py @@ -48,8 +48,13 @@ def writefile(filename, contents): f.close() def listroles(): - """Liste des roles existant et de leurs membres""" - return serverconfig.ROLES + """Liste des roles existant et de leurs membres. + Renvoie également un rôle particulier ``"whoami"``, contenant l'username de l'utilisateur qui s'est connecté.""" + d = serverconfig.ROLES + if d.has_key("whoami"): + raise ValueError('La rôle "whoami" ne devrait pas exister') + d["whoami"] = MYUID + return d def listkeys(): """Liste les usernames et les (mail, fingerprint) correspondants"""