From: Zbigniew Jędrzejewski-Szmek Date: Sat, 18 Jul 2020 12:03:51 +0000 (+0200) Subject: Move offline-password.[ch] to shared and add test-offline-passwd X-Git-Tag: v246-rc2~49^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3e5d2264b584504769eda3a248b45c3367829e7a;p=thirdparty%2Fsystemd.git Move offline-password.[ch] to shared and add test-offline-passwd The test binary has two modes: in the default argument-less mode, it just checks that "root" can be resolved. When invoked manually, a root prefix and user/group names can be specified. --- diff --git a/src/tmpfiles/offline-passwd.c b/src/shared/offline-passwd.c similarity index 100% rename from src/tmpfiles/offline-passwd.c rename to src/shared/offline-passwd.c diff --git a/src/tmpfiles/offline-passwd.h b/src/shared/offline-passwd.h similarity index 100% rename from src/tmpfiles/offline-passwd.h rename to src/shared/offline-passwd.h diff --git a/src/test/meson.build b/src/test/meson.build index d3fc803088f..4affcd647f9 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -301,6 +301,12 @@ tests += [ [], []], + [['src/test/test-offline-passwd.c', + 'src/shared/offline-passwd.c', + 'src/shared/offline-passwd.h'], + [], + []], + [['src/test/test-escape.c'], [], []], diff --git a/src/test/test-offline-passwd.c b/src/test/test-offline-passwd.c new file mode 100644 index 00000000000..5933ec28a32 --- /dev/null +++ b/src/test/test-offline-passwd.c @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ + +#include + +#include "offline-passwd.h" +#include "user-util.h" +#include "format-util.h" +#include "tests.h" + +static char *arg_root = NULL; + +static void test_resolve_one(const char *name) { + bool relaxed = name || arg_root; + + if (!name) + name = "root"; + + log_info("/* %s(\"%s\") */", __func__, name); + + _cleanup_(hashmap_freep) Hashmap *uid_cache = NULL, *gid_cache = NULL; + uid_t uid = UID_INVALID; + gid_t gid = GID_INVALID; + int r; + + r = name_to_uid_offline(arg_root, name, &uid, &uid_cache); + log_info_errno(r, "name_to_uid_offline: %s → "UID_FMT": %m", name, uid); + assert_se(relaxed || r == 0); + + r = name_to_uid_offline(arg_root, name, &uid, &uid_cache); + log_info_errno(r, "name_to_uid_offline: %s → "UID_FMT": %m", name, uid); + assert_se(relaxed || r == 0); + + r = name_to_gid_offline(arg_root, name, &gid, &gid_cache); + log_info_errno(r, "name_to_gid_offline: %s → "GID_FMT": %m", name, gid); + assert_se(relaxed || r == 0); + + r = name_to_gid_offline(arg_root, name, &gid, &gid_cache); + log_info_errno(r, "name_to_gid_offline: %s → "GID_FMT": %m", name, gid); + assert_se(relaxed || r == 0); +} + +static int parse_argv(int argc, char *argv[]) { + static const struct option options[] = { + { "root", required_argument, NULL, 'r' }, + {} + }; + + int c; + + assert(argc >= 0); + assert(argv); + + while ((c = getopt_long(argc, argv, "r:", options, NULL)) >= 0) + switch(c) { + case 'r': + arg_root = optarg; + break; + + case '?': + return -EINVAL; + + default: + assert_not_reached("Unhandled option"); + } + + return 0; +} + +int main(int argc, char **argv) { + int r; + + test_setup_logging(LOG_DEBUG); + + r = parse_argv(argc, argv); + if (r < 0) + return r; + + if (optind >= argc) + test_resolve_one(NULL); + else + while (optind < argc) + test_resolve_one(argv[optind++]); + + return 0; +} diff --git a/src/tmpfiles/meson.build b/src/tmpfiles/meson.build index 2f8fb29bd94..434dcf800db 100644 --- a/src/tmpfiles/meson.build +++ b/src/tmpfiles/meson.build @@ -2,6 +2,6 @@ systemd_tmpfiles_sources = [ 'src/tmpfiles/tmpfiles.c', - 'src/tmpfiles/offline-passwd.c', - 'src/tmpfiles/offline-passwd.h', + 'src/shared/offline-passwd.c', + 'src/shared/offline-passwd.h', ]