#!/bin/sh # # Run a backup of the Bacula build directory with some acls # then restore it. # # Your filesystem must be mounted with the acl option (mount -o remount,acl,user_xattr /tmp) # on ubuntu, the attr package must be installed # # For this script to work, you will also need a number of acl packages loaded # not default on Debian derivatives: # apt-get install acl libacl1 libacl1-dev attr # TestName="acl-xattr-test" JobName=backup . scripts/functions require_linux # Require getfacl to be installed getfacl Makefile 2>&1 >/dev/null if test $? -ne 0; then echo "$TestName skipped: getfacl not installed" exit 0 fi # Require attr to be installed attr -l Makefile 2>&1 >/dev/null if test $? -ne 0; then echo "$TestName skipped: attr not installed" exit 0 fi scripts/cleanup scripts/copy-confs # # Zap out any schedule in default conf file so that # it doesn't start during our test # outf="tmp/sed_tmp" echo "s% Schedule =%# Schedule =%g" > $outf echo "s/Options {/Options { aclsupport=yes; xattrsupport = yes/" >> $outf cp ${cwd}/bin/bacula-dir.conf $cwd/tmp/1 sed -f ${outf} ${cwd}/tmp/1 >${cwd}/bin/bacula-dir.conf d=${cwd}/build/acl uid=`id -u` rm -rf $d mkdir $d mkdir $d/testdir cp ${cwd}/bin/bconsole $d case `uname -s` in Linux) setfacl -m d:user:$uid:r-x $d/testdir setfacl -m d:user:root:-wx $d/testdir setfacl -m user:nobody:--- $d/testdir setfacl -m user:nobody:--- $d/bconsole setfacl -m group:nogroup:--x $d/bconsole cp ${cwd}/bin/bconsole $d/testdir cp ${cwd}/bin/bconsole $d/other attr -s bacula.test -V rulez $d/other 2>/dev/null 1>/dev/null ( cd $cwd/build getfacl -R acl > $cwd/tmp/org attr -g bacula.test $d/other > $cwd/tmp/attr.org ) ;; Darwin) chmod +a "user:$uid allow read execute" $d/testdir chmod +a "user:root allow write execute" $d/testdir chmod +a "user:nobody deny read write execute" $d/testdir chmod +a "user:nobody deny read write execute" $d/bconsole chmod +a "group:nogroup allow execute" $d/bconsole cp ${cwd}/bin/bconsole $d/testdir cp ${cwd}/bin/bconsole $d/other xattr -w bacula.test "rulez" $d/other 2>/dev/null 1>/dev/null ( cd $cwd/build ls -lde -R acl > $cwd/tmp/org xattr -p bacula.test $d/other > $cwd/tmp/attr.org ) ;; esac change_jobname BackupClient1 $JobName start_test cat <${cwd}/tmp/bconcmds @$out /dev/null messages @$out ${cwd}/tmp/log1.out label volume=TestVolume001 storage=File pool=Default setdebug level=400 trace=1 client setdebug level=300 trace=1 director setdebug level=300 trace=1 storage run job=$JobName yes wait messages @# @# now do a restore @# @$out ${cwd}/tmp/log2.out restore where=${cwd}/tmp/bacula-restores select all done yes wait messages quit END_OF_DATA run_bacula check_for_zombie_jobs storage=File stop_bacula ( cd $cwd/tmp/bacula-restores/$cwd/build getfacl -R acl > $cwd/tmp/new attr -g bacula.test $d/other > $cwd/tmp/attr.new ) diff -u $cwd/tmp/org $cwd/tmp/new if [ $? -ne 0 ]; then rstat=1 fi diff $cwd/tmp/attr.org $cwd/tmp/attr.new if [ $? -ne 0 ]; then rstat=1 fi check_two_logs check_restore_diff if [ x$REGRESS_DEBUG != x ]; then rm -rf $d fi end_test