diff --git a/XenAdmin/Alerts/Types/CertificateAlert.cs b/XenAdmin/Alerts/Types/CertificateAlert.cs index e29ddc1d7..6b2786b05 100644 --- a/XenAdmin/Alerts/Types/CertificateAlert.cs +++ b/XenAdmin/Alerts/Types/CertificateAlert.cs @@ -30,7 +30,6 @@ */ using System; -using System.Linq; using System.Xml; using XenAdmin.Commands; using XenAdmin.Core; @@ -41,14 +40,11 @@ namespace XenAdmin.Alerts { public class CertificateAlert : MessageAlert { - private readonly Host _host; private readonly DateTime? _certificateExpiryDate; public CertificateAlert(Message m) : base(m) { - _host = m.Connection.Cache.Hosts.FirstOrDefault(h => h.uuid == m.obj_uuid); - try { var doc = new XmlDocument(); @@ -70,8 +66,57 @@ namespace XenAdmin.Alerts { switch (Message.Type) { + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRED: + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRED_TITLE, XenObject.Name()); + + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_07: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_14: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_30: + if (_certificateExpiryDate.HasValue && _certificateExpiryDate.Value > Timestamp) + { + var eta = _certificateExpiryDate.Value - Timestamp; + + if (eta.TotalDays >= 1) + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRING_TITLE_DAYS, XenObject.Name(), + Math.Round(eta.TotalDays, MidpointRounding.AwayFromZero)); + + if (eta.TotalHours >= 1) + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRING_TITLE_HOURS, XenObject.Name(), + Math.Round(eta.TotalHours, MidpointRounding.AwayFromZero)); + + if (eta.TotalMinutes >= 1) + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRING_TITLE_MINUTES, XenObject.Name(), + Math.Round(eta.TotalMinutes, MidpointRounding.AwayFromZero)); + } + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRED_TITLE, XenObject.Name()); + + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRED: + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_TITLE, XenObject.Name()); + + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_07: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_14: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_30: + if (_certificateExpiryDate.HasValue && _certificateExpiryDate.Value > Timestamp) + { + var eta = _certificateExpiryDate.Value - Timestamp; + + if (eta.TotalDays >= 1) + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_DAYS, XenObject.Name(), + Math.Round(eta.TotalDays, MidpointRounding.AwayFromZero)); + + if (eta.TotalHours >= 1) + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_HOURS, XenObject.Name(), + Math.Round(eta.TotalHours, MidpointRounding.AwayFromZero)); + + if (eta.TotalMinutes >= 1) + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_MINUTES, XenObject.Name(), + Math.Round(eta.TotalMinutes, MidpointRounding.AwayFromZero)); + } + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_TITLE, XenObject.Name()); + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRED: - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRED_TITLE, _host.Name()); + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRED_TITLE, XenObject.Name()); + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_07: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_14: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_30: @@ -80,19 +125,19 @@ namespace XenAdmin.Alerts var eta = _certificateExpiryDate.Value - Timestamp; if (eta.TotalDays >= 1) - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRING_TITLE_DAYS, _host.Name(), + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_DAYS, XenObject.Name(), Math.Round(eta.TotalDays, MidpointRounding.AwayFromZero)); if (eta.TotalHours >= 1) - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRING_TITLE_HOURS, _host.Name(), + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_HOURS, XenObject.Name(), Math.Round(eta.TotalHours, MidpointRounding.AwayFromZero)); if (eta.TotalMinutes >= 1) - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRING_TITLE_MINUTES, _host.Name(), + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_MINUTES, XenObject.Name(), Math.Round(eta.TotalMinutes, MidpointRounding.AwayFromZero)); } + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRED_TITLE, XenObject.Name()); - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRED_TITLE, _host.Name()); default: return base.Title; } @@ -104,18 +149,38 @@ namespace XenAdmin.Alerts { get { - if (_host == null) + if (XenObject == null) return base.Title; switch (Message.Type) { + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRED: + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRED_DESCIRPTION, XenObject.Name(), GetExpiryDate()); + + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_07: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_14: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_30: + return string.Format(Messages.CERTIFICATE_CA_ALERT_EXPIRING_DESCRIPTION, + XenObject.Name(), GetExpiryDate()); + + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRED: + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_DESCIRPTION, XenObject.Name(), GetExpiryDate()); + + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_07: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_14: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_30: + return string.Format(Messages.CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_DESCRIPTION, + XenObject.Name(), GetExpiryDate()); + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRED: - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRED_DESCIRPTION, _host.Name(), GetExpiryDate()); + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRED_DESCIRPTION, XenObject.Name(), GetExpiryDate()); + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_07: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_14: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_30: - return string.Format(Messages.CERTIFICATE_ALERT_EXPIRING_DESCRIPTION, - _host.Name(), GetExpiryDate()); + return string.Format(Messages.CERTIFICATE_HOST_ALERT_EXPIRING_DESCRIPTION, + XenObject.Name(), GetExpiryDate()); + default: return base.Title; } @@ -126,14 +191,44 @@ namespace XenAdmin.Alerts { get { - var cmd = new InstallCertificateCommand(Program.MainWindow, XenObject as Host); - if (cmd.CanExecute()) - return () => cmd.Execute(); - return null; + if (!(XenObject is Host host)) + return null; + + switch (Message.Type) + { + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRED: + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_07: + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_14: + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_30: + var cmd = new InstallCertificateCommand(Program.MainWindow, host); + if (cmd.CanExecute()) + return () => cmd.Execute(); + return null; + default: + return null; + } } } - public override string FixLinkText => Messages.INSTALL_SERVER_CERTIFICATE_ACTION_LINK; + public override string FixLinkText + { + get + { + if (!(XenObject is Host)) + return null; + + switch (Message.Type) + { + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRED: + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_07: + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_14: + case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_30: + return Messages.INSTALL_SERVER_CERTIFICATE_ACTION_LINK; + default: + return null; + } + } + } public override string HelpID => "CertificateAlert"; diff --git a/XenAdmin/Alerts/Types/FailedLoginAttemptAlert.cs b/XenAdmin/Alerts/Types/FailedLoginAttemptAlert.cs new file mode 100644 index 000000000..841a70f0d --- /dev/null +++ b/XenAdmin/Alerts/Types/FailedLoginAttemptAlert.cs @@ -0,0 +1,218 @@ +/* Copyright (c) Citrix Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, + * with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using XenAdmin.Core; +using XenAPI; + + +namespace XenAdmin.Alerts +{ + public class FailedLoginAttemptAlert : MessageAlert + { + private readonly Pool _pool; + private readonly int _total; + private readonly int _unknown; + private readonly List _topOffenders = new List(); + + public FailedLoginAttemptAlert(Message m) + : base(m) + { + _pool = m.Connection.Cache.Pools.FirstOrDefault(p => p.uuid == m.obj_uuid); + + try + { + /* - Total and unknown are optional (unknown being absent implies that all the failed + logins came from known sources, and conversely total being absent implies that all + the failed logins came from unknown sources). + - There may be 0 or more known tags. + - Each known tag must contain date and number, but the other tags (ip, originator, + username, useragent) are all optional (though we expect at least one) */ + + var doc = new XmlDocument(); + doc.LoadXml(m.body); + + var totalNodes = doc.GetElementsByTagName("total"); + if (totalNodes.Count > 0) + int.TryParse(totalNodes[0].InnerText, out _total); + + var unknownNodes = doc.GetElementsByTagName("unknown"); + if (unknownNodes.Count > 0) + int.TryParse(unknownNodes[0].InnerText, out _unknown); + + var knownNodes = doc.GetElementsByTagName("known"); + foreach (XmlNode node in knownNodes) + { + var offender = new Offender(); + + foreach (XmlNode child in node.ChildNodes) + { + switch (child.Name) + { + case "number": + if (int.TryParse(child.InnerText, out var number)) + offender.Number = number; + break; + case "date": + if (Util.TryParseIso8601DateTime(child.InnerText, out var date)) + offender.Date = date; + break; + case "ip": + offender.Ip = child.InnerText; + break; + case "originator": + offender.Originator = child.InnerText; + break; + case "username": + offender.Username = child.InnerText; + break; + case "useragent": + offender.Useragent = child.InnerText; + break; + } + } + + _topOffenders.Add(offender); + } + } + catch + { + //ignore + } + } + + public override string Title => _pool == null + ? base.Title + : string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_TITLE, _pool.Name()); + + public override string Description + { + get + { + if (_total == 0 && _unknown > 0) + return string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_ALL_UNKNOWN, _unknown); + + var sb = new StringBuilder(); + + if (_total > 0) + sb.AppendLine(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_TOTAL, _total)); + + if (_unknown > 0) + sb.AppendLine(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_UNKNOWN, _unknown)); + + if (_topOffenders.Count > 0) + { + sb.AppendLine(Messages.ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_COMMON); + + foreach (var offender in _topOffenders) + sb.AppendLine(offender.ToString()); + } + + return sb.Length > 0 ? sb.ToString() : base.Title; + } + } + + public override Action FixLinkAction => null; + + public override string FixLinkText => null; + + public override string HelpID => "FailedLoginAttemptAlert"; + + public override string HelpLinkText => Messages.ALERT_GENERIC_HELP; + + + private class Offender + { + /// + /// Number of failed login attempts from this offender + /// + public int Number { get; set; } + + /// + /// DateTime of last failed login attempt from this offender + /// + public DateTime? Date { private get; set;} + + /// + /// Offender IP address + /// + public string Ip { get; set;} + + public string Originator { get; set;} + public string Username { get; set;} + public string Useragent { get; set;} + + private string GetFriendlyDate() + { + string date = string.Empty; + + Program.Invoke(Program.MainWindow, + () => + { + if (Date.HasValue) + date = HelpersGUI.DateTimeToString(Date.Value.ToLocalTime(), Messages.DATEFORMAT_DMY_HM, true); + }); + + return date; + } + + public override string ToString() + { + var entries = new List(); + + if (!string.IsNullOrEmpty(Ip)) + entries.Add(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_IP, Ip)); + + if (Number > 0) + entries.Add(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_NUMBER, Number)); + + var friendlyDate = GetFriendlyDate(); + if (!string.IsNullOrEmpty(friendlyDate)) + entries.Add(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_DATE, friendlyDate)); + + if (!string.IsNullOrEmpty(Username)) + entries.Add(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_USERNAME, Username)); + + if (!string.IsNullOrEmpty(Originator)) + entries.Add(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_ORIGINATOR, Originator)); + + if (!string.IsNullOrEmpty(Useragent)) + entries.Add(string.Format(Messages.ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_USERAGENT, Useragent)); + + return $"- {string.Join(", ", entries)}"; + } + } + } +} diff --git a/XenAdmin/Alerts/Types/MessageAlert.cs b/XenAdmin/Alerts/Types/MessageAlert.cs index 61013143d..df8496600 100644 --- a/XenAdmin/Alerts/Types/MessageAlert.cs +++ b/XenAdmin/Alerts/Types/MessageAlert.cs @@ -151,6 +151,7 @@ namespace XenAdmin.Alerts case Message.MessageType.CLUSTER_HOST_FENCING: case Message.MessageType.CLUSTER_HOST_ENABLE_FAILED: case Message.MessageType.VM_SECURE_BOOT_FAILED: + case Message.MessageType.TLS_VERIFICATION_EMERGENCY_DISABLED: if (XenObject != null) return string.Format(FriendlyFormat(), Helpers.GetName(XenObject)); break; @@ -368,6 +369,7 @@ namespace XenAdmin.Alerts if (repairSrCommand.CanExecute()) return () => repairSrCommand.Execute(); return null; + default: return null; } @@ -476,11 +478,22 @@ namespace XenAdmin.Alerts case Message.MessageType.VMSS_SNAPSHOT_LOCK_FAILED: return new PolicyAlert(msg); + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRED: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_07: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_14: + case Message.MessageType.POOL_CA_CERTIFICATE_EXPIRING_30: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRED: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_07: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_14: case Message.MessageType.HOST_SERVER_CERTIFICATE_EXPIRING_30: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRED: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_07: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_14: + case Message.MessageType.HOST_INTERNAL_CERTIFICATE_EXPIRING_30: return new CertificateAlert(msg); + + case Message.MessageType.FAILED_LOGIN_ATTEMPTS: + return new FailedLoginAttemptAlert(msg); default: // For all other kinds of alert return new MessageAlert(msg); diff --git a/XenAdmin/XenAdmin.csproj b/XenAdmin/XenAdmin.csproj index 77f4b04cd..eee4682d6 100755 --- a/XenAdmin/XenAdmin.csproj +++ b/XenAdmin/XenAdmin.csproj @@ -99,6 +99,7 @@ + diff --git a/XenModel/FriendlyNames.Designer.cs b/XenModel/FriendlyNames.Designer.cs index ac88832d4..75f61fb43 100644 --- a/XenModel/FriendlyNames.Designer.cs +++ b/XenModel/FriendlyNames.Designer.cs @@ -4040,6 +4040,15 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to Certificate verification is enabled on the pool, but overriden on server '{0}'.. + /// + public static string Message_body_tls_verification_emergency_disabled { + get { + return ResourceManager.GetString("Message.body-tls_verification_emergency_disabled", resourceCulture); + } + } + /// /// Looks up a localized string similar to Quality of Service settings for disk '{0}' on virtual machine '{1}' could not be obeyed.. /// @@ -4850,6 +4859,15 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to Certificate verification is disabled.. + /// + public static string Message_name_tls_verification_emergency_disabled { + get { + return ResourceManager.GetString("Message.name-tls_verification_emergency_disabled", resourceCulture); + } + } + /// /// Looks up a localized string similar to An unknown error occurred when reclaiming freed space. /// diff --git a/XenModel/FriendlyNames.resx b/XenModel/FriendlyNames.resx index 9c74ecf1c..681086be6 100644 --- a/XenModel/FriendlyNames.resx +++ b/XenModel/FriendlyNames.resx @@ -1076,6 +1076,9 @@ A license for {0} could not be checked-out because the license server could not be reached at the given address and port. Please check the connection details, and verify that the license server is running. + + Certificate verification is enabled on the pool, but overriden on server '{0}'. + Pool '{0}' is unable to access the HA metadata disk. Until access is restored changes to the pool metadata may be lost in the event of an HA failover. @@ -1304,6 +1307,9 @@ The license server could not be reached. + + Certificate verification is disabled. + Lost access to HA metadata disk diff --git a/XenModel/Messages.Designer.cs b/XenModel/Messages.Designer.cs index 35f2fe8d9..0d3df0673 100755 --- a/XenModel/Messages.Designer.cs +++ b/XenModel/Messages.Designer.cs @@ -5012,6 +5012,105 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to All {0} attempts originated from unknown sources.. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_ALL_UNKNOWN { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_ALL_UNKNOWN", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The most common attempts originated from the following sources:. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_COMMON { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_COMMON", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There has been a total of {0} failed login attempts.. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_TOTAL { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_TOTAL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} attempts originated from unknown sources.. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_UNKNOWN { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_DESCRIPTION_UNKNOWN", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Last attempt on: {0}. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_DATE { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_DATE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IP address: {0}. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_IP { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_IP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Number of attempts: {0}. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_NUMBER { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_NUMBER", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Originator: {0}. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_ORIGINATOR { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_ORIGINATOR", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to User agent: {0}. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_USERAGENT { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_USERAGENT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Username: {0}. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_USERNAME { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_OFFENDER_USERNAME", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There has been a number of failed attempts to login to '{0}' within the past hour.. + /// + public static string ALERT_FAILED_LOGIN_ATTEMPT_TITLE { + get { + return ResourceManager.GetString("ALERT_FAILED_LOGIN_ATTEMPT_TITLE", resourceCulture); + } + } + /// /// Looks up a localized string similar to Help. /// @@ -6961,56 +7060,56 @@ namespace XenAdmin { } /// - /// Looks up a localized string similar to The TLS certificate of server '{0}' expired on {1}.. + /// Looks up a localized string similar to The trusted CA certificate of '{0}' expired on {1}.. /// - public static string CERTIFICATE_ALERT_EXPIRED_DESCIRPTION { + public static string CERTIFICATE_CA_ALERT_EXPIRED_DESCIRPTION { get { - return ResourceManager.GetString("CERTIFICATE_ALERT_EXPIRED_DESCIRPTION", resourceCulture); + return ResourceManager.GetString("CERTIFICATE_CA_ALERT_EXPIRED_DESCIRPTION", resourceCulture); } } /// - /// Looks up a localized string similar to Certificate on {0} expired. + /// Looks up a localized string similar to Trusted CA certificate on {0} expired. /// - public static string CERTIFICATE_ALERT_EXPIRED_TITLE { + public static string CERTIFICATE_CA_ALERT_EXPIRED_TITLE { get { - return ResourceManager.GetString("CERTIFICATE_ALERT_EXPIRED_TITLE", resourceCulture); + return ResourceManager.GetString("CERTIFICATE_CA_ALERT_EXPIRED_TITLE", resourceCulture); } } /// - /// Looks up a localized string similar to The TLS certificate of server '{0}' will expire on {1}.. + /// Looks up a localized string similar to The trusted CA certificate of '{0}' will expire on {1}.. /// - public static string CERTIFICATE_ALERT_EXPIRING_DESCRIPTION { + public static string CERTIFICATE_CA_ALERT_EXPIRING_DESCRIPTION { get { - return ResourceManager.GetString("CERTIFICATE_ALERT_EXPIRING_DESCRIPTION", resourceCulture); + return ResourceManager.GetString("CERTIFICATE_CA_ALERT_EXPIRING_DESCRIPTION", resourceCulture); } } /// - /// Looks up a localized string similar to Certificate on {0} expiring in {1} day(s). + /// Looks up a localized string similar to Trusted CA certificate on {0} expiring in {1} day(s). /// - public static string CERTIFICATE_ALERT_EXPIRING_TITLE_DAYS { + public static string CERTIFICATE_CA_ALERT_EXPIRING_TITLE_DAYS { get { - return ResourceManager.GetString("CERTIFICATE_ALERT_EXPIRING_TITLE_DAYS", resourceCulture); + return ResourceManager.GetString("CERTIFICATE_CA_ALERT_EXPIRING_TITLE_DAYS", resourceCulture); } } /// - /// Looks up a localized string similar to Certificate on {0} expiring in {1} hour(s). + /// Looks up a localized string similar to Trusted CA certificate on {0} expiring in {1} hour(s). /// - public static string CERTIFICATE_ALERT_EXPIRING_TITLE_HOURS { + public static string CERTIFICATE_CA_ALERT_EXPIRING_TITLE_HOURS { get { - return ResourceManager.GetString("CERTIFICATE_ALERT_EXPIRING_TITLE_HOURS", resourceCulture); + return ResourceManager.GetString("CERTIFICATE_CA_ALERT_EXPIRING_TITLE_HOURS", resourceCulture); } } /// - /// Looks up a localized string similar to Certificate on {0} expiring in {1} minute(s). + /// Looks up a localized string similar to Trusted CA certificate on {0} expiring in {1} minute(s). /// - public static string CERTIFICATE_ALERT_EXPIRING_TITLE_MINUTES { + public static string CERTIFICATE_CA_ALERT_EXPIRING_TITLE_MINUTES { get { - return ResourceManager.GetString("CERTIFICATE_ALERT_EXPIRING_TITLE_MINUTES", resourceCulture); + return ResourceManager.GetString("CERTIFICATE_CA_ALERT_EXPIRING_TITLE_MINUTES", resourceCulture); } } @@ -7023,6 +7122,114 @@ namespace XenAdmin { } } + /// + /// Looks up a localized string similar to The identity certificate of server '{0}' expired on {1}.. + /// + public static string CERTIFICATE_HOST_ALERT_EXPIRED_DESCIRPTION { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_ALERT_EXPIRED_DESCIRPTION", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server identity certificate on {0} expired. + /// + public static string CERTIFICATE_HOST_ALERT_EXPIRED_TITLE { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_ALERT_EXPIRED_TITLE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The identity certificate of server '{0}' will expire on {1}.. + /// + public static string CERTIFICATE_HOST_ALERT_EXPIRING_DESCRIPTION { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_ALERT_EXPIRING_DESCRIPTION", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server identity certificate on {0} expiring in {1} day(s). + /// + public static string CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_DAYS { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_DAYS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server identity certificate on {0} expiring in {1} hour(s). + /// + public static string CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_HOURS { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_HOURS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server identity certificate on {0} expiring in {1} minute(s). + /// + public static string CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_MINUTES { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_ALERT_EXPIRING_TITLE_MINUTES", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The internal identity certificate of server '{0}' expired on {1}.. + /// + public static string CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_DESCIRPTION { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_DESCIRPTION", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server internal identity certificate on {0} expired. + /// + public static string CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_TITLE { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRED_TITLE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The internal identity certificate of server '{0}' will expire on {1}.. + /// + public static string CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_DESCRIPTION { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_DESCRIPTION", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server internal identity certificate on {0} expiring in {1} day(s). + /// + public static string CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_DAYS { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_DAYS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server internal identity certificate on {0} expiring in {1} hour(s). + /// + public static string CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_HOURS { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_HOURS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Server internal identity certificate on {0} expiring in {1} minute(s). + /// + public static string CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_MINUTES { + get { + return ResourceManager.GetString("CERTIFICATE_HOST_INTERNAL_ALERT_EXPIRING_TITLE_MINUTES", resourceCulture); + } + } + /// /// Looks up a localized string similar to The certificate installation failed.. /// diff --git a/XenModel/Messages.resx b/XenModel/Messages.resx index 14baa137b..2c8ef8f21 100755 --- a/XenModel/Messages.resx +++ b/XenModel/Messages.resx @@ -1849,6 +1849,39 @@ Note that if RBAC is enabled, only alerts which you have privileges to dismiss w You have applied filters to the list of alerts. Do you want to export all alerts from every connected server, or only the alerts you have chosen to view? + + + All {0} attempts originated from unknown sources. + + + The most common attempts originated from the following sources: + + + There has been a total of {0} failed login attempts. + + + {0} attempts originated from unknown sources. + + + Last attempt on: {0} + + + IP address: {0} + + + Number of attempts: {0} + + + Originator: {0} + + + User agent: {0} + + + Username: {0} + + + There has been a number of failed attempts to login to '{0}' within the past hour. Help @@ -2523,27 +2556,63 @@ This will cancel compilation of the status report. Attached CD/DVD Drive. - - The TLS certificate of server '{0}' expired on {1}. + + The trusted CA certificate of '{0}' expired on {1}. - - Certificate on {0} expired + + Trusted CA certificate on {0} expired - - The TLS certificate of server '{0}' will expire on {1}. + + The trusted CA certificate of '{0}' will expire on {1}. - - Certificate on {0} expiring in {1} day(s) + + Trusted CA certificate on {0} expiring in {1} day(s) - - Certificate on {0} expiring in {1} hour(s) + + Trusted CA certificate on {0} expiring in {1} hour(s) - - Certificate on {0} expiring in {1} minute(s) + + Trusted CA certificate on {0} expiring in {1} minute(s) TLS certificate files (*.pem;*.crt;*.cer)|*.pem;*.crt;*.cer + + The identity certificate of server '{0}' expired on {1}. + + + Server identity certificate on {0} expired + + + The identity certificate of server '{0}' will expire on {1}. + + + Server identity certificate on {0} expiring in {1} day(s) + + + Server identity certificate on {0} expiring in {1} hour(s) + + + Server identity certificate on {0} expiring in {1} minute(s) + + + The internal identity certificate of server '{0}' expired on {1}. + + + Server internal identity certificate on {0} expired + + + The internal identity certificate of server '{0}' will expire on {1}. + + + Server internal identity certificate on {0} expiring in {1} day(s) + + + Server internal identity certificate on {0} expiring in {1} hour(s) + + + Server internal identity certificate on {0} expiring in {1} minute(s) + The certificate installation failed. @@ -14684,4 +14753,4 @@ Any disk in your VM's DVD drive will be ejected when installing [Citrix VM Tools You are here - \ No newline at end of file +