Manejo de listas con SmartList
------------------------------
Copyright (c) 1993-1996, Stephen R. van den Berg, Holanda.
NOTA: Ejecute "flist -v" para saber más sobre la versión de SmartList que
tenga instalada.
Contenido:
---------
1. Creación y borrado de listas de correo o servidores de ficheros.
2. Mantenimiento remoto de listas de correo.
3. Personalización.
3a.Proceso de gacetas.
3b.Restrición de suscripciones.
3c.Restricción de envíos.
3d.Autosuscripción en el primer envío.
3e.Envío automático de ficheros a los nuevos suscriptores.
3f.Listas moderadas.
3g.Listas de listas.
3h.Discriminación positiva de algunos daemons.
3i.Respuestas de ayuda por omisión.
3j.Asistencia en la des-suscripción
3k.Expansión de otras listas (de tipo no SmartList).
3l.Cómo hacer pública la lista de suscriptores.
3m.Visión esquemática de lo que ocurre en el interior.
4. El servidor de ficheros.
4a.Envío de ficheros al servidor.
4b.Restricción de acceso al servidor de ficheros.
5. El formato del fichero dist.
6. Multigram y la tolerancia (`thresholds') en rc.init/rc.custom.
7. Choplist y sendmail.
8. Direcciones de FTP y la lista de correo SmartList.
1. Creación y borrado de listas de correo o servidores de ficheros
---------------------------------------------------------------
Asegúrese de que el directorio .bin está en el PATH. Ahora se pueden
ejecutar órdenes tales como:
createlist pruebas
createlist pruebas curro@dondesea.es
createlist -a pruebas curro@dondesea.es
removelist pruebas
La primera orden crea una lista de correo con dos direcciones útiles:
pruebas
pruebas-request
La segunda orden hace lo mismo, pero también especifica a
curro@dondesea.es como la persona de contacto resposable para esta lista.
La tercera orden hace lo mismo, excepto que en lugar de crear una lista de
correo, crea un servidor de ficheros.
La cuarta orden elimina todo vestigio de la lista de correo "pruebas".
Hay otras cuatro utilidades que se pueden utilizar:
led Un intermediario para el editor, debe utilizarse en lugar
de llamar al editor directamente cuando se vaya a editar
un fichero manejado por SmartList. Automáticamente se
encarga del bloqueo adecuado y realiza comprobaciones
de los atributos.
delink
Desenlaza un fichero de aquél o aquellos a quienes
esté enlazado (sin borrarlo).
showlink
Muestra qué grupos de ficheros están enlazados.
donatelist
Pone una lista bajo el control completo y exclusivo
del mantenedor (un usuario local). Véase más abajo.
Si usted tiene varias listas mantenidas por administradores distintos, se
puede dar a un administrador el completo control sobre su lista sin
necesidad de tener los derechos del usuario o grupo list. Para que esto
funcione, simplemente hay que ejecutar "donatelist el_administrador
su_lista" y esto [?] cambia el propietario del árbol completo que contiene
la lista a él o ella. Asegúrese de que el GID de todos los ficheros
necesarios del árbol son todavía escribibles por el grupo "list", porque
ese es el privilegio de acceso bajo el que la lista está funcionando.
El mantenedor debe tener cuidado de usar una umask de 007 al editar
ficheros en su directorio de lista. Esto permite funcionar a los programas
de la lista de correo al mismo tiempo que el acceso a los ficheros de las
listas de correo se limita a *una* sola persona (el mantenedor).
Nota: La persona a la que se dona una lista puede obtener acceso a la
cuenta de SmartList, si pone suficiente empeño. Para obtener
varias listas seguras, instale SmartList varias veces.
2. Mantenimiento remoto de listas de correo
----------------------------------------
Para facilitar el mantenimiento remoto de algunas listas de correo por sus
mantenedores, he creado el script .bin/x_command. Este script analiza los
mensajes que se envían a la dirección -request y puede ejecutar algunas
órdenes administrativas.
El mensaje debe enviarse a la dirección -request de una lista de correo
y debe contener un campo en la cabecera con un aspecto como este:
X-Command: curro@dondesea.es contraseña orden
"orden" puede ser cualquiera de las siguientes:
subscribe direccióndecorreo
unsubscribe direccióndecorreo
checkdist direccióndecorreo Para ver las coincidencias
multigram de direccióndecorreo
con la lista (muestra las ocho
mejores coincidencias).
showdist Para mostrar el fichero dist.
showlog Para mostrar el log
wipelog Para borrar el log.
help Muestra este resumen de órdenes.
info Eso.
(OJO)
El nombre exacto del campo es por omisión "X-Command", pero se puede
personalizar a lo que uno quiera.
La contraseña por omisión es "password", pero se puede/debe cambiar.
El "curro@dondesea.es" es siempre la dirección de correo del
mantenedor. Debe coincidir con la que se especificó en la línea de
la orden de "createlist" cuando se creó la lista.
El campo X-Command: debe ser parte de la cabecera, cuando está en el
cuerpo del mensaje, no tiene ningún efecto.
Siempre que un mensaje con X-Command: ha sido procesado, el resultado
se devuelve al mantenedor de la lista, y el campo X-Command:
se renombra a X-Processed:.
Aunque esta facilidad remota es cómoda, algunos pueden decir que
presenta un agujero de seguridad. Bien, para hacer este agujero
de seguridad lo más pequeño posible, se puede mantener la contraseña
secreta. Asimismo, la dirección exacta del mantenedor podría no ser
publicamente conocida. Se puede cambiar simplemente el campo
X-Command por algo distinto como X-MyCommand. Pero sobre todo, dado que
falsificar un mensaje es una posibilidad bien conocida sería ridículo
tomar más precauciones que estas. Además, si alguien en efecto se las
arregla para enviar un X-Command: falso, no pasaría inadvertido, porque
el mantenedor (y sólo el mantenedor) recibirá siempre el mensaje
X-Processed.
Para su comodidad, se puede encontrar un script de muestra "doxcommand"
en el directorio examples. Se puede utilizar para generar fácilmente estos
mensajes X-Command. Recuerde proteger de lectura este script una vez que
la contraseña se haya cambiado.
3. Personalización
---------------
Las listas de correo se pueden personalizar de diversas formas:
- Para todas las listas:
- Dado que todas las listas inicialmente comparten los mismos
ficheros help.txt, subscribe.txt, unsubscribe.txt, rc.init,
rc.submit and rc.request (enlazados), cualquier cambio afectará a
todas las listas.
- Dado que todas las listas tienen el directorio .bin en el
PATH, cualquier cambio a cualquiera de los shell scripts
que hay ahí afectará a todas las listas.
- Por cada lista:
- Cada lista contiene un fichero de inicialización "rc.custom"
que se puede editar a voluntad para personalizar ciertos
parámetros para esta lista únicamente.
- Se pueden conseguir pequeñas personalizaciones locales
descomentando una o más de las asignaciones RC_LOCAL_* que hay
en rc.custom. Entonces hay que crear el fichero rc.local*
apropiado en el que se pueden poner las órdenes que se quieran
(por ejemplo añadir una "signature" general a cada mensaje
saliente).
- Para una personalización más avanzada, se puede eliminar el
enlace duro (utilizando .bin/delink, por ejemplo) de cualquiera
de los ficheros en un directorio de lista y proporcionar a esa
lista con su propia copia para editarla al gusto de cada cual.
- Como el directorio actual está en el PATH antes que el
directorio .bin, se pueden crear copias específicas para cada
lista de cualquiera de los shell scripts que hay en .bin, que
pueden entonces cambiarse sin afectar a otras listas.
- Por grupos de listas:
- Lo mismo se aplica cuando se personalizan listas, pero entonces
hay que enlazar los ficheros apropiados entre los directorios
de las listas del grupo.
Por omisión los scripts crean y utilizan enlaces duros en diversos sitios.
Usted es completamente libre de cambiar algunos o todos por enlaces
simbólicos (o sustituir "ln" por "ln -s" en algunos scripts).
Algunos editores tienen la costumbre de mover el fichero que estamos
editando a un fichero de respaldo y escribir una nueva copia en su lugar.
Esto puede ocasionar problemas si el editor no está al tanto de los
enlaces simbólicos o fuertes que haya. Asegúrese de que el editor tiene
constancia del enlace y lo conserva, incluso después de que el fichero ha
sido editado (por ejemplo usando emacs: pruebe a poner la variable
backup-by-copying-when-linked con el valor true).
Usando el script "led" en lugar de llamar al editor directamente
seremos advertidos a tiempo de cualquier cosa que el editor haga mal.
Si no está utilizando la facilidad de mantenimiento remoto y comienza a
editar o personalizar scripts o ficheros a mano, entonces debe asegurarse
de que no llega ningún mensaje a estas listas que esté afectado por los
cambios. La mejor manera de hacer esto es utilizando la orden "led"
siempre que vayamos a editar un fichero gobernado por SmartList. Led se
encargará de todos los bloqueos necesarios para cualquier fichero, led se
puede utilizar también para editar ficheros que no sean de SmartList.
Si no utiliza "led" pero quiere que los mensajes de llegada esperen
temporalmente, entonces se puede hacer esto:
- para todas las listas creando el fichero: .etc/rc.lock
- solamente para una lista creando el fichero: rc.lock
en el directorio de la lista correspondiente.
La orden .bin/flist comprueba si existen estos ficheros rc.lock y no son
más antiguos que 17 minutos antes de entregar el mensaje. Así que, si se
crea un fichero rc.lock, los mensajes que se envían a esas (o a todas)
listas se quedan esperando [?] durante 17 minutos. Si necesita más tiempo,
toque el fichero (touch) con frecuencia. Se deben borrar los ficheros
rc.lock otra vez después de terminar la edición.
Si usted quiere cambiar el alias -dist (que se utiliza para distribuir los
mensajes a los suscriptores) por algo menos desconocido, adelante, pero
recuerde cambiar la asignación correspondiente a listdist. Para hacer la
gracia completa, uno debería también corregir los scripts createlist y
removelist en tal caso. Si estamos utilizando cophdist para expandir el
fichero dist, entonces ni siquiera nos hace falta un alias -dist.
3a.Proceso de gacetas
------------------
Se puede configurar una lista para que envíe gacetas de los mensajes
acumulados. Para ello, simplemente descomente la asignación apropiada a
digest_flag en rc.init (si quiere que todas las listas sean gacetas) o en
rc.custom (si sólo desea que esta lista esté en forma de gaceta). Las
gacetas se envían con una frecuencia que depende del tamaño y
antigüedad de los mensajes acumulados.
Las condiciones para enviar una gaceta se comprueban durante la llegada de
cada nuevo mensaje. Sin embargo, si el tráfico en la lista es a veces
demasiado bajo (p.ej. menos frecuente que la antigüedad máxima de una
gaceta) entonces una gaceta puede estar en espera más tiempo que el
periodo máximo especificado (3 días por omisión).
Para asegurarse de que la gaceta se envía de todas formas, se debe
ejecutar el programa .bin/cronlist de vez en cuando. El procedimiento
recomendado es crear un trabajo de cron (en la cuenta de la lista)
que contenga algo como la siguiente línea:
0 6 * * * /var/list/.bin/cronlist
El script cronlist se puede personalizar según el gusto (tal vez necesite
ajustar la variable PATH).
Ojo: Llame a cronlist con un path absoluto o relativo, no confíe en el
PATH para que lo encuentre por usted (cronlist utiliza $0 para encontrar
el lugar de las listas de las que es responsable).
Por omisión, cronlist ejecuta el programa flush_digets.
Usando la entrada de crontab antes mencionada, nos aseguraremos de que a
las seis de la mañana se enviarán todas las gacetas pendientes.
flush_digets normalmente comprueba la antigüedad de la gaceta y no la
envía hasta que ha llegado el momento. Si usted quiere obligar a
flush_digest a que envíe una gaceta de una lista particular, se puede
crear el fichero ".digest.force" en el directorio de la lista. Durante la
próxima ejecución de flush_digests, se borrará el fichero .digest.force y
enviará la gaceta independientemente de su antigüedad.
Si usted crea un fichero llamado digest.admin bien en el directorio
principal de la lista en forma de gaceta o en el directorio archive/latest
que le pertenece, será cogido [?] por el próximo flush_digest e incluido
al principio de la gaceta real con el encabezamiento "Administrivia".
El fichero archive/latest/digest.admin se borrará automáticamente después
de que la gaceta se lo haya comido.
El fichero digest.admin en el directorio principal de la lista en forma de
gaceta no será borrado y se incluirá en todas las gacetas.
Si quiere dar a sus suscriptores la elección de recibir gacetas o no, esto
es lo que se puede hacer:
Cree dos listas. Por ejemplo, si la lista se llamara "lalista",
entonces tendremos la lista `auténtica' llamada "lalista" (creada
y utilizada como una lista normal) y la lista en forma de gaceta
llamada "lalista-d".
En el fichero dist de lalista se debe incluir lalista-d como
uno de los suscriptores. En el fichero rc.custom de lalista-d
se debe editar la asignación de undigested_list para que quede
así: "undigested_list = lalista@$domain".
Después de haber hecho esto, ya está. La gente que quiera gacetas
se suscribirá simplemente a lalista-d, y la gente que no, a
lalista.
3b.Restricciones de suscripción
----------------------------
Hay tres formas en que se puede restringir quién puede suscribirse a
una lista:
- Se puede poner la dirección de suscriptores no deseados en la así
llamada lista de rechazo (el fichero `reject').
- Se puede ejecutar un programa (p.ej. un shell script) llamado
"subscreen". Debe ser ejecutable y recibirá la dirección de correo del
posible suscriptor como primer argumento. Si la suscripción para esa
dirección está permitida, el programa debe volver con código de salida
cero (no error). Si la suscripción está vedada, simplemente vuelve con
código de salida uno (error). Hay un programa de ejemplo en el
directorio "examples".
- Se puede desactivar por completo la suscripción automática
descomentando la línea "auto_subscribe" apropiada en rc.custom.
- Se puede desactivar completamente la des-suscripción automática
descomentando la línea "auto_unsubscribe" apropiada en rc.custom.
3c.Restricción de envíos
---------------------
Se puede restringir el envío de mensajes a la gente que esté en la lista
de aceptación (el fichero `accept'). Los mensajes que provengan de
cualquier otra persona serán redirigidos al mantenedor de la lista en
lugar de ser enviados. Para activar esto hay que descomentar la línea
foreign_submit apropiada en rc.custom. Por omisión el fichero accept es un
enlace duro al fichero dist (es decir, si el envío está restringido,
solamente los suscriptores podrán hacerlo). Si usted quiere permitir
solamente a un grupo más reducido, deshaga el enlace y edítelo a su gusto.
Si usted quiere tener tanto un fichero accept dinámico como uno estático,
cree un nuevo fichero accept2, se buscará en él además de en el fichero
accept normal.
Tenga en cuenta que el uso de un fichero accept es incompatible con
tener un alias owner- para esta lista (las listas administradas por
procmail no necesitan el alias owner- en cualquier caso).
Si, además de notificar al mantenedor usted quiere que se genere una
respuesta automática a la persona que envió el mensaje pero que no está en
el fichero accept, esto se puede conseguir simplemente creando un fichero
accept.txt. Su contenido será devuelto (como el contenido del fichero
help.txt) a la persona que envió el mensaje.
Esta característica no es la misma que una lista moderada, las dos
características se pueden utilizar acumulativamente.
3d.Auto-suscripción en el primer envío
-----------------------------------
En lugar de rechazar los mensajes de las personas que no estén en la
lista accept (dist), se puede activar "force_subscribe". Esto causará
que las personas que envíen mensajes a la lista se autosuscriban a la lista
si no estaban en el fichero dist.
3e.Envío automático de ficheros a los nuevos suscriptores
------------------------------------------------------
Se puede crear un fichero llamado "subscribe.files". Puede contener
cualquier número de órdenes para el servidor de ficheros. Los resultados
(es decir, los ficheros solicitados), serán enviados al nuevo suscriptor.
3f.Listas moderadas
----------------
Primero cree un fichero llamado "moderators", debe contener la dirección
de correo completa de todos los moderadores para esta lista (es decir,
solamente nombres de usuario local no son suficientes, hay que incluir
@loquesea). Luego descomente la línea "moderated_flag" apropiada en
rc.custom.
Desde ese momento, todos los mensajes que no contengan un campo
"Approved: dirección_de_uno_de_los_moderadores" será reenviado a todos
los moderadores.
Uno de los moderadores debe entonces reenviar el mensaje a la lista
después de añadir un campo "Approved: su_propia_dirección" a la cabecera
(y posiblemente editando el contenido del mensaje). No hay problema si
varios moderadores reenvían el mismo mensaje al mismo tiempo, dado que la
listas de correo filtra los duplicados en cualquier caso (o sea, solamente
la primera saldrá y será archivada).
*--------------------------------------------------------------------------
Nota importante: Este mecanismo acaba de cambiar en SmartList-3.11pre5.
Ahora hay una contraseña para la moderación, y es la contraseña lo que
debe aparecer en la línea Approved. Estoy pendiente de que el autor
corrija el manual para corregir yo la traducción adecuadamente.
*--------------------------------------------------------------------------
3g.Lista de listas
---------------
Si quiere usted que la gente sea capaz de obtener una visión panorámica
[?] de qué listas son públicamente disponibles en su máquina, puede
decirles a los mantenedores de listas que creen un fichero info.txt en el
directorio de la lista. Este fichero info.txt debe contener una
descripción corta del propósito y tema principal de esta lista particular.
Se puede entonces poner una orden tal y como el gatherinfo del
directorio examples en el crontab para recoger todos estos ficheros
info.txt una vez al día.
Los ficheros info.txt recogidos se pueden situar en un directorio que sea
accesible por un servidor de ftp, gopher o web, o bien, se puede poner en
el directorio `archive' de un servidor de ficheros manejado por procmail
(por ejemplo, bajo el alias "metalista").
3h.Discriminación Positiva de algunos daemons
------------------------------------------
SmartList normalmente no acepta mensajes o suscripciones de daemons.
Si usted quiere hacer una excepción para alguno de ellos, se puede hacer
afinando la variable daemon_bias. Se puede encontrar una sencilla
plantilla en el fichero rc.init. Esta variable se puede por supuesto
establecer en rc.init, rc.custom o en los ficheros rc.local. En lugar de
especificar directamente un peso y una expreg, se puede especificar
solamente un peso. Entonces hay que asegurarse de que la variable se
activa solamente cuando llega un mensaje de nuestros daemons
particulares.
3i.Textos de ayuda de respuesta por omisión
----------------------------------------
Descomentando la línea "auto_help" apropiada en el fichero rc.custom, la
lista responderá a cualquier mensaje de petición indescifrable como si se
hubiera solicitado ayuda. Los mensajes que pasarán a través del mantenedor
serán aquellos que:
- parezcan provenir de un daemon.
- parezcan una respuesta ("Subject: Re: ").
Dependiendo de las personas [?] que tengamos en la lista, activar esto
podría no ser una buena idea.
3j.Ayuda a la des-suscripción
--------------------------
Descomentando la línea "unsub_assist" apropiada en el fichero rc.custom
se puede activar la asistencia a la des-suscripción. Si alguien está
intentando borrarse de la lista, pero su dirección no se encuentra,
le será devuelto un número de coincidencias multigram (determinadas
por el valor de unsub_assist) entre su mensaje de des-suscripción y el
fichero dist.
Para activar esta opción, por favor tenga presente lo siguiente:
- De esta forma, la gente puede obtener fragmentos del fichero dist.
- Individuos maliciosos se podrían animar a borrar montones de personas
de la lista. Esto no pasará inadvertido, por supuesto.
Será registrado y los suscriptores inocentes recibirán una copia
de la petición de des-suscripción que no enviaron. Cuando menos,
puede causar una molestia considerable.
3k.Expansión de otras listas (no SmartList)
----------------------------------------
Una lista SmartList puede ser utilizada fácilmente para que funcione como
distribuidora local de una lista más grande. Las ventajas sobre usar un
alias normal son tres:
- Las suscripciones/borrados se manejan automáticamente.
- Los mensajes de rebote van a la lista del distribuidor local (en lugar
de a la lista más grande, que no está interesada realmente en sus
problemas de correo con algunos alias locales).
- Las peticiones administrativas erróneas se pueden filtrar y eliminar del
canal habitual a través del que se envían los mensajes.
Si la lista más grande que está distribuyendo localmente es una lista
SmartList también, entonces no hay ninguna precaución especial que tomar
en absoluto. Si la lista más grande no está gestionada por SmartList, las
peticiones administrativas serán interceptadas y manejadas por la lista
local; si este "manejo" resulta ser un problema se puede desactivar
descomentando la variable "pass_diverts" apropiada en rc.custom
(esto causará que las peticiones administrativas mal dirigidas serán
interceptadas, pero serán pasadas al mantenedor tal cual).
3l.Cómo hacer pública la lista de suscriptores
-------------------------------------------
Si usted quiere que cualquiera pueda obtener una lista de los suscriptores
actuales a una lista, simplemente cree un enlace del fichero dist a
archive/subscribers. Esto hace posible que cualquiera envíe una petición
al servidor de ficheros pidiendo el fichero "subscribers".
3m.Visión esquemática de lo que ocurre en el interior
--------------------------------------------------
Supongamos que tenemos dos entradas en el fichero aliases, una para
lalista@dominio.es y otra para lalista-request@dominio.es.
Cuando llega un mensaje a cualquiera de estas direcciones, ocurre lo
siguiente:
- Se llama suid root a flist con lalista como su argumento.
- cambia su directorio actual al del directorio principal de las
listas (internamente fijo).
- cambia su uid y gid al de la cuenta `list' (internamente fijo).
- cambia el directorio actual al de lalista.
- espera hasta que tanto ../.etc/rc.lock como rc.lock se hayan
ido o sean suficientemente antiguos (17 minutos).
Entonces, si era un mensaje normal a lalista@dominio.es:
- flist ejecuta procmail con fichero de configuración rc.submit.
- toma los valores que hay en rc.init.
- toma los valores que hay en rc.custom que prevaleven
sobre algunos por omisión (si hay).
- comprueba el formato del mensaje
- si es necesario, comprueba:
- la lista accept
- la lista de moderadores (Approved:)
- comprueba el caché de msgid para envíos duplicados
- si hace falta realiza el proceso de gacetas (y para)
- archiva el mensaje
- modifica la cabecera del mensaje al gusto
- le dice a sendmail que envíe el mensaje a
lalista-dist@dominio.es
- Si el mensaje era una petición administrativa, no va a la lista,
en su lugar, procmail sigue rc.request.
Pero, si era un mensaje administrativo para lalista-request@dominio.es
- flist ejecuta procmail con rc.request como fichero de configuración.
- lee rc.init que establece los valores por omisión
- lee rc.custom que sustituye alguno de estos valores
- realiza las acciones necesarias, dependiendo del contenido
- si el contenido era indescifrable, pasa al mantenedor
de la lista
Si hay algún fallo del sistema grave durante todo esto, el script rc.post
lo recogerá y se asegurará de que el mensaje quedará aparcado [?] en algún
lugar o será reenviado al mantenedor, lo que funcione. Esto es para
asegurarse de que no se pierde ningún mensaje.
4. El servidor de ficheros
-----------------------
Todos los mensajes (excepto los que se envían desde otra lista de correo)
que se envían a cualquiera de las listas queda archivado de forma muy
simple. Por ejemplo, si tenemos una lista llamada "naranjas", entonces
todos los mensajes son archivados en naranjas/archive/latest. Los mensajes
serán almacenados cada uno en un fichero. Los ficheros estarán numerados.
Ahora, normalmente, tan sólo los dos últimos mensajes serán conservados,
los otros se borran periódicamente. Eso es para mantener en un nivel bajo
el costo del archivo para gente con especio en disco limitado. Para
cambiar el tamaño del "archivo histórico" edite el fichero rc.custom.
Para obtener un archivado más sofisticado, tal y como agrupación mensual
de los mensajes, se debe crear un trabajo de cron o editar el fichero
.bin/arch_trunc.
Se puede acceder al servidor de ficheros de cada lista enviando un mensaje
a la dirección -request con el siguiente Subject:
Subject: archive
El cuerpo del mensaje o el resto de la línea de Subject puede ser entonces
rellenada con peticiones al servidor de ficheros. Básicamente entiende
cinco órdenes:
get fichero ...
ls directorio ...
egrep expresión_regular fichero ...
maxfiles nnn
help
[La expresión regular no distingue mayúsculas de minúsculas]
El servidor de ficheros hace una comprobación minuciosa de las órdenes y
los ficheros que son solicitados. Esto es para asegurarse de que no se
accede a ningún fichero fuera del directorio naranjas/archive. Cualquier
fichero de texto que se ponga en el directorio naranjas/archive (o en
cualquiera de sus subdirectorios) puede ser recuperado mediante las
órdenes del archivo.
Si un fichero solicitado a través del servidor comienza con una cabecera
que comienza [?] con `Content-Type:' entonces el fichero se envía tal y
como es, sin encapsulado. Esto permite preparar los ficheros en formatos
especiales que estén soportados directamente por el agente de usuario del
receptor. El Content-Type: inicial y cualquier campo que le siga se
convertirá en parte de la cabecera.
El resto de ficheros se encapsula con MIME antes de la transmisión. Se
debe echar un vistazo al directorio /var/list/.bin/mimencap.local si
queremos extender o personalizar los tipos de ficheros reconocidos.
El encapsulado MIME es automático y depende de la disponibilidad del
paquete metamail en el PATH definido en rc.init. Los programas de este
paquete que deben estar disponibles son: mimencode y splitmail.
Si mimencode no se encuentra en el PATH, los ficheros serán enviados con
un intermedio estándar alrededor. [?]
Se puede cambiar de codificación MIME a uuencode aplicando el
correspondiente parche uuencode.dir del directorio examples.
Si se ponen enlaces en el árbol "scuba/dive" se puede permitir al
servidor de ficheros que obtenga ficheros procedentes de otras partes del
sistema de ficheros.
El servidor de ficheros completo se puede encontrar en el script
.bin/arch_retrieve. El servidor de ficheros se puede extender con órdenes
arbitrarias a través del script retrieve.local del directorio examples que
viene con la distribución.
4a.Envío de ficheros al servidor de ficheros
-----------------------------------------
El servidor de ficheros tal y como se instala con SmartList no soporta
directamente la recepción y almacenaje de ficheros. Lo que se puede hacer
es mirar el script putfile del directorio examples. Le proporciona todo lo
que necesitaría para recibir y almacenar ficheros.
4b.Restricción de acceso al servidor de ficheros
---------------------------------------------
Se puede restringir el acceso a la gente en las listas `accept'
(los ficheros accept y accept2). Los mensajes de cualquier otra persona
serán pasados al mantenedor en lugar de al servidor de ficheros. Para
activar esto hay que descomentar la línea "restrict_archive"
apropiada en rc.custom.
5. El formato del fichero dist
---------------------------
Esto no es necesario saberlo, a menos que quiera editar el fichero dist a
mano o quiera incorporar una lista de direcciones que ya exista.
Para distribuir los mensajes que llegan, se le da el fichero dist a
sendmail con el alias :include:. Así que el formato de este fichero debe
estar de acuerdo con lo que sendmail esperaría. Además de esto, este
fichero es examinado y editado por multigram para encontrar suscriptores
particulares. El formato que multigram espera es un poco más rígido que lo
que sendmail admite.
Deben cumplirse las siguientes condiciones:
- Un suscriptor por línea.
- Se permiten líneas vacías.
- La dirección de correo del suscriptor debe ser la primera palabra de
la línea.
- Puede haber comentarios después de la dirección (pero separados de
la dirección por al menos un carácter de espacio en blanco).
- Todo lo que preceda a la línea que contenga:
(Only addresses below this line can be automatically removed)
está a salvo de ser escrito por cambios por multigram (es
decir, estas direcciones nunca pueden ser borradas
automáticamente/accidentalmnente).
- Si la línea:
(Only addresses below this line can be automatically removed)
no está presente en absoluto, entonces las dessuscripciones automáticas
a esta listas son imposibles.
- Cuando multigram borra automáticamente una dirección de la lista,
reescribe el fichero dist `in situ'. Esto quiere decir que el fichero
dist será contraído [?] en ese punto. He decidido escribir in
situ para evitar copiar el fichero dist cada vez que
cambia (un verdadero ahorro si la lista crece mucho).
- Multigram siempre añade nuevos suscriptores en la línea que sigue
inmediatamente a la última entrada rellena del fichero dist.
Algunas entradas de muestra (el formato preferido):
curro@dondesea.es
curro@dondesea.es (algún comentario)
curro@dondesea.es (algún comentario) (algunos comentarios más)
Obsoleto, pero permitido:
algún comentario
(algún comentario)
No permitido por multigram (aunque a sendmail no le importa):
(algún comentario) curro@dondesea
algún comentario
6. Multigram y la tolerancia en rc.init/rc.custom
----------------------------------------------
Los scripts rc.init y rc.custom definen algunos valores de tolerancia:
match_threshold, off_threshold, reject_threshold, submit_threshold.
Esto valores se proporcionan a multigram como valores tope con los que se
decide si una determinada dirección de correo está en la lista.
Cuanto más alta es la tolerancia, mejor debe ser la coincidencia. Las
tolerancias tienen una escala de -16383 a 32766. Esto quiere decir que,
por ejemplo una tolerancia de 30730 se puede utilizar para encontrar
solamente direcciones de correo que está casi exactamente igual en la
lista. Un valor de 24476 por otro lado permite ciertos errores (tales como
direcciones de correo alteradas por pasarelas, etc.) al encontrar
coincidencias con la lista.
Los valores 30730 y 24476 son valores algo arbitrarios que parecen
funcionar bien para nuestros problemas particulares
Para hacerse una idea de los valores que multigram calcula, se puede hacer
la siguiente prueba:
Cree un fichero con el mismo formato que el fichero dist,
rellénelo con cualquier cantidad de direcciones que le parezca
(por ejemplo, se puede tomar un fichero dist que ya exista).
Ahora haga una copia de este fichero `dist' y altere algunas
de las direcciones un poquito (tal y como omitir un carácter,
o añadir alguna información sobre pasarelas, intercambiar dos
palabras, cambiarla por una dirección uucp, etc.).
Ahora llamamos a multigram con la siguiente línea:
multigram -l-16000 -b300 pseudo_ficherodist < ficherodist_alterado
Multigram mostrará hasta las 300 mejores coincidencias que encuentre
después de hacer las referencias cruzadas entre pseudo_ficherodist
y ficherodist_alterado.
El resultado producido por multigram se puede [disect?] como sigue:
númerodelínea. nombre1 bondad nombre2
Númerodelínea y nombre1 se refieren al número de línea del fichero
pseudo_ficherodist que contiene la dirección de correo nombre1.
Bondad es la medida que corresponde a los valores de tolerancia
mencionados, y nombre2 es la dirección de correo coincidente del
ficherodist_alterado (que usualmente es el mensaje entrante).
Una vez que se le coge el tranquillo, se puede jugar un poco
con las entradas del ficherodist_alterado reduciéndolo cada vez
más para ver lo que nultigram hace con él (intente insertar
también algunas direcciones que no existan).
7. Choplist y sendmail
-------------------
Existen dos formas de distribuir el mensaje a las direcciones que aparecen
en el fichero dist: O bien directamente a través de sendmail y la
expansión de alias :include:, o indirectamente, a través de choplist, que
realiza la expansión por sí solo y llama a sendmail en trozos apropiados.
Por omisión, choplist se encarga de la expansión, descomente la variable
de entorno alt_sendmail apropiada en rc.init para volver a la expansión
estándar con sendmail.
Choplist intenta asegurarse de que incluso para listas grandes, la
expansión de alias se realiza tan swiftly como sea posible y varios
sendmails estarán entregando el mensaje a los suscriptores al mismo
tiempo. Los diversos límites que se pueden imponer en este proceso se
pueden afinar en el fichero rc.init.
La mayoría de los sendmails hacen un peor trabajo si choplist no hace de
preprocesador.
Un efecto secundario de usar choplist como preprocesador es que ya no hay
necesidad de un alias -dist.
8. Direcciones de FTP y la lista SmartList
---------------------------------------
Se puede conseguir una versión reciente en varios archivos de
comp.sources.misc. La última versión se puede obtener directamente
del servidor de ftp que hay en:
ftp.informatik.rwth-aachen.de
como fichero tar comprimido con gzip: /pub/packages/procmail/SmartList.tar.gz
como fichero tar comprimido: /pub/packages/procmail/SmartList.tar.Z
Existe una lista de correo específica para los usuarios de SmartList,
envíe las peticiones de suscripción a:
SmartList-request@informatik.rwth-aachen.de
Para preguntas relacionadas con procmail que no sea específicas del
paquete SmartList se puede también escribir a la lista de correo sobre
procmail, envíe la petición de suscripción a:
procmail-request@informatik.rwth-aachen.de
*--------------------------------------------------------------------------
Notas:
* Este documento ha sido traducido por Santiago Vila
* Última modificación: 9-4-1997
* Cuando hay una interrogación entre corchetes [?] se trata de una duda
de traducción. Se entiende que cuando el documento esté en su estado
definitivo, no debe quedar ninguna interrogación de estas.
*--------------------------------------------------------------------------