Quelle est la différence entre «dnl» et «dnl #» dans un fichier sendmail.mc?

10

Quelle est la différence entre dnlet dnl #dans un /etc/mail/sendmail.mcfichier? Si je veux activer quelque chose, qu'est-ce qui doit être devant? De même, si je veux «commenter» quelque chose, de quel préfixe ai-je besoin?

Par exemple:

dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
dnl #
dnl FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(foo.com)dnl
dnl MASQUERADE_DOMAIN(foo2.lan)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl
Mike B
la source

Réponses:

16

Il y a une différence subtile mais importante entre dnlet #ici.

dnlsignifie "supprimer via la nouvelle ligne" . Lorsque vous transformez votre sendmail.mcen une sendmail.cfutilisation m4(ou éventuellement une interface), les personnages dnlet tout ce qui les suit, y compris la nouvelle ligne suivante, seront supprimés. (Et toutes ces lignes se terminent par dnlpour supprimer les lignes vierges supplémentaires dans la sendmail.cfsortie.)

Rien de début à dnlfin de ligne ne fera sortir sendmail.mcet entrer sendmail.cf.

Tout ce qui reste dans la sortie, bien sûr, sera soit la configuration de sendmail, soit un commentaire commençant par #, qui sera copié tel sendmail.cfquel, où il sera ignoré.

Tout ce qui commence par #et non supprimé ci-dessus le rendra sendmail.cfsans commentaires comme un commentaire.

Dans votre exemple, quelqu'un voulait que toutes les fonctionnalités commentées soient supprimées sendmail.cf, ainsi que les commentaires, car les commentaires n'auraient aucun sens sans les fonctionnalités présentes.

Michael Hampton
la source
1
Vous n'êtes pas obligé de terminer une ligne avec dnlmais vous vous retrouverez avec des lignes vides supplémentaires sendmail.cf. Et oui, si vous voulez que quelque chose prenne effet, il doit en fait être présent dans sendmail.cf...
Michael Hampton
1
@MikeB m4 est sensible à la casse - DNLne l'est pas dnl. Désolé mais j'ai vu quelques bugs stupides de m4 dans les réponses avec des scores très élevés dans les sites Stack Exchange.
AnFi
... et donc cela signifie que si je veux qu'une option de configuration explicite prenne effet, elle ne doit PAS avoir dnlou dnl #devant elle ...? et je veux toujours terminer avec dnl?
Mike B
@ AndrzejA.Filip Merci. Le site ne me permettant pas de modifier la question, je l'ai donc rajoutée.
Mike B
3

DNL signifie «supprimer via la nouvelle ligne», ce qui signifie vraiment «ignorer tout après« dnl »jusqu'à la ligne suivante».

Le "dnl #" n'est qu'une nomenclature artificielle. Lorsque le fichier sendmail.mc a été développé pour la première fois, ils voulaient que vous sachiez que tout ce qui était "dnl ..." était une commande / un paramètre qui a été commenté et tout ce qui était "dnl # ..." était vraiment un commentaire descriptif qui n'était pas une commande / un paramètre qui pouvait être décommenté car «#» est souvent utilisé au début d'une ligne pour indiquer «ce qui suit jusqu'à la fin de la ligne» est un commentaire.

TekOps
la source