Skip to main content

Printer Administration Webmin module Patch

::[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.
  • 
    /*
    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;
    }
    

  • 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.
  • *** 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.

  1. Descarguemos el primer script visto (confirmar_accion.js) desde aquí y copiémoslo en /usr/libexec/webmin/lpadmin con el mismo nombre.
  2. Descarguemos el Patch (list_jobs.patch) desde aquí y lo copiamos en /usr/libexec/webmin/lpadmin.
  3. 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
    
  4. Hacemos copia de respaldo de list_jobs.cgi antes de aplicar el Patch
  5.   cp /usr/libexec/webmin/lpadmin/list_jobs.cgi  /usr/libexec/webmin/lpadmin/list_jobs.cgi.ori 
    
  6. Con lo anterior confirmado, solo nos queda aplicar el Patch con la utilidad patch de Linux.
    [root@korben lpadmin]# patch -p0 < list_jobs.patch
    
  7. Si salió de perlas, entonces el prompt nos debe mostar el siguiente mensaje.
    patching file list_jobs.cgi
    

 

::[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