Bonjour,

Dans un de mes scripts PERL, j'effectue un telnet sur une machine.
Je loggue les différentes opérations de succès et d'échec.
J'utilise le module Net::Telnet.

Lorsque l'utilisateur fournit un mauvais login ou mot de passe, j'aimerais pouvoir logguer les erreurs, afficher un message à l'écran et effectuer d'autres opérations (notamment fermer la connexion à mon serveur LDAP).

Le "die" ne permet d'afficher qu'un message d'erreur.

Voilà le code que j'utilise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
sub Telnet_Connect {
 
        my $ip_adresse = @_[0];
        my $user = @_[1];
        my $passwd = @_[2];
        my $ldap = @_[3];
        my $mesg;
 
 
        my $t = new Net::Telnet();
        if (! defined $t) {
                LogPack::WriteLog("Impossible de créer l'objet Telnet");
                print "Impossible de créer l'objet Telnet";
                LDAP_modif::LDAP_disconnect($ldap);
                exit;
        }
 
        $t->open($ip_adresse);
        if ($mesg = $t->errmsg){
                LogPack::WriteLog("Echec de connexion Telnet sur la machine $ip_adresse");
                print "Echec de connexion Telnet sur la machine $ip_adresse\n";
                LDAP_modif::LDAP_disconnect($ldap);
                exit;
        }
 
 
        $t->login($user, $passwd));
        if ($mesg = $t -> $errmsg ){
                LogPack::WriteLog("Echec d'authentification Telnet");
                print "Echec d'authentification Telnet\n";
                LDAP_modif::LDAP_disconnect($ldap);
                exit;
        }
 
 
        return $t;
}
Le problème c'est qu'en cas de mauvais login ou password, le script se termine et j'ai le message: "login failed: bad name or password at ...."

Il semble que cela vienne d'un "die" qui serait exécuté à l'intérieur du "login()".
N'y a t il pas moyen de courcircuiter ce fonctionnement pour qu'en cas d'echec, il passe dans le "if ($mesg = $t -> $errmsg )" et exécute les intructions?

Merci d'avance