]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/hostname-setup: add mode where we check what would be set, without doing
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 4 Dec 2020 17:45:23 +0000 (18:45 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 16 Dec 2020 10:02:17 +0000 (11:02 +0100)
This allows the 'unsafe' mark to be removed from the test.

src/core/main.c
src/shared/hostname-setup.c
src/shared/hostname-setup.h
src/test/meson.build
src/test/test-hostname-setup.c

index ef4d03750f7ba7b41f39d5a618a9f20cfc0e7555..eaa56aca2a4e01628e970cf5e250d20477653681 100644 (file)
@@ -2064,7 +2064,7 @@ static int initialize_runtime(
                         }
 
                         status_welcome();
-                        hostname_setup();
+                        (void) hostname_setup(true);
                         /* Force transient machine-id on first boot. */
                         machine_id_setup(NULL, first_boot, arg_machine_id, NULL);
                         (void) loopback_setup();
index cd5ad13305326456b4353e75b70c116fda5f63bc..42a8ada14475bfae7af0c1f7af49a38ba3fac132 100644 (file)
@@ -17,7 +17,7 @@
 #include "string-util.h"
 #include "util.h"
 
-int sethostname_idempotent(const char *s) {
+static int sethostname_idempotent_full(const char *s, bool really) {
         char buf[HOST_NAME_MAX + 1] = {};
 
         assert(s);
@@ -28,12 +28,17 @@ int sethostname_idempotent(const char *s) {
         if (streq(buf, s))
                 return 0;
 
-        if (sethostname(s, strlen(s)) < 0)
+        if (really &&
+            sethostname(s, strlen(s)) < 0)
                 return -errno;
 
         return 1;
 }
 
+int sethostname_idempotent(const char *s) {
+        return sethostname_idempotent_full(s, true);
+}
+
 int shorten_overlong(const char *s, char **ret) {
         char *h, *p;
 
@@ -134,7 +139,7 @@ static bool hostname_is_set(void) {
         return true;
 }
 
-int hostname_setup(void) {
+int hostname_setup(bool really) {
         _cleanup_free_ char *b = NULL;
         const char *hn = NULL;
         bool enoent = false;
@@ -174,10 +179,15 @@ int hostname_setup(void) {
                 hn = FALLBACK_HOSTNAME;
         }
 
-        r = sethostname_idempotent(hn);
+        r = sethostname_idempotent_full(hn, really);
         if (r < 0)
                 return log_warning_errno(r, "Failed to set hostname to <%s>: %m", hn);
-
-        log_info("Set hostname to <%s>.", hn);
-        return 0;
+        if (r == 0)
+                log_debug("Hostname was already set to <%s>.", hn);
+        else
+                log_info("Hostname %s to <%s>.",
+                         really ? "set" : "would have been set",
+                         hn);
+
+        return r;
 }
index 032c7ac36b4337e695e0479f59969e896e23a6c5..90637c4b49ce6d746b27e442cf9dc38ff0369885 100644 (file)
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include <stdbool.h>
 #include <stdio.h>
 
 int sethostname_idempotent(const char *s);
@@ -10,4 +11,4 @@ int shorten_overlong(const char *s, char **ret);
 int read_etc_hostname_stream(FILE *f, char **ret);
 int read_etc_hostname(const char *path, char **ret);
 
-int hostname_setup(void);
+int hostname_setup(bool really);
index 3dab9ace6b073976ff389a42cd41383d736a8bef..9254f18a23e8db5a8b7c5141cdac81030115acc5 100644 (file)
@@ -330,8 +330,7 @@ tests += [
 
         [['src/test/test-hostname-setup.c'],
          [],
-         [],
-         '', 'unsafe'],
+         []],
 
         [['src/test/test-hostname-util.c'],
          [],
index 494ebb2ff5ab57648ce381ead6e6c3978e5d1c5e..55996500f3b264a436d800f135f97917386aa85f 100644 (file)
@@ -59,15 +59,11 @@ static void test_read_etc_hostname(void) {
 }
 
 static void test_hostname_setup(void) {
-        int r;
-
-        r = hostname_setup();
-        if (r < 0)
-                log_error_errno(r, "hostname: %m");
+        hostname_setup(false);
 }
 
 int main(int argc, char *argv[]) {
-        test_setup_logging(LOG_INFO);
+        test_setup_logging(LOG_DEBUG);
 
         test_read_etc_hostname();
         test_hostname_setup();