diff options
author | Holger Weiss <hweiss@users.sourceforge.net> | 2007-07-26 17:32:37 +0000 |
---|---|---|
committer | Holger Weiss <hweiss@users.sourceforge.net> | 2007-07-26 17:32:37 +0000 |
commit | 0a02314e8d520766a9a00712ab49c02f1ebb7a63 (patch) | |
tree | 342b042a94e467c55dd2921cf2d5af70bb4d61c7 /plugins-root/check_dhcp.c | |
parent | ee33124028a0a5adb13123c0683b04323d26c3b3 (diff) | |
download | monitoring-plugins-0a02314e8d520766a9a00712ab49c02f1ebb7a63.tar.gz |
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
Diffstat (limited to 'plugins-root/check_dhcp.c')
-rw-r--r-- | plugins-root/check_dhcp.c | 38 |
1 files changed, 19 insertions, 19 deletions
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]; |