AdguardTeam / AdguardTeam/adguardcert

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

Ouverte
#68 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Shell
Étoiles
421
Forks
34
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.