-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathslapd-regtest
executable file
·137 lines (118 loc) · 3.45 KB
/
slapd-regtest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash
set -x
SLAPADD=/usr/sbin/slapadd
SLAPD=/usr/sbin/slapd
if [[ -z ${WORKDIR-} ]]; then
WORKDIR=$(mktemp -d -t nsscache.regtest.XXXXXX)
ARTIFACTS=${WORKDIR}
fi
slapd_apparmor_bkp="${WORKDIR}/slapd_profile.bkp"
slapd_apparmor_override="/etc/apparmor.d/local/usr.sbin.slapd"
slapd_apparmor="/etc/apparmor.d/usr.sbin.slapd"
cleanup() {
if [[ -f "$slapd_apparmor_bkp" ]]; then
sudo mv "$slapd_apparmor_bkp" "$slapd_apparmor_override"
sudo apparmor_parser -r -T -W "$slapd_apparmor"
fi
if [[ -e "$WORKDIR/slapd.pid" ]]; then
kill -TERM $(cat $WORKDIR/slapd.pid)
fi
if [[ -z ${ADTTMP-} ]]; then
rm -rf $WORKDIR
fi
}
trap cleanup 0 INT QUIT ABRT PIPE TERM
TESTDIR=$(dirname -- "$0")
apparmor_enabled() {
if [ -x /usr/sbin/aa-status ]; then
sudo /usr/sbin/aa-status --enabled && apparmor_enabled="0" || apparmor_enabled="1"
else
apparmor_enabled="1"
fi
return "$apparmor_enabled"
}
override_apparmor() {
# backup existing override
cp -af "$slapd_apparmor_override" "$slapd_apparmor_bkp"
# the test suite brings up a test slapd server running
# off /tmp/<tmpdir>.
echo "${WORKDIR}/ rw," | sudo tee "$slapd_apparmor_override"
echo "${WORKDIR}/** rwk," | sudo tee -a "$slapd_apparmor_override"
echo "${ARTIFACTS}/ rw," | sudo tee -a "$slapd_apparmor_override"
echo "${ARTIFACTS}/** rwk," | sudo tee -a "$slapd_apparmor_override"
sudo apparmor_parser -r -T -W "$slapd_apparmor"
}
setup_slapd() {
set -e
mkdir -p $WORKDIR/ldap
sed -e "s!@workdir@!$WORKDIR!" \
< ${TESTDIR}/slapd.conf.tmpl > $ARTIFACTS/slapd.conf
$SLAPD -VVV || true
$SLAPADD -d -1 -f $ARTIFACTS/slapd.conf -b dc=example,dc=com -l ${TESTDIR}/default.ldif
$SLAPD -h ldapi://${WORKDIR//\//%2F}%2Fldapi -f $ARTIFACTS/slapd.conf &
slappid=$!
attempts=0
until ldapsearch -x -H ldapi://${WORKDIR//\//%2F}%2Fldapi -b "dc=example,dc=com" '(objectclass=*)'; do
attempts=$(($attempts + 1))
if [[ $attempts -gt 10 ]]; then
echo "failed to connect to slapd in 60 attempts"
exit 1
fi
sleep 0.1
done
set +e
}
run_nsscache() {
source=$1
cache=$2
config_orig="${TESTDIR}/slapd-nsscache.conf.tmpl"
config=$(mktemp -p ${ARTIFACTS} nsscache.${source}.conf.XXXXXX)
sed -e "s!@cache@!$cache!" \
-e "s!@source@!$source!" \
-e "s!@workdir@!$WORKDIR!" \
< $config_orig > $config
mkdir $WORKDIR/$cache
mkdir $WORKDIR/ldap-timestamps-$cache
nsscache status
nsscache -d -c "${config}" update --full
r=$?
if [[ $r -ne 0 ]]; then
echo FAILED: $r
fi
test_${cache}
nsscache -d -c "${config}" status
}
test_files() {
ls -alR $WORKDIR
set -e
grep jaq $WORKDIR/files/passwd.cache
grep jaq $WORKDIR/files/passwd.cache.ixname
grep 37 $WORKDIR/files/passwd.cache.ixuid
grep hax0rs $WORKDIR/files/group.cache
grep hax0rs $WORKDIR/files/group.cache.ixname
grep 31337 $WORKDIR/files/group.cache.ixgid
grep jaq $WORKDIR/files/shadow.cache
grep jaq $WORKDIR/files/shadow.cache.ixname
[[ $(stat -c%A $WORKDIR/files/shadow.cache) == "-rw-r-----" ]] || exit 1
[[ $(stat -c%A $WORKDIR/files/shadow.cache.ixname) == "-rw-r-----" ]] || exit 1
}
check () {
which nsscache
if [[ $? -ne 0 ]]; then
(
cd ${TESTDIR}/..
pip3 install --target="${WORKDIR}" .
)
export PATH=$PATH:${WORKDIR}/bin
fi
set -e
nsscache --version
set +e
}
check
if apparmor_enabled; then
override_apparmor
fi
setup_slapd
run_nsscache ldap files
echo OK