a hw@sbdZgdZdZdZdZeeBZeeeedZedededed iZGd d d ZGd d d Z dS)z This module provides knowledge object classes and permissions. It should be used to keep this knowledge from leaking into the more generic parts of the policy generation. ) ZsocketfdZprocessfileZlnk_fileZ fifo_fileZdbusZ capabilityZunix_stream_socket)nrwbrrrr c@s eZdZdZddZddZdS)PermMapaA mapping between a permission and its information flow properties. PermMap represents the information flow properties of a single permission including the direction (read, write, etc.) and an abstract representation of the bandwidth of the flow (weight). cCs||_||_||_dSN)permdirweight)selfr r rr8/usr/lib/python3.9/site-packages/sepolgen/objectmodel.py__init__TszPermMap.__init__cCsd|jt|j|jfS)Nz')r dir_to_strr rrrrr__repr__YszPermMap.__repr__N)__name__ __module__ __qualname____doc__rrrrrrr Msr c@s@eZdZdZddZddZddZdd Zd d Zd d Z dS) PermMappingszThe information flow properties of a set of object classes and permissions. PermMappings maps one or more classes and permissions to their PermMap objects describing their information flow characteristics. cCsi|_d|_t|_dS)N)classesdefault_weight FLOW_BOTH default_dirrrrrrdszPermMappings.__init__cCsd}|D]}|}t|dkst|dks|ddkr:q|ddkrv|d}||jvr`tdi|j|<|j|}qt|dkrtd|durtd t|dt|dt|d }|||j<qdS) zsRead the permission mappings from a file. This reads the format used by Apol in the setools suite. Nrr#classzduplicate class in perm mapz!error in object class permissionszpermission outside of classr)splitlenr ValueErrorr str_to_dirintr )rrZcurlinefieldscpmrrr from_fileis" $      zPermMappings.from_filecCs|j||S)zGet the permission map for the object permission. Returns: PermMap representing the permission Raises: KeyError if the object or permission is not defined )r)robjr rrrgetszPermMappings.getcCs:z|j||}Wn"ty4t||j|jYS0|S)aGet the permission map for the object permission or a default. getdefault is the same as get except that a default PermMap is returned if the object class or permission is not defined. The default is FLOW_BOTH with a weight of 5. )rKeyErrorr rr)rr-r r+rrr getdefaults  zPermMappings.getdefaultcCs(t}|D]}|||}||jB}q|Sr ) FLOW_NONEr0r )rr-permsr r r+rrrgetdefault_directions   z!PermMappings.getdefault_directioncCs(d}|D]}|||}||j7}q|S)Nr)r0r)rr-r2totalr r+rrrgetdefault_distances   z PermMappings.getdefault_distanceN) rrrrrr,r.r0r3r5rrrrr^s  rN) rZimplicitly_typed_objectsr1Z FLOW_READZ FLOW_WRITErr&rr rrrrrs