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

 C Discussion :

Entrer une variable dans une commande déja lancée


Sujet :

C

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Entrer une variable dans une commande déja lancée
    Bonjour. Voilà mon problème je voudrais faire un programme qui demande le mot de passe au lancement pour ne pas avoir à le rerentrer plus tard mais je coince au niveau des fonctions, petit exemple :

    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
    void defrag()
    {
    	long confirmation = 0;
    	char buffer[256];
     
    	printf("\nDemarrage de defrag ? 1 : oui ");
    	scanf("%ld", &confirmation);
    	sprintf(buffer, "runas /profile /user:administrateur \"dfrg.msc\"");
     
    	if (confirmation == 1)
    	{
    		system("cls");
    		system(buffer);
    	}
    	else
    	{
    		printf("\nOk ok a plus alors !\n");
    	}
    }
    Et dans ce cas là lorsque je lance cette fonction la commande va me demander le mot de passe administrateur (quand elle lance la ligne de commande rentrée dans buffer) que j'ai déja rentré dans la variable mot_de_passe mais comment dire à la console de prendre en compte cette variable ? merci de vos réponses

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Tu dois rediriger l'entrée standard de runas vers un fichier que tu pourras écrire. Ca se fait en utilisant les tubes (pipes). Regarde du côté des fonctions popen, pipe, etc.

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Oué, avec popen() en mode écriture, tu dois pouvoir faire comme si tu "tappais" le mot de passe.
    Sinon, sans faire de programme, tu peux utiliser les fonctionnalités du shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "mot_de_passe" | ton_programme

  4. #4
    Candidat au Club
    Profil pro
    Lycéen
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    ok ok je vais essayer de voir ça merci ! ^^

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ben j'ai essayé de trouver des infos sur les pipes et la commande _popen (car je suis sous windows principalement) j'ai trouvé trois trucs :

    http://msdn.microsoft.com/en-us/libr...4b(VS.80).aspx
    http://www.infres.enst.fr/~dax/polys/tp-c-shell/
    http://kafka.fr.free.fr/docs/prog_sy.../slide_37.html

    Le troisième est intérréssant mais j'ai toujours du mal à comprendre comment ça marche en écriture (en lecture aussi car je débute dans le C), donc si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FILE* flux;
    char buff[500];
    flux = _popen("runas /profile /user:administrateur cmd", "w"); //ouvre un pipe en lancant la commande et me permet d'écrire ?
    Et à partir du fgets je suis à moitié paumé car je vois pas trop comment envoyer ça à la commande et j'ai aussi pas tout à fait compris les boucles et à quoi servent les fgets de l'exemple 3.

    Sinon pour ta suggestion Gruik j'ai testé dans une commande à part mais je sais pas trop comment il prend en compte le echo car par exemple pour le mot de passe bidon j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo bidon | commande
    echo bidon| commande
    echo "bidon"| commande
    enfin toutes les combinaisons possibles mais à chaque fois il me trouve une erreur au niveau du mot de passe...

  6. #6
    Candidat au Club
    Profil pro
    Lycéen
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je repars pour un monologue , j'ai donc compris comment marche _popen mais j'ai encore a peu prés le même problème que si je fesait le truc direct en shell. Voilà un code tout simple :
    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
    int main( void )
    {
    	unsigned char buf[128] = {0};
            FILE *pp = 0;
     
    	printf("Salut !");
    	scanf("%s", &buf);
     
    	if (pp = _popen("runas /user:administrateur cmd", "w")) 
    {
    	fputs(buf, pp);
    }
     
    system("pause");
     
    _pclose(pp); 
    }
    Mais j'ai toujours droit au rébarbatif "1326 : Echec d'ouverture de session : nom d'utilisateur inconnu ou mot de passe incorrect." pourtant la session existe bel et bien et le mot de passe aussi (car j'arrive à lancer "runas /user:administrateur cmd" dans l'invite de commande et tapper le mot de passe après) donc là je comprend pas...

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Avec la pluspart des commandes qui demandent un mot de passe, on ne peut pas passer le mot de passe simplement par stdin.

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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