From d0d138a6e7c0ac6cef313970f94a304f5c743eeb Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Thu, 2 Jan 2025 13:36:50 +0900 Subject: [PATCH] Fix force-setting UID/GID for stored directories --- src/archiver.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/archiver.c b/src/archiver.c index d62c087..717c755 100644 --- a/src/archiver.c +++ b/src/archiver.c @@ -1920,6 +1920,9 @@ int internal_write_dir_entries(void *data, void *ud) { } uint32_t u32 = stat_buf.st_uid; + if (state->parsed->flags & 0x400) { + u32 = state->parsed->uid; + } simple_archiver_helper_32_bit_be(&u32); if (fwrite(&u32, 4, 1, out_f) != 1) { @@ -1928,6 +1931,9 @@ int internal_write_dir_entries(void *data, void *ud) { } u32 = stat_buf.st_gid; + if (state->parsed->flags & 0x800) { + u32 = state->parsed->gid; + } simple_archiver_helper_32_bit_be(&u32); if (fwrite(&u32, 4, 1, out_f) != 1) { fprintf(stderr, "ERROR: Failed to write GID for \"%s\"!\n", dir); @@ -1936,6 +1942,9 @@ int internal_write_dir_entries(void *data, void *ud) { if (state->parsed->write_version == 3) { u32 = stat_buf.st_uid; + if (state->parsed->flags & 0x400) { + u32 = state->parsed->uid; + } const char *username = simple_archiver_hash_map_get( state->parsed->users_infos.UidToUname, &u32, sizeof(uint32_t)); if (username) { @@ -1967,6 +1976,9 @@ int internal_write_dir_entries(void *data, void *ud) { } u32 = stat_buf.st_gid; + if (state->parsed->flags & 0x800) { + u32 = state->parsed->gid; + } const char *groupname = simple_archiver_hash_map_get( state->parsed->users_infos.GidToGname, &u32, sizeof(uint32_t)); if (groupname) { -- 2.49.0