Commit 9cb2667d authored by Ramon Nou's avatar Ramon Nou
Browse files

Fix tar extract ownership handling

parent 90092cc5
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -2506,10 +2506,10 @@ chown(const char* path, uid_t owner, gid_t group) throw() {
        std::string resolved;
        if(resolve_gkfs_path(AT_FDCWD, path, resolved) ==
           PathStatus::Internal) {
            LOG(WARNING, "{}() chown is not supported for GekkoFS paths",
            LOG(WARNING,
                "{}() chown on GekkoFS path ignored; returning success",
                __func__);
            errno = ENOTSUP;
            return -1;
            return 0;
        }
        if(errno != 0 && (errno == ENOTDIR || errno == EBADF))
            return -1;
@@ -2521,10 +2521,9 @@ int
fchown(int fd, uid_t owner, gid_t group) throw() {
    gkfs_init_routine_placeholder();
    if(CTX->interception_enabled() && is_gkfs_fd(fd)) {
        LOG(WARNING, "{}() chown is not supported for GekkoFS fd '{}'",
        LOG(WARNING, "{}() chown on GekkoFS fd '{}' ignored; returning success",
            __func__, fd);
        errno = ENOTSUP;
        return -1;
        return 0;
    }
    GKFS_FALLBACK(fchown, fd, owner, group);
}
@@ -2536,10 +2535,10 @@ lchown(const char* path, uid_t owner, gid_t group) throw() {
        std::string resolved;
        if(resolve_gkfs_path(AT_FDCWD, path, resolved) ==
           PathStatus::Internal) {
            LOG(WARNING, "{}() chown is not supported for GekkoFS paths",
            LOG(WARNING,
                "{}() chown on GekkoFS path ignored; returning success",
                __func__);
            errno = ENOTSUP;
            return -1;
            return 0;
        }
        if(errno != 0 && (errno == ENOTDIR || errno == EBADF))
            return -1;
+11 −12
Original line number Diff line number Diff line
@@ -957,9 +957,9 @@ hook_lchown(const char* path, uid_t owner, gid_t group) {

    std::string resolved;
    if(CTX->relativize_path(path, resolved)) {
        LOG(WARNING, "{}() chown is not supported for GekkoFS paths", __func__);
        errno = ENOTSUP;
        return -1;
        LOG(WARNING, "{}() chown on GekkoFS path ignored; returning success",
            __func__);
        return 0;
    }
#ifdef SYS_lchown
    return syscall_no_intercept_wrapper(SYS_lchown, path, owner, group);
@@ -979,9 +979,9 @@ hook_chown(const char* path, uid_t owner, gid_t group) {

    std::string resolved;
    if(CTX->relativize_path(path, resolved)) {
        LOG(WARNING, "{}() chown is not supported for GekkoFS paths", __func__);
        errno = ENOTSUP;
        return -1;
        LOG(WARNING, "{}() chown on GekkoFS path ignored; returning success",
            __func__);
        return 0;
    }
#ifdef SYS_chown
    return syscall_no_intercept_wrapper(SYS_chown, path, owner, group);
@@ -997,10 +997,9 @@ hook_fchown(unsigned int fd, uid_t owner, gid_t group) {
        owner, group);

    if(CTX->file_map()->exist(fd)) {
        LOG(WARNING, "{}() chown is not supported for GekkoFS fd '{}'",
        LOG(WARNING, "{}() chown on GekkoFS fd '{}' ignored; returning success",
            __func__, fd);
        errno = ENOTSUP;
        return -1;
        return 0;
    }
    return syscall_no_intercept_wrapper(SYS_fchown, fd, owner, group);
}
@@ -1025,9 +1024,9 @@ hook_fchownat(int dirfd, const char* cpath, uid_t owner, gid_t group,
                                           resolve_flags, follow);

    if(rstatus == gkfs::preload::RelativizeStatus::internal) {
        LOG(WARNING, "{}() chown is not supported for GekkoFS paths", __func__);
        errno = ENOTSUP;
        return -1;
        LOG(WARNING, "{}() chown on GekkoFS path ignored; returning success",
            __func__);
        return 0;
    }
    return syscall_no_intercept_wrapper(SYS_fchownat, dirfd, cpath, owner,
                                        group, flags);