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