#!/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 # # See if the right software is installed. # case `uname -s` in 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 ;; Darwin) ;; SunOS) ;; *) echo "Unsupported OS" exit 0 ;; esac 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 ) ;; SunOS) # # See if we need to set ZFS or POSIX acls # df -F zfs $d > /dev/null 2>&1 if [ $? = 0 ]; then chmod A+user:$uid:rx:allow $d/testdir chmod A+user:root:wx:allow $d/testdir chmod A+user:nobody:rwx:deny $d/testdir chmod A+user:nobody:rwx:deny $d/bconsole chmod A+group:nogroup:x:allow $d/bconsole else chmod A+user:$uid:r-x $d/testdir chmod A+user:root:-wx $d/testdir chmod A+user:nobody:--- $d/testdir chmod A+user:nobody:--- $d/bconsole chmod A+group:nogroup:--x $d/bconsole fi runat $d/other 'cat > bacula.test' << EOF rulez EOF ( cd $cwd/build ls -ldv -R acl > $cwd/tmp/org runat $d/other 'cat bacula.test' > $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 case `uname -s` in Linux) ( cd $cwd/tmp/bacula-restores/$cwd/build getfacl -R acl > $cwd/tmp/new attr -g bacula.test $d/other > $cwd/tmp/attr.new ) ;; Darwin) ( cd $cwd/tmp/bacula-restores/$cwd/build ls -lde -R acl > $cwd/tmp/new xattr -p bacula.test $d/other > $cwd/tmp/attr.new ) ;; SunOS) ( cd $cwd/tmp/bacula-restores/$cwd/build ls -ldv -R acl > $cwd/tmp/new runat $d/other 'cat bacula.test' > $cwd/tmp/attr.new ) ;; esac 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