diff --git a/AssemblyVersion.cs b/AssemblyVersion.cs index 76c6f64..3c12491 100644 --- a/AssemblyVersion.cs +++ b/AssemblyVersion.cs @@ -16,5 +16,5 @@ using System.Reflection; // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("3.0.4.575")] -[assembly: AssemblyFileVersion("3.0.4.575")] \ No newline at end of file +[assembly: AssemblyVersion("3.0.4.576")] +[assembly: AssemblyFileVersion("3.0.4.576")] \ No newline at end of file diff --git a/Core/EmailTools.cs b/Core/EmailTools.cs index 9d1b93c..5529187 100644 --- a/Core/EmailTools.cs +++ b/Core/EmailTools.cs @@ -3,36 +3,39 @@ using System; using System.Configuration; using System.Net; using System.Net.Mail; +using System.Security.Principal; using System.Web; using System.Web.Security; using System.Web.UI; +using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; -using System.Web.UI.HtmlControls; using ScrewTurn.Wiki.PluginFramework; namespace ScrewTurn.Wiki { - /// - /// Implements email-related tools. - /// - public static class EmailTools { + /// + /// Implements email-related tools. + /// + public static class EmailTools { - /// - /// Sends an email. - /// - /// The recipient. - /// The sender. - /// The subject. - /// The message body. - /// true if the body is HTML. - public static void AsyncSendEmail(string recipient, string sender, string subject, string body, bool html) { + /// + /// Sends an email. + /// + /// The recipient. + /// The sender. + /// The subject. + /// The message body. + /// true if the body is HTML. + public static void AsyncSendEmail(string recipient, string sender, string subject, string body, bool html) { System.Threading.ThreadPool.QueueUserWorkItem(delegate(object state) { - MailMessage message = new MailMessage(sender, recipient, subject, body); - message.IsBodyHtml = html; - TrySendMessage(message); - }); - } + using(((WindowsIdentity)state).Impersonate()) { + MailMessage message = new MailMessage(sender, recipient, subject, body); + message.IsBodyHtml = html; + TrySendMessage(message); + } + }, WindowsIdentity.GetCurrent()); + } /// /// Tries to send a message, swallowing all exceptions. @@ -94,15 +97,17 @@ namespace ScrewTurn.Wiki { if(recipients.Length == 0) return; System.Threading.ThreadPool.QueueUserWorkItem(delegate(object state) { - MailMessage message = new MailMessage(new MailAddress(sender), new MailAddress(sender)); - message.Subject = subject; - message.Body = body; - for(int i = 0; i < recipients.Length; i++) { - message.Bcc.Add(new MailAddress(recipients[i])); + using(((WindowsIdentity)state).Impersonate()) { + MailMessage message = new MailMessage(new MailAddress(sender), new MailAddress(sender)); + message.Subject = subject; + message.Body = body; + for(int i = 0; i < recipients.Length; i++) { + message.Bcc.Add(new MailAddress(recipients[i])); + } + message.IsBodyHtml = html; + TrySendMessage(message); } - message.IsBodyHtml = html; - TrySendMessage(message); - }); + }, WindowsIdentity.GetCurrent()); } /// diff --git a/Core/StartupTools.cs b/Core/StartupTools.cs index a1ba0ff..4078c27 100644 --- a/Core/StartupTools.cs +++ b/Core/StartupTools.cs @@ -2,6 +2,7 @@ using System; using System.IO; using System.Resources; +using System.Security.Principal; using System.Web.Configuration; using ScrewTurn.Wiki.PluginFramework; @@ -192,24 +193,26 @@ namespace ScrewTurn.Wiki { Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername); - System.Threading.ThreadPool.QueueUserWorkItem(ignored => { - if((DateTime.Now - Settings.LastPageIndexing).TotalDays > 7) { - Settings.LastPageIndexing = DateTime.Now; - System.Threading.Thread.Sleep(10000); - using(MemoryStream ms = new MemoryStream()) { - using(StreamWriter wr = new System.IO.StreamWriter(ms)) { - System.Web.HttpContext.Current = new System.Web.HttpContext(new System.Web.Hosting.SimpleWorkerRequest("", "", wr)); - foreach(var provider in Collectors.PagesProviderCollector.AllProviders) { - if(!provider.ReadOnly) { - Log.LogEntry("Starting automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername); - provider.RebuildIndex(); - Log.LogEntry("Finished automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername); + System.Threading.ThreadPool.QueueUserWorkItem(state => { + using(((WindowsIdentity)state).Impersonate()) { + if((DateTime.Now - Settings.LastPageIndexing).TotalDays > 7) { + Settings.LastPageIndexing = DateTime.Now; + System.Threading.Thread.Sleep(10000); + using(MemoryStream ms = new MemoryStream()) { + using(StreamWriter wr = new System.IO.StreamWriter(ms)) { + System.Web.HttpContext.Current = new System.Web.HttpContext(new System.Web.Hosting.SimpleWorkerRequest("", "", wr)); + foreach(var provider in Collectors.PagesProviderCollector.AllProviders) { + if(!provider.ReadOnly) { + Log.LogEntry("Starting automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername); + provider.RebuildIndex(); + Log.LogEntry("Finished automatic rebuilding index for provider: " + provider.Information.Name, EntryType.General, Log.SystemUsername); + } } } } } } - }); + }, WindowsIdentity.GetCurrent()); } ///