La fonction walk de hptools fait appel au binaire snmpwalk. Celui-ci renvoi
(dans le cas d'une demande des hpSwitchPortFdbAddress) des lignes
de la forme:
STATISTICS-MIB::hpSwitchPortFdbAddress.$(numerodeport).'$(mac en binaire)' "$(mac en hexa) "
Par $(mac en binaire), je désigne une représentation où chaque octet de
l'adresse mac est représenté par le caractère ascii correspondant.
Cependant, il existe plus d'un caractère ascii non-représentable, et ces
caractères sont tous remplacés par des ".". Cela donne des résultats
avec plusieurs fois le même oid (quand présents sur la même prise):
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "D4 BE D9 80 CD F8 "
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "DC 9F DB 07 D9 12 "
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "DC 9F DB 07 DA A8 "
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "DC 9F DB 07 DB 1B "
(^^^^ ex ici avec des bornes wifi sur le port 25)
Cela pose un problème certain car la fonction walk renvoie un dictionnaire
indexé par les oid, ce qui écrase donc les données précédentes.
On patche en utilisant une lib snmp sachant traiter des oid binaires
arbitraires.
Comme cela change un peu la sortie de la fonction walk, j'ai préféré garder
l'ancienne version, tout en permettant l'utilisation de la nouvelle via
un argument optionnel de compatibilité.
C'est entre autre l'exception récupérée dans lc_ldap (pour l'attribut chambre),
qui permet de fallback en connexion de test. Ce n'est pas la manière idéale
de faire une connexion de test, mais c'est mieux que rien.
Celui-ci écoute au travers d'une socket unix. Il permet ainsi de garder
une connexion ldap (et pg et cie) en permanence ouverte. Ce qui accélère
le traitement des rapports de arpwatch.
Pour utiliser ce server, report.py (ancien arpwatch_sendmail.py)
tente de se connecter à cette socket et envoie le mail lui-même en cas
d'échec.
On rajoute également un initscript pour arpwatch_sendmail_server.
Il n'est pas parfait et si vous aimez pas, feel free to edit.
C'est le binaire qui indique quels sont les fichiers de journal qui ne sont
plus en cours d'écriture dans /var/lib/ldap/ .Il peut être nécessaire
(mais je n'ai pas compris "quand") de redémarrer slapd, pour que celui-ci
lâche son lock sur ses vieux journaux…