updated termsrv to basically work with the new rc system, added nc to netutil
This commit is contained in:
parent
ec5d938a64
commit
e5dd91e167
@ -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
|
||||||
|
@ -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))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user