MS Exchange, Emacs, IMAP y NTLM: una combinación explosiva

Aviso: !Este mensaje contiene tecno-jerga a raudales!

Si has seguido este blog desde hace tiempo, sabrás que me gusta usar Gnus (un complemento del editor Emacs) para leer el correo electrónico. Para los estándares actuales la mayoría de la gente diría que es antediluviano y poco vistoso (es en modo caracter) y amigable (básicamente se hace todo a base de combinaciones de teclas, aunque la versión gráfica de Emacs permite usar el ratón). Tiene además la gran ventaja (estoy seguro de que una inmensa mayoría de gente dirá que es una desventaja) de que los mensajes de correo en html se ven como puro texto, sin colorines, negritas, imagenes ni otras distracciones visuales (que en el 99% de los casos no aportan absolutamente nada).

Sin embargo, tiene para mí múltiples ventajas: un buen editor (y no lo que traen la mayoría de los gestores de correo, que con todos mis respectos, son una castaña), gestión ágil y eficiente de volúmenes de correo importantes (especialmente la clasificación) y lo que más me interesaba en estos momentos y que no conseguía con mi lector de correo actual en el trabajo (Thunderbird): que las “carpetas” de correo que no contienen mensajes no leidos no se muestren en absoluto.

Esto último es algo que Gnus hace por defecto, y cuando uno tiene muchas carpetas es especialmente agradecido. Primero porque no ocupa espacio de pantalla (algo interesante en si mismo), y segundo porque para saber si tienes correo nuevo en alguna de esas carpetas tienes que recorrer toda la lista (y en mi caso usar el ratón para desplazar la barra de deslizamiento, lo cual es un incordio adicional).

La única razón que impedía dar el salto es (mejor dicho era) que el servidor de correo del trabajo (MS Exchange) está configurado de forma que en el acceso via IMAP hay que autenticarse por medio de NTLM (en concreto por medio de NTLMSSP). Y en el caso de la versión de Gnus que viene en las distribuciones Linux que uso (Debian Lenny y Ubuntu 8.10) no hay soporte para este tipo de autenticación.

Por suerte la siguiente versión de Gnus traerá de serie soporte para IMAP con NTLM (a través del autenticador sasl), así que me he bajado la versión, la he compilado e instalado. He puesto la configuración que supuestamente hace falta (la documentación no es que se escasa, es que a día de hoy es inexistente) y he probado. Por supuesto no ha funcionado :-).

Pero como tengo la cabeza un poco dura para estas cosas, he gastado un rato leyendo en San Google todo lo que he encontrado (que me ha servido para poco al final) y por último he acabado entrando al código. Como mi lisp no es tan bueno como me gustaría, me he ayudado del depurador interno de Emacs para ejecutar paso a paso el código y ver dónde fallaba el asunto. Y al final ha sido donde menos me esperaba, la verdad: al intentar codificar en base64 la cadena de la solicitud de autenticación via NTLM.

Parece ser que el código construye la cadena como un string (en lugar de una secuencia de bytes) y ésta se le pasa a la función base64-encode-string. Ésta última es un poco señorita y si le pasamos caracteres que no son puramente ASCII o de un par de subconjuntos determinados de caracteres de 8 bits, nos da un bonito error y se termina el asunto. Y pura casualidad, la solicitud de autenticación tiene caracteres de fuera de esos subconjuntos (concretamente caracteres multibyte, según reza el mensaje de error). Así que he leido en San Google que usando encode-coding-string podía convertir una cadena de caracters multibyte en una que le gustara a base64-encode-string y allí me he lanzado. En un par de intentos para acertar con la sintaxis ya estaba la cosa funcionando 🙂

Por si algún loco quiere usarlo, ahí van los datos más importantes:

  • Bajarse la versión ‘ngnus’ de Gnus (o posterior) de http://ww.gnus.org/dist/. Hay que parchear el fichero lisp/ntlm.el antes de compilarlo, con el parche que puedes descargar aquí (ntlm.el.diff.zip, lo he tenido que subir zipeado porque WordPress no me dejaba subir ficheros con extensión .diff 🙁 ) Luego simplemente sigue las instrucciones de instalación de Gnus que hay en el fichero README.
  • La configuración para el fichero ~/.gnus (suponiendo que lo configuramos como una fuente de mensajes secundaria, no la principal):
    (setq gnus-secondary-select-methods
          '((nnimap "Exchange"
             (nnimap-address "ip.del.servidor.exchange")
             (nnimap-authenticator sasl)))
  • Las credenciales para la validación automática (esta parte es opcional). Por defecto van en el fichero ~/.authinfo
    machine ip.de.servidor.exchange login usuario@dominio password contraseña

    donde ‘usuario’ es el nombre de usuario de MS Windows, y ‘dominio’ el nombre de dominio corto (NETBIOS) de MS Window. Es importante usar la forma ‘usuario@dominio’ a la hora de especificar el nombre de usuario. Sino la validación puede fallar.

Creo que eso es todo. Si algún otro “loco” lo intenta y no le funciona que lo comente por aquí. Igual me he dejado algún detallito.

Iñaki.

Publicar en Blogger ¡¡desde Emacs!!

Estaba dando una vuelta por los servicios de Google asociados a mi cuenta y he caido en la página de Blogger que te enseña la lista de tus blogs y debajo ponen noticias “corporativas” sobre el propio Blogger (cosas que están mejorando, etc.).

Y cual es mi sorpresa cuando bajo la vista un par de líneas y leo:

“From The Everything Can Be Done In Emacs Dept…

Blogger exposes a clean API based on Atom Publishing Protocol (APP) and Google Data APIs (GData). This Emacs module leverages this functionality to enable one to blog from within the comfort of a full-featured editing environment.”

Que básicamente viene a decir que han publicado una serie de módulos de Emacs que permiten publicar tus entradas de Blogger desde Emacs.Para los que son tan especiales como yo, que opinan que un buen editor es algo fundamental para editar texto, y que los editores usados en la práctica totalidad de las aplicaciones web son una castaña (como le gusta oir a algún compañero de trabajo mío), esto es una gran noticia.

Seguramente para el común de los mortales que con teclear el texto y poder poner una negrilla o un subrayado es suficiente, Emacs es una cosa del pasado y matar moscas a cañonazos. Pero por suerte, aún es posible elegir en este mundo, y yo elijo Emacs 🙂

Así que me voy a poner con ello de inmediato, a ver que posibilidades ofrece el invento. En todo caso, no creo que eso haga aumenta mi ritmo de publicación demasiado (las causas son otras, especialmente la procrastinación 😉

[Actualización: parece ser que el código está aún en desarrollo y quedan cosas por pulir. Por ejemplo, cuando intento publicar me da un bonito error 405 Método no permitido, y no se publica nada. Habrá que seguirle la pista al asunto]

Saludos. Iñaki.