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