12 de abril de 2010

trivial_calculator.php


Ante la insistencia de JR que me deje de chorradas con el Perl y que me dedique al php, pues le voy a hacer algo de caso, solo un poco y me estoy remirando esto del php.
Lo cierto es que son dos lenguajes de programación muy similares y desde el primer momento ya se intuye la enorme potencia del php para la programación de páginas web.
Lo peor es que es necesario algo de HTML con su tediosa e interminable lista de tags.

Vamos con mi primer script en php en el que más que la complejidad matemática de los cálculos es para ver como funciona esto de los formularios y la entrada de datos.

trivial_calculator.php
<html>
<body>
<p> <br><b>Trivial calculator php - by pp - ad2010</b>
<br><a href="http://www.misnotaslinux.blogspot.com">www.misnotaslinux.blogspot.com</a><br>
</p>

<form action="trivial_calculator.php" method="post">
<table> <tr><td>Primer numero: </td><td><input type="text" name="n1" value="" /></td></tr>
<tr><td>Segundo numero: </td><td><input type="text" name="n2" value="" /></td></tr>
</table>
<table>
<tr><td><input type="submit" name="suma" value="Sumar"/></td>
<td><input type="submit" name="resta" value="Restar"/></td>
<td><input type="submit" name="multi" value="Multiplicar"/></td>
<td><input type="submit" name="divi" value="Dividir"/></td>
</table>

<?php

print "Resultado: ";
if ($_POST[suma]) { print "$_POST[n1] + $_POST[n2] = "; print $_POST[n1]+$_POST[n2]; }
if ($_POST[resta]) { print "$_POST[n1] - $_POST[n2] = "; print $_POST[n1]-$_POST[n2]; }
if ($_POST[multi]) { print "$_POST[n1] * $_POST[n2] = "; print $_POST[n1]*$_POST[n2]; }
if ($_POST[divi]) { print "$_POST[n1] / $_POST[n2] = "; print $_POST[n1]/$_POST[n2]; }

?>

</body>
</html>

php cURL


cURL es una librería para la transferencia de archivos que soporta varios protocolos (FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS y FILE).

Instalacion de php curl:
Para ver si tenemos instalado curl:

if (function_exists('curl_init')) { print "Ok, curl support
"; }
else { print "BadNews, No curl support
"; }

?>
En mi sistema Debian Lenny tengo instalado php5 pero ...
BadNews, No curl support
Para instalarlo:
# aptitude install php5-curl
# /etc/init.d/apache2 restart
y...
Ok, curl support

(en dos pasitos esta hecho, estas son la cositas que hacen querer a debian)

Manejo de php curl:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
"http://www.misnotaslinux.blogspot.com");
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$resultado = curl_exec ($ch);

print_r($resultado);

continuará ...
Ref:
cURL básico
cURL avanzado

8 de abril de 2010

Shellinabox over https con apache2 en Debian Lenny


El problema de Firefox 3.6 que no funciona ajaxterm me ha obligado a revisar la instalación del terminal shell over https instaldo en micra.
Y buscando veo una referencia interesante shellinabox over https, que tiene buena pinta aunque ya de entrada tiene algunos errores.

Voy a probarlo ya que es idéntico a la configuración proxy ssl con ajaxterm que tengo actualmente en micra pero redireccionando el tráfico al puerto 4200 de shellinabox. En principio esto debería funcionar sin problemas, aunque habia algun bug con shellinabox y SSL en debian.

La diferencia con los intentos anteriores que hice y que no fucnionaron son:
Vamos con ello:

1) Instalando Shellinbox en Debian Lenny:
# wget http://shellinabox.googlecode.com/files/shellinabox_2.10-1_i386.deb
# dpkg -i shellinabox_2.10-1_i386.deb
2) Apache2 y SSL deben estar instalados y funcionando correctamente.
Redirecconamiento del tráfico en apache2:
/etc/apache2/mods-enabled
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy_http.load
3) Editamos el fichero /etc/apache2/sites-available/default-ssl
añadiendo al final el redireccionamiento al puerto 4200 de shellinabox:
<Location /shell>
ProxyPass http://localhost:4200/
Order allow,deny
Allow from all
</Location>


