mirror of
https://github.com/openwrt-xiaomi/xmir-patcher.git
synced 2026-09-22 22:57:55 +03:00
gateway: Fix FTP server activation and check
This commit is contained in:
+54
-10
@@ -726,7 +726,8 @@ class Gateway():
|
||||
self.passw = passw
|
||||
ftp_en = self.check_tcp_connect(self.ip_addr, 21, contimeout = 1)
|
||||
if ftp_en:
|
||||
self.use_ftp = True
|
||||
if self.check_ftp() == 0:
|
||||
self.use_ftp = True
|
||||
return 23
|
||||
|
||||
def ssh_close(self):
|
||||
@@ -830,6 +831,33 @@ class Gateway():
|
||||
die("Can't login to TELNET (IP: {})".format(self.ip_addr))
|
||||
return None
|
||||
|
||||
def check_ftp(self, timeout = None):
|
||||
ret = -1
|
||||
if not timeout:
|
||||
timeout = self.timeout
|
||||
ftp = None
|
||||
try:
|
||||
ftp = ftplib.FTP(self.ip_addr, user=self.login, passwd=self.passw, timeout=timeout)
|
||||
ftp.voidcmd("NOOP")
|
||||
ret = 0
|
||||
except ftplib.error_proto as e:
|
||||
ret = -2
|
||||
if 'unrecognized option: w' in str(e):
|
||||
ret = -10
|
||||
except Exception:
|
||||
ret = -1
|
||||
finally:
|
||||
if ftp:
|
||||
try:
|
||||
ftp.quit()
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
ftp.close()
|
||||
except Exception:
|
||||
pass
|
||||
return ret
|
||||
|
||||
def get_ftp(self, verbose = 0):
|
||||
if self.ftp and self.ftp.sock:
|
||||
try:
|
||||
@@ -1052,16 +1080,32 @@ class Gateway():
|
||||
print('#### TelNet server are activated! ####')
|
||||
#print("")
|
||||
#print('Run FTP server on port 21 ...')
|
||||
self.run_cmd(r"rm -f /etc/inetd.conf")
|
||||
self.run_cmd(r"sed -i 's/\\tftpd\\t/\\tftpd -w\\t/g' /etc/init.d/inetd")
|
||||
self.run_cmd('/etc/init.d/inetd enable')
|
||||
self.run_cmd('/etc/init.d/inetd restart')
|
||||
self.use_ftp = True
|
||||
ftp_en = self.ping(verbose = 0)
|
||||
if ftp_en:
|
||||
print('#### FTP server are activated! ####')
|
||||
else:
|
||||
cmd = r'''#!/bin/sh /etc/rc.common
|
||||
SERVICE_DAEMONIZE=1
|
||||
SERVICE_WRITE_PID=1
|
||||
start() {
|
||||
service_start /usr/sbin/inetd -f
|
||||
}
|
||||
stop() {
|
||||
service_stop /usr/sbin/inetd
|
||||
}
|
||||
'''
|
||||
cmd = cmd.replace('\r\n', ';')
|
||||
cmd = cmd.replace('\n', ';')
|
||||
cfg = r'ftp\tstream\ttcp\tnowait\troot\t/usr/sbin/ftpd\tftpd -w\t/'
|
||||
self.run_cmd(r"echo -e '" + cfg + "' > /etc/inetd.conf")
|
||||
self.run_cmd(r"echo '" + cmd + "' | tr ';' '\n' > /etc/init.d/inetd")
|
||||
self.run_cmd(r"chmod +x /etc/init.d/inetd")
|
||||
self.run_cmd(r'/etc/init.d/inetd enable')
|
||||
self.run_cmd(r'/etc/init.d/inetd restart')
|
||||
ftp_en = self.check_ftp(timeout = 5)
|
||||
if ftp_en == -10:
|
||||
print(f'WARNING: FTP server is running, but upload mode is blocked!')
|
||||
elif ftp_en != 0:
|
||||
print(f"WARNING: FTP server not responding (IP: {self.ip_addr})")
|
||||
else:
|
||||
self.use_ftp = True
|
||||
print('#### FTP server are activated! ####')
|
||||
|
||||
if ssh_en or telnet_en:
|
||||
self.run_cmd('nvram set uart_en=1; nvram set boot_wait=on; nvram commit')
|
||||
|
||||
Reference in New Issue
Block a user