From b6945d9bbdfe410fa5ae3949491c73f7b647fbc0 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Thu, 12 Oct 2023 17:37:42 +1100 Subject: [PATCH] fix #135 avoid failing device import/enrol when unable to set AD description --- Disco.Services/Devices/DeviceExtensions.cs | 12 ++++++++++-- .../Devices/Enrolment/DeviceEnrolment.cs | 17 ++++++++++++----- .../Fields/AssignedUserIdImportField.cs | 11 ++++++++++- .../DeviceDecommissionedDateImportField.cs | 11 ++++++++++- .../DeviceDecommissionedReasonImportField.cs | 11 ++++++++++- .../Importing/Fields/ModelIdImportField.cs | 11 ++++++++++- .../Importing/Fields/ProfileIdImportField.cs | 11 ++++++++++- 7 files changed, 72 insertions(+), 12 deletions(-) diff --git a/Disco.Services/Devices/DeviceExtensions.cs b/Disco.Services/Devices/DeviceExtensions.cs index c75d867d..6740381f 100644 --- a/Disco.Services/Devices/DeviceExtensions.cs +++ b/Disco.Services/Devices/DeviceExtensions.cs @@ -5,6 +5,7 @@ using Disco.Services.Authorization; using Disco.Services.Documents; using Disco.Services.Expressions; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Logging; using Disco.Services.Users; using System; using System.Collections.Generic; @@ -188,8 +189,15 @@ namespace Disco.Services if (ActiveDirectory.IsValidDomainAccountId(d.DeviceDomainId)) { var adMachineAccount = ActiveDirectory.RetrieveADMachineAccount(d.DeviceDomainId); - if (adMachineAccount != null) - adMachineAccount.SetDescription(d); + try + { + if (adMachineAccount != null) + adMachineAccount.SetDescription(d); + } + catch (Exception ex) + { + SystemLog.LogWarning($"Unable to update AD Machine Account Description for {d.DeviceDomainId}: {ex.Message}"); + } } return newDua; diff --git a/Disco.Services/Devices/Enrolment/DeviceEnrolment.cs b/Disco.Services/Devices/Enrolment/DeviceEnrolment.cs index ac5f4d3b..5aa75f8c 100644 --- a/Disco.Services/Devices/Enrolment/DeviceEnrolment.cs +++ b/Disco.Services/Devices/Enrolment/DeviceEnrolment.cs @@ -579,11 +579,18 @@ namespace Disco.Services.Devices.Enrolment if (adMachineAccount != null && !adMachineAccount.IsCriticalSystemObject) { EnrolmentLog.LogSessionProgress(sessionId, 75, "Updating Active Directory Computer Account Properties"); - // Use non-Wlan Adapter with fastest speed - var macAddress = Request.Hardware?.NetworkAdapters?.Where(na => !na.IsWlanAdapter).OrderByDescending(na => na.Speed).Select(na => na.MACAddress).FirstOrDefault(); - adMachineAccount.UpdateNetbootGUID(Request.Hardware.UUID, macAddress); - if (RepoDevice.AssignedUser != null) - adMachineAccount.SetDescription(RepoDevice); + try + { + // Use non-Wlan Adapter with fastest speed + var macAddress = Request.Hardware?.NetworkAdapters?.Where(na => !na.IsWlanAdapter).OrderByDescending(na => na.Speed).Select(na => na.MACAddress).FirstOrDefault(); + adMachineAccount.UpdateNetbootGUID(Request.Hardware.UUID, macAddress); + if (RepoDevice.AssignedUser != null) + adMachineAccount.SetDescription(RepoDevice); + } + catch (Exception ex) + { + EnrolmentLog.LogSessionWarning(sessionId, $"Unable to update AD Machine Account attributes: {ex.Message}"); + } } if (RepoDevice.DeviceProfile.DistributionType == DeviceProfile.DistributionTypes.OneToOne) { diff --git a/Disco.Services/Devices/Importing/Fields/AssignedUserIdImportField.cs b/Disco.Services/Devices/Importing/Fields/AssignedUserIdImportField.cs index e62b63b3..593ee5b2 100644 --- a/Disco.Services/Devices/Importing/Fields/AssignedUserIdImportField.cs +++ b/Disco.Services/Devices/Importing/Fields/AssignedUserIdImportField.cs @@ -2,6 +2,7 @@ using Disco.Models.Repository; using Disco.Models.Services.Devices.Importing; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Logging; using Disco.Services.Users; using System; using System.Collections.Generic; @@ -147,7 +148,15 @@ namespace Disco.Services.Devices.Importing.Fields if (adAccount != null && !adAccount.IsCriticalSystemObject) { - adAccount.SetDescription(Device); + try + { + adAccount.SetDescription(Device); + } + catch (Exception ex) + { + SystemLog.LogWarning($"Unable to update AD Machine Account Description for {Device.DeviceDomainId}: {ex.Message}"); + throw; + } DeviceADDescriptionSet = true; } } diff --git a/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedDateImportField.cs b/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedDateImportField.cs index 0e722d27..fe605f91 100644 --- a/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedDateImportField.cs +++ b/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedDateImportField.cs @@ -2,6 +2,7 @@ using Disco.Models.Repository; using Disco.Models.Services.Devices.Importing; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Logging; using System; using System.Collections.Generic; using System.Data; @@ -116,7 +117,15 @@ namespace Disco.Services.Devices.Importing.Fields if (!DeviceADDescriptionSet) { - adAccount.SetDescription(Device); + try + { + adAccount.SetDescription(Device); + } + catch (Exception ex) + { + SystemLog.LogWarning($"Unable to update AD Machine Account Description for {Device.DeviceDomainId}: {ex.Message}"); + throw; + } DeviceADDescriptionSet = true; } } diff --git a/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedReasonImportField.cs b/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedReasonImportField.cs index 07d549c6..6cf7cca7 100644 --- a/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedReasonImportField.cs +++ b/Disco.Services/Devices/Importing/Fields/DeviceDecommissionedReasonImportField.cs @@ -2,6 +2,7 @@ using Disco.Models.Repository; using Disco.Models.Services.Devices.Importing; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Logging; using System; using System.Collections.Generic; using System.Data; @@ -120,7 +121,15 @@ namespace Disco.Services.Devices.Importing.Fields if (!DeviceADDescriptionSet) { - adAccount.SetDescription(Device); + try + { + adAccount.SetDescription(Device); + } + catch (Exception ex) + { + SystemLog.LogWarning($"Unable to update AD Machine Account Description for {Device.DeviceDomainId}: {ex.Message}"); + throw; + } DeviceADDescriptionSet = true; } } diff --git a/Disco.Services/Devices/Importing/Fields/ModelIdImportField.cs b/Disco.Services/Devices/Importing/Fields/ModelIdImportField.cs index cb9cf1bf..f5cbf255 100644 --- a/Disco.Services/Devices/Importing/Fields/ModelIdImportField.cs +++ b/Disco.Services/Devices/Importing/Fields/ModelIdImportField.cs @@ -2,6 +2,7 @@ using Disco.Models.Repository; using Disco.Models.Services.Devices.Importing; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Logging; using System; using System.Collections.Generic; using System.Data; @@ -94,7 +95,15 @@ namespace Disco.Services.Devices.Importing.Fields if (adAccount != null && !adAccount.IsCriticalSystemObject) { - adAccount.SetDescription(Device); + try + { + adAccount.SetDescription(Device); + } + catch (Exception ex) + { + SystemLog.LogWarning($"Unable to update AD Machine Account Description for {Device.DeviceDomainId}: {ex.Message}"); + throw; + } DeviceADDescriptionSet = true; } } diff --git a/Disco.Services/Devices/Importing/Fields/ProfileIdImportField.cs b/Disco.Services/Devices/Importing/Fields/ProfileIdImportField.cs index f90bb263..93add70c 100644 --- a/Disco.Services/Devices/Importing/Fields/ProfileIdImportField.cs +++ b/Disco.Services/Devices/Importing/Fields/ProfileIdImportField.cs @@ -2,6 +2,7 @@ using Disco.Models.Repository; using Disco.Models.Services.Devices.Importing; using Disco.Services.Interop.ActiveDirectory; +using Disco.Services.Logging; using System; using System.Collections.Generic; using System.Data; @@ -90,7 +91,15 @@ namespace Disco.Services.Devices.Importing.Fields if (adAccount != null && !adAccount.IsCriticalSystemObject) { - adAccount.SetDescription(Device); + try + { + adAccount.SetDescription(Device); + } + catch (Exception ex) + { + SystemLog.LogWarning($"Unable to update AD Machine Account Description for {Device.DeviceDomainId}: {ex.Message}"); + throw; + } DeviceADDescriptionSet = true; } }