+283380093ca4669ba4c65ebade4fe8b98e62582c
diff -uNr nm1/src/netmgr.c nm2/src/netmgr.c
--- nm1/src/netmgr.c 2017-08-09 22:30:17.449535947 +0000
+++ nm2/src/netmgr.c 2017-08-09 22:29:57.662725748 +0000
@@ -328,9 +328,15 @@
SECTION_MATCH,
KEY_NAME,
&pszMatchName);
+ if ((err == NM_ERR_VALUE_NOT_FOUND) ||
+ (err == NM_ERR_BAD_CONFIG_FILE))
+ {
+ /* Ignore cfg file with invalid/missing Match section */
+ err = 0;
+ }
bail_on_error(err);
- if (nm_regex_match_ifname(pszIfName, pszMatchName) == 0)
+ if (pszMatchName && !nm_regex_match_ifname(pszIfName, pszMatchName))
{
if (pszCfgFileName == NULL)
{
@@ -2121,11 +2127,20 @@
{
rtMsg = (struct rtmsg *)NLMSG_DATA(((struct nlmsghdr *)nlMsg));
// TODO: Figure out IPv6
- if ((rtMsg->rtm_table != RT_TABLE_MAIN) ||
+ if (rtMsg->rtm_table != RT_TABLE_MAIN)
+ {
+ continue;
+ }
+ if (((addrType == STATIC_IPV4) || (addrType == DHCP_IPV4)) &&
(rtMsg->rtm_family != AF_INET))
{
continue;
}
+ if (((addrType == STATIC_IPV6) || (addrType == DHCP_IPV6) ||
+ (addrType == AUTO_IPV6)) && (rtMsg->rtm_family != AF_INET6))
+ {
+ continue;
+ }
rtAttr = (struct rtattr *)RTM_RTA(rtMsg);
rtLen = RTM_PAYLOAD(nlMsg);
for (; RTA_OK(rtAttr, rtLen); rtAttr = RTA_NEXT(rtAttr, rtLen))
@@ -2136,27 +2151,36 @@
if_indextoname(*(int *)RTA_DATA(rtAttr), szIfName);
break;
case RTA_GATEWAY:
- gw4.s_addr = *(uint32_t *)RTA_DATA(rtAttr);
+ if (rtMsg->rtm_family == AF_INET)
+ {
+ gw4.s_addr = *(uint32_t *)RTA_DATA(rtAttr);
+ }
break;
case RTA_DST:
- dst4.s_addr = *(uint32_t *)RTA_DATA(rtAttr);
+ if (rtMsg->rtm_family == AF_INET)
+ {
+ dst4.s_addr = *(uint32_t *)RTA_DATA(rtAttr);
+ }
break;
default:
break;
}
}
- if ((dst4.s_addr == 0) && !strcmp(szIfName, pszInterfaceName))
+ if ((addrType == STATIC_IPV4) || (addrType == DHCP_IPV4))
{
- if (inet_ntop(AF_INET, &gw4, szGateway, INET6_ADDRSTRLEN) != NULL)
- {
- err = netmgr_alloc_string(szGateway, &pszGateway);
- }
- else
+ if ((dst4.s_addr == 0) && !strcmp(szIfName, pszInterfaceName))
{
- err = errno;
+ if (inet_ntop(AF_INET, &gw4, szGateway, INET6_ADDRSTRLEN) != NULL)
+ {
+ err = netmgr_alloc_string(szGateway, &pszGateway);
+ }
+ else
+ {
+ err = errno;
+ }
+ bail_on_error(err);
+ break;
}
- bail_on_error(err);
- break;
}
}
@@ -3054,10 +3078,18 @@
{
*ppszIPv4AddrPrefix = pszIPv4AddrPrefix;
}
+ else
+ {
+ netmgr_free(pszIPv4AddrPrefix);
+ }
if (ppszIPv4Gateway)
{
*ppszIPv4Gateway = pszIPv4Gateway;
}
+ else
+ {
+ netmgr_free(pszIPv4Gateway);
+ }
cleanup:
netmgr_list_free(ipCount, (void **)ppszIpAddrList);