aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/libiproute/ipaddress.c22
-rw-r--r--networking/libiproute/iprule.c8
-rw-r--r--networking/libiproute/iptunnel.c6
3 files changed, 16 insertions, 20 deletions
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c
index 3fd3f4478..aa4779ad1 100644
--- a/networking/libiproute/ipaddress.c
+++ b/networking/libiproute/ipaddress.c
@@ -627,10 +627,12 @@ static int ipaddr_modify(int cmd, char **argv)
627 req.ifa.ifa_family = preferred_family; 627 req.ifa.ifa_family = preferred_family;
628 628
629 while (*argv) { 629 while (*argv) {
630 const smalluint arg = index_in_strings(option, *argv); 630 unsigned arg = index_in_strings(option, *argv);
631 if (arg <= 1) { /* peer, remote */ 631 /* if search fails, "local" is assumed */
632 if ((int)arg >= 0)
632 NEXT_ARG(); 633 NEXT_ARG();
633 634
635 if (arg <= 1) { /* peer, remote */
634 if (peer_len) { 636 if (peer_len) {
635 duparg("peer", *argv); 637 duparg("peer", *argv);
636 } 638 }
@@ -643,7 +645,6 @@ static int ipaddr_modify(int cmd, char **argv)
643 req.ifa.ifa_prefixlen = peer.bitlen; 645 req.ifa.ifa_prefixlen = peer.bitlen;
644 } else if (arg <= 3) { /* broadcast, brd */ 646 } else if (arg <= 3) { /* broadcast, brd */
645 inet_prefix addr; 647 inet_prefix addr;
646 NEXT_ARG();
647 if (brd_len) { 648 if (brd_len) {
648 duparg("broadcast", *argv); 649 duparg("broadcast", *argv);
649 } 650 }
@@ -660,7 +661,6 @@ static int ipaddr_modify(int cmd, char **argv)
660 } 661 }
661 } else if (arg == 4) { /* anycast */ 662 } else if (arg == 4) { /* anycast */
662 inet_prefix addr; 663 inet_prefix addr;
663 NEXT_ARG();
664 if (any_len) { 664 if (any_len) {
665 duparg("anycast", *argv); 665 duparg("anycast", *argv);
666 } 666 }
@@ -672,22 +672,18 @@ static int ipaddr_modify(int cmd, char **argv)
672 any_len = addr.bytelen; 672 any_len = addr.bytelen;
673 } else if (arg == 5) { /* scope */ 673 } else if (arg == 5) { /* scope */
674 uint32_t scope = 0; 674 uint32_t scope = 0;
675 NEXT_ARG();
676 if (rtnl_rtscope_a2n(&scope, *argv)) { 675 if (rtnl_rtscope_a2n(&scope, *argv)) {
677 invarg(*argv, "scope"); 676 invarg(*argv, "scope");
678 } 677 }
679 req.ifa.ifa_scope = scope; 678 req.ifa.ifa_scope = scope;
680 scoped = 1; 679 scoped = 1;
681 } else if (arg == 6) { /* dev */ 680 } else if (arg == 6) { /* dev */
682 NEXT_ARG();
683 d = *argv; 681 d = *argv;
684 } else if (arg == 7) { /* label */ 682 } else if (arg == 7) { /* label */
685 NEXT_ARG();
686 l = *argv; 683 l = *argv;
687 addattr_l(&req.n, sizeof(req), IFA_LABEL, l, strlen(l) + 1); 684 addattr_l(&req.n, sizeof(req), IFA_LABEL, l, strlen(l) + 1);
688 } else { 685 } else {
689 if (arg == 8) /* local */ 686 /* local (specified or assumed) */
690 NEXT_ARG();
691 if (local_len) { 687 if (local_len) {
692 duparg2("local", *argv); 688 duparg2("local", *argv);
693 } 689 }
@@ -724,7 +720,7 @@ static int ipaddr_modify(int cmd, char **argv)
724 } 720 }
725 brd = peer; 721 brd = peer;
726 if (brd.bitlen <= 30) { 722 if (brd.bitlen <= 30) {
727 for (i=31; i>=brd.bitlen; i--) { 723 for (i = 31; i >= brd.bitlen; i--) {
728 if (brd_len == -1) 724 if (brd_len == -1)
729 brd.data[0] |= htonl(1<<(31-i)); 725 brd.data[0] |= htonl(1<<(31-i));
730 else 726 else
@@ -754,11 +750,11 @@ int FAST_FUNC do_ipaddr(char **argv)
754{ 750{
755 static const char commands[] ALIGN1 = 751 static const char commands[] ALIGN1 =
756 "add\0""delete\0""list\0""show\0""lst\0""flush\0"; 752 "add\0""delete\0""list\0""show\0""lst\0""flush\0";
757 smalluint cmd = 2; 753 int cmd = 2;
758 if (*argv) { 754 if (*argv) {
759 cmd = index_in_substrings(commands, *argv); 755 cmd = index_in_substrings(commands, *argv);
760 if (cmd > 5) 756 if (cmd < 0)
761 bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); 757 invarg(*argv, applet_name);
762 argv++; 758 argv++;
763 if (cmd <= 1) 759 if (cmd <= 1)
764 return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv); 760 return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv);
diff --git a/networking/libiproute/iprule.c b/networking/libiproute/iprule.c
index 241a6bf9d..8dbe6bd92 100644
--- a/networking/libiproute/iprule.c
+++ b/networking/libiproute/iprule.c
@@ -215,7 +215,7 @@ static int iprule_modify(int cmd, char **argv)
215 while (*argv) { 215 while (*argv) {
216 key = index_in_substrings(keywords, *argv) + 1; 216 key = index_in_substrings(keywords, *argv) + 1;
217 if (key == 0) /* no match found in keywords array, bail out. */ 217 if (key == 0) /* no match found in keywords array, bail out. */
218 bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); 218 invarg(*argv, applet_name);
219 if (key == ARG_from) { 219 if (key == ARG_from) {
220 inet_prefix dst; 220 inet_prefix dst;
221 NEXT_ARG(); 221 NEXT_ARG();
@@ -308,9 +308,9 @@ int FAST_FUNC do_iprule(char **argv)
308 static const char ip_rule_commands[] ALIGN1 = 308 static const char ip_rule_commands[] ALIGN1 =
309 "add\0""delete\0""list\0""show\0"; 309 "add\0""delete\0""list\0""show\0";
310 if (*argv) { 310 if (*argv) {
311 smalluint cmd = index_in_substrings(ip_rule_commands, *argv); 311 int cmd = index_in_substrings(ip_rule_commands, *argv);
312 if (cmd > 3) 312 if (cmd < 0)
313 bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); 313 invarg(*argv, applet_name);
314 argv++; 314 argv++;
315 if (cmd < 2) 315 if (cmd < 2)
316 return iprule_modify((cmd == 0) ? RTM_NEWRULE : RTM_DELRULE, argv); 316 return iprule_modify((cmd == 0) ? RTM_NEWRULE : RTM_DELRULE, argv);
diff --git a/networking/libiproute/iptunnel.c b/networking/libiproute/iptunnel.c
index 2b651b926..b54c3c53f 100644
--- a/networking/libiproute/iptunnel.c
+++ b/networking/libiproute/iptunnel.c
@@ -561,9 +561,9 @@ int FAST_FUNC do_iptunnel(char **argv)
561 enum { ARG_add = 0, ARG_change, ARG_del, ARG_show, ARG_list, ARG_lst }; 561 enum { ARG_add = 0, ARG_change, ARG_del, ARG_show, ARG_list, ARG_lst };
562 562
563 if (*argv) { 563 if (*argv) {
564 smalluint key = index_in_substrings(keywords, *argv); 564 int key = index_in_substrings(keywords, *argv);
565 if (key > 5) 565 if (key < 0)
566 bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); 566 invarg(*argv, applet_name);
567 argv++; 567 argv++;
568 if (key == ARG_add) 568 if (key == ARG_add)
569 return do_add(SIOCADDTUNNEL, argv); 569 return do_add(SIOCADDTUNNEL, argv);