Issues en cups-pdf relacionados con nscd

2018/08/03

Descripción del problema

En Ubuntu 14.04 se encontraron problemas al imprimir a la Impresora PDF (PDF Writer, provista por el paquete cups-pdf).

El problema es que de un momento a otro dejan de generarse los PDF’s en la carpeta $HOME/PDF sin ningún mensaje de error.

Se puede imprimir en otras impresoras (en papel) sin problemas.

Esto ocurre en un sistema con autenticación por LDAP y utilizando nscd

Para que los PDF’s se almacenen en $HOME/PDF en lugar de su ubicación por defecto, /var/spool/cups-pdf/${USER}, se configura cups-pdf agregando en el archivo /etc/cups/cups-pdf.conf la linea Out ${HOME}/PDF

Diagnóstico

Se envía una página de prueba utilizando la interfaz web, http://127.0.0.1:631.

Se revisan los logs de CUPS disponibles en /var/log/cups y documentados en la página del manual de cupsd:

La pista del diagnóstico viene del archivo /var/log/cups/cups-pdf_log, generado por cups-pdf:

Wed Aug  1 11:29:30 2018  [STATUS] ***Experimental Option: DecodeHexStrings
Wed Aug  1 11:29:30 2018  [STATUS] PDF creation successfully finished (nobody)

Aquí el texto nobody hace referecia al nombre de usuario dado a CUPS-PDF que debería ser el mismo que envió la página, joe.

Leyendo las opciones en /etc/cups/cups-pdf.conf, nobody corresponde al valor por defecto de la opción AnonUser:

### Key: AnonUser
##  uid for anonymous PDF creation (this might be a security issue)
##  this setting has no influence on AnonDirName (see there)
##  set this to an empty value to disable anonymous
### Default: nobody

Esto es, por algún motivo no se pasó correctamente el nombre de usuario al backend cups-pdf.

Para confirmar que el archivo PDF se está generando se puede ver el directorio /var/spool/cups-pdf/ANONYMOUS, que es donde se envian (por defecto) los PDF’s creados anonimamente.

Para confirmar que el problema está dado por una falla de nscd, se corrobora que el demonio está bajo ejecutando service nscd status y se debe obtener como salida:

 * Status of Name Service Cache Daemon service:
 * not running.

Solución

Levantar el demonio nscd utilizando service nscd start.

Se debe comprobar que el demonio quede ejecutando utilizando nuevamente service nscd status.

Si el demonio no está levantado esto suele deberse a que los archivos utilizados por nscd (el caché) están corruptos.

Para solucionar lo anterior borrar los archivos del caché de nscd, levantar el demonio y comprobar que ahora si está funcionando:

$ sudo rm -fr /var/cache/nscd/*
$ sudo service nscd start
$ sudo service nscd status