|         |      1 Exim | 
|         |      2 ==== | 
|         |      3 Heiko Schlittermann | 
|         |      4 :doctype: book | 
|         |      5  | 
|         |      6 Im folgenden nehme ich Bezug auf Exim 4.85. | 
|         |      7 Ultimative Referenz ist immer das Spec-File, also die | 
|         |      8 Referenzdokumentation, die den Exim begleitet. Einige Details werden | 
|         |      9 hier ausgelassen werden. | 
|         |     10  | 
|         |     11 == Konfigurationsdatei | 
|         |     12  | 
|         |     13 Exim sucht beim Start nach genau einer Konfigurationsdatei. | 
|         |     14 Diese lässt sich mit  | 
|         |     15  | 
|         |     16     exim -bP configure_file | 
|         |     17  | 
|         |     18 anzeigen. | 
|         |     19  | 
|         |     20  | 
|         |     21 === Format der Konfigurationsdatei | 
|         |     22  | 
|         |     23 Die Konfigurationsdatei beginnt mit einem globalen Teil, es folgen | 
|         |     24 Abschnitte für ACL, Router, Transports, Address-Rewriting, | 
|         |     25 Retry-Verhalten und Authentifizierung. | 
|         |     26  | 
|         |     27 Kommentare sind erlaubt - das sind Zeilen, die mit dem Rautenzeichen (#) | 
|         |     28 beginnen. Vor der Raute ist lediglich Whitespace erlaubt. Rautenzeichen | 
|         |     29 an anderen Stellen sind *kein* Kommentar. | 
|         |     30  | 
|         |     31 Der Parser der Konfigurationsdatei ist relativ simpel: | 
|         |     32  | 
|         |     33 . Kommentarzeilen werden entfernt | 
|         |     34 . Fortsetzungszeilen werden zusammengesetzt | 
|         |     35  | 
|         |     36 Es ist also möglich, auch innerhalb von Fortsetzungszeilen Kommentare zu | 
|         |     37 verwenden: | 
|         |     38  | 
|         |     39 ---- | 
|         |     40     domainlist local_domains = example.com \ | 
|         |     41 			       # foo bar comment | 
|         |     42 			       : example.org \ | 
|         |     43 			       : example.net | 
|         |     44 ---- | 
|         |     45  | 
|         |     46  | 
|         |     47 ==== Macros | 
|         |     48  | 
|         |     49 In der Konfigurationsdatei dürfen Macros enthalten sein. Macros bestehen | 
|         |     50 ausschließlich aus Großbuchstaben und Ziffern. | 
|         |     51  | 
|         |     52 ---- | 
|         |     53     FOOBAR = foo bar | 
|         |     54     FOO = bar | 
|         |     55 ---- | 
|         |     56  | 
|         |     57 Die Macros sind ein sehr einfacher Textersetzungsmechanismus, der | 
|         |     58 während des Einlesens der der Konfiguration stattfindet. Die Gültigkeit | 
|         |     59 der Macros beginnt an der Stelle ihrer Definition. Macro-Namen dürfen | 
|         |     60 nicht in später definierten Macro-Namen enthalten sein. Eine | 
|         |     61 Neudefinition von Macros ist jederzeit möglich: | 
|         |     62  | 
|         |     63 ---- | 
|         |     64     FOO = bar | 
|         |     65     … | 
|         |     66     FOO == foobar | 
|         |     67 ---- | 
|         |     68  | 
|         |     69 Macros, die auf der Kommandozeile beim Aufruf des Exim gesetzt werden, | 
|         |     70 haben Vorrang vor denen, die in der Konfiguration definiert sind. Aus | 
|         |     71 Sicherheitsgründen legt Exim aber seine setuid-Rechte ab, sobald auf der | 
|         |     72 Kommandozeile Macros definiert sind. | 
|         |     73 footnote:[Mit Ausnahme von Macros, die in einer zur Build-Zeit | 
|         |     74 definierten Whitelist stehen.] | 
|         |     75  | 
|         |     76     exim -DFOO=bar … | 
|         |     77  | 
|         |     78 ==== Includes | 
|         |     79  | 
|         |     80 Die Konfigurationsdatei darf weitere Konfigurationsdateien | 
|         |     81 referenzieren. Diese werden mit `.include`  oder mit | 
|         |     82 `.include_if_exists` eingelesen. Ebenso ist ein bedingtes Lesen von | 
|         |     83 Teilen der Konfiguration möglich: `.ifdef` erlaubt hier den Test von | 
|         |     84 Macros. |