From 0a02314e8d520766a9a00712ab49c02f1ebb7a63 Mon Sep 17 00:00:00 2001
From: Holger Weiss <hweiss@users.sourceforge.net>
Date: Thu, 26 Jul 2007 17:32:37 +0000
Subject: The "--serverip" and "--requestedip" options now accept host names,
 too. This doesn't quite fit the option names and so far I haven't changed the
 "--help" output which currently only talks about IP addresses.  However, I
 don't see why resolving host names should not be supported.

Also note that for the moment, I added a quick'n'dirty resolve_host()
function which should really go into netutils.c.  I just wanted to think
about its interface a bit more before providing such a function globally.


git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1766 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/NEWS b/NEWS
index 2d19664..7170b19 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ This file documents the major additions and syntax changes between releases.
 	  to check DHCP servers on remote networks
 	New check_dhcp -m/--mac option which allows for specifying the MAC
 	  address to use in the DHCP request
+	The check_dhcp -r and -s options now accept host names, too
 
 1.4.9 4th June 2006
 	Inclusion of contrib/check_cluster2 as check_cluster with some improvements
diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c
index a0f150f..c6e5af8 100644
--- a/plugins-root/check_dhcp.c
+++ b/plugins-root/check_dhcp.c
@@ -243,6 +243,7 @@ int validate_arguments(void);
 void print_usage(void);
 void print_help(void);
 
+void resolve_host(const char *in,struct in_addr *out);
 unsigned char *mac_aton(const char *);
 void print_hardware_address(const unsigned char *);
 int get_hardware_address(int,char *);
@@ -1089,7 +1090,6 @@ int process_arguments(int argc, char **argv){
 int call_getopt(int argc, char **argv){
 	int c=0;
 	int i=0;
-	struct in_addr ipaddress;
 
 	int option_index = 0;
 	static struct option long_options[] =
@@ -1128,27 +1128,13 @@ int call_getopt(int argc, char **argv){
 		switch(c){
 
 		case 's': /* DHCP server address */
-			if(inet_aton(optarg,&ipaddress)){
-				add_requested_server(ipaddress);
-				inet_aton(optarg, &dhcp_ip);
-				if (verbose)
-					printf("querying %s\n",inet_ntoa(dhcp_ip));
-			}
-			/*
-			else
-				usage("Invalid server IP address\n");
-			*/
+			resolve_host(optarg,&dhcp_ip);
+			add_requested_server(dhcp_ip);
 			break;
 
 		case 'r': /* address we are requested from DHCP servers */
-			if(inet_aton(optarg,&ipaddress)){
-				requested_address=ipaddress;
-				request_specific_address=TRUE;
-			        }
-			/*
-			else
-				usage("Invalid requested IP address\n");
-			*/
+			resolve_host(optarg,&requested_address);
+			request_specific_address=TRUE;
 			break;
 
 		case 't': /* timeout */
@@ -1352,6 +1338,20 @@ long mac_addr_dlpi( const char *dev, int unit, u_char  *addr){
 #endif
 
 
+/* resolve host name or die (TODO: move this to netutils.c!) */
+void resolve_host(const char *in,struct in_addr *out){
+	struct addrinfo hints, *ai;
+
+	memset(&hints,0,sizeof(hints));
+	hints.ai_family=PF_INET;
+	if (getaddrinfo(in,NULL,&hints,&ai) != 0)
+		usage_va(_("Invalid hostname/address - %s"),optarg);
+
+	memcpy(out,&((struct sockaddr_in *)ai->ai_addr)->sin_addr,sizeof(*out));
+	freeaddrinfo(ai);
+	}
+
+
 /* parse MAC address string, return 6 bytes (unterminated) or NULL */
 unsigned char *mac_aton(const char *string){
 	static unsigned char result[6];
-- 
cgit v0.10-9-g596f

