Code

Code cleanup
[nagiosplug.git] / plugins / utils.c
index 10d544c43bdf0aedf8a071714537db4f73020ea6..0d250677c218ced9d6936826d455220d890d1722 100644 (file)
 #include <stdarg.h>
 #include <limits.h>
 
 #include <stdarg.h>
 #include <limits.h>
 
+#include <arpa/inet.h>
+
 extern int timeout_interval;
 extern int timeout_interval;
+extern const char *progname;
 
 
-char *my_basename (char *);
 void support (void);
 char *clean_revstring (const char *);
 void support (void);
 char *clean_revstring (const char *);
-void print_revision (char *, const char *);
+void print_revision (const char *, const char *);
 void terminate (int, const char *fmt, ...);
 RETSIGTYPE timeout_alarm_handler (int);
 
 int is_host (char *);
 void terminate (int, const char *fmt, ...);
 RETSIGTYPE timeout_alarm_handler (int);
 
 int is_host (char *);
-int is_dotted_quad (char *);
+int is_addr (char *);
+int resolve_host_or_addr (char *, int);
+int is_inet_addr (char *);
+int is_inet6_addr (char *);
 int is_hostname (char *);
 
 int is_integer (char *);
 int is_hostname (char *);
 
 int is_integer (char *);
@@ -57,53 +62,53 @@ char *strpcat (char *dest, const char *src, const char *str);
 #define STRLEN 64
 #define TXTBLK 128
 
 #define STRLEN 64
 #define TXTBLK 128
 
-#define max(a,b) ((a)>(b))?(a):(b)
-
 /* **************************************************************************
 /* **************************************************************************
* max_state(result, STATE_x)
- * compares STATE_x to result and returns result if STATE_x is less than a based on the following
/* max_state(STATE_x, STATE_y)
+ * compares STATE_x to  STATE_y and returns result based on the following
  * STATE_UNKNOWN < STATE_OK < STATE_WARNING < STATE_CRITICAL
  *
  * Note that numerically the above does not hold
  ****************************************************************************/
 
  * STATE_UNKNOWN < STATE_OK < STATE_WARNING < STATE_CRITICAL
  *
  * Note that numerically the above does not hold
  ****************************************************************************/
 
+#define max(a,b) (((a)>(b))?(a):(b))
+
 int
 int
-max_state(int a, int b)
+max_state (int a, int b)
 {
 {
-       if(a == STATE_CRITICAL){
-               return a;
-       }
-       else if (a == STATE_WARNING) {
-
-               if (b == STATE_CRITICAL){
-                       return b;
-               }else {
-                       return a;
-               }
-       } 
-       else if (a == STATE_OK) {
-               
-               if ( b== STATE_CRITICAL || b == STATE_WARNING) {
-                       return b;
-               }else{
-                       return a;
-               }
-       }
-       else {
-               /* a == UNKNOWN */
-               return b;
-       }
-               
+       if (a == STATE_CRITICAL || b == STATE_CRITICAL)
+               return STATE_CRITICAL;
+       else if (a == STATE_WARNING || b == STATE_WARNING)
+               return STATE_WARNING;
+       else if (a == STATE_OK || b == STATE_OK)
+               return STATE_OK;
+       else if (a == STATE_UNKNOWN || b == STATE_UNKNOWN)
+               return STATE_UNKNOWN;
+       else if (a == STATE_DEPENDENT || b == STATE_DEPENDENT)
+               return STATE_DEPENDENT;
+       else
+               return max (a, b);
+}
 
 
+void usage (char *msg)
+{
+       printf (msg);
+       print_usage ();
+       exit (STATE_UNKNOWN);
 }
 
 }
 
-char *
-my_basename (char *path)
+void usage2(char *msg, char *arg)
 {
 {
-       if (!strstr (path, "/"))
-               return path;
-       else
-               return 1 + strrchr (path, '/');
+       printf ("%s: %s - %s\n",progname,msg,arg);
+       print_usage ();
+       exit (STATE_UNKNOWN);
+}
+
+void
+usage3 (char *msg, char arg)
+{
+       printf ("%s: %s - %c\n", progname, msg, arg);
+       print_usage();
+       exit (STATE_UNKNOWN);
 }
 
 
 }
 
 
@@ -128,14 +133,14 @@ clean_revstring (const char *revstring)
 }
 
 void
 }
 
 void
