%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/fail2ban/server/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/fail2ban/server/observer.pyc

�
��&dc@sdZdZdZddlZddlmZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZdd	lmZdd
lmZddlmZee�Zdefd
��YZdfd��YZe�ZdS(sSerg G. Brester (sebres)s"Copyright (c) 2014 Serg G. BrestertGPLi����Ni(t
JailThread(tFailManagerEmptyi(t	getLogger(tMyTime(tUtilstObserverThreadcBsxeZdZejdZd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd%d�Zd�Zded�Zed��Zd%d�Zd%d�Zed��Zejd��Zed��Z d�Z!d�Z"d�Z#dd&d ��YZ$d!�Z%d"�Z&d#�Z'd$�Z(RS('s8Handles observing a database, managing bad ips and ban increment.

	Parameters
	----------

	Attributes
	----------
	daemon
	ident
	name
	status
	active : bool
		Control the state of the thread.
	idle : bool
		Control the idle state of the thread.
	sleeptime : int
		The time the thread sleeps for in the loop.
	i
cCs�tt|�jdd�t|_tj�|_g|_tj	�|_
d|_i|_t
|_d|_d|_t|_dS(Ntnamesf2b/observeri<i(tsuperRt__init__tTruetidlet	threadingtRLockt_queue_lockt_queuetEventt_notifyt	sleeptimet_timerstFalset_pausedtNonet_ObserverThread__dbt"_ObserverThread__db_purge_intervaltdaemon(tself((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR	?s							cCs7y|j|SWn!tk
r2td|��nXdS(NsInvalid event index : %s(RtKeyError(Rti((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt__getitem__Ts
cCs6y|j|=Wn!tk
r1td|��nXdS(NsInvalid event index: %s(RR(RR((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt__delitem__Zs
cCs
t|j�S(N(titerR(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt__iter__`scCs
t|j�S(N(tlenR(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt__len__cscCstS(N(R(Rtother((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt__eq__fscCs
t|�S(N(tid(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt__hash__iscGsa|jj|d�}|dk	r.|j�ntj||j|�}||j|<|j�dS(s�Add a named timer event to queue will start (and wake) in 'starttime' seconds
		
		Previous timer event with same name will be canceled and trigger self into 
		queue after new 'starttime' value
		N(RtgetRtcancelRtTimertaddtstart(RRt	starttimeteventtt((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytadd_named_timerls

cGs�tjdk	r[|r[tjtj|jtj�|tj�||f�}|j	�dStj||j
|�}|j	�dS(sJAdd a timer event to queue will start (and wake) in 'starttime' seconds
		N(RtmyTimeRRR)RtDEFAULT_SLEEP_INTERVALt
_delayedEventttimeR+R*(RR,R-R.((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt	add_timerys&
cCsjtj�|ks$tj�|kr8|jd|�dStjtj|j|||f�}|j�dS(Ni(	RR3R4RR)RR1R2R+(Rt	endMyTimetendTimeR-R.((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR2�s$cCs,|js(|j}|r(|j�q(ndS(s1Notify wakeup (sets /and resets/ notify event)
		N(RRtset(Rtn((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytpulse_notify�s		cGs.|j�|jj|�WdQX|j�dS(s5Add a event to queue and notify thread to wake up.
		N(RRtappendR9(RR-((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR*�s
cGs$|j�|jj|�WdQXdS(s=Add a event to queue withouth notifying thread to wake up.
		N(RRR:(RR-((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytadd_wn�s
cGs||�dS(N((Rtltargs((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytcall_lambda�scCsUtjd�|jd|jd�i	|jd6|jd6|jd6|jd6|jd6|j	d6|j
d	6d
�d6d�d
6}y�|jd�xJ|jr�t
|_x�|jszy�d}|j�)t|j�r�|jjd�}nWdQX|dkrPn|d}t|d�s<|j|�p6t||�}n||d�Wq�tk
rv}tjd|dt�q�Xq�W|j}|r�t|_|j|j�|j�|jr�q�q�q�tj t!j"�|j#s�Pq�q�Wtjdt|j��d|_Wn)tk
r.}tjd|dt�nX|j�g|_WdQXt|_tS(s�Main loop for Threading.

		This function is the main loop of the thread.

		Returns
		-------
		bool
			True when the thread exits nicely.
		sObserver start...tDB_PURGEtdb_purgetcalltdb_settis_alivet	is_activeR+tstopcSsdS(N(((((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt<lambda>�stnopcSsdS(N(((((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyRF�stshutdowniNis%stexc_infos&Observer stopped, %s events remaining.s Observer stopped after error: %s($tlogSystinfoR/RR>RBR@tisAlivetisActiveR+RER*tactiveRRRRRR!RtpoptcallableR'tgetattrt	ExceptionterrorR
RtwaitRtclearR3tsleepRR1tis_full(Rt_ObserverThread__methtevtmethteR8((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytrun�s`











	

!		
			

	cCstS(N(R
(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyRL�scCs|jS(N(RN(RtfromStr((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyRMscCs3|j�$|js)tt|�j�nWdQXdS(N(RRNRRR+(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR+s
	icCs�|jr�|jr�tjd|�|j�1|jd�|j}|jj�d|_WdQX|j|�ss|r�|j	�t
|_t|_d|_
n	||_|jt|d��o�|jStS(Ns-Observer stop ... try to end queue %s secondsRHg�?(RNRRJRKRR;R7Rt
wait_emptyRURR
RRt	wait_idletminRW(Rtwtimet	forceQuitR8((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyREs

	

			 cCs+|j�t|j�rtStSWdQXdS(N(RR!RR
R(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyRW#s
cCs�tjtj�|dk	r/tj�|}n|jdk	rm|jd�|jrm|j	rm|j
�qmnx?|jr�|dk	r�tj�|kr�Pntjtj�qpW|jd�|jS(sWWait observer is running and returns if observer has no more events (queue is empty)
		RGg����MbP?N(R3RVRR1RRRR;RWRR9R_(RRR[((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR^(s

cCs�tjtj�|jrtS|dk	r<tj�|}nx?|js}|dk	rjtj�|krjPntjtj�q?W|jS(sJWait observer is running and returns if observer idle (observer sleeps)
		N(R3RVRR1RR
RR(RRR[((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR_<s	cCs|jS(N(R(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytpausedJscCs*|j|krdS||_|j�dS(N(RR9(Rtpause((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyRcNs	cCsdS(s/Status of observer to be implemented. [TODO]
		t(ReRe((R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytstatusWscCs
||_dS(N(R(Rtdb((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyRBascCsFtjd�|jdk	r,|jj�n|jd|jd�dS(NsPurge database event occurredR?R@(RJtdebugRRtpurgeR/R(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR@ds
c
CsE|j�s|jd�r!dS|j�}|j�}tjd|j|�d}d}d}y�|j�}	|j	}
|
dk	r/x]|
j
||�D]I\}}}t||j��}d|dkr�|nd>dd}Pq�Wt
||	�}|dk	r/||kr/tjd|j|||�dSn|dkr?dStjd	|j|tj|�||||	krud
nd�|j||dt�}|j|�||	kry-x&tr�|j|�}|j|�q�WWqtk
r|jtj��qXnWn8tk
r@}tjd|d
tj�tjk�nXdS(s} Notify observer a failure for ip was found

		Observer will check ip was known (bad) and possibly increase an retry count
		t	incrementNs[%s] Observer: failure found %siiiis8[%s] Ignore failure %s before last ban %s < %s, restoreds%[%s] Found %s, bad - %s, %s # -> %s%ss, BanRes%sRI(RLtgetBanTimeExtratgetIPtgetTimeRJRhRRtgetMaxRetrytdatabasetgetBantmaxtgetBanCountR`RKRttime2strt
addFailureR
tsetBanCountttoBant
putFailTicketRtcleanupR3RRRStgetEffectiveLeveltloggingtDEBUG(
RtfailManagertjailttickettiptunixTimetbanCountt
retryCountt	timeOfBantmaxRetryRgtlastBanTimeR[((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytfailureFoundosJ	"$	
	
tBanTimeIncrcBseZd�ZRS(cCs||_||_dS(N(tTimetCount(RtbanTimeR�((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR	�s	(t__name__t
__module__R	(((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR��scCs&|j�}|d|j||��S(Nt	evformula(RkR�(RR}R�R�tbe((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytcalcBanTime�scCs�|j�s|jr|S|j�}|j�}|}yF|dkr~|jdt�r~x!|jj||d|jdt��D]�\}}}	||j�kr�|j|d�nt	j
d|||�|dkr�|d|j||��}n|j|�|j
�|krmt	jd|j||tj|�tjdt|��tjdt|��f�n	t|_Pq�WnWn8tk
r�}
t	jd	|
d
t	j�tjk�nX|S(stCheck for IP address to increment ban time (if was already banned).

		Returns
		-------
		float
			new ban time.
		iRjtoveralljailsis"IP %s was already banned: %s #, %sR�s/[%s] IP %s is bad: %s # last %s - incr %s to %stsecondss%sRI(RLRoRkRlR'RRpRrRuRJRhR�t
setBanTimeRmRKRRRstdatetimet	timedeltatintR
trestoredRRRSRyRzR{(RR}R�R~R�Rt
orgBanTimeR�R�R�R[((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytincrBanTime�s0	4
5	)c		Cs|jr
dSy�|}|j�}tjd|j||�|dkr�|j�dkr�|j|||�}|dks�||kr�|j|�q�n|dkr	|j	�|}t
jdt|��t
j|�f}|t
j�krtjd|d�tSnd}||kr�tjd	|j||j�|�tjd
d|j|||f�|jtdtd
||d
��|j||�n|jdk	r�|jr�|jj||�nWn8tk
r�}tjd|dtj�tjk�nXdS(s� Notify observer a ban occured for ip

		Observer will check ip was known (bad) and possibly increase/prolong a ban time
		Secondary we will actualize the bans and bips (bad ip) in database
		Ns[%s] Observer: ban found %s, %si����R�sIgnore old bantime %sit	permanenttinfinites$[%s] Increase Ban %s (%d # %s -> %s)is[%s] Observer: prolong %s in %si
is%sRI(R�R�(R�RlRJRhRt
getBanTimeRR�R�RmR�R�R�RRsR3RtnoticeRrtlogR4R`Rqt
prolongBanRotaddBanRRRSRyRzR{(	RR~R}tbtimetoldbtimeRtbendtimetlogtimeR[((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pytbanFound�s6	"6cCs�yE|j�}|j�}tjd|j||�|jj|�Wn8tk
r}tjd|dtj	�t
jk�nXdS(s� Notify observer a ban occured for ip

		Observer will check ip was known (bad) and possibly increase/prolong a ban time
		Secondary we will actualize the bans and bips (bad ip) in database
		s[%s] Observer: prolong %s, %ss%sRIN(R�RlRJRhRtactionst_prolongBanRRRSRyRzR{(RR~R}R�RR[((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR�sN(()R�R�t__doc__RR1R	RRR R"R$R&R/R4R2R9R*R;R>R\RLRRMR+R
REtpropertyRWR^R_RctsetterRfRBR@R�R�R�R�R�R�(((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR(sF
								
		
						P			
			8		)	+t
_ObserverscBseZd�ZRS(cCs
d|_dS(N(RtMain(R((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR	s(R�R�R	(((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyR�s(t
__author__t
__copyright__t__license__Rt
jailthreadRtfailmanagerRtosRzR3R�tmathtjsontrandomtsysthelpersRtmytimeRtutilsRR�RJRR�t	Observers(((s</usr/lib/python2.7/site-packages/fail2ban/server/observer.pyt<module>sT��

Zerion Mini Shell 1.0