]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/test/test-user-util.c
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / test / test-user-util.c
index 2a344a9f930c69360aa6ab4ac8bb896a8b167405..801824ad6771ae4c6053220d53ec0f59c574ad74 100644 (file)
@@ -1,39 +1,36 @@
-/***
-  This file is part of systemd.
-
-  Copyright 2015 Lennart Poettering
-
-  systemd is free software; you can redistribute it and/or modify it
-  under the terms of the GNU Lesser General Public License as published by
-  the Free Software Foundation; either version 2.1 of the License, or
-  (at your option) any later version.
-
-  systemd is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public License
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
+/* SPDX-License-Identifier: LGPL-2.1+ */
 
 #include "alloc-util.h"
+#include "log.h"
 #include "macro.h"
 #include "string-util.h"
 #include "user-util.h"
 #include "util.h"
+#include "path-util.h"
 
 static void test_uid_to_name_one(uid_t uid, const char *name) {
         _cleanup_free_ char *t = NULL;
 
+        log_info("/* %s("UID_FMT", \"%s\") */", __func__, uid, name);
+
         assert_se(t = uid_to_name(uid));
+        if (!synthesize_nobody() && streq(name, NOBODY_USER_NAME)) {
+                log_info("(skipping detailed tests because nobody is not synthesized)");
+                return;
+        }
         assert_se(streq_ptr(t, name));
 }
 
 static void test_gid_to_name_one(gid_t gid, const char *name) {
         _cleanup_free_ char *t = NULL;
 
+        log_info("/* %s("GID_FMT", \"%s\") */", __func__, gid, name);
+
         assert_se(t = gid_to_name(gid));
+        if (!synthesize_nobody() && streq(name, NOBODY_GROUP_NAME)) {
+                log_info("(skipping detailed tests because nobody is not synthesized)");
+                return;
+        }
         assert_se(streq_ptr(t, name));
 }
 
@@ -41,6 +38,8 @@ static void test_parse_uid(void) {
         int r;
         uid_t uid;
 
+        log_info("/* %s */", __func__);
+
         r = parse_uid("100", &uid);
         assert_se(r == 0);
         assert_se(uid == 100);
@@ -53,6 +52,7 @@ static void test_parse_uid(void) {
 }
 
 static void test_uid_ptr(void) {
+        log_info("/* %s */", __func__);
 
         assert_se(UID_TO_PTR(0) != NULL);
         assert_se(UID_TO_PTR(1000) != NULL);
@@ -62,6 +62,8 @@ static void test_uid_ptr(void) {
 }
 
 static void test_valid_user_group_name(void) {
+        log_info("/* %s */", __func__);
+
         assert_se(!valid_user_group_name(NULL));
         assert_se(!valid_user_group_name(""));
         assert_se(!valid_user_group_name("1"));
@@ -88,6 +90,8 @@ static void test_valid_user_group_name(void) {
 }
 
 static void test_valid_user_group_name_or_id(void) {
+        log_info("/* %s */", __func__);
+
         assert_se(!valid_user_group_name_or_id(NULL));
         assert_se(!valid_user_group_name_or_id(""));
         assert_se(valid_user_group_name_or_id("0"));
@@ -117,6 +121,7 @@ static void test_valid_user_group_name_or_id(void) {
 }
 
 static void test_valid_gecos(void) {
+        log_info("/* %s */", __func__);
 
         assert_se(!valid_gecos(NULL));
         assert_se(valid_gecos(""));
@@ -127,6 +132,7 @@ static void test_valid_gecos(void) {
 }
 
 static void test_valid_home(void) {
+        log_info("/* %s */", __func__);
 
         assert_se(!valid_home(NULL));
         assert_se(!valid_home(""));
@@ -143,17 +149,70 @@ static void test_valid_home(void) {
         assert_se(valid_home("/home/foo"));
 }
 
-int main(int argc, char*argv[]) {
+static void test_get_user_creds_one(const char *id, const char *name, uid_t uid, gid_t gid, const char *home, const char *shell) {
+        const char *rhome = NULL;
+        const char *rshell = NULL;
+        uid_t ruid = UID_INVALID;
+        gid_t rgid = GID_INVALID;
+        int r;
+
+        log_info("/* %s(\"%s\", \"%s\", "UID_FMT", "GID_FMT", \"%s\", \"%s\") */",
+                 __func__, id, name, uid, gid, home, shell);
+
+        r = get_user_creds(&id, &ruid, &rgid, &rhome, &rshell, 0);
+        log_info_errno(r, "got \"%s\", "UID_FMT", "GID_FMT", \"%s\", \"%s\": %m",
+                       id, ruid, rgid, strnull(rhome), strnull(rshell));
+        if (!synthesize_nobody() && streq(name, NOBODY_USER_NAME)) {
+                log_info("(skipping detailed tests because nobody is not synthesized)");
+                return;
+        }
+        assert_se(r == 0);
+        assert_se(streq_ptr(id, name));
+        assert_se(ruid == uid);
+        assert_se(rgid == gid);
+        assert_se(path_equal(rhome, home));
+        assert_se(path_equal(rshell, shell));
+}
+
+static void test_get_group_creds_one(const char *id, const char *name, gid_t gid) {
+        gid_t rgid = GID_INVALID;
+        int r;
+
+        log_info("/* %s(\"%s\", \"%s\", "GID_FMT") */", __func__, id, name, gid);
 
+        r = get_group_creds(&id, &rgid, 0);
+        log_info_errno(r, "got \"%s\", "GID_FMT": %m", id, rgid);
+        if (!synthesize_nobody() && streq(name, NOBODY_GROUP_NAME)) {
+                log_info("(skipping detailed tests because nobody is not synthesized)");
+                return;
+        }
+        assert_se(r == 0);
+        assert_se(streq_ptr(id, name));
+        assert_se(rgid == gid);
+}
+
+int main(int argc, char *argv[]) {
         test_uid_to_name_one(0, "root");
+        test_uid_to_name_one(UID_NOBODY, NOBODY_USER_NAME);
         test_uid_to_name_one(0xFFFF, "65535");
         test_uid_to_name_one(0xFFFFFFFF, "4294967295");
 
         test_gid_to_name_one(0, "root");
+        test_gid_to_name_one(GID_NOBODY, NOBODY_GROUP_NAME);
         test_gid_to_name_one(TTY_GID, "tty");
         test_gid_to_name_one(0xFFFF, "65535");
         test_gid_to_name_one(0xFFFFFFFF, "4294967295");
 
+        test_get_user_creds_one("root", "root", 0, 0, "/root", "/bin/sh");
+        test_get_user_creds_one("0", "root", 0, 0, "/root", "/bin/sh");
+        test_get_user_creds_one(NOBODY_USER_NAME, NOBODY_USER_NAME, UID_NOBODY, GID_NOBODY, "/", "/sbin/nologin");
+        test_get_user_creds_one("65534", NOBODY_USER_NAME, UID_NOBODY, GID_NOBODY, "/", "/sbin/nologin");
+
+        test_get_group_creds_one("root", "root", 0);
+        test_get_group_creds_one("0", "root", 0);
+        test_get_group_creds_one(NOBODY_GROUP_NAME, NOBODY_GROUP_NAME, GID_NOBODY);
+        test_get_group_creds_one("65534", NOBODY_GROUP_NAME, GID_NOBODY);
+
         test_parse_uid();
         test_uid_ptr();