Module: monitoring-plugins
 Branch: master
 Commit: e3ade3374a99155c8c70d89a8d8116240d5c8df0
 Author: Jacob Hansen <jhan...@op5.com>
   Date: Mon Dec  3 14:19:27 2018 +0000
    URL: 
https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=e3ade33

check_icmp: process protocol version args first

Detection of protocol version is in the previous patch implemented in
the add_target() function, which is called when adding the -H command
line argument. That means that if a protocal version argument (-4, -6)
is added after the -H then the protocol version might be incorrectly
set.

This patch ensures that we first process the protocol version arguments,
and then we process the rest of the arguments.

Signed-off-by: Jacob Hansen <jhan...@op5.com>

---

 plugins-root/check_icmp.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c
index cab69fd..b978ee1 100644
--- a/plugins-root/check_icmp.c
+++ b/plugins-root/check_icmp.c
@@ -460,6 +460,28 @@ main(int argc, char **argv)
                packets = 5;
        }
 
+       /* Parse protocol arguments first */
+       for(i = 1; i < argc; i++) {
+               while((arg = getopt(argc, argv, 
"vhVw:c:n:p:t:H:s:i:b:I:l:m:64")) != EOF) {
+                       unsigned short size;
+                       switch(arg) {
+                       case '4':
+                               address_family = AF_INET;
+                               break;
+                       case '6':
+#ifdef USE_IPV6
+                               address_family = AF_INET6;
+#else
+                               usage (_("IPv6 support not available\n"));
+#endif
+                               break;
+                       }
+               }
+       }
+
+       /* Reset argument scanning */
+       optind = 1;
+
        /* parse the arguments */
        for(i = 1; i < argc; i++) {
                while((arg = getopt(argc, argv, 
"vhVw:c:n:p:t:H:s:i:b:I:l:m:64")) != EOF) {
@@ -524,16 +546,6 @@ main(int argc, char **argv)
                                print_help ();
                                exit (STATE_UNKNOWN);
                                break;
-                       case '4':
-                               address_family = AF_INET;
-                               break;
-                       case '6':
-#ifdef USE_IPV6
-                               address_family = AF_INET6;
-#else
-                               usage (_("IPv6 support not available\n"));
-#endif
-                               break;
                        }
                }
        }

Reply via email to