Репозитории ALT
S: | 3.7.0-alt0.6 |
4.1: | 2.2.9-alt1.1 |
4.0: | 2.2.9-alt1.1 |
3.0: | 1.0.4-alt1 |
Группа :: Сети/Почта
Пакет: sylpheed
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: sylpheed-1.0.4-cvs-gmail-smtp-workaround.patch
Скачать
Скачать
2005-04-05
* src/send_message.c: send_message_smtp(): consider EOF right after
QUIT successful (workaround for Gmail SMTP server).
* src/socket.c: ssl_read(), ssl_peek(): check EOF which violates the
SSL protocol.
Index: src/send_message.c
===================================================================
RCS file: /cvsroot/sylpheed/sylpheed/src/send_message.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -p -r1.16 -r1.17
--- src/send_message.c 7 Oct 2004 08:54:14 -0000 1.16
+++ src/send_message.c 5 Apr 2005 10:57:19 -0000 1.17
@@ -1,6 +1,6 @@
/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -412,6 +412,11 @@ static gint send_message_smtp(PrefsAccou
ac_prefs->tmp_smtp_pass = NULL;
}
ret = -1;
+ } else if (session->state == SESSION_EOF &&
+ SMTP_SESSION(session)->state == SMTP_QUIT) {
+ /* consider EOF right after QUIT successful */
+ log_warning("%s\n", _("Connection closed by the remote host."));
+ ret = 0;
} else if (session->state == SESSION_ERROR ||
session->state == SESSION_EOF ||
session->state == SESSION_TIMEOUT ||
Index: src/socket.c
===================================================================
RCS file: /cvsroot/sylpheed/sylpheed/src/socket.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -p -r1.34 -r1.35
--- src/socket.c 4 Aug 2004 09:07:57 -0000 1.34
+++ src/socket.c 5 Apr 2005 10:57:19 -0000 1.35
@@ -988,7 +988,7 @@ gint fd_read(gint fd, gchar *buf, gint l
#if USE_SSL
gint ssl_read(SSL *ssl, gchar *buf, gint len)
{
- gint ret;
+ gint err, ret;
if (SSL_pending(ssl) == 0) {
if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
@@ -997,14 +997,19 @@ gint ssl_read(SSL *ssl, gchar *buf, gint
ret = SSL_read(ssl, buf, len);
- switch (SSL_get_error(ssl, ret)) {
+ switch ((err = SSL_get_error(ssl, ret))) {
case SSL_ERROR_NONE:
return ret;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
errno = EAGAIN;
return -1;
+ case SSL_ERROR_ZERO_RETURN:
+ return 0;
default:
+ g_warning("SSL_read() returned error %d, ret = %d\n", err, ret);
+ if (ret == 0)
+ return 0;
return -1;
}
}
@@ -1231,7 +1236,7 @@ gint sock_puts(SockInfo *sock, const gch
#if USE_SSL
gint ssl_peek(SSL *ssl, gchar *buf, gint len)
{
- gint ret;
+ gint err, ret;
if (SSL_pending(ssl) == 0) {
if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0)
@@ -1240,14 +1245,19 @@ gint ssl_peek(SSL *ssl, gchar *buf, gint
ret = SSL_peek(ssl, buf, len);
- switch (SSL_get_error(ssl, ret)) {
+ switch ((err = SSL_get_error(ssl, ret))) {
case SSL_ERROR_NONE:
return ret;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
errno = EAGAIN;
return -1;
+ case SSL_ERROR_ZERO_RETURN:
+ return 0;
default:
+ g_warning("SSL_peek() returned error %d, ret = %d\n", err, ret);
+ if (ret == 0)
+ return 0;
return -1;
}
}