3 ^ @shddlmZddlmZddlmZddlmZmZedddd gZ Gd d d eZ Gd d d eZ dS)) namedtuple)ContextWrapper)DiffResultDescriptor) DifferenceWrapperZmodified_genfsruleZ added_contextZremoved_contextc@s8eZdZdZedZedZedZddZddZ dS)GenfsconsDifferencez@Determine the difference in genfscon rules between two policies.diff_genfsconscCs|jjdj||jdd|jjDdd|jjD\|_|_}g|_ x<|D]4\}}t |j t |j krT|j j t ||j |j qTWdS)z?Generate the difference in genfscon rules between the policies.zHGenerating genfscon differences from {0.left_policy} to {0.right_policy}css|]}t|VqdS)N)GenfsconWrapper).0fsr /usr/lib64/python3.6/genfscon.py /sz5GenfsconsDifference.diff_genfscons..css|]}t|VqdS)N)r )r r rrrr0sN)loginfoformatZ _set_diffZ left_policyZ genfsconsZ right_policyadded_genfsconsremoved_genfsconsmodified_genfsconsrcontextappendmodified_genfs_record)selfZmatchedZ left_ruleZ right_rulerrrr 's  z"GenfsconsDifference.diff_genfsconscCs"|jjdd|_d|_d|_dS)z%Reset diff results on policy changes.z#Resetting genfscon rule differencesN)rdebugrrr)rrrr _reset_diff?s zGenfsconsDifference._reset_diffN) __name__ __module__ __qualname____doc__rrrrr rrrrrr s r c@s4eZdZdZdZddZdd Zd d Zd d ZdS)r z,Wrap genfscon rules to allow set operations.r pathfiletypercCs8||_|j|_|j|_|j|_t|j|_t||_dS)N)originr r!r"rrhashkey)rrrrr__init__Ms  zGenfsconWrapper.__init__cCs|jS)N)r%)rrrr__hash__UszGenfsconWrapper.__hash__cCs |j|jkS)N)r%)rotherrrr__lt__XszGenfsconWrapper.__lt__cCs$|j|jko"|j|jko"|j|jkS)N)r r!r")rr(rrr__eq__[s  zGenfsconWrapper.__eq__N)r r!r"r) rrrr __slots__r&r'r)r*rrrrr Gs r N) collectionsrrrZ descriptorsr differencerrrr r rrrrs   (