Commit 911ccc4c authored by Mike Frysinger's avatar Mike Frysinger

ifconfig: use in_addr_t for IPv4 types

An IPv4 address is 32bits.  Using unsigned long to represent that results
in misbehavior on 64bit hosts as sizeof(ulong) == 8.  Use in_addr_t in its
place to represent IPv4 addresses.
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent d1381f90
...@@ -93,10 +93,8 @@ int opt_v = 0; /* debugging output flag */ ...@@ -93,10 +93,8 @@ int opt_v = 0; /* debugging output flag */
int addr_family = 0; /* currently selected AF */ int addr_family = 0; /* currently selected AF */
/* for ipv4 add/del modes */ /* for ipv4 add/del modes */
static int get_nmbc_parent(char *parent, unsigned long *nm, static int get_nmbc_parent(char *parent, in_addr_t *nm, in_addr_t *bc);
unsigned long *bc); static int set_ifstate(char *parent, in_addr_t ip, in_addr_t nm, in_addr_t bc,
static int set_ifstate(char *parent, unsigned long ip,
unsigned long nm, unsigned long bc,
int flag); int flag);
static int if_print(char *ifname) static int if_print(char *ifname)
...@@ -769,7 +767,7 @@ int main(int argc, char **argv) ...@@ -769,7 +767,7 @@ int main(int argc, char **argv)
#endif #endif
#if HAVE_AFINET #if HAVE_AFINET
{ /* ipv4 address a.b.c.d */ { /* ipv4 address a.b.c.d */
unsigned long ip, nm, bc; in_addr_t ip, nm, bc;
safe_strncpy(host, *spp, (sizeof host)); safe_strncpy(host, *spp, (sizeof host));
if (inet_aftype.input(0, host, (struct sockaddr *)&sin) < 0) { if (inet_aftype.input(0, host, (struct sockaddr *)&sin) < 0) {
ap->herror(host); ap->herror(host);
...@@ -786,7 +784,7 @@ int main(int argc, char **argv) ...@@ -786,7 +784,7 @@ int main(int argc, char **argv)
continue; continue;
} }
memcpy(&ip, &sin.sin_addr.s_addr, sizeof(unsigned long)); memcpy(&ip, &sin.sin_addr.s_addr, sizeof(ip));
if (get_nmbc_parent(ifr.ifr_name, &nm, &bc) < 0) { if (get_nmbc_parent(ifr.ifr_name, &nm, &bc) < 0) {
fprintf(stderr, _("Interface %s not initialized\n"), fprintf(stderr, _("Interface %s not initialized\n"),
...@@ -863,7 +861,7 @@ int main(int argc, char **argv) ...@@ -863,7 +861,7 @@ int main(int argc, char **argv)
#if HAVE_AFINET #if HAVE_AFINET
{ {
/* ipv4 address a.b.c.d */ /* ipv4 address a.b.c.d */
unsigned long ip, nm, bc; in_addr_t ip, nm, bc;
safe_strncpy(host, *spp, (sizeof host)); safe_strncpy(host, *spp, (sizeof host));
if (inet_aftype.input(0, host, (struct sockaddr *)&sin) < 0) { if (inet_aftype.input(0, host, (struct sockaddr *)&sin) < 0) {
ap->herror(host); ap->herror(host);
...@@ -881,7 +879,7 @@ int main(int argc, char **argv) ...@@ -881,7 +879,7 @@ int main(int argc, char **argv)
/* Clear "ip" in case sizeof(unsigned long) > sizeof(sin.sin_addr.s_addr) */ /* Clear "ip" in case sizeof(unsigned long) > sizeof(sin.sin_addr.s_addr) */
ip = 0; ip = 0;
memcpy(&ip, &sin.sin_addr.s_addr, sizeof(sin.sin_addr.s_addr)); memcpy(&ip, &sin.sin_addr.s_addr, sizeof(ip));
if (get_nmbc_parent(ifr.ifr_name, &nm, &bc) < 0) { if (get_nmbc_parent(ifr.ifr_name, &nm, &bc) < 0) {
fprintf(stderr, _("Interface %s not initialized\n"), fprintf(stderr, _("Interface %s not initialized\n"),
...@@ -1113,7 +1111,7 @@ static int do_ifcmd(struct interface *x, struct ifcmd *ptr) ...@@ -1113,7 +1111,7 @@ static int do_ifcmd(struct interface *x, struct ifcmd *ptr)
static int get_nmbc_parent(char *parent, static int get_nmbc_parent(char *parent,
unsigned long *nm, unsigned long *bc) in_addr_t *nm, in_addr_t *bc)
{ {
struct interface *i; struct interface *i;
struct sockaddr_in *sin; struct sockaddr_in *sin;
...@@ -1124,14 +1122,13 @@ static int get_nmbc_parent(char *parent, ...@@ -1124,14 +1122,13 @@ static int get_nmbc_parent(char *parent,
if (do_if_fetch(i) < 0) if (do_if_fetch(i) < 0)
return 0; return 0;
sin = (struct sockaddr_in *)&i->netmask; sin = (struct sockaddr_in *)&i->netmask;
memcpy(nm, &sin->sin_addr.s_addr, sizeof(unsigned long)); memcpy(nm, &sin->sin_addr.s_addr, sizeof(*nm));
sin = (struct sockaddr_in *)&i->broadaddr; sin = (struct sockaddr_in *)&i->broadaddr;
memcpy(bc, &sin->sin_addr.s_addr, sizeof(unsigned long)); memcpy(bc, &sin->sin_addr.s_addr, sizeof(*bc));
return 0; return 0;
} }
static int set_ifstate(char *parent, unsigned long ip, static int set_ifstate(char *parent, in_addr_t ip, in_addr_t nm, in_addr_t bc,
unsigned long nm, unsigned long bc,
int flag) int flag)
{ {
char buf[IFNAMSIZ]; char buf[IFNAMSIZ];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment