print(pcall(function() local minitel = require "minitel" local port = 22 --local logfile = "/boot/termsrv.log" if logfile then local log = io.open(logfile,"a") os.setenv("t",log.fd) end local function nextvty() local vtyn = -1 repeat vtyn = vtyn + 1 until not fs.exists("/iofs/vty"..tostring(vtyn)) return "vty"..tostring(vtyn) end while true do local sock = minitel.listen(port) print(string.format("[%s] Connection from %s:%d",os.date("%Y-%m-%d %H:%M"),sock.addr,sock.port)) os.spawn(function() _G.worked = {pcall(function() local vtyf = nextvty() local fdo = {} function fdo.read(d) return sock:read(d) end function fdo.write(d) return sock:write(d) end function fdo.close() sock:close() end iofs.register(vtyf,function() return fdo.read, fdo.write, fdo.close end) local f = io.open("/iofs/"..vtyf,"rw") print(vtyf, f.fd) local ot = os.getenv("t") os.setenv("t",f.fd) sock:write(string.format("Connected to %s on port %d\n",computer.address():sub(1,8),sock.port)) local pid = spawnfile("/boot/exec/shell.lua",string.format("shell [%s:%d]",sock.addr,sock.port)) repeat coroutine.yield() until sock.state ~= "open" or not tTasks[pid] f:close() sock:close() os.kill(pid) os.setenv("t",ot) print(string.format("Session %s:%d ended",sock.addr,sock.port)) end)} end,string.format("remote login [%s:%d]",sock.addr,sock.port)) end end))