From 0596215358c0859a648d346444957a42075befd8 Mon Sep 17 00:00:00 2001 From: Qstick Date: Fri, 30 Nov 2018 21:30:28 -0500 Subject: [PATCH] New: Prevent Boot Loop if Config file Unauthorized access. (#554) * New: Prevent Boot Loop if Config file Unauthorized access. * Update NzbDroneLogger.cs --- .../Instrumentation/NzbDroneLogger.cs | 8 ++++---- .../AccessDeniedConfigFileException.cs | 16 ++++++++++++++++ .../Configuration/ConfigFileProvider.cs | 19 ++++++++++++++++--- src/NzbDrone.Core/NzbDrone.Core.csproj | 1 + src/NzbDrone.Host/Bootstrap.cs | 4 ++++ 5 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 src/NzbDrone.Core/Configuration/AccessDeniedConfigFileException.cs diff --git a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs index bd092c301..d2c5e3293 100644 --- a/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs +++ b/src/NzbDrone.Common/Instrumentation/NzbDroneLogger.cs @@ -93,15 +93,15 @@ namespace NzbDrone.Common.Instrumentation if (updateClient) { dsn = RuntimeInfo.IsProduction - ? "https://40210a1318dd4182840c17230a1bef36:2432a6c304964372ac878179c6511811@sentry.io/209545" - : "https://edab7530cf9544dba1f86ac28aa0110b:b84a1425fc304f0188ef968576fe9690@sentry.io/227247"; + ? "https://f9238e093c75412b9351f80668a3a87c:a9392d355bd64cad80780a5279d9af82@sentry.io/209545" + : "https://28faaa7023384031b29e38d3be74fa11:829cdc25ebd34ad5a8c16aca920cb5b0@sentry.io/227247"; } else { dsn = RuntimeInfo.IsProduction - ? "https://40210a1318dd4182840c17230a1bef36:2432a6c304964372ac878179c6511811@sentry.io/209545" - : "https://edab7530cf9544dba1f86ac28aa0110b:b84a1425fc304f0188ef968576fe9690@sentry.io/227247"; + ? "https://f9238e093c75412b9351f80668a3a87c:a9392d355bd64cad80780a5279d9af82@sentry.io/209545" + : "https://28faaa7023384031b29e38d3be74fa11:829cdc25ebd34ad5a8c16aca920cb5b0@sentry.io/227247"; } var target = new SentryTarget(dsn) diff --git a/src/NzbDrone.Core/Configuration/AccessDeniedConfigFileException.cs b/src/NzbDrone.Core/Configuration/AccessDeniedConfigFileException.cs new file mode 100644 index 000000000..64b23a290 --- /dev/null +++ b/src/NzbDrone.Core/Configuration/AccessDeniedConfigFileException.cs @@ -0,0 +1,16 @@ +using System; +using NzbDrone.Common.Exceptions; + +namespace NzbDrone.Core.Configuration +{ + public class AccessDeniedConfigFileException : NzbDroneException + { + public AccessDeniedConfigFileException(string message) : base(message) + { + } + + public AccessDeniedConfigFileException(string message, Exception innerException) : base(message, innerException) + { + } + } +} diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 8c12a5334..6f316df4c 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -340,14 +340,27 @@ namespace NzbDrone.Core.Configuration { throw new InvalidConfigFileException($"{_configFile} is corrupt is invalid. Please delete the config file and Lidarr will recreate it.", ex); } + + catch (UnauthorizedAccessException ex) + { + throw new AccessDeniedConfigFileException($"Lidarr does not have access to config file: {_configFile}. Please fix permissions", ex); + } } private void SaveConfigFile(XDocument xDoc) { - lock (Mutex) + try + { + lock (Mutex) + { + _diskProvider.WriteAllText(_configFile, xDoc.ToString()); + } + } + catch (UnauthorizedAccessException ex) { - _diskProvider.WriteAllText(_configFile, xDoc.ToString()); + throw new AccessDeniedConfigFileException($"Lidarr does not have access to config file: {_configFile}. Please fix permissions", ex); } + } private string GenerateApiKey() diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 7347bc215..8a28cddc1 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -141,6 +141,7 @@ + diff --git a/src/NzbDrone.Host/Bootstrap.cs b/src/NzbDrone.Host/Bootstrap.cs index e5b6e8413..28a9be29b 100644 --- a/src/NzbDrone.Host/Bootstrap.cs +++ b/src/NzbDrone.Host/Bootstrap.cs @@ -54,6 +54,10 @@ namespace NzbDrone.Host { throw new LidarrStartupException(ex); } + catch (AccessDeniedConfigFileException ex) + { + throw new LidarrStartupException(ex); + } catch (TerminateApplicationException ex) { Logger.Info(ex.Message);