3 KlfU @sTddlZddlZGdddeZddZddZdd Zd d Zd d ZddZ dS)Nc@seZdZddZdddZdS) PathChooserc Cst|_tjj|s(d|_d|jd<dS||_tjd}tjd}t|d`}xXt |D]L\}}|j |rlqX|j |}|st d||df|j d |j|j d<qXWWdQRXdS) Nz (defaults)zJ/usr/share/selinux/default:/usr/share/selinux/mls:/usr/share/selinux/develSELINUX_DEVEL_PATHz ^\s*(?:#.+)?$z^\s*(\w+)\s*=\s*(.+?)\s*$rz(%s:%d: line is not in key = value format) dictconfigospathexistsconfig_pathnamerecompileopen enumeratematch ValueErrorgroup)selfpathnameignoreZconsiderfdlinenolinemor/usr/lib/python3.6/defaults.py__init__s        zPathChooser.__init__rcCsp|jj|d}|dkr(td||jf|jd}x*|D]"}tjj||}tjj|r8|Sq8Wtjj|d|S)Nz%s was not in %s:r) rgetrr splitr r joinr )rZ testfilenameZpathsetpathsptargetrrr__call__,s   zPathChooser.__call__N)r)__name__ __module__ __qualname__rr%rrrrrsrcCsdS)Nz/var/lib/sepolgenrrrrrdata_dir;sr)cCs tdS)Nz /perm_map)r)rrrrperm_map>sr*cCs tdS)Nz/interface_info)r)rrrrinterface_infoAsr+cCs tdS)Nz/attribute_info)r)rrrrattribute_infoDsr,cCs(td}|d}tjj|s$|d}|S)Nz/etc/selinux/sepolgen.confMakefilezinclude/Makefile)rr r r )chooserresultrrrrefpolicy_makefileGs  r0cCstd}|dS)Nz/etc/selinux/sepolgen.confinclude)r)r.rrrheadersNsr2) r r objectrr)r*r+r,r0r2rrrrs"