diff options
-rw-r--r-- | ChangeLog.txt | 6 | ||||
-rw-r--r-- | ports/unix/guts/fchmodat.c | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt index d4fdeec..27a6fcf 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,9 @@ +2014-05-15: + * (seebs) drop flags when calling fchmodat() to appease GNU tar. + +2014-04-24: + * (seebs) extended attribute support + 2014-01-23: * (seebs) mknod wasn't calling mknodat. * (seebs) mkdirat wasn't recording the logical DB mode for directories diff --git a/ports/unix/guts/fchmodat.c b/ports/unix/guts/fchmodat.c index 36a8490..c18fd4c 100644 --- a/ports/unix/guts/fchmodat.c +++ b/ports/unix/guts/fchmodat.c @@ -54,7 +54,12 @@ * specified, we already bailed previously. */ real_chmod(path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode))); #else - real_fchmodat(dirfd, path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)), flags); + /* AT_SYMLINK_NOFOLLOW isn't supported by fchmodat. GNU tar + * tries to use it anyway, figuring it can just retry if that + * fails. But we never fail, so they don't retry. So we drop + * the flag here. + */ + real_fchmodat(dirfd, path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)), 0); #endif /* we ignore a failure from underlying fchmod, because pseudo * may believe you are permitted to change modes that the filesystem |