[bacula] Fix bsmtp upstream bug sending mails to ipv4/ipv6 hosts

Simone Caronni slaanesh at fedoraproject.org
Tue Jul 10 12:47:04 UTC 2012


commit 3939b2b7583a8c901ed09ea88ff62a6edcc147a6
Author: Simone Caronni <negativo17 at gmail.com>
Date:   Tue Jul 10 14:46:48 2012 +0200

    Fix bsmtp upstream bug sending mails to ipv4/ipv6 hosts

 bacula-5.2.10-bsmtp.patch |  148 +++++++++++++++++++++++++++++++++++++++++++++
 bacula.spec               |    5 +-
 2 files changed, 152 insertions(+), 1 deletions(-)
---
diff --git a/bacula-5.2.10-bsmtp.patch b/bacula-5.2.10-bsmtp.patch
new file mode 100644
index 0000000..7ec7b38
--- /dev/null
+++ b/bacula-5.2.10-bsmtp.patch
@@ -0,0 +1,148 @@
+--- manpages/bsmtp.1.old.old	2012-06-28 16:52:03.000000000 +0200
++++ manpages/bsmtp.1	2012-07-10 14:39:27.818315931 +0200
+@@ -2,7 +2,7 @@
+ .\" First parameter, NAME, should be all caps
+ .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+ .\" other parameters are allowed: see man(7), man(1)
+-.TH BSMTP 1 "6 December 2009" "Kern Sibbald" "Network backup, recovery and verification"
++.TH BSMTP 1 "3 July 2012" "Kern Sibbald" "Network backup, recovery and verification"
+ .\" Please adjust this date whenever revising the manpage.
+ .\"
+ .SH NAME
+@@ -23,9 +23,18 @@
+ 
+ .SH OPTIONS
+ .TP
++.B \-4
++Forces bsmtp to use IPv4 addresses only.
++.TP
++.B \-6
++Forces bsmtp to use IPv6 addresses only.
++.TP
+ .B \-8
+ Encode the mail in UTF-8.
+ .TP
++.B \-a
++Use any ip protocol for address resolution.
++.TP
+ .B \-c
+ Set the \fBCc:\fR header.
+ .TP
+@@ -115,4 +124,4 @@
+ .nh
+ <lbc at members.fsf.org>.
+ .SH SEE ALSO
+-.BR "bacula-dir" "(8) "
+\ No newline at end of file
++.BR "bacula-dir" "(8) "
+--- src/tools/bsmtp.c.old	2012-06-28 16:52:03.000000000 +0200
++++ src/tools/bsmtp.c	2012-07-10 14:39:27.967318985 +0200
+@@ -85,6 +85,12 @@
+ #define MAXSTRING 254
+ #endif
+ 
++enum resolv_type {
++   RESOLV_PROTO_ANY,
++   RESOLV_PROTO_IPV4,
++   RESOLV_PROTO_IPV6
++};
++
+ static FILE *sfp;
+ static FILE *rfp;
+ 
+@@ -97,6 +103,7 @@
+ static int mailport = 25;
+ static char my_hostname[MAXSTRING];
+ static bool content_utf8 = false;
++static resolv_type default_resolv_type = RESOLV_PROTO_IPV4;
+ 
+ /* 
+  * Take input that may have names and other stuff and strip
+@@ -185,7 +192,12 @@
+    fprintf(stderr,
+ _("\n"
+ "Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n"
++"       -4          forces bsmtp to use IPv4 addresses only.\n"
++#ifdef HAVE_IPV6
++"       -6          forces bsmtp to use IPv6 addresses only.\n"
++#endif
+ "       -8          set charset to UTF-8\n"
++"       -a          use any ip protocol for address resolution\n"
+ "       -c          set the Cc: field\n"
+ "       -d <nn>     set debug level to <nn>\n"
+ "       -dt         print a timestamp in debug output\n"
+@@ -277,6 +289,11 @@
+    struct hostent *hp;
+    struct sockaddr_in sin;
+ #endif
++#ifdef HAVE_IPV6
++   const char *options = "468ac:d:f:h:r:s:l:?";
++#else
++   const char *options = "48ac:d:f:h:r:s:l:?";
++#endif
+     
+    setlocale(LC_ALL, "en_US");
+    bindtextdomain("bacula", LOCALEDIR);
+@@ -285,11 +302,26 @@
+    my_name_is(argc, argv, "bsmtp");
+    maxlines = 0;
+ 
+-   while ((ch = getopt(argc, argv, "8c:d:f:h:r:s:l:?")) != -1) {
++   while ((ch = getopt(argc, argv, options)) != -1) {
+       switch (ch) {
++      case '4':
++         default_resolv_type = RESOLV_PROTO_IPV4;
++         break;
++
++#ifdef HAVE_IPV6
++      case '6':
++         default_resolv_type = RESOLV_PROTO_IPV6;
++         break;
++#endif
++
+       case '8':
+          content_utf8 = true;
+          break;
++
++      case 'a':
++         default_resolv_type = RESOLV_PROTO_ANY;
++         break;
++
+       case 'c':
+          Dmsg1(20, "cc=%s\n", optarg);
+          cc_addr = optarg;
+@@ -430,16 +462,31 @@
+ lookup_host:
+ #ifdef HAVE_GETADDRINFO
+    memset(&hints, 0, sizeof(struct addrinfo));
+-   hints.ai_family = AF_UNSPEC;
++   switch (default_resolv_type) {
++   case RESOLV_PROTO_ANY:
++      hints.ai_family = AF_UNSPEC;
++      break;
++   case RESOLV_PROTO_IPV4:
++      hints.ai_family = AF_INET;
++      break;
++#ifdef HAVE_IPV6
++   case RESOLV_PROTO_IPV6:
++      hints.ai_family = AF_INET6;
++      break;
++#endif
++   default:
++      hints.ai_family = AF_UNSPEC;
++      break;
++   }
+    hints.ai_socktype = SOCK_STREAM;
+-   hints.ai_protocol = IPPROTO_TCP;
++   hints.ai_protocol = 0;
+    hints.ai_flags = 0;
+    snprintf(mail_port, sizeof(mail_port), "%d", mailport);
+ 
+    if ((res = getaddrinfo(mailhost, mail_port, &hints, &ai)) != 0) {
+       Pmsg2(0, _("Error unknown mail host \"%s\": ERR=%s\n"),
+             mailhost, gai_strerror(res));
+-      if (!strcasecmp(mailhost, "localhost")) {
++      if (strcasecmp(mailhost, "localhost")) {
+          Pmsg0(0, _("Retrying connection using \"localhost\".\n"));
+          mailhost = "localhost";
+          goto lookup_host;
diff --git a/bacula.spec b/bacula.spec
index 518769f..41fb319 100644
--- a/bacula.spec
+++ b/bacula.spec
@@ -33,6 +33,7 @@ Patch2:                 bacula-5.2.2-queryfile.patch
 Patch3:                 bacula-5.2.4-log-path.patch
 Patch4:                 bacula-5.0.3-sqlite-priv.patch
 Patch5:                 bacula-5.2.7-bat-build.patch
+Patch6:                 bacula-5.2.10-bsmtp.patch
 
 BuildRequires:          desktop-file-utils
 BuildRequires:          perl
@@ -291,6 +292,7 @@ Provides check_bacula support for Nagios.
 %patch3 -p1 -b .log-path
 %patch4 -p0 -b .priv
 %patch5 -p1 -b .bat-build
+%patch6 -p0 -b .bsmtp
 
 # Remove execution permissions from files we're packaging as docs later on
 find updatedb -type f | xargs chmod -x
@@ -844,7 +846,8 @@ fi
 
 %changelog
 * Tue Jul 10 2012 Simone Caronni <negativo17 at gmail.com> - 5.2.10-2
-- Add nss-lookup.target as required to service filesi (rhbz#838828).
+- Add nss-lookup.target as required to service files (rhbz#838828).
+- Fix bsmtp upstream bug sending mails to ipv4/ipv6 hosts.
 
 * Mon Jul 02 2012 Simone Caronni <negativo17 at gmail.com> - 5.2.10-1
 - Update to 5.2.10.


More information about the scm-commits mailing list