Pourquoi les directives #include et #includedir dans sudo sont-elles précédées du caractère dièse (#)

36

Lors de la configuration d'un sudoenvironnement, j'ai remarqué que la directive include était préfixée par le caractère pound (#).

Solaris affiche ceci sous la forme:

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

Le manuel (Linux et Solaris) indique:

Inclusion d'autres fichiers de sudoers Il est possible d'inclure d'autres fichiers sudoers à partir du fichier sudoers en cours d'analyse en utilisant les directives #include et #includedir.

Et:

Autres caractères spéciaux et mots réservés Le signe dièse ("#") est utilisé pour indiquer un commentaire (sauf s'il fait partie d'une directive #include ou s'il apparaît dans le contexte d'un nom d'utilisateur et est suivi d'un ou de plusieurs chiffres, dans ce cas, il est traité comme un uid). Le caractère de commentaire et le texte qui le suit, jusqu'à la fin de la ligne, sont ignorés.

Est-ce que quelqu'un sait pourquoi le choix a été fait d'utiliser le caractère dièse dans le #includeet#includedir directives ?

Remarque: j'utilise souvent quelque chose comme egrep -v '^#|^$' configfileobtenir les paramètres configurés non définis par défaut / actifs, et cela ne fonctionne évidemment pas pour le sudoersfichier.

Lambert
la source

Réponses:

38

#includea été ajouté en 2004 . Cela devait être compatible avec ce qui existait déjà. Je ne pense pas que include /path/to/filecela aurait été ambigu, cependant, mais cela aurait pu être un peu plus difficile à analyser, car l'analyseur devrait distinguer include /path/to/file(directive include) de include = foo(permettre à l'utilisateur included'exécuter la commandefoo ).

Mais je pense que la raison principale était de ressembler au préprocesseur C, que le manuel cite explicitement comme source d’inspiration.

Gilles, arrête de faire le mal
la source
1
Belle prise et explication, malheureusement, ces explications sont supprimées des manuels (du moins sur Ubuntu, RedHat, OpenBSD et Solaris).
Lambert
2
La première fois que j’ai analysé mon sudoersdossier, j’ai pensé qu’il s’agissait d’ includeune directive et que celle-ci #includeest commentée . La règle de la moindre surprise violée durement. A mon avis c'est un mauvais design.
Kamil Maciorowski