a qqei@sUddlmZddlmZmZmZmZddlmZddl m Z m Z m Z m Z ddlmZddlmZmZdd lmZmZdd lmZdd lmZeeZee ed <Gd ddeZe ee dddZGdddeZdS)) defaultdict) NamedTupleSetOptionalUnion) MLSDisabled)LevelRangeRoleUser)DiffResultDescriptor) Difference SymbolWrapper) LevelWrapper RangeWrapperrole_wrapper_factory) SymbolCache _users_cachec@seZdZUdZeeed<eeed<eeed<eee e fed<eee e fed<eee e fed<eee e fed<d S) ModifiedUserz'Difference details for a modified user. added_roles removed_roles matched_roles added_level removed_level added_range removed_rangeN) __name__ __module__ __qualname____doc__rr __annotations__rrr strr r%r%8/usr/lib64/python3.9/site-packages/setools/diff/users.pyrs    r)userreturncCsBzt|j|WSty<t|}|t|j|<|YS0dS)z| Wrap users from the specified policy. This caches results to prevent duplicate wrapper objects in memory. N)rZpolicyKeyErrorr)r'rr%r%r&user_wrapper_factory"s  r+c@sDeZdZdZedZedZedZddddZddddZ dS) UsersDifferencez7Determine the difference in users between two policies. diff_usersN)r(c Cs|jd||dd|jDdd|jD\|_|_}t |_ |D],\}}|dd|j Ddd|j D\}}}z$t |j }t|j}|j } |j} Wn"tyd}d}d} d} Yn0z$t |j } t|j} |j } |j}Wn$tyd} d} d} d}Yn0|| kr.| }| }nd}d}|| krJ|}| }nd}d}|sh|sh|sh|rTt||||||||j |<qTdS) z6Generate the difference in users between the policies.zDGenerating user differences from {0.left_policy} to {0.right_policy}css|]}t|VqdSNr+.0r*r%r%r& @z-UsersDifference.diff_users..css|]}t|VqdSr.r/r0r%r%r&r2Ar3css|]}t|VqdSr.rr0r%r%r&r2Kr3css|]}t|VqdSr.rr0r%r%r&r2Lr3NzNone (MLS Disabled))loginfoformatZ _set_diffZ left_policyZusersZ right_policy added_users removed_usersdictmodified_usersrolesrZ mls_levelrZ mls_rangerr)selfZ matched_usersZ left_userZ right_userrrrZleft_level_wrapZleft_range_wrapZ left_levelZ left_rangeZright_level_wrapZright_range_wrapZ right_levelZ right_rangerrrrr%r%r&r-9sh            zUsersDifference.diff_userscCs"|jdd|_d|_d|_dS)z%Reset diff results on policy changes.zResetting user differencesN)r4debugr7r8r:)r<r%r%r& _reset_diffs zUsersDifference._reset_diff) rr r!r"rr7r8r:r-r>r%r%r%r&r,1s Sr,N) collectionsrtypingrrrr exceptionrZ policyrepr r r r Z descriptorsr differencerrZmlsrrr;rrr9rr#rr+r,r%r%r%r&s