Exemple #1
0
int
main (int argc, char **argv)
{
  ipmi_oem_prog_data_t prog_data;
  struct ipmi_oem_arguments cmd_args;
  int hosts_count;
  int rv;

  ipmi_disable_coredump ();

  memset (&prog_data, '\0', sizeof (ipmi_oem_prog_data_t));
  prog_data.progname = argv[0];
  ipmi_oem_argp_parse (argc, argv, &cmd_args);
  prog_data.args = &cmd_args;

  /* Special case, just output list, don't do anything else */
  /* offer "help" as well as list, for those used to ipmitool */
  if (!cmd_args.oem_id
      || !strcasecmp (cmd_args.oem_id, "list")
      || !strcasecmp (cmd_args.oem_id, "help")
      || cmd_args.list)
    {
      if (_list () < 0)
	return (EXIT_FAILURE);
      return (EXIT_SUCCESS);
    }

  if ((hosts_count = pstdout_setup (&(prog_data.args->common_args.hostname),
				    &(prog_data.args->common_args))) < 0)
    return (EXIT_FAILURE);

  if (!hosts_count)
    return (EXIT_SUCCESS);

  /* We don't want caching info to output when are doing ranged output */
  if (hosts_count > 1)
    prog_data.args->common_args.quiet_cache = 1;

  if ((rv = pstdout_launch (prog_data.args->common_args.hostname,
                            _ipmi_oem,
                            &prog_data)) < 0)
    {
      fprintf (stderr,
               "pstdout_launch: %s\n",
               pstdout_strerror (pstdout_errnum));
      return (EXIT_FAILURE);
    }

  return (rv);
}
int
main (int argc, char **argv)
{
    ipmi_sensors_config_prog_data_t prog_data;
    struct ipmi_sensors_config_arguments cmd_args;
    int hosts_count;
    int rv;

    ipmi_disable_coredump ();

    memset (&prog_data, '\0', sizeof (ipmi_sensors_config_prog_data_t));
    prog_data.progname = argv[0];
    ipmi_sensors_config_argp_parse (argc, argv, &cmd_args);

    prog_data.args = &cmd_args;

    if ((hosts_count = pstdout_setup (&(prog_data.args->config_args.common_args.hostname),
                                      &(prog_data.args->config_args.common_args))) < 0)
        return (EXIT_FAILURE);

    if (!hosts_count)
        return (EXIT_SUCCESS);

    /* We don't want caching info to output when are doing ranged output */
    if (hosts_count > 1)
        prog_data.args->config_args.common_args.quiet_cache = 1;

    prog_data.hosts_count = hosts_count;

    if ((rv = pstdout_launch (prog_data.args->config_args.common_args.hostname,
                              _ipmi_sensors_config,
                              &prog_data)) < 0)
    {
        fprintf (stderr,
                 "pstdout_launch: %s\n",
                 pstdout_strerror (pstdout_errnum));
        return (EXIT_FAILURE);
    }

    return (rv);
}
int
pstdout_setup (char **hosts, struct common_cmd_args *common_args)
{
  unsigned int output_flags = 0;
  int hosts_count = 0;

  assert (hosts);
  assert (common_args);

  if (pstdout_init () < 0)
    {
      fprintf (stderr,
               "pstdout_init: %s\n",
               pstdout_strerror (pstdout_errnum));
      goto cleanup;
    }

  if (*hosts)
    {
      if ((hosts_count = pstdout_hostnames_count (*hosts)) < 0)
        {
          fprintf (stderr,
                   "pstdout_hostnames_count: %s\n",
                   pstdout_strerror (pstdout_errnum));
          goto cleanup;
        }

      if (!hosts_count)
        {
          fprintf (stderr,
                   "invalid number of hosts specified\n");
          goto cleanup;
        }
    }
  else /* inband communication, hosts_count = 1 */
    {
      hosts_count = 1;

      /* if always prefix - turn hostname into "localhost" for prefixing */
      if (common_args->always_prefix)
        {
          if (!(*hosts = strdup ("localhost")))
            {
              fprintf (stderr, "strdup: %s\n", strerror (errno));
              goto cleanup;
            }
        }
    }

  /* if hosts_count > 1 it is always prefixed, so ignore always_prefixed flag */
  if (hosts_count > 1)
    {
      if (common_args->buffer_output)
        output_flags = PSTDOUT_OUTPUT_STDOUT_DEFAULT | PSTDOUT_OUTPUT_BUFFER_STDOUT | PSTDOUT_OUTPUT_STDERR_PREPEND_HOSTNAME;
      else if (common_args->consolidate_output)
        output_flags = PSTDOUT_OUTPUT_STDOUT_DEFAULT | PSTDOUT_OUTPUT_STDOUT_CONSOLIDATE | PSTDOUT_OUTPUT_STDERR_PREPEND_HOSTNAME;
      else
        output_flags = PSTDOUT_OUTPUT_STDOUT_PREPEND_HOSTNAME | PSTDOUT_OUTPUT_STDERR_PREPEND_HOSTNAME;

      if (common_args->fanout)
        {
          if (pstdout_set_fanout (common_args->fanout) < 0)
            {
              fprintf (stderr,
                       "pstdout_set_fanout: %s\n",
                       pstdout_strerror (pstdout_errnum));
              goto cleanup;
            }
        }
    }
  else if (hosts_count == 1 && common_args->always_prefix)
    output_flags = PSTDOUT_OUTPUT_STDOUT_PREPEND_HOSTNAME | PSTDOUT_OUTPUT_STDERR_PREPEND_HOSTNAME;

  if (output_flags)
    {
      if (pstdout_set_output_flags (output_flags) < 0)
        {
          fprintf (stderr,
                   "pstdout_set_output_flags: %s\n",
                   pstdout_strerror (pstdout_errnum));
          goto cleanup;
        }
    }

  if (*hosts && common_args->eliminate)
    {
      int hosts_count_new;
      
      if ((hosts_count_new = eliminate_nodes (hosts)) < 0)
        goto cleanup;

      hosts_count = hosts_count_new;
    }

  return (hosts_count);

 cleanup:
  return (-1);
}