internal static void ApplyChangesToDirectory(Principal p, StoreCtx storeCtx, SDSUtils.GroupMembershipUpdater updateGroupMembership, NetCred credentials, AuthenticationTypes authTypes) { DirectoryEntry native = (DirectoryEntry)storeCtx.PushChangesToNative(p); try { native.CommitChanges(); } catch (COMException cOMException1) { COMException cOMException = cOMException1; throw ExceptionHelper.GetExceptionFromCOMException(cOMException); } if (p as GroupPrincipal != null && p.GetChangeStatusForProperty("GroupPrincipal.Members")) { updateGroupMembership(p, native, credentials, authTypes); } }
static internal void ApplyChangesToDirectory( Principal p, StoreCtx storeCtx, GroupMembershipUpdater updateGroupMembership, NetCred credentials, AuthenticationTypes authTypes) { GlobalDebug.WriteLineIf(GlobalDebug.Info, "SDSUtils", "Entering ApplyChangesToDirectory"); Debug.Assert(storeCtx != null); Debug.Assert(storeCtx is ADStoreCtx || storeCtx is SAMStoreCtx || storeCtx is ADAMStoreCtx); Debug.Assert(p != null); Debug.Assert(updateGroupMembership != null); // Update the properties in the DirectoryEntry. Note that this does NOT // update group membership. DirectoryEntry de = (DirectoryEntry)storeCtx.PushChangesToNative(p); Debug.Assert(de == p.UnderlyingObject); // Commit the property update try { de.CommitChanges(); } catch (System.Runtime.InteropServices.COMException e) { GlobalDebug.WriteLineIf(GlobalDebug.Error, "SDSUtils", "ApplyChangesToDirectory: caught COMException with message " + e.Message); throw (ExceptionHelper.GetExceptionFromCOMException(e)); } if ((p is GroupPrincipal) && (p.GetChangeStatusForProperty(PropertyNames.GroupMembers))) { GlobalDebug.WriteLineIf(GlobalDebug.Info, "SDSUtils", "ApplyChangesToDirectory: Updating group membership"); // It's a group, and it's membership has changed. Commit those membership changes. // Note that this is an immediate operation, because it goes through IADsGroup, // and does not require a call to de.CommitChanges(). updateGroupMembership(p, de, credentials, authTypes); } }