Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libarchive/tar/test/test_option_U_upper.c
39507 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2010 Tim Kientzle
5
* All rights reserved.
6
*/
7
#include "test.h"
8
9
DEFINE_TEST(test_option_U_upper)
10
{
11
int r;
12
13
assertMakeFile("file1", 0644, "file1");
14
assertMakeDir("d1", 0755);
15
assertMakeFile("d1/file1", 0644, "d1/file1");
16
assertEqualInt(0, systemf("%s -cf archive.tar file1 d1/file1", testprog));
17
18
/*
19
* bsdtar's man page used to claim that -x without -U would
20
* not break hard links. This was and is nonsense. The first
21
* two tests here simply verify that existing hard links get
22
* broken regardless.
23
*/
24
25
/* Test 1: -x without -U */
26
assertMakeDir("test1", 0755);
27
assertChdir("test1");
28
assertMakeFile("file1", 0644, "file1new");
29
assertMakeHardlink("file2", "file1");
30
assertEqualInt(0,
31
systemf("%s -xf ../archive.tar >test.out 2>test.err", testprog));
32
assertFileContents("file1", 5, "file1");
33
assertFileContents("file1new", 8, "file2");
34
assertEmptyFile("test.out");
35
assertEmptyFile("test.err");
36
assertChdir("..");
37
38
39
/* Test 2: -x with -U */
40
assertMakeDir("test2", 0755);
41
assertChdir("test2");
42
assertMakeFile("file1", 0644, "file1new");
43
assertMakeHardlink("file2", "file1");
44
assertEqualInt(0,
45
systemf("%s -xUf ../archive.tar >test.out 2>test.err", testprog));
46
assertFileContents("file1", 5, "file1");
47
assertFileContents("file1new", 8, "file2");
48
assertEmptyFile("test.out");
49
assertEmptyFile("test.err");
50
assertChdir("..");
51
52
/*
53
* -U does make a difference in how bsdtar handles unwanted symlinks,
54
* though. It interacts with -P.
55
*/
56
if (!canSymlink())
57
return;
58
59
/* Test 3: Intermediate dir symlink causes error by default */
60
assertMakeDir("test3", 0755);
61
assertChdir("test3");
62
assertMakeDir("realDir", 0755);
63
assertMakeSymlink("d1", "realDir", 1);
64
r = systemf("%s -xf ../archive.tar d1/file1 >test.out 2>test.err", testprog);
65
assert(r != 0);
66
assertIsSymlink("d1", "realDir", 1);
67
assertFileNotExists("d1/file1");
68
assertEmptyFile("test.out");
69
assertNonEmptyFile("test.err");
70
assertChdir("..");
71
72
/* Test 4: Intermediate dir symlink gets removed with -U */
73
assertMakeDir("test4", 0755);
74
assertChdir("test4");
75
assertMakeDir("realDir", 0755);
76
assertMakeSymlink("d1", "realDir", 1);
77
assertEqualInt(0,
78
systemf("%s -xUf ../archive.tar >test.out 2>test.err", testprog));
79
assertIsDir("d1", -1);
80
assertFileContents("d1/file1", 8, "d1/file1");
81
assertEmptyFile("test.out");
82
assertEmptyFile("test.err");
83
assertChdir("..");
84
85
/* Test 5: Intermediate dir symlink is followed with -P */
86
assertMakeDir("test5", 0755);
87
assertChdir("test5");
88
assertMakeDir("realDir", 0755);
89
assertMakeSymlink("d1", "realDir", 1);
90
assertEqualInt(0,
91
systemf("%s -xPf ../archive.tar d1/file1 >test.out 2>test.err", testprog));
92
assertIsSymlink("d1", "realDir", 1);
93
assertFileContents("d1/file1", 8, "d1/file1");
94
assertEmptyFile("test.out");
95
assertEmptyFile("test.err");
96
assertChdir("..");
97
98
/* Test 6: Intermediate dir symlink is followed with -PU */
99
assertMakeDir("test6", 0755);
100
assertChdir("test6");
101
assertMakeDir("realDir", 0755);
102
assertMakeSymlink("d1", "realDir", 1);
103
assertEqualInt(0,
104
systemf("%s -xPUf ../archive.tar d1/file1 >test.out 2>test.err", testprog));
105
assertIsSymlink("d1", "realDir", 1);
106
assertFileContents("d1/file1", 8, "d1/file1");
107
assertEmptyFile("test.out");
108
assertEmptyFile("test.err");
109
assertChdir("..");
110
111
/* Test 7: Final file symlink replaced by default */
112
assertMakeDir("test7", 0755);
113
assertChdir("test7");
114
assertMakeDir("d1", 0755);
115
assertMakeFile("d1/realfile1", 0644, "realfile1");
116
assertMakeSymlink("d1/file1", "d1/realfile1", 0);
117
assertEqualInt(0,
118
systemf("%s -xf ../archive.tar d1/file1 >test.out 2>test.err", testprog));
119
assertIsReg("d1/file1", umasked(0644));
120
assertFileContents("d1/file1", 8, "d1/file1");
121
assertFileContents("realfile1", 9, "d1/realfile1");
122
assertEmptyFile("test.out");
123
assertEmptyFile("test.err");
124
assertChdir("..");
125
126
/* Test 8: Final file symlink replaced with -PU */
127
assertMakeDir("test8", 0755);
128
assertChdir("test8");
129
assertMakeDir("d1", 0755);
130
assertMakeFile("d1/realfile1", 0644, "realfile1");
131
assertMakeSymlink("d1/file1", "d1/realfile1", 0);
132
assertEqualInt(0,
133
systemf("%s -xPUf ../archive.tar d1/file1 >test.out 2>test.err", testprog));
134
assertIsReg("d1/file1", umasked(0644));
135
assertFileContents("d1/file1", 8, "d1/file1");
136
assertFileContents("realfile1", 9, "d1/realfile1");
137
assertEmptyFile("test.out");
138
assertEmptyFile("test.err");
139
assertChdir("..");
140
}
141
142