• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2#
3#  Copyright (c) 2012 FUJITSU LIMITED
4#
5#  This program is free software;  you can redistribute it and/or modify
6#  it under the terms of the GNU General Public License as published by
7#  the Free Software Foundation; either version 2 of the License, or
8#  (at your option) any later version.
9#
10#  This program is distributed in the hope that it will be useful,
11#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
12#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13#  the GNU General Public License for more details.
14#
15#  You should have received a copy of the GNU General Public License
16#  along with this program;  if not, write to the Free Software
17#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18#
19##################################################################
20
21export TST_TOTAL=${TST_TOTAL:=1}
22export TST_COUNT=1
23export TCID=${TCID:="$(basename "$0")"}
24
25if [ -z "$LTPTMP" -a -z "$TMPBASE" ]; then
26	LTPTMP=/tmp
27else
28	LTPTMP=$TMPBASE
29fi
30
31if ! which sss_useradd >/dev/null 2>&1; then
32	tst_brkm TCONF NULL \
33		 "sss_useradd does not exist. Skipping all testcases."
34	exit 0
35fi
36
37# Signals to trap.
38readonly TRAP_SIGS="2 3 6 11 15"
39
40CONFIG_FILE="/etc/sssd/sssd.conf"
41NSS_CONFIG_FILE="/etc/nsswitch.conf"
42
43# number of seconds to wait for another sssd test to complete
44WAIT_COUNT=30
45
46cleanup()
47{
48	disable_traps
49	exit_code=$1
50
51	# Restore the previous sssd daemon state.
52	if [ -f "$CONFIG_FILE.ltpback" ]; then
53		if mv "$CONFIG_FILE.ltpback" "$CONFIG_FILE"; then
54			mv $NSS_CONFIG_FILE.ltpback $NSS_CONFIG_FILE
55			# Make sure that restart_sssd_daemon doesn't loop
56			# back to cleanup again.
57			if [ $SSSD_STARTED -eq 1 ]; then
58				stop_daemon sssd
59			else
60				restart_sssd_daemon "return 1"
61			fi
62			# Maintain any nonzero exit codes
63			if [ $exit_code -ne $? ]; then
64				exit_code=1
65			fi
66		else
67			exit_code=1
68		fi
69	fi
70
71	exit $exit_code
72}
73
74setup()
75{
76	tst_require_root
77
78	trap '	disable_traps
79		tst_resm TBROK "Testing is terminating due to a signal"
80		cleanup 1' $TRAP_SIGS || exit 1
81
82	# Check to see if sssd exists
83	if [ ! -e /usr/sbin/sssd ]; then
84		tst_resm TCONF "couldn't find sssd"
85		cleanup	0
86	fi
87
88	# Check to see if nscd exists
89	if [ ! -e /usr/sbin/nscd ]; then
90		tst_resm TCONF "couldn't find nscd"
91		cleanup	0
92	fi
93
94	# Back up configuration file
95	if [ -f "$CONFIG_FILE" ]; then
96		# Pause if another LTP sssd test is running
97		while [ -f "$CONFIG_FILE.ltpback" -a $WAIT_COUNT -gt 0 ]; do
98			: $(( WAIT_COUNT -= 1 ))
99			sleep 1
100		done
101		# Oops -- $CONFIG_FILE.ltpback is still there!
102		if [ $WAIT_COUNT -eq 0 ]; then
103			tst_resm TBROK "another sssd test is stuck"
104			cleanup 1
105		elif ! cp "$CONFIG_FILE" "$CONFIG_FILE.ltpback"; then
106			tst_resm TBROK "failed to backup $CONFIG_FILE"
107			cleanup 1
108		fi
109
110		cp $NSS_CONFIG_FILE $NSS_CONFIG_FILE.ltpback
111		grep "passwd:     files sss" $NSS_CONFIG_FILE > /dev/null
112		if [ $? -ne 0 ]; then
113			sed -i "s/passwd:     files/passwd:     files sss/" \
114				$NSS_CONFIG_FILE
115		fi
116	else
117		tst_resm TWARN "$CONFIG_FILE not found!"
118		touch $CONFIG_FILE
119	fi
120	chmod 0600 $CONFIG_FILE
121	if [ $? -ne 0 ]; then
122		tst_brkm TBROK NULL "fail to modify the permission of $CONFIG_FILE"
123	fi
124}
125
126disable_traps()
127{
128	trap - $TRAP_SIGS
129}
130
131restart_sssd_daemon()
132{
133	# Default to running `cleanup 1' when dealing with error cases.
134	if [ $# -eq 0 ]; then
135		cleanup_command="cleanup 1"
136	else
137		cleanup_command=$1
138	fi
139
140	tst_resm TINFO "restarting sssd daemon"
141	restart_daemon sssd
142	if [ $? -eq 0 ]; then
143		# wait sssd restart success.
144		sleep 1
145	else
146		$cleanup_command
147	fi
148}
149
150# sssd.conf should contain:
151# [sssd]
152# config_file_version = 2
153# services = nss, pam
154# domains = LOCAL
155#
156#[nss]
157#
158#[pam]
159#
160#[domain/LOCAL]
161#id_provider = local
162make_config_file()
163{
164	printf "[sssd]\nconfig_file_version = 2\n" > $CONFIG_FILE
165	printf "services = nss, pam\ndomains = LOCAL\n" >> $CONFIG_FILE
166	printf "\n[nss]\n\n[pam]\n\n" >> $CONFIG_FILE
167	printf "[domain/LOCAL]\nid_provider = local\n" >> $CONFIG_FILE
168}
169
170. cmdlib.sh
171
172SSSD_STARTED=0
173status_daemon sssd
174if [ $? -ne 0 ]; then
175	SSSD_STARTED=1
176fi
177
178# determine sssd.conf can support override_gid?
179setup
180make_config_file
181sed -i -e "/\[domain\/LOCAL\]/ a\override_gid = error" $CONFIG_FILE
182# make sure config file is OK
183sleep 1
184restart_daemon sssd
185
186if [ $? -ne 1 ]; then
187	tst_resm TCONF "override_gid does not exist. Skipping all testcases"
188	cleanup 0
189fi
190