Liste des utilisateurs sous Linux

Liste des utilisateurs sous Linux - C - Programmation

Marsh Posté le 26-10-2005 à 18:12:55    

Bonsoir,
 
A tout hasard, connaissez vous une fonction qui permette d'obtenir la liste des utilisateurs et des groupes sous linux sans passer par l'analyse des fichiers /etc/passwd et /etc/group ?
 
Merci d'avance.
 
En fait je dois utiliser la commande chown et j'aimerais bien pouvoir proposer une liste d'utilisateurs et de groupes.
 
Remerci d'avance ;)

Reply

Marsh Posté le 26-10-2005 à 18:12:55   

Reply

Marsh Posté le 26-10-2005 à 18:39:54    

cut -f1 -d: /etc/passwd
Ca te va vraiment pas ca ? ( de toute facon un soft qui fait que ce que tu demande fera exactement la même chose... )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 26-10-2005 à 18:41:08    

En C, fgets() + strtok() :o

Reply

Marsh Posté le 26-10-2005 à 18:45:28    

arf, j'avais même pas fait gaffe que je regardais la cat C dslé...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 26-10-2005 à 21:43:50    

getpwent et getgrent, non ?

Reply

Marsh Posté le 26-10-2005 à 21:45:49    

Cool je ne connaissais pas, et en plus c'est POSIX [:jar jar]
 
Je le note dans un coin de ma tête celui-là. :jap:

Reply

Marsh Posté le 26-10-2005 à 22:03:35    

Merci,
 
alors si ça interesse quelqu'un j'ai écris ça :
 

Code :
  1. void
  2. print_uidgid(int mode)
  3. {
  4.     char ligne[80],path[12];
  5.     char *c;
  6.     FILE *f;
  7.     if(mode==GID) strcpy(path,"/etc/group" );
  8.     else strcpy(path,"/etc/passwd" );
  9.     if(!(f=fopen(path,"r" ))) {
  10.         perror("Arf" );
  11.         return;
  12.     }
  13.     do {
  14.         c=fgets(ligne,sizeof(ligne),f);
  15.         if(c!=NULL) {
  16.             printf("Nom : %-20s - ID : %s\n",extract_string(ligne,":",0),extract_string(ligne,":",2));
  17.         }
  18.     } while(c!=NULL);
  19.     printf("\n" );
  20. }


 
et j'ai trouvé ça :
 

Code :
  1. char*
  2. extract_string(char *string, const char *delimit, int index)
  3. {
  4.     int cpt=0;
  5.     char *result="";
  6.     result=strtok(string, delimit);
  7.     while(cpt!=index){
  8.         result=strtok(NULL,delimit);
  9.         cpt++;
  10.     }
  11.     return result;
  12. }


 
Voili, voilou et merci de votre aide

Reply

Marsh Posté le 26-10-2005 à 22:12:14    

Je suis pas spécialiste de la question mais voilà ce que je pense:
Parser directement /etc/passwd et /etc/group ne fonctionnerait pas sur un système utilisant PAM avec, par exemple, un serveur LDAP utilisé comme backend pour l'authentification. Il faut passer par NSS, ce que font les commandes ci-dessus si je ne me trompe.


Message édité par dividee le 26-10-2005 à 22:13:44
Reply

Marsh Posté le 26-10-2005 à 23:50:38    

Bah, disons que je ne sais pas trop comment récupérer mes infos sinon :)

Reply

Marsh Posté le 27-10-2005 à 06:44:12    

dividee t'a donné les bonnes fonctions à utiliser, elles sont standard et font exactement ce que tu souhaites : getpwent et getprent.

Reply

Marsh Posté le 27-10-2005 à 06:44:12   

Reply

Marsh Posté le 31-10-2005 à 01:55:07    

Elmoricq a écrit :

dividee t'a donné les bonnes fonctions à utiliser, elles sont standard et font exactement ce que tu souhaites : getpwent et getprent.


Standard ? Quel standard ? Pas C en tout cas...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 31-10-2005 à 09:00:42    

Si si, j'ai été surpris, maos ces deux fonctions sont POSIX.2.

Reply

Marsh Posté le 31-10-2005 à 11:21:40    

Elmoricq a écrit :

Si si, j'ai été surpris, maos ces deux fonctions sont POSIX.2.


POSIX != standard

Reply

Marsh Posté le 31-10-2005 à 11:56:41    

bha c'est UN standard, dire que c'est "standard" c'est un peu ambigu ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 31-10-2005 à 11:57:01    

POSIX est un standard. [:spamafote]
 
M'enfin c'est du pinaillage sémantique, là. C'est pas ISO, mais bon rechercher la liste des utilisateurs sur un Unix, en même temps...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed