Skip to content

Вот исправил ошибке в коде! Поправьте если это не так! #68

Description

@Oleg-Skalskiy

#!/system/bin/sh

exec > /data/local/tmp/adguardcert.log
exec 2>&1

set -x

MODDIR=${0%/*}

set_context() {
[ "$(getenforce)" = "Enforcing" ] || return 0

default_selinux_context=u:object_r:system_file:s0
selinux_context=$(ls -Zd $1 | awk '{print $1}')

if [ -n "$selinux_context" ] && [ "$selinux_context" != "?" ]; then
    chcon -R $selinux_context $2
else
    chcon -R $default_selinux_context $2
fi

}

AG_CERT_HASH=0f4ed297

Добавлен 2>/dev/null, чтобы ls не мусорил в лог, если сертификат еще не установлен

AG_CERT_FILE=$(ls /data/misc/user//cacerts-added/${AG_CERT_HASH}. 2>/dev/null | (IFS=.; while read -r left right; do echo $right $left.$right; done) | sort -nr | (read -r left right; echo $right))

if ! [ -e "${AG_CERT_FILE}" ]; then
exit 0
fi

rm -f /data/misc/user//cacerts-removed/${AG_CERT_HASH}.

ИСПРАВЛЕНИЕ 1: Гарантируем, что директория модуля существует перед копированием

mkdir -p ${MODDIR}/system/etc/security/cacerts
cp -f ${AG_CERT_FILE} ${MODDIR}/system/etc/security/cacerts/${AG_CERT_HASH}.0
chown -R 0:0 ${MODDIR}/system/etc/security/cacerts
set_context /system/etc/security/cacerts ${MODDIR}/system/etc/security/cacerts

Android 14 support

Since Magisk ignores /apex for module file injections, use non-Magisk way

if [ -d /apex/com.android.conscrypt/cacerts ]; then
# Clone directory into tmpfs
# ИСПРАВЛЕНИЕ 2: Используем rm -rf для корректного удаления директории
rm -rf /data/local/tmp/adg-ca-copy
mkdir -p /data/local/tmp/adg-ca-copy
mount -t tmpfs tmpfs /data/local/tmp/adg-ca-copy
cp -f /apex/com.android.conscrypt/cacerts/* /data/local/tmp/adg-ca-copy/

# Do the same as in Magisk module
cp -f ${AG_CERT_FILE} /data/local/tmp/adg-ca-copy/${AG_CERT_HASH}.0
chown -R 0:0 /data/local/tmp/adg-ca-copy
set_context /apex/com.android.conscrypt/cacerts /data/local/tmp/adg-ca-copy

# Mount directory inside APEX if it is valid, and remove temporary one.
CERTS_NUM="$(ls -1 /data/local/tmp/adg-ca-copy | wc -l)"
if [ "$CERTS_NUM" -gt 10 ]; then
    mount --bind /data/local/tmp/adg-ca-copy /apex/com.android.conscrypt/cacerts
    for pid in 1 $(pgrep zygote) $(pgrep zygote64); do
        # ИСПРАВЛЕНИЕ 3: Вызываем системный mount (он есть в PATH) вместо жесткого /bin/mount
        nsenter --mount=/proc/${pid}/ns/mnt -- \
            mount --bind /data/local/tmp/adg-ca-copy /apex/com.android.conscrypt/cacerts
    done
else
    echo "Cancelling replacing CA storage due to safety"
fi
umount /data/local/tmp/adg-ca-copy
rmdir /data/local/tmp/adg-ca-copy

fi

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions