a qéqe—ã@sªUddlZddlZddlmZmZddlmZmZmZm Z ddl m Z ddl m Z ddlmZmZmZmZiZeeefed <d gZGd d „d eƒZGd d „d edZdS)éN)ÚABCMetaÚabstractmethod)ÚDictÚ FrozenSetÚListÚMappingé)ÚInvalidCheckOption)Ú SELinuxPolicyé)ÚCHECK_TYPE_KEYÚCHECK_DESC_KEYÚ CHECK_DISABLEÚGLOBAL_CONFIG_KEYSÚCHECKER_REGISTRYÚ CheckerModulecs eZdZdZ‡fdd„Z‡ZS)Ú CheckRegistryzQChecker module registry metaclass. This registers modules in the check registry.cs| d¡}| d¡}|dkrnt|tƒs4td |¡ƒ‚t|tƒsLtd |¡ƒ‚|tvrnt|j}td ||¡ƒ‚tƒ  ||||¡}|rŒ|t|<|S)NÚ check_typeÚ check_configrz,Checker module {} does not set a check_type.z4Checker module {} does not set a valid check_config.z4Checker module {} conflicts with registered check {}) ÚgetÚ isinstanceÚstrÚ TypeErrorÚformatÚ frozensetrÚ__name__ÚsuperÚ__new__)ÚclsZclsnameZ superclassesZ attributedictrrZexisting_check_moduleZclassdef©Ú __class__©úC/usr/lib64/python3.9/site-packages/setools/checker/checkermodule.pyrs$    ÿ ÿzCheckRegistry.__new__)rÚ __module__Ú __qualname__Ú__doc__rÚ __classcell__r!r!rr"rsrc@sžeZdZUdZeed<eeed<dZeed<e j Z e ed<e ee eefddœd d „Zedd œd d „Zedd œdd„Zedd œdd„Zeedœdd„ƒZdS)rz/Abstract base class for policy checker modules.rrFÚ log_passingÚpolicyN)r(Ú checknameÚconfigÚreturncCsb||_||_t t¡|_t|jB}|D]}||vr&td  |j|¡ƒ‚q&|  t ¡|_ |  t ¡|_dS)Nz{}: Invalid option: {})r(r)ÚloggingZ getLoggerrÚlogrrr rrr ZdescrÚdisable)Úselfr(r)r*Z valid_optionsÚkr!r!r"Ú__init__Js  ÿ zCheckerModule.__init__)Úmsgr+cCs(|j |¡|j d¡|j |¡dS)z Output an informational message.Ú N)ÚoutputÚwriter-Údebug©r/r2r!r!r"Úlog_info]s  zCheckerModule.log_infocCs.|jr|j d |¡¡|j d |¡¡dS)z† Log findings that pass the check. By default these messages are surpressed unless self.log_passing is True. z P * {} zP * {}N)r'r4r5rr-r6r7r!r!r"Úlog_okcszCheckerModule.log_okcCs4|j d |jrdnd|¡¡|j d |¡¡dS)z!Log findings that fail the check.z {} * {} ÚFú zF * {}N)r4r5rr'r-r6r7r!r!r"Úlog_faillszCheckerModule.log_fail)r+cCsdS)z” Run the configured check on the policy. Return: List of failed items in the check. If the check passes, list is empty. Nr!)r/r!r!r"ÚrunqszCheckerModule.run)rr#r$r%rÚ__annotations__rr'ÚboolÚsysÚstdoutr4r rr1r8r9r<rrr=r!r!r!r"r3s    )Ú metaclass)r@r,ÚabcrrÚtypingrrrrÚ exceptionr Z policyrepr Z globalkeysr r rrrrÚtyper>Ú__all__rrr!r!r!r"Ús