]> git.ipfire.org Git - thirdparty/systemd.git/blame - test/test-sysusers.sh.in
test-network: disable RA in test_sriov
[thirdparty/systemd.git] / test / test-sysusers.sh.in
CommitLineData
bd7e6aa7
ZJS
1#!/usr/bin/env bash
2set -e
3
4SYSUSERS="${1:-systemd-sysusers}"
5
6[ -e "$(dirname $0)/../systemd-runtest.env" ] && . "$(dirname $0)/../systemd-runtest.env"
7SYSTEMD_TEST_DATA=${SYSTEMD_TEST_DATA:-@SYSTEMD_TEST_DATA@}
8SOURCE=$SYSTEMD_TEST_DATA/test-sysusers
9
10TESTDIR=$(mktemp --tmpdir --directory "test-sysusers.XXXXXXXXXX")
11trap "rm -rf '$TESTDIR'" EXIT INT QUIT PIPE
12
13prepare_testdir() {
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-}
19 done
20 return 0
21}
22
aa25270c
ZJS
23[ @SYSTEM_UID_MAX@ -lt @SYSTEM_GID_MAX@ ] && system_guid_max=@SYSTEM_UID_MAX@ || system_guid_max=@SYSTEM_GID_MAX@
24
bd7e6aa7 25preprocess() {
aa25270c
ZJS
26 m=${2:-$system_guid_max}
27
28 sed -e "s/SYSTEM_UGID_MAX/$m/g;
29 s#NOLOGIN#@NOLOGIN@#g" "$1"
bd7e6aa7
ZJS
30}
31
32compare() {
aa25270c 33 if ! diff -u $TESTDIR/etc/passwd <(preprocess $1.expected-passwd $3); then
044df624 34 echo "**** Unexpected output for $f $2"
bd7e6aa7
ZJS
35 exit 1
36 fi
37
aa25270c 38 if ! diff -u $TESTDIR/etc/group <(preprocess $1.expected-group $3); then
bd7e6aa7
ZJS
39 echo "**** Unexpected output for $f $2"
40 exit 1
41 fi
42}
43
44rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/*
45
46# happy tests
69a7c5fb 47for f in $(ls -1 $SOURCE/test-*.input | sort -V); do
bd7e6aa7
ZJS
48 echo "*** Running $f"
49 prepare_testdir ${f%.input}
50 cp $f $TESTDIR/usr/lib/sysusers.d/test.conf
51 $SYSUSERS --root=$TESTDIR
52
044df624 53 compare ${f%.*} ""
bd7e6aa7
ZJS
54done
55
69a7c5fb 56for f in $(ls -1 $SOURCE/test-*.input | sort -V); do
bd7e6aa7
ZJS
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 -
61
044df624 62 compare ${f%.*} "on stdin"
bd7e6aa7
ZJS
63done
64
69a7c5fb 65for f in $(ls -1 $SOURCE/test-*.input | sort -V); do
bd7e6aa7
ZJS
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 -
73
044df624 74 compare ${f%.*} "on stdin with --replace"
bd7e6aa7
ZJS
75done
76
77# test --inline
78echo "*** Testing --inline"
044df624 79prepare_testdir $SOURCE/inline
bd7e6aa7
ZJS
80# copy a random file to make sure it is ignored
81cp $f $TESTDIR/etc/sysusers.d/confuse.conf
82$SYSUSERS --root=$TESTDIR --inline \
83 "u u1 222 - - /bin/zsh" \
84 "g g1 111"
85
86compare $SOURCE/inline "(--inline)"
87
88# test --replace
89echo "*** Testing --inline with --replace"
044df624 90prepare_testdir $SOURCE/inline
bd7e6aa7
ZJS
91# copy a random file to make sure it is ignored
92cp $f $TESTDIR/etc/sysusers.d/confuse.conf
93$SYSUSERS --root=$TESTDIR \
94 --inline \
95 --replace=/etc/sysusers.d/confuse.conf \
96 "u u1 222 - - /bin/zsh" \
97 "g g1 111"
98
99compare $SOURCE/inline "(--inline --replace=…)"
100
101rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/*
102
aa25270c
ZJS
103cat >$TESTDIR/etc/login.defs <<EOF
104SYS_UID_MIN abcd
105SYS_UID_MAX abcd
106SYS_GID_MIN abcd
107SYS_GID_MAX abcd
108SYS_UID_MIN 401
109SYS_UID_MAX 555
110SYS_GID_MIN 405
111SYS_GID_MAX 666
112SYS_UID_MIN abcd
113SYS_UID_MAX abcd
114SYS_GID_MIN abcd
115SYS_GID_MAX abcd
116SYS_UID_MIN999
117SYS_UID_MAX999
118SYS_GID_MIN999
119SYS_GID_MAX999
120EOF
121
122for 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
127
128 [ @ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES@ = 1 ] && bound=555 || bound=$system_guid_max
129 compare ${f%.*} "(with login.defs)" $bound
130done
131
132rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/*
133
134mv $TESTDIR/etc/login.defs $TESTDIR/etc/login.defs.moved
135ln -s ../../../../../etc/login.defs.moved $TESTDIR/etc/login.defs
136
137for 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
142
143 [ @ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES@ = 1 ] && bound=555 || bound=$system_guid_max
144 compare ${f%.*} "(with login.defs symlinked)" $bound
145done
146
147rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/*
148
bd7e6aa7 149# tests for error conditions
69a7c5fb 150for f in $(ls -1 $SOURCE/unhappy-*.input | sort -V); do
bd7e6aa7
ZJS
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"
157 cat $TESTDIR/err
158 exit 1
159 fi
160done