::[INTRO Y PROBLEMA]::
Esta vez el problema era Webmin. ¿Qué es Webmin (http://www.webmin.com)?. Webmin es una utilidad Web para la administración de sistemas Linux. Está compuesta por una serie de categorias que agrupan los diferentes módulos de administración, por ejemplo, en la categoría de Servers hay módulos para la administración de Sendmail (MTA http://www.sendmail.org), Bind (DNS http://www.isc.org/index.pl?/sw/bind/), Squid (Proxy Cache http://www.squid-cache.org), entre otros diferentes servicios instalados en la máquina. Esta vez mi problema se encuentra en la categoria de Hardware. Allí se encuentra el módulo de Printer Administration, este módulo permite la administración de las colas de las impresoras configuradas en mi sistema. El problema está en que cuando se listan los trabajos que tiene cierta impresora ó cola de impresión en particular y se hace clic en en el número de trabajo (Job ID), este módulo elimina de la cola de impresión el trabajo seleccionado sin preguntar absolutamente nada. ¿Qué puede suceder si al jefe del operador de impresión le da por mandar a imprimir la colección de revistas Hustler (http://www.hustler.com) que descargó de Internet y el curioso operador (accidentalmente ó a propósito) hace clic precisamente en el número de trabajo que hace referencia a la amada colección de revistas Hustler?. La verdad, no lo se, pero prefiero evitarme problemas.
Es así que ahora publico la solución para este problema. Es simple, consiste en modificar un script en Perl del módulo de Printer Administration para agregar unas cuantas líneas en JavaScript que validen la acción antes de eliminar el trabajo de impresión.
Esta solución incluye el archivo .patch, el archivo con la función en JavaScript y el procedimiento para orquestar la solución.
::[CONOCIENDO LOS COMPONENTES]::
-
El siguiente script (confirmar_accion.js) es el que nos va a permitir validar la acción sobre el trabajo de impresión antes de eliminarlo.
-
A continuación, el Patch (list_jobs.patch) que debe aplicarse al script de Perl del módulo Printer Administration list_jobs.cgi para corregir el problema que nos corresponde.
/*
Nombre
confirmar_accion(cURL)
Autor
Juan Felipe Munoz - Fernandez
juanmuno [:at:] juanfelipe [:dot:] net
Fecha
30 Ago 2005
Version
1.0
Lenguaje
JavaScript
Descripcion
Funcion para confirmar la accion de un usuario al hacer
clic sobre un trabajo de impresion en el modulo de
Printer Administration de Webmin.
Toma como parametro un string especificando el URL al
que debe llevarse al usuario en caso de confirmar la accion.
Si el usuario no confirma la accion el trabajo de impresion
permanece en la cola de impresion sin modificaciones.
Notas
Todo el texto anterior sin tildes para evitar problemas de
compatibilidad.
CHANGELOG
- 30-Ago-2005. JFM-F. Creada la primera version de esta funcion
en el archivo /usr/libexec/webmin/lpadmin/confirmar_accion.js
*/
function confirmar_accion(cURL){
if(confirm("Esta accion cancelara el trabajo seleccionado\nEsta seguro de cancelar el trabajo seleccionado?"))
document.location.href = cURL;
}
*** list_jobs.cgi.ori 2005-08-30 14:24:09.490627976 -0500
--- list_jobs.cgi 2005-08-30 16:40:13.581497512 -0500
***************
*** 8,13 ****
--- 8,18 ----
if ($config{'queue_refresh'});
&ui_print_header(undef, $text{'jobs_title'}, "");
+ # By Juan Felipe Munoz - F. http://www.juanfelipe.net
+ print "<script language=\"JavaScript\" type=\"text/JavaScript\"",
+ " src=\"confirmar_accion.js\">\n";
+ print "</script>\n";
+
@jobs = &get_jobs($in{'name'});
if (@jobs) {
print &ui_subheading(&text('jobs_header', "<tt>$in{'name'}</tt>"));
***************
*** 26,34 ****
$ju =~ s/\!.*$//;
print "<tr $cb>\n";
if (&can_edit_jobs($in{'name'}, $ju)) {
! print "<td><a href=\"cancel_job.cgi?name=$in{'name'}&",
! "id=$j->{'id'}\">",&html_escape($j->{'id'}),
! "</a></td>\n";
}
else {
print "<td>",&html_escape($j->{'id'}),"</td>\n";
--- 31,42 ----
$ju =~ s/\!.*$//;
print "<tr $cb>\n";
if (&can_edit_jobs($in{'name'}, $ju)) {
! # By Juan Felipe Munoz - F. http://www.juanfelipe.net
! $cURL = "cancel_job.cgi?name=$in{'name'}&id=$j->{'id'}";
! print "<td><a href=\"#\"",
! " onclick=\"confirmar_accion('$cURL');\">",
! &html_escape($j->{'id'}),
! "</a></td>\n";
}
else {
print "<td>",&html_escape($j->{'id'}),"</td>\n";
::[LA SOLUCION]::
Ahora si, orquestemos los componentes anteriores.
-
Descarguemos el primer script visto (confirmar_accion.js) desde aquí y copiémoslo en /usr/libexec/webmin/lpadmin con el mismo nombre.
-
Descarguemos el Patch (list_jobs.patch) desde aquí y lo copiamos en /usr/libexec/webmin/lpadmin.
-
Ahora nos vamos para el directorio /usr/libexec/webmin/lpadmin y confirmemos que tenemos los dos archivos descargados:
[root@korben lpadmin]# cd /usr/libexec/webmin/lpadmin [root@korben lpadmin]# ls -lh confirmar_accion.js list_jobs.patch -rwxr-xr-x 1 root root 45 Aug 30 15:41 confirmar_accion.js -rw-r--r-- 1 root root 1.4K Aug 30 15:47 list_jobs.patch
- Hacemos copia de respaldo de list_jobs.cgi antes de aplicar el Patch
- Con lo anterior confirmado, solo nos queda aplicar el Patch con la utilidad
patch de
Linux.
[root@korben lpadmin]# patch -p0 < list_jobs.patch
- Si salió de perlas, entonces el prompt nos debe mostar el siguiente
mensaje.
patching file list_jobs.cgi
cp /usr/libexec/webmin/lpadmin/list_jobs.cgi /usr/libexec/webmin/lpadmin/list_jobs.cgi.ori
::[FINAL]::
Eso fue todo, ¿más complicado?. Personalmente me divertí y aprendí haciendo este Patch. Cualquier bug, por favor reportarlo a mi dirección de contacto: juanfelipe [:at:] juanfelipe [:dot:] net.

master_x01@hotmail.com
¿como conectar un jointing por la salida que tiene la impresora?
(planos de la coneccion)
chile