| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #!/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
|