Print out shared app gids correctly
For applications that share resources across users such as
forward-locked applications, print out their group name correctly.
Change-Id: I06ee0b67e4325cfa415ffd7a03e301700399a66d
diff --git a/libc/bionic/stubs.cpp b/libc/bionic/stubs.cpp
index fb1a8e4..1cab7d3 100644
--- a/libc/bionic/stubs.cpp
+++ b/libc/bionic/stubs.cpp
@@ -266,18 +266,19 @@
static void print_app_name_from_appid_userid(const uid_t appid,
const uid_t userid, char* buffer, const int bufferlen) {
- if (appid < AID_ISOLATED_START) {
- if (appid < AID_APP) {
- for (size_t n = 0; n < android_id_count; n++) {
- if (android_ids[n].aid == appid) {
- snprintf(buffer, bufferlen, "u%u_%s", userid, android_ids[n].name);
- return;
- }
+ if (appid >= AID_ISOLATED_START) {
+ snprintf(buffer, bufferlen, "u%u_i%u", userid, appid - AID_ISOLATED_START);
+ } else if (userid == 0 && appid >= AID_SHARED_GID_START) {
+ snprintf(buffer, bufferlen, "all_a%u", appid - AID_SHARED_GID_START);
+ } else if (appid < AID_APP) {
+ for (size_t n = 0; n < android_id_count; n++) {
+ if (android_ids[n].aid == appid) {
+ snprintf(buffer, bufferlen, "u%u_%s", userid, android_ids[n].name);
+ return;
}
}
- snprintf(buffer, bufferlen, "u%u_a%u", userid, appid - AID_APP);
} else {
- snprintf(buffer, bufferlen, "u%u_i%u", userid, appid - AID_ISOLATED_START);
+ snprintf(buffer, bufferlen, "u%u_a%u", userid, appid - AID_APP);
}
}
diff --git a/tests/stubs_test.cpp b/tests/stubs_test.cpp
index 079779e..d2d0ad8 100644
--- a/tests/stubs_test.cpp
+++ b/tests/stubs_test.cpp
@@ -68,6 +68,14 @@
CHECK_GETPWNAM_FOR("nobody", 9999, TYPE_SYSTEM);
}
+TEST(getpwnam, app_id_all_a0) {
+ CHECK_GETPWNAM_FOR("all_a0", 50000, TYPE_APP);
+}
+
+TEST(getpwnam, app_id_u1_a40000) {
+ CHECK_GETPWNAM_FOR("u1_a40000", 150000, TYPE_APP);
+}
+
TEST(getpwnam, app_id_u0_a0) {
CHECK_GETPWNAM_FOR("u0_a0", 10000, TYPE_APP);
}