mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-03 08:05:21 +00:00
Comment about unavoidable HP/UX compiler warning:
warning 541: Integer overflow during conversion. when their own SIO* macros are used in ioctl calls.
This commit is contained in:
@@ -68,8 +68,7 @@ struct isc_interfaceiter {
|
|||||||
#define IFCONF_BUFSIZE_MAX 1048576
|
#define IFCONF_BUFSIZE_MAX 1048576
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp)
|
isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
|
||||||
{
|
|
||||||
isc_interfaceiter_t *iter;
|
isc_interfaceiter_t *iter;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
|
||||||
@@ -84,7 +83,9 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp)
|
|||||||
iter->mctx = mctx;
|
iter->mctx = mctx;
|
||||||
iter->buf = NULL;
|
iter->buf = NULL;
|
||||||
|
|
||||||
/* Create an unbound datagram socket to do the SIOCGLIFADDR ioctl on. */
|
/*
|
||||||
|
* Create an unbound datagram socket to do the SIOCGLIFADDR ioctl on.
|
||||||
|
*/
|
||||||
if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"making interface scan socket: %s",
|
"making interface scan socket: %s",
|
||||||
@@ -115,15 +116,23 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp)
|
|||||||
#endif
|
#endif
|
||||||
iter->ifc.lifc_len = iter->bufsize;
|
iter->ifc.lifc_len = iter->bufsize;
|
||||||
iter->ifc.lifc_buf = iter->buf;
|
iter->ifc.lifc_buf = iter->buf;
|
||||||
if (ioctl(iter->socket, SIOCGLIFCONF, (char *) &iter->ifc) == -1) {
|
/*
|
||||||
|
* Ignore the HP/UX warning about "interger overflow during
|
||||||
|
* conversion. It comes from its own macro definition,
|
||||||
|
* and is really hard to shut up.
|
||||||
|
*/
|
||||||
|
if (ioctl(iter->socket, SIOCGLIFCONF, (char *)&iter->ifc)
|
||||||
|
== -1) {
|
||||||
if (errno != EINVAL) {
|
if (errno != EINVAL) {
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"get interface configuration: %s",
|
"get interface configuration: %s",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
result = ISC_R_UNEXPECTED;
|
result = ISC_R_UNEXPECTED;
|
||||||
goto ioctl_failure;
|
goto ioctl_failure;
|
||||||
}
|
}
|
||||||
/* EINVAL. Retry with a bigger buffer. */
|
/*
|
||||||
|
* EINVAL. Retry with a bigger buffer.
|
||||||
|
*/
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* The ioctl succeeded.
|
* The ioctl succeeded.
|
||||||
@@ -207,10 +216,17 @@ internal_current(isc_interfaceiter_t *iter) {
|
|||||||
get_addr(family, &iter->current.address,
|
get_addr(family, &iter->current.address,
|
||||||
(struct sockaddr *)&lifreq.lifr_addr);
|
(struct sockaddr *)&lifreq.lifr_addr);
|
||||||
|
|
||||||
/* Get interface flags. */
|
/*
|
||||||
|
* Get interface flags.
|
||||||
|
*/
|
||||||
|
|
||||||
iter->current.flags = 0;
|
iter->current.flags = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ignore the HP/UX warning about "interger overflow during
|
||||||
|
* conversion. It comes from its own macro definition,
|
||||||
|
* and is really hard to shut up.
|
||||||
|
*/
|
||||||
if (ioctl(iter->socket, SIOCGLIFFLAGS, (char *) &lifreq) < 0) {
|
if (ioctl(iter->socket, SIOCGLIFFLAGS, (char *) &lifreq) < 0) {
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"%s: getting interface flags: %s",
|
"%s: getting interface flags: %s",
|
||||||
@@ -228,9 +244,17 @@ internal_current(isc_interfaceiter_t *iter) {
|
|||||||
if ((lifreq.lifr_flags & IFF_LOOPBACK) != 0)
|
if ((lifreq.lifr_flags & IFF_LOOPBACK) != 0)
|
||||||
iter->current.flags |= INTERFACE_F_LOOPBACK;
|
iter->current.flags |= INTERFACE_F_LOOPBACK;
|
||||||
|
|
||||||
/* If the interface is point-to-point, get the destination address. */
|
/*
|
||||||
|
* If the interface is point-to-point, get the destination address.
|
||||||
|
*/
|
||||||
if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0) {
|
if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0) {
|
||||||
if (ioctl(iter->socket, SIOCGLIFDSTADDR, (char *) &lifreq) < 0) {
|
/*
|
||||||
|
* Ignore the HP/UX warning about "interger overflow during
|
||||||
|
* conversion. It comes from its own macro definition,
|
||||||
|
* and is really hard to shut up.
|
||||||
|
*/
|
||||||
|
if (ioctl(iter->socket, SIOCGLIFDSTADDR, (char *)&lifreq)
|
||||||
|
< 0) {
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"%s: getting destination address: %s",
|
"%s: getting destination address: %s",
|
||||||
lifreq.lifr_name,
|
lifreq.lifr_name,
|
||||||
@@ -241,12 +265,20 @@ internal_current(isc_interfaceiter_t *iter) {
|
|||||||
(struct sockaddr *)&lifreq.lifr_dstaddr);
|
(struct sockaddr *)&lifreq.lifr_dstaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the network mask. */
|
/*
|
||||||
|
* Get the network mask.
|
||||||
|
*/
|
||||||
memset(&lifreq, 0, sizeof lifreq);
|
memset(&lifreq, 0, sizeof lifreq);
|
||||||
memcpy(&lifreq, ifrp, sizeof lifreq);
|
memcpy(&lifreq, ifrp, sizeof lifreq);
|
||||||
switch (family) {
|
switch (family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
if (ioctl(iter->socket, SIOCGLIFNETMASK, (char *) &lifreq) < 0) {
|
/*
|
||||||
|
* Ignore the HP/UX warning about "interger overflow during
|
||||||
|
* conversion. It comes from its own macro definition,
|
||||||
|
* and is really hard to shut up.
|
||||||
|
*/
|
||||||
|
if (ioctl(iter->socket, SIOCGLIFNETMASK, (char *)&lifreq)
|
||||||
|
< 0) {
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
"%s: getting netmask: %s",
|
"%s: getting netmask: %s",
|
||||||
lifreq.lifr_name,
|
lifreq.lifr_name,
|
||||||
@@ -260,7 +292,9 @@ internal_current(isc_interfaceiter_t *iter) {
|
|||||||
#ifdef lifr_addrlen
|
#ifdef lifr_addrlen
|
||||||
int i, bits;
|
int i, bits;
|
||||||
|
|
||||||
/* netmask already zeroed */
|
/*
|
||||||
|
* Netmask already zeroed.
|
||||||
|
*/
|
||||||
iter->current.netmask.family = family;
|
iter->current.netmask.family = family;
|
||||||
for (i = 0 ; i < lifreq.lifr_addrlen; i += 8) {
|
for (i = 0 ; i < lifreq.lifr_addrlen; i += 8) {
|
||||||
bits = lifreq.lifr_addrlen - i;
|
bits = lifreq.lifr_addrlen - i;
|
||||||
@@ -270,7 +304,7 @@ internal_current(isc_interfaceiter_t *iter) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ISC_R_SUCCESS);
|
return (ISC_R_SUCCESS);
|
||||||
|
Reference in New Issue
Block a user