diff options
author | rpcraig <rpcraig@tycho.ncsc.mil> | 2012-11-14 10:07:28 -0500 |
---|---|---|
committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2013-07-18 20:56:41 +0100 |
commit | e6a337246ee3736727f43ed21a2287a59ed4491c (patch) | |
tree | 1263d1093b79d5ff0d38aefab78d214d66252a55 /cmds/installd | |
parent | 6c33ad36e429b3a3ad69e53275714ca43cdc03fe (diff) | |
download | frameworks_base-e6a337246ee3736727f43ed21a2287a59ed4491c.zip frameworks_base-e6a337246ee3736727f43ed21a2287a59ed4491c.tar.gz frameworks_base-e6a337246ee3736727f43ed21a2287a59ed4491c.tar.bz2 |
Add seinfo parsing to PackageManagerService.
This patch set allows the PMS to parse the
mac_permissions.xml file which contains the
seinfo values. Each package that is installed
on the device will be assigned an seinfo value
based on policy. This seinfo value will help label
the app process and data directory. Modifications
also include, adjustments to ApplicationInfo.java
to store the seinfo tag per package, adjustments
to installd to communicate the seinfo tag to
libselinux, and finally a set of unit tests.
Signed-off-by: rpcraig <rpcraig@tycho.ncsc.mil>
Change-Id: I61ad1ea12fb6a9a6d0b108ec163bc4bf4c954b58
Diffstat (limited to 'cmds/installd')
-rw-r--r-- | cmds/installd/commands.c | 4 | ||||
-rw-r--r-- | cmds/installd/installd.c | 4 | ||||
-rw-r--r-- | cmds/installd/installd.h | 2 |
3 files changed, 5 insertions, 5 deletions
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c index d19db32..4f6971b 100644 --- a/cmds/installd/commands.c +++ b/cmds/installd/commands.c @@ -32,7 +32,7 @@ dir_rec_t android_app_lib_dir; dir_rec_t android_media_dir; dir_rec_array_t android_system_dirs; -int install(const char *pkgname, uid_t uid, gid_t gid) +int install(const char *pkgname, uid_t uid, gid_t gid, const char *seinfo) { char pkgdir[PKG_PATH_MAX]; char libsymlink[PKG_PATH_MAX]; @@ -96,7 +96,7 @@ int install(const char *pkgname, uid_t uid, gid_t gid) } #ifdef HAVE_SELINUX - if (selinux_android_setfilecon(pkgdir, pkgname, uid) < 0) { + if (selinux_android_setfilecon2(pkgdir, pkgname, seinfo, uid) < 0) { ALOGE("cannot setfilecon dir '%s': %s\n", pkgdir, strerror(errno)); unlink(libsymlink); unlink(pkgdir); diff --git a/cmds/installd/installd.c b/cmds/installd/installd.c index 17a1a1f..73249cc 100644 --- a/cmds/installd/installd.c +++ b/cmds/installd/installd.c @@ -31,7 +31,7 @@ static int do_ping(char **arg, char reply[REPLY_MAX]) static int do_install(char **arg, char reply[REPLY_MAX]) { - return install(arg[0], atoi(arg[1]), atoi(arg[2])); /* pkgname, uid, gid */ + return install(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3]); /* pkgname, uid, gid, seinfo */ } static int do_dexopt(char **arg, char reply[REPLY_MAX]) @@ -134,7 +134,7 @@ struct cmdinfo { struct cmdinfo cmds[] = { { "ping", 0, do_ping }, - { "install", 3, do_install }, + { "install", 4, do_install }, { "dexopt", 3, do_dexopt }, { "movedex", 2, do_move_dex }, { "rmdex", 1, do_rm_dex }, diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h index a8461eb..5a68733 100644 --- a/cmds/installd/installd.h +++ b/cmds/installd/installd.h @@ -196,7 +196,7 @@ int ensure_media_user_dirs(userid_t userid); /* commands.c */ -int install(const char *pkgname, uid_t uid, gid_t gid); +int install(const char *pkgname, uid_t uid, gid_t gid, const char *seinfo); int uninstall(const char *pkgname, uid_t persona); int renamepkg(const char *oldpkgname, const char *newpkgname); int fix_uid(const char *pkgname, uid_t uid, gid_t gid); |