Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37900130
en ru br
Репозитории 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
www.altlinux.org/Changes

Группа :: Сети/Почта
Пакет: 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;
 	}
 }
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin