Ypmatch(Perl)

youllla Messages postés 25 Statut Membre -  
youllla Messages postés 25 Statut Membre -
Bonjour,
SVP, est ce quelqu'un peut m'aider à comprendre le script suivant,je sais Grosso modo ce qu'il fait mais j'ai besoin de plus d'explication .

$TROUVE = 0 ;
open (F0,"ypmatch $UID passwd.byuid|") ;
while (<F0>) {
split(/:/) ;
$LOGIN = @_[0] ;
$HOME = @_[5] ;
$TROUVE = 1 ;
}

print STDERR "Utilisateur $LOGIN trouve : $HOME \n" ;

if ( $TROUVE == 0 ) {
print STDERR "Utilisateur $LOGIN non trouve dans passwd\n" ;
exit 1 ;
}
close F0;

merci :) je suis débutante en Perl :)
Configuration: Windows XP
Firefox 2.0

14 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    open (F0,"ypmatch $UID passwd.byuid|") ;
    on exécute la commande ypmatch qui va lire dans la table passwd dans NIS (Network Information Services) l'entrée correspondant à l'utilisateur dont le user id est $UID, une entrée passwd a ce format: bin:x:2:2:bin:/bin:/bin/sh
    split(/:/) ;
    on récupère chaque élément de la ligne, séparés par : dans un tableau
    $LOGIN = @_[0] ;
    $HOME = @_[5] ;

    j'ai donc le nom de l'utilisateur $LOGIN dans tableau[0]
    et son répertoire $HOME dans tableau[5]
    puis on affiche et on teste
    0
  2. youllla Messages postés 25 Statut Membre
     
    merciii pour votre réponse :)
    0
  3. youllla Messages postés 25 Statut Membre
     
    Bonjour 'dubcek',
    si j'essaye de tester ce script,en passant à la commande ypmatch un UID que je connais,je n'obtiens aucun résultat :

    Utilisateur trouve :

    je ne sais pas ce qui manque ...
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    un message d'erreur ? que contient /etc/nsswitch.conf ? cat /etc/nsswitch.conf
    l'utilisateur est défini dans la table passwd NIS ou dans le fichier local /etc/passwd ?
    ypcat passwd ¦ grep $UID fonctionne ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. youllla Messages postés 25 Statut Membre
     
    voila le fichier:

    # /etc/nsswitch.nis:
    #
    # An example file that could be copied over to /etc/nsswitch.conf; it
    # uses NIS (YP) in conjunction with files.
    #
    # "hosts:" and "services:" in this file are used only if the
    # /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.

    # the following two lines obviate the "+" entry in /etc/passwd and /etc/group.
    passwd: files nis
    group: files nis

    # consult /etc "files" only if nis is down.
    hosts: nis [NOTFOUND=return] files
    ipnodes: files
    # Uncomment the following line and comment out the above to resolve
    # both IPv4 and IPv6 addresses from the ipnodes databases. Note that
    # IPv4 addresses are searched in all of the ipnodes databases before
    # searching the hosts databases. Before turning this option on, consult
    # the Network Administration Guide for more details on using IPv6.
    #ipnodes: nis [NOTFOUND=return] files

    networks: nis [NOTFOUND=return] files
    protocols: nis [NOTFOUND=return] files
    rpc: nis [NOTFOUND=return] files
    ethers: nis [NOTFOUND=return] files
    netmasks: nis [NOTFOUND=return] files
    bootparams: nis [NOTFOUND=return] files
    publickey: nis [NOTFOUND=return] files

    netgroup: nis

    automount: files nis
    aliases: files nis

    # for efficient getservbyname() avoid nis
    services: files nis
    sendmailvars: files
    printers: user files nis

    auth_attr: files nis
    prof_attr: files nis
    project: files nis

    la commande ypcat passwd ¦ grep $UID fonctionne bien .
    elle me renvoie par exemple : dmallet:C0zjFWQRg2o62:40569:10410:Delphine MALLET, Ifremer Noumea PDG-DOP-DCOP-LEADNC-LAC, +687 28 51 71:/home/noumea/perso/dmallet:/bin/csh
    0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    tout cela est cohérent, que répond
    ypmatch -x¦ grep passwd

    que répond
    ypmatch $UID passwd.byuid
    0
  8. youllla Messages postés 25 Statut Membre
     
    re bonjour
    le résultat de la commande est :
    louet>96% ypmatch 11543 passwd.byuid
    bthouve:P43bf4V5aRqXs:11543:10076:Benedicte THOUVENIN, Ifremer Brest PDG-DOP-DCN-BE-LBCM,PDG-DOP-DCB-DYNECO-PHYSED, 02 29 00 85 48:/home1/yao/bthouve:/bin/csh
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    donc yp fonctionne
    mais dans le script perl, $UID est la variable UID définie dans le shell ? on ne peut pas mettre une variable externe comme ca
    essaye ton script avec au début
    $UID=11543;

    ou bien il faut utiliser ENV our récupérer une variable du shell
    my $uid = $ENV{UID};
    0
  10. youllla Messages postés 25 Statut Membre
     
    ah oui c'est vrai :) évidemment :d:d
    je vous montre le script modifié :

    #!/bin/perl
    #use warnings;
    use CGI::Carp qw(fatalsToBrowser);
    my $filename;
    my $dir='/home/spool/messagerie/forward';
    chomp $dir;
    opendir(DIR,$dir) || die "cannot open $dir $!";
    while((my $filename=readdir(DIR)))
    {
    print("\n[ $filename ]\n");
    #my($dev,$inode,$perm,$liens,$uid,$gid,$ndev,$lg,$acces,$mod,$cr,$blksiz
    #e,$bl)=stat("$dir/$filename");
    my @stats = stat("$dir/$filename");
    if(scalar(@stats) == 0) {
    print "\tAucune info\n";
    }
    else {
    print "\t".join(' - ', @stats)."\n";
    }
    $TROUVE = 0;
    $UID=$stats[4];
    open (F0,"ypmatch $UID passwd.byuid|");
    while (<F0>) {
    split(/:/) ;
    $LOGIN = @_[0] ;
    $HOME = @_[5] ;
    $TROUVE = 1;
    }
    {
    print STDERR "Utilisateur $LOGIN trouve : $HOME \n" ;
    print("$LOGIN");
    }
    if ( $TROUVE == 0 ) {
    print STDERR "Utilisateur $LOGIN non trouve dans passwd\n" ;
    #exit 1 ;
    }
    close F0;

    }
    closedir(DIR);

    et ça marche ;)
    merciiiiii
    0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    tant mieux, mais ne faudrait-il pas plutôt faire:

    if ( $TROUVE == 0 ) {
    print STDERR "Utilisateur $LOGIN non trouve dans passwd\n" ;
    #exit 1 ;
    }
    else
    {
    print STDERR "Utilisateur $LOGIN trouve : $HOME \n" ;
    print("$LOGIN");
    }
    0
  12. youllla Messages postés 25 Statut Membre
     
    oui tout à fait,c'est plus propre :)
    j'ai un autre soucis :s
    j'ai essayé d'utiliser l'expression régulière suivante :

    if(($filename=~/.old/) || ($filename=~/.mag/) || ($filename=~/.sav/))
    {
    print($filename");
    }

    sachant que .old , .mag et .sav sont les extensions recherchées...
    mais cela n'affiche rien du tout, et mon script marchait bien avant que j'y ajoute ces deux lignes de code :s :s
    0
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    il y a un " de trop ou manquant ?
    print($filename");
    0
  14. youllla Messages postés 25 Statut Membre
     
    ah ouiii !!!!!!
    manquant ;)
    merci,je testerai ça Lundi :)
    0
  15. youllla Messages postés 25 Statut Membre
     
    Bonjour
    merci beaucoup "dubcek" pour votre aide, ça marche :)
    0