cgi-prog macht garnix
-
Hi ich habe folgendes Programm geschrieben
int main(){ int pid = fork(); if(pid==0){ char* parameter[]={"-F", "eth0", "-c", "/home/eiskalt/sniffitconf"}; execve("/usr/sbin/sniffit", parameter, NULL); } else{ cout << "<HTML>" << endl; cout << "<BODY>" << endl; cout << "sniffer gestartet" << endl; cout << "</BODY>" << endl; cout << "</HTML>" << endl; } return 0; }
wenn ich das programm ausführe auf der Komandozeile gehts einwandfrei. sniffit wird gestartet und der text wird ausgegeben. Aber wenn ich dieses Programm als cgi-script laufen lasse passiert garnix. Ich hab das programm suid root gesetzt und andere Programme die ich auf dem Server über das Webfrontend ausführe funktionieren auch.
int main(){ system("/sbin/init 6"); return 0; }
wenn ich das compiliere und über mein Webfrontend ausführe dann startet der Server neu also wirds wohl kaum an der Apache konfiguration liegen.
MFG eiskalt
-
Der erste Parameter von argv, muss auch nochmal der Pfad sein.
Welche Rechte das Programm hat, sollte egal sein. Eher wichtig ist, ob der Apache das Recht hat, dass Programm auszuführen. Generell ist es eine gute Idee, sich mal den Rückgabewert von exec* anzuschauen.
-
es geht auch nicht wenn ich die dateibrechtigungen auf rwsrwxrwx setzte. Ich hab ja noch das programm zum neustarten des servers mit den selben Dateirechten wie das snifferprogramm und das wird ausgeführt und funktioniert der Server startet neu.
MFG eiskalt
-
also ich hab als ersten parameter jetzt den Pfad angegeben aber das hat keine Wirkung gezeigt. Auserdem wie soll ich mir den den Rückgabewert von exec* angucken wenn ich das programm aus einer Webseite herraus starte?? Wenn ich das programm auf der Konsole starte gehts ja
MFG eiskalt
-
Öhm - sollte als erstes nicht "Content-type: text/html\r\n\r\n" ausgegeben werden?!
-
eiskalt schrieb:
Auserdem wie soll ich mir den den Rückgabewert von exec* angucken wenn ich das programm aus einer Webseite herraus starte??
Naja, irgendwo läuft das Programm ja und gibt Sachen aus...
perror("hallo");
-
Ok also irgendwie lags evtl doch an den rechten.
Allerdings habe ich jetzt mit sudo dem Apache die Rechte gegeben sniffit auszuführen.
Nur hab ich immernoch ein kleines Problem mit dem Code.funktionierender code
system("sudo sniffit -F eth0 -s 192.168.0.3");
nur möchte ich system vermeiden ich habs dann mit folgendem Code versucht nur tut sich da garnix auch net wenn ich das script auf der Konsole aufrufe.
char *parameter[]={"sudo" "sniffit -F eth0 -c /home/eiskalt/sniffitconf", NULL}; execve("sudo" parameter, NULL);
Kann mir mal einer sagen was daran bitte falsch ist?? Kompilieren läst sichs.
MFG eiskalt
-
lies dir nochmal DrGreenthumbs Beitrag durch
die Stelle meine ich
DrGreenthumb schrieb:
Der erste Parameter von argv, muss auch nochmal der Pfad sein.
-
@ Kingruedi
char *parameter[]={"sudo" "sniffit -F eth0 -c /home/eiskalt/sniffitconf",NULL}; execve("/usr/bin/sudo" parameter, NULL);
char *parameter[]={"/usr/sbin/sudo" "sniffit -F eth0 -c home/eiskalt/sniffitconf", NULL}; execve("/usr/sbin/sudo" parameter, NULL);
bei mir haben beide Codes die selbe wirkung und ich bilde mir ein das bei dem oberen Code argv[0] nicht der Pfad ist. Allerdings funktioniert garnix wenn ich bei execve das "/usr/sbin/sudo" weglasse.
[edit2]
ok aber das löst mein problem nicht nachdem ich bei execve "/usr/sbin/sudo" higeschrieben habe kommt wenn ich das script aufrufe die kurzhilfe zu sudo
[/edit2]MFG eiskalt
-
Nicht mehrere Argumente in ein Array-Element quetschen..
char* parameter = { "/usr/sbin/sudo", "sniffit", "-F", "eth0", ... };
Und wenn du bei dir 'garnix passiert', dann heißt das wohl nur, dass du es immer noch nicht geschafft hast, mal den Rückgabewert von exec zu prüfen.
-
du verstehst es nicht
die Argument Parameter, die du übergibst müssen als 1. den Aufruf String enthalten
man 2 execve
-
Ok ich habs jetzt begriffen sorry war wohl gestern etwas aufm Schlauch gestanden
THX eiskalt