diff --git a/NEWS b/NEWS index 594b78fb..0b4dec43 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,8 @@ xbps-0.44 (???): + * libxbps: use a sane umask(2) while unpacking package files from + binary packages (see https://github.com/voidlinux/void-packages/issues/835) + * xbps-dgraph(8): the -m/--metadata option (default mode) is now properly accepted. Regression introduced in 0.42. diff --git a/lib/package_unpack.c b/lib/package_unpack.c index 237883fb..d655cee4 100644 --- a/lib/package_unpack.c +++ b/lib/package_unpack.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2008-2014 Juan Romero Pardines. + * Copyright (c) 2008-2015 Juan Romero Pardines. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -502,6 +502,7 @@ xbps_unpack_binary_pkg(struct xbps_handle *xhp, xbps_dictionary_t pkg_repod) const char *pkgver; char *bpkg = NULL; int pkg_fd = -1, rv = 0; + mode_t myumask; assert(xbps_object_type(pkg_repod) == XBPS_TYPE_DICTIONARY); @@ -529,6 +530,8 @@ xbps_unpack_binary_pkg(struct xbps_handle *xhp, xbps_dictionary_t pkg_repod) archive_read_support_compression_xz(ar); archive_read_support_format_tar(ar); + myumask = umask(022); + pkg_fd = open(bpkg, O_RDONLY|O_CLOEXEC); if (pkg_fd == -1) { rv = errno; @@ -594,5 +597,8 @@ out: if (bpkg) free(bpkg); + /* restore */ + umask(myumask); + return rv; }