Make IPv4-only sockaddr_from_irc() work properly.
authorMichael Poole <mdpoole@troilus.org>
Wed, 28 Feb 2007 22:38:50 +0000 (22:38 +0000)
committerMichael Poole <mdpoole@troilus.org>
Wed, 28 Feb 2007 22:38:50 +0000 (22:38 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1767 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/os_generic.c

index a43753ff8e0d13a56f443fc1fab5344be21f3b0e..d3216b6adb1c528dde8a7e01669dca5d7ce942fc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-02-28  Michael Poole <mdpoole@troilus.org>
+
+       * ircd/os_generic.c (sockaddr_from_irc): Zero out socket address
+       before setting family, and regardless of whether we have an
+       irc_sockaddr template.
+
 2007-02-25  Michael Poole <mdpoole@troilus.org>
 
        * doc/example.conf: Document new options for General block.
index 1c6489b3a6cce1c20f8d1704c814a0dd427bae07..9ddb3c40bd686bb83124e62485cc4a2f3581271a 100644 (file)
@@ -178,13 +178,12 @@ int sockaddr_from_irc(struct sockaddr_in6 *v6, const struct irc_sockaddr *irc, i
 int sockaddr_from_irc(struct sockaddr_in *v4, const struct irc_sockaddr *irc, int compat_fd, int family)
 {
     assert(irc != 0);
+    memset(v4, 0, sizeof(*v4));
     v4->sin_family = AF_INET;
     if (irc) {
         assert(!irc->addr.in6_16[0] && !irc->addr.in6_16[1] && !irc->addr.in6_16[2] && !irc->addr.in6_16[3] && !irc->addr.in6_16[4] && (!irc->addr.in6_16[5] || irc->addr.in6_16[5] == 0xffff));
         memcpy(&v4->sin_addr, &irc->addr.in6_16[6], sizeof(v4->sin_addr));
         v4->sin_port = htons(irc->port);
-    } else{
-        memset(&v4, 0, sizeof(v4));
     }
     (void)compat_fd; (void)family;
     return sizeof(*v4);