Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/clearbricks/common/lib.http.php on line 222

Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/clearbricks/common/lib.http.php on line 224

Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/public/lib.urlhandlers.php on line 65

Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/clearbricks/common/lib.http.php on line 247
Embedded weblog - Tag - grammaire 2014-05-14T10:00:05+02:00 Gilles Blanc urn:md5:b402c09b50e67198753bdd4269dc5b19 Dotclear bien choisir sa grammaire de fichier de conf urn:md5:7737e41f6da2a739273882425fcdd124 2008-09-01T10:46:00+02:00 gblanc informatique grammaire <p>Ce n'est pas vendredi, mais aujourd'hui je suis <a hreflang="fr" href="http://fr.wikipedia.org/wiki/Gilles_l%27Ermite#F.C3.AAte">un Saint</a>, donc a priori, je suis au dessus de tout soupçon de trollage. OpenBSD est un système contestable à beaucoup de points de vue (admirez l'euphémisme), mais il y a des choses insupportables. C'est par exemple le cas du hostname.*. Ce fichier dont l'extension est le nom d'une interface réseau (nom qui change en fonction du driver employé : "contestable", disais-je), renferme les informations nécessaires à la bonne configuration de ladite interface : IP fixe ou dhcp, alias divers, activation (mais manifestement, pas de désactivation), et d'autres choses dont je n'ai pas la moindre idée de ce à quoi ça sert ("rtsol" ; les bridges quant à eux sont configurés par des fichiers spécifiques, comme l'indique un echo au cas où le mot clef serait rencontré). Prenons un exemple, avec une IP fixe :</p> <blockquote><p>$cat /etc/hostname.xl0<br />inet 192.168.20.201 255.255.255.0 192.168.20.255 description "Reseau Labo"<br />inet alias 192.168.20.202<br />inet alias 192.168.20.203<br />inet alias 192.168.20.204<br />inet alias 192.168.20.205</p> </blockquote> <p>Comme on peut le voir, il n'y a qu'une seule ligne d'IP fixe, logique, en tête, suivie de plusieurs IP d'alias, toujours logique. On remarque que l'on commence par le mot clef "inet", à distinguer de "up", ou "dhcp" : jusqu'ici, tout va bien. Là où ça va mal, c'est le second token : soit une adresse IP, soit le mot clé "alias", qui sera alors suivi... d'une adresse IP. Ca ne sent pas bon. Déjà, on peut se dire qu'il y a plutôt intérêt à ce que l'adresse reste toujours indéfiniment sous forme de chiffres, car le jour où l'on veut puiser la correspondance lettrée dans /etc/hosts, et qu'un malin crée une machine "alias", ça risque de mal se passer.</p> <p>Mais dans l'absolu, nous avons déjà un problème de parsing : "alias" or not "alias", that is the question. Et les gens de BSD ne se tracassent pas beaucoup, ils commencent leur parsing dans le script d'activation des interfaces <a hreflang="en" href="http://www.openbsd.org/cgi-bin/cvsweb/src/etc/netstart?rev=1.123&amp;content-type=text/x-cvsweb-markup">/etc/netstart</a> par un magnifique :</p> <blockquote><pre>read af name mask bcaddr ext1 ext2 </pre></blockquote><p>Ce qui, on l'admettra, est un peu bourrin. Car rien ne dit que le premier argument sera une adresse d'interface (AF), le second un nom (name), le troisième un masque (mask), etc. Résultat des courses, quelques lignes plus tard...</p> <blockquote><pre>read dt dtaddr<br />if [ "$name" &nbsp;= "alias" ]; then<br /> &nbsp; &nbsp;# perform a 'shift' of sorts<br /> alias=$name<br /> name=$mask<br /> mask=$bcaddr<br /> bcaddr=$ext1<br /> ext1=$ext2<br /> ext2=<br />else<br /> alias=<br />fi<br />cmd="ifconfig $if $af $alias $name" </pre></blockquote> <p>Oui, ça fait mal aux yeux...</p>