From 62359d6d91dbfe98a4556830ea64a05c2e64fbcb Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Mon, 12 Jul 2010 22:28:29 +0000 Subject: [PATCH] =?UTF-8?q?Logger=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MailServer/DataBase/MysqlConnector.cs | 17 ++-- MailServer/DataBase/MysqlImap.cs | 32 +++++-- MailServer/Logger/EventLogger.cs | 90 +++++++++++++++++++ MailServer/MailServer.csproj | 1 + MailServer/Program.cs | 6 +- .../IMAP/Server/IMAP_Service.Events.cs | 12 ++- .../Services/IMAP/Server/IMAP_Service.cs | 5 +- 7 files changed, 147 insertions(+), 16 deletions(-) create mode 100644 MailServer/Logger/EventLogger.cs diff --git a/MailServer/DataBase/MysqlConnector.cs b/MailServer/DataBase/MysqlConnector.cs index 840581b..23f6493 100644 --- a/MailServer/DataBase/MysqlConnector.cs +++ b/MailServer/DataBase/MysqlConnector.cs @@ -1,5 +1,6 @@ -/*using System; -using System.Collections.Generic; +using System; +using System.Threading; +/*using System.Collections.Generic; using System.Linq; using System.Text;*/ using MySql.Data.MySqlClient; @@ -9,7 +10,7 @@ namespace MailServer.DataBase class MysqlConnector { private string server = "localhost"; - private string db = ""; + private string db = "mailserver"; private string user = "root"; private string pass = "mafia"; private MySqlConnection connection; @@ -20,6 +21,13 @@ namespace MailServer.DataBase "UID=" + user + ";" + "PASSWORD=" + pass + ";"; connection = new MySqlConnection(myConnectionString); + connection.Open(); + Thread waiter = new Thread(new ThreadStart(pinging)); + } + private void pinging() + { + connection.Ping(); + System.Threading.Thread.Sleep(1000*60*10); } ~MysqlConnector() { @@ -27,11 +35,10 @@ namespace MailServer.DataBase } public MySqlDataReader read(string sql) { + Console.WriteLine(sql); MySqlCommand command = connection.CreateCommand(); command.CommandText = sql; - connection.Open(); MySqlDataReader reader = command.ExecuteReader(); - connection.Close(); return reader; } } diff --git a/MailServer/DataBase/MysqlImap.cs b/MailServer/DataBase/MysqlImap.cs index 963f983..7dbc784 100644 --- a/MailServer/DataBase/MysqlImap.cs +++ b/MailServer/DataBase/MysqlImap.cs @@ -1,4 +1,6 @@ using System; +using System.Security.Cryptography; +using System.Text; /*using System.Collections.Generic; using System.Linq; using System.Text;*/ @@ -17,13 +19,21 @@ namespace MailServer.DataBase } public bool checkUser(string user, string pass) { - MySqlDataReader reader = mysql.read("SELECT `pass` FROM `users` WHERE `user` = '"+escape(user)+"';"); - if(!reader.HasRows) + pass = getMd5Hash(pass); + MySqlDataReader reader = mysql.read("SELECT `pass` FROM `users` WHERE `user` = '"+escape(user)+"'"); + if (!reader.HasRows) + { + reader.Close(); return false; - while(reader.Read()) { - if(reader.GetString(0) == pass) - return true; } + while(reader.Read()) { + if (reader.GetString(0).ToLower() == pass.ToLower()) + { + reader.Close(); + return true; + } + } + reader.Close(); return false; } @@ -38,5 +48,17 @@ namespace MailServer.DataBase return ""; } } + + static string getMd5Hash(string input) + { + MD5 md5Hasher = MD5.Create(); + byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); + StringBuilder sBuilder = new StringBuilder(); + foreach (byte s in data) + { + sBuilder.Append(s.ToString("x2")); + } + return sBuilder.ToString(); + } } } diff --git a/MailServer/Logger/EventLogger.cs b/MailServer/Logger/EventLogger.cs new file mode 100644 index 0000000..94c53e2 --- /dev/null +++ b/MailServer/Logger/EventLogger.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Diagnostics; + +namespace MailServer.Logger +{ + public enum EventType + { + Info, + Warning, + Error + } + public class EventLogger + { + private StreamWriter infolog; + private StreamWriter warninglog; + private StreamWriter errorlog; + private StreamWriter alllog; + public EventLogger() + { + infolog = new StreamWriter("logs\\info.log", true); + warninglog = new StreamWriter("logs\\warn.log", true); + errorlog = new StreamWriter("logs\\error.log", true); + alllog = new StreamWriter("logs\\all.log", true); + } + public void add(EventType e, string service, string msg) + { + StackFrame stack = new StackTrace().GetFrame(1); + switch (e) + { + case EventType.Info: + addInfo(stack, service, msg); + break; + case EventType.Warning: + addWarning(stack, service, msg); + break; + case EventType.Error: + addError(stack, service, msg); + break; + } + } + + private void addError(StackFrame stack, string service, string msg) + { + string stackstring = ""; + if (stack != null) + stackstring = stack.GetMethod() + ":" + stack.GetNativeOffset(); + string line = "ERROR: " + DateTime.Now.ToLocalTime().ToString() + " - [" + service + "] - " + stackstring + " - " + msg; + errorlog.WriteLine(line); + addAll(line); + } + + private void addWarning(StackFrame stack, string service, string msg) + { + string stackstring = ""; + if (stack != null) + stackstring = stack.GetMethod() + ":" + stack.GetNativeOffset(); + string line = "WARN: " + DateTime.Now.ToLocalTime().ToString() + " - [" + service + "] - " + stackstring + " - " + msg; + warninglog.WriteLine(line); + addAll(line); + } + + private void addInfo(StackFrame stack, string service, string msg) + { + string stackstring = ""; + if (stack != null) + stackstring = stack.GetMethod() + ":" + stack.GetNativeOffset(); + string line = "INFO: " + DateTime.Now.ToLocalTime().ToString() + " - [" + service + "] - " + stackstring + " - " + msg; + infolog.WriteLine(line); + addAll(line); + } + + private void addAll(string line) + { + alllog.WriteLine(line); + flushing(); + } + + private void flushing() + { + alllog.Flush(); + infolog.Flush(); + errorlog.Flush(); + warninglog.Flush(); + } + } +} diff --git a/MailServer/MailServer.csproj b/MailServer/MailServer.csproj index 4d821d0..e663d2d 100644 --- a/MailServer/MailServer.csproj +++ b/MailServer/MailServer.csproj @@ -50,6 +50,7 @@ + Code diff --git a/MailServer/Program.cs b/MailServer/Program.cs index 54943c1..acb935f 100644 --- a/MailServer/Program.cs +++ b/MailServer/Program.cs @@ -5,6 +5,7 @@ using System.ServiceProcess; using System.Text; using MailServer.Services; +using MailServer.Logger; namespace MailServer { @@ -15,18 +16,19 @@ namespace MailServer /// static void Main(string[] args) { + EventLogger logger = new EventLogger(); if (args.Length == 0) { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { - new IMAP_Service() + new IMAP_Service(logger) }; ServiceBase.Run(ServicesToRun); } else if (args.Length == 1 || args[0] == "-r") { - IMAP_Service imap_s = new IMAP_Service(); + IMAP_Service imap_s = new IMAP_Service(logger); imap_s.Start(args); while (true) { diff --git a/MailServer/Services/IMAP/Server/IMAP_Service.Events.cs b/MailServer/Services/IMAP/Server/IMAP_Service.Events.cs index e142ab3..a493ba1 100644 --- a/MailServer/Services/IMAP/Server/IMAP_Service.Events.cs +++ b/MailServer/Services/IMAP/Server/IMAP_Service.Events.cs @@ -6,6 +6,7 @@ using System.Text; using LumiSoft.Misc; using LumiSoft.Misc.SocketServer; using LumiSoft.IMAP.Server; +using MailServer.Logger; namespace MailServer.Services { @@ -13,8 +14,11 @@ namespace MailServer.Services { void server_AuthUser(object sender, AuthUser_EventArgs e) { + this.logger.add(EventType.Info, "IMAP", "Auth user: " + e.UserName); e.Validated = database.checkUser(e.UserName, e.PasswData); - Console.WriteLine(e.ToString()); + if (!e.Validated) + this.logger.add(EventType.Warning, "IMAP", "Auth User Failed: " + e.UserName); + //Console.WriteLine(e.ToString()); } @@ -115,7 +119,8 @@ namespace MailServer.Services void server_SysError(object sender, Error_EventArgs e) { - Console.WriteLine(e.ToString()); + logger.add(EventType.Error, "IMAP", e.Exception.ToString()); + //Console.WriteLine(e.ToString()); } void server_UnSubscribeFolder(object sender, Mailbox_EventArgs e) @@ -125,7 +130,8 @@ namespace MailServer.Services void server_ValidateIPAddress(object sender, ValidateIP_EventArgs e) { - Console.WriteLine(e.ToString()); + logger.add(EventType.Info, "IMAP", "ValidateIP: " + e.ConnectedIP); + //Console.WriteLine(e.ToString()); } } } diff --git a/MailServer/Services/IMAP/Server/IMAP_Service.cs b/MailServer/Services/IMAP/Server/IMAP_Service.cs index 0769873..ad42553 100644 --- a/MailServer/Services/IMAP/Server/IMAP_Service.cs +++ b/MailServer/Services/IMAP/Server/IMAP_Service.cs @@ -9,6 +9,7 @@ using System.Text; using LumiSoft.IMAP.Server; using MailServer.DataBase; +using MailServer.Logger; namespace MailServer.Services { @@ -16,9 +17,11 @@ namespace MailServer.Services { private IMAP_Server server; private MysqlImap database; + private EventLogger logger; - public IMAP_Service() + public IMAP_Service(EventLogger log) { + this.logger = log; InitializeComponent(); database = new MysqlImap(); putEvents();