o ;s*b.3@sdZdZdZddlZddlZddlZddlmZedZ edZ d ej fd ej fd d d d d gZ dZdZdZdZdZdZdZde ee efe e<de ee efe e<de ee ee efe e<e ee ee ee ee ee ee ee ee ee ee ee edddZdddZddZdZdZeefZed d!ed"ZGd#d$d$ZGd%d&d&eZd'Z e d(Z!Gd)d*d*eZ"dS)+z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierGPLN)IPAddrz z^(/?)F-([A-Z0-9_\-]+)$z(?:::f{4,6}:)?(?P%s)z (?P%s)z(?P[\w\-.^_]*\w)z (?P\d+)z\[?(?:%s|%s)\]?z (?:%s|%s)z\[?(?:%s|%s)(?:/%s)?\]?z (?P\S+)z(?P\w+))IP4zF-IP4/IP6zF-IP6/ADDRzF-ADDR/CIDRzF-CIDR/SUBNETz F-SUBNET/DNSzF-DNS/zF-ID/zF-PORT/fidfport)idportcCs|}t||SN)lowerR_MAPget)tagr;/usr/lib/python3/dist-packages/fail2ban/server/failregex.py mapTag2Opt^s ralt_tuple_z^(|z)(.*?)(?:_\d+)?$c@seZdZd"ddZddZed#ddZd d Zed d Zd$ddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd S)%RegexFcKsFd|_tj|fi|}|dkrtdzlt||rtjnd|_||_ g|_ g|_ dd|jj DD]+}t |}|r`|dt|d}}|tkrX|j ||fq5|j ||fq5|j |j t|j rs|j nd|_ t|j r~|j nd|_ Wntjytd|w|j s|j r|j|_dS|j|_dS) NrzCannot add empty regexrcSs$g|]}t|ttdkr|qS)r)len COMPLNAME_PRE).0krrr s$z"Regex.__init__..rrz)Unable to compile regular expression '%s') _matchCacher _resolveHostTaglstripRegexExceptionrecompile MULTILINE _regexObj_regex _altValues _tupleValues groupindex COMPLNAME_CREmatchgroupr ALTNAME_PREappendsortr! sre_constantserror_getGroupsWithAlt _getGroups getGroups)selfregex multilinekwargsr$ngrrr__init__{s6    $zRegex.__init__cCsd|jj|jfS)Nz%s(%r)) __class____name__r.r=rrr__str__sz Regex.__str__yescs*tddifdd}t||S)Nnlrcs|}|dd}|dkrtdvrtStS|dkr,d}|dd<d|fSzt|WSty:Ynwt|}|rd|}|d}|drW |rUd S|Sd|<t |}d |fS|S) NrHOST)no SKIPLINESrIz!\n(?P(?:(?:.*\n)*?))r)z(?P<%s>) r4R_HOSTRI_HOSTRI_ADDRRH4TAGKeyError FCUSTNAME_CREr3groupsrr)mrtnrIopenTagspropsuseDnsrrsubstTags2        z'Regex._resolveHostTag..substTag)dictFTAG_CREsub)r>r[r\rrXrr's  'zRegex._resolveHostTagcCs|jSr)r.rFrrrgetRegexszRegex.getRegexcCsddd|DdS)N cSs g|] }d|dddqS)rNrjoin)r#vrrrr%s z(Regex._tupleLinesBuf..rb) tupleLinesrrr_tupleLinesBufszRegex._tupleLinesBufNc Cs|}t|ts t|}|j||_|jr|dur|}t|dkr*||_g|_ dSz|jj dd|j dd}Wn t yGd}Ynwz|jj d|jdd}Wnt yht|jj }Ynw|jj dd|}|jj dd|}||||_|d||_ d}|D].} t|j|dD]"\} } d| ddd| kr|j |j|| || 7}nqq|j ||ddSdS)Nrrarrr) isinstancestrr rfr-searchr&r!_matchedTupleLines_unmatchedTupleLinesstringrindexstart ValueErrorindexendcountgetSkippedLines enumeratercr6popextend) r=reorgLinesbufmatchLineStart matchLineEnd lineCount1 lineCount2rA skippedLinerVmatchedTupleLinerrrrisd          z Regex.searchcCs|jrdSdS)NTF)r&rFrrr hasMatchedszRegex.hasMatchedcCs |jSr)r& groupdictrFrrrr;$ zRegex._getGroupscCs|j}|jr |jD]\}}||}|r||s|||<q |jrH|jD]!\}}||}||}t|tr?||f7}n||f}|||<q&|Sr)r&rr/rr0rgtuple)r=failr$rArdtrrrr:'s       zRegex._getGroupsWithAltcCsdSrrrFrrrr<<szRegex.getGroupscCs|jsgSd}d} z|jd|dur||jd|7}|d7}Wnty-Ynty;dtjvr9Ynwq |dS)NrrTz skiplines%irPyPyF)r&r4 IndexErrorrSsysversion splitlines)r= skippedLinesrArrrrsEs$     zRegex.getSkippedLinescC|sgS|jSrrrkrFrrrgetUnmatchedTupleLines^zRegex.getUnmatchedTupleLinescC|sgSdd|jDS)NcSg|]}d|qSrrbr#linerrrr%hz+Regex.getUnmatchedLines..rrFrrrgetUnmatchedLinesdzRegex.getUnmatchedLinescCrrrrjrFrrrgetMatchedTupleLinesqrzRegex.getMatchedTupleLinescCr)NcSrrrbrrrrr%{rz)Regex.getMatchedLines..rrFrrrgetMatchedLineswrzRegex.getMatchedLines)F)rHr)rE __module__ __qualname__rCrG staticmethodr'r`rfrirr;r:r<rsrrrrrrrrr rs$  6  .   r c@s eZdZdS)r)N)rErrrrrrr)sr))rip4ip6dns)mlfidc@s2eZdZd ddZefddZddZdd ZdS) FailRegexNc sVtj|fi|fddtDs'dus fddtDs)tdjdSdS)Ncg|] }|jjvr|qSrr-r1r#grprFrrr%z&FailRegex.__init__..crrrr) prefRegexrrr%rzNo failure-id group in '%s')r rCFAILURE_ID_PRESENTSr)r.)r=r>rr@r)rr=rrCszFailRegex.__init__c Csrd}|D]}z|j|}Wn ttfyYqw|dur nq|dur5|jj}|jj}td||ft|S)Nz!No group found in '%s' using '%s')r&r4rrSrlr*r)rh)r=rUrrsrrrr getFailIDszFailRegex.getFailIDcCs |dS)N)rrr)rrFrrrgetHostrzFailRegex.getHostcCs(|}t|dt|dptjS)N)rrcidr)r<rrintr CIDR_UNSPEC)r=rrrrgetIPs zFailRegex.getIPr)rErrrCFAILURE_ID_GROPSrrrrrrrrs   r)# __author__ __copyright__ __license__r*r8ripdnsrr+r^rTIP_4_REIP_6_RErORI_IPV4RI_IPV6RI_DNSrQrPRI_CIDR RI_SUBNETrRrrr5 TUPNAME_PREr"rcr2r Exceptionr)rrrrrrrsr