4 SYSUSERS
="${1:-systemd-sysusers}"
6 [ -e "$(dirname $0)/../systemd-runtest.env" ] && .
"$(dirname $0)/../systemd-runtest.env"
7 SYSTEMD_TEST_DATA
=${SYSTEMD_TEST_DATA:-@SYSTEMD_TEST_DATA@}
8 SOURCE
=$SYSTEMD_TEST_DATA/test-sysusers
10 TESTDIR
=$
(mktemp
--tmpdir --directory "test-sysusers.XXXXXXXXXX")
11 trap "rm -rf '$TESTDIR'" EXIT INT QUIT PIPE
14 mkdir
-p $TESTDIR/etc
/sysusers.d
/
15 mkdir
-p $TESTDIR/usr
/lib
/sysusers.d
/
16 rm -f $TESTDIR/etc
/*{passwd
,group
,shadow
}
17 for i
in $1.initial-
{passwd
,group
,shadow
}; do
18 test -f $i && cp $i $TESTDIR/etc
/${i#*.initial-}
23 [ @SYSTEM_UID_MAX@
-lt @SYSTEM_GID_MAX@
] && system_guid_max
=@SYSTEM_UID_MAX@ || system_guid_max
=@SYSTEM_GID_MAX@
26 m
=${2:-$system_guid_max}
28 sed -e "s/SYSTEM_UGID_MAX/$m/g;
29 s#NOLOGIN#@NOLOGIN@#g" "$1"
33 if ! diff -u $TESTDIR/etc
/passwd
<(preprocess
$1.expected-passwd
$3); then
34 echo "**** Unexpected output for $f $2"
38 if ! diff -u $TESTDIR/etc
/group
<(preprocess
$1.expected-group
$3); then
39 echo "**** Unexpected output for $f $2"
44 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
47 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
49 prepare_testdir
${f%.input}
50 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
51 $SYSUSERS --root=$TESTDIR
56 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
57 echo "*** Running $f on stdin"
58 prepare_testdir
${f%.input}
59 touch $TESTDIR/etc
/sysusers.d
/test.conf
60 cat $f |
$SYSUSERS --root=$TESTDIR -
62 compare
${f%.*} "on stdin"
65 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
66 echo "*** Running $f on stdin with --replace"
67 prepare_testdir
${f%.input}
68 touch $TESTDIR/etc
/sysusers.d
/test.conf
69 # this overrides test.conf which is masked on disk
70 cat $f |
$SYSUSERS --root=$TESTDIR --replace=/etc
/sysusers.d
/test.conf
-
71 # this should be ignored
72 cat $SOURCE/test-1.input |
$SYSUSERS --root=$TESTDIR --replace=/usr
/lib
/sysusers.d
/test.conf
-
74 compare
${f%.*} "on stdin with --replace"
78 echo "*** Testing --inline"
79 prepare_testdir
$SOURCE/inline
80 # copy a random file to make sure it is ignored
81 cp $f $TESTDIR/etc
/sysusers.d
/confuse.conf
82 $SYSUSERS --root=$TESTDIR --inline \
83 "u u1 222 - - /bin/zsh" \
86 compare
$SOURCE/inline
"(--inline)"
89 echo "*** Testing --inline with --replace"
90 prepare_testdir
$SOURCE/inline
91 # copy a random file to make sure it is ignored
92 cp $f $TESTDIR/etc
/sysusers.d
/confuse.conf
93 $SYSUSERS --root=$TESTDIR \
95 --replace=/etc
/sysusers.d
/confuse.conf \
96 "u u1 222 - - /bin/zsh" \
99 compare
$SOURCE/inline
"(--inline --replace=…)"
101 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
103 cat >$TESTDIR/etc
/login.defs
<<EOF
122 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
123 echo "*** Running $f (with login.defs)"
124 prepare_testdir
${f%.input}
125 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
126 $SYSUSERS --root=$TESTDIR
128 [ @ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES@
= 1 ] && bound
=555 || bound
=$system_guid_max
129 compare
${f%.*} "(with login.defs)" $bound
132 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
134 mv $TESTDIR/etc
/login.defs
$TESTDIR/etc
/login.defs.moved
135 ln -s ..
/..
/..
/..
/..
/etc
/login.defs.moved
$TESTDIR/etc
/login.defs
137 for f
in $
(ls -1 $SOURCE/test-
*.input |
sort -V); do
138 echo "*** Running $f (with login.defs symlinked)"
139 prepare_testdir
${f%.input}
140 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
141 $SYSUSERS --root=$TESTDIR
143 [ @ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES@
= 1 ] && bound
=555 || bound
=$system_guid_max
144 compare
${f%.*} "(with login.defs symlinked)" $bound
147 rm -f $TESTDIR/etc
/sysusers.d
/* $TESTDIR/usr
/lib
/sysusers.d
/*
149 # tests for error conditions
150 for f
in $
(ls -1 $SOURCE/unhappy-
*.input |
sort -V); do
151 echo "*** Running test $f"
152 prepare_testdir
${f%.input}
153 cp $f $TESTDIR/usr
/lib
/sysusers.d
/test.conf
154 $SYSUSERS --root=$TESTDIR 2>&1 |
tail -n1 > $TESTDIR/err
155 if ! diff -u $TESTDIR/err
${f%.*}.expected-err
; then
156 echo "**** Unexpected error output for $f"