]> git.seodisparate.com - SimpleArchiver/commitdiff
Fix symlink UID/GID force setting (file v3)
authorStephen Seo <seo.disparate@gmail.com>
Thu, 2 Jan 2025 04:41:39 +0000 (13:41 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Thu, 2 Jan 2025 04:41:39 +0000 (13:41 +0900)
src/archiver.c

index 717c75506744eecbae9bd41306fbe94242155ced..b2e512aede73d655452fc901e3b59891671c4df6 100644 (file)
@@ -4415,18 +4415,27 @@ int simple_archiver_write_v3(FILE *out_f, SDArchiverState *state,
       }
 
       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) {
         return SDAS_FAILED_TO_WRITE;
       }
 
       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) {
         return SDAS_FAILED_TO_WRITE;
       }
 
       u32 = stat_buf.st_uid;
+      if (state->parsed->flags & 0x400) {
+        u32 = state->parsed->uid;
+      }
       char *username = simple_archiver_hash_map_get(
         state->parsed->users_infos.UidToUname,
         &u32,
@@ -4453,6 +4462,9 @@ int simple_archiver_write_v3(FILE *out_f, SDArchiverState *state,
       }
 
       u32 = stat_buf.st_gid;
+      if (state->parsed->flags & 0x800) {
+        u32 = state->parsed->gid;
+      }
       char *groupname = simple_archiver_hash_map_get(
         state->parsed->users_infos.GidToGname,
         &u32,