tests: adjust memory limits in head-c.sh
[coreutils.git] / tests / cp / no-ctx.sh
blob44f51ea5aac3447a4658199cb67ae45c7643c20a
1 #!/bin/sh
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
23 print_ver_ cp
24 require_gcc_shared_
25 require_selinux_
27 # Replace each getfilecon and lgetfilecon call with a call to these stubs.
28 cat > k.c <<'EOF' || framework_failure_
29 #include <stdio.h>
30 #include <selinux/selinux.h>
31 #include <errno.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"));
38 errno=ENODATA;
39 return -1;
42 int lgetfilecon (const char *path, char **con)
43 { return getfilecon (path, con); }
44 EOF
46 # Then compile/link it:
47 gcc_shared_ k.c k.so \
48 || skip_ 'failed to build SELinux shared library'
50 touch file_src
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'
65 Exit $fail