+
                                ^ RI Ht ^ RIHt ^RIHtHtHtHtH	t	 ^RI
Ht ^RIHtHtHt ^RIHt ^RIHt ^RIHt ^R	IHt ]! R
R
R7       ! R R]4      4       t ! R R]4      t ! R R]],          4      t ! R R]]	,          4      tR# )    )defaultdict)	dataclass)AnyRBACRuleRBACRuletypeRole	RoleAllowRoleTransition)DiffResultDescriptor)
DifferenceDifferenceResultWrapper)class_wrapper_factory)role_wrapper_factory)type_or_attr_wrapper_factory)RuleListT)frozenorderc                   0   a  ] tR t^t o RtV 3R ltRtV tR# )ModifiedRBACRulez,Difference details for a modified RBAC rule.c                >   < V ^8  d   Qh/ S[ ;R&   S[;R&   S[;R&   # )   ruleadded_defaultremoved_default)r   r   )format__classdict__s   "=/usr/lib64/python3.14/site-packages/setools/diff/rbacrules.py__annotate__ModifiedRBACRule.__annotate__   s,     
           N)__name__
__module____qualname____firstlineno____doc____annotate_func____static_attributes____classdictcell__r   s   @r   r   r      s      7  r    r   c                     a  ] tR t^t o RtV 3R lR ltV 3R lR lt]],          ! ]4      t	]],          ! ]4      t
]],          ! ]4      t]],          ! ]4      t]],          ! ]4      tRtRtV 3R lR ltV 3R	 lR
 ltV 3R ltRtV tR# )RBACRulesDifferencez<Determine the difference in RBAC rules between two policies.c                   < V ^8  d   QhRR/# r   returnNr!   )r   r   s   "r   r    RBACRulesDifference.__annotate__!   s     b b$ br    c                (   V P                   P                  RV P                   RV P                   24       V P                  e   V P
                  f   V P                  4        V P                  f   Q R4       hV P
                  f   Q R4       hV P                  V P                  V P                  \        P                  ,          \        4      V P                  V P
                  \        P                  ,          \        4      4      w  V n        V n        pR# )zAGenerate the difference in role allow rules between the policies.z'Generating role allow differences from  to N(Left RBAC rules didn't load, this a bug.)Right RBAC rules didn't load, this a bug.)loginfoleft_policyright_policy_left_rbac_rules_right_rbac_rules_create_rbac_rule_lists	_set_diff_expand_generatorr   allowRoleAllowWrapperadded_role_allowsremoved_role_allows)self_s   & r   diff_role_allows$RBACRulesDifference.diff_role_allows!   s     	5d6F6F5GtDL]L]K^_	a   (D,B,B,J((*$$0\2\\0%%1^3^^1>Bnn""4#8#89K9K#LN^_""4#9#9,:L:L#MO_`?b; 8!r    c                   < V ^8  d   QhRR/# r.   r!   )r   r   s   "r   r   r0   1   s     2 2t 2r    c                6   V P                   P                  RV P                   RV P                   24       V P                  e   V P
                  f   V P                  4        V P                  f   Q R4       hV P
                  f   Q R4       hV P                  V P                  V P                  \        P                  ,          \        4      V P                  V P
                  \        P                  ,          \        4      4      w  rp\        \        ,          ! 4       pV Fd  w  rV\        VP                  4      \        VP                  4      8w  g   K4  VP!                  \        VVP                  VP                  4      4       Kf  	  Wn        W n        W@n        R# )zFGenerate the difference in role_transition rules between the policies.z,Generating role_transition differences from r2   Nr3   r4   )r5   r6   r7   r8   r9   r:   r;   r<   r=   r   role_transitionRoleTransitionWrapperlistr   r   defaultappendadded_role_transitionsremoved_role_transitionsmodified_role_transitions)rB   addedremovedmatchedmodified	left_rule
