README.txt
author viric@llimona
Fri, 16 Jun 2006 18:45:24 +0200
changeset 62 39bf7ecd7b21
parent 59 a8776c046a53
permissions -rw-r--r--
IPV6_V6ONLY setsockopt added for the udp server.


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 (no completament!), 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. A més, inclou el tcp server.
   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   (Port per on rebre els logs per tcp)
log_file=file.log
pid_file=syslog.pid

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è no he implementat completament l'especificació rfc3164.

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 escriu el seu pid a pid_file. Si engeguem syslog_kernel i el
fitxer existeix amb el pid d'un syslog_kernel actiu, no s'engega un segon
syslog_kernel sino que s'envia SIGHUP a l'existent.

El syslog_kernel inclou un servidor tcp per a poder consultar els logs. Quan
un client tcp es connecta a ell, s'envia el contingut del log_file (si
es fa servir), i es tanca la connexió.

El syslog_kernel pare 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.