README.txt
author viric@llimona
Mon, 15 May 2006 17:51:40 +0200
changeset 46 875902155b06
parent 18 84fa30ea0b0d
child 59 a8776c046a53
permissions -rw-r--r--
Documentation for the latest release.


Compilació:
--------------------------------------
Per compilar-lo fent servir gcc (crec que com a mínim 3.4, pel c99):
$ make

Per compilar-lo fent servir tcc (que suporta c99, és fàcil d'instal·lar, etc.
   (Tiny C Compiler, http://fabrice.bellard.free.fr/tcc/ ):
$ make -f Makefile.tcc

Per a testejar una mica el programa, hi ha un petit script de test que
requereix bash.
Per a execultar-lo:
$ ./test.sh


Els fitxers:
--------------------------------------
   syslog_in_udp <port>      Espera missatges pel port UDP especificat
                             (IPv4 i IPv6)
   syslog_in_npipe <npipe>   Espera missatges per la named pipe (ha d'existir!)
   syslog_in_unix <usocket>  Crea i escolta el socket unix per missatges
   syslog_kernel             Executa els anteriors programes, i llegeix de tots
                             alhora.
   unix_writer <usocket>     Programa per escriure a un Unix socket


Configuració del programa:
--------------------------------------
La configuració la trobem al fitxer "syslog.conf". Aquests són els seus
valors per defecte (a config.c):
from_unix=unixlog
from_npipe=disabled
from_udp=disabled
to_udp_host=localhost
to_udp_port=1235
tcp_manager=1234   (No s'utilitza encara!)
log_file=file.log

No hi poden haver espais; el format és <paràmetre>=<valor> per cada línia.
Si el fitxer de configuració "syslog.conf" no defineix res d'un paràmetre,
valdrà el valor per defecte.
Si a un paràmetre li donem el valor "disabled", la part afectada no estarà
activa.

Notes:
--------------------------------------
El programa està escrit en c99.

El programa no gestiona bé lectures de múltiples missatges per cada crida
read(). Només pot llegir un missatge per crida.
Això és perquè encara en prou feines he implementat alguna cosa de la
rfc 3164.

Els syslog_in_* entenen el missatge "close", cosa que fa que morin. Si moren
tots els fills de syslog_kernel, el kernel també mor.

Al fitxer syslog_in_udp se li pot passar el paràmetre de port en negatiu,
cosa que vol dir que escoltarà també per IPv6 al port "-(port)" donat. Si es
dóna en positiu, només escoltarà IPv4.

El codi de llegir la "named pipe" intenta fer el possible amb locks i
reobertures de la pipe de manera que no es perdi mai la lectura de la
named pipe donada.

Els syslog_in_* ignoren el senyal HUP. El syslog_in_unix capta SIGTERM i
SIGINT, perquè a més de tancar els handles, també ha de tancar el unix socket.

El syslog_kernel pot passar missatges a un servidor udp. També pot escriure
els missatges rebuts a un fitxer de log.

El syslog_kernel entén els senyals:
- SIGHUP - rellegir i reaplicar el que digui el fitxer de configuració.
- SIGTERM o SIGINT - matar els fills, i després morir ell.
  (Atenció - si apretem Control-C des d'un xterm, envia SIGINT al grup de
  processos del terminal; així, si hem executat el kernel, els fills
  rebran SIGINT igualment)

No he implementat el SIGUSR1 per a buidar el caché de missatges rebuts a disc.

El programa dóna informació de debug per stderr.

El programa no és gaire "error-safe": si no es compleixen certes condicions,
el programa simplement abortarà - a vegades amb assert(). De tota manera,
tots els casos crítics crec que estan sota control.