public void StartFetching() { if (this.m_Fetching) { return; } this.m_Fetching = true; try { DataView users = this.m_pApi.GetUsers("ALL"); using (DataView userRemoteServers = this.m_pApi.GetUserRemoteServers("")) { foreach (DataRowView dataRowView in userRemoteServers) { try { if (ConvertEx.ToBoolean(dataRowView["Enabled"])) { users.RowFilter = "UserID='" + dataRowView["UserID"] + "'"; if (users.Count > 0) { string userName = users[0]["UserName"].ToString(); string host = dataRowView.Row["RemoteServer"].ToString(); int port = Convert.ToInt32(dataRowView.Row["RemotePort"]); string user = dataRowView.Row["RemoteUserName"].ToString(); string password = dataRowView.Row["RemotePassword"].ToString(); bool ssl = ConvertEx.ToBoolean(dataRowView["UseSSL"]); using (POP3_Client pOP3_Client = new POP3_Client()) { pOP3_Client.Logger = new System.NetworkToolkit.Log.Logger(); pOP3_Client.Logger.WriteLog += new EventHandler <WriteLogEventArgs>(this.Pop3_WriteLog); pOP3_Client.Connect(host, port, ssl); pOP3_Client.Login(user, password); foreach (POP3_ClientMessage pOP3_ClientMessage in pOP3_Client.Messages) { this.m_pServer.ProcessUserMsg("", "", userName, "Inbox", new MemoryStream(pOP3_ClientMessage.MessageToByte()), null); pOP3_ClientMessage.MarkForDeletion(); } } } } } catch { } } } this.m_LastFetch = DateTime.Now; } catch (Exception x) { Error.DumpError(this.m_pServer.Name, x); } this.m_Fetching = false; }
internal void LoadVirtualServers() { try { DataSet dataSet = new DataSet(); dataSet.Tables.Add("Servers"); dataSet.Tables["Servers"].Columns.Add("ID"); dataSet.Tables["Servers"].Columns.Add("Enabled"); dataSet.Tables["Servers"].Columns.Add("Name"); dataSet.Tables["Servers"].Columns.Add("API_assembly"); dataSet.Tables["Servers"].Columns.Add("API_class"); dataSet.Tables["Servers"].Columns.Add("API_initstring"); this.ReadXmlSetting(dataSet, "LocalServers", "Servers"); if (dataSet.Tables.Contains("Servers")) { for (int i = 0; i < this.m_pVirtualServers.Count; i++) { VirtualServer virtualServer = this.m_pVirtualServers[i]; bool flag = false; foreach (DataRow dataRow in dataSet.Tables["Servers"].Rows) { if (virtualServer.ID == dataRow["ID"].ToString()) { flag = true; break; } } if (!flag) { virtualServer.Stop(); this.m_pVirtualServers.Remove(virtualServer); i--; } } foreach (DataRow dataRow2 in dataSet.Tables["Servers"].Rows) { bool flag2 = false; foreach (VirtualServer current in this.m_pVirtualServers) { if (current.ID == dataRow2["ID"].ToString()) { flag2 = true; current.Enabled = ConvertEx.ToBoolean(dataRow2["Enabled"], true); break; } } if (!flag2) { string id = dataRow2["ID"].ToString(); string name = dataRow2["Name"].ToString(); string assembly = dataRow2["API_assembly"].ToString(); string typeName = dataRow2["API_class"].ToString(); string text = dataRow2["API_initstring"].ToString(); IMailServerManagementApi api = this.LoadApi(assembly, typeName, text); VirtualServer virtualServer2 = new VirtualServer(this, id, name, text, api); virtualServer2.Owner = this; this.m_pVirtualServers.Add(virtualServer2); virtualServer2.Enabled = ConvertEx.ToBoolean(dataRow2["Enabled"], true); } } } } catch (Exception x) { Error.DumpError(x); } }
public bool Filter(string from, IMailServerManagementApi api, SMTP_Session session, out string errorText) { errorText = null; bool result = true; if (session.IsAuthenticated || this.IsPrivateIP(session.RemoteEndPoint.Address)) { return(true); } try { DataSet dataSet = new DataSet(); dataSet.Tables.Add("General"); dataSet.Tables["General"].Columns.Add("CheckHelo"); dataSet.Tables["General"].Columns.Add("LogRejections"); dataSet.Tables.Add("BlackListSettings"); dataSet.Tables["BlackListSettings"].Columns.Add("ErrorText"); dataSet.Tables.Add("BlackList"); dataSet.Tables["BlackList"].Columns.Add("IP"); dataSet.Tables.Add("Servers"); dataSet.Tables["Servers"].Columns.Add("Cost"); dataSet.Tables["Servers"].Columns.Add("Server"); dataSet.Tables["Servers"].Columns.Add("DefaultRejectionText"); dataSet.ReadXml(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\DnsBlackList.xml"); bool flag = false; if (dataSet.Tables["General"].Rows.Count == 1) { if (Convert.ToBoolean(dataSet.Tables["General"].Rows[0]["CheckHelo"])) { DnsServerResponse dnsServerResponse = Dns_Client.Static.Query(session.EhloHost, DNS_QType.A); if (dnsServerResponse.ConnectionOk && dnsServerResponse.ResponseCode != DNS_RCode.SERVER_FAILURE) { bool flag2 = false; DNS_rr_A[] aRecords = dnsServerResponse.GetARecords(); for (int i = 0; i < aRecords.Length; i++) { DNS_rr_A dNS_rr_A = aRecords[i]; if (session.RemoteEndPoint.Address.Equals(dNS_rr_A.IP)) { flag2 = true; break; } } if (!flag2) { errorText = "Not valid DNS EHLO/HELO name for your IP '" + session.EhloHost + "' !"; bool result2 = false; return(result2); } } } flag = ConvertEx.ToBoolean(dataSet.Tables["General"].Rows[0]["LogRejections"]); } foreach (DataRow dataRow in dataSet.Tables["BlackList"].Rows) { if (this.IsAstericMatch(dataRow["IP"].ToString(), session.RemoteEndPoint.Address.ToString())) { errorText = dataSet.Tables["BlackListSettings"].Rows[0]["ErrorText"].ToString(); bool result2 = false; return(result2); } } foreach (DataRow dataRow2 in dataSet.Tables["Servers"].Rows) { DnsServerResponse dnsServerResponse2 = Dns_Client.Static.Query(this.ReverseIP(session.RemoteEndPoint.Address) + "." + dataRow2["Server"].ToString(), DNS_QType.ANY); DNS_rr_A[] aRecords2 = dnsServerResponse2.GetARecords(); if (aRecords2.Length > 0) { if (flag) { this.WriteFilterLog(string.Concat(new string[] { "Sender:", from, " IP:", session.RemoteEndPoint.Address.ToString(), " blocked\r\n" })); } errorText = dataRow2["DefaultRejectionText"].ToString(); if (dnsServerResponse2.GetTXTRecords().Length > 0) { errorText = dnsServerResponse2.GetTXTRecords()[0].Text; } if (errorText == "") { errorText = "You are in '" + dataRow2["Server"].ToString() + "' rejection list !"; } bool result2 = false; return(result2); } } } catch { } return(result); }
public FilterResult Filter(Stream messageStream, out Stream filteredStream, string sender, string[] recipients, IMailServerManagementApi api, SMTP_Session session, out string errorText) { errorText = null; filteredStream = null; string text = PathHelper.PathFix(Path.GetTempPath() + "\\" + Guid.NewGuid().ToString() + ".eml"); try { using (FileStream fileStream = File.Create(text)) { byte[] array = new byte[messageStream.Length]; messageStream.Read(array, 0, array.Length); fileStream.Write(array, 0, array.Length); } DataSet dataSet = new DataSet(); dataSet.Tables.Add("Settings"); dataSet.Tables["Settings"].Columns.Add("Program"); dataSet.Tables["Settings"].Columns.Add("Arguments"); dataSet.Tables["Settings"].Columns.Add("VirusExitCode"); dataSet.ReadXml(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\VirusScan.xml"); string fileName = dataSet.Tables["Settings"].Rows[0]["Program"].ToString(); string arguments = dataSet.Tables["Settings"].Rows[0]["Arguments"].ToString().Replace("#FileName", text); int num = ConvertEx.ToInt32(dataSet.Tables["Settings"].Rows[0]["Program"], 1); int num2 = 0; Process process = Process.Start(new ProcessStartInfo(fileName, arguments) { CreateNoWindow = true, UseShellExecute = false }); if (process != null) { process.WaitForExit(60000); num2 = process.ExitCode; } if (File.Exists(text)) { using (FileStream fileStream2 = File.OpenRead(text)) { byte[] array2 = new byte[fileStream2.Length]; fileStream2.Read(array2, 0, array2.Length); filteredStream = new MemoryStream(array2); } File.Delete(text); } else { num = num2; } if (num == num2) { errorText = "Message is blocked, contains virus !"; return(FilterResult.Error); } } catch (Exception ex) { string arg_243_0 = ex.Message; filteredStream = messageStream; } finally { if (File.Exists(text)) { File.Delete(text); } } return(FilterResult.Store); }