PtokaX forum

Archive => Archived 5.1 boards => Conversion Requests => Topic started by: friend on 12 February, 2008, 21:05:22

Title: op security 2 (i tried convert tool but didnt work)
Post by: friend on 12 February, 2008, 21:05:22
hello guys. Pls help me for convert to this script. This script works without problems in Ptokax 0.3.6... But it gives error when using it in NEW API (0.4 betas) fatal. Please help me as hard as you can cose its realy importent for me. Thank you.
Your sincerly...




--[[ ======================================================== --

OpSecurity.v2
# Added: Checking of dynamic dns hosts, you need to place pxwsa.dll under libs directory
# Rmved: Writing dynip to disable the check on the user since its quite useless
# Chngd: Nearly rewrote the whole script structure to add more flexibility
# Added: Commands to add, delete or show stored entries and profile level check for commands
# Chngd: Ban type to tempban, sometimes it takes some time for hosts to be updated and we won't want
      to fully ban an op accidentally
- Statefully inspects connection attemps and blocks them
? if they weren't initialized by an operator, needed especially in passive connection attemps
? if they were initialized by an operator but remote user tries to connect after "iTimeout" seconds
- Makes the regarding operator invisible for the user who tried to connect as long as user's session in the hub
- Reports blocked attempts to all operators
- Detects nick spoofing in passive connection attempt

]]-- ======================================================== --

tSettings = {
-- Name of your bot
sBotsNm = frmHub:GetHubBotName(),
-- Mail adress of hub owner or anyone which are concerned with editing hosts
sMailAd = "mail.me@owner.of.this.hub",
-- Location of stored hosts
sFileNm = "OPSecurity.tbl",
-- Command strings
sAddCMD = "addophost",
sDelCMD = "delophost",
sShwCMD = "showophost",
-- Temp ban time in minutes if IP check fails
iTmpBan = 5,
-- Minimum profile level to access commands
iMinLvl = 5,
-- Profile levels (works with RoboCop and default settings, do not change unless you really need to)
tPrfLvl = {
[-1] = 0, -- Unreg Users
[0] = 5, -- Masters
[1] = 3, -- Operators
[2] = 2, -- VIPs
[3] = 1, -- Regs
[4] = 4, -- Moderators
[5] = 6, -- NetFounders
},
-- Timeout value for valid passive connection session from Op -> User
iTimeout = 30,
-- Temporary sessions table
tSession = {
},
}

-- Initializing WSA library
libinit = package.loadlib("PxWSA.dll", "_libinit")
libinit()

Main = function()
local FileHandle = io.open(tSettings.sFileNm)
if FileHandle then
FileHandle:close()
else
local FileHandle = io.open(tSettings.sFileNm, "w+")
FileHandle:write("tHosts = {\n}")
FileHandle:close()
end
tFunctions.LoadFromFile(tSettings.sFileNm)
SetTimer(1000)
StartTimer()
end

OnExit = function()
tFunctions.SaveToFile(tSettings.sFileNm, tHosts, "tHosts")
end

OnTimer = function()
for Key,Table in pairs(tSettings.tSession) do
for User,Time in pairs(Table) do
if (os.time() - Time) > tSettings.iTimeout then
tSettings.tSession[Key][User] = nil
end
end
end
end

OpConnected = function(curUser)
if tHosts[curUser.sName] then
local Name = curUser.sName
if ((tHosts[Name] == curUser.sIP)  or (WSA.GetHostByName(tHosts[Name]) == curUser.sIP)) then
curUser:SendPM(tSettings.sBotsNm,"IP denetiminden basari ile gectiniz. - You have passed the IP check.")
else
curUser:SendData(tSettings.sBotsNm,"\r\n\r\n\tIP denetiminden gecemediginiz icin guvenlik nedeniyle girisiniz bir sureligine engellenmistir.\r\n\tYou have failed the IP check and tempbanned for security reasons.\r\n")
SendToOps(tSettings.sBotsNm,Name.." isimli operat?r IP denetiminden gecemedigi icin guvenlik nedeniyle girisi bir sureligine engellenmistir.")
curUser:TempBan(tSettings.iTmpBan, "IP denetimi basarisizligi - IP check failed", tSettings.sBotsNm, 0)
curUser:Disconnect()
return 1
end
else
curUser:SendPM(tSettings.sBotsNm,"IP denetimini yapilamadi. L?tfen hub y?neticinize basvurun. - IP check couldn't be done. Please contact your hub administrator.")
end
end

