1*96c8483aSYuri Pankov#!/bin/ksh -p
2*96c8483aSYuri Pankov#
3*96c8483aSYuri Pankov# CDDL HEADER START
4*96c8483aSYuri Pankov#
5*96c8483aSYuri Pankov# The contents of this file are subject to the terms of the
6*96c8483aSYuri Pankov# Common Development and Distribution License (the "License").
7*96c8483aSYuri Pankov# You may not use this file except in compliance with the License.
8*96c8483aSYuri Pankov#
9*96c8483aSYuri Pankov# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*96c8483aSYuri Pankov# or http://www.opensolaris.org/os/licensing.
11*96c8483aSYuri Pankov# See the License for the specific language governing permissions
12*96c8483aSYuri Pankov# and limitations under the License.
13*96c8483aSYuri Pankov#
14*96c8483aSYuri Pankov# When distributing Covered Code, include this CDDL HEADER in each
15*96c8483aSYuri Pankov# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*96c8483aSYuri Pankov# If applicable, add the following below this CDDL HEADER, with the
17*96c8483aSYuri Pankov# fields enclosed by brackets "[]" replaced with your own identifying
18*96c8483aSYuri Pankov# information: Portions Copyright [yyyy] [name of copyright owner]
19*96c8483aSYuri Pankov#
20*96c8483aSYuri Pankov# CDDL HEADER END
21*96c8483aSYuri Pankov#
22*96c8483aSYuri Pankov
23*96c8483aSYuri Pankov#
24*96c8483aSYuri Pankov# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
25*96c8483aSYuri Pankov#
26*96c8483aSYuri Pankov
27*96c8483aSYuri Pankov#
28*96c8483aSYuri Pankov# ID:  xattr_008
29*96c8483aSYuri Pankov#
30*96c8483aSYuri Pankov# DESCRIPTION:
31*96c8483aSYuri Pankov# Verify basic applications work with xattrs: cpio cp find mv pax tar
32*96c8483aSYuri Pankov#
33*96c8483aSYuri Pankov# STRATEGY:
34*96c8483aSYuri Pankov#	1. For each application
35*96c8483aSYuri Pankov#       2. Create an xattr and archive/move/copy/find files with xattr support
36*96c8483aSYuri Pankov#	3. Also check that when appropriate flag is not used, the xattr
37*96c8483aSYuri Pankov#	   doesn't get copied
38*96c8483aSYuri Pankov#
39*96c8483aSYuri Pankov
40*96c8483aSYuri Pankov. $STF_SUITE/include/libtest.ksh
41*96c8483aSYuri Pankov
42*96c8483aSYuri Pankovtc_id=xattr_008
43*96c8483aSYuri Pankovtc_desc="Verify basic applications work with xattrs: cpio cp find mv pax tar"
44*96c8483aSYuri Pankovprint_test_case $tc_id - $tc_desc
45*96c8483aSYuri Pankov
46*96c8483aSYuri Pankovif [[ $STC_CIFS_CLIENT_DEBUG == 1 ]] || \
47*96c8483aSYuri Pankov	[[ *:${STC_CIFS_CLIENT_DEBUG}:* == *:$tc_id:* ]]; then
48*96c8483aSYuri Pankov    set -x
49*96c8483aSYuri Pankovfi
50*96c8483aSYuri Pankov
51*96c8483aSYuri Pankovserver=$(server_name) || return
52*96c8483aSYuri Pankov
53*96c8483aSYuri PankovCDIR=$(pwd)
54*96c8483aSYuri Pankovtestdir_init $TDIR
55*96c8483aSYuri Pankovsmbmount_clean $TMNT
56*96c8483aSYuri Pankovsmbmount_init $TMNT
57*96c8483aSYuri Pankov
58*96c8483aSYuri Pankovcmd="mount -F smbfs //$TUSER:$TPASS@$server/public $TMNT"
59*96c8483aSYuri Pankovcti_execute -i '' FAIL $cmd
60*96c8483aSYuri Pankovif [[ $? != 0 ]]; then
61*96c8483aSYuri Pankov	cti_fail "FAIL: smbmount can't mount the public share unexpectedly"
62*96c8483aSYuri Pankov	return
63*96c8483aSYuri Pankovelse
64*96c8483aSYuri Pankov	cti_report "PASS: smbmount can mount the public share as expected"
65*96c8483aSYuri Pankovfi
66*96c8483aSYuri Pankov
67*96c8483aSYuri Pankovsmbmount_getmntopts $TMNT |grep /xattr/ >/dev/null
68*96c8483aSYuri Pankovif [[ $? != 0 ]]; then
69*96c8483aSYuri Pankov	smbmount_clean $TMNT
70*96c8483aSYuri Pankov	cti_unsupported "UNSUPPORTED (no xattr in this mount)"
71*96c8483aSYuri Pankov	return
72*96c8483aSYuri Pankovfi
73*96c8483aSYuri Pankov
74*96c8483aSYuri Pankov# Create a file, and set an xattr on it. This file is used in several of the
75*96c8483aSYuri Pankov# test scenarios below.
76*96c8483aSYuri Pankov
77*96c8483aSYuri Pankovcti_execute_cmd "touch $TMNT/test_file"
78*96c8483aSYuri Pankovcreate_xattr $TMNT/test_file passwd /etc/passwd
79*96c8483aSYuri Pankov
80*96c8483aSYuri Pankov# For the archive applications below (tar, cpio, pax)
81*96c8483aSYuri Pankov# we create two archives, one with xattrs, one without
82*96c8483aSYuri Pankov# and try various cpio options extracting the archives
83*96c8483aSYuri Pankov# with and without xattr support, checking for correct behaviour
84*96c8483aSYuri Pankov
85*96c8483aSYuri Pankovcpio_xattr=$CDIR/xattr.cpio
86*96c8483aSYuri Pankovcpio_noxattr=$CDIR/noxattr.cpio
87*96c8483aSYuri Pankov
88*96c8483aSYuri Pankovcti_report "Checking cpio"
89*96c8483aSYuri Pankovcti_execute_cmd "touch $TMNT/cpio_test"
90*96c8483aSYuri Pankovcreate_xattr $TMNT/cpio_test passwd /etc/passwd
91*96c8483aSYuri Pankov
92*96c8483aSYuri Pankovcti_execute_cmd "echo cpio_test| (cd $TMNT; cpio -oc@ -O $cpio_xattr)"
93*96c8483aSYuri Pankovcti_execute_cmd "echo cpio_test| (cd $TMNT; cpio -oc -O $cpio_noxattr)"
94*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/cpio_test"
95*96c8483aSYuri Pankov
96*96c8483aSYuri Pankov# we should have no xattr here
97*96c8483aSYuri Pankov
98*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cpio -iu -I $cpio_xattr)"
99*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/cpio_test cat passwd"
100*96c8483aSYuri Pankovif [[ $? == 0 ]]
101*96c8483aSYuri Pankovthen
102*96c8483aSYuri Pankov	cti_fail "Fail: we have xattr here unexpectedly"
103*96c8483aSYuri Pankov	return
104*96c8483aSYuri Pankovfi
105*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/cpio_test"
106*96c8483aSYuri Pankov
107*96c8483aSYuri Pankov# we should have an xattr here
108*96c8483aSYuri Pankov
109*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cpio -iu@ -I $cpio_xattr)"
110*96c8483aSYuri Pankovverify_xattr $TMNT/cpio_test passwd /etc/passwd
111*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/cpio_test"
112*96c8483aSYuri Pankov
113*96c8483aSYuri Pankov#do the same for the second time
114*96c8483aSYuri Pankov
115*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cpio -iu@ -I $cpio_xattr)"
116*96c8483aSYuri Pankovverify_xattr $TMNT/cpio_test passwd /etc/passwd
117*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/cpio_test"
118*96c8483aSYuri Pankov
119*96c8483aSYuri Pankov# we should have no xattr here
120*96c8483aSYuri Pankov
121*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cpio -iu -I $cpio_noxattr)"
122*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/cpio_test cat passwd"
123*96c8483aSYuri Pankovif [[ $? == 0 ]]
124*96c8483aSYuri Pankovthen
125*96c8483aSYuri Pankov	cti_fail "Fail: we have xattr here unexpectedly"
126*96c8483aSYuri Pankov	return
127*96c8483aSYuri Pankovfi
128*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/cpio_test"
129*96c8483aSYuri Pankov
130*96c8483aSYuri Pankov# we should have no xattr here
131*96c8483aSYuri Pankov
132*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cpio -iu@ -I $cpio_noxattr)"
133*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/cpio_test cat passwd"
134*96c8483aSYuri Pankovif [[ $? == 0 ]]
135*96c8483aSYuri Pankovthen
136*96c8483aSYuri Pankov	cti_fail "Fail: we have xattr here unexpectedly"
137*96c8483aSYuri Pankov	return
138*96c8483aSYuri Pankovfi
139*96c8483aSYuri Pankov
140*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/cpio_test"
141*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $cpio_xattr"
142*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $cpio_noxattr"
143*96c8483aSYuri Pankov
144*96c8483aSYuri Pankovcti_report "Checking cp"
145*96c8483aSYuri Pankov# check that with the right flag, the xattr is preserved
146*96c8483aSYuri Pankov
147*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cp -@ test_file test_file1)"
148*96c8483aSYuri Pankovcompare_xattrs $TMNT/test_file $TMNT/test_file1 passwd
149*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/test_file1"
150*96c8483aSYuri Pankov
151*96c8483aSYuri Pankov# without the right flag, there should be no xattr (ls should fail)
152*96c8483aSYuri Pankov
153*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; cp test_file test_file1)"
154*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/cpio_test ls passwd"
155*96c8483aSYuri Pankovif [[ $? == 0 ]]
156*96c8483aSYuri Pankovthen
157*96c8483aSYuri Pankov	cti_fail "Fail: we have xattr here unexpectedly"
158*96c8483aSYuri Pankov	return
159*96c8483aSYuri Pankovfi
160*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/test_file1"
161*96c8483aSYuri Pankov
162*96c8483aSYuri Pankov# create a file without xattrs, and check that find -xattr only finds
163*96c8483aSYuri Pankov# our test file that has an xattr.
164*96c8483aSYuri Pankov
165*96c8483aSYuri Pankovcti_report "Checking find"
166*96c8483aSYuri Pankovcti_execute_cmd "mkdir $TMNT/noxattrs"
167*96c8483aSYuri Pankovcti_execute_cmd "touch $TMNT/noxattrs/no-xattr"
168*96c8483aSYuri Pankov
169*96c8483aSYuri Pankovcti_execute_cmd "find $TMNT -xattr | grep test_file"
170*96c8483aSYuri Pankovif [ $? -ne 0 ]
171*96c8483aSYuri Pankovthen
172*96c8483aSYuri Pankov	cti_fail "find -xattr didn't find our file that had an xattr unexpectedly"
173*96c8483aSYuri Pankovfi
174*96c8483aSYuri Pankovcti_execute_cmd "find $TMNT -xattr | grep no-xattr"
175*96c8483aSYuri Pankovif [ $? -eq 0 ]
176*96c8483aSYuri Pankovthen
177*96c8483aSYuri Pankov	cti_fail "find -xattr found a file that didn't have an xattr unexpectedly"
178*96c8483aSYuri Pankovfi
179*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/noxattrs"
180*96c8483aSYuri Pankov
181*96c8483aSYuri Pankov# mv doesn't have any flags to preserve/ommit xattrs - they're
182*96c8483aSYuri Pankov# always moved.
183*96c8483aSYuri Pankov
184*96c8483aSYuri Pankovcti_report "Checking mv"
185*96c8483aSYuri Pankovcti_execute_cmd "touch $TMNT/mvtest"
186*96c8483aSYuri Pankovcreate_xattr $TMNT/mvtest passwd /etc/passwd
187*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; mv mvtest mvtest2)"
188*96c8483aSYuri Pankovverify_xattr $TMNT/mvtest2 passwd /etc/passwd
189*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/mvtest"
190*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/mvtest2"
191*96c8483aSYuri Pankov
192*96c8483aSYuri Pankovpax_xattr=$CDIR/xattr.pax
193*96c8483aSYuri Pankovpax_noxattr=$CDIR/noxattr.pax
194*96c8483aSYuri Pankov
195*96c8483aSYuri Pankovcti_report "Checking pax"
196*96c8483aSYuri Pankovcti_execute_cmd "touch $TMNT/pax_test"
197*96c8483aSYuri Pankovcreate_xattr $TMNT/pax_test passwd /etc/passwd
198*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; pax -w -f $pax_noxattr pax_test)"
199*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; pax -w@ -f $pax_xattr pax_test)"
200*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/pax_test"
201*96c8483aSYuri Pankov
202*96c8483aSYuri Pankov# we should have no xattr here
203*96c8483aSYuri Pankov
204*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; pax -r -f $pax_noxattr)"
205*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/pax_test cat passwd"
206*96c8483aSYuri Pankovif [[ $? == 0 ]]; then
207*96c8483aSYuri Pankov	cti_fail "FAIL: we have xattr here unexpectedly"
208*96c8483aSYuri Pankov	return
209*96c8483aSYuri Pankovelse
210*96c8483aSYuri Pankov	cti_report "PASS: we should have no xattr here as expected"
211*96c8483aSYuri Pankovfi
212*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/pax_test"
213*96c8483aSYuri Pankov
214*96c8483aSYuri Pankov# we should have no xattr here
215*96c8483aSYuri Pankov
216*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; pax -r@ -f $pax_noxattr)"
217*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/pax_test cat passwd"
218*96c8483aSYuri Pankovif [[ $? == 0 ]]; then
219*96c8483aSYuri Pankov	cti_fail "FAIL: we have xattr here unexpectedly"
220*96c8483aSYuri Pankov	return
221*96c8483aSYuri Pankovelse
222*96c8483aSYuri Pankov	cti_report "PASS: we should have no xattr here as expected"
223*96c8483aSYuri Pankovfi
224*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/pax_test"
225*96c8483aSYuri Pankov
226*96c8483aSYuri Pankov# we should have an xattr here
227*96c8483aSYuri Pankov
228*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; pax -r@ -f $pax_xattr)"
229*96c8483aSYuri Pankovverify_xattr $TMNT/pax_test passwd /etc/passwd
230*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/pax_test"
231*96c8483aSYuri Pankov
232*96c8483aSYuri Pankov# we should have no xattr here
233*96c8483aSYuri Pankov
234*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; pax -r -f $pax_xattr)"
235*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/pax_test cat passwd"
236*96c8483aSYuri Pankovif [[ $? == 0 ]]; then
237*96c8483aSYuri Pankov	cti_fail "FAIL: we have xattr here unexpectedly"
238*96c8483aSYuri Pankov	return
239*96c8483aSYuri Pankovelse
240*96c8483aSYuri Pankov	cti_report "PASS: we should have no xattr here as expected"
241*96c8483aSYuri Pankovfi
242*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/pax_test"
243*96c8483aSYuri Pankovcti_execute_cmd "rm $pax_noxattr"
244*96c8483aSYuri Pankovcti_execute_cmd "rm $pax_xattr"
245*96c8483aSYuri Pankov
246*96c8483aSYuri Pankovtar_xattr=$CDIR/xattr.tar
247*96c8483aSYuri Pankovtar_noxattr=$CDIR/noxattr.tar
248*96c8483aSYuri Pankov
249*96c8483aSYuri Pankovcti_report "Checking tar"
250*96c8483aSYuri Pankovcti_execute_cmd "touch $TMNT/tar_test"
251*96c8483aSYuri Pankovcreate_xattr $TMNT/tar_test passwd /etc/passwd
252*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; tar cf $tar_noxattr tar_test)"
253*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; tar c@f $tar_xattr tar_test)"
254*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/tar_test"
255*96c8483aSYuri Pankov
256*96c8483aSYuri Pankov# we should have no xattr here
257*96c8483aSYuri Pankov
258*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; tar xf $tar_xattr)"
259*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/tar_test cat passwd"
260*96c8483aSYuri Pankovif [[ $? == 0 ]]; then
261*96c8483aSYuri Pankov	cti_fail "FAIL: we have xattr here unexpectedly"
262*96c8483aSYuri Pankov	return
263*96c8483aSYuri Pankovelse
264*96c8483aSYuri Pankov	cti_report "PASS: we should have no xattr here as expected"
265*96c8483aSYuri Pankovfi
266*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/tar_test"
267*96c8483aSYuri Pankov
268*96c8483aSYuri Pankov# we should have an xattr here
269*96c8483aSYuri Pankov
270*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; tar x@f $tar_xattr)"
271*96c8483aSYuri Pankovverify_xattr $TMNT/tar_test passwd /etc/passwd
272*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/tar_test"
273*96c8483aSYuri Pankov
274*96c8483aSYuri Pankov# we should have no xattr here
275*96c8483aSYuri Pankov
276*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; tar xf $tar_noxattr)"
277*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/tar_test cat passwd"
278*96c8483aSYuri Pankovif [[ $? == 0 ]]; then
279*96c8483aSYuri Pankov	cti_fail "FAIL: we have xattr here unexpectedly"
280*96c8483aSYuri Pankov	return
281*96c8483aSYuri Pankovelse
282*96c8483aSYuri Pankov	cti_report "PASS: we should have no xattr here as expected"
283*96c8483aSYuri Pankovfi
284*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/tar_test"
285*96c8483aSYuri Pankov
286*96c8483aSYuri Pankov# we should have no xattr here
287*96c8483aSYuri Pankov
288*96c8483aSYuri Pankovcti_execute_cmd "(cd $TMNT; tar x@f $tar_noxattr)"
289*96c8483aSYuri Pankovcti_execute_cmd "runat $TMNT/tar_test cat passwd"
290*96c8483aSYuri Pankovif [[ $? == 0 ]]; then
291*96c8483aSYuri Pankov	cti_fail "FAIL: we have xattr here unexpectedly"
292*96c8483aSYuri Pankov	return
293*96c8483aSYuri Pankovelse
294*96c8483aSYuri Pankov	cti_report "PASS: we should have no xattr here as expected"
295*96c8483aSYuri Pankovfi
296*96c8483aSYuri Pankovcti_execute_cmd "rm $TMNT/tar_test"
297*96c8483aSYuri Pankovcti_execute_cmd "rm $tar_noxattr"
298*96c8483aSYuri Pankovcti_execute_cmd "rm $tar_xattr"
299*96c8483aSYuri Pankov
300*96c8483aSYuri Pankovcti_execute_cmd "rm -rf $TMNT/*"
301*96c8483aSYuri Pankov
302*96c8483aSYuri Pankovsmbmount_clean $TMNT
303*96c8483aSYuri Pankovcti_pass "$tc_id: PASS"
304