aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--plugins-root/check_dhcp.c38
2 files changed, 20 insertions, 19 deletions
diff --git a/NEWS b/NEWS
index 2d19664b..7170b19c 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 a0f150fb..c6e5af8a 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];