2 # Ensure we handle file systems returning no SELinux context,
3 # which triggered a segmentation fault in coreutils-8.22.
4 # This test is skipped on systems that lack LD_PRELOAD support; that's fine.
5 # Similarly, on a system that lacks lgetfilecon altogether, skipping it is fine.
7 # Copyright (C) 2014-2016 Free Software Foundation, Inc.
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
22 .
"${srcdir=.}/tests/init.sh"; path_prepend_ .
/src
27 # Replace each getfilecon and lgetfilecon call with a call to these stubs.
28 cat > k.c
<<'EOF' || framework_failure_
30 #include <selinux/selinux.h>
33 int getfilecon (const char *path, char **con)
35 /* Leave a marker so we can identify if the function was intercepted. */
36 fclose(fopen("preloaded", "w"));
42 int lgetfilecon (const char *path, char **con)
43 { return getfilecon (path, con); }
46 # Then compile/link it:
47 gcc_shared_ k.c k.so \
48 || skip_
'failed to build SELinux shared library'
52 # New file with SELinux context optionally included
53 LD_PRELOAD
=$LD_PRELOAD:.
/k.so
cp -a file_src file_dst || fail
=1
55 # Existing file with SELinux context optionally included
56 LD_PRELOAD
=$LD_PRELOAD:.
/k.so
cp -a file_src file_dst || fail
=1
58 # ENODATA should give an immediate error when required to preserve ctx
59 # This is debatable, and maybe we should not fail when no context available?
60 ( export LD_PRELOAD
=$LD_PRELOAD:.
/k.so
61 returns_
1 cp --preserve=context file_src file_dst
) || fail
=1
63 test -e preloaded || skip_
'LD_PRELOAD interception failed'