05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

398 7 Client-/Server-Programmierung <strong>mit</strong> Open<strong>SSL</strong><br />

1–24<br />

26–33<br />

Zu Beginn von Beispiel 7.11 findet sich zunächst die bereits vertraute Signalbehandlungsroutine<br />

sig_handler(), die nach dem Empfang eines SIGTERM-<br />

Signals wie üblich über die globale Variable daemon_exit anzeigt, daß der<br />

Dæmon seine Dienste einstellen soll. Außerdem wird eine zweite globale Variable<br />

ctx vereinbart, in der später eine Referenz auf den gemeinsam genutzten<br />

<strong>SSL</strong>-Kontext gespeichert wird. Anders als in Beispiel 7.9 muß dadurch nicht<br />

für jede neue <strong>SSL</strong>-Verbindung ein neuer <strong>SSL</strong>-Kontext erstellt werden.<br />

Die Hilfsfunktion errors2syslog() gibt im Fall eines Fehlers die komplette<br />

Error-Queue über den Syslog-Dienst aus. Sie ersetzt da<strong>mit</strong> die Funktion<br />

ERR_print_errors_fp(), sobald sich der Dæmon in den Hintergr<strong>und</strong> gelegt<br />

<strong>und</strong> da<strong>mit</strong> den Zugriff auf das Terminal verloren hat.<br />

1 #include <br />

2 #include <br />

3 #include <br />

4 #include <br />

5 #include <br />

6 #include <br />

7 #include <br />

8<br />

9 #include <br />

10 #include <br />

11 #include <br />

12<br />

13 #include "openssl -lib-init.h"<br />

14 #include "openssl -util.h"<br />

15 #include "server.h"<br />

16<br />

17 int daemon_exit = 0;<br />

18 <strong>SSL</strong>_CTX *ctx;<br />

19<br />

20 void sig_handler( int sig )<br />

21 {<br />

22 daemon_exit = 1;<br />

23 return;<br />

24 }<br />

25<br />

26 void errors2syslog( void )<br />

27 {<br />

28 unsigned long code;<br />

29<br />

Beispiel 7.11. bio-ssl-smtpsrv.c, Teil 1<br />

30 /* Solange ein Fehler in der Queue ist, gilt code != 0 */<br />

31 while( ( code = ERR_get_error() ) != 0 )<br />

32 syslog( LOG_ERR , "%s", ERR_error_string( code, NULL ) );<br />

33 }

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!