Simone Caronni 3939b2
--- manpages/bsmtp.1.old.old	2012-06-28 16:52:03.000000000 +0200
Simone Caronni 3939b2
+++ manpages/bsmtp.1	2012-07-10 14:39:27.818315931 +0200
Simone Caronni 3939b2
@@ -2,7 +2,7 @@
Simone Caronni 3939b2
 .\" First parameter, NAME, should be all caps
Simone Caronni 3939b2
 .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
Simone Caronni 3939b2
 .\" other parameters are allowed: see man(7), man(1)
Simone Caronni 3939b2
-.TH BSMTP 1 "6 December 2009" "Kern Sibbald" "Network backup, recovery and verification"
Simone Caronni 3939b2
+.TH BSMTP 1 "3 July 2012" "Kern Sibbald" "Network backup, recovery and verification"
Simone Caronni 3939b2
 .\" Please adjust this date whenever revising the manpage.
Simone Caronni 3939b2
 .\"
Simone Caronni 3939b2
 .SH NAME
Simone Caronni 3939b2
@@ -23,9 +23,18 @@
Simone Caronni 3939b2
 
Simone Caronni 3939b2
 .SH OPTIONS
Simone Caronni 3939b2
 .TP
Simone Caronni 3939b2
+.B \-4
Simone Caronni 3939b2
+Forces bsmtp to use IPv4 addresses only.
Simone Caronni 3939b2
+.TP
Simone Caronni 3939b2
+.B \-6
Simone Caronni 3939b2
+Forces bsmtp to use IPv6 addresses only.
Simone Caronni 3939b2
+.TP
Simone Caronni 3939b2
 .B \-8
Simone Caronni 3939b2
 Encode the mail in UTF-8.
Simone Caronni 3939b2
 .TP
Simone Caronni 3939b2
+.B \-a
Simone Caronni 3939b2
+Use any ip protocol for address resolution.
Simone Caronni 3939b2
+.TP
Simone Caronni 3939b2
 .B \-c
Simone Caronni 3939b2
 Set the \fBCc:\fR header.
Simone Caronni 3939b2
 .TP
Simone Caronni 3939b2
@@ -115,4 +124,4 @@
Simone Caronni 3939b2
 .nh
Simone Caronni 3939b2
 <lbc@members.fsf.org>.
Simone Caronni 3939b2
 .SH SEE ALSO
Simone Caronni 3939b2
-.BR "bacula-dir" "(8) "
Simone Caronni 3939b2
\ No newline at end of file
Simone Caronni 3939b2
+.BR "bacula-dir" "(8) "
Simone Caronni 3939b2
--- src/tools/bsmtp.c.old	2012-06-28 16:52:03.000000000 +0200
Simone Caronni 3939b2
+++ src/tools/bsmtp.c	2012-07-10 14:39:27.967318985 +0200
Simone Caronni 3939b2
@@ -85,6 +85,12 @@
Simone Caronni 3939b2
 #define MAXSTRING 254
Simone Caronni 3939b2
 #endif
Simone Caronni 3939b2
 
Simone Caronni 3939b2
+enum resolv_type {
Simone Caronni 3939b2
+   RESOLV_PROTO_ANY,
Simone Caronni 3939b2
+   RESOLV_PROTO_IPV4,
Simone Caronni 3939b2
+   RESOLV_PROTO_IPV6
Simone Caronni 3939b2
+};
Simone Caronni 3939b2
+
Simone Caronni 3939b2
 static FILE *sfp;
Simone Caronni 3939b2
 static FILE *rfp;
Simone Caronni 3939b2
 
Simone Caronni 3939b2
@@ -97,6 +103,7 @@
Simone Caronni 3939b2
 static int mailport = 25;
Simone Caronni 3939b2
 static char my_hostname[MAXSTRING];
Simone Caronni 3939b2
 static bool content_utf8 = false;
Simone Caronni 3939b2
+static resolv_type default_resolv_type = RESOLV_PROTO_IPV4;
Simone Caronni 3939b2
 
