]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/UserIdentification/UserProfileManagerDxe/UserProfileDelete.c
Update UID drivers to align with latest UEFI spec 2.3.1.
[mirror_edk2.git] / SecurityPkg / UserIdentification / UserProfileManagerDxe / UserProfileDelete.c
index fffc93beab9a7e269e9e815da4c5c7d20d029646..3fe403106bc7f0ef460f53889592239fbf8f44f5 100644 (file)
@@ -185,6 +185,9 @@ DeleteUser (
   EFI_STATUS              Status;\r
   EFI_USER_PROFILE_HANDLE User;\r
   EFI_INPUT_KEY           Key;\r
+  EFI_USER_INFO_HANDLE    UserInfo;\r
+  EFI_USER_INFO           *Info;\r
+  UINTN                   InfoSize;\r
 \r
   //\r
   // Find specified user profile and delete it.\r
@@ -204,6 +207,31 @@ DeleteUser (
   }\r
 \r
   if (UserIndex == 1) {\r
+    //\r
+    // Get the identification policy.\r
+    //\r
+    Status = FindInfoByType (User, EFI_USER_INFO_IDENTITY_POLICY_RECORD, &UserInfo);\r
+    if (EFI_ERROR (Status)) {\r
+      goto Done;\r
+    }\r
+\r
+    InfoSize = 0;\r
+    Info = NULL;\r
+    Status   = mUserManager->GetInfo (mUserManager, User, UserInfo, Info, &InfoSize);\r
+    if (Status == EFI_BUFFER_TOO_SMALL) {\r
+      Info = AllocateZeroPool (InfoSize);\r
+      if (Info == NULL) {\r
+        goto Done;\r
+      }\r
+      Status = mUserManager->GetInfo (mUserManager, User, UserInfo, Info, &InfoSize);\r
+    }\r
+\r
+    //\r
+    // Delete the user on the credential providers by its identification policy.\r
+    //\r
+    DeleteCredentialFromProviders ((UINT8 *)(Info + 1), Info->InfoSize - sizeof (EFI_USER_INFO), User);\r
+    FreePool (Info);\r
+    \r
     Status = mUserManager->Delete (mUserManager, User);\r
     if (EFI_ERROR (Status)) {\r
       goto Done;\r