summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-manager.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-15 11:50:55 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-22 20:10:55 +0100
commit05c6f341b1fc18f59293d115bb4cbee94f8bf3a1 (patch)
tree8897db9c1fa8b9b30dac251744b7d31b75988779 /src/resolve/resolved-manager.c
parent209c14705d5ea84aeaa597662af70d65edcc0231 (diff)
downloadsystemd-05c6f341b1fc18f59293d115bb4cbee94f8bf3a1.tar.gz
Allow the fallback hostname to be overriden using an environment variable
See https://bugzilla.redhat.com/show_bug.cgi?id=1893417 for the back story: the fallback hostname matters a lot in certain environments. Right now the only way to configure the fallback hostname is by recompiling systemd, which is obviously problematic in case when the fallback hostname shall differ between different editions of the same distro that share a single compiled rpm. By making this overridable through an envvar, we're providing an escape hatch without making this a top-level api. Later on a way to set this through os-release is added, but I think the approach with the variable is still useful. It it very convenient for testing, or to override settings only in a particular service, etc.
Diffstat (limited to 'src/resolve/resolved-manager.c')
-rw-r--r--src/resolve/resolved-manager.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c
index 2ed9f2d47b..ae46d2dcd8 100644
--- a/src/resolve/resolved-manager.c
+++ b/src/resolve/resolved-manager.c
@@ -442,20 +442,25 @@ static int determine_hostname(char **full_hostname, char **llmnr_hostname, char
return 0;
}
-static const char *fallback_hostname(void) {
+static char* fallback_hostname(void) {
- /* Determine the fall back hostname. For exposing this system to the outside world, we cannot have it to be
- * "localhost" even if that's the compiled in hostname. In this case, let's revert to "linux" instead. */
+ /* Determine the fall back hostname. For exposing this system to the outside world, we cannot have it
+ * to be "localhost" even if that's the default hostname. In this case, let's revert to "linux"
+ * instead. */
- if (is_localhost(FALLBACK_HOSTNAME))
- return "linux";
+ _cleanup_free_ char *n = get_default_hostname();
+ if (!n)
+ return NULL;
+
+ if (is_localhost(n))
+ return strdup("linux");
- return FALLBACK_HOSTNAME;
+ return TAKE_PTR(n);
}
static int make_fallback_hostnames(char **full_hostname, char **llmnr_hostname, char **mdns_hostname) {
- _cleanup_free_ char *n = NULL, *m = NULL;
- char label[DNS_LABEL_MAX], *h;
+ _cleanup_free_ char *h = NULL, *n = NULL, *m = NULL;
+ char label[DNS_LABEL_MAX];
const char *p;
int r;
@@ -463,7 +468,10 @@ static int make_fallback_hostnames(char **full_hostname, char **llmnr_hostname,
assert(llmnr_hostname);
assert(mdns_hostname);
- p = fallback_hostname();
+ p = h = fallback_hostname();
+ if (!h)
+ return log_oom();
+
r = dns_label_unescape(&p, label, sizeof label, 0);
if (r < 0)
return log_error_errno(r, "Failed to unescape fallback hostname: %m");
@@ -478,14 +486,9 @@ static int make_fallback_hostnames(char **full_hostname, char **llmnr_hostname,
if (r < 0)
return log_error_errno(r, "Failed to concatenate mDNS hostname: %m");
- h = strdup(fallback_hostname());
- if (!h)
- return log_oom();
-
*llmnr_hostname = TAKE_PTR(n);
*mdns_hostname = TAKE_PTR(m);
-
- *full_hostname = h;
+ *full_hostname = TAKE_PTR(h);
return 0;
}