dryang / rpms / systemd

Forked from rpms/systemd a year ago
Clone
4bff0a
From 1fd670e06332423a3e0b19ca717145c14e8418a1 Mon Sep 17 00:00:00 2001
4bff0a
From: Lennart Poettering <lennart@poettering.net>
4bff0a
Date: Tue, 17 Jul 2018 12:24:50 +0200
4bff0a
Subject: [PATCH] sd-login: let's also make sd-login understand ".host"
4bff0a
4bff0a
if sd-bus and machined grok it, then sd-login should grok it too.
4bff0a
4bff0a
(cherry picked from commit a8c9b7a0fc0aa02666042543ff9a652aae3c9499)
4bff0a
4bff0a
Resolves: #1683334
4bff0a
---
4bff0a
 src/libsystemd/sd-login/sd-login.c | 27 +++++++++++++++++----------
4bff0a
 1 file changed, 17 insertions(+), 10 deletions(-)
4bff0a
4bff0a
diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c
4bff0a
index c2f7133e42..aeae6d78a9 100644
4bff0a
--- a/src/libsystemd/sd-login/sd-login.c
4bff0a
+++ b/src/libsystemd/sd-login/sd-login.c
4bff0a
@@ -892,20 +892,27 @@ _public_ int sd_machine_get_class(const char *machine, char **class) {
4bff0a
         const char *p;
4bff0a
         int r;
4bff0a
 
4bff0a
-        assert_return(machine_name_is_valid(machine), -EINVAL);
4bff0a
         assert_return(class, -EINVAL);
4bff0a
 
4bff0a
-        p = strjoina("/run/systemd/machines/", machine);
4bff0a
-        r = parse_env_file(NULL, p, NEWLINE, "CLASS", &c, NULL);
4bff0a
-        if (r == -ENOENT)
4bff0a
-                return -ENXIO;
4bff0a
-        if (r < 0)
4bff0a
-                return r;
4bff0a
-        if (!c)
4bff0a
-                return -EIO;
4bff0a
+        if (streq(machine, ".host")) {
4bff0a
+                c = strdup("host");
4bff0a
+                if (!c)
4bff0a
+                        return -ENOMEM;
4bff0a
+        } else {
4bff0a
+                if (!machine_name_is_valid(machine))
4bff0a
+                        return -EINVAL;
4bff0a
 
4bff0a
-        *class = TAKE_PTR(c);
4bff0a
+                p = strjoina("/run/systemd/machines/", machine);
4bff0a
+                r = parse_env_file(NULL, p, NEWLINE, "CLASS", &c, NULL);
4bff0a
+                if (r == -ENOENT)
4bff0a
+                        return -ENXIO;
4bff0a
+                if (r < 0)
4bff0a
+                        return r;
4bff0a
+                if (!c)
4bff0a
+                        return -EIO;
4bff0a
+        }
4bff0a
 
4bff0a
+        *class = TAKE_PTR(c);
4bff0a
         return 0;
4bff0a
 }
4bff0a