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

Programmation et administration système Perl Discussion :

redirection pipe process perl shell...


Sujet :

Programmation et administration système Perl

  1. #1
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut redirection pipe process perl shell...
    Bonjour tout le monde,

    Je viens ici pour vous solliciter un petit coup de pouce car j'ai un petit souci...

    Voilà j'ai besoin de faire un petit script en perl qui nécessite pour ça, de faire un changement de compte utilisateur.

    J'ai donc fait la petite procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    sub login{
      my($login, $password) = @_;
     
      system("whoami");
      open(loginDesc, "su $login >&0 |");
      print loginDesc "$password";
      close(loginDesc);
      system("whoami");
    }
     
    login('log', 'pass');
    et ça ne fonctionne pas :'(

    en fait je dois utiliser la procédure login dans une boucle avec le $login et $password comme argument lus dans un fichier plat.

    De ce fait, je cherche donc à rediriger la sortie standard de mon programme perl dans l'entrée standard de la commande su

    J'ai bien essayé pas mal de solutions avec notamment les pipes mais rien de fonctionnelle pour l'instant...

    Est-ce que vous pourriez m'aider ou me diriger s'il vous plait vers une url qui pourrait m'être utile ?

    En vous remerciant bien

    Bonne journée.

    P.S.: si vous avez un lien qui explique comment faire le redirections ou rendez vous de process entre les commandes du shell linux et le programme perl je vous en remercie également d'avance

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Tu as regardé dans la FAQ Perl et les cours PERL de David?

    Sinon ... je vois qu'une commande :

    Grave urgent !!!

  3. #3
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    si tu parles des tutoriels PERL présents sur ce site la réponse est oui, et je n'ai pas trouvé la réponse à ma question...

    sinon de quelle commande parles tu ? ou peut-être que j'ai loupé quelque chose...?

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    On parle de moi (j'aime faire mon Jean-Claude Convenant).

    Bon, sinon, il y a effectivement une erreur dans ton script, la bonne syntaxe est :
    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
     
    #!/usr/bin/perl -w
     
    use Carp;
    use strict;
     
    sub login{
    	my($login, $password) = @_;
     
    	system("whoami");
     open(loginDesc, "| su - $login");
    	print loginDesc "$password";
    	close(loginDesc);
    	system("whoami");
    }
     
    login('toto', 'tata');
    Quelle est la différence ? Quand on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(loginDesc, "| su - $login");
    On transmet dans le flux des informations au programme que l'on lance. Alors qu'à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(loginDesc, "su - $login |");
    , le programme transmet au flux et non plus sur la sortie standard.
    Toutefois, concernant ton problème, il faut savoir que su ne amrchera pas ainsi te réclamant qu'il ne peut s'ouvrir que depuis un terminal.
    Je te conseille alors de lancer ce script via un sudo, qui sera sans doute moins casse-tête.
    Pour sinon faire suite à Katyucha qui est mon agent publicitaire, voici les liens vers la FAQ Perl et la rubrique Perl où tu auras accès à mes cours. Enfin, je m'excuse de ne pas avoir abordé ce détail dans les redirection et je vais veiller à réparer cette omission.

    @++

    PS : il n'y a pas encore de commande GLDavid sur les Unix standard mais cela ne saurait tarder. Aïe, j'ai mal aux chevilles !
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  5. #5
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    C'est pas une commande GLDavid est notre expert Perl :p C'était juste pour l'appeller :p

    Peux tu nous donner un apercu de ce que te rend ta commande?
    j'ai vu qu'il y a des prints

    [edit :Bon , GLdavid a répondu avant moi ... ]
    Grave urgent !!!

  6. #6
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    merci bien pour cette réponse

    GLD >
    Ca serait intéressant en effet que tu nous pondes un bon tuto avec les rendez vous de process, dup, pipe etc (interaction entre le programme perl et une commande unix).

    Sinon, j'avais déjà essayé ton code avant de crier au secours et malheureusement ça ne fait pas ce que je souhaite. Le sudo ne me sera malheureusement pas d'un grand secours pour ce que j'ai à faire.

    Dis, si j'ai un descripteur sous perl, comment faire pour que ce descripteur soit lu dans l'input ?

    lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    open(desc, "blabla"); system("commandUnix <$desc");
    #ça ne fait pas vraiment ce que j'attends...
     
    #dans notre exemple, ça se résume à ça :
    open(loginDesc, "su $login 0<$loginDesc");
    #ici, je n'ai plus le prompt pour le passeword mais le whoami m'indique que je suis toujours le même utilisateur...

    Katy >
    mon print devrait normalement envoyer sur le descripteur loginDesc le password (qui doit en principe, être lu par la commande su...)

    mais pour l'instant c'est plutôt :
    O rage, O désespoir

    En tous les cas merci bien pour tout

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    r-valkien, je déplace ton thread vers le forum Perl qu isera à mon avis, bien plus approprié.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    r-valkien, il y a quelque chose qui me dérange dans ton script, c'est l'utilisatio nde la commande su. Elle ouvre un nouveau shell et c'est ça que je trouve particulièrement retord.
    Je prend l'exemple ci-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
     
    #!/usr/bin/perl -w
     
    use Carp;
    use strict;
     
    sub login{
    	my($login, $password) = @_;
     
    	system("whoami");
    	#open(loginDesc, "| su - $login");
    	#print loginDesc "$password";
    	#close(loginDesc);
    	defined(my $pid = fork) or die "Pas de fork possible : $!";
    	unless($pid) {
    		system("su $login");
    		system("whoami");
    		exec("wget ftp://ftp2.developpez.be/developps/perl/perlfaq.zip");
    	}
    	waitpid($pid, 0);
    	print "Retour au père.\n";
    	system("whoami");
    }
     
    login('toto', 'tata');
    Dans cet exemple, je m'attendais à télécharger un fichier sous le compte toto. Or, il n'en est rien. Car je suis obligé de fermer la connection toto pour en revenir à l'utilisateur précédent et faire mon download.
    Donc, il faudrait que tu précises l'objectif de ton script. A mon avis, c'est très déconseillé de faire un appel su ainsi. Je serais plutôt pour que le script ne concerne que le ou les utilisateurs ciblés (tu peux mettre tes utilisateurs dans un groupe spécial et n'autoriser l'exécution de ton script que pour ce groupe).

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  9. #9
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    bonsoir David

    merci pour la réponse...

    En fait, mon problème est que je dois faire un petit script perl qui change le passeword de chaque utilisateur (provenant d'un fichier plat tabulé) - un truc qu'on fait de façon récurrente...

    Et il y a une petite contrainte dans tout ça, qui m'oblige à trouver des tours de passe passe à te faire tordre de rire (ne le nie pas, je te vois, ch'suis juste derrière toi lol). Bref, pour être un poil plus sérieux, j'ai donc comme contrainte : pas access en mode root pour faire ces manip qui serait un poil plus simple peut-être pour écrire directement dans /etc/shadow... mais seulement un fichier plat avec l'ensemble des userid et leur passe...

    D'où... Au secours !!!!

    M'enfin bon, c'est déjà très gentil de m'avoir répondu.

    Si tu m'aides à en finir en m'apportant un flingue (chargé de préférence) ça serait encore plus sympa lol

    Enfin bon je ne sais pas trop quoi faire avec tout ça...

  10. #10
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut

    On va peut être pas en finir aux flingues, ça sert pas.
    Il faudrait que tu me montres un exemple de ce fichier.
    Maintenant, pourquoi pas acquérir pour ton compte un compte sudo te permettant de faire les modifications nécessaires sur les utilisateurs ?
    A mon avis, le plus simple serait d'écrire un script Perl permettant de faire les modifications sur les comptes user puis de tester si les modifications ont fonctionné.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  11. #11
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    le truc un peu foireux c'est que le script n'est pas pour moi, mais pour une autre personne (donc un autre compte) et il se peut que ce n'est pas toujours cette personne qui lancera le script.

    Je vais essayer d'avancer un peu alors pour te montrer ça si tu le veux bien... Le perl ça ne fait qu'une semaine même pas que j'en fais. Je dois presque sans arrêt matter les syntaxes pour le moindre truc

    Merci pour les cours et tutoriels pour appendre perl : http://perl.developpez.com/cours/

    Bonne nuit à toi

Discussions similaires

  1. Interactivité perl / shell
    Par PeJo309 dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 24/11/2013, 17h46
  2. aide script perl <=> shell
    Par euroscott dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 07/04/2010, 10h54
  3. Pipes à la suite shell unix
    Par illuzmax dans le forum C
    Réponses: 2
    Dernier message: 12/02/2009, 12h26
  4. editer variable globale (perl->shell)
    Par Matmal11 dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2007, 11h15
  5. [Système][Process] Scripts shell à partir d'une appli java
    Par mickbzh dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 22/07/2005, 15h40

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