Code

check_host: Allocate a large-enough buffer for the host table.
[nagiosplug.git] / plugins / check_ntp_time.c
index ea24a0e7f9f3f6e301e4c04b36c9114969767268..f0f74b4e99298a5fb4dd3fadc983e4eafb09111b 100644 (file)
@@ -6,8 +6,6 @@
 * Copyright (c) 2006 Sean Finney <seanius@seanius.net>
 * Copyright (c) 2006-2008 Nagios Plugins Development Team
 * 
-* Last Modified: $Date$
-* 
 * Description:
 * 
 * This file contains the check_ntp_time plugin
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
-* $Id$
 * 
 *****************************************************************************/
 
 const char *progname = "check_ntp_time";
-const char *revision = "$Revision$";
 const char *copyright = "2006-2008";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
@@ -47,6 +43,7 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
 #include "utils.h"
 
 static char *server_address=NULL;
+static char *port="123";
 static int verbose=0;
 static int quiet=0;
 static char *owarn="60";
@@ -80,7 +77,7 @@ typedef struct {
 
 /* this structure holds data about results from querying offset from a peer */
 typedef struct {
-       time_t waiting;         /* ts set when we started waiting for a response */ 
+       time_t waiting;         /* ts set when we started waiting for a response */
        int num_responses;      /* number of successfully recieved responses */
        uint8_t stratum;        /* copied verbatim from the ntp_message */
        double rtdelay;         /* converted from the ntp_message */
@@ -131,7 +128,7 @@ typedef struct {
  they are divided into halves, each being a 16-bit int in network byte order:
  - the first 16 bits are an int on the left side of a decimal point.
  - the second 16 bits represent a fraction n/(2^16)
- likewise for the 64-bit "fixed point" numbers with everything doubled :) 
+ likewise for the 64-bit "fixed point" numbers with everything doubled :)
  **/
 
 /* macros to access the left/right 16 bits of a 32-bit ntp "fixed point"
@@ -298,7 +295,7 @@ int best_offset_server(const ntp_server_results *slist, int nservers){
 
 /* do everything we need to get the total average offset
  * - we use a certain amount of parallelization with poll() to ensure
- *   we don't waste time sitting around waiting for single packets. 
+ *   we don't waste time sitting around waiting for single packets.
  * - we also "manually" handle resolving host names and connecting, because
  *   we have to do it in a way that our lazy macros don't handle currently :( */
 double offset_request(const char *host, int *status){
@@ -319,7 +316,7 @@ double offset_request(const char *host, int *status){
        hints.ai_socktype = SOCK_DGRAM;
 
        /* fill in ai with the list of hosts resolved by the host name */
-       ga_result = getaddrinfo(host, "123", &hints, &ai);
+       ga_result = getaddrinfo(host, port, &hints, &ai);
        if(ga_result!=0){
                die(STATE_UNKNOWN, "error getting address for %s: %s\n",
                    host, gai_strerror(ga_result));
@@ -456,15 +453,16 @@ int process_arguments(int argc, char **argv){
                {"critical", required_argument, 0, 'c'},
                {"timeout", required_argument, 0, 't'},
                {"hostname", required_argument, 0, 'H'},
+               {"port", required_argument, 0, 'p'},
                {0, 0, 0, 0}
        };
 
-       
+
        if (argc < 2)
                usage ("\n");
 
        while (1) {
-               c = getopt_long (argc, argv, "Vhv46qw:c:t:H:", longopts, &option);
+               c = getopt_long (argc, argv, "Vhv46qw:c:t:H:p:", longopts, &option);
                if (c == -1 || c == EOF || c == 1)
                        break;
 
@@ -474,7 +472,7 @@ int process_arguments(int argc, char **argv){
                        exit(STATE_OK);
                        break;
                case 'V':
-                       print_revision(progname, revision);
+                       print_revision(progname, NP_VERSION);
                        exit(STATE_OK);
                        break;
                case 'v':
@@ -494,6 +492,9 @@ int process_arguments(int argc, char **argv){
                                usage2(_("Invalid hostname/address"), optarg);
                        server_address = strdup(optarg);
                        break;
+               case 'p':
+                       port = strdup(optarg);
+                       break;
                case 't':
                        socket_timeout=atoi(optarg);
                        break;
@@ -589,7 +590,7 @@ int main(int argc, char *argv[]){
 }
 
 void print_help(void){
-       print_revision(progname, revision);
+       print_revision(progname, NP_VERSION);
 
        printf ("Copyright (c) 2006 Sean Finney\n");
        printf (COPYRIGHT, copyright, email);
@@ -599,17 +600,17 @@ void print_help(void){
        printf ("\n\n");
 
        print_usage();
-       printf (_(UT_HELP_VRSN));
-       printf (_(UT_EXTRA_OPTS));
-       printf (_(UT_HOST_PORT), 'p', "123");
+       printf (UT_HELP_VRSN);
+       printf (UT_EXTRA_OPTS);
+       printf (UT_HOST_PORT, 'p', "123");
        printf (" %s\n", "-q, --quiet");
        printf ("    %s\n", _("Returns UNKNOWN instead of CRITICAL if offset cannot be found"));
        printf (" %s\n", "-w, --warning=THRESHOLD");
        printf ("    %s\n", _("Offset to result in warning status (seconds)"));
        printf (" %s\n", "-c, --critical=THRESHOLD");
        printf ("    %s\n", _("Offset to result in critical status (seconds)"));
-       printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
-       printf (_(UT_VERBOSE));
+       printf (UT_TIMEOUT, DEFAULT_SOCKET_TIMEOUT);
+       printf (UT_VERBOSE);
 
        printf("\n");
        printf("%s\n", _("This plugin checks the clock offset between the local host and a"));
@@ -621,23 +622,19 @@ void print_help(void){
        printf(" %s\n", _("If you'd rather want to monitor an NTP server, please use"));
        printf(" %s\n", _("check_ntp_peer."));
        printf("\n");
-       printf(_(UT_THRESHOLDS_NOTES));
-#ifdef NP_EXTRA_OPTS
-       printf("\n");
-       printf(_(UT_EXTRA_OPTS_NOTES));
-#endif
+       printf(UT_THRESHOLDS_NOTES);
 
        printf("\n");
        printf("%s\n", _("Examples:"));
        printf("  %s\n", ("./check_ntp_time -H ntpserv -w 0.5 -c 1"));
 
-       printf (_(UT_SUPPORT));
+       printf (UT_SUPPORT);
 }
 
 void
 print_usage(void)
 {
-       printf (_("Usage:"));
+       printf ("%s\n", _("Usage:"));
        printf(" %s -H <host> [-w <warn>] [-c <crit>] [-v verbose]\n", progname);
 }