Simone Caronni 3939b2
 /* 
Simone Caronni 3939b2
  * Take input that may have names and other stuff and strip
Simone Caronni 3939b2
@@ -185,7 +192,12 @@
Simone Caronni 3939b2
    fprintf(stderr,
Simone Caronni 3939b2
 _("\n"
Simone Caronni 3939b2
 "Usage: %s [-f from] [-h mailhost] [-s subject] [-c copy] [recipient ...]\n"
Simone Caronni 3939b2
+"       -4          forces bsmtp to use IPv4 addresses only.\n"
Simone Caronni 3939b2
+#ifdef HAVE_IPV6
Simone Caronni 3939b2
+"       -6          forces bsmtp to use IPv6 addresses only.\n"
Simone Caronni 3939b2
+#endif
Simone Caronni 3939b2
 "       -8          set charset to UTF-8\n"
Simone Caronni 3939b2
+"       -a          use any ip protocol for address resolution\n"
Simone Caronni 3939b2
 "       -c          set the Cc: field\n"
Simone Caronni 3939b2
 "       -d <nn>     set debug level to <nn>\n"
Simone Caronni 3939b2
 "       -dt         print a timestamp in debug output\n"
Simone Caronni 3939b2
@@ -277,6 +289,11 @@
Simone Caronni 3939b2
    struct hostent *hp;
Simone Caronni 3939b2
    struct sockaddr_in sin;
Simone Caronni 3939b2
 #endif
Simone Caronni 3939b2
+#ifdef HAVE_IPV6
Simone Caronni 3939b2
+   const char *options = "468ac:d:f:h:r:s:l:?";
Simone Caronni 3939b2
+#else
Simone Caronni 3939b2
+   const char *options = "48ac:d:f:h:r:s:l:?";
Simone Caronni 3939b2
+#endif
Simone Caronni 3939b2
     
Simone Caronni 3939b2
    setlocale(LC_ALL, "en_US");
Simone Caronni 3939b2
    bindtextdomain("bacula", LOCALEDIR);
Simone Caronni 3939b2
@@ -285,11 +302,26 @@
Simone Caronni 3939b2
    my_name_is(argc, argv, "bsmtp");
Simone Caronni 3939b2
    maxlines = 0;
Simone Caronni 3939b2
 
Simone Caronni 3939b2
-   while ((ch = getopt(argc, argv, "8c:d:f:h:r:s:l:?")) != -1) {
Simone Caronni 3939b2
+   while ((ch = getopt(argc, argv, options)) != -1) {
Simone Caronni 3939b2
       switch (ch) {
Simone Caronni 3939b2
+      case '4':
Simone Caronni 3939b2
+         default_resolv_type = RESOLV_PROTO_IPV4;
Simone Caronni 3939b2
+         break;
Simone Caronni 3939b2
+
Simone Caronni 3939b2
+#ifdef HAVE_IPV6
Simone Caronni 3939b2
+      case '6':
Simone Caronni 3939b2
+         default_resolv_type = RESOLV_PROTO_IPV6;
Simone Caronni 3939b2
+         break;
Simone Caronni 3939b2
+#endif
Simone Caronni 3939b2
+
Simone Caronni 3939b2
       case '8':
Simone Caronni 3939b2
          content_utf8 = true;
Simone Caronni 3939b2
          break;
Simone Caronni 3939b2
+
Simone Caronni 3939b2
+      case 'a':
Simone Caronni 3939b2
+         default_resolv_type = RESOLV_PROTO_ANY;
Simone Caronni 3939b2
+         break;
Simone Caronni 3939b2
+
Simone Caronni 3939b2
       case 'c':
Simone Caronni 3939b2
          Dmsg1(20, "cc=%s\n", optarg);
Simone Caronni 3939b2
          cc_addr = optarg;
Simone Caronni 3939b2
@@ -430,16 +462,31 @@
Simone Caronni 3939b2
 lookup_host:
Simone Caronni 3939b2
 #ifdef HAVE_GETADDRINFO
Simone Caronni 3939b2
    memset(&hints, 0, sizeof(struct addrinfo));
Simone Caronni 3939b2
-   hints.ai_family = AF_UNSPEC;
Simone Caronni 3939b2
+   switch (default_resolv_type) {
Simone Caronni 3939b2
+   case RESOLV_PROTO_ANY:
Simone Caronni 3939b2
+      hints.ai_family = AF_UNSPEC;
Simone Caronni 3939b2
+      break;
Simone Caronni 3939b2
+   case RESOLV_PROTO_IPV4:
Simone Caronni 3939b2
+      hints.ai_family = AF_INET;
Simone Caronni 3939b2
+      break;
Simone Caronni 3939b2
+#ifdef HAVE_IPV6
Simone Caronni 3939b2
+   case RESOLV_PROTO_IPV6:
Simone Caronni 3939b2
+      hints.ai_family = AF_INET6;
Simone Caronni 3939b2
+      break;
Simone Caronni 3939b2
+#endif
Simone Caronni 3939b2
+   default:
Simone Caronni 3939b2
+      hints.ai_family = AF_UNSPEC;
Simone Caronni 3939b2
+      break;
Simone Caronni 3939b2
+   }
Simone Caronni 3939b2
    hints.ai_socktype = SOCK_STREAM;
Simone Caronni 3939b2
-   hints.ai_protocol = IPPROTO_TCP;
Simone Caronni 3939b2
+   hints.ai_protocol = 0;
Simone Caronni 3939b2
    hints.ai_flags = 0;
Simone Caronni 3939b2
    snprintf(mail_port, sizeof(mail_port), "%d", mailport);
Simone Caronni 3939b2
 
Simone Caronni 3939b2
    if ((res = getaddrinfo(mailhost, mail_port, &hints, &ai)) != 0) {
Simone Caronni 3939b2
       Pmsg2(0, _("Error unknown mail host \"%s\": ERR=%s\n"),
Simone Caronni 3939b2
             mailhost, gai_strerror(res));
Simone Caronni 3939b2
-      if (!strcasecmp(mailhost, "localhost")) {
Simone Caronni 3939b2
+      if (strcasecmp(mailhost, "localhost")) {
Simone Caronni 3939b2
          Pmsg0(0, _("Retrying connection using \"localhost\".\n"));
Simone Caronni 3939b2
          mailhost = "localhost";
Simone Caronni 3939b2
          goto lookup_host;