private void removeSecurityRecursive(FileSystemInfo info, SecurityIdentifier sid) { if (info.Exists) { SecurityTemplateManager stm = CreateManager <SecurityTemplateManager>(); if (info is DirectoryInfo) { DirectoryInfo di = (DirectoryInfo)info; DirectorySecurity ds = di.GetAccessControl(); stm.RemoveMatchingRules(ds, sid, AccessControlType.Allow); stm.RemoveMatchingRules(ds, sid, AccessControlType.Deny); di.SetAccessControl(ds); // Recursively remove security from files and directories. di.GetFiles().ToList().ForEach(p => removeSecurityRecursive(p, sid)); di.GetDirectories().ToList().ForEach(p => removeSecurityRecursive(p, sid)); } else if (info is FileInfo) { FileInfo fi = (FileInfo)info; FileSecurity fs = fi.GetAccessControl(); stm.RemoveMatchingRules(fs, sid, AccessControlType.Allow); stm.RemoveMatchingRules(fs, sid, AccessControlType.Deny); fi.SetAccessControl(fs); } } }
private bool relativePathAndUserExists(SecurityTemplate st, DirectoryInfo websiteDirectory) { SecurityTemplateManager stm = CreateManager <SecurityTemplateManager>(); WindowsUserManager wum = new WindowsUserManager(ServerConfig.WindowsServerName); return(!stm.RelativePathExists(websiteDirectory, st.RelativePath) || (!wum.Exists(st.Username) && !st.UseIisIdentity)); }