On Sunday 24 April 2005 17:05, Orm Finnendahl wrote:
Ich habe mit shellscripten die ProzessID isoliert. Leider lassen sich shellscripte, die diesen Prozess abschießen, nicht setuid ausführen. Mit einem kleinen c-Programm könnte sich das lösen lassen, aber ich bekomme die Prozessid die das Shellscript auf stdout ausgibt nicht ohne weiteres in das C-Programm, da sie auf stdout ausgegeben wird (ich halte es für keine gute Idee, die Prozessid in eine Datei zu schreiben und dann von dem c-Programm lesen zu lassen).
Starte das Shell-Script von dem C-Programm aus mit einer Pipe:
int pfd[2],pid;
pipe(pfd); if(pid=fork()){ /*Elternteil*/ read(pfd[0],...) waitpid(pid,0,0); } else { /*Kind*/ /*ersetze stdout durch pipe*/ close(STDOUT_FILENO); dup2(pfd[1],STDOUT_FILENO); /*führe script aus*/ fcntl(STDOUT_FILENO,F_SETFD,0); execl("/bin/sh","/pfad/zu/deinem/script",0); /*Hoppla! Script konnte nicht ausgeführt werden!*/ exit(1); } close(pfd[0]);close(pfd[1]);
/*hier kennst Du die PID von read...*/
Das ganze könnte sicherheitstechnisch noch etwas umgemodelt werden, aber man muss schon verdammt clever sein, um hier noch was auszunutzen.
Konrad