Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260

    CGI: passaggio del valore in un script

    ciao a tutti... ho un problema che non riesco a risolvere.
    Praticamente ho nel mio .cgi ,richiamato da browser, la necessita' di far partire uno script in bash.Questo a sua volta richiama un programma in C che si aspetta un parametro.L''esempio è il seguente:

    SCRIPT RISCHIAMATO DENTRO IL CGI
    --------------------------
    seriale=/dev/ttyS2

    /mnt/flash/mio_programma $seriale
    ---------------------------

    il fatto è che non funziona...
    cosa sbaglio?
    Se invece metto un programma in C che non si aspetta nessun parametro,tutto funziona ...come mai?

    grazie 1000

  2. #2
    Ciao,

    per prima cosa assicurati che lo script bash abbia lo shebang:

    #!/bin/bash

    all'inizio

    A parte ciò perchè non richiami il programma in C direttamente dal CGI?

    ad esempio:

    se non ti aspetti output:
    system("/path/programma parametro");

    se ti aspetti un output:
    $output = `/path/programma paametro`;
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    ho provato in entrambi i 2 modi ..ma nulla da fare.... sto usando un linux embedded dentro una scheda...
    un gci tipo è il seguente:

    codice:
    #!/bin/sh
    
    # let the browser know that this is html code
    echo "Content-type: text/html"
    echo ""
    
    # our html code
    echo "<html>"
    echo "<head><title>reboot</title></head>"
    echo "<body><h1>reboot</h1></body>"
    echo "</html>"
    
    /sbin/reboot
    con
    system("/path/programma parametro");

    il cgi proprio si blocca...

  4. #4
    Ma il CGI in che linguaggio è scritto?
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    guarda io per basarmi sul cgi ho usato gli esempi che sono qui , che si riferiscono proprio alla scheda che sto utilizzando

  6. #6
    Allora ricapitoliamo... tu non hai un CGI che richiama uno script bash che richiama un programma in C.
    Tu hai un CGI scritto in linguaggio della shell (bash) che aziona un programma in C.

    Questo spiega perchè non funziona "system" che è una funzione Perl e non bash.

    A parte ciò, il CGI che tratta la tty a(al link che hai postato) è scritto in C direttamente, quindi deve essre azionato da browser direttamente e non tramite un altro script.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    quindi dici che il discorsosi basa sul fatto che il mio programma in C chiama la tty?
    Infatti ho ricompilato il programma in C in modo tale che non abbia bisogno della seriale come parametro.... e il problema persiste!
    Quindi tu mi consigli che la pagina web richiami direttamente il programma in C....
    Sapresti dirmi come si fa?
    grazie 1000

    PS:
    Io ho tutti script dentro la mia scheda che richiamano programmi in C... Sulla mia pagina web ho creato un link ai vari cgi, e ogni cgi richiama uno script che a sua volta richiama il programma C.
    Tutti funzionano tranne quelli appunto che trattano le seriali tty...

  8. #8
    il problema della seriale potrebbe essere dovuto ad aspetti hardware o di interfacciamento (moduli kernel, driver, ecc), per il resto qualunque eseguibile scritto in qualunque linguaggio che è in grado di restituire una risposta http (la striga di inizio "Content-type:text/html\n\n") può fungere da CGI. Per cui se il programma in C può fare ciò azionalo direttamente, basta inserirlo nel path adeguato e dargi i permessi 755. Diverso è il discorso se il programma non è stato fatto per fungere da CGI, allora dovrà essere richiamato da qualcosa che lo sia.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    260
    allora il mio programma C lo faccio partire da dentro il cgi direttamente...tutti i programmi C che ho scritto partono tranquillamente se "azionati" dentro il cgi (per esempio basta appunto come dici te inserire /path/programma_in_C )...
    Pensavo che fosse un problema dovuto al parametro ma cosi' non è...Se scrivo un programma C che piglia un parametro (del tipo che lo prende e poi lo stampa a video) questo funziona tranquillamente se richiamato da cgi!!!!
    Quindi il problema sorge se il secondo parametro è una seriale (nel mio caso "/dev/ttyS2")...
    Lo stesso programma chiamato da console di linux non dà nessun problema....
    Il cgi che lo chiama non da errori...quindi mi è difficile capire dove sta il problema...puo' essere un discorso di diritti che non ho sulla seriale? la "/dev/ttyS2" è solo "read-only"


    grazie e scusa l'insistenza...

  10. #10
    esatto... in genere molti device sono accessibili solo da root. Puoi fare questa prova, ma mi raccomando poi rimetti tutto a posto:

    attribuisci la proprietà del tuo porgramma in C a root:

    # chown root:root tuo_programma

    dagli i permessi di esecuzione e il bit setuid (serve a fare in modo che il programma giri con i diritti di root anche se non è azionato da lui):

    # chmod 755 tuo_programma
    # chmod o+s tuo_programma

    poi riprova tramite il CGI.

    Se funziona elimina tuo_programma, poichè è molto pericoloso, oppure togli i permessi e ridalli solo quando ti serve.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.