OpDisconnected = function(curUser)
if tSettings.tSession[curUser.sName] then
tSettings.tSession[curUser.sName] = nil
end
end

ChatArrival = function(curUser, data)
curUser.SendMessage = curUser.SendData
return tFunctions.GetCommands(curUser, data)
end

ToArrival = function(curUser, data)
local s,e,to = string.find(data, "$To:%s+(%S+)%s+From:")
if to == tSettings.sBotsNm then
curUser.SendMessage = curUser.SendPM
return tFunctions.GetCommands(curUser, data)
end
end

ConnectToMeArrival = function(curUser, Data)
local _,_,sRemoteNick,sUsersIP,iUsersTCPPort = string.find(Data,"$ConnectToMe%s+(%S+)%s+(%d+%.%d+%.%d+%.%d+):(%d+)|")
if sRemoteNick then
local User = GetItemByName(sRemoteNick)
if User then
if User.bOperator and not curUser.bOperator then
if tSettings.tSession[sRemoteNick] and tSettings.tSession[sRemoteNick][curUser.sName] then
if ( os.time() - tSettings.tSession[sRemoteNick][curUser.sName] ) > tSettings.iTimeout then
curUser:SendData("$Quit "..sRemoteNick)
SendPmToOps(tSettings.sBotsNm,"Active connection attempt to our operator "..sRemoteNick.." was blocked and now "..sRemoteNick.." is invisible for \[  "..curUser.sName.."  ("..curUser.sIP..")  \]")
return 1
else
end
else
curUser:SendData("$Quit "..sRemoteNick)
SendPmToOps(tSettings.sBotsNm,"Active connection attempt to our operator "..sRemoteNick.." was blocked and now "..sRemoteNick.." is invisible for \[  "..curUser.sName.."  ("..curUser.sIP..")  \]")
return 1
end
end
end
end
end

RevConnectToMeArrival = function(curUser, Data)
local _,_,sUsersNick,sRemoteNick = string.find(Data,"$RevConnectToMe%s+(%S+)%s+(%S+)|")
if sRemoteNick then
local User = GetItemByName(sRemoteNick)
if User then
if sUsersNick == curUser.sName then
if curUser.bOperator then
tSettings.tSession[curUser.sName] = tSettings.tSession[curUser.sName] or {}
tSettings.tSession[curUser.sName][sRemoteNick] = os.time()
else
if User.bOperator then
curUser:SendData("$Quit "..sRemoteNick)
SendPmToOps(tSettings.sBotsNm,"Passive connection attempt to our operator "..sRemoteNick.." was blocked and now "..sRemoteNick.." is invisible for \[  "..curUser.sName.."  ("..curUser.sIP..")  \]")
return 1
end
end
else
curUser:SendData("$Quit "..sRemoteNick)
SendPmToOps(tSettings.sBotsNm,"*** Nick spoofing detected in passive connection attempt to our operator "..sRemoteNick.." from \[  "..curUser.sName.."  ("..curUser.sIP..")  \]")
SendPmToOps(tSettings.sBotsNm,"Passive connection attempt to our operator "..sRemoteNick.." was blocked and now "..sRemoteNick.." is invisible for \[  "..curUser.sName.."  ("..curUser.sIP..")  \]")
return 1
end
end
end
end

tCommands = {}
tCommands[tSettings.sAddCMD] = function(curUser, data)
local s,e,nick,arg  = string.find(data,"%b<>%s+%S+%s+(%S+)%s+(.*)")
if nick then
if arg then
if tHosts[nick] then
curUser:SendMessage(tSettings.sBotsNm, "Error: An entry for "..nick.." with IP/Host "..tHosts[nick].." is already in check list."..
" Delete it first if you want to modify this entry.")
else
tHosts[nick] = arg
tFunctions.SaveToFile(tSettings.sFileNm, tHosts, "tHosts")
curUser:SendMessage(tSettings.sBotsNm, "You have successfully added "..nick.." with IP/Host "..arg.." to check list.")
end
else
curUser:SendMessage(tSettings.sBotsNm, "Error: You have to enter a host (IP, DNS Host or just \"dynip\") Usage: !"..tSettings.sAddCMD.." <nick> <host>")
end
else
curUser:SendMessage(tSettings.sBotsNm, "Error: You have to enter a nick! Usage: !"..tSettings.sAddCMD.." <nick> <host>")
end
return 1
end

