File: slapd-regtest

package info (click to toggle)
nsscache 0.49-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 19,664 kB
  • sloc: python: 8,661; xml: 584; sh: 304; makefile: 19
file content (137 lines) | stat: -rwxr-xr-x 3,537 bytes parent folder | download
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