Imported Upstream version 2.6.1
[debian/amanda] / common-src / bsd-security.c
index 8953f1f9308e72bf3a951bda549a45258cef2f46..46bdca9ad7ded214a3ed97ebccb6bfa9bab9e15c 100644 (file)
@@ -37,6 +37,7 @@
 #include "packet.h"
 #include "security.h"
 #include "security-util.h"
+#include "sockaddr-util.h"
 #include "stream.h"
 #include "version.h"
 
@@ -155,15 +156,16 @@ bsd_connect(
        security_seterror(&bh->sech,
                _("resolve_hostname(%s) did not return a canonical name\n"), hostname);
        (*fn)(arg, &bh->sech, S_ERROR);
-       return;
+       if (res) freeaddrinfo(res);
+       return;
     }
     if (res == NULL) {
        dbprintf(_("resolve_hostname(%s): no results\n"), hostname);
        security_seterror(&bh->sech,
                _("resolve_hostname(%s): no results\n"), hostname);
        (*fn)(arg, &bh->sech, S_ERROR);
-       amfree(canonname);
-       return;
+       amfree(canonname);
+       return;
     }
 
     for (res_addr = res; res_addr != NULL; res_addr = res_addr->ai_next) {
@@ -277,7 +279,7 @@ bsd_connect(
     handle=alloc(15);
     g_snprintf(handle, 14, "000-%08x",  (unsigned)newhandle++);
     if (udp_inithandle(bh->udp, bh, canonname,
-       (struct sockaddr_storage *)res_addr->ai_addr, port, handle, sequence) < 0) {
+       (sockaddr_union *)res_addr->ai_addr, port, handle, sequence) < 0) {
        (*fn)(arg, &bh->sech, S_ERROR);
        amfree(bh->hostname);
        amfree(bh);
@@ -387,7 +389,7 @@ bsd_stream_server(
 
     bs = alloc(SIZEOF(*bs));
     security_streaminit(&bs->secstr, &bsd_security_driver);
-    bs->socket = stream_server(bh->udp->peer.ss_family, &bs->port,
+    bs->socket = stream_server(SU_GET_FAMILY(&bh->udp->peer), &bs->port,
                               (size_t)STREAM_BUFSIZE, (size_t)STREAM_BUFSIZE,
                               0);
     if (bs->socket < 0) {
@@ -575,7 +577,7 @@ stream_read_sync_callback(
        n = read(bs->fd, bs->databuf, sizeof(bs->databuf));
     } while ((n < 0) && ((errno == EINTR) || (errno == EAGAIN)));
     if (n < 0)
-        security_stream_seterror(&bs->secstr, strerror(errno));
+        security_stream_seterror(&bs->secstr, "%s", strerror(errno));
     bs->len = n;
 }
 
@@ -617,7 +619,7 @@ stream_read_callback(
     } while ((n < 0) && ((errno == EINTR) || (errno == EAGAIN)));
 
     if (n < 0)
-       security_stream_seterror(&bs->secstr, strerror(errno));
+       security_stream_seterror(&bs->secstr, "%s", strerror(errno));
 
     (*bs->fn)(bs->arg, bs->databuf, n);
 }