|
|
@@ -1,130 +0,0 @@
|
|
|
-#!/sbin/sh
|
|
|
-
|
|
|
-SCRIPTNAME="PatchLevel"
|
|
|
-LOGFILE=/tmp/recovery.log
|
|
|
-TEMPSYS=/s
|
|
|
-BUILDPROP=system/build.prop
|
|
|
-DEFAULTPROP=prop.default
|
|
|
-syspath="/dev/block/by-name/system$(getprop ro.boot.slot_suffix)"
|
|
|
-venbin="vendor/bin"
|
|
|
-SETFINGERPRINT=true
|
|
|
-
|
|
|
-log_info() {
|
|
|
- echo "I:$SCRIPTNAME:$1" >> "$LOGFILE"
|
|
|
-}
|
|
|
-
|
|
|
-log_error() {
|
|
|
- echo "E:$SCRIPTNAME:$1" >> "$LOGFILE"
|
|
|
-}
|
|
|
-
|
|
|
-temp_mount() {
|
|
|
- mkdir "$1"
|
|
|
- if [ -d "$1" ]; then
|
|
|
- log_info "Temporary $2 folder created at $1."
|
|
|
- else
|
|
|
- log_error "Unable to create temporary $2 folder."
|
|
|
- finish_error
|
|
|
- fi
|
|
|
- mount -t ext4 -o ro "$3" "$1"
|
|
|
- if [ -n "$(ls -A "$1" 2>/dev/null)" ]; then
|
|
|
- log_info "$2 mounted at $1."
|
|
|
- else
|
|
|
- log_error "Unable to mount $2 to temporary folder."
|
|
|
- finish_error
|
|
|
- fi
|
|
|
-}
|
|
|
-
|
|
|
-relink() {
|
|
|
- log_info "Looking for $1 to update linker path..."
|
|
|
- if [ -f "$1" ]; then
|
|
|
- fname=$(basename "$1")
|
|
|
- target="/sbin/$fname"
|
|
|
- log_info "File found! Relinking $1 to $target..."
|
|
|
- sed 's|/system/bin/linker|///////sbin/linker|' "$1" > "$target"
|
|
|
- chmod 755 "$target"
|
|
|
- else
|
|
|
- log_info "File not found. Proceeding without relinking..."
|
|
|
- fi
|
|
|
-}
|
|
|
-
|
|
|
-finish() {
|
|
|
- umount "$TEMPSYS"
|
|
|
- rmdir "$TEMPSYS"
|
|
|
- touch /sbin/patchlevel_set
|
|
|
- log_info "Script complete. Device ready for decryption."
|
|
|
- exit 0
|
|
|
-}
|
|
|
-
|
|
|
-finish_error() {
|
|
|
- umount "$TEMPSYS"
|
|
|
- rmdir "$TEMPSYS"
|
|
|
- log_error "Script run incomplete. Device not ready for decryption."
|
|
|
- exit 0
|
|
|
-}
|
|
|
-
|
|
|
-osver_orig=$(getprop ro.build.version.release_orig)
|
|
|
-patchlevel_orig=$(getprop ro.build.version.security_patch_orig)
|
|
|
-osver=$(getprop ro.build.version.release)
|
|
|
-patchlevel=$(getprop ro.build.version.security_patch)
|
|
|
-device=$(getprop ro.product.device)
|
|
|
-fingerprint=$(getprop ro.build.fingerprint)
|
|
|
-product=$(getprop ro.build.product)
|
|
|
-
|
|
|
-log_info "Running patchlevel pre-decrypt script for TWRP..."
|
|
|
-for file in $(find $venbin -type f); do
|
|
|
- relink "$file"
|
|
|
-done
|
|
|
-
|
|
|
-temp_mount "$TEMPSYS" "system" "$syspath"
|
|
|
-if [ -f "$TEMPSYS/$BUILDPROP" ]; then
|
|
|
- log_info "Current system is Oreo or above. Proceed with setting OS version and security patch level..."
|
|
|
- log_info "Build.prop exists! Setting system properties from build.prop"
|
|
|
- log_info "Current OS version: $osver"
|
|
|
- osver=$(grep -i 'ro.build.version.release' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
|
|
|
- if [ -n "$osver" ]; then
|
|
|
- resetprop ro.build.version.release "$osver"
|
|
|
- sed -i "s/ro.build.version.release=.*/ro.build.version.release=""$osver""/g" "/$DEFAULTPROP" ;
|
|
|
- log_info "New OS Version: $osver"
|
|
|
- fi
|
|
|
- log_info "Current security patch level: $patchlevel"
|
|
|
- patchlevel=$(grep -i 'ro.build.version.security_patch' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
|
|
|
- if [ -n "$patchlevel" ]; then
|
|
|
- resetprop ro.build.version.security_patch "$patchlevel"
|
|
|
- sed -i "s/ro.build.version.security_patch=.*/ro.build.version.security_patch=""$patchlevel""/g" "/$DEFAULTPROP" ;
|
|
|
- log_info "New security patch level: $patchlevel"
|
|
|
- fi
|
|
|
- # Only needed for some devices (for stock OTA capability), so set "SETFINGERPRINT" variable to "false" if your device isn't one of them
|
|
|
- if [ "$SETFINGERPRINT" = "true" ]; then
|
|
|
- log_info "Current fingerprint: $fingerprint"
|
|
|
- fingerprint=$(grep -i 'ro.build.fingerprint' "$TEMPSYS/$BUILDPROP" | cut -f2 -d'=' -s)
|
|
|
- if [ -n "$fingerprint" ]; then
|
|
|
- resetprop ro.build.fingerprint "$fingerprint"
|
|
|
- sed -i "s/ro.build.fingerprint=.*/ro.build.fingerprint=""$fingerprint""/g" "/$DEFAULTPROP" ;
|
|
|
- log_info "New fingerprint: $fingerprint"
|
|
|
- fi
|
|
|
- fi
|
|
|
-else
|
|
|
- if [ -n "$osver_orig" ]; then
|
|
|
- log_info "Original OS version: $osver_orig"
|
|
|
- log_info "Current OS version: $osver"
|
|
|
- log_info "Setting OS Version to $osver_orig"
|
|
|
- osver=$osver_orig
|
|
|
- resetprop ro.build.version.release "$osver"
|
|
|
- sed -i "s/ro.build.version.release=.*/ro.build.version.release=""$osver""/g" "/$DEFAULTPROP" ;
|
|
|
- else
|
|
|
- log_info "No Original OS Version found. Proceeding with existing value."
|
|
|
- log_info "Current OS version: $osver"
|
|
|
- fi
|
|
|
- if [ -n "$patchlevel_orig" ]; then
|
|
|
- log_info "Original security patch level: $patchlevel_orig"
|
|
|
- log_info "Current security patch level: $patchlevel"
|
|
|
- log_info "Setting security patch level to $patchlevel_orig"
|
|
|
- patchlevel=$patchlevel_orig
|
|
|
- resetprop ro.build.version.security_patch "$patchlevel"
|
|
|
- sed -i "s/ro.build.version.security_patch=.*/ro.build.version.security_patch=""$patchlevel""/g" "/$DEFAULTPROP" ;
|
|
|
- else
|
|
|
- log_info "No Original security patch level found. Proceeding with existing value."
|
|
|
- log_info "Current security patch level: $patchlevel"
|
|
|
- fi
|
|
|
-fi
|
|
|
-finish
|