From 8f48a4509094b3734eea788aa016306d5060dbae Mon Sep 17 00:00:00 2001 From: Christopher Roy Bratusek Date: Thu, 17 Jan 2019 19:35:48 +0100 Subject: [PATCH] Uninstaller: improve system mode uninstallation --- .../META-INF/com/google/android/update-binary | 63 ++++++++++++++----- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/uninstaller/META-INF/com/google/android/update-binary b/uninstaller/META-INF/com/google/android/update-binary index b6395c4..12e47cc 100644 --- a/uninstaller/META-INF/com/google/android/update-binary +++ b/uninstaller/META-INF/com/google/android/update-binary @@ -40,6 +40,36 @@ is_mounted() { return $? } + +set_perm () { + chown ${2}:${3} ${1} || error "failed change owner for ${1}" + chmod ${4} ${1} || error "failed to change mode for ${1}" + + if [ ! -z "${5}" ]; then + chcon ${5} ${1} 2>/dev/null + else chcon 'u:object_r:system_file:s0' ${1} 2>/dev/null + fi +} + +set_perm_recursive() { + find ${1} -type d 2>/dev/null | while read dir; do + set_perm ${dir} ${2} ${3} ${4} ${6} + done + find ${1} -type f 2>/dev/null | while read file; do + set_perm ${file} ${2} ${3} ${5} ${6} + done +} + +set_perm_data () { + if [ "${1}" = "-r" ]; then + echo " perm: data [recursive] {${2}}" + set_perm_recursive ${2} 0 0 0755 0644 + else + echo " perm: data [single] {${1}}" + set_perm ${1} 0 0 0644 + fi +} + setup_busybox () { mkdir /dev/tmp @@ -179,35 +209,36 @@ config_locations="/sdcard /external_sd /data $(dirname ${ZIP}))" config_files=".nanodroid-setup .nanodroid-apps .nanodroid-overlay" restore_apps () { - if [ -d /sdcard/nanodroid_backups/app/ ]; then - for app in /sdcard/nanodroid_backups/app/*; do + backup_path="/sdcard/nanodroid_backups/$(grep_prop ro.build.flavor)_$(grep_prop ro.build.id)" + + if [ -d ${backup_path}/app/ ]; then + for app in ${backup_path}/app/*; do if [ -d /system/app/${app} ]; then ui_print " << removing backup: app:${app}" - rm -rf /sdcard/nanodroid_backups/app/${app} + rm -rf "${backup_path}/app/${app}" else ui_print " << restoring: app:${app}" - mv /sdcard/nanodroid_backups/app/${app} /system/app/ - chown -R root:root /system/app/${app} + mv "${backup_path}/app/${app}" /system/app/ + set_perm_data -r /system/app/${app} fi done - - rm -rf /sdcard/nanodroid_backups/app/ fi - if [ -d /sdcard/nanodroid_backups/priv-app/ ]; then - for app in /sdcard/nanodroid_backups/priv-app/*; do + if [ -d ${backup_path}/priv-app/ ]; then + for app in ${backup_path}/priv-app/*; do if [ -d /system/priv-app/${app} ]; then ui_print " << removing backup: priv-app:${app}" - rm -rf /sdcard/nanodroid_backups/priv-app/${app} + rm -rf "${backup_path}/priv-app/${app}" else ui_print " << restoring: priv-app:${app}" - mv /sdcard/nanodroid_backups/priv-app/${app} /system/priv-app/ - chown -R root:root /system/priv-app/${app} + mv "${backup_path}/priv-app/${app}" /system/priv-app/ + set_perm_data -r /system/priv-app/${app} fi done - - rm -rf /sdcard/nanodroid_backups/priv-app/ fi + + rm -rf "${backup_path}" + } system_mode_uninstall () { @@ -243,11 +274,11 @@ patcher_uninstall () { if [ -f /sdcard/nanodroid_backups/${services_name} ]; then ui_print " << restoring: unpatched services.jar" mv "/sdcard/nanodroid_backups/${services_name}" /system/framework/services.jar - chown root:root /system/framework/services.jar + set_perm_data /system/framework/services.jar elif [ -f /sdcard/nanodroid_backups/services.jar ]; then ui_print " << restoring: unpatched services.jar" mv /sdcard/nanodroid_backups/services.jar /system/framework/services.jar - chown root:root /system/framework/services.jar + set_perm_data /system/framework/services.jar else ui_print " << can't restore unpatched services.jar" fi fi