[pacman-dev] [PATCH] libalpm: Use archive_read_extract2
Allan McRae
allan at archlinux.org
Tue Apr 4 02:00:35 UTC 2017
On 07/03/17 06:15, Armin K wrote:
> archive_read_extract() forces resolution of uid/gid to names
> when extracting the tarball. This can lead to wrong file
> ownership when using pacman with -r option and when uid/gid
> differ in the host and in the chroot.
>
> archive_read_extract2() uses uid's and gid's only. See also:
>
> https://lists.archlinux.org/pipermail/pacman-dev/2017-March/021912.html
>
> Signed-off-by: Armin K <krejzi at email.com>
> ---
@Andrew: Is this patch OK to go in until you finish your work on
group/user handling?
A
> lib/libalpm/add.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
> index c5bed817..0beed01c 100644
> --- a/lib/libalpm/add.c
> +++ b/lib/libalpm/add.c
> @@ -110,6 +110,7 @@ static int perform_extraction(alpm_handle_t *handle, struct archive *archive,
> struct archive_entry *entry, const char *filename)
> {
> int ret;
> + struct archive *archive_writer;
> const int archive_flags = ARCHIVE_EXTRACT_OWNER |
> ARCHIVE_EXTRACT_PERM |
> ARCHIVE_EXTRACT_TIME |
> @@ -118,7 +119,20 @@ static int perform_extraction(alpm_handle_t *handle, struct archive *archive,
>
> archive_entry_set_pathname(entry, filename);
>
> - ret = archive_read_extract(archive, entry, archive_flags);
> + archive_writer = archive_write_disk_new();
> + if (archive_writer == NULL) {
> + _alpm_log(handle, ALPM_LOG_ERROR, _("cannot allocate disk archive object"));
> + alpm_logaction(handle, ALPM_CALLER_PREFIX,
> + "error: cannot allocate disk archive object");
> + return 1;
> + }
> +
> + archive_write_disk_set_options(archive_writer, archive_flags);
> +
> + ret = archive_read_extract2(archive, entry, archive_writer);
> +
> + archive_write_free(archive_writer);
> +
> if(ret == ARCHIVE_WARN && archive_errno(archive) != ENOSPC) {
> /* operation succeeded but a "non-critical" error was encountered */
> _alpm_log(handle, ALPM_LOG_WARNING, _("warning given when extracting %s (%s)\n"),
>
More information about the pacman-dev
mailing list