VULN_CHECK_I913V6 =jvddlZddlZddlZddlZddlZddlZddlZddlZddlZ ddl Z GddZ Gdde Z Gdde Z Gdd e Z Gd d e ZGd d ZeZy)Nc*eZdZdZdZddZdZdZy) LogTargetz#Abstract class for logging targets.cd|_yN)fdselfs 9/usr/lib/python3.12/site-packages/firewall/core/logger.py__init__zLogTarget.__init__s ctd)Nz%LogTarget.write is an abstract methodNotImplementedErrorr datalevelloggeris_debugs r writezLogTarget.write!"IJJr ctd)Nz%LogTarget.flush is an abstract methodrrs r flushzLogTarget.flush rr ctd)Nz%LogTarget.close is an abstract methodrrs r closezLogTarget.close#rr Nr)__name__ __module__ __qualname____doc__r rrrr r rrs-KKKr rc&eZdZdZddZdZdZy) _StdoutLogcXtj|tj|_yr)rr sysstdoutrrs r r z_StdoutLog.__init__,s4 **r cZ|jj||jyr)rrrrs r rz_StdoutLog.write0s  d r c$|jyr)rrs r rz_StdoutLog.close5s  r c8|jjyrrrrs r rz_StdoutLog.flush8s  r Nrrrrr rrrr r r r"r"+s r r"ceZdZdZy) _StderrLogcXtj|tj|_yr)r"r r$stderrrrs r r z_StderrLog.__init__AsD!**r N)rrrr r r r r,r,@sr r,c&eZdZdZddZdZdZy) _SyslogLogctj|tjtj j tjdtjtjy)Nr) rr syslogopenlogospathbasenamer$argvLOG_PID LOG_DAEMONrs r r z_SyslogLog.__init__KsC4  rww'' 4fnnfFWFWXr cd}|rtj}n||jk\rtj}n_||jk(rtj }n?||j k(rtj}n||jk(rtj}|jdr|dt|dz }t|dkDr/|tj|ytj||yy)N r) r2 LOG_DEBUGINFO1LOG_INFOWARNING LOG_WARNINGERRORLOG_ERRFATALLOG_CRITendswithlen)r rrrrprioritys r rz_SyslogLog.writeXs ''H $!??&..(!--&,,&!>>&,,&!?? == #d)a-(D t9q= d# h- r c,tjyr)r2closelogrs r rz_SyslogLog.closens r cyrr rs r rz_SyslogLog.flushqs r Nrr*r r r r0r0Js Y., r r0c2eZdZdZddZdZd dZdZdZy) FileLogz:FileLog class. File will be opened on the first write.cJtj|||_||_yr)rr filenamemode)r rOrPs r r zFileLog.__init__|s4    r c |jrytjtjz}|jj dr|tj z}tj|j|d|_tj|jdtj|j|j|_tj|jtjtjy)Nai)rr4O_CREATO_WRONLYrP startswithO_APPENDopenrOfchmodfdopenfcntlF_SETFD FD_CLOEXEC)r flagss r rWz FileLog.opens 77  R[[( 99   $ R[[ E''$--6 $''5!))DGGTYY/ DGGU]]E,<,<=r c|js|j|jj||jjyr)rrWrrrs r rz FileLog.writes/ww IIK  d  r c`|jsy|jjd|_yr)rrrs r rz FileLog.closes ww   r cR|jsy|jjyrr)rs r rz FileLog.flushsww   r N)wr) rrrrr rWrrrr r r rMrMxs / >  r rMceZdZdZdZdZdZdZdZdZ e Z e Z eZd1dZd Zd2d Zd2d Zd2d Zd2d ZdZdZdZdZdZdZedfdZedfdZedfdZedfdZedfdZ edfdZ!dZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*d$Z+d%Z,d3d&Z-d'Z.d3d(Z/eddfd)Z0eddfd*Z1eddfd+Z2d3d,Z3d-Z4d.Z5d/Z6d3d0Z7y)4LoggeraL Format string: %(class)s Calling class the function belongs to, else empty %(date)s Date using Logger.date_format, see time module %(domain)s Full Domain: %(module)s.%(class)s.%(function)s %(file)s Filename of the module %(function)s Function name, empty in __main__ %(label)s Label according to log function call from Logger.label %(level)d Internal logging level %(line)d Line number in module %(module)s Module name %(message)s Log message Standard levels: FATAL Fatal error messages ERROR Error messages WARNING Warning messages INFOx, x in [1..5] Information DEBUGy, y in [1..10] Debug messages NO_INFO No info output NO_DEBUG No debug output INFO_MAX Maximum info level DEBUG_MAX Maximum debug level x and y depend on info_max and debug_max from Logger class initialization. See __init__ function. Default logging targets: stdout Logs to stdout stderr Logs to stderr syslog Logs to syslog Additional arguments for logging functions (fatal, error, warning, info and debug): nl Disable newline at the end with nl=0, default is nl=1. fmt Format string for this logging entry, overloads global format string. Example: fmt="%(file)s:%(line)d %(message)s" nofmt Only output message with nofmt=1. The nofmt argument wins over the fmt argument. Example: from logger import log log.setInfoLogLevel(log.INFO1) log.setDebugLogLevel(log.DEBUG1) for i in range(1, log.INFO_MAX+1): log.setInfoLogLabel(i, "INFO%d: " % i) log.setFormat("%(date)s %(module)s:%(line)d [%(domain)s] %(label)s: " "%(level)d %(message)s") log.setDateFormat("%Y-%m-%d %H:%M:%S") fl = FileLog("/tmp/log", "a") log.addInfoLogging("*", fl) log.addDebugLogging("*", fl) log.addInfoLogging("*", log.syslog, fmt="%(label)s%(message)s") log.debug3("debug3") log.debug2("debug2") log.debug1("debug1") log.info2("info2") log.info1("info1") log.warning("warning\n", nl=0) log.error("error\n", nl=0) log.fatal("fatal") log.info(log.INFO1, "nofmt info", nofmt=1) rc i|_i|_d|_d|_i|_i|_i|_i|_i|_i|_ |dkrtd|z|dkrtd|z|j|_ ||_ d|_||_|j!|j"d|j!|j$d|j!|j&d|j!|jdt)d|jdzD]<}t+|d |z||j!|dt+|d |zd ||>t)d|jdzD]?}t+|d |z||j-|d |zt+|d|zd||A|j/|j0|j3|j|j5d|j7d|j9d|j:|j"|j&|jg|j9d|j<t)|j0|jdzDcgc]}|c}|j?d|j<t)d|jdzDcgc]}|c}ycc}wcc}w)zLogger class initializationr<zLogger: info_max %d is too lowrzLogger: debug_max %d is too lowz FATAL ERROR: zERROR: z WARNING: zINFO%dzinfo%dcfdS)Nc2j|g|i|Sr)infomessageargskwargsr xs r z3Logger.__init__....s(YTYY7F%)F-3Fr r r rrs``r rsz!Logger.__init__..%r zDEBUG%dz DEBUG%d: zdebug%dcfdS)Nc2j|g|i|Sr)debugrns r rsz3Logger.__init__....,s(ZTZZ7F%)F-3Fr r rts``r rsz!Logger.__init__..,rur z%(label)s%(message)sz%d %b %Y %H:%M:%S*N) _level _debug_level_format _date_format_label _debug_label_logging_debug_logging_domains_debug_domains ValueErrorr@NO_INFOINFO_MAXNO_DEBUG DEBUG_MAXsetInfoLogLabelrD TRACEBACKrBrangesetattrsetDebugLogLabelsetInfoLogLevelr>setDebugLogLevel setFormat setDateFormatsetInfoLoggingr.r%setDebugLogging)r info_max debug_maxrzis r r zLogger.__init__s        a<=HI I q=>JK K||    " TZZ9 T^^R0 TZZ3 T\\;7At}}q01F D(V+V 4   , F#   2At~~12F D)f,f 5  ! !&+*> ? V$   3 TZZ( dmm, -. ./ Ctzz4::t||.TU  % DMMA>A3E*FG*FQq*FG PHs  K K ct|j|jdzD]9}||jvr|j|D]\}}}|j ;y)zClose all logging targetsr<N)rrDrrr)r rdummytargets r rz Logger.close?sR4::t~~'9:EDMM)(, e(<$vu )=;r cv|j|||jvr|j|S|jS)zGet info log level.) _checkDomainrzNOTHINGr domains r getInfoLogLevelzLogger.getInfoLogLevelGs5 &! T[[ ;;v& &||r c|j|||jkr |j}||jkDr |j}||j|<y)z#Set log level [NOTHING .. INFO_MAX]N)rrrrzr rrs r rzLogger.setInfoLogLevelNsH &! 4<< LLE 4== MME# Fr c|j|||jvr|j||jzS|jS)zGet debug log level.)rr{rrs r getDebugLogLevelzLogger.getDebugLogLevelWsB &! T&& &$$V,t}}< <}}r c|j||dkrd}||jkDr |j}||jz |j|<y)z+Set debug log level [NO_DEBUG .. DEBUG_MAX]rN)rrrr{rs r rzLogger.setDebugLogLevel^sJ &! 19E 4>> !NNE$)DMM$9&!r c|jSrr|rs r getFormatzLogger.getFormatgs ||r c||_yrrr r|s r rzLogger.setFormatjs  r c|jSrr}rs r getDateFormatzLogger.getDateFormatms   r c||_yrrrs r rzLogger.setDateFormatps #r c|j|}|D]9}|j||j|j||j|<;y)SSet log label for level. Level can be a single level or an array of levels. min_level max_levelN) _getLevels_checkLogLevelrDrr~r rlabellevelss r rzLogger.setInfoLogLabelssG'E   t}}  U!&DKK r c|j|d}|D]9}|j||j|j||j|<;y)rr<rrN)rrr>rrrs r rzLogger.setDebugLogLabel{sM3E   t~~  V',D  e $r Nc0|j||||dy)zSet info log target for domain and level. Level can be a single level or an array of levels. Use level ALL to set for all levels. If no format is specified, the default format will be used.rrN _setLoggingr rrrfmts r rzLogger.setInfoLogging a@r c0|j||||dy)zSet debug log target for domain and level. Level can be a single level or an array of levels. Use level ALL to set for all levels. If no format is specified, the default format will be used.r<rNrrs r rzLogger.setDebugLoggingrr c0|j||||dy)zAdd info log target for domain and level. Level can be a single level or an array of levels. Use level ALL to set for all levels. If no format is specified, the default format will be used.rrN _addLoggingrs r addInfoLoggingzLogger.addInfoLoggingrr c0|j||||dy)zAdd debg log target for domain and level. Level can be a single level or an array of levels. Use level ALL to set for all levels. If no format is specified, the default format will be used.r<rNrrs r addDebugLoggingzLogger.addDebugLoggingrr c0|j||||dy)zDelete info log target for domain and level. Level can be a single level or an array of levels. Use level ALL to set for all levels. If no format is specified, the default format will be used.rrN _delLoggingrs r delInfoLoggingzLogger.delInfoLoggingrr c0|j||||dy)zDelete debug log target for domain and level. Level can be a single level or an array of levels. Use level ALL to set for all levels. If no format is specified, the default format will be used.r<rNrrs r delDebugLoggingzLogger.delDebugLoggingrr c(|j|dS)zLIs there currently any info logging for this log level (and domain)?rr_isLoggingHerer rs r isInfoLoggingHerezLogger.isInfoLoggingHere""51"55r c(|j|dS)zMIs there currently any debug logging for this log level (and domain)?r<rrrs r isDebugLoggingHerezLogger.isDebugLoggingHererr cr|j|d|d<|j|j|g|i|y)zFatal error log.rrN) _checkKWargs_logrDr r|rprqs r fatalz Logger.fatal8 &!z $**g777r cr|j|d|d<|j|j|g|i|y)z Error log.rrN)rrrBrs r errorz Logger.errorrr cr|j|d|d<|j|j|g|i|y)z Warning log.rrN)rrr@rs r warningzLogger.warnings8 &!z $,,9$9&9r c|j|d|j|j|d|d<|j||jz|g|i|y)zInformation log using info level [1..info_max]. There are additional infox functions according to info_max from __init__r<rrrN)rrrrrr rr|rprqs r rmz Logger.infosX EQ$--H &!z %$,,&A$A&Ar c|j|d|j|j|d|d<|j||g|i|y)zDebug log using debug level [1..debug_max]. There are additional debugx functions according to debug_max from __init__r<rrN)rrrrrs r rxz Logger.debugsO EQ$..I &!z %24262r cf|j|jtjgiy)N)rprq)rr traceback format_excrs r exceptionzLogger.exceptions# $..)"6"6"8r" Mr c:||ks||kDrtd|||fzy)Nz*Level %d out of range, should be [%d..%d].r)r rrrs r rzLogger._checkLogLevels5 9  1<)Y/0 !2r cX|sy|jD]}|dvstd|zy)N)nlrnofmtz0Key '%s' is not allowed as argument for logging.)keysr)r rqkeys r rzLogger._checkKWargss6 ;;=C00 FL!r c.|r|dk(rtd|zy)NrjzDomain '%s' is not valid.rrs r rzLogger._checkDomains!286AB B&r c||jk7rxt|tst|tr|}n|g}|D]K}|r|j |d|j $|j ||j |jM|S|r/t|j|j Dcgc]}|}}|St|j |jDcgc]}|}}|Scc}wcc}w)zGenerate log level array.r<r) ALL isinstancelisttuplerrrDrrDEBUG1)r rrrrs r rzLogger._getLevelss DHH %&*UE*B''dnn'U''t}}(   %*4;;%GH%G!%GH &+4::t}}%EF%E!%EF IFs , C( C-ct|tst|tr|}n|g}|D]>}t|jt rt d|jjz|S)zGenerate target array.z '%s' is no valid logging target.)rrr issubclass __class__rrr)r rtargets_targets r _getTargetszLogger._getTargetssc fd #z&%'@GhGGg//; 69J9J9S9SS r c|r*|j}|j}d|jdzf}n3|j}|j}|j |j dzf}t|dkDr|jt|d|dD];}||vr||D],\}}}||vs |j|gj|.=y)z#Generate dict with domain by level.r<rN) rrrrrrDrrGclearr setdefaultappend)r rrr_rangerrrs r _genDomainszLogger._genDomainss **H**H!+,F}}H}}Hjj$--!"34F x=1  NN 6!9fQi0EH$(0$u)''r299&A)81r c|j||j||}|j|}|r |j}n |j}|D]}|D] }|||fg||< |j |yr)rrrrrr r rrrrrrrrs r rzLogger._setLogging(s~ &!1""6* **H}}HE!$*FC#8"9" "r c(|j||j||}|j|}|r |j}n |j}|D]-}|D]&}|j |gj |||f(/|j|yr)rrrrrrrrrs r rzLogger._addLogging7s &!1""6* **H}}HE!##E2.55vvs6KL" "r c |j||j||}|j|}|r |j}n |j}|D]y} |D]r}| |vr|||f|| vr,|| j |||ft || dk(r|| =>||jk7sNtd| ||jj|fz{|j|y)NrzENo matching logging for level %d, domain %s, target %s and format %s.) rrrrrremoverGrrrrr) r rrrrrrrrrzs r rzLogger._delLoggingFs &!1""6* **H}}HF!)FC(HV,<<V$++VVS,AB8F+,1$V, DHH$$H!66+;+;+D+DcJK" "r c|j||}|sy|ddz}|r |j}n |j}||D]7\}}}|dk(s+|j|st j |d|s7yy)NFr.ryT)_genDictrrrUfnmatch fnmatchcase)r rr_dict point_domainrrrs r rzLogger._isLoggingHereas eX.X, **H}}H%-UO FE5# **62&&uX? %4r c@|jjdkDr`|jjd}||jvr9|j|}|j |j |j}|r|St j|j}|j}|j|jvrJt|j|jdr'|j|jj|k(ry|jjD]{\}}t|tjs!t||js8t!||j}t|tj"si|j|k(sy|cSy)z5Function to get calling class. Returns class or None.r func_codeN)f_code co_argcount co_varnamesf_locals _getClass2rinspect getmoduleco_name__dict__hasattr__code__itemsrtypes ClassTypegetattr FunctionType) r frameselfname_selfobjmodulecodervalues r _getClasszLogger._getClassws7 << # #a '||//2H5>>)x0ooeoou||DJ""5<<0|| <<6?? * 5{COODLL1::dB!////1JE3#u/3 -#C6E!%););< >>T1#&J 2r c|jjD]0}t|tjs|j |k(s.|cS|j D]}|j||}|s|cSy)z>Internal function to get calling class. Returns class or None.N)rvaluesrrrr __bases__r)r r!r#r$base_objs r rzLogger._getClass2sg\\((*E%!3!34>>T)J+ MMD??4.D "r cd}d|vr|d}d}d|vr|d}d}d|vr|d}|j||}|syt|dkDr ||z|d<nt|dk(r ||dz|d<n||d<|ddz} |r |j} n |j} g} | |D]\} } }| | vr | d k(s.| j | dzst j |d| s?|s |j}d |vr|d }|r| j|d|||n| j||z||||r| jd |||| j| y) Nrrr<rrrorrryrr;) rrGrrrUrr r|rr)r rr|rprqrrrr r r used_targetsrrs r rz Logger._logs  j)H  6>B f 7OE eX.  t9q=&~E)  Y!^&a0E) &E) X, **H}}H '/ #FFG%# **6C<8&&uX?"llGF?$UmGLLy!15$ILL5%xHLLudH=##F+%(7r c g}d}|r%|j}|j}|j}n$|j}|j}|j }|D]>}|dk(r|||k\sd}t |dkDrg}n|||k\s.|j|@|st |dkry||vrytj} | r_| jrS| jd|jk(r7| j} | r)| jr| jd|jk(r7| s td| jd} | d z} |D]}| j|sg}n| j} t | } ||D][}|j!d}|dk(r|dkDr|d|}n|}| t |k\r| j|rGy|j| r[yd }||vr||}| j"| j$| d | j&d ||t)j*|j,t)j.d }|d d k(rd |d <d}||D] }|dk(r d}n|j0j!ddk\s.|j0j!ddk\s|st |dkDr"|j3| }|r|j4|d<d |dz|d<|dd k7r|dxxd |dzz cc<|d d k7r|dxxd |d zz cc<t |dkr|S|dd z}|D]0}|j|st7j8|d|s.|cSy)zInternal function.FryTrr<Nrz Frame information not available.rrj) fileliner"classfunctionrrrdater1?z %(domain)z%(class)r0r"r)r{rrrzrr~rGrr currentframef_back f_globalsrrrUrfind co_filenamef_linenortimestrftimer} localtimer|r%rrr )r rr check_domains simple_matchr rr~rf module_name point_moduleco_lenrd level_str domain_neededr!r s r rzLogger._genDicts  %%E**H&&FKKE}}H[[FF}=E)#'L=)A-(* =E)!((0M 2Q 6    "AHHZ!8DOO!KAAHHZ!8DOO!K?@ @kk*- #S( #F&&v. "  $XX;uoF C AAvQ2AJs1v~"--a0||K0&  F?u INNJJ! MM$"3"3T^^5EF     # "E*  uoF} M  & LL  k *a /||  ,1=!A%..#C!$guX.h >R  (OsU7^3 3O   " (OsU:%66 6O }  !LX, #F&&v.'2E2Eh3 $ r ) )ryr)8rrrrrrrDrrBr@r"r%r,r.r0r2r rrrrrrrrrrrrrrrrrrrrrrrmrxrrrrrrrrrrrr%rrrr r r rcrcs\FP CG EI EG\F \F \FD L$:!$'-47DA 58TA 47DA 58TA 47DA 58TA 6 68 8 : B3N C* B,14 #14 #14#6, D 3,lAr rc)r$rr:rrr2rrZos.pathr4rr"r,r0rMrclogr r r rKs~    K K(*( ( \%i%V{ { B h0r