mirror of
https://github.com/systemd/systemd.git
synced 2025-03-08 08:58:27 +03:00
Merge pull request #26973 from mrc0mmand/userdbctl-tests
test: add a couple of tests for userdbctl
This commit is contained in:
commit
cccc14c5a8
@ -638,7 +638,7 @@ field of `struct passwd`).
|
||||
|
||||
`sshAuthorizedKeys` → An array of strings, each listing an SSH public key that
|
||||
is authorized to access the account. The strings should follow the same format
|
||||
as the lines in the traditional `~/.ssh/authorized_key` file.
|
||||
as the lines in the traditional `~/.ssh/authorized_keys` file.
|
||||
|
||||
`pkcs11EncryptedKey` → An array of objects. Each element of the array should be
|
||||
an object consisting of three string fields: `uri` shall contain a PKCS#11
|
||||
|
@ -57,7 +57,7 @@
|
||||
records as acquired with APIs such as <citerefentry
|
||||
project='man-pages'><refentrytitle>getpwnam</refentrytitle><manvolnum>1</manvolnum></citerefentry> to
|
||||
JSON user/group records, thus hiding the differences between the services as much as
|
||||
possible. <constant>io.systemd.Dropin</constant> makes JSON user/group records from the aforementioned
|
||||
possible. <constant>io.systemd.DropIn</constant> makes JSON user/group records from the aforementioned
|
||||
drop-in directories available.</para>
|
||||
</refsect1>
|
||||
|
||||
|
@ -962,7 +962,7 @@ static int display_services(int argc, char *argv[], void *userdata) {
|
||||
return table_log_print_error(r);
|
||||
}
|
||||
|
||||
if (arg_legend) {
|
||||
if (arg_legend && arg_output != OUTPUT_JSON) {
|
||||
if (table_get_rows(t) > 1)
|
||||
printf("\n%zu services listed.\n", table_get_rows(t) - 1);
|
||||
else
|
||||
@ -1038,6 +1038,7 @@ static int ssh_authorized_keys(int argc, char *argv[], void *userdata) {
|
||||
log_debug("Chain invoking: %s", s);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
execv(chain_invocation[0], chain_invocation);
|
||||
if (errno == ENOENT) /* Let's handle ENOENT gracefully */
|
||||
log_warning_errno(errno, "Chain executable '%s' does not exist, ignoring chain invocation.", chain_invocation[0]);
|
||||
|
@ -172,6 +172,142 @@ if ! systemd-detect-virt -cq ; then
|
||||
homectl remove test-user2
|
||||
fi
|
||||
|
||||
# userdbctl tests
|
||||
export PAGER=
|
||||
|
||||
# Create a couple of user/group records to test io.systemd.DropIn
|
||||
# See docs/USER_RECORD.md and docs/GROUP_RECORD.md
|
||||
mkdir -p /run/userdb/
|
||||
cat >"/run/userdb/dropingroup.group" <<\EOF
|
||||
{
|
||||
"groupName" : "dropingroup",
|
||||
"gid" : 1000000
|
||||
}
|
||||
EOF
|
||||
cat >"/run/userdb/dropinuser.user" <<\EOF
|
||||
{
|
||||
"userName" : "dropinuser",
|
||||
"uid" : 2000000,
|
||||
"realName" : "🐱",
|
||||
"memberOf" : [
|
||||
"dropingroup"
|
||||
]
|
||||
}
|
||||
EOF
|
||||
cat >"/run/userdb/dropinuser.user-privileged" <<\EOF
|
||||
{
|
||||
"privileged" : {
|
||||
"hashedPassword" : [
|
||||
"$6$WHBKvAFFT9jKPA4k$OPY4D4TczKN/jOnJzy54DDuOOagCcvxxybrwMbe1SVdm.Bbr.zOmBdATp.QrwZmvqyr8/SafbbQu.QZ2rRvDs/"
|
||||
],
|
||||
"sshAuthorizedKeys" : [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA//dxI2xLg4MgxIKKZv1nqwTEIlE/fdakii2Fb75pG+ foo@bar.tld",
|
||||
"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMlaqG2rTMje5CQnfjXJKmoSpEVJ2gWtx4jBvsQbmee2XbU/Qdq5+SRisssR9zVuxgg5NA5fv08MgjwJQMm+csc= hello@world.tld"
|
||||
]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
# Set permissions and create necessary symlinks as described in nss-systemd(8)
|
||||
chmod 0600 "/run/userdb/dropinuser.user-privileged"
|
||||
ln -svrf "/run/userdb/dropingroup.group" "/run/userdb/1000000.group"
|
||||
ln -svrf "/run/userdb/dropinuser.user" "/run/userdb/2000000.user"
|
||||
ln -svrf "/run/userdb/dropinuser.user-privileged" "/run/userdb/2000000.user-privileged"
|
||||
|
||||
userdbctl
|
||||
userdbctl --version
|
||||
userdbctl --help --no-pager
|
||||
userdbctl --no-legend
|
||||
userdbctl --output=classic
|
||||
userdbctl --output=friendly
|
||||
userdbctl --output=table
|
||||
userdbctl --output=json | jq
|
||||
userdbctl -j --json=pretty | jq
|
||||
userdbctl -j --json=short | jq
|
||||
userdbctl --with-varlink=no
|
||||
|
||||
userdbctl user
|
||||
userdbctl user testuser
|
||||
userdbctl user root
|
||||
userdbctl user testuser root
|
||||
userdbctl user -j testuser root | jq
|
||||
# Check only UID for the nobody user, since the name is build-configurable
|
||||
userdbctl user --with-nss=no --synthesize=yes
|
||||
userdbctl user --with-nss=no --synthesize=yes 0 root 65534
|
||||
userdbctl user dropinuser
|
||||
userdbctl user 2000000
|
||||
userdbctl user --with-nss=no --with-varlink=no --synthesize=no --multiplexer=no dropinuser
|
||||
userdbctl user --with-nss=no 2000000
|
||||
(! userdbctl user '')
|
||||
(! userdbctl user 🐱)
|
||||
(! userdbctl user 🐱 '' bar)
|
||||
(! userdbctl user i-do-not-exist)
|
||||
(! userdbctl user root i-do-not-exist testuser)
|
||||
(! userdbctl user --with-nss=no --synthesize=no 0 root 65534)
|
||||
(! userdbctl user -N root nobody)
|
||||
(! userdbctl user --with-dropin=no dropinuser)
|
||||
(! userdbctl user --with-dropin=no 2000000)
|
||||
|
||||
userdbctl group
|
||||
userdbctl group testuser
|
||||
userdbctl group root
|
||||
userdbctl group testuser root
|
||||
userdbctl group -j testuser root | jq
|
||||
# Check only GID for the nobody group, since the name is build-configurable
|
||||
userdbctl group --with-nss=no --synthesize=yes
|
||||
userdbctl group --with-nss=no --synthesize=yes 0 root 65534
|
||||
userdbctl group dropingroup
|
||||
userdbctl group 1000000
|
||||
userdbctl group --with-nss=no --with-varlink=no --synthesize=no --multiplexer=no dropingroup
|
||||
userdbctl group --with-nss=no 1000000
|
||||
(! userdbctl group '')
|
||||
(! userdbctl group 🐱)
|
||||
(! userdbctl group 🐱 '' bar)
|
||||
(! userdbctl group i-do-not-exist)
|
||||
(! userdbctl group root i-do-not-exist testuser)
|
||||
(! userdbctl group --with-nss=no --synthesize=no 0 root 65534)
|
||||
(! userdbctl group --with-dropin=no dropingroup)
|
||||
(! userdbctl group --with-dropin=no 1000000)
|
||||
|
||||
userdbctl users-in-group
|
||||
userdbctl users-in-group testuser
|
||||
userdbctl users-in-group testuser root
|
||||
userdbctl users-in-group -j testuser root | jq
|
||||
userdbctl users-in-group 🐱
|
||||
(! userdbctl users-in-group '')
|
||||
(! userdbctl users-in-group foo '' bar)
|
||||
|
||||
userdbctl groups-of-user
|
||||
userdbctl groups-of-user testuser
|
||||
userdbctl groups-of-user testuser root
|
||||
userdbctl groups-of-user -j testuser root | jq
|
||||
userdbctl groups-of-user 🐱
|
||||
(! userdbctl groups-of-user '')
|
||||
(! userdbctl groups-of-user foo '' bar)
|
||||
|
||||
userdbctl services
|
||||
userdbctl services -j | jq
|
||||
|
||||
userdbctl ssh-authorized-keys dropinuser | tee /tmp/authorized-keys
|
||||
grep "ssh-ed25519" /tmp/authorized-keys
|
||||
grep "ecdsa-sha2-nistp256" /tmp/authorized-keys
|
||||
echo "my-top-secret-key 🐱" >/tmp/my-top-secret-key
|
||||
userdbctl ssh-authorized-keys dropinuser --chain /bin/cat /tmp/my-top-secret-key | tee /tmp/authorized-keys
|
||||
grep "ssh-ed25519" /tmp/authorized-keys
|
||||
grep "ecdsa-sha2-nistp256" /tmp/authorized-keys
|
||||
grep "my-top-secret-key 🐱" /tmp/authorized-keys
|
||||
(! userdbctl ssh-authorized-keys 🐱)
|
||||
(! userdbctl ssh-authorized-keys dropin-user --chain)
|
||||
(! userdbctl ssh-authorized-keys dropin-user --chain '')
|
||||
(! SYSTEMD_LOG_LEVEL=debug userdbctl ssh-authorized-keys dropin-user --chain /bin/false)
|
||||
|
||||
(! userdbctl '')
|
||||
for opt in json multiplexer output synthesize with-dropin with-nss with-varlink; do
|
||||
(! userdbctl "--$opt=''")
|
||||
(! userdbctl "--$opt='🐱'")
|
||||
(! userdbctl "--$opt=foo")
|
||||
(! userdbctl "--$opt=foo" "--$opt=''" "--$opt=🐱")
|
||||
done
|
||||
|
||||
systemd-analyze log-level info
|
||||
|
||||
echo OK >/testok
|
||||
|
Loading…
x
Reference in New Issue
Block a user