Fixed issues with initializing hostname.
authorSean Campbell <campbellsean@campbellsean-cloudtop.c.googlers.com>
Fri, 6 Oct 2017 20:55:37 +0000 (16:55 -0400)
committerSean Campbell <campbellsean@campbellsean-cloudtop.c.googlers.com>
Fri, 6 Oct 2017 20:55:37 +0000 (16:55 -0400)
src/daemon/collectd.c
src/daemon/globals.c
src/daemon/globals.h

index 8f671b3..2784539 100644 (file)
@@ -81,13 +81,20 @@ static int init_hostname(void) {
   struct addrinfo *ai_list;
   int status;
 
+  long hostname_len = sysconf(_SC_HOST_NAME_MAX);
+  if (hostname_len == -1) {
+    hostname_len = NI_MAXHOST;
+  }
+  char hostname[hostname_len];
+  hostname_set(hostname);
+
   str = global_option_get("Hostname");
   if ((str != NULL) && (str[0] != 0)) {
     hostname_set(str);
     return 0;
   }
 
-  if (gethostname(hostname_g, sizeof(hostname_g)) != 0) {
+  if (gethostname(hostname, hostname_len) != 0) {
     fprintf(stderr, "`gethostname' failed and no "
                     "hostname was configured.\n");
     return -1;
@@ -99,14 +106,14 @@ static int init_hostname(void) {
 
   struct addrinfo ai_hints = {.ai_flags = AI_CANONNAME};
 
-  status = getaddrinfo(hostname_g, NULL, &ai_hints, &ai_list);
+  status = getaddrinfo(hostname, NULL, &ai_hints, &ai_list);
   if (status != 0) {
     ERROR("Looking up \"%s\" failed. You have set the "
           "\"FQDNLookup\" option, but I cannot resolve "
           "my hostname to a fully qualified domain "
           "name. Please fix the network "
           "configuration.",
-          hostname_g);
+          hostname);
     return -1;
   }
 
index 652ff06..2222a5c 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * collectd - src/globals.c
- * Copyright (C) 2017  Florian octo Forster
+ * Copyright (C) 2017  Google LLC
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
 #endif
 
 void hostname_set(char const *hostname) {
-  sstrncpy(hostname_g, hostname, sizeof(hostname_g));
+  char *h = strdup(hostname);
+  if (h == NULL)
+    return;
+
+  free(hostname_g);
+  hostname_g = h;
 }
 
 /*
index b91ccc8..587b223 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * collectd - src/globals.h
- * Copyright (C) 2017  Florian octo Forster
+ * Copyright (C) 2017  Google LLC
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),