public RecycleBinManager(IMailServerManagementApi api) { this.m_pApi = api; this.m_pTimer = new Timer(); this.m_pTimer.Interval = 3600000.0; this.m_pTimer.Elapsed += new ElapsedEventHandler(this.m_pTimer_Elapsed); this.m_pTimer.Enabled = true; this.m_LastCleanTime = DateTime.MinValue; }
public FetchPop3(VirtualServer server, IMailServerManagementApi api) { this.m_pServer = server; this.m_pApi = api; this.m_LastFetch = DateTime.Now.AddMinutes(-5.0); this.m_pTimer = new Timer(); this.m_pTimer.Interval = 15000.0; this.m_pTimer.Elapsed += new ElapsedEventHandler(this.m_pTimer_Elapsed); }
public static void RestoreFromRecycleBin(string messageID, IMailServerManagementApi api) { using (FileStream file = RecycleBinManager.GetFile()) { int num = 0; StreamLineReader streamLineReader = new StreamLineReader(file); long position = file.Position; for (string text = streamLineReader.ReadLineString(); text != null; text = streamLineReader.ReadLineString()) { if (!text.StartsWith("#")) { if (text.StartsWith("\0")) { num++; } else { string[] array = TextUtils.SplitQuotedString(text, ' '); if (array[0] == messageID) { string text2 = array[2]; string text3 = TextUtils.UnQuoteString(array[3]); using (FileStream fileStream = File.OpenRead(RecycleBinManager.m_RecycleBinPath + messageID + ".eml")) { if (!api.FolderExists(text2 + "/" + text3)) { api.CreateFolder("system", text2, text3); } api.StoreMessage("system", text2, text3, fileStream, DateTime.Now, new string[] { "Recent" }); } byte[] array2 = new byte[file.Position - position - 2L]; file.Position = position; file.Write(array2, 0, array2.Length); file.Position += 2L; num++; File.Delete(RecycleBinManager.m_RecycleBinPath + messageID + ".eml"); break; } } } position = file.Position; } if (num > 500) { RecycleBinManager.Vacuum(file); } } }
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); }