Programme python

Bonjour,
J'ai 2 fichiers sous linux du nom de passwd et group

J'aimerais ecrire une fonction en python dont le role est de retourner la liste contenant l'ensemble des groupes dont fait partie l'utilisateur

voila ce que j'ai commencé mais a priori il manque quelque chose pour que ca marche
Si qqun pouvait m'eclairer
Merci

try:
fichier = open("/root/olivier/passwd","r")
file_group = open("/root/olivier/group","r")

except IOError:
print "fichier introuvable"

else:
try:
for line in fichier :
for ligne in file_group:
utilisateur = line.split(":")
group = ligne.split(":")

print utilisateur
# if utilisateur[4]==group[3]:

except IOError:
print "lecture impossible"

file_group.close()
fichier.close()
Configuration: Linux
Mozilla 1.8.1.16

3 réponses

  1. Modérateur
    Alors ça fait longtemps que je n'ai pas écrit de python mais grosso modo, tu lis chaque ligne de passwd, tu la splittes sur le caractère ':', et tu extraies le champ 0 dans une variable 'user' et le champ 4 dans un variable 'group'. Tu cherches dans un dictionnaire (appelé 'groups' par exemple) à la clé 'group' un ensemble. Si la clé n'existe pas tu crées un Set, sinon tu insères dans le Set trouvé la valeur user.

    Ensuite tu lis le fichier de groupe. Même chose tu lis par ligne et tu splittes sur ':'. La 4e valeur peut être une liste d'users, il faut donc la splitter à son tour sur ','. Tu insères dans ton dictionnary 'groups' ces nouveaux utilisateur. À vérifier mais je pense aussi que tu peux mettre des noms de groupe dans cette liste (et en cas d'ambiguïté, c'est à dire si la chaîne désigne aussi bien un groupe qu'un utilisateur, je ne sais pas comment tu traites le cas).

    Ceci fait il ne reste plus qu'à rechercher dans le dictionnary groups le groupe demandé. Pense à utiliser les balises de code (bouton <> au dessus de la boîte de réponse) afin que tes messages sur le forum soient plus lisibles.

    Bonne chance
    -1
    1. Merci
      Voici le fichier passwd

      root:x:0:0:root:/root:/bin/bash
      daemon:x:1:1:daemon:/usr/sbin:/bin/sh
      bin:x:2:2:bin:/bin:/bin/sh
      sys:x:3:3:sys:/dev:/bin/sh
      sync:x:4:65534:sync:/bin:/bin/sync
      games:x:5:60:games:/usr/games:/bin/sh
      man:x:6:12:man:/var/cache/man:/bin/sh
      lp:x:7:7:lp:/var/spool/lpd:/bin/sh
      mail:x:8:8:mail:/var/mail:/bin/sh
      news:x:9:9:news:/var/spool/news:/bin/sh
      uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
      proxy:x:13:13:proxy:/bin:/bin/sh
      www-data:x:33:33:www-data:/var/www:/bin/sh
      backup:x:34:34:backup:/var/backups:/bin/sh
      list:x:38:38:Mailing List Manager:/var/list:/bin/sh

      et voici celui de group

      root:x:0:
      daemon:x:1:
      bin:x:2:
      sys:x:3:
      adm:x:4:
      tty:x:5:
      disk:x:6:
      lp:x:7:
      mail:x:8:
      news:x:9:
      uucp:x:10:
      man:x:12:
      proxy:x:13:
      kmem:x:15:
      dialout:x:20:eleve
      fax:x:21:
      voice:x:22:
      cdrom:x:24:eleve
      floppy:x:25:eleve
      tape:x:26:
      sudo:x:27:
      audio:x:29:eleve
      dip:x:30:
      www-data:x:33:
      backup:x:34:
      operator:x:37:
      list:x:38:
      irc:x:39:
      src:x:40:
      gnats:x:41:
      shadow:x:42:
      utmp:x:43:
      video:x:44:eleve
      sasl:x:45:
      plugdev:x:46:eleve

      Le champ 4 dans le fichier utilisateur correspond au numero du groupe
      et dans le fichier group le champ numero de groupe est positionné en numero 3

      J'aimerais faire un programme qui me liste les utilisateurs correspondant a tel groupe

      Merci
      1
      1. Modérateur
        Ben je ne sais pas si c'est un exerice, mais sinon en shell et si c'est sur ta machine, c'est simplement la commande groups :
        (mando@aldur) (~) $ groups
        mando dialout cdrom floppy audio video plugdev scard
        

        Pour qu'on puisse t'aider sur le programme python il faudrait que tu nous donne un exemple de fichier passwd et group.

        Bonne chance
        -1