tCommands[tSettings.sDelCMD] = function(curUser, data)
local s,e,nick = string.find(data,"%b<>%s+%S+%s+(%S+)")
if nick then
if tHosts[nick] then
tHosts[nick] = nil
tFunctions.SaveToFile(tSettings.sFileNm, tHosts, "tHosts")
curUser:SendMessage(tSettings.sBotsNm, "You have successfully deleted "..nick.." from check list.")
else
curUser:SendMessage(tSettings.sBotsNm, "Error: There is no entry for "..nick.." in check list.")
end
else
curUser:SendMessage(tSettings.sBotsNm, "Error: You have to enter a nick! Usage: !"..tSettings.sDelCMD.." <nick>")
end
return 1
end

tCommands[tSettings.sShwCMD] = function(curUser, data)
local Listing,LoopCount = "",0
for i,v in pairs(tHosts) do
LoopCount = LoopCount + 1
Listing = Listing.."\r\n\t"..string.format("%02d",LoopCount)..". Nick: "..i.."\r\n\t      Host: "..v..""
end
if LoopCount ~= 0 then
local sMsg = "\r\n"..
"\t"..string.rep("_",50).."\r\n"..
"\tOP Security Host Check List\r\n"..
"\t"..string.rep("?",50)..""..
""..Listing.."\r\n"..
"\t"..string.rep("_",50).."\r\n"
curUser:SendMessage(tSettings.sBotsNm,sMsg)
else
local sMsg = "\r\n"..
"\t"..string.rep("_",50).."\r\n"..
"\tOP Security Host Check List\r\n"..
"\t"..string.rep("?",50)..""..
"\r\n\tNo entries found!\r\n"..
"\t"..string.rep("_",50).."\r\n"
curUser:SendMessage(tSettings.sBotsNm,sMsg)
end
return 1
end

tFunctions = {}
tFunctions.GetCommands = function(curUser, data)
local data = string.sub(data, 1, (string.len(data)-1))
local s,e,Command = string.find(data, "%b<>%s+%p(%S+)")
if Command and tCommands[Command] then
if tSettings.tPrfLvl[curUser.iProfile] >= tSettings.iMinLvl then
return tCommands[Command](curUser, data)
else
curUser:SendMessage(tSettings.sBotsNm, "Error: You are not allowed to use this command!")
end
return 1
end
end

tFunctions.Serialize = function(tTable, sTableName, sTab)
assert(tTable, "tTable equals nil");
assert(sTableName, "sTableName equals nil");
assert(type(tTable) == "table", "tTable must be a table!");
assert(type(sTableName) == "string", "sTableName must be a string!");
sTab = sTab or "";
sTmp = ""
sTmp = sTmp..sTab..sTableName.." = {\n"
for key, value in pairs(tTable) do
local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
if(type(value) == "table") then
sTmp = sTmp..tFunctions.Serialize(value, sKey, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
end
sTmp = sTmp..",\n"
end
sTmp = sTmp..sTab.."}"
return sTmp
end

tFunctions.SaveToFile = function(file , table , tablename)
local handle = io.open(file,"w+")
handle:write(tFunctions.Serialize(table, tablename))
handle:flush()
handle:close()
end

tFunctions.LoadFromFile = function(filename)
local f = io.open(filename)
if f then
local r = f:read("*a")
f:flush()
f:close()
local func,err = loadstring(r)
if func then x,err = pcall(func) end
end
end
Title: Re: op security 2 (i tried convert tool but didnt work)
Post by: bastya_elvtars on 12 February, 2008, 21:14:15
This script uses PXWSA so it won't work with the new API only by conversion. It needs to be rewritten.