[monitoring-plugins] check_dhcp: Fix option parsing

Holger Weiss git at monitoring-plugins.org
Fri Oct 2 12:50:10 CEST 2015


 Module: monitoring-plugins
 Branch: maint
 Commit: 466cb79e5224327c29fc6b84a1cec99c2b190c5a
 Author: Holger Weiss <holger at zedat.fu-berlin.de>
   Date: Fri Oct  2 12:18:13 2015 +0200
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=466cb79

check_dhcp: Fix option parsing

The call_getopt() function didn't always return the correct number of
processed arguments.  However, since check_dhcp doesn't support
non-option arguments, the caller doesn't need this number anyway.

Closes #1345.

---

 plugins-root/check_dhcp.c | 43 ++++++++++++-------------------------------
 1 file changed, 12 insertions(+), 31 deletions(-)

diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c
index 5508d5f..25d4ed4 100644
--- a/plugins-root/check_dhcp.c
+++ b/plugins-root/check_dhcp.c
@@ -229,7 +229,7 @@ struct in_addr requested_address;
 
 int process_arguments(int, char **);
 int call_getopt(int, char **);
-int validate_arguments(void);
+int validate_arguments(int, int);
 void print_usage(void);
 void print_help(void);
 
@@ -1059,29 +1059,19 @@ int get_results(void){
 
 /* process command-line arguments */
 int process_arguments(int argc, char **argv){
-	int c;
+	int arg_index;
 
 	if(argc<1)
 		return ERROR;
 
-	c=0;
-	while((c+=(call_getopt(argc-c,&argv[c])))<argc){
-
-		/*
-		if(is_option(argv[c]))
-			continue;
-		*/
-		}
-
-	return validate_arguments();
+	arg_index = call_getopt(argc,argv);
+	return validate_arguments(argc,arg_index);
         }
 
 
 
 int call_getopt(int argc, char **argv){
-	int c=0;
-	int i=0;
-
+	extern int optind;
 	int option_index = 0;
 	static struct option long_options[] =
 	{
@@ -1098,25 +1088,14 @@ int call_getopt(int argc, char **argv){
 	};
 
 	while(1){
-		c=getopt_long(argc,argv,"+hVvt:s:r:t:i:m:u",long_options,&option_index);
+		int c=0;
 
-		i++;
+		c=getopt_long(argc,argv,"+hVvt:s:r:t:i:m:u",long_options,&option_index);
 
 		if(c==-1||c==EOF||c==1)
 			break;
 
 		switch(c){
-		case 'w':
-		case 'r':
-		case 't':
-		case 'i':
-			i++;
-			break;
-		default:
-			break;
-		        }
-
-		switch(c){
 
 		case 's': /* DHCP server address */
 			resolve_host(optarg,&dhcp_ip);
@@ -1181,12 +1160,14 @@ int call_getopt(int argc, char **argv){
 			break;
 		        }
 	        }
-
-	return i+1;
+	return optind;
         }
 
 
-int validate_arguments(void){
+int validate_arguments(int argc, int arg_index){
+
+	if(argc-optind > 0)
+		usage(_("Got unexpected non-option argument"));
 
 	return OK;
         }



More information about the Commits mailing list