Jaka jest różnica między „dnl” i „dnl #” w pliku sendmail.mc?

10

Jaka jest różnica między dnli dnl #w /etc/mail/sendmail.mcpliku? Jeśli chcę włączyć coś, co musi być z przodu? Podobnie, jeśli chcę coś „skomentować”, jakiego prefiksu potrzebuję?

Na przykład:

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.
źródło

Odpowiedzi:

16

Istnieje subtelna, ale ważna różnica pomiędzy dnli #tutaj.

dnloznacza „usuń przez nową linię” . Kiedy przetworzysz swój sendmail.mcw za sendmail.cfpomocą m4(lub ewentualnie frontend), znaki dnli wszystko, co następuje po nich, w tym następny nowy wiersz, zostaną usunięte. (I wszystkie te linie kończą się na, dnlaby ukryć dodatkowe puste linie na sendmail.cfwyjściu.)

Nic poczynając dnlpoprzez końca linii uczyni to z sendmail.mci do sendmail.cf.

Wszystko, co pozostanie w danych wyjściowych, będzie albo konfiguracją sendmaila, albo komentarzem rozpoczynającym się od #, który zostanie skopiowany w stanie „jak jest” sendmail.cf, gdzie zostanie zignorowany.

Wszystko, co zacznie się od #powyższego i nie zostanie usunięte, sprawi, że stanie się ono sendmail.cfniezauważone jako komentarz.

W twoim przykładzie ktoś chciał usunąć wszystkie skomentowane funkcje sendmail.cf, a także komentarze, ponieważ komentarze byłyby bez znaczenia bez tych funkcji.

Michael Hampton
źródło
1
Nie musisz kończyć linii, dnlale otrzymasz dodatkowe puste linie sendmail.cf. I tak, jeśli chcesz, aby coś zaczęło obowiązywać, musi faktycznie być obecne w sendmail.cf...
Michael Hampton
1
@MikeB m4 rozróżnia wielkość liter - DNLnie dnl. Przepraszam, ale widziałem kilka głupich błędów M4 w answears z bardzo wysokimi wynikami na stronach Stack Exchange.
AnFi
... i tak to znaczy, jeśli chcę opcja konfiguracja wyraźny odniosły skutek, że nie może mieć dnlani dnl #przed nim ...? i zawsze będę chciał zakończyć to dnl?
Mike B
@ AndrzejA.Filip Thanks. Strona nie pozwoliła mi edytować pytania, więc dodałem je ponownie.
Mike B
3

DNL oznacza „usuń przez nowy wiersz”, co tak naprawdę oznacza „zignoruj ​​wszystko po„ dnl ”do następnego wiersza”.

„Dnl #” to po prostu sztuczna nomenklatura. Kiedy plik sendmail.mc został opracowany po raz pierwszy, chcieli, abyś wiedział, że wszystko, co było „dnl ...”, było komendą / ustawieniem, które zostało skomentowane, a wszystko, co było „dnl # ...”, było naprawdę opisowym komentarzem, który nie było poleceniem / ustawieniem, którego nie można odkomentować, ponieważ „#” jest często używane na początku wiersza, aby wskazać „co następuje do końca wiersza” jest komentarzem.

TekOps
źródło