
diff -r a9c30a9d07e4 -r b2f6ea236243 mk2014.tex
--- a/mk2014.tex	Fri May 02 13:01:50 2014 +0200
+++ b/mk2014.tex	Fri May 02 17:03:05 2014 +0200
@@ -68,7 +68,7 @@
 
 \begin{frame}[fragile]{Konfiguration}{Struktur}
 \begin{itemize}
-	\item Main (global)
+	\item Globaler Teil (ca. 240 Direktiven)
 	\item Access-Control-Lists für SMTP: \verb=begin acl=
 	\item Routing-Regeln (ACL und Routing): \verb=begin routers=
 	\item Transport-Definitionen: \verb=begin transports=
@@ -85,19 +85,102 @@
 	BASE = dc=example,dc=com
 \end{verbatim}\end{exampleblock}
 
-\begin{exampleblock}{Direktiven}\scriptsize\begin{verbatim}
-	primary_hostname = mail.example.com
-	smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}}
-\end{verbatim}\end{exampleblock}
-
 \begin{exampleblock}{Listen}\scriptsize\begin{verbatim}
 	domainlist local_domains = example.com : example.org
 	domains = +local_domains
 \end{verbatim}\end{exampleblock}
 
+\begin{exampleblock}{Direktiven (ca. 580)}\scriptsize\begin{verbatim}
+	primary_hostname = mail.example.com
+	smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}}
+\end{verbatim}\end{exampleblock}
+
+\end{frame}
+
+\begin{frame}[fragile]{String-Expansionen / Listen / File- und Datenbank-Lookups}
+Etwa die Hälfte der Konfigurationsdirektiven erlaubt
+Variablensubstitution (Expansion)zur Laufzeit.
+Testen kann man diese sehr einfach mit \verb=exim -be '…'=
+\scriptsize
+\begin{verbatim}
+	exim -be '$primary_hostname'
+	exim -oMi 1.1.1.1 -oMa 2.2.2.2 -be '$sender_host_address -> $received_ip_address'
+	exim -be '${lookup{root}lsearch{/etc/aliases}}'
+	exim -be '${lookup dnsdb{mx=heise.de}}'
+\end{verbatim}
+
+\begin{description}
+\item[Variablen] \verb=$local_part=, \verb=${local_part}=
+\item[String-Ops] \verb=${sha1:$local_part}=, \verb=${uc:$domain}=
+\item[String-Manipulation] \verb=${sg{$local_part}{.laus}{***}}=
+\item[Conditional] \verb=${if eq{$local_part}{xxx} {~xxx/.mbox}{/var/mail/$local_part}}=
+\item[Lookup single key] \verb=${lookup{$local_part}lsearch{/etc/aliases}}=
+\item[Lookup query style] \verb+${lookup dnsdb{mx=heise.de}}+
+\end{description}
+\end{frame}
+
+\begin{frame}[fragile]{String-Expansion}{Variablen}
+Es gibt knapp 200 Variablen, Referenzierung als \verb=$<var>= oder
+\verb=${<var>}=.
+\begin{itemize}
+\item Empfänger: \verb=$local_part=, \verb=$domain=, \verb=$local_part_prefix=
+\item Sender: \verb=$sender_local_part=
+\item Message: \verb=$message_line_count=, \verb=$message_size=, \verb=$message_headers=
+\item Content: \verb=$spam_score_int=, \verb=$malware_name=
+\item Routing: \verb=$original_domain=
+\item System: \verb=$load_average=, \verb=$log\_space=, \verb=$pid=
+\item Operation: \verb=$received_interface_address=, \verb=$tls_out_peerdn=, \verb=$tls_out_bits=
+\end{itemize}
 \end{frame}
 
-\begin{frame}{String-Expansionen / Listen / File- und Datenbank-Lookups}
+% items
+% <var> ${<op>:<var>} ${<func>[{arg}…]} ${if <cond>[{arg}…] }
+% operators
+% 
+
+\begin{frame}[fragile]{String-Expansion}{String-Operationen}
+Einfache Manipulation von Zeichenketten sind möglich:
+\verb=${<op>:<string>}=
+\begin{itemize}
+\item Konvertierung \verb=${uc:$local_part}=, \verb=${sha1:$domain}=, \verb=${time_eval:2d4h}=
+\item Extraktion \verb=${length_3:$domain}=, \verb=${substr_1_3:$domain}=, \verb=${addresses:$h_from}=
+\item Arithmetik \verb=${eval:40 + 2}=, \verb=${40 + 2k}=, \verb=${eval:8 << 2}=
+\item Filesystem \verb=${stat:/etc/hosts}=
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]{String-Expansion}{Bedingte Expansion}
+Expansion kann von Bedingungen abhängig gemacht werden:
+\begin{verbatim}
+	${if <op>[{arg}…]}
+	${if <op>[{arg}…] {<value1>}[{<value2>}]}
+	${if <op>[{arg}…] {<value1>}fail}
+\end{verbatim}
+\begin{itemize}
+\item Definedness \verb=defined:tls_cipher=
+\item Vergleiche \verb=eq{foo}{bar}=, \verb+=={1}{1}+
+\item …
+\end{itemize}
+\end{frame}
+
+\begin{frame}{ACL (SMTP-Phasen, Address-Überprüfung, Rate-Limiting, Content-Scan)}
+\begin{itemize}
+\item Eingehende SMTP-Verbindungen (und in Grenzen auch
+	nicht-SMTP)-Verbindungen müssen ACL überwinden.
+\item Für jede Phase der SMTP-Kommunikation gibt es einen
+ACL-Einstiegspunkt, z.B.:\scriptsize\begin{verbatim}
+	acl_smtp_connect = <name of connect acl>
+	acl_smtp_rcpt = <name of recipient acl>
+	acl_smtp_data = <name of recipient acl>
+\end{verbatim}
+\item ACL entscheidet: accept, reject, defer, warn (noop)
+\item ACL Bedingungen: domains, DNS-BL, Verify (Sender/Empfänger), …, 
+ condition
+\item ACL können die interne Behandlung der Nachricht beeinflussen
+(queue\_only, submission, …)
+\item ACL können Variablen setzen, die später (Router, Transports)
+verwendet werden
+\end{itemize}
 \end{frame}
 
 \begin{frame}{Router (allg. Optionen und die einzelnen Router accept, dnslookup, manualroute, …)}
@@ -106,9 +189,6 @@
 \begin{frame}{Transports (allg. Optionen und die einzelnen Transports smtp, appendfile, …)}
 \end{frame}
 
-\begin{frame}{ACL (SMTP-Phasen, Address-Überprüfung, Rate-Limiting, Content-Scan)}
-\end{frame}
-
 \begin{frame}{Logging (mainlog, rejectlog, paniclog)}
 \end{frame}
 




