]> git.sur5r.net Git - bacula/bacula/blob - regress/tests/acl-xattr-test
Add Allow Duplicate Jobs to copy-uncopied-test regression test for bug #1751
[bacula/bacula] / regress / tests / acl-xattr-test
1 #!/bin/sh
2 #
3 # Run a backup of the Bacula build directory with some acls then restore it.
4 #
5 # For Linux:
6 #    Your filesystem must be mounted with the acl option (mount -o remount,acl,user_xattr /tmp)
7 #    on ubuntu, the attr package must be installed
8 #
9 #    For this script to work, you will also need a number of acl packages loaded
10 #    not default on Debian derivatives: 
11 #       apt-get install acl libacl1 libacl1-dev attr
12 #
13 # For OSX and Solaris:
14 #
15 #    Defaults should be ok
16 #
17 # For FreeBSD:
18 #
19 #    Your filesystem must have acls enabled and needs to be mounted with acls.
20 #       tunefs -a enable <device>
21 #       acls mountoption in /etc/fstab
22 #
23 # For NetBSD:
24 #
25 #    Defaults should be ok (As NetBSD doesn't support native acls we skip that test).
26 #
27 TestName="acl-xattr-test"
28 JobName=backup
29 . scripts/functions
30
31 #
32 # See if the right software is installed.
33 #
34 case `uname -s` in
35    Linux)
36       # Require getfacl to be installed
37       getfacl Makefile 2>&1 >/dev/null
38       if test  $? -ne 0; then
39         echo "$TestName skipped: getfacl not installed"
40         exit 0
41       fi
42
43       # Require getfattr to be installed
44       getfattr -d Makefile 2>&1 >/dev/null
45       if test $? -ne 0; then
46         echo "$TestName skipped: getfattr not installed"
47         exit 0
48       fi
49       ;;
50    Darwin)
51       ;;
52    SunOS)
53       ;;
54    FreeBSD)
55       # Require getfacl to be installed
56       getfacl Makefile 2>&1 >/dev/null
57       if test  $? -ne 0; then
58         echo "$TestName skipped: getfacl not installed"
59         exit 0
60       fi
61
62       # Require lsextattr to be installed
63       lsextattr user Makefile 2>&1 >/dev/null
64       if test $? -ne 0; then
65         echo "$TestName skipped: lsextattr not installed"
66         exit 0
67       fi
68       ;;
69    NetBSD)
70       # Require lsextattr to be installed
71       lsextattr user Makefile 2>&1 >/dev/null
72       if test $? -ne 0; then
73         echo "$TestName skipped: lsextattr not installed"
74         exit 0
75       fi
76       ;;
77    *)
78       echo "Unsupported OS"
79       exit 0
80       ;;
81 esac
82
83 scripts/cleanup
84 scripts/copy-confs
85
86 #
87 # Zap out any schedule in default conf file so that
88 #  it doesn't start during our test
89 #
90 outf="tmp/sed_tmp"
91 echo "s%  Schedule =%# Schedule =%g" > $outf
92 echo "s/Options {/Options { aclsupport=yes; xattrsupport = yes/" >> $outf
93 cp ${cwd}/bin/bacula-dir.conf  $cwd/tmp/1
94 sed -f ${outf} ${cwd}/tmp/1 >${cwd}/bin/bacula-dir.conf
95
96 d=${cwd}/build/acl
97
98 uid=`id -u`
99 rm -rf $d
100 mkdir -p $d
101 mkdir -p $d/acl-dir
102 cp ${cwd}/bin/bconsole $d
103
104 case `uname -s` in
105    Linux)
106       setfacl -m d:user:$uid:r-x $d/acl-dir
107       setfacl -m d:user:root:-wx $d/acl-dir
108       setfacl -m user:nobody:--- $d/acl-dir
109       setfacl -m user:nobody:--- $d/bconsole
110       setfacl -m group:nogroup:--x $d/bconsole
111       cp ${cwd}/bin/bconsole $d/acl-dir
112       cp ${cwd}/bin/bconsole $d/other
113       setfattr -h -n user.bacula.test -v rulez $d/other 2>/dev/null 1>/dev/null
114
115       ( cd $cwd/build
116         getfacl -R acl > $cwd/tmp/org
117         getfattr -h -n user.bacula.test $d/other > $cwd/tmp/attr.org
118       )
119       ;;
120    Darwin)
121       username=`id -un`
122       chmod +a "user:$username allow read,execute" $d/acl-dir
123       chmod +a "user:root allow write,execute" $d/acl-dir
124       chmod +a "user:nobody deny read,write,execute" $d/acl-dir
125       chmod +a "user:nobody deny read,write,execute" $d/bconsole
126       chmod +a "group:nogroup allow execute" $d/bconsole
127       cp ${cwd}/bin/bconsole $d/acl-dir
128       cp ${cwd}/bin/bconsole $d/other
129       xattr -w  bacula.test "rulez" $d/other 2>/dev/null 1>/dev/null
130
131       ( cd $cwd/build
132         ls -lde -R acl > $cwd/tmp/org
133         xattr -p bacula.test $d/other > $cwd/tmp/attr.org
134       )
135       ;;
136    SunOS)
137       #
138       # See if we need to set ZFS or POSIX acls
139       #
140       df -F zfs $d > /dev/null 2>&1
141       if [ $? = 0 ]; then
142          /bin/chmod A+user:$uid:rx:allow $d/acl-dir
143          /bin/chmod A+user:root:wx:allow $d/acl-dir
144          /bin/chmod A+user:nobody:rwx:deny $d/acl-dir
145          /bin/chmod A+user:nobody:rwx:deny $d/bconsole
146          /bin/chmod A+group:nogroup:x:allow $d/bconsole
147       else
148          /bin/chmod A+user:$uid:r-x $d/acl-dir
149          /bin/chmod A+user:root:-wx $d/acl-dir
150          /bin/chmod A+user:nobody:--- $d/acl-dir
151          /bin/chmod A+user:nobody:--- $d/bconsole
152          /bin/chmod A+group:nogroup:--x $d/bconsole
153       fi
154       cp ${cwd}/bin/bconsole $d/other
155       /bin/runat $d/other 'cat > bacula.test' << EOF
156 rulez
157 EOF
158       ( cd $cwd/build
159         /bin/ls -ldv -R acl > $cwd/tmp/org
160         /bin/runat $d/other 'cat bacula.test' > $cwd/tmp/attr.org
161       )
162       ;;
163    FreeBSD)
164       setfacl -m d:user:$uid:r-x $d/acl-dir
165       setfacl -m d:user:root:-wx $d/acl-dir
166       setfacl -m user:nobody:--- $d/acl-dir
167       setfacl -m user:nobody:--- $d/bconsole
168       setfacl -m group:nogroup:--x $d/bconsole
169       cp ${cwd}/bin/bconsole $d/acl-dir
170       cp ${cwd}/bin/bconsole $d/other
171       setextattr user bacula.test rulez $d/other 2>/dev/null 1>/dev/null
172
173       ( cd $cwd/build
174         for file in acl/*
175         do
176            getfacl $file
177         done > $cwd/tmp/org
178         getextattr user bacula.test $d/other > $cwd/tmp/attr.org
179       )
180       ;;
181    NetBSD)
182       cp ${cwd}/bin/bconsole $d/other
183       setextattr user bacula.test rulez $d/other 2>/dev/null 1>/dev/null
184
185       ( cd $cwd/build
186         cp /dev/null $cwd/tmp/org
187         getextattr user bacula.test $d/other > $cwd/tmp/attr.org
188       )
189       ;;
190 esac
191
192 change_jobname BackupClient1 $JobName
193 start_test
194
195 cat <<END_OF_DATA >${cwd}/tmp/bconcmds
196 @$out /dev/null
197 messages
198 @$out ${cwd}/tmp/log1.out
199 label volume=TestVolume001 storage=File pool=File
200 setdebug level=400 trace=1 client
201 setdebug level=300 trace=1 director
202 setdebug level=300 trace=1 storage
203 run job=$JobName yes
204 wait
205 messages
206 @# 
207 @# now do a restore
208 @#
209 @$out ${cwd}/tmp/log2.out  
210 restore where=${cwd}/tmp/bacula-restores select all done
211 yes
212 wait
213 messages
214 quit
215 END_OF_DATA
216
217 run_bacula
218 check_for_zombie_jobs storage=File
219 stop_bacula
220
221 case `uname -s` in
222    Linux)
223       ( cd $cwd/tmp/bacula-restores/$cwd/build
224         getfacl -R acl > $cwd/tmp/new
225         getfattr -h -n user.bacula.test $d/other > $cwd/tmp/attr.new
226       )
227       ;;
228    Darwin)
229       ( cd $cwd/tmp/bacula-restores/$cwd/build
230         ls -lde -R acl > $cwd/tmp/new
231         xattr -p bacula.test $d/other > $cwd/tmp/attr.new
232       )
233       ;;
234    SunOS)
235       ( cd $cwd/tmp/bacula-restores/$cwd/build
236         /bin/ls -ldv -R acl > $cwd/tmp/new
237         /bin/runat $d/other 'cat bacula.test' > $cwd/tmp/attr.new
238       )
239       ;;
240    FreeBSD)
241       ( cd $cwd/tmp/bacula-restores/$cwd/build
242         for file in acl/*
243         do
244            getfacl $file
245         done > $cwd/tmp/new
246         getextattr user bacula.test $d/other > $cwd/tmp/attr.new
247       )
248       ;;
249    NetBSD)
250       ( cd $cwd/tmp/bacula-restores/$cwd/build
251         cp /dev/null $cwd/tmp/new
252         getextattr user bacula.test $d/other > $cwd/tmp/attr.new
253       )
254       ;;
255 esac
256
257 diff -u $cwd/tmp/org $cwd/tmp/new
258 if [ $? -ne 0 ]; then
259    rstat=1
260 fi
261
262 diff $cwd/tmp/attr.org $cwd/tmp/attr.new
263 if [ $? -ne 0 ]; then
264    rstat=1
265 fi
266
267 check_two_logs
268 check_restore_diff
269
270 if [ x$REGRESS_DEBUG != x ]; then
271   rm -rf $d
272 fi
273
274 end_test