Programme python

Fermé
bansan Messages postés 122 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 8 mai 2011 - 5 oct. 2008 à 02:51
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 6 oct. 2008 à 00:39
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()

3 réponses

bansan Messages postés 122 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 8 mai 2011 1
5 oct. 2008 à 16:02
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
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
5 oct. 2008 à 15:49
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
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
6 oct. 2008 à 00:39
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