a =*f*@sZdZdZdZddlmZddlmZddlmZdd l m Z m Z e e Z Gd d d Zd S) z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierZGPL)Lock) BanTicket)MyTime) getLoggerloggingc@seZdZddZddZddZddZd d Zd)d d ZddZ e ddZ d*ddZ ddZ ddZddZifddZddZdd Zd+d"d#Zd$d%Zd&d'Zd(S), BanManagercCs(t|_t|_d|_d|_tj|_dS)NiXr) r_BanManager__lockdict_BanManager__banList_BanManager__banTime_BanManager__banTotalrMAX_TIME_nextUnbanTimeselfr>/usr/lib/python3.9/site-packages/fail2ban/server/banmanager.py__init__2s zBanManager.__init__cCst||_dSN)intr rvaluerrr setBanTimeDszBanManager.setBanTimecCs|jSr)r rrrr getBanTimeMszBanManager.getBanTimecCs ||_dSrrrrrr setBanTotalUszBanManager.setBanTotalcCs|jSrrrrrr getBanTotal]szBanManager.getBanTotalFcs|stjSj>g}jD]}|j}|||fq(Wdn1s\0Y|jdddt j |rfdd|DSdd|DS)NcSs|dS)Nrr)trrrmz'BanManager.getBanList..)keyc sDg|]<}d|d|d|dj|dfqS)z%s %s + %d = %srr)getIDgetTimerr .0rrZt2srr ps  &z)BanManager.getBanList..cSsg|]}|dqS)r)r#r%rrrr(tr!) listr keysr valuesgetEndOfBanTimer appendsortrZtime2str)rZorderedZwithTimeZlstticketeobrr'r getBanListes . zBanManager.getBanListcCstt|jSr)iterr)r r+rrrr__iter__{szBanManager.__iter__cCs |dust|dkrdS|SdS)Nrunknown)len)rrrrhandleBlankResultszBanManager.handleBlankResult c Csgggd}t|dsz4ddladdlatj}||_|d|_||_Wnht y}zPt dt ||d<|d d|d d|d  d|WYd}~Sd}~00|j(d d t|jD}Wdn1s0YzF|D]:}||jrd nd }z|j}||d}|s8tdt} t} t} |D]v} dd | dD\} }}}}|| } ||}||}| || | ||| ||qN|d dt| |d dt| |d  dt| WqtjjyT|d d|d d|d  dYntjjtjj tjj!fy}zNt d||t j"t#j$krt |t ||d<WYd}~q8WYd}~npd}~0t%y2}zNt d||t j"t#j$krt |t ||d<WYd}~q8WYd}~n d}~00qWnVt%y}z.zorigin.asn.cymru.comzorigin6.asn.cymru.comZTXTzNo data retrievedcSsg|]}|dqS)z'" )strip)r&Zanswerrrrr(r!|z, Znxdomainz)DNSException %r querying Cymru for %s TXTz0Unhandled Exception %r querying Cymru for %s TXTz*Failure looking up extended Cymru info: %s)&hasattrZ dns.exceptionZdnsZ dns.resolverresolverZResolverZlifetimetimeoutr; ImportErrorlogSysr<reprr-r r)r r+ZgetPTRZisIPv4query ValueErrorsetZto_textsplitr6addjoinsortedZNXDOMAIN exceptionZ DNSExceptionZ NoNameserversZTimeoutlevelrDEBUG Exception)rrAZ return_dictr@eZbanIPsipZquestionZanswersZasnsZ countriesZrirsZrdatar8netr9r:ZchangedZdnserrrgetBanListExtendedCymruInfos       6       "  $  .  "z&BanManager.getBanListExtendedCymruInfoc CsVzdd|dDWStyP}z$tdt|gWYd}~Sd}~00dS)NcSsg|]}|qSrr)r&r8rrrr(r!z3BanManager.geBanListExtendedASN..r8zFailed to lookup ASNrOrCr<rLrZ cymru_inforPrrrgeBanListExtendedASNs   zBanManager.geBanListExtendedASNc CsVzdd|dDWStyP}z$tdt|gWYd}~Sd}~00dS)NcSsg|]}|qSrr)r&r9rrrr(r!z7BanManager.geBanListExtendedCountry..r9zFailed to lookup CountryrTrUrrrgeBanListExtendedCountrys   z#BanManager.geBanListExtendedCountryc CsVzdd|dDWStyP}z$tdt|gWYd}~Sd}~00dS)NcSsg|]}|qSrr)r&r:rrrr(r!z3BanManager.geBanListExtendedRIR..r:zFailed to lookup RIRrTrUrrrgeBanListExtendedRIRs   zBanManager.geBanListExtendedRIRcCs||j}|tkr$d|d<dS|j|}|j|}|r||d<|||jkrd|d<||j}|dkr| | }|dkr||7}| |WddS||j|<|j d7_ | |j |kr||_ WddS1s0YdS) NrZexpiredFr/ZprolongrT)r,r rtimer r#r getrr$rrZ incrBanCountr)rr/reasonr0fidZ oldticketZbtmZdiftmrrr addBanTicket s0       zBanManager.addBanTicketcCs t|jSr)r5r rrrrsize1szBanManager.sizecCs||jvSr)r#r )rr/rrr _inBanList<szBanManager._inBanListcs|j|j}||kr,tWdSitj}|jD]H\}}||j}||kr|||<t |kr|j}qq@||kr@|}q@||_t rt dt |jdkrʈ D] }|j|=qnt fdd|jD|_t WdS1s 0YdS)Ng@g@c3s"|]\}}|vr||fVqdSrr)r&r]r/ unBanListrr ds z'BanManager.unBanList..) r rr)rrr itemsr,r r5r*r r+)rrZZmaxCountZ nextUnbanTimer]r/r0rrbrrcFs,     zBanManager.unBanListcCsD|j*t|j}t|_|WdS1s60YdSr)r r)r r+r )rZuBListrrr flushBanListpszBanManager.flushBanListc CsZ|j@z|j|WWdSty6Yn0Wdn1sL0YdSr)r r popKeyError)rr]rrr getTicketByIDzs  $zBanManager.getTicketByIDN)FF)r7)ra)__name__ __module__ __qualname__rrrrrr1r3 staticmethodr6rSrVrWrXr^r_r`rcrfrirrrrr +s&    O %  * r N) __author__Z __copyright__Z __license__ threadingrr/rZmytimerZhelpersrrrjrCr rrrrs