[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-530?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mahadev konar updated ZOOKEEPER-530:
------------------------------------

      Resolution: Fixed
    Release Note: get the c client working with IPV6.
    Hadoop Flags: [Reviewed]
          Status: Resolved  (was: Patch Available)

I just committed this.

> Memory corruption: Zookeeper c client IPv6 implementation does not honor 
> struct sockaddr_in6 size
> -------------------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-530
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-530
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: c client
>    Affects Versions: 3.2.0, 3.2.1
>            Reporter: Isabel Drost
>            Assignee: Isabel Drost
>             Fix For: 3.3.0
>
>         Attachments: ZOOKEEPER-530.patch, ZOOKEEPER-530.patch, 
> ZOOKEEPER-530_spaces.patch
>
>
> I tried to run zookeeper c-client on a machine with IPv6 enabled. When 
> connecting to the IPv6 address a connect(...) gave a "Address family not 
> supported by protocol" error. The reason was, that a few lines earlier, the 
> socket was opened with PF_INET instead of PF_INET6. Changing that the 
> following way:
> {code}
>            if (zh->addrs[zh->connect_index].sa_family == AF_INET) {
>               zh->fd = socket(PF_INET, SOCK_STREAM, 0);
>             } else {
>               zh->fd = socket(PF_INET6, SOCK_STREAM, 0);
>             }
> {code}
> turned the error message into "Invalid argument". 
> When printing out sizeof(struct sockaddr), sizeof(struct sockaddr_in) and 
> sizeof(struct sockaddr_in6) I got sockaddr: 16, sockaddr_in: 16 and 
> sockaddr_in6: 28. 
> So in the code calling 
> {code}
>            connect(zh->fd, &zh->addrs[zh->connect_index], sizeof(struct 
> sockaddr_in));
> {code}
> the parameter address_len is too small.
> Same applies to how IPv6 addresses are handled in the function 
> getaddrs(zhandle_t *zh).
> (Big Thanks+kiss to Thilo Fromm for helping me debug this.)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to