o ;s*b>@sRdZdZdZddlZddlZddlmZmZddlm Z ee Z Gdd d Z dS) z Cyril Jaquierz Copyright (c) 2004 Cyril JaquierGPLN) getLoggerlogging)versionc@s>eZdZddZddZddZddd Zd d Zd d ZdS) TransmittercCs||_d|_dS)Nr)_Transmitter__server_Transmitter__quiet)selfserverr =/usr/lib/python3/dist-packages/fail2ban/server/transmitter.py__init__,s zTransmitter.__init__c Csrtdd|z ||}d|f}W|Sty8}ztjd||ttjkdd|f}WYd}~|Sd}~ww)Nz Command: %rrz"Command %r has failed. Received %r)exc_info)logSyslog_Transmitter__commandHandler ExceptionwarninggetEffectiveLevelrDEBUG)r commandretacker r r proceed6s   zTransmitter.proceedc Cs|d}|dkr dS|dkr8|d}|dkrtd|fz|d}Wn ty.d }Ynw|j|||S|d krF||ddd S|d krS||ddS|d krc|d}|j|dS|dkrt|dkrt|jdS|ddkr|jdS|d}|j |dS|dkr|dd}d|_ z$|jj |dd i|dD]}| |qWd|_ |jj |ddidSd|_ |jj |ddiw|dkrt|dkr|dd}t|dkr|ddkr|j S|j d|S|dkr|jd|ddS|dkr|ddS|dkrtddS|dkr;d|_ z|dD]}| |q(Wd|_ dSd|_ w|dkrM|d}tt|dS|dkrW|jS|dkre||ddS|dkrs||ddS|dkr{tjS|d krt|ddStd!)"Nrpingpongaddrz--allzReserved name %rrautoz multi-setTsetstartstopreloadbeginFOKunbanbannedechoz server-statusz Status: readyz Server readyz server-streamsleep flushlogsgetstatusrz config-errorzInvalid command)r IndexErrorraddJail_Transmitter__commandSet startJaillenquit stopAllJailstopJailr reloadJailsr setUnbanIPr*rdebugtimer,float flushLogs_Transmitter__commandGetr/rerror)r rnamebackendoptscmdvaluer r r __commandHandlerHs                          zTransmitter.__commandHandlerFcCs |d}|dkr|d}|j||jrdS|jS|dkr8|d}|j|r4|jr/dS|jStd|dkrT|d}|j|rP|jrKdS|jStd|dkrb|d}|j |S|d kr|j |d|j }|durydS|jr~dS|j S|d kr|j }|durt tjd dSt|d|_|jrdS|jS|d kr|j }|durt tjd dS|d|_|jrdS|jS|ddkr|ddkr|j|dn|ddkr|j|dntd|jrdS|j|S|ddkr|d}|j|||jrdS|j|S|ddkr<|ddD] }|j||q%|jr6dS|j|S|ddkrZ|d}|j|||jrTdS|j|S|ddkrx|d}|j|||jrrdS|j|S|ddkr|d}|j|||jrdS|j|S|ddkr|d}d}t|dkr|d dkrd}n|d dkrt!dn t|dkrt!d |j"||||jrdS|j#|S|dd!kr|d}|j$|||jrdS|j#|S|dd"kr|d}|j%|||jrdS|j&|S|dd#kr?|dd}|j'|||jr9dS|j(|S|dd$kr_|dd}|j)|||jrYdS|j(|S|dd%kr|d}|j*|||jrwdS|j+|}|r|,Sd&S|dd'kr|d}|jj-|||d(|rdS|jrdS|j.|S|dd)krt|d}|j/|||jrdS|j.|S|dd*kr|d}|jj0|||d(|rdS|jrdS|j1|S|dd+krt|d}|j2|||jr dS|j1|S|dd,kr.|d}|j3|||jr(dS|j4|S|dd-krL|d}|j5|||jrFdS|j6|S|dd.krj|d}|j7|||jrddS|j8|S|dd/kr|d}|j9|||jrdS|j:|S|dd0kr|d}|j;|t||jrdS|j<|S|dd1kr|d}|j=|t||jrdS|j>|S|dd2kr|d}|j?|t||jrdS|j@|S|dd3kr|d}|jA|||jrdS|jB|S|dd4kr#|dd}|jrdS|jjC|g|RS|dDd5rN|d}|dtd5d}|jE||||jrGdS|jF||S|dd6krb|dd}|jG||S|dd7krd} |dd8kry|dd}nd} |dd}|jjH||| d9S|dd:kr|dg} t|dkr| I|dtJK|dg|jjL|g| R|jrdS| dS|dd;kr|d}|jM||dS|dd| | d}tOtP| |drt| dkrtJK| dni}tP| |d@i|q| d}tQ| ||qdS|d}tOtP| |drYt|dkrGtJK|dni}|jrOdStP| |d@i|S|d}tQ| |||jridStP| |Std?|df)ANrloglevelr logtargetzFailed to change log target syslogsocketzFailed to change syslog socketthreaddbfile dbmaxmatchesz6dbmaxmatches setting was not in effect since no db yet dbpurgeagez4dbpurgeage setting was not in effect since no db yetidleronToffFz*Invalid idle option, must be 'on' or 'off' ignoreself addignoreip delignoreip ignorecommand ignorecache addlogpathr&tailheadz$File option must be 'head' or 'tail'z$Only one file can be added at a time dellogpath logencodingaddjournalmatchdeljournalmatch prefregex addfailregex)multiple delfailregexaddignoreregexdelignoreregexusednsfindtime datepattern logtimezone maxmatchesmaxretrymaxlinesbantimeattemptbantime.banipunbanipz--report-absent)ifexists addaction delactionactionrz %rz9Invalid command %r (no set action or not yet implemented)r )Rr setLogLevelr getLogLevel setLogTarget getLogTargetrsetSyslogSocketgetSyslogSocketsetThreadOptions setDatabase getDatabasefilenamerrrMSGint maxMatchespurgeage setIdleJail getIdleJail setIgnoreSelf getIgnoreSelf addIgnoreIP getIgnoreIP delIgnoreIPsetIgnoreCommandgetIgnoreCommandsetIgnoreCachegetIgnoreCacher4lower ValueError addLogPath getLogPath delLogPathsetLogEncodinggetLogEncodingaddJournalMatchgetJournalMatchdelJournalMatch setPrefRegex getPrefRegexgetRegex addFailRegex getFailRegex delFailRegexaddIgnoreRegexgetIgnoreRegexdelIgnoreRegex setUseDns getUseDns setFindTime getFindTimesetDatePatterngetDatePatternsetLogTimeZonegetLogTimeZone setMaxMatches getMaxMatches setMaxRetry getMaxRetry setMaxLines getMaxLines setBanTime getBanTime addAttemptIP startswithsetBanTimeExtragetBanTimeExtrasetBanIPr9extendjsonloads addAction delAction getActioncallablegetattrsetattr)r rr`r@rDdbrWvoptrpargs actionnamersrC actionkey actionvaluer r r __commandSets                                                                                      zTransmitter.__commandSetcs|d}|dkr |jS|dkr|jS|dkr|jS|dkr(|jS|dkr:|j}|dur7dS|jS|dkrL|j}|durIdS|jS|dkr^|j}|dur[dS|jS|d d kro|j ||d dS|d d kr{|j |S|d d kr|j |S|d dkr|j |S|d dkr|j |S|d dkr|j|S|d dkr|j|S|d dkr|j|S|d dkr|j|}|r|SdS|d dkr|j|S|d dkr|j|S|d dkr|j|S|d dkr|j|S|d dkr|j|S|d dkr"|j|S|d dkr/|j|S|d dkr<|j|S|d dkrI|j|S|d dkrV|j|S|d dkrp|jj|t|d kom|d d kd!S|d d"r|d td"d}|j ||S|d d#krt!|j"|#S|d d$kr|d }|d%}|j$||t%|S|d d&kr|d }|j$||fd'd(t&DS|d d)kr|d }|j$||fd*d(t&DSt'd+),NrrFrGrHrIrJrKrLrr*rlogpathrZ journalmatchrPignoreiprSrTr]r^ failregex ignoreregexrdrerfrgrhrirjrkrnz --with-time)withTimermactionsrsr&actionpropertiescs(g|]}|dstt|s|qS_rrr.0keyrsr r s z,Transmitter.__commandGet.. actionmethodscs(g|]}|dstt|r|qSrrrrr r rs z6Invalid command (no get action or not yet implemented))(rrurwrygetThreadOptionsr|r}rrr*rrrrrrrrrrrrrrrrrrr getBanListr4rrlist getActionskeysrrdirr)r rr@rrrrrr rr __commandGets                                        zTransmitter.__commandGetcCsjt|dkr |jSt|dkr|d}|j|St|dkr1|d}|d}|jj||dStd)Nrrr)flavorzInvalid command (no status))r4rr/ statusJailr)r rr@rr r r r/s     zTransmitter.statusN)F) __name__ __module__ __qualname__rrrr2r>r/r r r r r%s  R} er) __author__ __copyright__ __license__r;rhelpersrrr^rrrrr r r r s