-- sudo luarocks install luasocket
-- sudo apt install lua-socket
local socket=require("socket")
local server=assert(socket.bind("arkenidar.com",9999))
server:settimeout(0) -- for server:accept()
local ip,port=server:getsockname()
print("ncat".." "..ip.." "..port)
local clients={}
while true do -- don't exit
-- new client
local client_new,err=server:accept()
if client_new then
client_new:settimeout(0) -- for client:receive()
table.insert(clients,client_new)
end
-- clients
for i,client in ipairs(clients) do
--print(i.." receive...") -- debug info
local msg=client:receive()
if msg then
--print("received: "..msg) -- debug info
local filename=msg -- SECURITY concern: disallow opening some filenames!!!
local f,errmsg
function Set (list)
local set = {}
for _, l in ipairs(list) do set[l] = true end
return set
end
local allowed_files=Set{"sample1.txt","sample2.lua"}
if allowed_files[filename]==nil then
f,errmsg = nil,"filename not allowed"
else
f,errmsg = io.open(filename, "r")
end
local t
if f~=nil then
t = f:read("*all")
f:close()
else
t=errmsg
end
msg=t
client:send(msg) -- send back
client:close() -- send and close!
clients[i]=nil
end
end
end -- end while
server:close()