Adjust virSocketAddrParseInternal to take a boolean 'isNumeric' in order
to determine whether to set "ai_flags = AI_NUMERICHOST;" - IOW - expect
a numeric IP Address of sorts in the 'val' to be resolved.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/util/virsocketaddr.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c
index 67ed330..0e9a39c 100644
--- a/src/util/virsocketaddr.c
+++ b/src/util/virsocketaddr.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2014 Red Hat, Inc.
+ * Copyright (C) 2009-2015 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -80,6 +80,7 @@ static int
virSocketAddrParseInternal(struct addrinfo **res,
const char *val,
int family,
+ bool isNumeric,
bool reportError)
{
struct addrinfo hints;
@@ -92,7 +93,8 @@ virSocketAddrParseInternal(struct addrinfo **res,
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
- hints.ai_flags = AI_NUMERICHOST;
+ if (isNumeric)
+ hints.ai_flags = AI_NUMERICHOST;
if ((err = getaddrinfo(val, NULL, &hints, res)) != 0) {
if (reportError)
virReportError(VIR_ERR_SYSTEM_ERROR,
@@ -121,7 +123,7 @@ int virSocketAddrParse(virSocketAddrPtr addr, const char *val, int
family)
int len;
struct addrinfo *res;
- if (virSocketAddrParseInternal(&res, val, family, true) < 0)
+ if (virSocketAddrParseInternal(&res, val, family, true, true) < 0)
return -1;
if (res == NULL) {
@@ -878,7 +880,7 @@ virSocketAddrNumericFamily(const char *address)
struct addrinfo *res;
unsigned short family;
- if (virSocketAddrParseInternal(&res, address, AF_UNSPEC, false) < 0)
+ if (virSocketAddrParseInternal(&res, address, AF_UNSPEC, true, false) < 0)
return -1;
family = res->ai_addr->sa_family;
--
2.1.0