1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142:
| library servuirc;
uses SysUtils, Classes, ddeman, inifiles;
const mIRCDDEServer : String = 'mIRC';
ExcludeOperator : Boolean = True; NickExclude : String = '';
mIRCNotifySuccess : Boolean = True; mIRCNotifyFault : Boolean = True;
SRVU_LoginMesFile = 1; SRVU_HomeDir = 2; SRVU_Password = 3; SRVU_IPAccess = 4; SRVU_WriteFile = 5; SRVU_ReadFile = 6; SRVU_ModifyFile = 7; SRVU_ExecProg = 8; SRVU_ListDir = 9; SRVU_ChangeDir = 10; SRVU_DeleteDir = 11; SRVU_CreateDir = 12; SRVU_HideHidden = 13; SRVU_RelPaths = 14; SRVU_RatioType = 15; SRVU_RatioDown = 16; SRVU_RatioUp = 17; SRVU_RatioCredit = 18; SRVU_RatioFree = 19; SRVU_QuotaEnable = 20; SRVU_QuotaChange = 21; SRVU_QuotaMax = 22; SRVU_AlwaysLogin = 23; SRVU_OneLoginPerIP = 24; SRVU_LogClientIP = 25; SRVU_SpeedLimit = 26; SRVU_PassChange = 27; SRVU_TimeOut = 28; SRVU_MaxUsers = 29; SRVU_PassChallenge = 30; SRVU_Connect = 31; SRVU_Close = 32; SRVU_MaxLoginPerIP = 33; SRVU_VerifyPasswd = 34; SRVU_AppendFile = 35; SRVU_SignOnMes = 36; SRVU_SignOffMes = 37; SRVU_Maintenance = 38; SRVU_SessionTimeOut= 39;
type RClientEventStr = record Event : integer; Flag : integer; User : Array[0..39] of char; Aux : Array[0..511] of char; HostIP : Array[0..15] of char; end;
Function VerifyPassword ( Var EventStruc : RClientEventStr ): integer; var ddeconv : TDdeClientConv; str1, str2, MyNick : String; begin result:=0; if EventStruc.Aux[0] <> #0 then begin ddeconv:=TDdeClientConv.Create(nil); ddeconv.ConnectMode:=ddeAutomatic; if ddeconv.SetLink(mIRCDDEServer,'COMMAND') then ddeconv.PokeData('COMMAND',PChar('/echo 5 -st FTP-Access validating L='+StrPas(EventStruc.User)+' P='+StrPas(EventStruc.Aux)));
ddeconv.SetLink(mIRCDDEServer,'CONNECTED'); if StrComp(ddeconv.RequestData('CONNECTED'),'connected') = 0 then begin ddeconv.SetLink(mIRCDDEServer,'NICKNAME'); MyNick:=StrPas(ddeconv.RequestData('NICKNAME')); if (StrIComp(PChar(MyNick),EventStruc.User) <> 0) or (ExcludeOperator = false) then begin ddeconv.SetLink(mIRCDDEServer,'USERS'); Str1:=UpperCase(StrPas(ddeconv.RequestData('#'+UpperCase(StrPas(EventStruc.Aux))))); while Pos('@',Str1) <> 0 do Delete(Str1,Pos('@',Str1),1); while Pos('+',Str1) <> 0 do Delete(Str1,Pos('+',Str1),1); Str1:=Str1+' '; Str2:=EventStruc.User;
if Pos(' '+Str2+' ',Str1) <> 0 then begin EventStruc.Flag:=1; result:=1; if mIRCNotifySuccess then begin if ddeconv.SetLink(mIRCDDEServer,'COMMAND') then ddeconv.PokeData('COMMAND',PChar('/echo 7 -at FTP-Access Granted: L='+StrPas(EventStruc.User)+' P='+StrPas(EventStruc.Aux))); end; end else begin EventStruc.Flag:=1; result:=0; if mIRCNotifyFault then begin if ddeconv.SetLink(mIRCDDEServer,'COMMAND') then ddeconv.PokeData('COMMAND',PChar('/echo 7 -at FTP-Access Denied: L='+StrPas(EventStruc.User)+' P='+StrPas(EventStruc.Aux)+' (wrong or not in channel)')); end; end; end; end; ddeconv.Free; end; end;
Function HandleClientEvent ( Var EventStruc: RclientEventStr ): Integer cdecl; var INIF : TIniFile; begin INIF:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'SERVUIRC.INI'); mIRCDDEServer:=INIF.ReadString('mIRC','DDEServer','mIRC'); ExcludeOperator:=INIF.ReadBool('mIRC','ExcludeOperator',True); mIRCNotifySuccess:=INIF.ReadBool('mIRC','mIRCNotifySuccess',True); mIRCNotifyFault:=INIF.ReadBool('mIRC','mIRCNotifyFault',False); NickExclude:=INIF.ReadString('mIRC','NickExclude',''); INIF.Free;
case EventStruc.Event of SRVU_Password : result:=VerifyPassword(EventStruc); else result:=0; end; end;
exports HandleClientEvent;
begin IsMultiThread:=True; end. |