mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-11 04:49:58 +00:00
ssmtp: misc recipe updates + add Debian "partial loss of message body" fix
- Backport Debian fix for "partial loss of message body, sending
message to wrong recipicients" issue:
https://sources.debian.net/patches/ssmtp/2.64-8/ssmtp-bug584162-fix.patch/
- Control ipv6 support based on ipv6 DISTRO feature.
- Enable ssl support by default (and add PACKAGECONFIG option to
control it).
- Drop inetutils dependency (inetutils provides only applications,
not libraries or header files, so a build dependency on it doesn't
make sense).
- Drop pkgconfig class (the ssmtp configure script etc doesn't make
any use of pkg-config).
Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
This commit is contained in:
committed by
Joe MacDonald
parent
43d2d966b9
commit
5ff5afa30b
@@ -0,0 +1,126 @@
|
|||||||
|
Bug-Debian: http://bugs.debian.org/584162
|
||||||
|
Reported-By: Christoph Biedl <debian.axhn@manchmal.in-ulm.de>
|
||||||
|
Forwarded: not-needed
|
||||||
|
Reviewed-By: Anibal Monsalve Salazar <anibal@debian.org>
|
||||||
|
Last-Update: 2014-08-15
|
||||||
|
|
||||||
|
From: "Daniel Richard G." <skunk@iSKUNK.ORG>
|
||||||
|
Subject: Re: ssmtp: Partial loss of message body, sending message to wrong recipicients
|
||||||
|
Date: Thu, 19 Jun 2014 14:44:30 -0400
|
||||||
|
|
||||||
|
Attached is a patch against the original 2.64 source that should address
|
||||||
|
this bug, and hopefully not break anything. An overview of my changes:
|
||||||
|
|
||||||
|
* Added code to standarise() to drop the trailing '\r' if the line
|
||||||
|
originally ended with "\r\n".
|
||||||
|
|
||||||
|
* Added a check to header_parse() that effectively converts an "\r\n" in
|
||||||
|
the input into '\n'.
|
||||||
|
|
||||||
|
* Added a conditional so that header_parse() doesn't pass the empty
|
||||||
|
string to header_save()---a behavior I observed in testing, at the end
|
||||||
|
of a header block with "\r\n" line endings.
|
||||||
|
|
||||||
|
* Simplified the last if(in_header) conditional in header_parse(),
|
||||||
|
because it erroneously assumes that if in_header == True, then c could
|
||||||
|
have some value other than EOF. (See the condition on the previous
|
||||||
|
"while" loop, and the lack of any other way to exit said loop.)
|
||||||
|
|
||||||
|
header_parse() will now properly grab a header if fed a message
|
||||||
|
without a body (i.e. no "\n\n" ending the header block), although this
|
||||||
|
code will still drop a header if there is no newline at the end.
|
||||||
|
|
||||||
|
Christoph, thank you for your excellent analysis, and the test cases. I
|
||||||
|
made use of them, and with my changes sSMTP appears to do the right
|
||||||
|
thing.
|
||||||
|
|
||||||
|
Debian patch from: https://sources.debian.net/patches/ssmtp/2.64-8/
|
||||||
|
|
||||||
|
Upstream-Status: Backport [debian]
|
||||||
|
|
||||||
|
Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
|
||||||
|
|
||||||
|
Index: ssmtp-2.64/ssmtp.c
|
||||||
|
===================================================================
|
||||||
|
--- ssmtp-2.64.orig/ssmtp.c
|
||||||
|
+++ ssmtp-2.64/ssmtp.c
|
||||||
|
@@ -375,6 +375,12 @@ bool_t standardise(char *str, bool_t *li
|
||||||
|
if((p = strchr(str, '\n'))) {
|
||||||
|
*p = (char)NULL;
|
||||||
|
*linestart = True;
|
||||||
|
+
|
||||||
|
+ /* If the line ended in "\r\n", then drop the '\r' too */
|
||||||
|
+ sl = strlen(str);
|
||||||
|
+ if(sl >= 1 && str[sl - 1] == '\r') {
|
||||||
|
+ str[sl - 1] = (char)NULL;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
return(leadingdot);
|
||||||
|
}
|
||||||
|
@@ -768,6 +774,14 @@ void header_parse(FILE *stream)
|
||||||
|
}
|
||||||
|
len++;
|
||||||
|
|
||||||
|
+ if(l == '\r' && c == '\n') {
|
||||||
|
+ /* Properly handle input that already has "\r\n"
|
||||||
|
+ line endings; see https://bugs.debian.org/584162 */
|
||||||
|
+ l = (len >= 2 ? *(q - 2) : '\n');
|
||||||
|
+ q--;
|
||||||
|
+ len--;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if(l == '\n') {
|
||||||
|
switch(c) {
|
||||||
|
case ' ':
|
||||||
|
@@ -790,7 +804,9 @@ void header_parse(FILE *stream)
|
||||||
|
if((q = strrchr(p, '\n'))) {
|
||||||
|
*q = (char)NULL;
|
||||||
|
}
|
||||||
|
- header_save(p);
|
||||||
|
+ if(len > 0) {
|
||||||
|
+ header_save(p);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
q = p;
|
||||||
|
len = 0;
|
||||||
|
@@ -800,35 +816,12 @@ void header_parse(FILE *stream)
|
||||||
|
|
||||||
|
l = c;
|
||||||
|
}
|
||||||
|
- if(in_header) {
|
||||||
|
- if(l == '\n') {
|
||||||
|
- switch(c) {
|
||||||
|
- case ' ':
|
||||||
|
- case '\t':
|
||||||
|
- /* Must insert '\r' before '\n's embedded in header
|
||||||
|
- fields otherwise qmail won't accept our mail
|
||||||
|
- because a bare '\n' violates some RFC */
|
||||||
|
-
|
||||||
|
- *(q - 1) = '\r'; /* Replace previous \n with \r */
|
||||||
|
- *q++ = '\n'; /* Insert \n */
|
||||||
|
- len++;
|
||||||
|
-
|
||||||
|
- break;
|
||||||
|
-
|
||||||
|
- case '\n':
|
||||||
|
- in_header = False;
|
||||||
|
-
|
||||||
|
- default:
|
||||||
|
- *q = (char)NULL;
|
||||||
|
- if((q = strrchr(p, '\n'))) {
|
||||||
|
- *q = (char)NULL;
|
||||||
|
- }
|
||||||
|
- header_save(p);
|
||||||
|
-
|
||||||
|
- q = p;
|
||||||
|
- len = 0;
|
||||||
|
- }
|
||||||
|
+ if(in_header && l == '\n') {
|
||||||
|
+ /* Got EOF while reading the header */
|
||||||
|
+ if((q = strrchr(p, '\n'))) {
|
||||||
|
+ *q = (char)NULL;
|
||||||
|
}
|
||||||
|
+ header_save(p);
|
||||||
|
}
|
||||||
|
(void)free(p);
|
||||||
|
}
|
||||||
@@ -1,25 +1,29 @@
|
|||||||
SUMMARY = "extremely simple MTA to get mail off the system to a mail hub"
|
SUMMARY = "extremely simple MTA to get mail off the system to a mail hub"
|
||||||
HOMEPAGE = "http://packages.qa.debian.org/s/ssmtp.html"
|
HOMEPAGE = "http://packages.qa.debian.org/s/ssmtp.html"
|
||||||
|
|
||||||
LICENSE = "GPLv2"
|
LICENSE = "GPLv2"
|
||||||
LIC_FILES_CHKSUM = "file://COPYING;md5=0c56db0143f4f80c369ee3af7425af6e"
|
LIC_FILES_CHKSUM = "file://COPYING;md5=0c56db0143f4f80c369ee3af7425af6e"
|
||||||
|
|
||||||
SRC_URI = "\
|
SRC_URI = "${DEBIAN_MIRROR}/main/s/${BPN}/${BPN}_${PV}.orig.tar.bz2 \
|
||||||
${DEBIAN_MIRROR}/main/s/${BPN}/${BPN}_${PV}.orig.tar.bz2 \
|
file://ssmtp-bug584162-fix.patch \
|
||||||
file://build-ouside_srcdir.patch \
|
file://build-ouside_srcdir.patch \
|
||||||
file://use-DESTDIR.patch \
|
file://use-DESTDIR.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
|
SRC_URI[md5sum] = "65b4e0df4934a6cd08c506cabcbe584f"
|
||||||
|
SRC_URI[sha256sum] = "22c37dc90c871e8e052b2cab0ad219d010fa938608cd66b21c8f3c759046fa36"
|
||||||
|
|
||||||
|
inherit autotools
|
||||||
|
|
||||||
|
PACKAGECONFIG ?= "ssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
|
||||||
|
|
||||||
|
PACKAGECONFIG[ssl] = "--enable-ssl,--disable-ssl,openssl"
|
||||||
|
PACKAGECONFIG[ipv6] = "--enable-inet6,--disable-inet6"
|
||||||
|
|
||||||
EXTRA_OECONF += "--mandir=${mandir}"
|
EXTRA_OECONF += "--mandir=${mandir}"
|
||||||
|
|
||||||
EXTRA_OEMAKE = "GEN_CONFIG='/bin/true'"
|
EXTRA_OEMAKE = "GEN_CONFIG='/bin/true'"
|
||||||
|
|
||||||
SRC_URI[md5sum] = "65b4e0df4934a6cd08c506cabcbe584f"
|
LDFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'ssl', '-lssl -lcrypto', '', d)}"
|
||||||
SRC_URI[sha256sum] = "22c37dc90c871e8e052b2cab0ad219d010fa938608cd66b21c8f3c759046fa36"
|
|
||||||
|
|
||||||
inherit autotools pkgconfig
|
|
||||||
|
|
||||||
DEPENDS += "openssl inetutils"
|
|
||||||
|
|
||||||
do_install_append () {
|
do_install_append () {
|
||||||
install -d ${D}${mandir}/
|
install -d ${D}${mandir}/
|
||||||
|
|||||||
Reference in New Issue
Block a user