Accepting request 45318 from GNOME:Factory
Copy from GNOME:Factory/libesmtp based on submit request 45318 from user vuntz OBS-URL: https://build.opensuse.org/request/show/45318 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libesmtp?expand=0&rev=9
This commit is contained in:
parent
1c41633f0b
commit
c0d174396d
@ -1,67 +0,0 @@
|
||||
From: Bernhard Walle <bwalle@suse.de>
|
||||
Subject: [PATCH] Allow multiple Cc and Bcc header calls
|
||||
|
||||
This patch modifies the library so that smtp_set_header() can be called
|
||||
multiple times. One header will be generated with a comma-separated list
|
||||
of values.
|
||||
|
||||
That's the behaviour as described in the API documentation at
|
||||
http://www.stafford.uklinux.net/libesmtp/api.html.
|
||||
|
||||
|
||||
Signed-off-by: Bernhard Walle <bwalle@suse.de>
|
||||
|
||||
---
|
||||
headers.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/headers.c
|
||||
+++ b/headers.c
|
||||
@@ -273,7 +273,7 @@ set_from (struct rfc2822_header *header,
|
||||
return 1;
|
||||
}
|
||||
|
||||
-/* Print header-name ": " mailbox "\r\n"
|
||||
+/* Print header-name ": " mailbox "\r\n"
|
||||
or header-name ": \"" phrase "\" <" mailbox ">\r\n" */
|
||||
static void
|
||||
print_from (smtp_message_t message, struct rfc2822_header *header)
|
||||
@@ -340,7 +340,7 @@ set_sender (struct rfc2822_header *heade
|
||||
|
||||
/* TODO: do nothing if the mailbox is NULL. Check this doesn't fool
|
||||
the protocol engine into thinking it has seen end of file. */
|
||||
-/* Print header-name ": " mailbox "\r\n"
|
||||
+/* Print header-name ": " mailbox "\r\n"
|
||||
or header-name ": \"" phrase "\" <" mailbox ">\r\n"
|
||||
*/
|
||||
static void
|
||||
@@ -414,7 +414,7 @@ set_cc (struct rfc2822_header *header, v
|
||||
return 1;
|
||||
}
|
||||
|
||||
-/* Print header-name ": " mailbox "\r\n"
|
||||
+/* Print header-name ": " mailbox "\r\n"
|
||||
or header-name ": \"" phrase "\" <" mailbox ">\r\n"
|
||||
ad nauseum. */
|
||||
static void
|
||||
@@ -508,9 +508,9 @@ static const struct header_actions heade
|
||||
set_sender, print_sender, destroy_mbox_list, },
|
||||
{ "To", OPTIONAL,
|
||||
set_to, print_to, destroy_mbox_list, },
|
||||
- { "Cc", OPTIONAL,
|
||||
+ { "Cc", OPTIONAL | LISTVALUE,
|
||||
set_cc, print_cc, destroy_mbox_list, },
|
||||
- { "Bcc", OPTIONAL,
|
||||
+ { "Bcc", OPTIONAL | LISTVALUE,
|
||||
set_cc, print_cc, destroy_mbox_list, },
|
||||
{ "Reply-To", OPTIONAL,
|
||||
set_cc, print_cc, destroy_mbox_list, },
|
||||
@@ -760,7 +760,7 @@ missing_header (smtp_message_t message,
|
||||
|
||||
if (print == NULL)
|
||||
print = print_string;
|
||||
-
|
||||
+
|
||||
cat_reset (&message->hdr_buffer, 0);
|
||||
(*print) (message, message->current_header);
|
||||
return cat_buffer (&message->hdr_buffer, len);
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:407ec85a4c3ce2c4045608d28c36a8e19f1cfbad02bf3de784f6b6fa83d15a56
|
||||
size 351917
|
3
libesmtp-1.0.6.tar.bz2
Normal file
3
libesmtp-1.0.6.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d0a61a5c52d99fa7ce7d00ed0a07e341dbda67101dbed1ab0cdae3f37db4eb0b
|
||||
size 365506
|
@ -1,3 +1,23 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Aug 10 14:37:42 CEST 2010 - dimstar@opensuse.org
|
||||
|
||||
- Update to version 1.0.6:
|
||||
+ Each component matched by match-domain() is either a single
|
||||
'*' which matches anything or a case-insensitive comparison
|
||||
with a string of alphanumeric characters or a '-'.
|
||||
- Changes from version 1.0.5:
|
||||
+ The Gmail server reports enhanced status codes but then fails
|
||||
to provide them in some cases. The parser is now tolerant of
|
||||
this but warns the application using a new event flag
|
||||
SMTP_EV_SYNTAXWARNING that it is progressing despite the syntax
|
||||
error.
|
||||
+ Fixed bug where To, Cc, Bcc etc. accepted only single values
|
||||
instead of a list.
|
||||
+ Fix reversed comparison on the return value of gettimeofday().
|
||||
- Drop upstream fixed patches libesmtp-1.0.4-multiple-cc.patch and
|
||||
libestmp-commonname.diff.
|
||||
- Cleaned spec file using spec-cleaner.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Apr 28 08:16:43 UTC 2010 - freitag@novell.com
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# spec file for package libesmtp (Version 1.0.4)
|
||||
# spec file for package libesmtp (Version 1.0.6)
|
||||
#
|
||||
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
#
|
||||
@ -15,24 +15,22 @@
|
||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
# norootforbuild
|
||||
|
||||
|
||||
Name: libesmtp
|
||||
BuildRequires: openssl-devel
|
||||
Url: http://www.stafford.uklinux.net/libesmtp/
|
||||
Version: 1.0.6
|
||||
Release: 1
|
||||
License: GPLv2+ ; LGPLv2.1+
|
||||
Group: Development/Libraries/C and C++
|
||||
Summary: A Library for Posting Electronic Mail
|
||||
Version: 1.0.4
|
||||
Release: 171
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
Url: http://www.stafford.uklinux.net/libesmtp/
|
||||
Group: Development/Libraries/C and C++
|
||||
Source0: %{name}-%{version}.tar.bz2
|
||||
# PATCH-MISSING-TAG -- See http://wiki.opensuse.org/Packaging/Patches
|
||||
Patch0: libesmtp-removedecls.diff
|
||||
# PATCH-MISSING-TAG -- See http://wiki.opensuse.org/Packaging/Patches
|
||||
Patch1: libesmtp-1.0.4-bloat.patch
|
||||
Patch2: libesmtp-1.0.4-multiple-cc.patch
|
||||
# PATCH-FIX-UPSTREAM libestmp-commonname.diff bnc#585393 freitag@novell.com -- Stricter checking on CommonName
|
||||
Patch3: libestmp-commonname.diff
|
||||
BuildRequires: openssl-devel
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
|
||||
%description
|
||||
libESMTP is a library to manage posting (or submission of) electronic
|
||||
@ -41,12 +39,6 @@ Exim. It may be used as part of a Mail User Agent (MUA) or another
|
||||
program that must be able to post electronic mail but where mail
|
||||
functionality is not that program's primary purpose.
|
||||
|
||||
|
||||
|
||||
Authors:
|
||||
--------
|
||||
Brian Stafford <brian@stafford.uklinux.net>
|
||||
|
||||
%package devel
|
||||
License: GPLv2+ ; LGPLv2.1+
|
||||
Summary: A Library for Posting Electronic Mail
|
||||
@ -60,28 +52,19 @@ Exim. It may be used as part of a Mail User Agent (MUA) or another
|
||||
program that must be able to post electronic mail but where mail
|
||||
functionality is not that program's primary purpose.
|
||||
|
||||
|
||||
|
||||
Authors:
|
||||
--------
|
||||
Brian Stafford <brian@stafford.uklinux.net>
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0
|
||||
%patch1
|
||||
%patch2 -p1
|
||||
%patch3
|
||||
|
||||
%build
|
||||
autoreconf -fi
|
||||
%configure --disable-static --with-pic \
|
||||
--enable-ntlm \
|
||||
--enable-etrn
|
||||
%{__make} %{?jobs:-j%jobs}
|
||||
%{__make} %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
make DESTDIR=%{buildroot} install
|
||||
%makeinstall
|
||||
#uses dlsym not ltdl ..useless files
|
||||
rm -rf %{buildroot}%{_libdir}/esmtp-plugins/*a
|
||||
rm -rf %{buildroot}%{_libdir}/*a
|
||||
|
@ -1,173 +0,0 @@
|
||||
--- smtp-tls.c.orig 2005-12-15 18:59:49.000000000 +0000
|
||||
+++ smtp-tls.c 2010-03-17 01:15:06.000000000 +0000
|
||||
@@ -439,15 +439,32 @@
|
||||
match_component (const char *dom, const char *edom,
|
||||
const char *ref, const char *eref)
|
||||
{
|
||||
- while (dom < edom && ref < eref)
|
||||
+ /* If ref is the single character '*' then accept this as a wildcard
|
||||
+ matching any valid domainname component, i.e. characters from the
|
||||
+ range A-Z, a-z, 0-9, - or _
|
||||
+ NB this is more restrictive than RFC 2818 which allows multiple
|
||||
+ wildcard characters in the component pattern */
|
||||
+ if (eref == ref + 1 && *ref == '*')
|
||||
+ while (dom < edom)
|
||||
+ {
|
||||
+ if (!(isalnum (*dom) || *dom == '-' /*|| *dom == '_'*/))
|
||||
+ return 0;
|
||||
+ dom++;
|
||||
+ }
|
||||
+ else
|
||||
{
|
||||
- /* Accept a final '*' in the reference as a wildcard */
|
||||
- if (*ref == '*' && ref + 1 == eref)
|
||||
- break;
|
||||
- /* compare the domain name case insensitive */
|
||||
- if (!(*dom == *ref || tolower (*dom) == tolower (*ref)))
|
||||
- return 0;
|
||||
- ref++, dom++;
|
||||
+ while (dom < edom && ref < eref)
|
||||
+ {
|
||||
+ /* check for valid domainname character */
|
||||
+ if (!(isalnum (*dom) || *dom == '-' /*|| *dom == '_'*/))
|
||||
+ return 0;
|
||||
+ /* compare the domain name case-insensitively */
|
||||
+ if (!(*dom == *ref || tolower (*dom) == tolower (*ref)))
|
||||
+ return 0;
|
||||
+ ref++, dom++;
|
||||
+ }
|
||||
+ if (dom < edom || ref < eref)
|
||||
+ return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -541,65 +560,83 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
- int i, j, extcount;
|
||||
+ char buf[256] = { 0 };
|
||||
+ STACK_OF(GENERAL_NAME) *altnames;
|
||||
+ int hasaltname = 0;
|
||||
|
||||
- extcount = X509_get_ext_count (cert);
|
||||
- for (i = 0; i < extcount; i++)
|
||||
+ altnames = X509_get_ext_d2i (cert, NID_subject_alt_name, NULL, NULL);
|
||||
+ if (altnames != NULL)
|
||||
{
|
||||
- const char *extstr;
|
||||
- X509_EXTENSION *ext = X509_get_ext (cert, i);
|
||||
+ int i;
|
||||
|
||||
- extstr = OBJ_nid2sn (OBJ_obj2nid (X509_EXTENSION_get_object (ext)));
|
||||
- if (strcmp (extstr, "subjectAltName") == 0)
|
||||
+ for (i = 0; i < sk_GENERAL_NAME_num (altnames); ++i)
|
||||
{
|
||||
- unsigned char *data;
|
||||
- STACK_OF(CONF_VALUE) *val;
|
||||
- CONF_VALUE *nval;
|
||||
- X509V3_EXT_METHOD *meth;
|
||||
- void *ext_str = NULL;
|
||||
- int stack_len;
|
||||
-
|
||||
- meth = X509V3_EXT_get (ext);
|
||||
- if (meth == NULL)
|
||||
- break;
|
||||
- data = ext->value->data;
|
||||
-#if (OPENSSL_VERSION_NUMBER > 0x00907000L)
|
||||
- if (meth->it)
|
||||
- ext_str = ASN1_item_d2i (NULL, &data, ext->value->length,
|
||||
- ASN1_ITEM_ptr (meth->it));
|
||||
- else
|
||||
-#endif
|
||||
- ext_str = meth->d2i (NULL, &data, ext->value->length);
|
||||
- val = meth->i2v (meth, ext_str, NULL);
|
||||
- stack_len = sk_CONF_VALUE_num (val);
|
||||
- for (j = 0; j < stack_len; j++)
|
||||
+ GENERAL_NAME *name = sk_GENERAL_NAME_value (altnames, i);
|
||||
+
|
||||
+ if (name->type == GEN_DNS)
|
||||
{
|
||||
- nval = sk_CONF_VALUE_value (val, j);
|
||||
- if (strcmp (nval->name, "DNS") == 0
|
||||
- && match_domain (session->host, nval->value))
|
||||
+ const char *ia5str = (const char *) name->d.ia5->data;
|
||||
+ int ia5len = name->d.ia5->length;
|
||||
+
|
||||
+ hasaltname = 1;
|
||||
+ if (strlen (ia5str) == ia5len
|
||||
+ && match_domain (session->host, ia5str))
|
||||
+ ok = 1;
|
||||
+ else
|
||||
{
|
||||
- ok = 1;
|
||||
- break;
|
||||
+ buf[0] = '\0';
|
||||
+ strncat (buf, ia5str, sizeof buf - 1);
|
||||
}
|
||||
}
|
||||
+ // TODO: handle GEN_IPADD
|
||||
}
|
||||
- if (ok)
|
||||
- break;
|
||||
+ sk_GENERAL_NAME_pop_free (altnames, GENERAL_NAME_free);
|
||||
}
|
||||
- if (!ok)
|
||||
+
|
||||
+ if (!hasaltname)
|
||||
{
|
||||
- /* Matching by subjectAltName failed, try commonName */
|
||||
- X509_NAME_get_text_by_NID (X509_get_subject_name (cert),
|
||||
- NID_commonName, buf, sizeof buf);
|
||||
- if (!match_domain (session->host, buf) != 0)
|
||||
+ X509_NAME *subj = X509_get_subject_name (cert);
|
||||
+
|
||||
+ if (subj != NULL)
|
||||
{
|
||||
- if (session->event_cb != NULL)
|
||||
- (*session->event_cb) (session, SMTP_EV_WRONG_PEER_CERTIFICATE,
|
||||
- session->event_cb_arg, &ok, buf, ssl);
|
||||
+ ASN1_STRING *cn;
|
||||
+ int idx, i = -1;
|
||||
+
|
||||
+ do
|
||||
+ {
|
||||
+ idx = i;
|
||||
+ i = X509_NAME_get_index_by_NID (subj, NID_commonName, i);
|
||||
+ }
|
||||
+ while (i >= 0);
|
||||
+
|
||||
+ if (idx >= 0
|
||||
+ && (cn = X509_NAME_ENTRY_get_data (
|
||||
+ X509_NAME_get_entry (subj, idx)
|
||||
+ )) != NULL)
|
||||
+ {
|
||||
+ unsigned char *str = NULL;
|
||||
+ int len = ASN1_STRING_to_UTF8 (&str, cn);
|
||||
+
|
||||
+ if (str != NULL)
|
||||
+ {
|
||||
+ if (strlen ((char *) str) == len
|
||||
+ && match_domain (session->host, (char *) str))
|
||||
+ ok = 1;
|
||||
+ else
|
||||
+ {
|
||||
+ buf[0] = '\0';
|
||||
+ strncat (buf, (char *) str, sizeof buf - 1);
|
||||
+ }
|
||||
+ OPENSSL_free (str);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
- else
|
||||
- ok = 1;
|
||||
}
|
||||
+
|
||||
+ if (!ok && session->event_cb != NULL)
|
||||
+ (*session->event_cb) (session, SMTP_EV_WRONG_PEER_CERTIFICATE,
|
||||
+ session->event_cb_arg, &ok, buf, ssl);
|
||||
+
|
||||
X509_free (cert);
|
||||
}
|
||||
return ok;
|
||||
|
Loading…
Reference in New Issue
Block a user