Add patches/11_check_dhcp_parsing_option from upstream maint branch (Closes: #784319)
This commit is contained in:
		
							parent
							
								
									608ba7503d
								
							
						
					
					
						commit
						8e98d7f62f
					
				
					 2 changed files with 108 additions and 0 deletions
				
			
		
							
								
								
									
										107
									
								
								debian/patches/11_check_dhcp_parsing_option
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								debian/patches/11_check_dhcp_parsing_option
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,107 @@
 | 
			
		|||
From 466cb79e5224327c29fc6b84a1cec99c2b190c5a Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Holger Weiss <holger@zedat.fu-berlin.de>
 | 
			
		||||
Date: Fri, 2 Oct 2015 12:18:13 +0200
 | 
			
		||||
Subject: [PATCH] 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;
 | 
			
		||||
+	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;
 | 
			
		||||
         }
 | 
			
		||||
							
								
								
									
										1
									
								
								debian/patches/series
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/patches/series
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
02_check_icmp_links
 | 
			
		||||
# commited upstream
 | 
			
		||||
10_sslutils_checksslv3
 | 
			
		||||
11_check_dhcp_parsing_option
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue