o ;s*bj"@sdZdZdZddlZddlZddlZddlZddlm Z m Z ddl m Z ddl mZd d lmZd d lmZmZmZmZeeZGd d d e ZGdddeZdS)z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierGPLN)ConfigReaderUnshared ConfigReader) FilterReader) ActionReader)version) getLoggerextractOptionssplitWithOptions splitwordsc@speZdZd.ddZeddZddZdd Zd d Zd d Z e ddZ ddgddgddgdZ idddgdddgdddgdddgdddgdddgdddgdddgdddgd ddgd!ddgd"ddgd#ddgd$ddgd%ddgd&ddgd'ddgddgddgddgddgddgd(Z e ej egd)eej Zd*d+Zd.d,d-ZdS)/ JailReaderFcKs6tj|fi|||_d|_||_t|_d|_dSN)r__init___JailReader__name_JailReader__filter_JailReader__force_enablelist_JailReader__actions_JailReader__opts)selfname force_enablekwargsrs zJailReader.readcCs|jp |jo |jddS)NenabledF)rrgetrrrr isEnabledGszJailReader.isEnabledcCs>g}t|D]}tj|r||qtd|q|S)z|Given a path for glob return list of files to be passed to server. Dangling symlinks are warned about and not returned z4File %s is a dangling link, thus cannot be monitored)globospathexistsappendlogSyswarning)r.pathListprrr_globKs   zJailReader._globboolstringauto)r)backendfilterr)r:maxretryintN maxmatchesfindtimebantimezbantime.incrementzbantime.factorzbantime.formulazbantime.multiplierszbantime.maxtimezbantime.rndtimezbantime.overalljails ignorecommand ignoreselfignoreip ignorecache)r; logtimezone logencodinglogpathaction)rHr;r)c Cs|dtiz=tj||j|jdd|_|jstd|s#WdS|jd}|rtt |\}}|s8td|t ||j||j | d|_ |j }|sStd||j |jd d |j j|jdd t||j|j d n d|_ td |jt||j|j|_|jstd|j r|j |jt|jdD]}zi|}|sWqt |\}}d }|std||dr|jd|jd|dtj|dtj| d|t !|gn't"||j||j | d} | }|r| |j|j| ntd|Wqtyt#y1} ztj$d| ddt%d|| fd} ~ wwt&|jsCtd|jWdSWdStyo} zt'| } t(| |js_t)|_| |jd<WYd} ~ dSd} ~ ww)Nfail2ban_versionT) shouldExistzInit jail options failedr;zInvalid filter definition %r) share_configbasedirzUnable to read the filter %rr:r9)allzknown/zNo filter set for jail %szRead jail options failedrHzInvalid action definition %rz.pyset addactionactnamerzaction.dzUnable to read action %rzCaught exception: %s)exc_infoz!Error in action definition %r: %rzNo actions were defined for %s config-errorF)*merge_defaultsr r getOptionsr_configOpts1str JailDefErrorr+r rrK getBaseDirrr%applyAutoOptionsr* merge_section getCombinedr1r2 _configOptsr stripendswithrr0popr-r.splitextjoinjsondumpsr Exceptiondebugr'lenstrerrordict) rflt filterName filterOptretactactNameactOptprevlnrHerrrrTzs                   zJailReader.getOptionsc Csg}g}|jd}|r|dd|j|fgg|S|jr&||jt||j|j|jD]\}}|dkr|jdd drGq4d}| dD]>}| d d }t |d kr^|n|dd f\}} t |} t | dkrxtd || D]} |d 7}|d |jd| | gqzqN|sd|j} |st| t| q4|dkr|} q4|dkr|d |jdgt|q4|t jvr|d |j||gq4|r||7}|jD]}t|ttfr||q||q|dd|j| g|S)zConvert read before __opts to the commands stream Parameters ---------- allow_missing : bool Either to allow log files to be missing entirely. Primarily is used for testing rRz5Jail '%s' skipped, because of wrong configuration: %srGr:r9systemdr  rheadzNo file(s) found for glob %srN addlogpathz'Have not found any log file for %s jailrC addignoreipadd)rr*extendrrconvertr _fillStreamitems startswithsplitrsplitrerr5r1noticer0r'r2r _ignoreOptsr isinstancerrinsert)rallow_no_filesstreamstream2rqoptr! found_filesr.tailr3r4msgr:rHrrrrzsZ            zJailReader.convert)F)__name__ __module__ __qualname__rpropertyrr"r#r%r+ staticmethodr5rUr[updaterrNrkeysrrTrzrrrrr*sv          `rc@s eZdZdS)rVN)rrrrrrrrVsrV) __author__ __copyright__ __license__r,raos.pathr-re configreaderrr filterreaderr actionreaderrr helpersr r r r rr1rrcrVrrrrs    j