Code

Automatically update website with --help output. Cosmetic
[nagiosplug.git] / plugins-root / check_dhcp.c
index a0f150fbf281b8809eff8adc5f060ce80531a27c..bc2f4bbed69e0ba89f470403368efd72b3e89dcb 100644 (file)
@@ -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 *);
@@ -268,9 +269,6 @@ int main(int argc, char **argv){
        int dhcp_socket;
        int result = STATE_UNKNOWN;
 
-       /* this plugin almost certainly needs root permissions. */
-       np_warn_if_not_root();
-       
        setlocale (LC_ALL, "");
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
@@ -279,6 +277,9 @@ int main(int argc, char **argv){
                usage4 (_("Could not parse arguments"));
                }
 
+       /* this plugin almost certainly needs root permissions. */
+       np_warn_if_not_root();
+       
        /* create socket for DHCP communications */
        dhcp_socket=create_dhcp_socket();
 
@@ -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];