]> git.sur5r.net Git - bacula/bacula/blob - regress/tests/acl-xattr-test
Add second xattr to show bug 1806
[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       setfattr -h -n user.bacula.secondtest -v rulez $d/other 2>/dev/null 1>/dev/null
115
116       ( cd $cwd/build
117         getfacl -R acl > $cwd/tmp/org
118         getfattr -h -n user.bacula.test $d/other > $cwd/tmp/attr.org
119       )
120       ;;
121    Darwin)
122       chmod +a "user:$uid 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       xattr -w  bacula.secondtest "rulez" $d/other 2>/dev/null 1>/dev/null
131
132       ( cd $cwd/build
133         ls -lde -R acl > $cwd/tmp/org
134         xattr -p bacula.test $d/other > $cwd/tmp/attr.org
135       )
136       ;;
137    SunOS)
138       #
139       # See if we need to set ZFS or POSIX acls
140       #
141       df -F zfs $d > /dev/null 2>&1
142       if [ $? = 0 ]; then
143          /bin/chmod A+user:$uid:rx:allow $d/acl-dir
144          /bin/chmod A+user:root:wx:allow $d/acl-dir
145          /bin/chmod A+user:nobody:rwx:deny $d/acl-dir
146          /bin/chmod A+user:nobody:rwx:deny $d/bconsole
147          /bin/chmod A+group:nogroup:x:allow $d/bconsole
148       else
149          /bin/chmod A+user:$uid:r-x $d/acl-dir
150          /bin/chmod A+user:root:-wx $d/acl-dir
151          /bin/chmod A+user:nobody:--- $d/acl-dir
152          /bin/chmod A+user:nobody:--- $d/bconsole
153          /bin/chmod A+group:nogroup:--x $d/bconsole
154       fi
155       cp ${cwd}/bin/bconsole $d/other
156       /bin/runat $d/other 'cat > bacula.test' << EOF
157 rulez
158 EOF
159       /bin/runat $d/other 'cat > bacula.secondtest' << EOF
160 rulez
161 EOF
162       ( cd $cwd/build
163         /bin/ls -ldv -R acl > $cwd/tmp/org
164         /bin/runat $d/other 'cat bacula.test' > $cwd/tmp/attr.org
165       )
166       ;;
167    FreeBSD)
168       setfacl -m d:user:$uid:r-x $d/acl-dir
169       setfacl -m d:user:root:-wx $d/acl-dir
170       setfacl -m user:nobody:--- $d/acl-dir
171       setfacl -m user:nobody:--- $d/bconsole
172       setfacl -m group:nogroup:--x $d/bconsole
173       cp ${cwd}/bin/bconsole $d/acl-dir
174       cp ${cwd}/bin/bconsole $d/other
175       setextattr user bacula.test rulez $d/other 2>/dev/null 1>/dev/null
176       setextattr user bacula.secondtest rulez $d/other 2>/dev/null 1>/dev/null
177
178       ( cd $cwd/build
179         for file in acl/*
180         do
181            getfacl $file
182         done > $cwd/tmp/org
183         getextattr user bacula.test $d/other > $cwd/tmp/attr.org
184       )
185       ;;
186    NetBSD)
187       cp ${cwd}/bin/bconsole $d/other
188       setextattr user bacula.test rulez $d/other 2>/dev/null 1>/dev/null
189       setextattr user bacula.secondtest rulez $d/other 2>/dev/null 1>/dev/null
190
191       ( cd $cwd/build
192         cp /dev/null $cwd/tmp/org
193         getextattr user bacula.test $d/other > $cwd/tmp/attr.org
194       )
195       ;;
196 esac
197
198 change_jobname BackupClient1 $JobName
199 start_test
200
201 cat <<END_OF_DATA >${cwd}/tmp/bconcmds
202 @$out /dev/null
203 messages
204 @$out ${cwd}/tmp/log1.out
205 label volume=TestVolume001 storage=File pool=File
206 setdebug level=400 trace=1 client
207 setdebug level=300 trace=1 director
208 setdebug level=300 trace=1 storage
209 run job=$JobName yes
210 wait
211 messages
212 @# 
213 @# now do a restore
214 @#
215 @$out ${cwd}/tmp/log2.out  
216 restore where=${cwd}/tmp/bacula-restores select all done
217 yes
218 wait
219 messages
220 quit
221 END_OF_DATA
222
223 run_bacula
224 check_for_zombie_jobs storage=File
225 stop_bacula
226
227 case `uname -s` in
228    Linux)
229       ( cd $cwd/tmp/bacula-restores/$cwd/build
230         getfacl -R acl > $cwd/tmp/new
231         getfattr -h -n user.bacula.test $d/other > $cwd/tmp/attr.new
232         getfattr -h -n user.bacula.secondtest $d/other > $cwd/tmp/attr.new
233       )
234       ;;
235    Darwin)
236       ( cd $cwd/tmp/bacula-restores/$cwd/build
237         ls -lde -R acl > $cwd/tmp/new
238         xattr -p bacula.test $d/other > $cwd/tmp/attr.new
239         xattr -p bacula.secondtest $d/other > $cwd/tmp/attr.new
240       )
241       ;;
242    SunOS)
243       ( cd $cwd/tmp/bacula-restores/$cwd/build
244         /bin/ls -ldv -R acl > $cwd/tmp/new
245         /bin/runat $d/other 'cat bacula.test' > $cwd/tmp/attr.new
246         /bin/runat $d/other 'cat bacula.secondtest' > $cwd/tmp/attr.new
247       )
248       ;;
249    FreeBSD)
250       ( cd $cwd/tmp/bacula-restores/$cwd/build
251         for file in acl/*
252         do
253            getfacl $file
254         done > $cwd/tmp/new
255         getextattr user bacula.test $d/other > $cwd/tmp/attr.new
256         getextattr user bacula.secondtest $d/other > $cwd/tmp/attr.new
257       )
258       ;;
259    NetBSD)
260       ( cd $cwd/tmp/bacula-restores/$cwd/build
261         cp /dev/null $cwd/tmp/new
262         getextattr user bacula.test $d/other > $cwd/tmp/attr.new
263         getextattr user bacula.secondtest $d/other > $cwd/tmp/attr.new
264       )
265       ;;
266 esac
267
268 diff -u $cwd/tmp/org $cwd/tmp/new
269 if [ $? -ne 0 ]; then
270    rstat=1
271 fi
272
273 diff $cwd/tmp/attr.org $cwd/tmp/attr.new
274 if [ $? -ne 0 ]; then
275    rstat=1
276 fi
277
278 check_two_logs
279 check_restore_diff
280
281 if [ x$REGRESS_DEBUG != x ]; then
282   rm -rf $d
283 fi
284
285 end_test