[archimedes] Re: POP3S Developer Version 24. May 2014

  • From: Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Mon, 26 May 2014 05:54:07 +0200

In message <540d7b8566rh.lists@xxxxxxxxxxxxxx>
          Russell Hafter - Lists <rh.lists@xxxxxxxxxxxxxx> wrote:

>> die neue Version habe ich gerade eben für euch ins Netz
>> gestellt:
>
>> http://home.chiemgau-net.de/ausserstorfer/Studium/Fetcher/GnuTLS/POP3S.zip
>
>> Sie sollte jetzt mit !Messenger genauso wie mit !Pluto
>> funktionieren. Und, ja, zählen tun wir jetzt selbst :-)
>
> Leider nicht, auf jeden Fall bei mir!
>
> Sowohl mit der neuen als auch mit der alten Version.
>
> Die von freenet.de E-mail-headers sind ganz einfach nicht
> vollständig!

Nach endlos langer Suche glaube ich, den Fehler endlich gefunden zu haben.

Das Programm war bisher nur mit web.de getestet, weil hier entsprechende
Forderungen von seitens eines Anwenders vorlagen (an dieser Stelle
herzliche Grüße an diesen - geht's bei dir jetzt eigentlich, Axel? Ich
habe noch keine Rückmeldung von dir erhalten!).

Der POP3S-Server von freenet.de verhält sich aber wahrscheinlich anders
als der von web.de.

Es fällt auf, dass fast genau die ersten 1024 Bytes der E-Mail fehlen.

Mein Programm macht bisher das:

|      // Auslesen der verschluesselten Serverantwort
|      // Holen von +OK?
|         ret = gnutls_record_recv(session,buffer2,MAX_BUF);
|         if (gnutls_error_is_fatal (ret) != 0 || ret == 0)
|           {
|              if (ret == 0)
|                {
|                 printf ("Server canceled the encrypted connection.\n");
|                 goto end;
|                }
|                 else
|                {
|              fprintf (stderr, "**** Error: %s\n", gnutls_strerror(ret));
|              goto end;
|             }
|           }
|
|      // Falls kein +OK zurückkommt, abbrechen
|         if (strncmp(buffer2,"+OK",3)) goto end;
|
|      // Index für Messenger der E-Mail voranstellen
|         fprintf(stream,"#! rmail ");
|         mark1=ftello(stream);
|         fprintf(stream,"000000000000\n");
|
|      // Holen der E-Mail
|      do {
|           ret = gnutls_record_recv(session,buffer2,MAX_BUF);
|           if (gnutls_error_is_fatal (ret) != 0 || ret == 0)
|              {
|                if (ret == 0)
|                  {
|                    printf ("Server canceled the encrypted connection.\n");
|                    goto end;

Das Problem ist die Verwendung von

     ret = gnutls_record_recv(session,buffer2,MAX_BUF);

zweimal hintereinander. Mit dem ersten Mal wird die Serverantwort +OK
ausgelesen. Ab dem zweiten Mal wird die E-Mail ausgelesen.

Nun wird es vermutlich so sein, dass bei freenet.de gleich beim ersten
Mal schon der erste Teil der E-Mail mitgeliefert wird, bzw. diese
startet.

Muss ich ändern. Herzlichen Dank für diesen Hinweis!

Ich bin im Augenblick leider noch damit beschäftigt, StartTLS und die
Überprüfung von digitalen Zertifikaten zu ermöglichen. Beides ist
bereits integriert, funktioniert aber noch nicht so ganz.

Ich hoffe du hast Tee. VIEL Tee.

Ciao,

Alex

-- 
http://home.chiemgau-net.de/ausserstorfer/
Sent wirelessly from RISC OS per LTE


Other related posts: