diff --git a/plugins/urlize.c b/plugins/urlize.c
index c04ac0e37b1d2f2f3acfc9695003bf01aeef3d37..45766d0c43697aa6f5e105a4b7e0f3f559336b35 100644 (file)
--- a/plugins/urlize.c
+++ b/plugins/urlize.c
/******************************************************************************
- *
- * urlize.c
- *
- * Program: plugin wrapper for Nagios
- * License: GPL
- * Copyright (c) 2000 Karl DeBisschop (kdebiss@alum.mit.edu)
- *
- * Last Modified: $Date$
- * 2000-06-01 Karl DeBisschop <karl@debisschop.net>
- * Written based of concept in urlize.pl
- *
- * Usage: urlize <url> <plugin> <arg1> ... <argN>
- *
- * Description:
- *
- * This plugin wraps the text output of another command (plugin) in HTML
- * <A> tags, thus displaying the plugin output in as a clickable link in
- * the Nagios status screen. The return status is the same as the plugin
- * invoked by urlize
- *
- * License Information:
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *****************************************************************************/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+******************************************************************************/
+
+const char *progname = "urlize";
+const char *revision = "$Revision$";
+const char *copyright = "2000-2003";
+const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
#include "utils.h"
#include "popen.h"
-void print_usage (char *);
-void print_help (char *);
+void print_help (void);
+void print_usage (void);
int
main (int argc, char **argv)
{
- int i = 0, found = 0, result = STATE_UNKNOWN;
- char command_line[MAX_INPUT_BUFFER] = "";
- char input_buffer[MAX_INPUT_BUFFER];
-
- if (argc < 2) {
- print_usage (my_basename (argv[0]));
- exit (STATE_UNKNOWN);
- }
-
- if (!strcmp (argv[1], "-h") || !strcmp (argv[1], "--help")) {
- print_help (argv[0]);
- exit (STATE_OK);
+ int found = 0, result = STATE_UNKNOWN;
+ char *url = NULL;
+ char *cmd;
+ char *buf;
+
+ int c;
+ int option = 0;
+ static struct option longopts[] = {
+ {"help", no_argument, 0, 'h'},
+ {"version", no_argument, 0, 'V'},
+ {"url", required_argument, 0, 'u'},
+ {0, 0, 0, 0}
+ };
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ while (1) {
+ c = getopt_long (argc, argv, "+hVu:", longopts, &option);
+
+ if (c == -1 || c == EOF)
+ break;
+
+ switch (c) {
+ case 'h': /* help */
+ print_help ();
+ exit (EXIT_SUCCESS);
+ break;
+ case 'V': /* version */
+ print_revision (progname, revision);
+ exit (EXIT_SUCCESS);
+ break;
+ case 'u':
+ url = strdup (argv[optind]);
+ break;
+ case '?':
+ default:
+ usage3 (_("Unknown argument"), optopt);
+ break;
+ }
}
- if (!strcmp (argv[1], "-V") || !strcmp (argv[1], "--version")) {
- print_revision (my_basename (argv[0]), "$Revision$");
- exit (STATE_OK);
- }
+ if (url == NULL)
+ url = strdup (argv[optind++]);
- if (argc < 2) {
- print_usage (my_basename (argv[0]));
- exit (STATE_UNKNOWN);
+ cmd = strdup (argv[optind++]);
+ for (c = optind; c < argc; c++) {
+ asprintf (&cmd, "%s %s", cmd, argv[c]);
}
- sprintf (command_line, "%s", argv[2]);
- for (i = 3; i < argc; i++) {
- sprintf (command_line, "%s %s", command_line, argv[i]);
- }
-
- child_process = spopen (command_line);
+ child_process = spopen (cmd);
if (child_process == NULL) {
- printf ("Could not open pipe: %s\n", command_line);
+ printf (_("Could not open pipe: %s\n"), cmd);
exit (STATE_UNKNOWN);
}
child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
if (child_stderr == NULL) {
- printf ("Could not open stderr for %s\n", command_line);
+ printf (_("Could not open stderr for %s\n"), cmd);
}
+ buf = malloc(MAX_INPUT_BUFFER);
printf ("<A href=\"%s\">", argv[1]);
- while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
+ while (fgets (buf, MAX_INPUT_BUFFER - 1, child_process)) {
found++;
- if (index (input_buffer, '\n')) {
- input_buffer[strcspn (input_buffer, "\n")] = 0;
- printf ("%s", input_buffer);
- }
- else {
- printf ("%s", input_buffer);
- }
+ printf ("%s", buf);
}
- if (!found) {
- printf ("%s problem - No data recieved from host\nCMD: %s\n", argv[0],
- command_line);
- exit (STATE_UNKNOWN);
- }
+ if (!found)
+ die (STATE_UNKNOWN,
+ _("%s problem - No data recieved from host\nCMD: %s</A>\n"),
+ argv[0], cmd);
/* close the pipe */
result = spclose (child_process);
/* WARNING if output found on stderr */
- if (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr))
+ if (fgets (buf, MAX_INPUT_BUFFER - 1, child_stderr))
result = max_state (result, STATE_WARNING);
/* close stderr */
return result;
}
+
+
+
+
+\f
void
-print_usage (char *cmd)
+print_help (void)
{
- printf ("Usage:\n %s <url> <plugin> <arg1> ... <argN>\n",
- my_basename (cmd));
+ print_revision (progname, revision);
+
+ printf (_("Copyright (c) 2000 Karl DeBisschop <kdebisschop@users.sourceforge.net>\n"));
+ printf (_(COPYRIGHT), copyright, email);
+
+ printf (_("\n\
+This plugin wraps the text output of another command (plugin) in HTML\n\
+<A> tags, thus displaying the plugin output in as a clickable link in\n\
+the Nagios status screen. The return status is the same as the invoked\n\
+plugin.\n\n"));
+
+ print_usage ();
+
+ printf (_("\n\
+Pay close attention to quoting to ensure that the shell passes the expected\n\
+data to the plugin. For example, in:\n\
+\n\
+ urlize http://example.com/ check_http -H example.com -r 'two words'\n\
+\n\
+the shell will remove the single quotes and urlize will see:\n\
+\n\
+ urlize http://example.com/ check_http -H example.com -r two words\n\
+\n\
+You probably want:\n\
+\n\
+ urlize http://example.com/ \"check_http -H example.com -r 'two words'\"\n"));
+
+ printf (_(UT_SUPPORT));
}
+
+
+
void
-print_help (char *cmd)
+print_usage (void)
{
- print_revision ("urlize", "$Revision$");
- printf
- ("Copyright (c) 2000 Karl DeBisschop (kdebiss@alum.mit.edu)\n\n"
- "\nThis plugin wraps the text output of another command (plugin) in HTML\n"
- "<A> tags, thus displaying the plugin output in as a clickable link in\n"
- "the Nagios status screen. The return status is the same as the invoked\n"
- "plugin.\n\n");
- print_usage (cmd);
- exit (STATE_OK);
+ printf (_("Usage:\n %s <url> <plugin> <arg1> ... <argN>\n"), progname);
}