1#!/bin/ksh -p
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25
26#
27# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
28#
29
30#
31# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
32#
33
34. $STF_SUITE/include/libtest.shlib
35. $STF_SUITE/tests/functional/xattr/xattr_common.kshlib
36
37#
38# DESCRIPTION:
39#
40# Basic applications work with xattrs: cpio cp find mv pax tar
41#
42# STRATEGY:
43#	1. For each application
44#       2. Create an xattr and archive/move/copy/find files with xattr support
45#	3. Also check that when appropriate flag is not used, the xattr
46#	   doesn't get copied
47#
48
49function cleanup {
50
51	log_must rm $TESTDIR/myfile.$$
52}
53
54log_assert "Basic applications work with xattrs: cpio cp find mv pax tar"
55log_onexit cleanup
56
57# Create a file, and set an xattr on it. This file is used in several of the
58# test scenarios below.
59log_must touch $TESTDIR/myfile.$$
60create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd
61
62
63# For the archive applications below (tar, cpio, pax)
64# we create two archives, one with xattrs, one without
65# and try various cpio options extracting the archives
66# with and without xattr support, checking for correct behaviour
67
68
69log_note "Checking cpio"
70log_must touch $TESTDIR/cpio.$$
71create_xattr $TESTDIR/cpio.$$ passwd /etc/passwd
72echo $TESTDIR/cpio.$$ | cpio -o@ > /tmp/xattr.$$.cpio
73echo $TESTDIR/cpio.$$ | cpio -o > /tmp/noxattr.$$.cpio
74
75# we should have no xattr here
76log_must cpio -iu < /tmp/xattr.$$.cpio
77log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
78
79# we should have an xattr here
80log_must cpio -iu@ < /tmp/xattr.$$.cpio
81log_must eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
82
83# we should have no xattr here
84log_must cpio -iu < /tmp/noxattr.$$.cpio
85log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
86
87# we should have no xattr here
88log_must cpio -iu@ < /tmp/noxattr.$$.cpio
89log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
90log_must rm $TESTDIR/cpio.$$ /tmp/xattr.$$.cpio /tmp/noxattr.$$.cpio
91
92
93
94log_note "Checking cp"
95# check that with the right flag, the xattr is preserved
96log_must cp -@ $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
97compare_xattrs $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ passwd
98log_must rm $TESTDIR/myfile2.$$
99
100# without the right flag, there should be no xattr
101log_must cp $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
102log_mustnot eval "runat $TESTDIR/myfile2.$$ ls passwd > /dev/null 2>&1"
103log_must rm $TESTDIR/myfile2.$$
104
105
106
107log_note "Checking find"
108# create a file without xattrs, and check that find -xattr only finds
109# our test file that has an xattr.
110log_must mkdir $TESTDIR/noxattrs
111log_must touch $TESTDIR/noxattrs/no-xattr
112
113find $TESTDIR -xattr | grep myfile.$$
114[[ $? -ne 0 ]] && \
115	log_fail "find -xattr didn't find our file that had an xattr."
116find $TESTDIR -xattr | grep no-xattr
117[[ $? -eq 0 ]] && \
118	log_fail "find -xattr found a file that didn't have an xattr."
119log_must rm -rf $TESTDIR/noxattrs
120
121
122
123log_note "Checking mv"
124# mv doesn't have any flags to preserve/ommit xattrs - they're
125# always moved.
126log_must touch $TESTDIR/mvfile.$$
127create_xattr $TESTDIR/mvfile.$$ passwd /etc/passwd
128log_must mv $TESTDIR/mvfile.$$ $TESTDIR/mvfile2.$$
129verify_xattr $TESTDIR/mvfile2.$$ passwd /etc/passwd
130log_must rm $TESTDIR/mvfile2.$$
131
132
133log_note "Checking pax"
134log_must touch $TESTDIR/pax.$$
135create_xattr $TESTDIR/pax.$$ passwd /etc/passwd
136log_must pax -w -f $TESTDIR/noxattr.pax $TESTDIR/pax.$$
137log_must pax -w@ -f $TESTDIR/xattr.pax $TESTDIR/pax.$$
138log_must rm $TESTDIR/pax.$$
139
140# we should have no xattr here
141log_must pax -r -f $TESTDIR/noxattr.pax
142log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
143log_must rm $TESTDIR/pax.$$
144
145# we should have no xattr here
146log_must pax -r@ -f $TESTDIR/noxattr.pax
147log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
148log_must rm $TESTDIR/pax.$$
149
150
151# we should have an xattr here
152log_must pax -r@ -f $TESTDIR/xattr.pax
153verify_xattr $TESTDIR/pax.$$ passwd /etc/passwd
154log_must rm $TESTDIR/pax.$$
155
156# we should have no xattr here
157log_must pax -r -f $TESTDIR/xattr.pax $TESTDIR
158log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
159log_must rm $TESTDIR/pax.$$ $TESTDIR/noxattr.pax $TESTDIR/xattr.pax
160
161
162log_note "Checking tar"
163log_must touch $TESTDIR/tar.$$
164create_xattr $TESTDIR/tar.$$ passwd /etc/passwd
165
166log_must cd $TESTDIR
167
168log_must tar cf noxattr.tar tar.$$
169log_must tar c@f xattr.tar tar.$$
170log_must rm $TESTDIR/tar.$$
171
172# we should have no xattr here
173log_must tar xf xattr.tar
174log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
175log_must rm $TESTDIR/tar.$$
176
177# we should have an xattr here
178log_must tar x@f xattr.tar
179verify_xattr tar.$$ passwd /etc/passwd
180log_must rm $TESTDIR/tar.$$
181
182# we should have no xattr here
183log_must tar xf $TESTDIR/noxattr.tar
184log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
185log_must rm $TESTDIR/tar.$$
186
187# we should have no xattr here
188log_must tar x@f $TESTDIR/noxattr.tar
189log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
190log_must rm $TESTDIR/tar.$$ $TESTDIR/noxattr.tar $TESTDIR/xattr.tar
191
192
193log_assert "Basic applications work with xattrs: cpio cp find mv pax tar"
194