IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[debutant] Probleme script perl


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut [debutant] Probleme script perl
    Bonjour, j'ai commencé à plancher sur le language perl car je voudrais créer un script qui puisse ajouter des utilisateurs sur proftpd via la commande ftpasswd.

    Voici mon script actuel (c'est juste un début soyez indulgent ) :

    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
     
     
    #!/usr/bin/perl -w	
    use strict; 
     
    print "\nAjouter un utilisateur dans ProFTPD\n";
     
    print "\nEntrer le nom d'utilisateur ftp : ";
    my $login = <stdin>;
    chomp $login;
     
    print "Creation de l'utilisateur $login\n";
    print " Entrez l'id de $login : ";
    my $id = <stdin>;
    chomp $id;
     
    print "L'id de $login est $id\n";
    print "Choisir le chemin de l'utilisateur ftp : ";
    my $home = <stdin>;
    chomp $home;
     
    print "Creation de l'utilisateur $login en cours ...\n";
    my $result1 = `ftpasswd --passwd --file=/usr/local/etc/ftp.passwd --name=$login --uid=$id --gid=1050 --home=$home --shell=/bin/false`;
    print "$result1";
    Mon principal problème vient du faite que quand j'arrive au moment ou normalement après avoir entrée le chemin de l'utilisateur (/home/site/ftp), le programme se bloque et n'affiche pas la partie ou le mot de passe doit être entrer pour l'utilisateur (la partie "mot de passe" s'affiche s'affiche mais uniquement après les avoir rentrés à l'aveuglette) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Ajouter un utilisateur dans ProFTPD
     
    Entrer le nom d'utilisateur ftp : test
    Creation de l'utilisateur test
     Entrez l'id de test : 1111
    L'id de test est 1111
    Choisir le chemin de l'utilisateur ftp : /home/site/ftp
    Creation de l'utilisateur test en cours ...
    ftpasswd: --passwd: missing --gid argument: default gid set to uid
    ----> blocage ici <-------
    partie "mot de passe" qui s'affiche après les avoir tapés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Password:
    Re-type password:
     
    ftpasswd: entry created
    Et voila le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cat ftp.passwd | grep test
    test:$1$oG7WPS3j$AlsCymBRm6xEo6ZKR6c221:1111:1111::/home/site/ftp:/bin/false
    si quelqu'un pouvait m'aider pour arranger ce bout de code.
    merci d'avance.

  2. #2
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    je pense (pas sur) que la solution à ton probleme est la suivante :
    tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $result1 = `ftpasswd --passwd --file=/usr/local/etc/ftp.passwd --name=$login --uid=$id --gid=1050 --home=$home --shell=/bin/false`;
    print "$result1";
    je mettrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $cmd = `ftpasswd --passwd --file=/usr/local/etc/ftp.passwd --name=$login --uid=$id --gid=1050 --home=$home --shell=/bin/false`;
    system($cmd);
    CKL
    N°°b forever
    --
    may the be with you

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    humm voila le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Ajouter un utilisateur dans ProFTPD
     
    Entrer le nom d'utilisateur ftp : test
    Creation de l'utilisateur test
     Entrez l'id de test : 1111
    L'id de test est 1111
    Choisir le chemin de l'utilisateur ftp : /home/site/ftp
    Creation de l'utilisateur test en cours ...
    sh: ftpasswd:: command not found
    sh: line 1: ftpasswd:: command not found
    sh: line 3: Password:: command not found
    sh: line 4: Re-type: command not found
    sh: line 6: ftpasswd:: command not found
    marche po :/

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je crois qu'il y a déjà une erreur plus haut, à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $result1 = `ftpasswd --passwd --file=/usr/local/etc/ftp.passwd --name=$login --uid=$id --gid=1050 --home=$home --shell=/bin/false`;
    Perl me dit
    'ftpasswd' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
    Je ne sais pas pourquoi mais avec des doubles quotes, je n'ai plus ce problème.
    C'est vrai qu'entre simples-quotes les variables ne seront pas interprétées et $login restera $login.


    essaie peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $result1 = "ftpasswd --passwd --file=/usr/local/etc/ftp.passwd --name=$login --uid=$id --gid=1050 --home=$home --shell=/bin/false";
    -- Jasmine --

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    oui jasmine tu as raison, avec les double " ca marche, résultat :

    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
     
    Ajouter un utilisateur dans ProFTPD
     
    Entrer le nom d'utilisateur ftp : test
    Creation de l'utilisateur test
     Entrez l'id de test : 1111
    L'id de test est 1111
    Choisir le chemin de l'utilisateur ftp : /home/site/ftp
    Creation de l'utilisateur test en cours ...
    ftpasswd: using alternate file: /usr/local/etc/ftp.passwd
    ftpasswd: updating passwd entry for user test
     
    Password:
    Re-type password:
     
    ftpasswd: entry updated
    merci encore pour votre aide, je vais essayer de faire un ptit truc complet avec des menus ect ...

    je vous tiens au courant sur l'avancement de la chose, bonne jourée et merci encore.

    edit : comme il fait beau, jvais aller bronzer un peu, je remet ca a plus tard dans la journée a+

  6. #6
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    heu ... oui effectivement j'ai écrit n'importequoi il fallait obligatoirement mettre les double quote et non pas ni une simple quote (les variables n'aurais pas été interpréter) et encore moin les backquote (ce que j'ai mis par inadvertance) qui font une appelle au système et place le résultant dans la variable !!
    CKL
    N°°b forever
    --
    may the be with you

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    j'ai avancé dans mon code mais j'ai encore quelques questions, je voulais savoir si c'était possible d'afficher le premier mot de toutes les lignes de mon fichier ftpd.passwd.

    voici les lignes complètes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cat ftpd.passwd
    lan08:$1$HSaO3rBt$cxD2MuWg3pXcDPEXZWqp71:1001:1050::/home/site/ftp:/bin/false
    test:$1$YPiOLXCS$WBIGiT.iwB4BueiZVh1Mx.:1002:1050::/home/site/ftp:/bin/false
    je cherche donc à afficher uniquement "lan08" et "test" sans ce qui suis sur leurs lignes.

    merci d'avance et bonne soirée

  8. #8
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut oui c'est possible
    oui bien sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    open (my $ftpdFH,'<',ftpd.passwd) or die ("impossible d'ouvrire le fichier ftpd.passwd") ;
    while ($ftpdFH)
    {
      if (/^(\w*)\b/)
      {print $1;}
    }
    close ($ftpdFH) ;
    devrais faire ce que tu voulais

    si tu comprend pas tout mon code lis cette partie, et celle la de la FAQ
    CKL
    N°°b forever
    --
    may the be with you

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    ok je vais regarder ça, merci pour ton aide

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    J'ai rentré ta commande telle quelle dans mon script et voila le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bareword "ftpd" not allowed while "strict subs" in use at ./client-proftpd.pl line 81.
    Bareword "passwd" not allowed while "strict subs" in use at ./client-proftpd.pl line 81.
    Execution of ./client-proftpd.pl aborted due to compilation errors.
    j'ai essayé de remplacé le ftpd.passwd après la "," (1ere ligne) par le chemin complet mais autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Bareword found where operator expected at ./client-proftpd.pl line 81, near "/etc/ftpd"
            (Missing operator before ftpd?)
    syntax error at ./client-proftpd.pl line 81, near "/usr/local"
    Execution of ./client-proftpd.pl aborted due to compilation errors.
    si vous avez une idée

  11. #11
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut évidement
    évidement j'ai encore écrit des bétises :p
    voila ce qu'il fallait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (my $ftpdFH,'<','/avec/son/path/ftpd.passwd') or die ("impossible d'ouvrire le fichier ftpd.passwd") ;
    CKL
    N°°b forever
    --
    may the be with you

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    j'ai essayé la ligne que tu m'as passé mais ce coup ci, ca tourne en boucle avec la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Use of uninitialized value in pattern match (m//) at ./client-proftpd.pl line 118, <stdin>
    le code qui est dans le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    case "3"	
    {
    open (my $ftpdFH,'<','/usr/local/etc/ftpd.passwd') or die ("impossible d'ouvrire le fichier ftpd.passwd") ;
    while ($ftpdFH)
    		{
    		if (/^(\w*)\b/)
    		{print $1;}
                  	}
    close ($ftpdFH) ;
    je vais rejeter un coup d'oeil a tes liens

  13. #13
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut apparemment
    apparemment ça ne vient pas de ces lignes la puisque l'erreur lors de la lecture de stdin et que ces lignes la ne le lisent pas.
    quel est la ligne 118 et les 3 au dessus et les 3 en dessous ?
    CKL
    N°°b forever
    --
    may the be with you

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    La ligne 118 est :

    et les lignes qui sont au dessus et en dessous

    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
    38
    39
    40
     
                                    case "2"
    				{
    				print "\nChange the user password\n";
     
    				print "\n Enter username : ";
    				my $login2 = <stdin>;
    				chomp $login2;
     
    				my $cmd = "ftpasswd --passwd --file=/usr/local/etc/ftpd.passwd --name=$login2 --change-password";
    				system($cmd);
    				}				
     
     
    			case "3"	
    				{
    				open (my $ftpdFH,'<','/usr/local/etc/ftpd.passwd') or die ("impossible d'ouvrire le fichier ftpd.passwd") ;
    				while ($ftpdFH)
    				{
      					if (/^(\w*)\b/)
      					{print $1;}
    				}
    				close ($ftpdFH) ;			
     
     
    				#COMPTAGE LIGNE
    				sub nbLignes;
    				print nbLignes "/usr/local/etc/ftpd.passwd";
    				sub nbLignes {
     				my ($file)=@_;
     				my ($res)=0;
     				open(FIC,"$file") or die("can't open $file : $!");
     				while (<FIC>) { $res++; }
     				close(FIC);
     				print "\n";
    				print "There is ";
    				$res; 
    				}
    				print " user in the list";
    				print "\n";
    ps : je dois partir à un entretien, je reviens en fin d'après midi bonne journée

  15. #15
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    je suis désoler mais en ce moment je tien pas la super forme !
    voila l'erreur
    les < et > avais été oublies
    CKL
    N°°b forever
    --
    may the be with you

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    ok merci bien

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    J'essaye juste de trouve un moyen de séparer les résultats par une "," mais passe pas :/

  18. #18
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Si les résultats sont dans un tableau, tu peux utiliser join().

    --
    Jedaï

  19. #19
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    je sais pas trop de quel résultat tu parle sois plus presci et je pourrais t'aider ^^
    CKL
    N°°b forever
    --
    may the be with you

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    je voulais mettre des "," pour ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	case "3"	
    	{
    	open (my $ftpdFH,'<','/usr/local/etc/ftpd.passwd') or  die ("impossible     d'ouvrire le fichier ftpd.passwd") ;
    				while (<$ftpdFH>)
    				{
      					if (/^(\w*)\b/)
      					{print $1;}
    				}
    				close ($ftpdFH) ;
    resultat qui doit donner : user1, user2, ...

    merci d'avance

Discussions similaires

  1. [debutant] Probleme script perl
    Par bob2099 dans le forum Linux
    Réponses: 2
    Dernier message: 10/06/2008, 12h19
  2. probleme script perl sous windows
    Par wirgilus dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2008, 11h34
  3. [TELNET]probleme script perl
    Par gdpasmini dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 04/06/2007, 10h20
  4. help me probleme script perle
    Par babar006 dans le forum Langage
    Réponses: 1
    Dernier message: 02/06/2007, 10h17
  5. [langage] Probleme avec caractère '$' dans script Perl
    Par zouetchou dans le forum Langage
    Réponses: 11
    Dernier message: 24/07/2004, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo