summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2013-10-05 22:26:59 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2013-10-05 22:26:59 +0000
commit449ea3a639ce01268c7e04918e7066d17ed93977 (patch)
treeba426ba794225599ff7aaa25c24f3aa284adc195
parent- Support staging (diff)
- Sync with pkg update
Fix pkg register -i (staged pass mode) not properly respecting @owner/@group With hat: portmgr
Notes
Notes: svn path=/head/; revision=329517
-rw-r--r--ports-mgmt/pkg-devel/Makefile2
-rw-r--r--ports-mgmt/pkg-devel/files/patch-libpkg__packing.c59
-rw-r--r--ports-mgmt/pkg-devel/files/patch-libpkg__pkg.c22
3 files changed, 77 insertions, 6 deletions
diff --git a/ports-mgmt/pkg-devel/Makefile b/ports-mgmt/pkg-devel/Makefile
index a40b5fd07997..5af7f8a318e9 100644
--- a/ports-mgmt/pkg-devel/Makefile
+++ b/ports-mgmt/pkg-devel/Makefile
@@ -2,7 +2,7 @@
PORTNAME= pkg
DISTVERSION= 1.1.4
-PORTREVISION= 6
+PORTREVISION= 7
CATEGORIES= ports-mgmt
MASTER_SITES= http://files.etoilebsd.net/pkg/ \
http://mirror.shatow.net/freebsd/${PORTNAME}/ \
diff --git a/ports-mgmt/pkg-devel/files/patch-libpkg__packing.c b/ports-mgmt/pkg-devel/files/patch-libpkg__packing.c
new file mode 100644
index 000000000000..8fc72c7b7be7
--- /dev/null
+++ b/ports-mgmt/pkg-devel/files/patch-libpkg__packing.c
@@ -0,0 +1,59 @@
+--- libpkg/packing.c.orig 2013-10-05 19:46:59.920058519 +0200
++++ libpkg/packing.c 2013-10-05 19:49:46.531103495 +0200
+@@ -36,6 +36,8 @@
+ #include <string.h>
+ #include <sys/mman.h>
+ #include <limits.h>
++#include <pwd.h>
++#include <grp.h>
+
+ #include "pkg.h"
+ #include "private/event.h"
+@@ -44,6 +46,7 @@
+ static const char *packing_set_format(struct archive *a, pkg_formats format);
+
+ struct packing {
++ bool pass;
+ struct archive *aread;
+ struct archive *awrite;
+ struct archive_entry_linkresolver *resolver;
+@@ -67,6 +70,7 @@
+ archive_read_disk_set_symlink_physical((*pack)->aread);
+
+ if (!is_dir(path)) {
++ (*pack)->pass = false;
+ (*pack)->awrite = archive_write_new();
+ archive_write_set_format_pax_restricted((*pack)->awrite);
+ ext = packing_set_format((*pack)->awrite, format);
+@@ -89,6 +93,7 @@
+ return EPKG_FATAL;
+ }
+ } else { /* pass mode directly write to the disk */
++ (*pack)->pass = true;
+ (*pack)->awrite = archive_write_disk_new();
+ archive_write_disk_set_options((*pack)->awrite,
+ EXTRACT_ARCHIVE_FLAGS);
+@@ -177,11 +182,21 @@
+ archive_entry_set_size(entry, 0);
+ }
+
+- if (uname != NULL && uname[0] != '\0')
++ if (uname != NULL && uname[0] != '\0') {
++ if (pack->pass) {
++ struct passwd *pw = getpwnam(uname);
++ archive_entry_set_uid(entry, pw->pw_uid);
++ }
+ archive_entry_set_uname(entry, uname);
++ }
+
+- if (gname != NULL && gname[0] != '\0')
++ if (gname != NULL && gname[0] != '\0') {
++ if (pack->pass) {
++ struct group *gr = getgrnam(gname);
++ archive_entry_set_gid(entry, gr->gr_gid);
++ }
+ archive_entry_set_gname(entry, gname);
++ }
+
+ if (perm != 0)
+ archive_entry_set_perm(entry, perm);
diff --git a/ports-mgmt/pkg-devel/files/patch-libpkg__pkg.c b/ports-mgmt/pkg-devel/files/patch-libpkg__pkg.c
index 2c096bb9f71c..d01d2b4c4bbb 100644
--- a/ports-mgmt/pkg-devel/files/patch-libpkg__pkg.c
+++ b/ports-mgmt/pkg-devel/files/patch-libpkg__pkg.c
@@ -1,5 +1,5 @@
---- ./libpkg/pkg.c.orig 2013-09-24 14:53:00.000000000 +0200
-+++ ./libpkg/pkg.c 2013-09-24 14:58:33.000000000 +0200
+--- libpkg/pkg.c.orig 2013-07-06 12:48:19.000000000 +0200
++++ libpkg/pkg.c 2013-10-05 19:45:16.675062417 +0200
@@ -1181,6 +1181,20 @@
struct pkg_dir *dir = NULL;
char spath[MAXPATHLEN + 1];
@@ -21,15 +21,27 @@
if (packing_init(&pack, dest, 0) != EPKG_OK) {
/* TODO */
-@@ -1200,6 +1214,11 @@
+@@ -1190,15 +1204,21 @@
+ while (pkg_dirs(pkg, &dir) == EPKG_OK) {
+ snprintf(spath, sizeof(spath), "%s%s", src, pkg_dir_path(dir));
+ snprintf(dpath, sizeof(dpath), "%s%s", dest, pkg_dir_path(dir));
+- packing_append_file(pack, spath, dpath);
++ packing_append_file_attr(pack, spath, dpath,
++ dir->uname, dir->gname, dir->perm);
}
+ while (pkg_files(pkg, &file) == EPKG_OK) {
+ snprintf(spath, sizeof(spath), "%s%s", src, pkg_file_path(file));
+ snprintf(dpath, sizeof(dpath), "%s%s", dest, pkg_file_path(file));
+- packing_append_file(pack, spath, dpath);
++ packing_append_file_attr(pack, spath, dpath,
++ file->uname, file->gname, file->perm);
+ }
+ /*
+ * Execute post install scripts
+ */
+ pkg_script_run(pkg, PKG_SCRIPT_POST_INSTALL);
-+
+
return (packing_finish(pack));
}
-