Telopt STARTTLS: weitere Ausgaben unterbinden.

Die Pruefung auf eine aktive Verhandlung in logon2()
ging irgendwann verloren und wurde wieder ergaenzt.
Ausserdem an zwei Stellen im Telnegshandler pruefen, ob
eine Verhandlung laeuft.

Change-Id: I15333d719c7f53c187f52e4fdc28b04fbce8d8e9
diff --git a/secure/login.c b/secure/login.c
index bd8726e..d51402a 100644
--- a/secure/login.c
+++ b/secure/login.c
@@ -169,26 +169,6 @@
   tls_init_connection(this_object(), #'tls_init_callback);
 }
 
-// Wenn der Client via STARTTLS eine TLS negotiation angestossen hat und
-// die noch laeuft, darf keine Ausgabe erfolgen. In diesem Fall wird das
-// Loginverfahren ausgesetzt, bis die TLS-Verhandlung abgeschlossen ist.
-// Danach wird es fortgesetzt bzw. neugestartet. Dies gilt auch fuer Fall,
-// dass STARTTLS verhandelt wurde, aber die TLS-Verhandlung noch nicht
-// laeuft. (Bemerkung: beides pruefen ist nicht ueberfluessig. Den Zustand
-// der Telnet-Option muss man pruefen, weil der Client evtl. seine
-// Verhandlung noch nicht signalisiert hat (FOLLOWS vom Client) und die
-// efun muss man pruefen, weil nach Empfang von FOLLOWS vom Client der
-// Status der Telnet-Optiosn resettet wurde - standardkonform.)
-private int check_tls_negotiation()
-{
-  struct telopt_s s_tls = query_telnet_neg()[TELOPT_STARTTLS];
-  if (tls_query_connection_state(this_object()) < 0
-      || (structp(s_tls) && s_tls->state->remoteside) )
-    return 1;
-
-  return 0;
-}
-
 /*
  * This is the function that gets called by /secure/master for every user
  */
@@ -348,6 +328,10 @@
     int i, arg;
     mixed txt;
 
+    // ggf. muss TLS (initiiert durch STARTTLS) noch ausverhandelt werden.
+    if (check_tls_negotiation())
+      return;
+
     if ( !str || str == "" ){
         write( "Abbruch!\n" );
         destruct( this_object() );