X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Fifconfig.c;h=7b358c43f06c500121264220cfc2b65a1b28f592;hb=5929edc1fac4340f99ed84e92bf3a2bedd4177c2;hp=b884ef7c3d19724e268559dfe0fb71b05d351020;hpb=c7bda1ce659294d6e22c06e087f6f265983c7578;p=oweals%2Fbusybox.git diff --git a/networking/ifconfig.c b/networking/ifconfig.c index b884ef7c3..7b358c43f 100644 --- a/networking/ifconfig.c +++ b/networking/ifconfig.c @@ -1,3 +1,4 @@ +/* vi: set sw=4 ts=4: */ /* ifconfig * * Similar to the standard Unix ifconfig, but with only the necessary @@ -9,14 +10,7 @@ * Authors of the original ifconfig was: * Fred N. van Kempen, * - * This program is free software; you can redistribute it - * and/or modify it under the terms of the GNU General - * Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * $Id: ifconfig.c,v 1.29 2004/03/15 08:28:48 andersen Exp $ - * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ /* @@ -37,6 +31,8 @@ #include /* strcmp and friends */ #include /* isdigit and friends */ #include /* offsetof */ +#include +#include #include #include #include @@ -45,8 +41,8 @@ #include #include #else -#include -#include +#include +#include #endif #include "inet_common.h" #include "busybox.h" @@ -176,7 +172,7 @@ struct in6_ifreq { struct arg1opt { const char *name; - unsigned short selector; + int selector; unsigned short ifr_offset; }; @@ -333,9 +329,7 @@ int ifconfig_main(int argc, char **argv) } /* Create a channel to the NET kernel. */ - if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - bb_perror_msg_and_die("socket"); - } + sockfd = bb_xsocket(AF_INET, SOCK_DGRAM, 0); /* get interface name */ safe_strncpy(ifr.ifr_name, *argv, IFNAMSIZ); @@ -351,7 +345,7 @@ int ifconfig_main(int argc, char **argv) for (op = OptArray; op->name; op++) { /* Find table entry. */ if (strcmp(p, op->name) == 0) { /* If name matches... */ if ((mask &= op->flags)) { /* set the mask and go. */ - goto FOUND_ARG;; + goto FOUND_ARG; } /* If we get here, there was a valid arg with an */ /* invalid '-' prefix. */ @@ -443,8 +437,13 @@ int ifconfig_main(int argc, char **argv) #endif } else if (inet_aton(host, &sai.sin_addr) == 0) { /* It's not a dotted quad. */ - ++goterr; - continue; + struct hostent *hp; + if ((hp = gethostbyname(host)) == (struct hostent *)NULL) { + ++goterr; + continue; + } + memcpy((char *) &sai.sin_addr, (char *) hp->h_addr_list[0], + sizeof(struct in_addr)); } #ifdef CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS if (mask & A_HOSTNAME) { @@ -473,7 +472,7 @@ int ifconfig_main(int argc, char **argv) memcpy((((char *) (&ifr)) + a1op->ifr_offset), p, sizeof(struct sockaddr)); } else { - unsigned int i = strtoul(*argv, NULL, 0); + unsigned long i = strtoul(*argv, NULL, 0); p = ((char *) (&ifr)) + a1op->ifr_offset; #ifdef CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ @@ -552,6 +551,7 @@ int ifconfig_main(int argc, char **argv) continue; } /* end of while-loop */ + if (ENABLE_FEATURE_CLEAN_UP) close(sockfd); return goterr; } @@ -559,7 +559,7 @@ int ifconfig_main(int argc, char **argv) /* Input an Ethernet address and convert to binary. */ static int in_ether(char *bufp, struct sockaddr *sap) { - unsigned char *ptr; + char *ptr; int i, j; unsigned char val; unsigned char c;