509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
í«„^³  ã               @   s    d dl mZmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ ed
dddgƒZG dd„ deƒZG dd„ de	ƒZG dd„ de	ƒZdS )é    )ÚdefaultdictÚ
namedtupleé   )ÚRBACRuletypeé   )ÚDiffResultDescriptor)Ú
DifferenceÚWrapper)Úclass_wrapper_factory)Úrole_wrapper_factory)Útype_or_attr_wrapper_factoryZmodified_rbacruleÚruleZadded_defaultZremoved_defaultc               @   sh   e Zd ZdZedƒZedƒZedƒZedƒZedƒZ	e
eƒZe
eƒZdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚRBACRulesDifferencez<Determine the difference in RBAC rules between two policies.Údiff_role_allowsÚdiff_role_transitionsc             C   sd   | j jdj| ƒƒ | j s"| j r*| jƒ  | j| j| jtj	 t
ƒ| j| jtj	 t
ƒƒ\| _| _}dS )zAGenerate the difference in role allow rules between the policies.zJGenerating role allow differences from {0.left_policy} to {0.right_policy}N)ÚlogÚinfoÚformatÚ_left_rbac_rulesÚ_right_rbac_rulesÚ_create_rbac_rule_listsÚ	_set_diffÚ_expand_generatorr   ZallowÚRoleAllowWrapperÚadded_role_allowsÚremoved_role_allows)ÚselfÚ_© r   ú!/usr/lib64/python3.6/rbacrules.pyr   3   s    z$RBACRulesDifference.diff_role_allowsc             C   s²   | j jdj| ƒƒ | j s"| j r*| jƒ  | j| j| jtj	 t
ƒ| j| jtj	 t
ƒƒ\}}}g }x:|D ]2\}}t|jƒt|jƒkrf|jt||j|jƒƒ qfW || _|| _|| _dS )zFGenerate the difference in role_transition rules between the policies.zOGenerating role_transition differences from {0.left_policy} to {0.right_policy}N)r   r   r   r   r   r   r   r   r   Zrole_transitionÚRoleTransitionWrapperr   ÚdefaultÚappendÚmodified_rbacrule_recordÚadded_role_transitionsÚremoved_role_transitionsÚmodified_role_transitions)r   ZaddedZremovedZmatchedZmodifiedZ	left_ruleZ
right_ruler   r   r   r   A   s&    z)RBACRulesDifference.diff_role_transitionsc             C   s€   | j jdj| ƒƒ x$| jjƒ D ]}| j|j j|ƒ qW | j jdj| ƒƒ x$| jjƒ D ]}| j	|j j|ƒ qVW | j jdƒ dS )z$Create rule lists for both policies.z-Building RBAC rule lists from {0.left_policy}z.Building RBAC rule lists from {0.right_policy}z#Completed building RBAC rule lists.N)
r   Údebugr   Zleft_policyZ	rbacrulesr   Zruletyper"   Zright_policyr   )r   r   r   r   r   r   a   s    z+RBACRulesDifference._create_rbac_rule_listsc             C   sH   | j jdƒ d| _d| _d| _d| _d| _d| _| jj	ƒ  | j
j	ƒ  dS )z%Reset diff results on policy changes.zResetting RBAC rule differencesN)r   r'   r   r   Zmodified_role_allowsr$   r%   r&   r   Úclearr   )r   r   r   r   Ú_reset_diffo   s    
zRBACRulesDifference._reset_diffN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r$   r%   r&   r   Úlistr   r   r   r   r   r)   r   r   r   r   r   #   s    r   c               @   s4   e Zd ZdZdZdd„ Zdd„ Zdd	„ Zd
d„ ZdS )r   z.Wrap role allow rules to allow set operations.ÚsourceÚtargetc             C   s,   || _ t|jƒ| _t|jƒ| _t|ƒ| _d S )N)Úoriginr   r/   r0   ÚhashÚkey)r   r   r   r   r   Ú__init__„   s    zRoleAllowWrapper.__init__c             C   s   | j S )N)r3   )r   r   r   r   Ú__hash__Š   s    zRoleAllowWrapper.__hash__c             C   s   | j |j k S )N)r3   )r   Úotherr   r   r   Ú__lt__�   s    zRoleAllowWrapper.__lt__c             C   s   | j |j ko| j|jkS )N)r/   r0   )r   r6   r   r   r   Ú__eq__�   s    zRoleAllowWrapper.__eq__N)r/   r0   )	r*   r+   r,   r-   Ú	__slots__r4   r5   r7   r8   r   r   r   r   r   ~   s   r   c               @   s4   e Zd ZdZdZdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r    z3Wrap role_transition rules to allow set operations.r/   r0   Útclassc             C   s8   || _ t|jƒ| _t|jƒ| _t|jƒ| _t|ƒ| _d S )N)	r1   r   r/   r   r0   r
   r:   r2   r3   )r   r   r   r   r   r4   œ   s
    zRoleTransitionWrapper.__init__c             C   s   | j S )N)r3   )r   r   r   r   r5   £   s    zRoleTransitionWrapper.__hash__c             C   s   | j |j k S )N)r3   )r   r6   r   r   r   r7   ¦   s    zRoleTransitionWrapper.__lt__c             C   s$   | j |j ko"| j|jko"| j|jkS )N)r/   r0   r:   )r   r6   r   r   r   r8   ©   s    zRoleTransitionWrapper.__eq__N)r/   r0   r:   )	r*   r+   r,   r-   r9   r4   r5   r7   r8   r   r   r   r   r    –   s   r    N)Úcollectionsr   r   Z	policyrepr   Zdescriptorsr   Ú
differencer   r	   Zobjclassr
   Zrolesr   Útypesr   r#   r   r   r    r   r   r   r   Ú<module>   s   [