Frage zu pipe
-
Hallo,
Mit dem Code wollte ich einen Benutzer „root“ machen. Es ist noch nicht fertig. Aber ich bekomme eine unendliche Schleife, die Passwort anfordert. Was ist falsch? Ich habe doch keine while() Anweisung?int n,fd[2]; pid_t pid; char pw[100]; if (pipe(fd) < 0) cout << "pipe error" << endl; if((pid = fork()) < 0) cout << "fork error" << endl; else if(pid > 0) /*Eltern*/ { close(fd[0]); write(fd[1], "passwort", 12); } else /*Kind*/ { close(fd[1]); n = read(fd[0], pw, 100); execvp("su", NULL); }
Danke
[edit]Code Tags korrigiert[/edit]
[ Dieser Beitrag wurde am 20.06.2003 um 14:24 Uhr von kingruedi editiert. ]
-
Prüf mal den Rückgabe-wert von execvp...
~> echo passwort|su su: must be run from a terminal
Funktioniert so also nicht.
/* äh, nee.. eigentich hat der Rückgabewert von execvp garnix damit zu tun */
[ Dieser Beitrag wurde am 19.06.2003 um 20:34 Uhr von DrGreenthumb editiert. ]
-
Hallo,
Was schlägst Du vor?
Gruss
-
Hmm, mit popen() gehts auch nicht. Vielleicht liegt es ja im Sinne, des Erfinders, daß das Einloggen nicht automatisiert werden darf. Naja, wer weiß..
-
Ich glaub du solltest mal versuchen die Prozesse zu synchronisieren!
-
Also ob nun popen oder per Hand über write & co. ist egal. Das Problem steht doch da. 'su' lässt sich nur direkt von einem Terminal betreiben.
Ich weiß nicht wie man sowas macht. Jedenfalls nicht über 'su'.
Schätze, man müsste das Programm (bzw. einen Teil davon) direkt mit Root-Rechten ausstatten.
-
Original erstellt von DrGreenthumb:
Ich weiß nicht wie man sowas macht. Jedenfalls nicht über 'su'.ssh auf localhost.
Gut, gut, ich geh' ja schon wieder.