#!/bin/sh # # Copyright (c) 2012 FUJITSU LIMITED # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See # the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ################################################################## export TST_TOTAL=${TST_TOTAL:=1} export TST_COUNT=1 export TCID=${TCID:="$(basename "$0")"} if [ -z "$LTPTMP" -a -z "$TMPBASE" ]; then LTPTMP=/tmp else LTPTMP=$TMPBASE fi if ! which sss_useradd >/dev/null 2>&1; then tst_brkm TCONF NULL \ "sss_useradd does not exist. Skipping all testcases." exit 0 fi # Signals to trap. readonly TRAP_SIGS="2 3 6 11 15" CONFIG_FILE="/etc/sssd/sssd.conf" NSS_CONFIG_FILE="/etc/nsswitch.conf" # number of seconds to wait for another sssd test to complete WAIT_COUNT=30 cleanup() { disable_traps exit_code=$1 # Restore the previous sssd daemon state. if [ -f "$CONFIG_FILE.ltpback" ]; then if mv "$CONFIG_FILE.ltpback" "$CONFIG_FILE"; then mv $NSS_CONFIG_FILE.ltpback $NSS_CONFIG_FILE # Make sure that restart_sssd_daemon doesn't loop # back to cleanup again. if [ $SSSD_STARTED -eq 1 ]; then stop_daemon sssd else restart_sssd_daemon "return 1" fi # Maintain any nonzero exit codes if [ $exit_code -ne $? ]; then exit_code=1 fi else exit_code=1 fi fi exit $exit_code } setup() { tst_require_root trap ' disable_traps tst_resm TBROK "Testing is terminating due to a signal" cleanup 1' $TRAP_SIGS || exit 1 # Check to see if sssd exists if [ ! -e /usr/sbin/sssd ]; then tst_resm TCONF "couldn't find sssd" cleanup 0 fi # Check to see if nscd exists if [ ! -e /usr/sbin/nscd ]; then tst_resm TCONF "couldn't find nscd" cleanup 0 fi # Back up configuration file if [ -f "$CONFIG_FILE" ]; then # Pause if another LTP sssd test is running while [ -f "$CONFIG_FILE.ltpback" -a $WAIT_COUNT -gt 0 ]; do : $(( WAIT_COUNT -= 1 )) sleep 1 done # Oops -- $CONFIG_FILE.ltpback is still there! if [ $WAIT_COUNT -eq 0 ]; then tst_resm TBROK "another sssd test is stuck" cleanup 1 elif ! cp "$CONFIG_FILE" "$CONFIG_FILE.ltpback"; then tst_resm TBROK "failed to backup $CONFIG_FILE" cleanup 1 fi cp $NSS_CONFIG_FILE $NSS_CONFIG_FILE.ltpback grep "passwd: files sss" $NSS_CONFIG_FILE > /dev/null if [ $? -ne 0 ]; then sed -i "s/passwd: files/passwd: files sss/" \ $NSS_CONFIG_FILE fi else tst_resm TWARN "$CONFIG_FILE not found!" touch $CONFIG_FILE fi chmod 0600 $CONFIG_FILE if [ $? -ne 0 ]; then tst_brkm TBROK NULL "fail to modify the permission of $CONFIG_FILE" fi } disable_traps() { trap - $TRAP_SIGS } restart_sssd_daemon() { # Default to running `cleanup 1' when dealing with error cases. if [ $# -eq 0 ]; then cleanup_command="cleanup 1" else cleanup_command=$1 fi tst_resm TINFO "restarting sssd daemon" restart_daemon sssd if [ $? -eq 0 ]; then # wait sssd restart success. sleep 1 else $cleanup_command fi } # sssd.conf should contain: # [sssd] # config_file_version = 2 # services = nss, pam # domains = LOCAL # #[nss] # #[pam] # #[domain/LOCAL] #id_provider = local make_config_file() { printf "[sssd]\nconfig_file_version = 2\n" > $CONFIG_FILE printf "services = nss, pam\ndomains = LOCAL\n" >> $CONFIG_FILE printf "\n[nss]\n\n[pam]\n\n" >> $CONFIG_FILE printf "[domain/LOCAL]\nid_provider = local\n" >> $CONFIG_FILE } . cmdlib.sh SSSD_STARTED=0 status_daemon sssd if [ $? -ne 0 ]; then SSSD_STARTED=1 fi # determine sssd.conf can support override_gid? setup make_config_file sed -i -e "/\[domain\/LOCAL\]/ a\override_gid = error" $CONFIG_FILE # make sure config file is OK sleep 1 restart_daemon sssd if [ $? -ne 1 ]; then tst_resm TCONF "override_gid does not exist. Skipping all testcases" cleanup 0 fi