ogf!dZdZdZddlmZddlmZddlmZee Z Gdd e Z Gd d e Z Gd d e Zy)z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierGPL) getLogger)IPAddr)MyTimecZeZdZdZdZdZdZdddidfdZdZdZ d Z d Z d Z d Z d ZdZdZdZd#dZd$dZd%dZdZd#dZd#dZdZdZdZdZedZej<dZedZej<dZdZ d&d Z!ed!Z"e"j<d"Z"y)'Ticket)_id_flags _banCount_banTime_time_data_retry _lastResetlrNc&|j|d|_d|_d|_||nt j |_|xsgdd|_|*|jD]\}}| ||j|<|r|j|yy)z{Ticket constructor @param ip the IP address @param time the ban time @param matches (log) lines caused the ticket N)matchesfailures) setIDr r r rtimerritemsupdate)selfiprrdataticketkvs 8/usr/lib/python3/dist-packages/fail2ban/server/ticket.py__init__zTicket.__init__+s**R.$+$.$-'tV[[]$*"=ba8$* jjlsq}TZZ] ;;v c d|jjjdd|j|j|j |j |jd|jjdgfzS)Nz@%s: ip=%s time=%s bantime=%s bancount=%s #attempts=%d matches=%r.rr) __class____name__splitr rr r rgetrs r!__str__zTicket.__str__Bsg K nn##C(,dhh  ]]DNN ZZ TZZ^^Ir:< <alwayss r! setBanCountzTicket.setBanCountqs ut~~%4>&r#c.|xj|z c_yr.rOr=s r! incrBanCountzTicket.incrBanCountus..E.r#c|jSr.rOr+s r! getBanCountzTicket.getBanCountxs r#c~|j |jn|}|dk(rtjS|j|zS)Nr&)r r MAX_TIMEr)rrLbantimes r!getEndOfBanTimezTicket.getEndOfBanTime{s6"mm7T]]Y' ] // g r#cf|j |jn|}|dk(ry||j|zkDS)Nr&F)r r)rrrLrXs r! isTimedOutzTicket.isTimedOuts4"mm7T]]Y' ]  g% %&r#c"||jd<yNrrr=s r! setAttemptzTicket.setAttempts $**Zr#c |jdSr]r^r+s r! getAttemptzTicket.getAttempts J r#cb|r||jd<y |jd=y#t$rYywxYw)Nr)rKeyError)rrs r! setMatcheszTicket.setMatchess6 "4::i  9   s " ..c|jjddDcgc]+}t|ttfs|ndj |-c}Scc}w)Nr)rr*r<listtuplejoin)rlines r! getMatcheszTicket.getMatchessKzz~~i, . "$u 64BGGDM I .. .s0Ac<|jtjzSr.r r RESTOREDr+s r!restoredzTicket.restoreds v &&r#c|r$|xjtjzc_y|xjtjzc_yr.rnr=s r!rpzTicket.restoreds, ;;&//!;;;FOO$$;r#c<|jtjzSr.r r BANNEDr+s r!bannedz Ticket.banneds v}} $$r#c|r$|xjtjzc_y|xjtjzc_yr.rsr=s r!ruz Ticket.banneds, ;;&--;;;FMM"";r#cTt|dk(r:t|djDcgc] \}}| ||fc}}|_nnt|dk(r|jj |fnCt|dkDr5|jj dt t |gdzDt|r|jj |t|jjDcgc] \}}| ||fc}}|_ycc}}wcc}}w)Nrrrc3*K|] \}}||f ywr.rf).0rr s r! z!Ticket.setData..s;sqaU;s)lendictrrrzipiter)rargsargvrr s r!setDatazTicket.setDatasY!^tAw}}H!!-qeHI4: 4yA~::dW 4y1}::;cDJ<>&:;;Y::Tdjj&6&6&8JsqAMaUJK$*IKs D D ? D$ D$ c | |jS|js|St|ttdtt t tfst|rAt|jjDcgc]\}}||s||fc}}St|dr=t|jjDcgc]\}}||vs ||fc}}S|jj||Scc}}wcc}}w)N__iter__) rr<r/typeintfloatboolcomplexcallabler|rhasattrr*)rkeydefaultrr s r!getDatazTicket.getDatas[ **  > CT$ZE$w? @sm $**"2"2"4?31QA!A? @@ c: $**"2"2"4A31QS!AA BB W %%@ Bs9C= C=  D D ct|ddS)N _banEpochr)r8r+s r!banEpochzTicket.banEpochs {A &&r#c||_yr.)rr=s r!rzTicket.banEpochs $.r#r.)F)r)NN)#r( __module__ __qualname__r7rWrortr"r,r0r5rrr@rBrErGrJrMrQrSrUrYr[r_rardrlpropertyrpsetterrurrrrfr#r!r r #s a   $2d.<   (E'!  . ' ' //%%  % %--## L$&* ' ' //r#r cHeZdZdddidfdZdZdZdZddZedZ y) FailTicketNcd|_d|_tj||||||t |t s;||n|j |_|jjdd|_yy)Nrr) _firstTimerr r"r<rrGrr*)rrrrrrs r!r"zFailTicket.__init__s_$/$+//$D'48 FJ '!-T4<<>4? A.4; (r#c||_|jdsd|jd<|sd|jd<g|jd<yy)z Set artificial retry count, normally equal failures / attempt, used in incremental features (BanTimeIncr) to increase retry count for bad IPs rrrrNrrr=s r!setRetryzFailTicket.setRetrysI$+ J 4::j 4::j4::i r#c|jS)zV Returns failures / attempt count or artificial retry count increased for bad IPs )rr+s r!getRetryzFailTicket.getRetrys r#c ||jkDrc|j||z krItt|jt ||jz z |z|_||z |_||_yy)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)rrrr2rr)rrmaxTimes r! adjustTimezFailTicket.adjustTimesd DJJ oow&eDKK%t0F*GG'QRSDKWnDO4:r#c|xj|z c_|jdxx|z cc<|r?|jdr |jd|z|jd<y||jd<yy)Nrrr)rrattemptcounts r!inczFailTicket.inc sb+++**ZG#  jj JJy1G;DJJy#DJJy  r#ct|_|Sr.)rr'os r!wrapzFailTicket.wraps!+ (r#)Nrr) r(rrr"rrrr staticmethodrrfr#r!rrs:$2d /  $  r#rceZdZedZy) BanTicketct|_|Sr.)rr'rs r!rzBanTicket.wrap"s!+ (r#N)r(rrrrrfr#r!rr s  r#rN) __author__ __copyright__ __license__helpersripdnsrmytimerr(logSysobjectr rrrfr#r!rsS. 2   8 {V{|8 8 ~  r#