diff --git a/Duplicati/Server/Database/Backup.cs b/Duplicati/Server/Database/Backup.cs
index c3808c004..269c11e60 100644
--- a/Duplicati/Server/Database/Backup.cs
+++ b/Duplicati/Server/Database/Backup.cs
@@ -18,6 +18,7 @@
using System;
using Duplicati.Server.Serialization.Interface;
using System.Collections.Generic;
+using System.Text.RegularExpressions;
namespace Duplicati.Server.Database
{
@@ -65,7 +66,7 @@ namespace Duplicati.Server.Database
///
public string[] Tags { get; set; }
///
- /// The backup target url, excluding username/password
+ /// The backup target url
///
public string TargetURL { get; set; }
///
@@ -98,6 +99,24 @@ namespace Duplicati.Server.Database
///
public bool IsTemporary { get { return ID == null ? false : ID.IndexOf("-", StringComparison.Ordinal) > 0; } }
+ ///
+ /// Sanitizes the backup TargetUrl
+ ///
+ public void SanitizeTargetUrl()
+ {
+ var url = this.TargetURL;
+ // Remove authid
+ url = Regex.Replace(url, "(!?authid)=[^&\n]+[&]?", "");
+ // remove auth-password
+ url = Regex.Replace(url, "(!?auth-password)=[^&\n]+[&]?", "");
+ // Remove edge case of '?&'
+ url = Regex.Replace(url, Regex.Escape("?&"), "");
+ // Remove edge case of '&' at end of line
+ url = Regex.Replace(url, "&$", "");
+ // Remove edge case of '?' at end of line
+ url = Regex.Replace(url, Regex.Escape("?"), "");
+ this.TargetURL = url;
+ }
}
}
diff --git a/Duplicati/Server/Duplicati.Server.Serialization/Interface/IBackup.cs b/Duplicati/Server/Duplicati.Server.Serialization/Interface/IBackup.cs
index e54ed5a9e..1330332d6 100644
--- a/Duplicati/Server/Duplicati.Server.Serialization/Interface/IBackup.cs
+++ b/Duplicati/Server/Duplicati.Server.Serialization/Interface/IBackup.cs
@@ -42,7 +42,7 @@ namespace Duplicati.Server.Serialization.Interface
///
string[] Tags { get; set; }
///
- /// The backup target url, excluding username/password
+ /// The backup target url
///
string TargetURL { get; set; }
///
@@ -74,6 +74,8 @@ namespace Duplicati.Server.Serialization.Interface
/// Gets a value indicating if this instance is not persisted to the database
///
bool IsTemporary { get; }
+
+ void SanitizeTargetUrl();
}
}
diff --git a/Duplicati/Server/WebServer/RESTMethods/Backup.cs b/Duplicati/Server/WebServer/RESTMethods/Backup.cs
index 0d73c8077..7ad204990 100644
--- a/Duplicati/Server/WebServer/RESTMethods/Backup.cs
+++ b/Duplicati/Server/WebServer/RESTMethods/Backup.cs
@@ -125,6 +125,7 @@ namespace Duplicati.Server.WebServer.RESTMethods
if (!exportPasswords)
{
backup.Settings = (Duplicati.Server.Serialization.Interface.ISetting[])backup.Settings.Where((setting) => !passwordFields.Contains(setting.Name)).ToArray();
+ backup.SanitizeTargetUrl();
}
if (cmdline)