• Publicidad

Restricciones de system

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor timon » 2008-08-24 12:10 @549

Bueno el PHP viene por parte de que el formulario está hecho con Joomla (FACILEFORMS), y el .sh es parte del TPV.

El caso es que he sustituido el comando por un env, para que me devuelva las variables de entorno del usuario que ejecuta el comando y me devuelve estos:
Código: Seleccionar todo
HTTP_HOST=123.123.123.123
HTTP_USER_AGENT=Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE=es
HTTP_ACCEPT_ENCODING=gzip,deflate
HTTP_ACCEPT_CHARSET=ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTP_KEEP_ALIVE=300
HTTP_CONNECTION=keep-alive
HTTP_COOKIE=locale=en-US;
PHPSESSID=32123123123132123123123; psaContext=domains; BarExpanded=True HTTP_CACHE_CONTROL=max-age=0
PATH=/sbin:/usr/sbin:/bin:/usr/bin
SERVER_SIGNATURE=
Apache/2.2.3 (CentOS) Server at 123.123.123.123 Port 80
SERVER_SOFTWARE=Apache/2.2.3 (CentOS) SERVER_NAME=123.123.123.123
SERVER_ADDR=123.123.123.123SERVER_PORT=80 REMOTE_ADDR=123.123.123.123
DOCUMENT_ROOT=/var/www/vhosts/default/htdocs
SERVER_ADMIN=root@localhost SCRIPT_FILENAME=/var/www/vhosts/default/cgi-bin/caixa.cgi REMOTE_PORT=63788 GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/cgi-bin/caixa.cgi
SCRIPT_NAME=/cgi-bin/caixa.cgi


Como podemos ver, el CLASSPATH no existe y el PATH es diferente al que tengo definido, eso es porque el PATH lo tengo definido cuando ejecuto una consola con el usuario ROOT, mientras que esté con Apache no tendré los valores correctos del PATH; el caso es que no existe el usuario Apache en el sistema para poder añadirle las variables de entorno en su .bash_profile.

¿Sabéis cómo se hace? Ya sé que no es cosa de Perl... esto es más de Linux... pero por si alguien sabe de estas cosas...
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Publicidad

Notapor explorer » 2008-08-24 12:55 @580

Hay varias formas de hacerlo...

La más directa y cómoda es colocar la variable de entorno justo delante del comando a ejecutar.

Si tenemos este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
#!/bin/bash
echo $PATH
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Podemos modificar su comportamiento asignando nuevos valores a la variable, justo delante del comando
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@portatil:~/Documents/Desarrollo> ./kk.sh
/opt/kde3/bin:/home/explorer/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/gnome/bin:/usr/sbin:/usr/sbin
explorer@portatil:~/Documents/Desarrollo> PATH="Lo que sea" ./kk.sh
Lo que sea
explorer@portatil:~/Documents/Desarrollo> PATH=$PATH.:"Lo que sea" ./kk.sh
/opt/kde3/bin:/home/explorer/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/gnome/bin:/usr/sbin:/usr/sbin.:Lo que sea
explorer@portatil:~/Documents/Desarrollo> ./kk.sh
/opt/kde3/bin:/home/explorer/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/gnome/bin:/usr/sbin:/usr/sbin
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Puedes meter más variables
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
CLASSPATH=/usr/lib/java/ PATH=$PATH:/usr/local/tpv kk.sh
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor timon » 2008-08-24 14:38 @652

¡¡Eres un Crack!!!.
En efecto, he colocado el CLASSPATH y el PATH delante de la sentencia en el Perl ¡¡y funciona!!, al final me ha quedado así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
my $sentencia = `CLASSPATH=/usr/local/tpv/tpv.jar:/usr/local/tpv:/usr/local/tpv/:/usr/local/tpv/jce1_2_2.jar:/usr/local/tpv/local_policy.jar:/usr/local/tpv/sunjce_provider.jar:/usr/local/tpv/US_export_policy.jar PATH="/usr/java/jre1.6.0_07/bin:/usr/local/tpv:/sbin:/usr/sbin:/bin:/usr/bin" /usr/local/tpv/CrURLtpv.sh`;
print "Content-type: text/html \n\n";
print("<html>\n");
print("<head>\n");
print("<title>\"TPV\"</title>\n");
print("</head>\n");
print("<body>\n");
print "<h1>$sentencia</h1> \n";

