From 69a2285dea4568c0010f116d22415f301b74579a Mon Sep 17 00:00:00 2001 From: Sean Campbell Date: Fri, 6 Oct 2017 16:55:37 -0400 Subject: [PATCH] Fixed issues with initializing hostname. --- src/daemon/collectd.c | 13 ++++++++++--- src/daemon/globals.c | 9 +++++++-- src/daemon/globals.h | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/daemon/collectd.c b/src/daemon/collectd.c index 8f671b35..27845395 100644 --- a/src/daemon/collectd.c +++ b/src/daemon/collectd.c @@ -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; } diff --git a/src/daemon/globals.c b/src/daemon/globals.c index 652ff06d..2222a5ce 100644 --- a/src/daemon/globals.c +++ b/src/daemon/globals.c @@ -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"), @@ -29,7 +29,12 @@ #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; } /* diff --git a/src/daemon/globals.h b/src/daemon/globals.h index b91ccc82..587b223b 100644 --- a/src/daemon/globals.h +++ b/src/daemon/globals.h @@ -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"), -- 2.11.0