2 # SPDX-License-Identifier: LGPL-2.1-or-later
5 SYSUSERS
="${1:-systemd-sysusers}"
7 [ -e "$(dirname $0)/../systemd-runtest.env" ] && .
"$(dirname $0)/../systemd-runtest.env"
8 SYSTEMD_TEST_DATA
=${SYSTEMD_TEST_DATA:-@SYSTEMD_TEST_DATA@}
9 SOURCE
=$SYSTEMD_TEST_DATA/test-sysusers
11 TESTDIR
=$
(mktemp
--tmpdir --directory "test-sysusers.XXXXXXXXXX")
12 trap "rm -rf '$TESTDIR'" EXIT INT QUIT PIPE
15 mkdir
-p $TESTDIR/etc
/sysusers.d
/
16 mkdir
-p $TESTDIR/usr
/lib
/sysusers.d
/
17 rm -f $TESTDIR/etc
/*{passwd
,group
,shadow
}
18 for i
in $1.initial-
{passwd
,group
,shadow
}; do
19 test -f $i && cp $i $TESTDIR/etc
/${i#*.initial-}
24 [ @SYSTEM_UID_MAX@
-lt @SYSTEM_GID_MAX@
] && system_guid_max
=@SYSTEM_UID_MAX@ || system_guid_max
=@SYSTEM_GID_MAX@
27 m
=${2:-$system_guid_max}
29 sed -e "s/SYSTEM_UGID_MAX/$m/g;
30 s#NOLOGIN#@NOLOGIN@#g" "$1"
34 if ! diff -u $TESTDIR/etc
/passwd
<(preprocess
$1.expected-passwd
$3); then
35 echo "**** Unexpected output for $f $2"
39 if ! diff -u $TESTDIR/etc
/group
<(preprocess
$1.expected-group
$3); then
40 echo "**** Unexpected output for $f $2"
45 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
48 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
50 prepare_testdir
${f%.input}
51 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
52 $SYSUSERS --root=$TESTDIR
57 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
58 echo "*** Running $f on stdin"
59 prepare_testdir
${f%.input}
60 touch $TESTDIR/etc
/sysusers.d
/test.conf
61 cat $f |
$SYSUSERS --root=$TESTDIR -
63 compare
${f%.*} "on stdin"
66 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
67 echo "*** Running $f on stdin with --replace"
68 prepare_testdir
${f%.input}
69 touch $TESTDIR/etc
/sysusers.d
/test.conf
70 # this overrides test.conf which is masked on disk
71 cat $f |
$SYSUSERS --root=$TESTDIR --replace=/etc
/sysusers.d
/test.conf
-
72 # this should be ignored
73 cat $SOURCE/test-1.input |
$SYSUSERS --root=$TESTDIR --replace=/usr
/lib
/sysusers.d
/test.conf
-
75 compare
${f%.*} "on stdin with --replace"
79 echo "*** Testing --inline"
80 prepare_testdir
$SOURCE/inline
81 # copy a random file to make sure it is ignored
82 cp $f $TESTDIR/etc
/sysusers.d
/confuse.conf
83 $SYSUSERS --root=$TESTDIR --inline \
84 "u u1 222 - - /bin/zsh" \
87 compare
$SOURCE/inline
"(--inline)"
90 echo "*** Testing --inline with --replace"
91 prepare_testdir
$SOURCE/inline
92 # copy a random file to make sure it is ignored
93 cp $f $TESTDIR/etc
/sysusers.d
/confuse.conf
94 $SYSUSERS --root=$TESTDIR \
96 --replace=/etc
/sysusers.d
/confuse.conf \
97 "u u1 222 - - /bin/zsh" \
100 compare
$SOURCE/inline
"(--inline --replace=…)"
102 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
104 cat >$TESTDIR/etc
/login.defs
<<EOF
123 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
124 echo "*** Running $f (with login.defs)"
125 prepare_testdir
${f%.input}
126 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
127 $SYSUSERS --root=$TESTDIR
129 [ @ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES@
= 1 ] && bound
=555 || bound
=$system_guid_max
130 compare
${f%.*} "(with login.defs)" $bound
133 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
135 mv $TESTDIR/etc
/login.defs
$TESTDIR/etc
/login.defs.moved
136 ln -s ..
/..
/..
/..
/..
/etc
/login.defs.moved
$TESTDIR/etc
/login.defs
138 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
139 echo "*** Running $f (with login.defs symlinked)"
140 prepare_testdir
${f%.input}
141 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
142 $SYSUSERS --root=$TESTDIR
144 [ @ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES@
= 1 ] && bound
=555 || bound
=$system_guid_max
145 compare
${f%.*} "(with login.defs symlinked)" $bound
148 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
150 # tests for error conditions
151 for f
in $
(ls -1 $SOURCE/unhappy-
*.input |
sort -V); do
152 echo "*** Running test $f"
153 prepare_testdir
${f%.input}
154 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
155 $SYSUSERS --root=$TESTDIR 2>&1 |
tail -n1 |
sed -r 's/^[^:]+:[^:]+://' >$TESTDIR/err
156 if ! diff -u $TESTDIR/err
${f%.*}.expected-err
; then
157 echo "**** Unexpected error output for $f"