print("</body>\n");
print("</html>\n");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡¡Ya devuelve bien el resultado del ejecutable!! De verdad, llevaba dos semanas con este tema...

Una cosa más. Dice un dicho popular, que cada que vez que se pregunta en un foro y no se ha intentado hacer antes por uno mismo, Dios mata a un gatito.

¡¡Salvemos a los gatitos!!
¡¡Un saludo y gracias!!
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Notapor explorer » 2008-08-24 15:00 @667

No lo he probado, pero quedaría así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI qw/:standard/;

my $classpath = join ':', qw(
    /usr/local/tpv/tpv.jar
    /usr/local/tpv
    /usr/local/tpv/
    /usr/local/tpv/jce1_2_2.jar
    /usr/local/tpv/local_policy.jar
    /usr/local/tpv/sunjce_provider.jar
    /usr/local/tpv/US_export_policy.jar
);

my $path = join ':', qw(
    /usr/java/jre1.6.0_07/bin
    /usr/local/tpv
    /sbin
    /usr/sbin
    /bin
    /usr/bin
);

my $sentencia = qx(CLASSPATH=$classpath PATH=$path /usr/local/tpv/CrURLtpv.sh);

print header();
print start_html('TPV');
print h1($sentencia);
print end_html();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Ahora bien, es recomendable no modificar el PATH y sí añadir los directorios que nos interesan. Quedaría...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $path = join ':', qw(
    /usr/java/jre1.6.0_07/bin
    /usr/local/tpv
);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y luego
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $sentencia = qx(CLASSPATH=$classpath PATH=\$PATH:$path CrURLtpv.sh);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Incluso veo que sobran directorios, en el CLASSPATH.

Hay otra forma de modificar las variables de entorno: editar e insertarlas dentro CrURLtpv.sh :) con lo que el programa queda
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI qw/:standard/;
print header();
print start_html('TPV');
print h1( qx(/usr/local/tpv/CrURLtpv.sh) );
print end_html();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
aunque, eso sí, más lento.
Última edición por explorer el 2008-08-24 19:08 @839, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor timon » 2008-08-24 18:36 @816

Lo primero es lo primero... donación 7MC135273D4236605 hecha.

Este sitio, son de los que hay que alimentar, rápidos y certeras las respuestas. Animo a todo el que lea este post a que anime al equipo de Perl en Español a seguir en el mismo camino haciendo alguna donación.

Bueno, explorer, todo genial, aunque esta sentencia no le ha gustado nada a mi Server[syntax="perl"]PATH=\$PATH:$path[/synt]

Aunque es muchísimo mejor, no me ha dejado colocarla y he tenido que poner todo el PATH en la variable $path.

Otra cosa que no le gusta al server es [syntax="perl"]print header();
print start_html('TPV'),
print h1($sentencia),
print end_html();[/synt]

Sé que esto es básico, pero a mi server no le ha hecho ninguna gracia, no sé si será por la coma final en vez de punto y coma en la segunda y tercera sentencia, pero no sale, ahora me toca ver cómo paso los datos desde PHP al CGI. En principio lo quería pasar por un POST, pero aun no sé cómo recoge Perl los datos; ahora me pondré a investigar.

Un saludo.
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Notapor explorer » 2008-08-24 19:16 @844

Gracias por la donación.

Tienes razón en cuanto a lo de mas comas. Ya lo he corregido en el mensaje anterior. Cosa del copia-pega.

Y en cuanto al PATH, sí que me funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le 'print qx(PATH=\$PATH:KKKKK ./kk.pl)'
/opt/kde3/bin:/home/explorer/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/gnome/bin:/usr/sbin:/usr/sbin:KKKKK
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
siendo kk.pl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
print $ENV{PATH}, "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados