Fix cp permissions when copying symlink contents, and add test.

This commit is contained in:
Rob Landley 2019-01-12 15:32:14 -06:00
parent bf76b49e29
commit c68fa66380
2 changed files with 9 additions and 0 deletions

View File

@ -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

View File

@ -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);