Bonsoir, j'ai un projet où j'utilise des commandes shell pour effectuer certaines actions comme par exemple arreter un processus ou editer un *.conf.
Le probleme c'est que pour ces commandes j'ai besoins d'être en root et je n'arrive pas a effectuer une authentification à partir de l'exec.
Runtime vl_rt = Runtime.getRuntime();
String[] cmd = {"su","sh","-c","\""+_cmd+"\""};
Process vl_pr = vl_rt.exec(cmd);
Ici "Su" va demander un mot de passe pour effectuer ma commande mais je ne vois pas du tout comment le renseigner automatiquement..
Il y a pourtant certains programmes qui demandent une fois le mot de passe root au lancement de l'appli et ensuite on peut effectuer des opérations en root, donc il doit y avoir une solution.
Si quelqu'un la connait je suis tout ouïe ^^
# stdin
Posté par JaguarWan . Évalué à 2.
En Java pur, en regardant sur google vite fait j'ai trouvé ça:
http://download.eclipse.org/tptp/4.2.0/javadoc/Platform/publ(...)
Plus particulièrement, la fonction:
public java.io.OutputStream getStandardInputStream()
throws ExecutionComponentStateException
Get the OutputStream for writing to the process's stdin pipe. It is available after process is launched.
Voilà, j'espère que ça pourra t'aider.
[^] # Re: stdin
Posté par JaguarWan . Évalué à 2.
FILE *s1 = popen("command", "r");
=
Process process = Runtime.getRuntime().exec("command");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
Y a pas à dire c'est verbeux le Java :)
[^] # Re: stdin
Posté par DeliciousF . Évalué à 1.
[^] # Re: stdin
Posté par DeliciousF . Évalué à 1.
(en grande partie récupéré)
try {
String[] cmd = {"sudo"," ps -A -eo pid,fname"};
// lancement de la commande
Runtime r = Runtime.getRuntime();
Process p = r.exec(cmd);
// récupération du mot de passe
String rpass = JOptionPane.showInputDialog(null, "Mot de passe root :");
// flux en entrée du process
OutputStream os = p.getOutputStream();
// flux en sortie du process
InputStream is = p.getInputStream();
// initialisation du printwriter pour écrire dans le flux
PrintWriter writer = new PrintWriter(os, true);
p.waitFor();
// je lui donne le mot de passe
writer.println(rpass);
// Création du bufferedReader pour lire le résultat
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
// affichage de la sortie du process
String line;
while((line = reader.readLine()) != null)
{
System.out.println(line);
}
p.waitFor();
p.destroy();
rpass = null;
}
catch (Exception e){
System.out.println("arf");
}
}
En résultat je n'ai rien, je fourni le mot de passe et l'application se termine.
j'ai testé avec juste : String cmd = "ps -A -eo pid,fname";
et j'obtiens bien ma liste de processus.
si je mets sudo à la place de su, ça reste en attente..
Je n'ai pas trouvé de moyen de vérifier l'état des flux et après 3 jours de recherche, je n'arrive toujours à rien :/
il manque peut etre un truc tout bête..
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.