blog

Removing ACL’s for dead AD accounts

Published on
2 minute read

Removing ACL's for dead AD accounts   I have run into a very vexing problem with one of my applications. I was asked to provide an application that would fin all of the permissions set against Active Directory accounts that have been since removed. These normally show up in the permissions dialogs for folders as the full SID of the account as there is no longer nay way to look it up in Active Directory.

Removing ACL's for dead AD accounts   I have written a nice little threaded application that lets you select a folder and it finds all of the dead accounts. What it actually does is verify all accounts against Active Directory and flags them if they are not found. This will have the side effect of finding groups and local accounts and thinking they are dead as well. To solve this problem I added a “Safe List” of accounts and as way to add them from the GUI. The system then ignores any account names that are in this list.

All is well…

But not really. As I moved on to actually deleting the offending ACL’s on request, I found it was a little more difficult to actually delete them as .NET seams to ignore my code…

Private Sub RemoveACL(ByVal DirectoryName As String, _
                      ByVal IdentityReference As Security.Principal.IdentityReference)
    Dim DS As DirectorySecurity
    DS = System.IO.Directory.GetAccessControl(DirectoryName)

    DS.PurgeAccessRules(IdentityReference)
    DS.PurgeAuditRules(IdentityReference)

    System.IO.Directory.SetAccessControl(DirectoryName, DS)
End Sub

 

Now, this code is fairly simple. First we get the directory security object, then we change the directory security object, and then we save the directory security object.

The “DirectoryName” object contains a CuteFTP folder:

Removing ACL's for dead AD accounts  

The “IdentityReference” object contains the offending SID:

Removing ACL's for dead AD accounts  

This code should work, and I have used a similar piece to add permissions, so why on earth can’t I remove them!

UPDATE: I have added a question about this to the MSDN Forums 

Technorati Tags: .NET 

code-and-complexity blog code infrastructure tools

Connect with Martin Hinshelwood

If you've made it this far, it's worth connecting with our principal consultant and coach, Martin Hinshelwood, for a 30-minute 'ask me anything' call.

Our Happy Clients​

We partner with businesses across diverse industries, including finance, insurance, healthcare, pharmaceuticals, technology, engineering, transportation, hospitality, entertainment, legal, government, and military sectors.​

Cognizant Microsoft Business Group (MBG) Logo
ProgramUtvikling Logo
Boeing Logo
Graham & Brown Logo
Illumina Logo
Qualco Logo
Higher Education Statistics Agency Logo

NIT A/S

Deliotte Logo
Big Data for Humans Logo
Slaughter and May Logo
Trayport Logo
Flowmaster (a Mentor Graphics Company) Logo
Brandes Investment Partners L.P. Logo

CR2

Epic Games Logo
Jack Links Logo
Emerson Process Management Logo
Department of Work and Pensions (UK) Logo
Royal Air Force Logo
Washington Department of Transport Logo
Ghana Police Service Logo
Nottingham County Council Logo
Washington Department of Enterprise Services Logo
Xceptor - Process and Data Automation Logo
Boxit Document Solutions Logo
Akaditi Logo
Big Data for Humans Logo
Trayport Logo
Higher Education Statistics Agency Logo