uint32_t u32 = stat_buf.st_uid;
if (state->parsed->flags & 0x400) {
u32 = state->parsed->uid;
+ } else {
+ uint32_t mapped_uid;
+ if (simple_archiver_get_uid_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ u32,
+ &mapped_uid,
+ NULL) == 0) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped UID %" PRIu32 " to %" PRIu32 "\n",
+ // u32,
+ // mapped_uid);
+ u32 = mapped_uid;
+ }
}
simple_archiver_helper_32_bit_be(&u32);
u32 = stat_buf.st_gid;
if (state->parsed->flags & 0x800) {
u32 = state->parsed->gid;
+ } else {
+ uint32_t mapped_gid;
+ if (simple_archiver_get_gid_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ u32,
+ &mapped_gid,
+ NULL) == 0) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped GID %" PRIu32 " to %" PRIu32 "\n",
+ // u32,
+ // mapped_gid);
+ u32 = mapped_gid;
+ }
}
simple_archiver_helper_32_bit_be(&u32);
if (fwrite(&u32, 4, 1, out_f) != 1) {
if (state->parsed->flags & 0x400) {
u32 = state->parsed->uid;
}
+ __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
+ char *to_cleanup_user = NULL;
const char *username = simple_archiver_hash_map_get(
state->parsed->users_infos.UidToUname, &u32, sizeof(uint32_t));
if (username) {
+ if ((state->parsed->flags & 0x400) == 0) {
+ uint32_t out_uid;
+ const char *mapped_user = NULL;
+ if (simple_archiver_get_user_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ username,
+ &out_uid,
+ &mapped_user) == 0
+ && mapped_user) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped User %s to %s\n",
+ // username,
+ // mapped_user);
+ username = mapped_user;
+ to_cleanup_user = (char *)mapped_user;
+ }
+ }
unsigned long length = strlen(username);
if (length > 0xFFFF) {
fprintf(stderr, "ERROR: Username is too long for dir \"%s\"!\n", dir);
if (state->parsed->flags & 0x800) {
u32 = state->parsed->gid;
}
+ __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
+ char *to_cleanup_group = NULL;
const char *groupname = simple_archiver_hash_map_get(
state->parsed->users_infos.GidToGname, &u32, sizeof(uint32_t));
if (groupname) {
+ if ((state->parsed->flags & 0x800) == 0) {
+ uint32_t out_gid;
+ const char *mapped_group = NULL;
+ if (simple_archiver_get_group_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ groupname,
+ &out_gid,
+ &mapped_group) == 0
+ && mapped_group) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped Group %s to %s\n",
+ // groupname,
+ // mapped_group);
+ groupname = mapped_group;
+ to_cleanup_group = (char *)mapped_group;
+ }
+ }
unsigned long length = strlen(groupname);
if (length > 0xFFFF) {
fprintf(stderr, "ERROR: Groupname is too long for dir \"%s\"!\n", dir);
u32 = stat_buf.st_uid;
if (state->parsed->flags & 0x400) {
u32 = state->parsed->uid;
+ } else {
+ uint32_t mapped_uid;
+ if (simple_archiver_get_uid_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ u32,
+ &mapped_uid,
+ NULL) == 0) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped UID %" PRIu32 " to %" PRIu32" for %s\n",
+ // u32,
+ // mapped_uid,
+ // (const char *)node->data);
+ u32 = mapped_uid;
+ }
}
simple_archiver_helper_32_bit_be(&u32);
if (fwrite(&u32, 4, 1, out_f) != 1) {
u32 = stat_buf.st_gid;
if (state->parsed->flags & 0x800) {
u32 = state->parsed->gid;
+ } else {
+ uint32_t mapped_gid;
+ if (simple_archiver_get_gid_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ u32,
+ &mapped_gid,
+ NULL) == 0) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped GID %" PRIu32 " to %" PRIu32 " for %s\n",
+ // u32,
+ // mapped_gid,
+ // (const char *)node->data);
+ u32 = mapped_gid;
+ }
}
simple_archiver_helper_32_bit_be(&u32);
if (fwrite(&u32, 4, 1, out_f) != 1) {
if (state->parsed->flags & 0x400) {
u32 = state->parsed->uid;
}
- char *username = simple_archiver_hash_map_get(
+ __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
+ char *to_cleanup_user = NULL;
+ const char *username = simple_archiver_hash_map_get(
state->parsed->users_infos.UidToUname,
&u32,
sizeof(uint32_t));
if (username) {
+ if ((state->parsed->flags & 0x400) == 0) {
+ uint32_t out_uid;
+ const char *mapped_user = NULL;
+ if (simple_archiver_get_user_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ username,
+ &out_uid,
+ &mapped_user) == 0
+ && mapped_user) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped User %s to %s for %s\n",
+ // username,
+ // mapped_user,
+ // (const char *)node->data);
+ username = mapped_user;
+ to_cleanup_user = (char *)mapped_user;
+ }
+ }
unsigned long name_length = strlen(username);
if (name_length > 0xFFFF) {
return SDAS_INTERNAL_ERROR;
if (state->parsed->flags & 0x800) {
u32 = state->parsed->gid;
}
- char *groupname = simple_archiver_hash_map_get(
+ __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
+ char *to_cleanup_group = NULL;
+ const char *groupname = simple_archiver_hash_map_get(
state->parsed->users_infos.GidToGname,
&u32,
sizeof(uint32_t));
if (groupname) {
+ if ((state->parsed->flags & 0x800) == 0) {
+ uint32_t out_gid;
+ const char *mapped_group = NULL;
+ if (simple_archiver_get_group_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ groupname,
+ &out_gid,
+ &mapped_group) == 0
+ && mapped_group) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped Group %s to %s for %s\n",
+ // groupname,
+ // mapped_group,
+ // (const char *)node->data);
+ groupname = mapped_group;
+ to_cleanup_group = (char *)mapped_group;
+ }
+ }
unsigned long group_length = strlen(groupname);
if (group_length > 0xFFFF) {
return SDAS_INTERNAL_ERROR;
// Forced UID/GID is already handled by "symlinks_and_files_from_files".
u32 = file_info_struct->uid;
+ if ((state->parsed->flags & 0x400) == 0) {
+ uint32_t mapped_uid;
+ if (simple_archiver_get_uid_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ u32,
+ &mapped_uid,
+ NULL) == 0) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped UID %" PRIu32 " to %" PRIu32" for %s\n",
+ // u32,
+ // mapped_uid,
+ // file_info_struct->filename);
+ u32 = mapped_uid;
+ }
+ }
simple_archiver_helper_32_bit_be(&u32);
if (fwrite(&u32, 4, 1, out_f) != 1) {
return SDAS_FAILED_TO_WRITE;
}
u32 = file_info_struct->gid;
+ if ((state->parsed->flags & 0x800) == 0) {
+ uint32_t mapped_gid;
+ if(simple_archiver_get_gid_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ u32,
+ &mapped_gid,
+ NULL) == 0) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped GID %" PRIu32 " to %" PRIu32" for %s\n",
+ // u32,
+ // mapped_gid,
+ // file_info_struct->filename);
+ u32 = mapped_gid;
+ }
+ }
simple_archiver_helper_32_bit_be(&u32);
if (fwrite(&u32, 4, 1, out_f) != 1) {
return SDAS_FAILED_TO_WRITE;
}
u32 = file_info_struct->uid;
- char *username = simple_archiver_hash_map_get(
+ __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
+ char *to_cleanup_user = NULL;
+ const char *username = simple_archiver_hash_map_get(
state->parsed->users_infos.UidToUname, &u32, sizeof(uint32_t));
if (username) {
+ if ((state->parsed->flags & 0x400) == 0) {
+ uint32_t out_uid;
+ const char *mapped_username = NULL;
+ if (simple_archiver_get_user_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ username,
+ &out_uid,
+ &mapped_username) == 0
+ && mapped_username) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped User from %s to %s for %s\n",
+ // username,
+ // mapped_username,
+ // file_info_struct->filename);
+ username = mapped_username;
+ to_cleanup_user = (char *)mapped_username;
+ }
+ }
unsigned long name_length = strlen(username);
if (name_length > 0xFFFF) {
return SDAS_INTERNAL_ERROR;
}
u32 = file_info_struct->gid;
- char *groupname = simple_archiver_hash_map_get(
+ __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
+ char *to_cleanup_group = NULL;
+ const char *groupname = simple_archiver_hash_map_get(
state->parsed->users_infos.GidToGname, &u32, sizeof(uint32_t));
if (groupname) {
+ if ((state->parsed->flags & 0x800) == 0) {
+ uint32_t out_gid;
+ const char *mapped_group = NULL;
+ if (simple_archiver_get_group_mapping(state->parsed->mappings,
+ state->parsed->users_infos,
+ groupname,
+ &out_gid,
+ &mapped_group) == 0
+ && mapped_group) {
+ //fprintf(stderr,
+ // "NOTICE: Mapped Group %s to %s for %s\n",
+ // groupname,
+ // mapped_group,
+ // file_info_struct->filename);
+ groupname = mapped_group;
+ to_cleanup_group = (char *)mapped_group;
+ }
+ }
unsigned long group_length = strlen(groupname);
if (group_length > 0xFFFF) {
return SDAS_INTERNAL_ERROR;