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());
}
///