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.
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:
The “IdentityReference” object contains the offending SID:
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
What to read next
Active Directory Groups not Syncing with Team Foundation Server 2010
Explains why Active Directory groups may not sync with Team Foundation Server 2010, how to diagnose sync issues, and steps to resolve …
Detecting agile theatre with real delivery signals
Why Most Companies Operating Models Fail in Dynamic Markets
A concise comparison of Predictive and Adaptive Operating Models, explaining why traditional structures fail in dynamic markets and how …
Don’t Manage Dependencies, Remove Them
Explains why dependencies are a sign of poor system design and outlines steps to eliminate them by aligning teams, clarifying ownership, and …
The Estimation Trap: How Tracking Accuracy Undermines Trust, Flow, and Value in Software Delivery
Tracking estimation accuracy in software delivery leads to mistrust, fear, and distorted behaviours. Focus on customer value, flow, and …
Flow of Value vs Flow of Work – Misnomer or Useful Shorthand?
Compares “flow of value” and “flow of work” in Kanban, explaining why only validated outcomes count as value and stressing the need for …
Why Outsourcing DevOps Fails, and How Real Engineering Excellence Starts With Your Team
Avoid DevOps vendor lock-in, discover how true engineering excellence starts with partnership, not outsourcing. Ready to transform your …