diff --git a/scripts/inc.compatibility.sh b/scripts/inc.compatibility.sh index 7ddf015..19635a4 100755 --- a/scripts/inc.compatibility.sh +++ b/scripts/inc.compatibility.sh @@ -205,6 +205,53 @@ minapihack(){ esac } +runtimepermissionshack(){ + tee -a "$build/META-INF/com/google/android/update-binary" > /dev/null <<'EOFILE' +install -d "$(dirname "$run_perms")" + +if [ ! -e "$run_perms" ]; then + fingerprint="$(file_getprop "$BPROP" "ro.build.fingerprint")" + echo " + +" > "$run_perms" +fi + +#We (only) set permissions of apps that are part of core or that are direct replacements of AOSP/Stock apps with a high level of system integration +fixpkgperms "com.android.vending" "CONTACTS_PERMISSIONS" "LOCATION_PERMISSIONS" "PHONE_PERMISSIONS" "SMS_PERMISSIONS" +fixpkgperms "com.google.android.apps.gcs" "CONTACTS_PERMISSIONS" "LOCATION_PERMISSIONS" +fixpkgperms "com.google.android.apps.messaging" "CAMERA_PERMISSIONS" "CONTACTS_PERMISSIONS" "LOCATION_PERMISSIONS" "MICROPHONE_PERMISSIONS" "PHONE_PERMISSIONS" "SMS_PERMISSIONS" "STORAGE_PERMISSIONS" +fixpkgperms "com.google.android.backuptransport" "CONTACTS_PERMISSIONS" +fixpkgperms "com.google.android.contacts" "CONTACTS_PERMISSIONS" "PHONE_PERMISSIONS" "STORAGE_PERMISSIONS" +fixpkgperms "com.google.android.dialer" "CONTACTS_PERMISSIONS" "PHONE_PERMISSIONS" "ADDITIONAL_PERMISSIONS" #uses non-AOSP permissions +fixpkgperms "com.google.android.GoogleCamera" "CAMERA_PERMISSIONS" "LOCATION_PERMISSIONS" "MICROPHONE_PERMISSIONS" "STORAGE_PERMISSIONS" #mind the capitals in the packagename +fixpkgperms "com.google.android.gm.exchange" "CALENDAR_PERMISSIONS" "CONTACTS_PERMISSIONS" +fixpkgperms "com.google.android.gms" "CALENDAR_PERMISSIONS" "CAMERA_PERMISSIONS" "CONTACTS_PERMISSIONS" "LOCATION_PERMISSIONS" "MICROPHONE_PERMISSIONS" "PHONE_PERMISSIONS" "SENSORS_PERMISSIONS" "SMS_PERMISSIONS" "STORAGE_PERMISSIONS" +fixpkgperms "com.google.android.googlequicksearchbox" "CALENDAR_PERMISSIONS" "CAMERA_PERMISSIONS" "CONTACTS_PERMISSION" "LOCATION_PERMISSIONS" "MICROPHONE_PERMISSIONS" "PHONE_PERMISSIONS" "SMS_PERMISSIONS" "STORAGE_PERMISSIONS" +fixpkgperms "com.google.android.gsf" "CONTACTS_PERMISSIONS" "PHONE_PERMISSIONS" +fixpkgperms "com.google.android.gsf.login" "CONTACTS_PERMISSIONS" "PHONE_PERMISSIONS" +fixpkgperms "com.google.android.packageinstaller" "STORAGE_PERMISSIONS" +fixpkgperms "com.google.android.setupwizard" "CONTACTS_PERMISSIONS" "PHONE_PERMISSIONS" +fixpkgperms "com.google.android.syncadapters.contacts" "CONTACTS_PERMISSIONS" +fixpkgperms "com.google.android.talk" "CAMERA_PERMISSIONS" "CONTACTS_PERMISSIONS" "LOCATION_PERMISSIONS" "MICROPHONE_PERMISSIONS" "PHONE_PERMISSIONS" "SMS_PERMISSIONS" "STORAGE_PERMISSIONS" +#faceunlock +#calsync +#googlefeedback +#googleonetimeinitializer +#googlepartnersetup +#googletts +#googletag +#clockgoogle +#calculatorgoogle +#androidforwork +#dmagent +#projectfi + +fixuserperms "com.google.android.calendar.uid.shared" "CALENDAR_PERMISSIONS" "READ_CONTACTS" #note that READ_CONTACTS is not a permission group +fixuserperms "com.google.uid.shared" "CALENDAR_PERMISSIONS" "CONTACTS_PERMISSIONS" "LOCATION_PERMISSIONS" "MICROPHONE_PERMISSIONS" "PHONE_PERMISSIONS" "SENSORS_PERMISSIONS" "SMS_PERMISSIONS" "STORAGE_PERMISSIONS" + +EOFILE +} + systemlibhack(){ case "$package" in com.google.android.webview) if [ "$API" -lt "23" ]; then #webview libs are only on /system/lib/ on pre-Marshmallow diff --git a/scripts/inc.updatebinary.sh b/scripts/inc.updatebinary.sh index ee3671b..3b3feb0 100755 --- a/scripts/inc.updatebinary.sh +++ b/scripts/inc.updatebinary.sh @@ -39,6 +39,7 @@ calc_log=/tmp/calc.log; conflicts_log=/tmp/conflicts.log; rec_cache_log=/cache/recovery/log; rec_tmp_log=/tmp/recovery.log; +run_perms="/data/system/users/0/runtime-permissions.xml" user_remove_notfound_log=/tmp/user_remove_notfound.log; user_remove_multiplefound_log=/tmp/user_remove_multiplefound.log; @@ -324,6 +325,59 @@ which_dpi() { fi; } # _____________________________________________________________________________________________________________________ +# Define Runtime Permissions Functions +fixpkgperms() { + currentperms="$(awk "//,/<\/pkg>/" "$run_perms")" + if [ -z "$currentperms" ]; then #if the packagename is not yet in the permissions + sed -i "/\n\ \ <\/pkg>" "$run_perms" + fi + for permissionsets in "$@"; do + if [ "$permissionsets" = "$1" ]; then #skip first entry since that is the packagename (posix-style) + continue + fi + getruntimeperms "$permissionsets" + for permission in $permissions; do + if ! echo "$currentperms" | grep -q "/a\ \ \ \ " "$run_perms" + fi + done + done +} + +fixuserperms() { + currentperms="$(awk "//,/<\/shared-user>/" "$run_perms")" + if [ -z "$currentperms" ]; then #if the packagename is not yet in the permissions + sed -i "/\n\ \ <\/shared-user>" "$run_perms" + fi + for permissionsets in "$@"; do + if [ "$permissionsets" = "$1" ]; then #skip first entry since that is the packagename (posix-style) + continue + fi + getruntimeperms "$permissionsets" + for permission in $permissions; do + if ! echo "$currentperms" | grep -q "/a\ \ \ \ " "$run_perms" + fi + done + done +} + +getruntimeperms(){ + case "$1" in + PHONE_PERMISSIONS) permissions="READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS";; + CONTACTS_PERMISSIONS) permissions="READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS";; + LOCATION_PERMISSIONS) permissions="ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION";; + CALENDAR_PERMISSIONS) permissions="READ_CALENDAR WRITE_CALENDAR";; + SMS_PERMISSIONS) permissions="SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS READ_CELL_BROADCASTS";; + MICROPHONE_PERMISSIONS) permissions="RECORD_AUDIO";; + CAMERA_PERMISSIONS) permissions="CAMERA";; + SENSORS_PERMISSIONS) permissions="BODY_SENSORS";; + STORAGE_PERMISSIONS) permissions="READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE";; + ADDITIONAL_PERMISSIONS) permissions="ACCESS_NETWORK_STATE ACCESS_WIFI_STATE CONTROL_INCALL_EXPERIENCE GET_ACCOUNTS READ_PROFILE READ_SYNC_SETTINGS RECEIVE_BOOT_COMPLETED USE_CREDENTIALS";; #not in AOSP, used in Dialer + *) permissions="$1";; #just give the literal permission back + esac +} +# _____________________________________________________________________________________________________________________ # Gather Pre-Install Info # Get GApps Version and GApps Type from g.prop extracted at top of script gapps_version=$(file_getprop /tmp/g.prop ro.addon.open_version); @@ -1419,6 +1473,18 @@ set_progress 0.83; ui_print " "; ui_print "- Fixing permissions & contexts"; ui_print " "; + +EOFILE +if [ "$API" -ge "23" ]; then + runtimepermissionshack #marshmallow needs runtime permissions set +fi +tee -a "$build/META-INF/com/google/android/update-binary" > /dev/null <<'EOFILE' +set_perm 1000 1000 771 "/data/" +set_perm 1000 1000 775 "/data/system" +set_perm 1000 1000 775 "/data/system/users" +set_perm 1000 1000 700 "$(dirname "$run_perms")" +set_perm 1000 1000 600 "$run_perms" + set_perm_recursive 0 0 755 644 "/system/app" "/system/framework" "/system/lib" "/system/lib64" "/system/priv-app" "/system/usr/srec" "/system/vendor/pittpatt" "/system/etc/permissions" "/system/etc/preferred-apps"; set_progress 0.85;