Newsgroup: it.comp.os.linux.sys
Titolo: Apache: non esegue shell command via php!?

salve a tutti
chiedo un piccolo aiutino perche' sto impazzendo con questa cosa:
ho uno script php (che gira su apache 1.3.33, debian linux) che deve 
lanciare una piccola utility per generare dei grafici...
attualmente questa configurazione gira su una debian 3.1 su una macchina 
x86... devo migrare il tutto (applicazione + pagina php) su una debian 
3.1 su Sparc.
ho quindi ricompilato l'applicazione sulla sparc ..e funziona visto che 
lanciata dalla bash funziona.
il problema e' che se lancio dal browser la pagina php che dovrebbe 
lanciare l'applicazione (il codice php e' qui sotto) non funziona..o 
meglio viene restituito un codice 11
se lancio da shell (usando l'utente www-data di apache) la pagina php 
usnado la sintatti:
php4 pagina_script.php
il comando (miaapplicazione) viene eseguito.
non riesco a trovare una soluzione!
la pagina php e' del tipo:
<?php
$comando="miaapplicazione";
 passthru($comando, $ritorno);
 echo $ritorno;
?>
la cosa strana e' che:
se a posto di "miaapplicazione" sostituisco comandi tipo ls, ps, 
traceroute...ottengo l'output corretto
se invece lascio "miaapplicazione" in uscita ottengo il codice 11
cosa e' il codice 11 ?
ho notato che ottengo lo steso errore se ad esempio sostituisco a 
"miaapplicazione" un binario tipo startx..
l'applicazione in questione ha ovviamente permessi 755 
avete qualche idea?
grazie!

 grazie!
Prego, Micky
-- 
Errare è umano, ma per fare veramente casino ci vuole la password di root!
mi...@fcnz.zrfvan.arg

 beh, startx lancia X, che non credo si possa fare via web 8-)
si,si, non preoccuparti..non avevo idee strane in testa tipo voler 
lanciare X da web..
e' che provando a mettere comandi a caso mi sono imbattuto in startx e 
ho visto che in quel caso ottenevo l'errore 11..per questo mi chiedevo 
se ci fosse qualche analogia di comportamento tra i due comandi...
ho provato a scrivere un cgi in bash..stesso risultato:se lancio comandi 
tipo ls, whoami ,etctc..tutto fila liscio..se lancio startx o la mia 
applicazione (GraDS:utility per generare dei grafici..ma gira da linea 
di comando senza usare X) non ottengo nessun risultato...
il problema a questo punto penso sia in apache..
no? 

 no? 
bo, ma non credo.
Ciao, Micky


 vedi se ricompare il problema.
potrei provare a dare uno sguardo con memtest eventualmente?
in ogni caso ottengo l'errore 11 su entrambe le macchine (sia sulla 
sparc, sia sulla macchina x86 dove attualmente il programma in questione 
gira e viene lanciato attraverso la pagina php) 
per questo mi veniva il dubbio che il problema potesse essere in apache
..visto che in tutto questo sistema e' l'unica variabile 
differente..boh!
grazie!

 da linea di comando senza usare X) non ottengo nessun risultato...
La butto lě: il path?
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribů Digitale Blackmambo: 
www.blackmambo.it
)

 La butto lě: il path?
gia' provato..purtroppo non e' quello..anzi temo che il problema sia 
altrove:
nei log di apache quando vado ad eseguire lo script cgi in bash che 
richiama quel comando trovo:
/usr/lib/cgi-bin/prova.cgi: line 19: 12141 Segmentation fault   gradsc 
gradsc e' l'applicativo in questione...
possibile che sulla sparc per qualche strano motivo,se lancio gradsc 
attraverso apache mi va in segfault...mentre su x86 no?
se lo lancio da shell funziona bene sia su sparc che su x86..boh!
grazie!

 grazie!
Prego, Micky


 che in effetti succede.
come si potrebbe risolvere questo problema?
lanciando da dentro al CGI una riga tipo 
"strace gradsc" ottengo nei log (in /var/log/apache/error.log)
                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or 
directory)
open("/lib/libdl.so.2", O_RDONLY)       = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\2\0\0\0\1\0\0\36"..., 
512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=10444, ...}) = 0
mmap(NULL, 74736, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x70348000
mprotect(0x7034c000, 58352, PROT_NONE)  = 0
mmap(0x70358000, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED, 3
, 0) = 0x70358000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) 
= 0x700
1a000
munmap(0x7001c000, 47121)               = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
si puo' capire qualcosa da questo output?
grazie!

 
Sulla macchina dove ti da' errore che apache c'e', 1.3.x o 2.0.x? Mi 
verrabbe da pensare che sulla macchina Sun ci sia il secondo (cioč hanno 
usato il package apache2 invece che apache "normale"). Se cosě e', si 
spiegherebbe tutto con il fatto che l'applicazione che stai lanciando 
non sia thread safe.
Ergo se la lanci da cgi php o da riga di comando funziona 
tranquillamente, ma da dentro Apache 2.0 dovrebbe girare in ambiente 
multithreaded -> crash.
Se questo č il caso o fai un downgrade di apache o usi il modulo prefork 
(consigliabile la prima soluzione).
-- 
Fabrizio "Hermooz" Ermini

 (consigliabile la prima soluzione).
ciao!
sto usando la versione 1.3.33 di apache...
forse il package e' stato compilato con qualche opzione "strana"? 
magari provo a ricompilarmi apache da zero...
potrebbe andare come idea?

 potrebbe andare come idea?
Se hai un'idea su quali opzioni di compilazione cambiare e perchč, sě...
-- 
Fabrizio "Hermooz" Ermini