Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package imapfilter for openSUSE:Factory checked in at 2024-01-03 12:25:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/imapfilter (Old) and /work/SRC/openSUSE:Factory/.imapfilter.new.28375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "imapfilter" Wed Jan 3 12:25:51 2024 rev:50 rq:1135768 version:2.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/imapfilter/imapfilter.changes 2023-05-29 22:47:54.426338143 +0200 +++ /work/SRC/openSUSE:Factory/.imapfilter.new.28375/imapfilter.changes 2024-01-03 12:25:54.309487900 +0100 @@ -1,0 +2,9 @@ +Sat Dec 30 16:37:02 UTC 2023 - Dirk Müller <[email protected]> + +- update to 2.8.2: + * Add IMAP support for UTF-8 (RFC 6855) when "charset" is + set to "UTF-8" + * Don't use FETCH FAST macro use for better compatibility + * Bug fix; recovery mechanism error on Lua 5.1 + +------------------------------------------------------------------- Old: ---- imapfilter-2.8.1.tar.gz New: ---- imapfilter-2.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ imapfilter.spec ++++++ --- /var/tmp/diff_new_pack.NHUk7s/_old 2024-01-03 12:25:55.913546507 +0100 +++ /var/tmp/diff_new_pack.NHUk7s/_new 2024-01-03 12:25:55.933547239 +0100 @@ -17,7 +17,7 @@ Name: imapfilter -Version: 2.8.1 +Version: 2.8.2 Release: 0 Summary: A mail filtering utility License: MIT ++++++ imapfilter-2.8.1.tar.gz -> imapfilter-2.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/NEWS new/imapfilter-2.8.2/NEWS --- old/imapfilter-2.8.1/NEWS 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/NEWS 2023-12-26 20:20:05.000000000 +0100 @@ -1,3 +1,8 @@ +IMAPFilter 2.8.2 - Dec 26, 2023 + - Add IMAP support for UTF-8 (RFC 6855) when "charset" is set to "UTF-8" + - Don't use FETCH FAST macro use for better compatibility + - Bug fix; recovery mechanism error on Lua 5.1 + IMAPFilter 2.8.1 - Jan 8, 2023 - Add support for non-write actions on read-only mailboxes. - Add new parameter to write process ID (PID) to file. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/doc/imapfilter.1 new/imapfilter-2.8.2/doc/imapfilter.1 --- old/imapfilter-2.8.1/doc/imapfilter.1 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/doc/imapfilter.1 2023-12-26 20:20:05.000000000 +0100 @@ -1,4 +1,4 @@ -.Dd Jan 6, 2023 +.Dd Dec 26, 2023 .Dt IMAPFILTER 1 .Os .Sh NAME @@ -94,7 +94,7 @@ .Bl -tag -width Ds .It IMAP4rev1: RFC 3501, RFC 3348, RFC 2683, RFC 2595, RFC 2342, RFC 2195, -RFC 2177 +RFC 2177, RFC 5161, RFC 6855 .It IMAP4: RFC 1730 .El diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/auxiliary.lua new/imapfilter-2.8.2/src/auxiliary.lua --- old/imapfilter-2.8.1/src/auxiliary.lua 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/auxiliary.lua 2023-12-26 20:20:05.000000000 +0100 @@ -73,11 +73,11 @@ count = 0 while true do - local r = table.pack(pcall(commands)) + local r = {pcall(commands)} if retries == nil or count < retries then - if r[1] then return table.unpack(r) end + if r[1] then return r end else - if not r[1] then return table.unpack(r) end + if not r[1] then return r end end collectgarbage() count = count + 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/imapfilter.h new/imapfilter-2.8.2/src/imapfilter.h --- old/imapfilter-2.8.1/src/imapfilter.h 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/imapfilter.h 2023-12-26 20:20:05.000000000 +0100 @@ -33,6 +33,8 @@ #define CAPABILITY_CHILDREN 0x04 #define CAPABILITY_IDLE 0x08 #define CAPABILITY_XOAUTH2 0x10 +#define CAPABILITY_ENABLE 0x20 +#define CAPABILITY_UTF8 0x40 /* Status responses and response codes. */ #define STATUS_BYE -2 @@ -135,8 +137,8 @@ char *xstrncpy(char *dest, const char *src, size_t size); /* namespace.c */ -const char *apply_namespace(const char *mbox, char *prefix, char delim); -const char *reverse_namespace(const char *mbox, char *prefix, char delim); +const char *apply_namespace(const char *mbox, session *ssn); +const char *reverse_namespace(const char *mbox, session *ssn); /* pcre.c */ LUALIB_API int luaopen_ifre(lua_State *lua); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/namespace.c new/imapfilter-2.8.2/src/namespace.c --- old/imapfilter-2.8.1/src/namespace.c 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/namespace.c 2023-12-26 20:20:05.000000000 +0100 @@ -3,6 +3,7 @@ #include <errno.h> #include "imapfilter.h" +#include "session.h" #include "buffer.h" @@ -23,7 +24,7 @@ * by the mail server, from internal to mail server format. */ const char * -apply_namespace(const char *mbox, char *prefix, char delim) +apply_namespace(const char *mbox, session *ssn) { int n; char *c; @@ -32,22 +33,24 @@ if (!strcasecmp(mbox, "INBOX")) return mbox; - m = apply_conversion(mbox); + m = mbox; + if (!ssn->utf8) + m = apply_conversion(mbox); - if ((prefix == NULL && delim == '\0') || - (prefix == NULL && delim == '/')) + if ((ssn->ns.prefix == NULL && ssn->ns.delim == '\0') || + (ssn->ns.prefix == NULL && ssn->ns.delim == '/')) return m; buffer_reset(&nbuf); - n = snprintf(nbuf.data, nbuf.size + 1, "%s%s", (prefix ? prefix : ""), - m); + n = snprintf(nbuf.data, nbuf.size + 1, "%s%s", + (ssn->ns.prefix ? ssn->ns.prefix : ""), m); if (n > (int)nbuf.size) { buffer_check(&nbuf, n); snprintf(nbuf.data, nbuf.size + 0, "%s%s", - (prefix ? prefix : ""), m); + (ssn->ns.prefix ? ssn->ns.prefix : ""), m); } - for (c = nbuf.data; (c = strchr(c, '/')) != NULL; *(c++) = delim); + for (c = nbuf.data; (c = strchr(c, '/')) != NULL; *(c++) = ssn->ns.delim); debug("namespace: '%s' -> '%s'\n", m, nbuf.data); @@ -60,7 +63,7 @@ * the mail server, from mail server format to internal format. */ const char * -reverse_namespace(const char *mbox, char *prefix, char delim) +reverse_namespace(const char *mbox, session *ssn) { int n, o; char *c; @@ -68,14 +71,17 @@ if (!strcasecmp(mbox, "INBOX")) return mbox; - if ((prefix == NULL && delim == '\0') || - (prefix == NULL && delim == '/')) - return reverse_conversion(mbox); + if ((ssn->ns.prefix == NULL && ssn->ns.delim == '\0') || + (ssn->ns.prefix == NULL && ssn->ns.delim == '/')) { + if (!ssn->utf8) + return reverse_conversion(mbox); + return mbox; + } buffer_reset(&nbuf); - o = strlen(prefix ? prefix : ""); - if (strncasecmp(mbox, (prefix ? prefix : ""), o)) + o = strlen(ssn->ns.prefix ? ssn->ns.prefix : ""); + if (strncasecmp(mbox, (ssn->ns.prefix ? ssn->ns.prefix : ""), o)) o = 0; n = snprintf(nbuf.data, nbuf.size + 1, "%s", mbox + o); @@ -83,7 +89,7 @@ buffer_check(&nbuf, n); snprintf(nbuf.data, nbuf.size + 1, "%s", mbox + o); } - for (c = nbuf.data; (c = strchr(c, delim)) != NULL; *(c++) = '/'); + for (c = nbuf.data; (c = strchr(c, ssn->ns.delim)) != NULL; *(c++) = '/'); debug("namespace: '%s' <- '%s'\n", mbox, nbuf.data); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/request.c new/imapfilter-2.8.2/src/request.c --- old/imapfilter-2.8.1/src/request.c 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/request.c 2023-12-26 20:20:05.000000000 +0100 @@ -212,6 +212,16 @@ TRY(t = send_request(ssn, "CAPABILITY")); TRY(response_capability(ssn, t)); + if (!strcasecmp(get_option_string("charset"), "UTF-8")) { + if (ssn->capabilities & CAPABILITY_ENABLE && + ssn->capabilities & CAPABILITY_UTF8) { + TRY(t = send_request(ssn, "ENABLE UTF8=ACCEPT")); + TRY(r = response_generic(ssn, t)); + if (r == STATUS_OK) + ssn->utf8 = 1; + } + } + if (ssn->capabilities & CAPABILITY_NAMESPACE && get_option_boolean("namespace")) { TRY(t = send_request(ssn, "NAMESPACE")); @@ -251,7 +261,7 @@ int t, r; const char *m; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); if (ssn->protocol == PROTOCOL_IMAP4REV1) { TRY(t = send_request(ssn, @@ -275,7 +285,7 @@ int t, r; const char *m; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "SELECT \"%s\"", m)); TRY(r = response_select(ssn, t)); @@ -327,7 +337,7 @@ int t, r; const char *n; - n = apply_namespace(name, ssn->ns.prefix, ssn->ns.delim); + n = apply_namespace(name, ssn); TRY(t = send_request(ssn, "LIST \"%s\" \"%s\"", refer, n)); TRY(r = response_list(ssn, t, mboxs, folders)); @@ -346,7 +356,7 @@ int t, r; const char *n; - n = apply_namespace(name, ssn->ns.prefix, ssn->ns.delim); + n = apply_namespace(name, ssn); TRY(t = send_request(ssn, "LSUB \"%s\" \"%s\"", refer, n)); TRY(r = response_list(ssn, t, mboxs, folders)); @@ -364,7 +374,7 @@ { int t, r; - if (charset != NULL && *charset != '\0') { + if (charset != NULL && *charset != '\0' && !ssn->utf8) { TRY(t = send_request(ssn, "UID SEARCH CHARSET \"%s\" %s", charset, criteria)); } else { @@ -385,7 +395,7 @@ { int t, r; - TRY(t = send_request(ssn, "UID FETCH %s FAST", mesg)); + TRY(t = send_request(ssn, "UID FETCH %s (FLAGS INTERNALDATE RFC822.SIZE)", mesg)); TRY(r = response_fetchfast(ssn, t, flags, date, size)); return r; @@ -567,7 +577,7 @@ if (opts.dryrun) return STATUS_DRYRUN; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "UID COPY %s \"%s\"", mesg, m)); TRY(r = response_generic(ssn, t)); @@ -601,7 +611,7 @@ if (opts.dryrun) return STATUS_DRYRUN; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "APPEND \"%s\"%s%s%s%s%s%s {%d}", m, (flags ? " (" : ""), (flags ? flags : ""), @@ -650,7 +660,7 @@ if (opts.dryrun) return STATUS_DRYRUN; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "CREATE \"%s\"", m)); TRY(r = response_generic(ssn, t)); @@ -671,7 +681,7 @@ if (opts.dryrun) return STATUS_DRYRUN; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "DELETE \"%s\"", m)); TRY(r = response_generic(ssn, t)); @@ -692,8 +702,8 @@ if (opts.dryrun) return STATUS_DRYRUN; - o = xstrdup(apply_namespace(oldmbox, ssn->ns.prefix, ssn->ns.delim)); - n = xstrdup(apply_namespace(newmbox, ssn->ns.prefix, ssn->ns.delim)); + o = xstrdup(apply_namespace(oldmbox, ssn)); + n = xstrdup(apply_namespace(newmbox, ssn)); TRY(t = send_request(ssn, "RENAME \"%s\" \"%s\"", o, n)); TRY(r = response_generic(ssn, t)); @@ -714,7 +724,7 @@ if (opts.dryrun) return STATUS_DRYRUN; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "SUBSCRIBE \"%s\"", m)); TRY(r = response_generic(ssn, t)); @@ -735,7 +745,7 @@ if (opts.dryrun) return STATUS_DRYRUN; - m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); + m = apply_namespace(mbox, ssn); TRY(t = send_request(ssn, "UNSUBSCRIBE \"%s\"", m)); TRY(r = response_generic(ssn, t)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/response.c new/imapfilter-2.8.2/src/response.c --- old/imapfilter-2.8.1/src/response.c 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/response.c 2023-12-26 20:20:05.000000000 +0100 @@ -350,6 +350,10 @@ ssn->capabilities |= CAPABILITY_IDLE; if (xstrcasestr(s, "AUTH=XOAUTH2")) ssn->capabilities |= CAPABILITY_XOAUTH2; + if (xstrcasestr(s, "ENABLE")) + ssn->capabilities |= CAPABILITY_ENABLE; + if (xstrcasestr(s, "UTF8=ACCEPT")) + ssn->capabilities |= CAPABILITY_UTF8; xfree(s); } @@ -535,7 +539,7 @@ s = xstrndup(b + re->pmatch[8].rm_so, strtoul(b + re->pmatch[7].rm_so, NULL, 10)); - v = reverse_namespace(s, ssn->ns.prefix, ssn->ns.delim); + v = reverse_namespace(s, ssn); n = strlen(v); if (!xstrcasestr(a, "\\NoSelect")) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/session.c new/imapfilter-2.8.2/src/session.c --- old/imapfilter-2.8.1/src/session.c 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/session.c 2023-12-26 20:20:05.000000000 +0100 @@ -41,6 +41,7 @@ ssn->capabilities = CAPABILITY_NONE; ssn->ns.prefix = NULL; ssn->ns.delim = '\0'; + ssn->utf8 = 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/session.h new/imapfilter-2.8.2/src/session.h --- old/imapfilter-2.8.1/src/session.h 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/session.h 2023-12-26 20:20:05.000000000 +0100 @@ -16,6 +16,7 @@ char *prefix; /* Namespace prefix. */ char delim; /* Namespace delimiter. */ } ns; + int utf8; /* UTF8 enabled. */ } session; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/imapfilter-2.8.1/src/version.h new/imapfilter-2.8.2/src/version.h --- old/imapfilter-2.8.1/src/version.h 2023-01-08 14:43:35.000000000 +0100 +++ new/imapfilter-2.8.2/src/version.h 2023-12-26 20:20:05.000000000 +0100 @@ -3,7 +3,7 @@ /* Program's version number. */ -#define VERSION "2.8.1" +#define VERSION "2.8.2" /* Program's copyright. */ #define COPYRIGHT "Copyright (c) 2001-2023 Eleftherios Chatzimparmpas"
