X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_tcp.c;h=8a42a6439d28fc0b5499a7b789b239b10b54be4a;hb=b69a16dc7d56926c23627820ede9839f96575083;hp=e3fac22e103a49daa48ba0212529e6d8d9281b62;hpb=7cfdb411a52b4d34cdfa102014436201ed208df2;p=nagiosplug.git diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c index e3fac22..8a42a64 100644 --- a/plugins/check_tcp.c +++ b/plugins/check_tcp.c @@ -22,7 +22,6 @@ * *****************************************************************************/ -#define PROGRAM check_tcp #define REVISION "$Revision$" #define DESCRIPTION "Check a TCP port" #define AUTHOR "Ethan Galstad" @@ -65,7 +64,7 @@ int process_arguments (int, char **); void print_usage (void); void print_help (void); -char *PROGNAME = NULL; +char *progname = "check_tcp"; char *SERVICE = NULL; char *SEND = NULL; char *EXPECT = NULL; @@ -91,22 +90,20 @@ int check_critical_time = FALSE; double elapsed_time = 0; int verbose = FALSE; int use_ssl = FALSE; -int sd; +int sd = 0; int main (int argc, char **argv) { int result; int i; - char buffer[MAX_INPUT_BUFFER] = ""; + char *buffer = ""; char *status = ""; - char *output = NULL; - char *ptr = NULL; struct timeval tv; if (strstr (argv[0], "check_udp")) { - PROGNAME = strscpy (PROGNAME, "check_udp"); - SERVICE = strscpy (SERVICE, "UDP"); + asprintf (&progname, "check_udp"); + asprintf (&SERVICE, "UDP"); SEND = NULL; EXPECT = NULL; QUIT = NULL; @@ -114,8 +111,8 @@ main (int argc, char **argv) PORT = 0; } else if (strstr (argv[0], "check_tcp")) { - PROGNAME = strscpy (PROGNAME, "check_tcp"); - SERVICE = strscpy (SERVICE, "TCP"); + asprintf (&progname, "check_tcp"); + asprintf (&SERVICE, "TCP"); SEND = NULL; EXPECT = NULL; QUIT = NULL; @@ -123,73 +120,73 @@ main (int argc, char **argv) PORT = 0; } else if (strstr (argv[0], "check_ftp")) { - PROGNAME = strscpy (PROGNAME, "check_ftp"); - SERVICE = strscpy (SERVICE, "FTP"); + asprintf (&progname, "check_ftp"); + asprintf (&SERVICE, "FTP"); SEND = NULL; - EXPECT = strscpy (EXPECT, "220"); - QUIT = strscpy (QUIT, "QUIT\r\n"); + asprintf (&EXPECT, "220"); + asprintf (&QUIT, "QUIT\r\n"); PROTOCOL = TCP_PROTOCOL; PORT = 21; } else if (strstr (argv[0], "check_smtp")) { - PROGNAME = strscpy (PROGNAME, "check_smtp"); - SERVICE = strscpy (SERVICE, "SMTP"); + asprintf (&progname, "check_smtp"); + asprintf (&SERVICE, "SMTP"); SEND = NULL; - EXPECT = strscpy (EXPECT, "220"); - QUIT = strscpy (QUIT, "QUIT\r\n"); + asprintf (&EXPECT, "220"); + asprintf (&QUIT, "QUIT\r\n"); PROTOCOL = TCP_PROTOCOL; PORT = 25; } else if (strstr (argv[0], "check_pop")) { - PROGNAME = strscpy (PROGNAME, "check_pop"); - SERVICE = strscpy (SERVICE, "POP"); + asprintf (&progname, "check_pop"); + asprintf (&SERVICE, "POP"); SEND = NULL; - EXPECT = strscpy (EXPECT, "110"); - QUIT = strscpy (QUIT, "QUIT\r\n"); + asprintf (&EXPECT, "+OK"); + asprintf (&QUIT, "QUIT\r\n"); PROTOCOL = TCP_PROTOCOL; PORT = 110; } else if (strstr (argv[0], "check_imap")) { - PROGNAME = strscpy (PROGNAME, "check_imap"); - SERVICE = strscpy (SERVICE, "IMAP"); + asprintf (&progname, "check_imap"); + asprintf (&SERVICE, "IMAP"); SEND = NULL; - EXPECT = strscpy (EXPECT, "* OK"); - QUIT = strscpy (QUIT, "a1 LOGOUT\r\n"); + asprintf (&EXPECT, "* OK"); + asprintf (&QUIT, "a1 LOGOUT\r\n"); PROTOCOL = TCP_PROTOCOL; PORT = 143; } #ifdef HAVE_SSL else if (strstr(argv[0],"check_simap")) { - PROGNAME=strscpy(PROGNAME,"check_simap"); - SERVICE=strscpy(SERVICE,"SIMAP"); + asprintf (&progname, "check_simap"); + asprintf (&SERVICE, "SIMAP"); SEND=NULL; - EXPECT=strscpy(EXPECT,"* OK"); - QUIT=strscpy(QUIT,"a1 LOGOUT\r\n"); + asprintf (&EXPECT, "* OK"); + asprintf (&QUIT, "a1 LOGOUT\r\n"); PROTOCOL=TCP_PROTOCOL; use_ssl=TRUE; PORT=993; } else if (strstr(argv[0],"check_spop")) { - PROGNAME=strscpy(PROGNAME,"check_spop"); - SERVICE=strscpy(SERVICE,"SPOP"); + asprintf (&progname, "check_spop"); + asprintf (&SERVICE, "SPOP"); SEND=NULL; - EXPECT=strscpy(EXPECT,"110"); - QUIT=strscpy(QUIT,"QUIT\r\n"); + asprintf (&EXPECT, "+OK"); + asprintf (&QUIT, "QUIT\r\n"); PROTOCOL=TCP_PROTOCOL; use_ssl=TRUE; PORT=995; } #endif else if (strstr (argv[0], "check_nntp")) { - PROGNAME = strscpy (PROGNAME, "check_nntp"); - SERVICE = strscpy (SERVICE, "NNTP"); + asprintf (&progname, "check_nntp"); + asprintf (&SERVICE, "NNTP"); SEND = NULL; EXPECT = NULL; server_expect = realloc (server_expect, ++server_expect_count); - server_expect[server_expect_count - 1] = strscpy (EXPECT, "200"); + asprintf (&server_expect[server_expect_count - 1], "200"); server_expect = realloc (server_expect, ++server_expect_count); - server_expect[server_expect_count - 1] = strscpy (NULL, "201"); - QUIT = strscpy (QUIT, "QUIT\r\n"); + asprintf (&server_expect[server_expect_count - 1], "201"); + asprintf (&QUIT, "QUIT\r\n"); PROTOCOL = TCP_PROTOCOL; PORT = 119; } @@ -197,7 +194,7 @@ main (int argc, char **argv) usage ("ERROR: Generic check_tcp called with unknown service\n"); } - server_address = strscpy (NULL, "127.0.0.1"); + asprintf (&server_address, "127.0.0.1"); server_port = PORT; server_send = SEND; server_quit = QUIT; @@ -207,7 +204,7 @@ main (int argc, char **argv) /* use default expect if none listed in process_arguments() */ if (EXPECT && server_expect_count == 0) { - server_expect = malloc (1); + server_expect = malloc (++server_expect_count); server_expect[server_expect_count - 1] = EXPECT; } @@ -251,22 +248,22 @@ main (int argc, char **argv) if (server_send || server_expect_count > 0) { + buffer = malloc (MAX_INPUT_BUFFER); /* watch for the expect string */ #ifdef HAVE_SSL - if (use_ssl && SSL_read (ssl, buffer, MAX_INPUT_BUFFER - 1)>=0) + if (use_ssl && SSL_read (ssl, buffer, MAX_INPUT_BUFFER - 1) > 0) asprintf (&status, "%s%s", status, buffer); else #endif - { - if (recv (sd, buffer, MAX_INPUT_BUFFER - 1, 0) >= 0) - asprintf (&status, "%s%s", status, buffer); - } - strip (status); + if (recv (sd, buffer, MAX_INPUT_BUFFER - 1, 0) > 0) + asprintf (&status, "%s%s", status, buffer); /* return a CRITICAL status if we couldn't read any data */ if (status == NULL) terminate (STATE_CRITICAL, "No data received from host\n"); + strip (status); + if (status && verbose) printf ("%s\n", status); @@ -287,15 +284,16 @@ main (int argc, char **argv) if (use_ssl) { SSL_write (ssl, QUIT, strlen (QUIT)); SSL_shutdown (ssl); - SSL_free (ssl); - SSL_CTX_free (ctx); + SSL_free (ssl); + SSL_CTX_free (ctx); } else #endif send (sd, server_quit, strlen (server_quit), 0); /* close the connection */ - close (sd); + if (sd) + close (sd); elapsed_time = delta_time (tv); @@ -312,7 +310,7 @@ main (int argc, char **argv) SERVICE, state_text (result), elapsed_time, server_port); - if (strlen (status)) + if (status && strlen(status) > 0) printf (" [%s]", status); printf ("|time=%7.3f\n", elapsed_time); @@ -388,21 +386,21 @@ process_arguments (int argc, char **argv) switch (c) { case '?': /* print short usage statement if args not parsable */ - printf ("%s: Unknown argument: %s\n\n", my_basename (argv[0]), optarg); + printf ("%s: Unknown argument: %s\n\n", progname, optarg); print_usage (); exit (STATE_UNKNOWN); case 'h': /* help */ print_help (); exit (STATE_OK); case 'V': /* version */ - print_revision (PROGNAME, "$Revision$"); + print_revision (progname, "$Revision$"); exit (STATE_OK); case 'v': /* verbose mode */ verbose = TRUE; break; case 'H': /* hostname */ if (is_host (optarg) == FALSE) - usage ("Invalid host name/address\n"); + usage2 ("invalid host name or address", optarg); server_address = optarg; break; case 'c': /* critical */ @@ -480,7 +478,7 @@ print_usage (void) { printf ("Usage: %s -H host -p port [-w warn_time] [-c crit_time] [-s send]\n" - " [-e expect] [-W wait] [-t to_sec] [-v]\n", PROGNAME); + " [-e expect] [-W wait] [-t to_sec] [-v]\n", progname); } @@ -490,7 +488,7 @@ print_usage (void) void print_help (void) { - print_revision (PROGNAME, "$Revision$"); + print_revision (progname, "$Revision$"); printf ("Copyright (c) 1999 Ethan Galstad (nagios@nagios.org)\n\n" "This plugin tests %s connections with the specified host.\n\n",