Set ProgramData folder permissions for everyone

This commit is contained in:
Mark McDowall 2013-07-04 23:30:45 -07:00
parent c719b17ac0
commit 72fe0e74d7
2 changed files with 34 additions and 4 deletions

View File

@ -1,6 +1,8 @@
using System; using System;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Security.AccessControl;
using NLog;
namespace NzbDrone.Common.EnvironmentInfo namespace NzbDrone.Common.EnvironmentInfo
{ {
@ -24,12 +26,13 @@ namespace NzbDrone.Common.EnvironmentInfo
if (!_diskProvider.FolderExists(AppDataFolder)) if (!_diskProvider.FolderExists(AppDataFolder))
{ {
MigrateFromAppDate(); MigrateFromAppData();
}
} }
SetPermissions();
}
private void MigrateFromAppDate() private void MigrateFromAppData()
{ {
var oldAppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.DoNotVerify), "NzbDrone"); var oldAppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.DoNotVerify), "NzbDrone");
@ -43,6 +46,18 @@ namespace NzbDrone.Common.EnvironmentInfo
} }
} }
private void SetPermissions()
{
try
{
_diskProvider.SetPermissions(AppDataFolder, "Everyone", FileSystemRights.FullControl, AccessControlType.Allow);
}
catch (Exception ex)
{
//Todo: Add logging
}
}
public string AppDataFolder { get; private set; } public string AppDataFolder { get; private set; }
public string StartUpFolder { get; private set; } public string StartUpFolder { get; private set; }

View File

@ -2,6 +2,7 @@
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Security.AccessControl;
using NLog; using NLog;
using NzbDrone.Common.EnsureThat; using NzbDrone.Common.EnsureThat;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
@ -33,6 +34,7 @@ namespace NzbDrone.Common
void FolderSetLastWriteTimeUtc(string path, DateTime dateTime); void FolderSetLastWriteTimeUtc(string path, DateTime dateTime);
bool IsFileLocked(FileInfo file); bool IsFileLocked(FileInfo file);
string GetPathRoot(string path); string GetPathRoot(string path);
void SetPermissions(string filename, string account, FileSystemRights Rights, AccessControlType ControlType);
} }
public class DiskProvider : IDiskProvider public class DiskProvider : IDiskProvider
@ -83,7 +85,6 @@ namespace NzbDrone.Common
return new FileInfo(path).LastWriteTimeUtc; return new FileInfo(path).LastWriteTimeUtc;
} }
public virtual void EnsureFolder(string path) public virtual void EnsureFolder(string path)
{ {
if (!FolderExists(path)) if (!FolderExists(path))
@ -366,5 +367,19 @@ namespace NzbDrone.Common
return Path.GetPathRoot(path); return Path.GetPathRoot(path);
} }
public void SetPermissions(string filename, string account, FileSystemRights rights, AccessControlType controlType)
{
var directoryInfo = new DirectoryInfo(filename);
var directorySecurity = directoryInfo.GetAccessControl();
var accessRule = new FileSystemAccessRule(account, rights,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None, controlType);
directorySecurity.AddAccessRule(accessRule);
directoryInfo.SetAccessControl(directorySecurity);
}
} }
} }