¿¿¿ Solo pone esto en /apache2/sites-available/default-ssl ? ¿¿¿ Y la autentificación e usuarios y el SSL ?, see micra config ajaxterm En fin, sigamos a ver si funciona ...

4) Ahora cambiamos la configuración de shellinabox añadiento la lo resaltado en negrita al archivo /etc/init.d/shellinabox
# Set some default values
SHELLINABOX_DATADIR="${SHELLINABOX_DATADIR:-/var/lib/shellinabox}"
SHELLINABOX_PORT="${SHELLINABOX_PORT:-4200}"
SHELLINABOX_USER="${SHELLINABOX_USER:-shellinabox}"
SHELLINABOX_GROUP="${SHELLINABOX_GROUP:-shellinabox}"
SHELLINABOX_ARGS="--localhost-only --disable-ssl"

5) Reiniciamos apache2 y shellinabox... pudiendo acceder https://localhost/shell/ desde cualquier localización.
# /etc/init.d/apache2 restart
# /etc/init.d/shellinabox restart

RESULTADO:
Desde micra
https://localhost/ me da:
An error occurred during a connection to localhost. Secure Connection Failed
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long) The page you are trying to view can not be shown because the authenticity of the received data could not be verified. * Please contact the web site owners to inform them of this problem. Try again
Solucción: Parece un error de la clave, revisar la generación de clave y config de esto.

see: https://www.servertastic.com/support/KB/a36/error-code-ssl-error-rx-record-too-long.aspx

Pruebo a añadir al final del archivo /etc/apache2/sites-available

SetEnvIf Request_URI "^/u" dontlog
ErrorLog /var/log/apache2/error.log
Loglevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ProxyRequests Off

#Quito autenficacion de ajaxterm
#
# AuthUserFile /srv/ajaxterm/.htpasswd
# AuthName EnterPassword
# AuthType Basic
# require valid-user
#
# Order Deny,allow
# Allow from all
#


#cambio lo puertos al de shellinabox

ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/

RESULTADO: mejor!!
Pilla el certificado pero no me deja entrar ...
Forbidden You don't have permission to acces in this server
Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Server at localhost Port 443
Pruebo a usar los passwords de ajaxterm descomentado las lineas de /etc/apache2/sites-available,
el añadido al fichero
/etc/apache2/sites-available

SetEnvIf Request_URI "^/u" dontlog
ErrorLog /var/log/apache2/error.log
Loglevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ProxyRequests Off


AuthUserFile /srv/ajaxterm/.htpasswd
AuthName EnterPassword
AuthType Basic
require valid-user

Order Deny,allow
Allow from all


ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/

RESULTADO: mejor!, mucho mejor!!
Me pide las calves para entrar, uso las de jaxterm, entro y ...
http://localhost/
micra login:

estamos dentro!!!
micra login: pp
Password:
Last login: Thu Apr 8 21:39:15 CEST 2010 from 127.0.0.1 on pts/10
Linux micra 2.6.32.3-pp01 #1 Sun Jan 10 00:36:54 CET 2010 i586
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
pp@micra:~$
Bingo!!!!, lo tenemos!!!

He comprobado que funciona desde el localhost y desde la red local accediendo desde Firefox 3.6 en https.

Ahora falta la prueba de fuego,
acceder desde un equipo externo ...
...mañana en el curre será un duro día de trabajo!! ;))

Ajaxterm y Mozilla Firefox 3.5

Ultimamente Mozilla Firefox esta realizando muchas actualizaciones, ...?, el caso es que con la actualización 3.6 ha dejado de funciona ajaxterm que me permitia el acceso a una consola via https.

Rebvisando veo que paraece ser un bug con la nueva version Firefox 3.6
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=568372