updated termsrv to basically work with the new rc system, added nc to netutil

This commit is contained in:
Izaya 2020-04-15 13:33:27 +10:00
parent ec5d938a64
commit e5dd91e167
2 changed files with 55 additions and 30 deletions

View File

@ -46,4 +46,26 @@ function netutil.ping(addr,times,timeout, silent) -- Request acknowledgment from
return success > 0, success, fail, avg return success > 0, success, fail, avg
end end
function netutil.nc(host,port)
port = port or 22
local socket = minitel.open(host,port)
if not socket then return false end
local b = ""
os.spawn(function()
repeat
local b = socket:read("*a")
if b and b:len() > 0 then
io.write(b)
end
coroutine.yield()
until socket.state ~= "open"
end)
repeat
local b = io.read()
if b and b:len() > 0 then
socket:write(b.."\n")
end
until socket.state ~= "open"
end
return netutil return netutil

View File

@ -1,10 +1,7 @@
print(pcall(function()
local minitel = require "minitel" local minitel = require "minitel"
local shell = require "shell"
local port = 22 local port = 22
--local logfile = "/boot/termsrv.log"
local oout = io.output()
local pname = os.taskInfo(os.pid()).name
local function sread(self, len) local function sread(self, len)
while true do while true do
local d=self.sock:read(len) local d=self.sock:read(len)
@ -31,30 +28,36 @@ local function sflush(self)
self.wb = "" self.wb = ""
self.flushing = false self.flushing = false
end end
while true do
local sock = minitel.listen(port) function start()
print(string.format("Connection from %s:%d",sock.addr,sock.port)) return os.spawn(function()
os.spawn(function() _G.worked = {pcall(function() local oout = io.output()
local fh = {} local pname = os.taskInfo(os.pid()).name
fh.sock = sock while true do
fh.read = sread local sock = minitel.listen(port)
fh.write = swrite print(string.format("Connection from %s:%d",sock.addr,sock.port))
fh.close = sclose os.spawn(function() _G.worked = {pcall(function()
fh.flush = sflush local fh = {}
fh.wb = "" fh.sock = sock
io.input(fh) fh.read = sread
io.output(fh) fh.write = swrite
fh:write(string.format("Connected to %s on port %d\n",os.getenv("HOSTNAME"),sock.port)) fh.close = sclose
local pid = os.spawnfile("/boot/exec/shell.lua") fh.flush = sflush
repeat fh.wb = ""
coroutine.yield() io.input(fh)
if fh.wb:len() > 0 then io.output(fh)
fh:flush() print(_OSVERSION.." - "..tostring(math.floor(computer.totalMemory()/1024)).."K RAM")
end local pid = os.spawn(shell.interactive,string.format(pname.." shell [%s:%d]",sock.addr,sock.port))
until sock.state ~= "open" or not os.taskInfo(pid) repeat
sock:close() coroutine.yield()
os.kill(pid) if fh.wb:len() > 0 then
oout:write(string.format("Session %s:%d ended",sock.addr,sock.port)) fh:flush()
end)} end,string.format(pname.." [%s:%d]",sock.addr,sock.port)) end
until sock.state ~= "open" or not os.taskInfo(pid)
sock:close()
os.kill(pid)
oout:write(string.format("Session %s:%d ended",sock.addr,sock.port))
end)} end,string.format(pname.." [%s:%d]",sock.addr,sock.port))
end
end,"termsrv")
end end
end))