summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-11-11 17:17:01 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-01-30 16:43:39 +0000
commitd3c848094fdedb7836630a1b038a2b3049dab866 (patch)
tree56a261df89e9a4e5b6daf2db5a146134ba243701 /meta/recipes-devtools
parent37d694ae806fd2992299bf461b6dc1813c8b8836 (diff)
downloadpoky-d3c848094fdedb7836630a1b038a2b3049dab866.tar.gz
opkg: Ensure we use the uname/gname fields when extracting tarballs
When extracting packages onto the target system in particular, we really want to ensure the name fields in the tarball are used over and above the numerical uid/gid values. This patch adds this functionality to opkg and ensures package upgrades work correctly permission wise. (From OE-Core rev: f2316ff39670ed99382411e15ac035550360fbdd) (From OE-Core rev: 56800b9906cf228331083256664407947f831185) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools')
-rw-r--r--meta/recipes-devtools/opkg/opkg/add_uname_support.patch88
-rw-r--r--meta/recipes-devtools/opkg/opkg_svn.bb3
2 files changed, 90 insertions, 1 deletions
diff --git a/meta/recipes-devtools/opkg/opkg/add_uname_support.patch b/meta/recipes-devtools/opkg/opkg/add_uname_support.patch
new file mode 100644
index 0000000000..0f627f1178
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/add_uname_support.patch
@@ -0,0 +1,88 @@
1
2When updating packages on the target device we ideally want to match
3user and group numbers from the existing file system. This patch encourages
4opkg to lookup the uname/gname fields first and only use the hardcoded
5numerical values if that fails.
6
7Upstream-Status: Pending
8
9RP 11/11/11
10
11Index: trunk/libbb/unarchive.c
12===================================================================
13--- trunk.orig/libbb/unarchive.c 2011-11-11 15:52:59.761674091 +0000
14+++ trunk/libbb/unarchive.c 2011-11-11 17:04:56.501574419 +0000
15@@ -22,10 +22,13 @@
16 #include <stdio.h>
17 #include <errno.h>
18 #include <stdlib.h>
19+#include <stdbool.h>
20 #include <string.h>
21 #include <unistd.h>
22 #include <utime.h>
23 #include <libgen.h>
24+#include <grp.h>
25+#include <pwd.h>
26
27 #include "libbb.h"
28
29@@ -436,6 +439,42 @@
30 free(ar_entry);
31 }
32
33+static char uname_cache[32] = "";
34+static uid_t uid_cache;
35+
36+static bool update_unamecache(char *uname) {
37+ struct passwd *passwd;
38+ if (!uname)
39+ return FALSE;
40+ if (!uname_cache[0] && strcmp(uname_cache, uname) == 0)
41+ return TRUE;
42+ passwd = getpwnam(uname);
43+ if (passwd) {
44+ uid_cache = passwd->pw_uid;
45+ strncpy(uname, uname_cache, 32);
46+ return TRUE;
47+ }
48+ return FALSE;
49+}
50+
51+static char gname_cache[32] = "";
52+static gid_t gid_cache;
53+
54+static bool update_gnamecache(char *gname) {
55+ struct group *group;
56+ if (!gname)
57+ return FALSE;
58+ if (!gname_cache[0] && strcmp(gname_cache, gname) == 0)
59+ return TRUE;
60+ group = getgrnam(gname);
61+ if (group) {
62+ gid_cache = group->gr_gid;
63+ strncpy(gname, gname_cache, 32);
64+ return TRUE;
65+ }
66+ return FALSE;
67+}
68+
69
70 static file_header_t *
71 get_header_tar(FILE *tar_stream)
72@@ -515,8 +554,14 @@
73 */
74 tar_entry->mode = 07777 & strtol(tar.formated.mode, NULL, 8);
75
76- tar_entry->uid = strtol(tar.formated.uid, NULL, 8);
77- tar_entry->gid = strtol(tar.formated.gid, NULL, 8);
78+ if (update_unamecache(tar.formated.uname))
79+ tar_entry->uid = uid_cache;
80+ else
81+ tar_entry->uid = strtol(tar.formated.uid, NULL, 8);
82+ if (update_gnamecache(tar.formated.gname))
83+ tar_entry->gid = gid_cache;
84+ else
85+ tar_entry->gid = strtol(tar.formated.gid, NULL, 8);
86 tar_entry->size = strtol(tar.formated.size, NULL, 8);
87 tar_entry->mtime = strtol(tar.formated.mtime, NULL, 8);
88
diff --git a/meta/recipes-devtools/opkg/opkg_svn.bb b/meta/recipes-devtools/opkg/opkg_svn.bb
index 099a373f34..8f50f677bd 100644
--- a/meta/recipes-devtools/opkg/opkg_svn.bb
+++ b/meta/recipes-devtools/opkg/opkg_svn.bb
@@ -11,13 +11,14 @@ RREPLACES_${PN} = "opkg-nogpg"
11 11
12SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;proto=http \ 12SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;proto=http \
13 file://add_vercmp.patch \ 13 file://add_vercmp.patch \
14 file://add_uname_support.patch \
14" 15"
15 16
16S = "${WORKDIR}/trunk" 17S = "${WORKDIR}/trunk"
17 18
18SRCREV = "625" 19SRCREV = "625"
19PV = "0.1.8+svnr${SRCPV}" 20PV = "0.1.8+svnr${SRCPV}"
20PR = "r2" 21PR = "r3"
21 22
22PACKAGES =+ "libopkg${PKGSUFFIX}-dev libopkg${PKGSUFFIX} update-alternatives-cworth${PKGSUFFIX}" 23PACKAGES =+ "libopkg${PKGSUFFIX}-dev libopkg${PKGSUFFIX} update-alternatives-cworth${PKGSUFFIX}"
23 24