remove call_getopt, add [] arougn time

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@170 f882894a-f735-0410-b71e-b25c423dba1c
This commit is contained in:
Karl DeBisschop 2002-11-07 07:07:17 +00:00
parent 20092e09c8
commit 3d88b61d10

View file

@ -43,13 +43,14 @@ void print_help (char *command_name);
void print_usage (void);
int commands;
char *remotecmd = NULL;
char *comm = NULL;
int commands = 0;
int services = 0;
char *remotecmd = "";
char *comm = SSH_COMMAND;
char *hostname = NULL;
char *outputfile = NULL;
char *host_shortname = NULL;
char *servicelist = NULL;
char **service;
int passive = FALSE;
int verbose = FALSE;
@ -59,9 +60,10 @@ main (int argc, char **argv)
{
char input_buffer[MAX_INPUT_BUFFER] = "";
char *result_text = NULL;
char *result_text = "";
char *status_text;
char *output = NULL;
char *output = "";
char *summary = "";
char *eol = NULL;
char *srvc_desc = NULL;
int cresult;
@ -104,10 +106,8 @@ main (int argc, char **argv)
/* get results from remote command */
result_text = realloc (result_text, 1);
result_text[0] = 0;
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process))
result_text = strscat (result_text, input_buffer);
asprintf (&result_text, "%s%s", result_text, input_buffer);
/* WARNING if output found on stderr */
@ -131,24 +131,23 @@ main (int argc, char **argv)
}
time (&local_time);
srvc_desc = strtok (servicelist, ":");
while (result_text != NULL) {
commands = 0;
while (result_text && strlen(result_text) > 0) {
status_text = (strstr (result_text, "STATUS CODE: "));
if (status_text == NULL) {
printf ("%s", result_text);
return result;
}
output = result_text;
asprintf (&output, "%s", result_text);
result_text = strnl (status_text);
eol = strpbrk (output, "\r\n");
if (eol != NULL)
eol[0] = 0;
if (srvc_desc && status_text
if (service[commands] && status_text
&& sscanf (status_text, "STATUS CODE: %d", &cresult) == 1) {
fprintf (fp, "%d PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n",
(int) local_time, host_shortname, srvc_desc, cresult,
fprintf (fp, "[%d] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n",
(int) local_time, host_shortname, service[commands++], cresult,
output);
srvc_desc = strtok (NULL, ":");
}
}
@ -156,14 +155,12 @@ main (int argc, char **argv)
/* print the first line from the remote command */
else {
eol = strpbrk (result_text, "\r\n");
if (eol)
eol[0] = 0;
printf ("%s\n", result_text);
eol = strpbrk (result_text, "\r\n");
if (eol)
eol[0] = 0;
printf ("%s\n", result_text);
}
/* return error status from remote command */
return result;
}
@ -176,60 +173,9 @@ main (int argc, char **argv)
int
process_arguments (int argc, char **argv)
{
int c;
if (argc < 2)
return ERROR;
remotecmd = realloc (remotecmd, 1);
remotecmd[0] = 0;
for (c = 1; c < argc; c++)
if (strcmp ("-to", argv[c]) == 0)
strcpy (argv[c], "-t");
comm = strscpy (comm, SSH_COMMAND);
c = 0;
while (c += (call_getopt (argc - c, &argv[c]))) {
if (argc <= c)
break;
if (hostname == NULL) {
if (!is_host (argv[c]))
terminate (STATE_UNKNOWN, "%s: Invalid host name %s\n", PROGNAME,
argv[c]);
hostname = argv[c];
}
else if (remotecmd == NULL) {
remotecmd = strscpy (remotecmd, argv[c++]);
for (; c < argc; c++)
remotecmd = ssprintf (remotecmd, "%s %s", remotecmd, argv[c]);
}
}
if (commands > 1)
remotecmd = strscat (remotecmd, ";echo STATUS CODE: $?;");
if (remotecmd == NULL || strlen (remotecmd) <= 1)
usage ("No remotecmd\n");
comm = ssprintf (comm, "%s %s '%s'", comm, hostname, remotecmd);
return validate_arguments ();
}
/* Call getopt */
int
call_getopt (int argc, char **argv)
{
int c, i = 1;
int c, i;
char *p1, *p2;
size_t len;
#ifdef HAVE_GETOPT_H
int option_index = 0;
@ -254,6 +200,13 @@ call_getopt (int argc, char **argv)
};
#endif
if (argc < 2)
return ERROR;
for (c = 1; c < argc; c++)
if (strcmp ("-to", argv[c]) == 0)
strcpy (argv[c], "-t");
while (1) {
#ifdef HAVE_GETOPT_H
c =
@ -266,20 +219,6 @@ call_getopt (int argc, char **argv)
if (c == -1 || c == EOF)
break;
i++;
switch (c) {
case 't':
case 'H':
case 'O':
case 'p':
case 'i':
case 'u':
case 'l':
case 'n':
case 's':
i++;
}
switch (c) {
case '?': /* help */
print_usage ();
@ -306,14 +245,22 @@ call_getopt (int argc, char **argv)
case 'p': /* port number */
if (!is_integer (optarg))
usage2 ("port must be an integer", optarg);
comm = ssprintf (comm,"%s -p %s", comm, optarg);
asprintf (&comm,"%s -p %s", comm, optarg);
break;
case 'O': /* output file */
outputfile = optarg;
passive = TRUE;
break;
case 's': /* description of service to check */
servicelist = optarg;
service = realloc (service, ++services);
p1 = optarg;
while (p2 = index (p1, ':')) {
*p2 = '\0';
asprintf (&service[services-1], "%s", p1);
service = realloc (service, ++services);
p1 = p2 + 1;
}
asprintf (&service[services-1], "%s", p1);
break;
case 'n': /* short name of host in nagios configuration */
host_shortname = optarg;
@ -322,21 +269,42 @@ call_getopt (int argc, char **argv)
c = 'l';
case 'l': /* login name */
case 'i': /* identity */
comm = ssprintf (comm, "%s -%c %s", comm, c, optarg);
asprintf (&comm, "%s -%c %s", comm, c, optarg);
break;
case '4': /* Pass these switches directly to ssh */
case '6': /* -4 for IPv4, -6 for IPv6 */
case 'f': /* fork to background */
comm = ssprintf (comm, "%s -%c", comm, c);
asprintf (&comm, "%s -%c", comm, c);
break;
case 'C': /* Command for remote machine */
commands++;
if (commands > 1)
remotecmd = strscat (remotecmd, ";echo STATUS CODE: $?;");
remotecmd = strscat (remotecmd, optarg);
asprintf (&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd);
asprintf (&remotecmd, "%s%s", remotecmd, optarg);
}
}
return i;
c = optind;
if (hostname == NULL) {
if (!is_host (argv[c]))
terminate (STATE_UNKNOWN, "%s: Invalid host name %s\n", PROGNAME, argv[c]);
hostname = argv[c++];
}
if (strlen(remotecmd) == 0) {
for (; c < argc; c++)
asprintf (&remotecmd, "%s %s", remotecmd, argv[c]);
}
if (commands > 1)
remotecmd = strscat (remotecmd, ";echo STATUS CODE: $?;");
if (remotecmd == NULL || strlen (remotecmd) <= 1)
usage ("No remotecmd\n");
asprintf (&comm, "%s %s '%s'", comm, hostname, remotecmd);
return validate_arguments ();
}
@ -348,6 +316,13 @@ validate_arguments (void)
{
if (remotecmd == NULL || hostname == NULL)
return ERROR;
if (passive && commands != services)
terminate (STATE_UNKNOWN, "%s: In passive mode, you must provide a service name for each command.\n", PROGNAME);
if (passive && host_shortname == NULL)
terminate (STATE_UNKNOWN, "%s: In passive mode, you must provide the host short name from the nagios configs.\n", PROGNAME);
return OK;
}