ܜ^c@s?dZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z yddl Z e jdZWn dZnXejatjdr,ejr ejjdk r ejjjd r ejjaq,ed d6Dr,daq,nejd7krTdZet[nejd8kr~tddZdZn9tddZejjdkrdZneZdZdZdZ de!fdYZ"dej#fdYZ$ej%j&Z'dZ(e(ej%_&dZ)dZ*d e+e+d!Z,d"Z-d#Z.ejd9kre/e0d%e1d&nd'Z2d(Z3ej0d)ej4Z5ej0d*ej4Z6ej0d+ej4Z7d,Z8d-Z9d.Z:ej0d/Z;d0d:dd1Z<erd2Z=n d3Z=d4e!fd5YZ>dS(;s<Cyril Jaquier, Arturo 'Buanzo' Busleiman, Yaroslav HalchenkotGPLiN(tLocki(tMyTimes libcap.so.2tANSI_ccs$|]}tj|dkVqdS(tN(NR(tostgetenvtNone(t.0tv((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pys /stLANGUAGEtLC_ALLtLC_CTYPEtLANGsUTF-8icCstjj}|dkr|tjkrt}t|dsy#ddlm}|dd}Wqtk rttt}qXnt|dr|j |qndS(NtASCIItsetdefaultencodingi(t load_dynamict_systsys( Rtgetdefaultencodingtuppert PREFER_ENCthasattrtimpRt ImportErrortreloadR(tencodingtodeRt__ldm((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt__resetDefaultEncoding7s   tstrictcCsdy't|tr"|j||S|SWn6ttfk r_|dkrOn|j|dSXdS(NRtreplace(t isinstancetbytestdecodetUnicodeDecodeErrortUnicodeEncodeError(txtencterrors((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt uni_decodeXs cCs)t|tst|S|jtdS(NR(R R!tstrR"R(R%((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt uni_stringas cCsdy't|tr"|j||S|SWn6ttfk r_|dkrOn|j|dSXdS(NRR(R tunicodetencodeR#R$(R%R&R'((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyR(fs cCs)t|tst|S|jtdS(NR(R R+R)R,R(R%((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyR*ps cCs)t|tst|S|jdkS(Nt1tonttruetyes(R-R.R/syes(R t basestringtbooltlower(tval((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt_as_boolxscCs)tjd \}}|jt|fS(s+ Consistently format exception information i(Rtexc_infot__name__R*(tclatexc((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pytformatExceptionInfo}scCsstjj|}|jdr.|d }n|tddgkrotjjtjj|d|}n|S(saCustom function to include directory name if filename is too common Also strip .py at the end s.pyitbaset__init__t.(Rtpathtbasenametendswithtsettdirname(tsR;((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt mbasenames  )t TraceBackcBs#eZdZedZdZRS(s7Customized traceback to be included in debug messages cCsd|_||_dS(sInitialize TrackBack metric Parameters ---------- compress : bool if True then prefix common with previous invocation gets replaced with ... RN(t_TraceBack__prevt_TraceBack__compress(tselftcompress((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyR<s c Cstjddd }g|D]9}t|dtjj|dt|dg^q}g|D]=}|ddkp|djdsc|d|d g^qc}|dg}xV|dD]J}|d|d dkr|d dcd |d7s%s:%ss>[^>]*$Rs...(RKslogging.__init__(t tracebackt extract_stackRDRR>RBR)R@tappendtjoinRGt commonprefixRFtretsubtlen( RHtftbR%tentriestet entries_outtentrytsftbt prev_nextt common_prefixtcommon_prefix2((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt__call__s(F -  1   (R7t __module__t__doc__tFalseR<R^(((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyREs tFormatterWithTraceBackcBs eZdZdZdZRS(s}Custom formatter which expands %(tb) and %(tbc) with tracebacks TODO: might need locking in case of compressed tracebacks cOs>tjj|d|||d|k}td||_dS(Ntfmts%(tbc)sRI(tloggingt FormatterR<REt_tb(RHRctargstkwargsRI((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyR<s cCs)|j|_|_tjj||S(N(RfttbcttbRdRetformat(RHtrecord((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyRks(R7R_R`R<Rk(((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyRbs cKsyt|||||Wntk r}ymxfd|t|ffdg|D]}t|^qQfffD]$}yt|||WqpqpXqpWWqqXnXdS(sSafe log inject to avoid possible errors by unsafe log-handlers, concat, str. conversion, representation fails, etc. Used to intrude exception-safe _log-method instead of _log-method of Logger class to be always safe by logging and to get more-info about. See testSafeLogging test-case for more information. At least the errors covered in phase 3 seems to affected in all known pypy/python versions until now. slogging failed: %r on %ss args: %rN(t __origLogt ExceptionR*(RHtleveltmsgRgRhRWta((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt __safeLogs / cCs3d|kr&d|jdd}ntj|S(sBGet logging.Logger instance with Fail2Ban logger name convention R=s fail2ban.%si(t rpartitionRdt getLogger(tname((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyRts cCskyCt|ts|jr-t|}ntt|j}Wn!tk rftd|nX|S(NsInvalid log level %r(R tinttisdigittgetattrRdRtAttributeErrort ValueError(tvaluetll((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt str2LogLevels s %(message)scCs|dkr^|dkr%d|}n|dkr>d|}q{d|}|r{d|}q{nd|}|r{d |}n|stjd d |}n|S( s(Custom log format for the verbose runs iis6 | %(module)15.15s-%(levelno)-2d: %(funcName)-20.20s |isB +%(relativeCreated)5d %(thread)X %(name)-25.25s %(levelname)-5.5ss %(thread)X %(levelname)-5.5ss %(asctime)-15ss-%(name)-23.23s [%(process)d]: %(levelname)-7ss %(asctime)s s(?<=\))-?\d+(?:\.\d+)?scSsdS(NRC((tm((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyts(RRRS(t verbosityRctaddtimetpadding((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pytgetVerbosityFormats        cCs,tdjddttj|||S(s>Except hook used to log unhandled exceptions to Fail2Ban log tfail2bans Unhandled exception in Fail2Ban:R6(RttcriticaltTrueRt__excepthook__(texctypeR{RM((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt excepthooks  cCs/|s gSttttjtjd|S(sHelper to split words on any comma, space, or a new line Returns empty list if input is empty (or None) and filters out empty entries s[ , ]+(tfilterR2tmapR)tstripRRtsplit(RC((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt splitwordssisif 1: def _merge_dicts(x, y): """Helper to merge dicts. """ if y: return {**x, **y} return x def _merge_copy_dicts(x, y): """Helper to merge dicts to guarantee a copy result (r is never x). """ return {**x, **y} texeccCs,|}|r(|j}|j|n|S(sHelper to merge dicts. (tcopytupdate(R%tytr((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt _merge_dicts7s  cCs&|j}|r"|j|n|S(sCHelper to merge dicts to guarantee a copy result (r is never x). (RR(R%RR((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyt_merge_copy_dicts?s s^([^\[]+)(?:\[(.*)\])?\s*$s@([\w\-_\.]+)=(?:"([^"]*)"|\'([^\']*)\'|([^,\]]*))(?:,|\]\s*\[|$)sr(?:[^\[\n]+(?:\s*\[\s*(?:[\w\-_\.]+=(?:"[^"]*"|\'[^\']*\'|[^,\]]*)\s*(?:,|\]\s*\[)?\s*)*\])?\s*|[^\n]+)(?=\n\s*|$)c Cstj|}|sdS|j\}}t}|rxwtj|D]c}|jd}g|jdddD]}|dk ru|^qud}|j||j]+)>Rc Cstj}|}t|}t}t|d}xtrt}xe|jD]W} | |ksO| |krsqOn|rt|j| rqOnt || } } || } i} xx| r4| j d}||kr|| | j } qn|| ks| j |dt kr<td| || | fnd}|rb|j |d|}n|dkr|j |}|dkr|dk r||}qn|dkr|| | j } qnt|tst |}n| jd||} | j |dd| |<|| | j} qW| | kr|| rVt}nt|t|kr}|j}n| || _3 b = 3_3 Parameters ---------- inptags : dict Dictionary of tags(keys) and their values. Returns ------- dict Dictionary of tags(keys) and their values, with tags within the values recursively replaced. t getRawItemispproperties contain self referencing definitions and cannot be resolved, fail tag: %s, found: %s in %s, value: %st?s<%s>ittjdkr!|j}n t|}tjd|WnnXdS(sHelper to set real thread name (used for identification and diagnostic purposes). Side effect: name can be silently truncated to 15 bytes (16 bytes with NTS zero) iiN(i(Rt version_infoR,R!t_libcaptprctl(Ru((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pytprctl_set_th_names cCsdS(N((Ru((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyRst BgServicecBs>eZdZeZdZdZdZe e dZ RS(s{Background servicing Prevents memory leak on some platforms/python versions, using forced GC in periodical intervals. cCs.|js'tt|j||_n|jS(N(t _instancetsuperRt__new__(tcls((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyRs cCsJd|_d|_d|_|j|_ttdrFtjdndS(Niiidt set_thresholdi(t_BgService__serviceTimet_BgService__periodTimet_BgService__thresholdt_BgService__countRtgcR(RH((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyR<s     cCs|jd8_| r>|jdks:tj|jkr>tStjj|sTtSzMtj|jkrptStj tj|j |_|j |_t SWdtjj XtS(Nii(RRttimeRRaRt_mutextacquireRtcollectRRRtrelease(RHtforcetwait((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pytservices+  N( R7R_R`RRRRRR<RaR(((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyRs    (R R R R (i(i(ii((?t __author__t __license__RtlocaleRdRRRRRMt threadingRt server.mytimeRtctypestCDLLRRtgetpreferredencodingRt startswithtstdoutRtallRRR(R*RRR)R5R:RDtobjectREReRbtLoggert_logRmRrRtR}RRRRtevaltcompilet__file__RRtDOTALLRRRRRRRRRR(((s4/usr/lib/python2.7/site-packages/fail2ban/helpers.pyts          1        .            `