Fix cp permissions when copying symlink contents, and add test.
This commit is contained in:
parent
bf76b49e29
commit
c68fa66380
@ -89,6 +89,13 @@ testing "-r dir1/* dir2" \
|
||||
"cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" ""
|
||||
rm -rf one dir dir2
|
||||
|
||||
touch walrus
|
||||
chmod 644 walrus
|
||||
ln -s walrus woot
|
||||
|
||||
testing "symlink dest permissions" "cp woot carpenter && stat -c %A carpenter" \
|
||||
"-rw-r--r--\n" "" ""
|
||||
|
||||
# cp -r ../source destdir
|
||||
# cp -r one/two/three missing
|
||||
# cp -r one/two/three two
|
||||
|
@ -268,6 +268,8 @@ static int cp_node(struct dirtree *try)
|
||||
catch = try->name;
|
||||
break;
|
||||
}
|
||||
// When copying contents use symlink target's attributes
|
||||
if (S_ISLNK(try->st.st_mode)) fstat(fdin, &try->st);
|
||||
fdout = openat(cfd, catch, O_RDWR|O_CREAT|O_TRUNC, try->st.st_mode);
|
||||
if (fdout >= 0) {
|
||||
xsendfile(fdin, fdout);
|
||||
|
Loading…
Reference in New Issue
Block a user