a =Æ*f!ã@sldZdZdZddlmZddlmZddlmZee ƒZ Gdd „d e ƒZ Gd d „d e ƒZ Gd d „d e ƒZdS)z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierZGPLé)Ú getLoggeré)ÚIPAddr)ÚMyTimec@s:eZdZdZdZdZdZdddidfdd„Zdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd>dd„Zd?dd „Zd@d!d"„Zd#d$„ZdAd%d&„ZdBd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zed1d2„ƒZejd3d2„ƒZed4d5„ƒZejd6d5„ƒZd7d8„Z dCd9d:„Z!ed;d<„ƒZ"e"jd=d<„ƒZ"dS)DÚTicket)Ú_idÚ_flagsÚ _banCountÚ_banTimeÚ_timeÚ_dataÚ_retryZ _lastResetlÿÿÿréNcCs€| |¡d|_d|_d|_|dur(|nt ¡|_|p8gddœ|_|durn| ¡D]\}}|durR||j|<qR|r||  |¡dS)z{Ticket constructor @param ip the IP address @param time the ban time @param matches (log) lines caused the ticket éN)ÚmatchesÚfailures) ÚsetIDrr r rÚtimer r ÚitemsÚupdate)ÚselfÚiprrÚdataÚticketÚkÚv©rú:/usr/lib/python3.9/site-packages/fail2ban/server/ticket.pyÚ__init__+s  zTicket.__init__c Cs<d|jj d¡d|j|j|j|j|jd|j dg¡fS)Nz@%s: ip=%s time=%s bantime=%s bancount=%s #attempts=%d matches=%rÚ.éÿÿÿÿrr) Ú __class__Ú__name__Úsplitrr r r r Úget©rrrrÚ__str__Bs þÿzTicket.__str__cCst|ƒS©N)Ústrr%rrrÚ__repr__HszTicket.__repr__cCsLz2|j|jko0t|jdƒt|jdƒko0|j|jkWStyFYdS0dS)NrF)rÚroundr r ÚAttributeError)rÚotherrrrÚ__eq__Ks ÿ þ z Ticket.__eq__cCs0|jD]$}t||dƒ}|durt|||ƒqdSr')Ú __slots__ÚgetattrÚsetattr)rrÚnrrrrrSs  z Ticket.updatecCst|tƒrt|ƒ}||_dSr')Ú isinstancer(rr©rÚvaluerrrrYs z Ticket.setIDcCs|jSr')rr%rrrÚgetID_sz Ticket.getIDcCs|j d|j¡S)Nr)r r$rr%rrrÚgetIPbsz Ticket.getIPcCs ||_dSr'©r r3rrrÚsetTimeeszTicket.setTimecCs|jSr'r7r%rrrÚgetTimehszTicket.getTimecCs ||_dSr'©r r3rrrÚ setBanTimekszTicket.setBanTimecCs|jdur|jS|Sr'r:)rÚ defaultBTrrrÚ getBanTimenszTicket.getBanTimeFcCs|s||jkr||_dSr'©r )rr4ÚalwaysrrrÚ setBanCountqszTicket.setBanCountcCs|j|7_dSr'r>r3rrrÚ incrBanCountuszTicket.incrBanCountcCs|jSr'r>r%rrrÚ getBanCountxszTicket.getBanCountcCs,|jdur|jn|}|dkr"tjS|j|S)Nr )r rÚMAX_TIMEr )rr<ÚbantimerrrÚgetEndOfBanTime{szTicket.getEndOfBanTimecCs.|jdur|jn|}|dkr dS||j|kS)Nr F)r r )rrr<rDrrrÚ isTimedOutƒszTicket.isTimedOutcCs||jd<dS©Nr©r r3rrrÚ setAttempt‹szTicket.setAttemptcCs |jdSrGrHr%rrrÚ getAttemptŽszTicket.getAttemptcCs4|r||jd<n z |jd=Wnty.Yn0dS)Nr)r ÚKeyError)rrrrrÚ setMatches‘s    zTicket.setMatchescCsdd„|j dd¡DƒS)NcSs(g|] }t|ttfƒs|nd |¡‘qS)Ú)r2ÚlistÚtupleÚjoin)Ú.0ÚlinerrrÚ ›sÿz%Ticket.getMatches..rr)r r$r%rrrÚ getMatchesšs ÿzTicket.getMatchescCs |jtj@Sr'©rrÚRESTOREDr%rrrÚrestoredžszTicket.restoredcCs,|r|jtjO_n|jtjM_dSr'rUr3rrrrW¡scCs |jtj@Sr'©rrÚBANNEDr%rrrÚbanned¨sz Ticket.bannedcCs,|r|jtjO_n|jtjM_dSr'rXr3rrrrZ«scOs¨t|ƒdkr*tdd„|d ¡Dƒƒ|_nLt|ƒdkrF|j |f¡n0t|ƒdkrv|j dd„tt|ƒgdŽDƒ¡t|ƒrŠ|j |¡tdd„|j ¡Dƒƒ|_dS) NrcSs g|]\}}|dur||f‘qSr'r©rQrrrrrrS·óz"Ticket.setData..rrcss|]\}}||fVqdSr'rr[rrrÚ ¼r\z!Ticket.setData..cSs g|]\}}|dur||f‘qSr'rr[rrrrSÂr\)ÚlenÚdictrr rÚzipÚiter)rÚargsÚargvrrrÚsetData²s   $ zTicket.setDatacsŠˆdur|jS|js|Stˆttdƒttttfƒs|tˆƒrVt ‡fdd„|j  ¡DƒƒSt ˆdƒr|t ‡fdd„|j  ¡DƒƒS|j  ˆ|¡S)Ncs g|]\}}ˆ|ƒr||f‘qSrrr[©ÚkeyrrrSÐr\z"Ticket.getData..Ú__iter__cs g|]\}}|ˆvr||f‘qSrrr[rerrrSÕr\) r r2r(ÚtypeÚintÚfloatÚboolÚcomplexÚcallabler_rÚhasattrr$)rrfÚdefaultrrerÚgetDataÄs zTicket.getDatacCs t|ddƒS)NÚ _banEpochr)r/r%rrrÚbanEpochÙszTicket.banEpochcCs ||_dSr')rqr3rrrrrÜs)N)F)r)N)N)NN)#r"Ú __module__Ú __qualname__r.rCrVrYrr&r)r-rrr5r6r8r9r;r=r@rArBrErFrIrJrLrTÚpropertyrWÚsetterrZrdrprrrrrrr#sN            rc@sNeZdZdddidfdd„Zdd„Zdd„Zdd „Zdd d „Zed d„ƒZ dS)Ú FailTicketNcCsTd|_d|_t ||||||¡t|tƒsP|dur6|n| ¡|_|j dd¡|_dS)Nrr) Ú _firstTimer rrr2rwr9r r$)rrrrrrrrrrãs  zFailTicket.__init__cCs6||_|jdsd|jd<|s2d|jd<g|jd<dS)z“ Set artificial retry count, normally equal failures / attempt, used in incremental features (BanTimeIncr) to increase retry count for bad IPs rrrrN©r r r3rrrÚsetRetryîs    zFailTicket.setRetrycCs|jS)zV Returns failures / attempt count or artificial retry count increased for bad IPs )r r%rrrÚgetRetryùszFailTicket.getRetrycCsN||jkrJ|j||krDtt|jt||jƒ|ƒƒ|_|||_||_dS)z  Adjust time of ticket and current attempts count considering given maxTime as estimation from rate by previous known interval (if it exceeds the findTime) N)r rxrir*r rj)rrZmaxTimerrrÚ adjustTimeÿs  " zFailTicket.adjustTimercCsR|j|7_|jd|7<|rN|jdrD|jd||jd<n ||jd<dS)Nrrry)rrZattemptÚcountrrrÚinc s  zFailTicket.inccCs t|_|Sr')rwr!©ÚorrrÚwrapszFailTicket.wrap)Nrr) r"rsrtrrzr{r|r~Ú staticmethodrrrrrrwás   rwc@seZdZedd„ƒZdS)Ú BanTicketcCs t|_|Sr')rƒr!rrrrr"szBanTicket.wrapN)r"rsrtr‚rrrrrrƒ srƒN)Ú __author__Z __copyright__Z __license__ZhelpersrZipdnsrZmytimerr"ZlogSysÚobjectrrwrƒrrrrÚs   ??