mirror of
https://github.com/openwrt-xiaomi/xmir-patcher.git
synced 2026-09-22 22:57:55 +03:00
ssh: Add patch for bdata params (set telnet_en=1)
This commit is contained in:
@@ -7,9 +7,12 @@ import time
|
||||
|
||||
import xmir_base
|
||||
from gateway import *
|
||||
import read_info
|
||||
|
||||
gw = Gateway()
|
||||
|
||||
FN_kmod = 'kmod/xmir_patcher-{kver}-{arch}{preempt}.ko'
|
||||
fn_kmod = '/tmp/xmir_patcher.ko'
|
||||
FN_patch = f'tmp/ssh_patch.sh'
|
||||
fn_patch = '/tmp/ssh_patch.sh'
|
||||
FN_install = f'tmp/ssh_install.sh'
|
||||
@@ -63,9 +66,42 @@ uci commit firewall
|
||||
|
||||
rm -f /tmp/ssh_patch.log
|
||||
$DIR_PATCH/ssh_patch.sh
|
||||
|
||||
### bdata_patch ###
|
||||
'''
|
||||
with open(FN_install, 'w', newline = '\n') as file:
|
||||
file.write(ssh_install)
|
||||
|
||||
bdata_patch = '''
|
||||
rm -f /tmp/bdata_patch.log
|
||||
TELNET_EN=`bdata get telnet_en`
|
||||
SSH_EN=`bdata get ssh_en`
|
||||
UART_EN=`bdata get uart_en`
|
||||
if [ "$TELNET_EN" != "1" -o "$SSH_EN" != "1" -o "$UART_EN" != "1" ]; then
|
||||
KMOD_FN=/tmp/xmir_patcher.ko
|
||||
if [ -f $KMOD_FN ]; then
|
||||
insmod $KMOD_FN
|
||||
if lsmod | grep -q xmir_patcher ; then
|
||||
echo 'set_mtd_rw|bdata' > /sys/module/xmir_patcher/parameters/cmd
|
||||
RESP=`cat /sys/module/xmir_patcher/parameters/cmd`
|
||||
if [ "${RESP::2}" != "0|" ]; then
|
||||
echo 'set_mtd_rw|Bdata' > /sys/module/xmir_patcher/parameters/cmd
|
||||
RESP=`cat /sys/module/xmir_patcher/parameters/cmd`
|
||||
fi
|
||||
if [ "${RESP::2}" = "0|" ]; then
|
||||
bdata set telnet_en=1
|
||||
bdata set ssh_en=1
|
||||
bdata set uart_en=1
|
||||
bdata commit
|
||||
echo OK > /tmp/bdata_patch.log
|
||||
fi
|
||||
[ ! -f /tmp/bdata_patch.log ] && echo error_3 > /tmp/bdata_patch.log
|
||||
fi
|
||||
[ ! -f /tmp/bdata_patch.log ] && echo error_2 > /tmp/bdata_patch.log
|
||||
fi
|
||||
[ ! -f /tmp/bdata_patch.log ] && echo error_1 > /tmp/bdata_patch.log
|
||||
fi
|
||||
'''
|
||||
|
||||
ssh_uninstall = '''#!/bin/sh
|
||||
DIR_PATCH=/etc/crontabs/patches
|
||||
@@ -87,6 +123,35 @@ rm -f /tmp/ssh_patch.log
|
||||
with open(FN_uninstall, 'w', newline = '\n') as file:
|
||||
file.write(ssh_uninstall)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
dev = read_info.DevInfo(gw, verbose = 0, infolevel = 1)
|
||||
dev.get_env_list()
|
||||
bdata = dev.env.bdata
|
||||
if bdata and bdata.var:
|
||||
telnet_en = bdata.var["telnet_en"] if 'telnet_en' in bdata.var else None
|
||||
ssh_en = bdata.var["ssh_en"] if 'ssh_en' in bdata.var else None
|
||||
uart_en = bdata.var["uart_en"] if 'uart_en' in bdata.var else None
|
||||
print(f'bdata: telnet_en = {telnet_en}, ssh_en = {ssh_en}, uart_en = {uart_en}')
|
||||
if telnet_en != '1' or ssh_en != '1' or uart_en != '1':
|
||||
print(f'CPU arch: {dev.info.cpu_arch}')
|
||||
print(f'Kernel: {dev.info.linux_stamp}')
|
||||
krn_ver = dev.info.linux_ver.split('.')
|
||||
kver = krn_ver[0] + '.' + krn_ver[1]
|
||||
arch = dev.info.cpu_arch
|
||||
if kver in [ '4.4', '5.4' ] and arch in [ 'armv7', 'arm64' ]:
|
||||
print(f'Insert patch for bdata partition!')
|
||||
preempt = '-preempt' if 'PREEMPT' in dev.info.linux_stamp else ''
|
||||
FN_kmod = FN_kmod.format(kver = kver, arch = arch, preempt = preempt)
|
||||
if not os.path.exists(FN_kmod):
|
||||
die(f'File "{FN_kmod}" not found!')
|
||||
ssh_install = ssh_install.replace('### bdata_patch ###', bdata_patch)
|
||||
with open(FN_install, 'w', newline = '\n') as file:
|
||||
file.write(ssh_install)
|
||||
FN_bdata_log = f'tmp/bdata_patch.log'
|
||||
fn_bdata_log = '/tmp/bdata_patch.log'
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
action = 'install'
|
||||
if len(sys.argv) > 1:
|
||||
@@ -94,6 +159,9 @@ if len(sys.argv) > 1:
|
||||
action = 'uninstall'
|
||||
|
||||
if action == 'install':
|
||||
if FN_bdata_log:
|
||||
gw.run_cmd(f"rm -f {fn_bdata_log}")
|
||||
gw.upload(FN_kmod, fn_kmod)
|
||||
gw.upload(FN_patch, fn_patch)
|
||||
gw.upload(FN_install, fn_install)
|
||||
|
||||
@@ -110,3 +178,12 @@ time.sleep(1.5)
|
||||
gw.run_cmd(f"rm -f {fn_patch} ; rm -f {fn_install} ; rm -f {fn_uninstall}")
|
||||
|
||||
print("Ready! The Permanent SSH patch installed.")
|
||||
|
||||
if FN_bdata_log:
|
||||
gw.download(fn_bdata_log, FN_bdata_log, verbose = 0)
|
||||
if not os.path.exists(FN_bdata_log):
|
||||
print(f'WARN: Patch for bdata partition not executed!')
|
||||
else:
|
||||
with open(FN_bdata_log, 'r') as file:
|
||||
res = file.read()
|
||||
print(f'Patch for bdata result: {res}')
|
||||
|
||||
Reference in New Issue
Block a user