right_rules   &      r   diff_role_transitions)RBACRulesDifference.diff_role_transitions1   se    	:4;K;K:L M##$&	'   (D,B,B,J((*$$0\2\\0%%1^3^^1"&..""4#8#89U9U#V#8:""4#9#9,:V:V#W#8:#; ()+%,!I $I$5$56:NzOaOa:bb 01;1C1C1:1B1B!D E	 &- ',#(/%)1&r    Nc                   < V ^8  d   QhRR/# r.   r!   )r   r   s   "r   r   r0   `   s     > > >r    c                `   \        \        4      V n        V P                  P	                  RV P
                   24       V P
                  P                  4        F/  pV P                  VP                  ,          P                  V4       K1  	  \        \        4      V n	        V P                  P	                  RV P                   24       V P                  P                  4        F/  pV P                  VP                  ,          P                  V4       K1  	  V P                  P	                  R4       R# )z$Create rule lists for both policies.zBuilding RBAC rule lists from z#Completed building RBAC rule lists.N)r   rJ   r9   r5   debugr7   	rbacrulesruletyperL   r:   r8   rB   r   s   & r   r;   +RBACRulesDifference._create_rbac_rule_lists`   s     !,D 178H8H7IJK$$..0D!!$--077= 1 "-T!278I8I7JKL%%//1D""4==188> 2 	<=r    c                   < V ^8  d   QhRR/# r.   r!   )r   r   s   "r   r   r0   p   s     & &T &r    c                l    V P                   P                  R4       V =V =V =V =V =RV n        RV n        R# )z%Reset diff results on policy changes.zResetting RBAC rule differencesN)	r5   rZ   r@   rA   rM   rN   rO   r9   r:   rB   s   &r   _reset_diffRBACRulesDifference._reset_diffp   sC    89"$')* !%!%r    c                ^   < V ^8  d   Qh/ S[ S[S[3,          ;R&   S[ S[S[3,          ;R&   # )r   r9   r:   )r   r   r   )r   r   s   "r   r   r0      s7     z |[89@{ |  k 9:A} r    )r9   r:   r@   rM   rO   rA   rN   )r"   r#   r$   r%   r&   rD   rV   r
   r   r@   rA   r	   rM   rN   r   rO   r9   r:   r;   rb   r'   r(   r)   r*   s   @r   r,   r,      s     Fb b 2 2@ -Y78HI.y9:JK 2.ABWX3NCDYZ 45E FG\ ] =A=A
> > & &g  r    r,   c                   L   a  ] tR t^~t o RtR	tV 3R lR ltR tR tR t	Rt
V tR# )
r?   z.Wrap role allow rules to allow set operations.c                $   < V ^8  d   QhRS[ RR/# r   r   r/   N)r   )r   r   s   "r   r   RoleAllowWrapper.__annotate__   s      Y 4 r    c                    Wn         \        VP                  4      V n        \        VP                  4      V n        \	        V4      V n        R # N)originr   sourcetargethashkeyr]   s   &&r   __init__RoleAllowWrapper.__init__   s2    *4;;7*4;;7:r    c                    V P                   # rj   ro   ra   s   &r   __hash__RoleAllowWrapper.__hash__       xxr    c                4    V P                   VP                   8  # rj   rs   rB   others   &&r   __lt__RoleAllowWrapper.__lt__       xx%))##r    c                v    V P                   VP                   8H  ;'       d    V P                  VP                  8H  # rj   rl   rm   rx   s   &&r   __eq__RoleAllowWrapper.__eq__   s,     {{ell*JJt{{ell/JJr    )ro   rk   rl   rm   Nr~   r"   r#   r$   r%   r&   	__slots__rp   rt   rz   r   r(   r)   r*   s   @r   r?   r?   ~   s-     8$I $K Kr    r?   c                   L   a  ] tR t^t o RtR	tV 3R lR ltR tR tR t	Rt
V tR# )
rI   z3Wrap role_transition rules to allow set operations.c                $   < V ^8  d   QhRS[ RR/# rg   )r	   )r   r   s   "r   r   "RoleTransitionWrapper.__annotate__   s      ^  r    c                    Wn         \        VP                  4      V n        \        VP                  4      V n        \        VP                  4      V n        \        V4      V n        R # rj   )	rk   r   rl   r   rm   r   tclassrn   ro   r]   s   &&r   rp   RoleTransitionWrapper.__init__   sB    *4;;724;;?+DKK8:r    c                    V P                   # rj   rs   ra   s   &r   rt   RoleTransitionWrapper.__hash__   rv   r    c                4    V P                   VP                   8  # rj   rs   rx   s   &&r   rz   RoleTransitionWrapper.__lt__   r|   r    c                    V P                   VP                   8H  ;'       d;    V P                  VP                  8H  ;'       d    V P                  VP                  8H  # rj   rl   rm   r   rx   s   &&r   r   RoleTransitionWrapper.__eq__   sM     {{ell* ( (KK5<<'( (KK5<<'	(r    )ro   rk   rl   rm   r   Nr   r   r*   s   @r   rI   rI      s+     =.I $( (r    rI   N)collectionsr   dataclassesr   	policyrepr   r   r   r   r	   descriptorsr
   
differencer   r   r   objclassr   rolesr   typesr   typingr   r   r,   r?   rI   r!   r    r   <module>r      s~    $ ! R R - = = + ' /  $d#'  $^&* ^&BKwy) K0(GN3 (r    