Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ MergeAces()

bool System.Security.AccessControl.CommonAcl.MergeAces ( ref QualifiedAce ace,
QualifiedAce newAce )
inlineprivateinherited

Definition at line 606 of file CommonAcl.cs.

607 {
608 if (!AcesAreMergeable(ace, newAce))
609 {
610 return false;
611 }
612 if (ace.AceFlags == newAce.AceFlags)
613 {
614 if (!(ace is ObjectAce) && !(newAce is ObjectAce))
615 {
616 ace.AccessMask |= newAce.AccessMask;
617 return true;
618 }
619 if (InheritedObjectTypesMatch(ace, newAce) && AccessMasksAreMergeable(ace, newAce))
620 {
621 ace.AccessMask |= newAce.AccessMask;
622 return true;
623 }
624 }
625 if ((ace.AceFlags & AceFlags.InheritanceFlags) == (newAce.AceFlags & AceFlags.InheritanceFlags) && ace.AccessMask == newAce.AccessMask)
626 {
627 if (!(ace is ObjectAce) && !(newAce is ObjectAce))
628 {
629 ace.AceFlags |= newAce.AceFlags & AceFlags.AuditFlags;
630 return true;
631 }
632 if (InheritedObjectTypesMatch(ace, newAce) && ObjectTypesMatch(ace, newAce))
633 {
634 ace.AceFlags |= newAce.AceFlags & AceFlags.AuditFlags;
635 return true;
636 }
637 }
638 if ((ace.AceFlags & AceFlags.AuditFlags) == (newAce.AceFlags & AceFlags.AuditFlags) && ace.AccessMask == newAce.AccessMask)
639 {
640 AceFlags result;
641 if (ace is ObjectAce || newAce is ObjectAce)
642 {
643 if (ObjectTypesMatch(ace, newAce) && AceFlagsAreMergeable(ace, newAce) && MergeInheritanceBits(ace.AceFlags, newAce.AceFlags, IsDS, out result))
644 {
645 ace.AceFlags = result | (ace.AceFlags & AceFlags.AuditFlags);
646 return true;
647 }
648 }
649 else if (MergeInheritanceBits(ace.AceFlags, newAce.AceFlags, IsDS, out result))
650 {
651 ace.AceFlags = result | (ace.AceFlags & AceFlags.AuditFlags);
652 return true;
653 }
654 }
655 return false;
656 }
bool AceFlagsAreMergeable(QualifiedAce ace, QualifiedAce newAce)
Definition CommonAcl.cs:493
bool InheritedObjectTypesMatch(QualifiedAce ace, QualifiedAce newAce)
Definition CommonAcl.cs:472
bool AccessMasksAreMergeable(QualifiedAce ace, QualifiedAce newAce)
Definition CommonAcl.cs:479
bool ObjectTypesMatch(QualifiedAce ace, QualifiedAce newAce)
Definition CommonAcl.cs:465
static bool AcesAreMergeable(QualifiedAce ace, QualifiedAce newAce)
Definition CommonAcl.cs:577
static bool MergeInheritanceBits(AceFlags left, AceFlags right, bool isDS, out AceFlags result)
Definition CommonAcl.cs:180

References System.Security.AccessControl.KnownAce.AccessMask, System.Security.AccessControl.CommonAcl.AccessMasksAreMergeable(), System.Security.AccessControl.GenericAce.AceFlags, System.Security.AccessControl.CommonAcl.AceFlagsAreMergeable(), System.Security.AccessControl.CommonAcl.AcesAreMergeable(), System.Security.AccessControl.CommonAcl.InheritedObjectTypesMatch(), System.Security.AccessControl.CommonAcl.IsDS, System.Security.AccessControl.CommonAcl.MergeInheritanceBits(), and System.Security.AccessControl.CommonAcl.ObjectTypesMatch().

Referenced by System.Security.AccessControl.CommonAcl.AddQualifiedAce(), and System.Security.AccessControl.CommonAcl.Canonicalize().