#include <amxmodx>
#include <orpheu>
#define PLUGIN "File watcher"
#define VERSION "0.2"
#define AUTHOR "mazdan"
#define f "file_watcher.log"
new Array:aRule
new Array:aFile
new Array:aRuleType
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_srvcmd("fw_add_file","file_add",_,"fw_add_file <ACCEPT | BLOCK> <filename>")
register_srvcmd("fw_rules","show_rules")
aRule=ArrayCreate(1,32)
aRuleType=ArrayCreate(1,32)
aFile=ArrayCreate(128,32)
server_cmd("exec filewatcher.cfg")
OrpheuRegisterHook(OrpheuGetFunction("FS_Open"),"FS_Open", OrpheuHookPre)
}
public OrpheuHookReturn:FS_Open(test[],b[])
{
if(containi(b,"w")!=-1)
{
new rule
strtolower(test)
replace_all(test,strlen(test),"/","\")
new len=strlen(test)
new count=ArraySize(aFile)
for(new i;(i<count && !rule);i++)
{
new file[128]
ArrayGetString(aFile,i,file,127)
switch(ArrayGetCell(aRuleType,i))
{
case 0:if(equal(test,file)) rule=i+1
case 1:if(containi(test,file)==len-strlen(file)) rule=i+1
case 2:if(containi(test,file)==0) rule=i+1
case 3:if(containi(test,file)!=-1) rule=i+1
}
}
if(rule)
{
if(ArrayGetCell(aRule,--rule))
{
log_to_file(f,"Rule [#%d] ACCEPT %s",rule,test)
return OrpheuIgnored;
}
else
{
log_to_file(f,"Rule [#%d] BLOCK %s",rule,test)
return OrpheuSupercede;
}
}
else
{
log_to_file(f,"No rule BLOCK %s",test)
return OrpheuSupercede;
}
}
return OrpheuIgnored;
}
public file_add()
{
new rule[10]
new file[128]
read_argv(1,rule,9)
read_argv(2,file,127)
if(!equal(rule,"ACCEPT") && !equal(rule,"BLOCK"))
{
log_to_file(f,"RULE ADD ERROR use <ACCEPT | BLOCK>")
console_print(0,"RULE ADD ERROR use <ACCEPT | BLOCK>")
return PLUGIN_HANDLED;
}
if(strlen(file)<1)
{
log_to_file(f,"RULE ADD ERROR ^" ^" to specify filename")
console_print(0,"RULE ADD ERROR ^" ^" to specify filename")
return PLUGIN_HANDLED;
}
ArrayPushCell(aRule,equal(rule,"ACCEPT"))
ArrayPushCell(aRuleType,((file[0]==42) + 2*(file[strlen(file)-1]==42)) ) //Yep 42
replace_all(file,127,"*","")
replace_all(file,127,"/","\")
ArrayPushString(aFile,file)
return PLUGIN_HANDLED;
}
public show_rules()
{
if(!ArraySize(aFile))
console_print(0,"NO RULES FOUND!")
else
{
new count=ArraySize(aFile)
for(new i;i<count;i++)
{
new file[128]
ArrayGetString(aFile,i,file,127)
console_print(0,"[%d] %s %s%s%s",i,(ArrayGetCell(aRule,i))?"ACCEPT":"BLOCK",(ArrayGetCell(aRuleType,i) & 1)?"*":"",file,(ArrayGetCell(aRuleType,i) & 2)?"*":"")
}
}
}
Chce wgrac sobie file_watcher który zapobiegnie włamaniu ruskim hackiem i podczas kompilacji wywala mi blad:
Warning: Tag mismatch on line 91 Warning: Tag mismatch on line 91 Warning: Tag mismatch on line 109 Warning: Tag mismatch on line 109 4 Warnings. Done.
Jak to poprawic? Te linijki to:
91:
ArrayPushCell(aRuleType,((file[0]==42) + 2*(file[strlen(file)-1]==42)) ) //Yep 42
109
console_print(0,"[%d] %s %s%s%s",i,(ArrayGetCell(aRule,i))?"ACCEPT":"BLOCK",(ArrayGetCell(aRuleType,i) & 1)?"*":"",file,(ArrayGetCell(aRuleType,i) & 2)?"*":"")


Dodatki SourceMod














