fixPermissions: simplify code, fix bugs

- avoid parsing permission strings
- fix memory leaks, a fix new/free mismatch and a compiler warning
- fix that only first updated-package was processed
- fix a potential stack overflow if packages.xml is huge
- minor refactoring for reducing duplicated code
- don't process packages without codePath
- fix path for deleting app data (currently unused anyway)
- fix file ownership on libs
- try not to mess up Android 5.0 app permissions

Patch set 4

- make fixing SELinux contexts an option with a check box
- add some notes / text to the themes

Patch set 6

- decouple "fix permissions" from "fix contexts"

Change-Id: Icc77ecc581befc5ce6e419b1f3b8ca189208c234
This commit is contained in:
that
2014-12-22 04:52:37 +01:00
committed by Dees Troy
parent d79d9bceb3
commit a3d31fbe38
7 changed files with 386 additions and 347 deletions
+6 -7
View File
@@ -1654,9 +1654,6 @@ bool TWPartition::Wipe_Data_Without_Wiping_Media() {
return Wipe_Encryption();
#else
string dir;
#ifdef HAVE_SELINUX
fixPermissions perms;
#endif
// This handles wiping data on devices with "sdcard" in /data/media
if (!Mount(true))
@@ -2018,10 +2015,6 @@ void TWPartition::Find_Actual_Block_Device(void) {
void TWPartition::Recreate_Media_Folder(void) {
string Command;
#ifdef HAVE_SELINUX
fixPermissions perms;
#endif
if (!Mount(true)) {
LOGERR("Unable to recreate /data/media folder.\n");
} else if (!TWFunc::Path_Exists("/data/media")) {
@@ -2029,7 +2022,13 @@ void TWPartition::Recreate_Media_Folder(void) {
LOGINFO("Recreating /data/media folder.\n");
mkdir("/data/media", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
#ifdef HAVE_SELINUX
// Attempt to set the correct SELinux contexts on the folder
fixPermissions perms;
perms.fixDataInternalContexts();
// Afterwards, we will try to set the
// default metadata that we were hopefully able to get during
// early boot.
tw_set_default_metadata("/data/media");
#endif
// Toggle mount to ensure that "internal sdcard" gets mounted
PartitionManager.UnMount_By_Path(Symlink_Mount_Point, true);