X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcollectd.c;h=2d161aad6062815d4bdf220a7f30c02319e33075;hb=56688f815d42e6aa3e52b5c419ef643a8ebae712;hp=f8f2fcc5b1b05c4032c0f6866436f98a4931716a;hpb=dc80c73c20ef0e69c3850fd9679a827ad79e61a1;p=collectd.git diff --git a/src/collectd.c b/src/collectd.c index f8f2fcc5..2d161aad 100644 --- a/src/collectd.c +++ b/src/collectd.c @@ -23,7 +23,10 @@ #include "collectd.h" #include "common.h" -#include "network.h" +#include +#include +#include + #include "plugin.h" #include "configfile.h" @@ -48,25 +51,63 @@ static void sigTermHandler (int signal) loop++; } -static int init_global_variables (void) +static int init_hostname (void) { const char *str; + struct addrinfo ai_hints; + struct addrinfo *ai_list; + struct addrinfo *ai_ptr; + int status; + str = global_option_get ("Hostname"); if (str != NULL) { strncpy (hostname_g, str, sizeof (hostname_g)); + hostname_g[sizeof (hostname_g) - 1] = '\0'; + return (0); } - else + + if (gethostname (hostname_g, sizeof (hostname_g)) != 0) { - if (gethostname (hostname_g, sizeof (hostname_g)) != 0) - { - fprintf (stderr, "`gethostname' failed and no " - "hostname was configured.\n"); - return (-1); - } + fprintf (stderr, "`gethostname' failed and no " + "hostname was configured.\n"); + return (-1); + } + + str = global_option_get ("FQDNLookup"); + if ((strcasecmp ("false", str) == 0) + || (strcasecmp ("no", str) == 0) + || (strcasecmp ("off", str) == 0)) + return (0); + + memset (&ai_hints, '\0', sizeof (ai_hints)); + ai_hints.ai_flags = AI_CANONNAME; + + status = getaddrinfo (hostname_g, NULL, &ai_hints, &ai_list); + if (status != 0) + { + ERROR ("getaddrinfo failed."); + return (-1); } - DEBUG ("hostname_g = %s;", hostname_g); + + for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + { + if (ai_ptr->ai_canonname == NULL) + continue; + + strncpy (hostname_g, ai_ptr->ai_canonname, sizeof (hostname_g)); + hostname_g[sizeof (hostname_g) - 1] = '\0'; + break; + } + + freeaddrinfo (ai_list); + return (0); +} /* int init_hostname */ + +static int init_global_variables (void) +{ + const char *str; str = global_option_get ("Interval"); if (str == NULL) @@ -80,6 +121,10 @@ static int init_global_variables (void) } DEBUG ("interval_g = %i;", interval_g); + if (init_hostname () != 0) + return (-1); + DEBUG ("hostname_g = %s;", hostname_g); + return (0); } /* int init_global_variables */ @@ -114,7 +159,7 @@ static int change_basedir (const char *orig_dir) if (mkdir (orig_dir, 0755) == -1) { char errbuf[1024]; - ERROR ("mkdir (%s): %s", orig_dir, + ERROR ("change_basedir: mkdir (%s): %s", orig_dir, sstrerror (errno, errbuf, sizeof (errbuf))); return (-1); @@ -170,7 +215,7 @@ static void update_kstat (void) /* TODO * Remove all settings but `-f' and `-C' */ -static void exit_usage (char *name) +static void exit_usage (void) { printf ("Usage: "PACKAGE" [OPTIONS]\n\n" @@ -243,7 +288,7 @@ static int do_loop (void) #endif /* Issue all plugins */ - plugin_read_all (&loop); + plugin_read_all (); if (gettimeofday (&tv_now, NULL) < 0) { @@ -319,6 +364,7 @@ int main (int argc, char **argv) struct sigaction sigIntAction; struct sigaction sigTermAction; char *configfile = CONFIGFILE; + int test_config = 0; const char *basedir; #if COLLECT_DAEMON struct sigaction sigChldAction; @@ -331,7 +377,7 @@ int main (int argc, char **argv) { int c; - c = getopt (argc, argv, "hC:" + c = getopt (argc, argv, "htC:" #if COLLECT_DAEMON "fP:" #endif @@ -345,6 +391,9 @@ int main (int argc, char **argv) case 'C': configfile = optarg; break; + case 't': + test_config = 1; + break; #if COLLECT_DAEMON case 'P': global_option_set ("PIDFile", optarg); @@ -355,7 +404,7 @@ int main (int argc, char **argv) #endif /* COLLECT_DAEMON */ case 'h': default: - exit_usage (argv[0]); + exit_usage (); } /* switch (c) */ } /* while (1) */ @@ -396,6 +445,9 @@ int main (int argc, char **argv) if (init_global_variables () != 0) return (1); + if (test_config) + return (0); + #if COLLECT_DAEMON /* * fork off child