-print_revision (char *command_name, const char *revision_string)
+print_revision (const char *command_name, const char *revision_string)
 {
        char plugin_revision[STRLEN];
 
        if (sscanf (revision_string, "$Revision: %[0-9.]", plugin_revision) != 1)
                strncpy (plugin_revision, "N/A", STRLEN);
        printf ("%s (nagios-plugins %s) %s\n",
 {
        char plugin_revision[STRLEN];
 
        if (sscanf (revision_string, "$Revision: %[0-9.]", plugin_revision) != 1)
                strncpy (plugin_revision, "N/A", STRLEN);
        printf ("%s (nagios-plugins %s) %s\n",
-                                       my_basename (command_name), VERSION, plugin_revision);
+                                       progname, VERSION, plugin_revision);
        printf
                ("The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\n"
                 "copies of the plugins under the terms of the GNU General Public License.\n"
        printf
                ("The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\n"
                 "copies of the plugins under the terms of the GNU General Public License.\n"
@@ -167,25 +172,50 @@ timeout_alarm_handler (int signo)
 int
 is_host (char *address)
 {
 int
 is_host (char *address)
 {
-       if (is_dotted_quad (address) || is_hostname (address))
+       if (is_addr (address) || is_hostname (address))
                return (TRUE);
                return (TRUE);
+
        return (FALSE);
 }
 
 int
        return (FALSE);
 }
 
 int
-is_dotted_quad (char *address)
+is_addr (char *address)
 {
 {
-       int o1, o2, o3, o4;
-       char c[1];
+       if (is_inet_addr (address) || is_inet6_addr (address))
+               return (TRUE);
 
 
-       if (sscanf (address, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, c) != 4)
-               return FALSE;
-       else if (o1 > 255 || o2 > 255 || o3 > 255 || o4 > 255)
-               return FALSE;
-       else if (o1 < 0 || o2 < 0 || o3 < 0 || o4 < 0)
+       return (FALSE);
+}
+
+int
+resolve_host_or_addr (char *address, int family)
+{
+       struct addrinfo hints;
+       struct addrinfo *res;
+       int retval;
+
+       memset (&hints, 0, sizeof (hints));
+       hints.ai_family = family;
+       retval = getaddrinfo (address, NULL, &hints, &res);
+
+       if (retval != 0)
                return FALSE;
                return FALSE;
-       else
+       else {
+               freeaddrinfo (res);
                return TRUE;
                return TRUE;
+       }
+}
+
+int
+is_inet_addr (char *address)
+{
+       return resolve_host_or_addr (address, AF_INET);
+}
+
+int
+is_inet6_addr (char *address)
+{
+       return resolve_host_or_addr (address, AF_INET6);
 }
 
 /* from RFC-1035
 }
 
 /* from RFC-1035
@@ -198,22 +228,7 @@ is_dotted_quad (char *address)
 int
 is_hostname (char *s1)
 {
 int
 is_hostname (char *s1)
 {
-       if (strlen (s1) > 63)
-               return FALSE;
-       if (strcspn
-                       (s1,
-                        "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUWVXYZ0123456789-.") !=
-                       0) return FALSE;
-       if (strspn (s1, "0123456789-.") == 1)
-               return FALSE;
-       while ((s1 = index (s1, '.'))) {
-               s1++;
-               if (strspn (s1, "0123456789-.") == 1) {
-                       printf ("%s\n", s1);
-                       return FALSE;
-               }
-       }
-       return TRUE;
+       return resolve_host_or_addr (s1, AF_UNSPEC);
 }
 
 int
 }
 
 int
@@ -221,33 +236,40 @@ is_numeric (char *number)
 {
        char tmp[1];
        float x;
 {
        char tmp[1];
        float x;
-       if (sscanf (number, "%f%c", &x, tmp) == 1)
-               return (TRUE);
-       return (FALSE);
+
+       if (!number)
+               return FALSE;
+       else if (sscanf (number, "%f%c", &x, tmp) == 1)
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_positive (char *number)
 {
        if (is_numeric (number) && atof (number) > 0.0)
 }
 
 int
 is_positive (char *number)
 {
        if (is_numeric (number) && atof (number) > 0.0)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_negative (char *number)
 {
        if (is_numeric (number) && atof (number) < 0.0)
 }
 
 int
 is_negative (char *number)
 {
        if (is_numeric (number) && atof (number) < 0.0)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_nonnegative (char *number)
 {
        if (is_numeric (number) && atof (number) >= 0.0)
 }
 
 int
 is_nonnegative (char *number)
 {
        if (is_numeric (number) && atof (number) >= 0.0)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 }
 
 int
@@ -255,8 +277,9 @@ is_percentage (char *number)
 {
        int x;
        if (is_numeric (number) && (x = atof (number)) >= 0 && x <= 100)
 {
        int x;
        if (is_numeric (number) && (x = atof (number)) >= 0 && x <= 100)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 }
 
 int
@@ -264,37 +287,42 @@ is_integer (char *number)
 {
        long int n;
 
 {
        long int n;
 
-       if (strspn (number, "-0123456789 ") != strlen (number))
-               return (FALSE);
+       if (!number || (strspn (number, "-0123456789 ") != strlen (number)))
+               return FALSE;
 
        n = strtol (number, NULL, 10);
 
        n = strtol (number, NULL, 10);
+
        if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX)
        if (errno != ERANGE && n >= INT_MIN && n <= INT_MAX)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_intpos (char *number)
 {
        if (is_integer (number) && atoi (number) > 0)
 }
 
 int
 is_intpos (char *number)
 {
        if (is_integer (number) && atoi (number) > 0)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_intneg (char *number)
 {
        if (is_integer (number) && atoi (number) < 0)
 }
 
 int
 is_intneg (char *number)
 {
        if (is_integer (number) && atoi (number) < 0)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_intnonneg (char *number)
 {
        if (is_integer (number) && atoi (number) >= 0)
 }
 
 int
 is_intnonneg (char *number)
 {
        if (is_integer (number) && atoi (number) >= 0)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 }
 
 int
@@ -302,16 +330,20 @@ is_intpercent (char *number)
 {
        int i;
        if (is_integer (number) && (i = atoi (number)) >= 0 && i <= 100)
 {
        int i;
        if (is_integer (number) && (i = atoi (number)) >= 0 && i <= 100)
-               return (TRUE);
-       return (FALSE);
+               return TRUE;
+       else
+               return FALSE;
 }
 
 int
 is_option (char *str)
 {
 }
 
 int
 is_option (char *str)
 {
-       if (strspn (str, "-") == 1 || strspn (str, "-") == 2)
+       if (!str)
+               return FALSE;
+       else if (strspn (str, "-") == 1 || strspn (str, "-") == 2)
                return TRUE;
                return TRUE;
-       return FALSE;
+       else
+               return FALSE;
 }
 
 
 }