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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

7.4 Client-/Server-Beispiel: SMTP <strong>mit</strong> SARTTLS 393<br />

89–102<br />

Im Anschluß wird <strong>mit</strong>tels tcp_connect() eine neue TCP-Verbindung zum<br />

angegebenen SMTP-Server aufgebaut. Der SMTP-Client versucht dabei, den<br />

Server auf dem Submission-Port 587 zu kontaktieren. Ein Fehler beim Verbindungsaufbau<br />

führt un<strong>mit</strong>telbar zum Programmabbruch. Die neue TCP-<br />

Verbindung wird dann <strong>mit</strong>tels build_tcp_chain() <strong>mit</strong> einer neuen, gepufferten<br />

Socket-BIO-Kette verknüpft. Tritt dabei ein Fehler auf, beendet sich das<br />

Clientprogramm <strong>mit</strong> einer entsprechenden Fehlermeldung.<br />

Beispiel 7.10. bio-ssl-smtpcli2.c, Teil 2<br />

71 int main( int argc, char *argv[] )<br />

72 {<br />

73 BIO *bio;<br />

74 int srv;<br />

75<br />

76 if( argc != 2 )<br />

77 {<br />

78 printf( "Usage: %s smtp-host\n", argv[0] );<br />

79 exit( EXIT_FAILURE );<br />

80 }<br />

81<br />

82 /* <strong>SSL</strong>-Bibliothek <strong>und</strong> PRNG initialisieren */<br />

83 if( ! openssl_lib_init() )<br />

84 {<br />

85 printf( "Library/PRNG initialization failed.\n" );<br />

86 exit( EXIT_FAILURE );<br />

87 }<br />

88<br />

89 /* Neue TCP-Verbindung zum Server aufbauen */<br />

90 if( ( srv = tcp_connect( argv[1], "587" ) ) < 0 )<br />

91 {<br />

92 printf( "tcp_connect() failed.\n" );<br />

93 exit( EXIT_FAILURE );<br />

94 }<br />

95<br />

96 /* gepuffertes BIO zur TCP-Kommunikation erstellen */<br />

97 if( ! ( bio = build_tcp_chain( srv ) ) )<br />

98 {<br />

99 printf( "build_tcp_chain() failed.\n" );<br />

100 ERR_print_errors_fp( stdout );<br />

101 exit( EXIT_FAILURE );<br />

102 }<br />

103<br />

104 /* Frage/Antwort -Spielchen <strong>mit</strong> abschließenden STARTTLS */<br />

105 print_smtp_response( bio );<br />

106 send_smtp_request( bio, "EHLO indien\n" );<br />

107 print_smtp_response( bio );<br />

108 send_smtp_request( bio, "STARTTLS\n" );

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!