isync: 1.4.4 -> 1.5.0

Buffer too small can now be fixed by defining QPRINTF_BUFF.
Patch on unexpected EOF is part of new version.

`QPRINT_BUFF` fix discussed at
https://sourceforge.net/p/isync/mailman/isync-devel/thread/87fsevvebj.fsf%40steelpick.2x.cz/#msg37731590.

Release notes: https://sourceforge.net/projects/isync/files/isync/1.5.0/
This commit is contained in:
Felipe Silva 2024-08-02 12:49:40 -03:00 committed by Peter Hoeg
parent cdce953172
commit c60cc72185
3 changed files with 5 additions and 119 deletions

View File

@ -1,34 +0,0 @@
From e8a3a20aed135272a9ec0103f4055411c075f043 Mon Sep 17 00:00:00 2001
From: Michal Sojka <michal.sojka@cvut.cz>
Date: Mon, 7 Nov 2022 00:07:22 +0100
Subject: [PATCH] Increase imap_vprintf buffer size
This fixes "Fatal: buffer too small. Please report a bug." error. See
https://sourceforge.net/p/isync/mailman/isync-devel/thread/87fsevvebj.fsf%40steelpick.2x.cz/#msg37731590
for related discussion.
When using mbsync with XOAUTH2 authentication (needed for Office365
mailboxes), the access token used for the LOGIN command may not fit
into the currently used buffer of 1000 characters. In my case, I need
the buffer to be at least 2000 characters long. To make this more
future-proof, I increase the buffer size to 4000 characters.
---
src/drv_imap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/drv_imap.c b/src/drv_imap.c
index c5a7aed..7847192 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -528,7 +528,7 @@ imap_vprintf( const char *fmt, va_list ap )
uint totlen = 0;
const char *segs[MAX_SEGS];
uint segls[MAX_SEGS];
- char buf[1000];
+ char buf[4000];
d = buf;
ed = d + sizeof(buf);
--
2.38.1

View File

@ -8,20 +8,16 @@
stdenv.mkDerivation rec {
pname = "isync";
version = "1.4.4";
version = "1.5.0";
src = fetchurl {
url = "mirror://sourceforge/isync/${pname}-${version}.tar.gz";
sha256 = "1zq0wwvmqsl9y71546dr0aygzn9gjjfiw19hlcq87s929y4p6ckw";
sha256 = "oMgeEJOHvyedoWFFMQM5nneUav7PXFH5QTxedzVX940=";
};
patches = [
# Fixes "Fatal: buffer too small" error
./0001-Increase-imap_vprintf-buffer-size.patch
# Fix #202595: SSL error "Socket error: ... unexpected eof while reading"
# Source: https://sourceforge.net/p/isync/isync/ci/b6c36624f04cd388873785c0631df3f2f9ac4bf0/
./work-around-unexpected-EOF-error-messages-at-end-of-SSL-connections.patch
];
# Fixes "Fatal: buffer too small" error
env.NIX_CFLAGS_COMPILE = "-DQPRINTF_BUFF=4000";
nativeBuildInputs = [ pkg-config perl ]
++ lib.optionals withCyrusSaslXoauth2 [ makeWrapper ];

View File

@ -1,76 +0,0 @@
From b6c36624f04cd388873785c0631df3f2f9ac4bf0 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <ossi@users.sf.net>
Date: Mon, 6 Jun 2022 11:55:37 +0200
Subject: [PATCH] work around "unexpected EOF" error messages at end of SSL
connections
gmail apparently doesn't send a close notification (SSL_shutdown())
before closing the TCP socket.
---
src/drv_imap.c | 7 +++++--
src/socket.c | 9 +++++++++
src/socket.h | 1 +
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/drv_imap.c b/src/drv_imap.c
index fb8d165..6286045 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -1620,6 +1620,7 @@ imap_socket_read( void *aux )
error( "IMAP error: unexpected BYE response: %s\n", cmd );
/* We just wait for the server to close the connection now. */
ctx->expectEOF = 1;
+ socket_expect_eof( &ctx->conn );
} else {
/* We still need to wait for the LOGOUT's tagged OK. */
}
@@ -1882,10 +1883,12 @@ static void
imap_cleanup_p2( imap_store_t *ctx,
imap_cmd_t *cmd ATTR_UNUSED, int response )
{
- if (response == RESP_NO)
+ if (response == RESP_NO) {
imap_cancel_store( &ctx->gen );
- else if (response == RESP_OK)
+ } else if (response == RESP_OK) {
ctx->expectEOF = 1;
+ socket_expect_eof( &ctx->conn );
+ }
}
/******************* imap_open_store *******************/
diff --git a/src/socket.c b/src/socket.c
index ac3c847..892cece 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -810,6 +810,15 @@ socket_expect_activity( conn_t *conn, int expect )
conf_wakeup( &conn->fd_timeout, expect ? conn->conf->timeout : -1 );
}
+void
+socket_expect_eof( conn_t *sock )
+{
+#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF // implies HAVE_LIBSSL
+ if (sock->ssl)
+ SSL_set_options( sock->ssl, SSL_OP_IGNORE_UNEXPECTED_EOF );
+#endif
+}
+
int
socket_read( conn_t *conn, char *buf, uint len )
{
diff --git a/src/socket.h b/src/socket.h
index 5b1edd0..af679aa 100644
--- a/src/socket.h
+++ b/src/socket.h
@@ -142,6 +142,7 @@ void socket_start_tls(conn_t *conn, void (*cb)( int ok, void *aux ) );
void socket_start_deflate( conn_t *conn );
void socket_close( conn_t *sock );
void socket_expect_activity( conn_t *sock, int expect );
+void socket_expect_eof( conn_t *sock );
int socket_read( conn_t *sock, char *buf, uint len ); /* never waits */
char *socket_read_line( conn_t *sock ); /* don't free return value; never waits */
typedef enum { KeepOwn = 0, GiveOwn } ownership_t;
--
2.38.0