Take the first step towards making it possible to parse either IPv4 or
IPv6 addresses in client_init(). It won't handle IPv6 until
host_pton() has IPv6 support enabled, and it still doesn't deal with
IPv6 netmasks yet.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
static int
init_subnetwork(nfs_client *clp)
{
static int
init_subnetwork(nfs_client *clp)
{
- struct sockaddr_in sin = {
- .sin_family = AF_INET,
- };
static char slash32[] = "/32";
static char slash32[] = "/32";
char *cp;
cp = strchr(clp->m_hostname, '/');
char *cp;
cp = strchr(clp->m_hostname, '/');
cp = slash32;
*cp = '\0';
cp = slash32;
*cp = '\0';
- sin.sin_addr.s_addr = inet_addr(clp->m_hostname);
- set_addrlist_in(clp, 0, &sin);
+ ai = host_pton(clp->m_hostname);
+ if (ai == NULL) {
+ xlog(L_ERROR, "Invalid IP address %s", clp->m_hostname);
+ return false;
+ }
+ set_addrlist(clp, 0, ai->ai_addr);
+ freeaddrinfo(ai);
return init_netmask(clp, cp);
}
return init_netmask(clp, cp);
}