VULN_CHECK_I913V6 =j9ddlmZddlZddlZddlZddlmZddlmZddl m Z m Z ddl m Z mZmZddlmZddlmZddlmZdd lmZdd lmZGd d eZGd de Zy)N)config)LastUpdatedOrderedDict) splitArgsjoinArgs) IO_ObjectIO_Object_ContentHandlerIO_Object_XMLGenerator)log) ipXtables)ebtables)errors) FirewallErrorceZdZdZdZdZy)direct_ContentHandlerc>tj||d|_y)NF)r__init__direct)selfitems tj|||dk(r|jrY|jj t |j|j j|jd|_ytjdd|_y|dk(r{|jrR|jj t |j|j j|jntjdd|_ yy)Nrz2Error: rule does not have any arguments, ignoring.r"z9Error: passthrough does not have any arguments, ignoring.) r endElement_elementr+appendrradd_ruler r&r,add_passthrough)rr-s rr0z direct_ContentHandler.endElementPs ++D$7 6>}} !!)DMM":;" ""DJJ/DJ NODJ ] "}}!!((4==)AB) ))4+<+<= T!%D #rN)__name__ __module__ __qualname__rr#r0rrrrs-^%rrceZdZdZdgdddddgfgddgfgdZdZdgdgd d gd ZiZfd Zd Z dZ dZ dZ dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZd Zd!Zd"Zd#Zd$Z d%Z!xZ"S)&Directz Direct class)r;r;r;r)chainsrules passthroughsz(a(sss)a(sssias)a(sas))Nrrrrrrr!r)rrrr"ctt| ||_t |_t |_t |_yN)superr:rfilenamerr<r=r>)rrD __class__s rrzDirect.__init__{s6 fd$&  ,. +- 24rcyrBr8)rconfrall_confall_io_objectss r _check_configzDirect._check_configs rcg}g}|jD]F}|j|D]2}|jtt|t|gz4H|j|g}|jD]M}|j|D]9}|jt|d|d|d|dt|df;O|j|g}|j D];}|j |D]'}|jt|t|f)=|j|t|S)Nr)r<r2tuplelistr=r>)rretxkeyrrs r export_configzDirect.export_configs ;;CS)tCy4=89:* 1 ::C 3AAAQd1gOPQ( 1 $$C))#.T$Z012/% 1 Szrc:|j|j|t|jD]b\}}|dk(r||D]}|j|%|dk(r||D]}|j |D|dk(sJ||D]}|j |dy)Nr<r=r>)cleanup check_config enumerateIMPORT_EXPORT_STRUCTUREr'r3r4)rrGrIielementrQs r import_configzDirect.import_configs  $#D$@$@AJAw("aA"DNNA&!G#aA!DMM1%!N*aA(D((!,!Brc|jj|jj|jjyrB)r<clearr=r>rs rrUzDirect.cleanups4   !rc >td|jD]8}td|dd|dddj|j|:td|jD]V}td|dd|dd|d d |j|D]$\}}td |d j|fz&Xtd |jD]A}td|z|j|D]}tdd j|z!Cy)Nr<z (rz, rLz): ,r=rMz):z (%d, ('%s'))z','r>z %s:z ('%s'))printr<joinr=r>)rrRr!argss routputz Direct.outputs h;;C c!fc!fchht{{3?O6PQ R g::C s1vs1vs1v> ?"&**S/$(Hejj6F+GGH#2 n$$C 'S/ "))#.lejj&678/%rcVgd}||vr!ttjd|d|dy)Nr' ' not in ')rr r()rripvss r _check_ipvzDirect._check_ipvs+% d? 2 2#t4TU U rc|j||dvrtjjntjj}||vr!t t jd|d|dy)N)rrrfrg)rir BUILT_IN_CHAINSkeysr rr INVALID_TABLE)rrrtabless r_check_ipv_tablezDirect._check_ipv_tablesp &&  % % * * ,))..0   $$E6&J  rc |j||||f}||jvrg|j|<||j|vr|j|j|ytjd|d|d|ddzy)NChain ' ' for table ' ' with ipv '' already in list, ignoring)ror<r2r warningrrrrrRs rr'zDirect.add_chains{ c5)El dkk !!DKK   C( ( KK  # #E * KK>CUCP-. rc &|j||||f}||jvrY||j|vrH|j|j|t|j|dk(r|j|=yyt d|d|d|d)Nrrqz' with table 'rsz ' not in list)ror<removelenr*rws r remove_chainzDirect.remove_chains c5)El $++ %4;;s+;"; KK  # #E *4;;s#$)KK$*%& rcp|j||||f}||jvxr||j|vSrB)ror<rws r query_chainzDirect.query_chains= c5)Eldkk!?et{{3/?&??rc|j||||f}||jvr|j|Std|d|d)NzNo chains for table 'rsrf)ror<r*)rrrrRs r get_chainszDirect.get_chainssG c5)El $++ ;;s# #PSTU Urc|jSrB)r<r^s rget_all_chainszDirect.get_all_chainss {{rc P|j|||||f}||jvrt|j|<|t|f}||j|vr||j||<yt j ddj |d|d|dd||fzzdzy)NRule '',rr ' and chain 'rtzwith ipv '%s' and priority %d ru)ror=rrNr rvrbrrrrr!rcrRvalues rr3zDirect.add_rules c5)E5! djj 46DJJsO5;'  3 '%-DJJsOE " KK99T?E522c8_DE.. rc T|j|||||f}|t|f}||jvrK||j|vr:|j||=t|j|dk(r|j|=yyt ddj |d|d|dd||fzz)Nrrrrrrrtz)with ipv '%s' and priority %d not in list)rorNr=rzr*rbrs r remove_rulezDirect.remove_rule s c5)E5!5;' $** $**S/!9 3&4::c?#q(JJsO)99T?E52=hOP rc|j|||||f}||jvr\|j|jD]}|j||=t|j|dk(r|j|=yyy)Nr)ror=rlrz)rrrrrRrs r remove_ruleszDirect.remove_ruless c5)E5! $** C--/JJsOE*04::c?#q(JJsO) rc|j|||||f}|t|f}||jvxr||j|vSrB)rorNr=rs r query_rulezDirect.query_rule#sM c5)E5!5;'djj =Udjjo%==rc|j|||||f}||jvr|j|Std|d|dd|zz)NzNo rules for table 'rrtz with ipv '%s')ror=r*rws r get_ruleszDirect.get_rules)sZ c5)E5! $** ::c? "=BEJ!S)* rc|jSrB)r=r^s r get_all_ruleszDirect.get_all_rules4s zzrc|j|||jvrg|j|<||j|vr|j|j|ytjddj |d|ddzy)N Passthrough 'r ' for ipv 'rfru)rir>r2r rvrbrrrcs rr4zDirect.add_passthrough9s|  d'' '%'D  c " t((- -   c " ) )$ / KK3799T?CH-. rc:|j|||jvrY||j|vrH|j|j|t|j|dk(r|j|=yyt ddj |d|ddz)Nrrrrrfz not in list)rir>ryrzr*rbrs rremove_passthroughzDirect.remove_passthroughEs  $## #0A0A#0F(F   c " ) )$ /4$$S)*a/%%c*03799T?CH=X rcf|j|||jvxr||j|vSrB)rir>rs rquery_passthroughzDirect.query_passthroughPs4 d'''JDD4E4Ec4J,JJrcz|j|||jvr|j|Std|z)NzNo passthroughs for ipv '%s')rir>r*)rrs rget_passthroughszDirect.get_passthroughsTs>  $## #$$S) );sCD Drc|jSrB)r>r^s rget_all_passthroughszDirect.get_all_passthroughs[s   rc\|j|jjds'ttj d|jzt |}tj}|j|t|jd5}tjd}|j| |j| dddy#tj$r0}ttjd|j!zd}~wwxYw#1swYyxYw)Nz.xmlz'%s' is missing .xml suffixrbzNot a valid file: %s)rUrDendswithrr INVALID_NAMErsax make_parsersetContentHandleropen InputSource setByteStreamparseSAXParseException INVALID_TYPE getException)rhandlerparserfsourcemsgs rreadz Direct.read`s }}%%f-##%BT]]%R (-"  ) $-- &!__T*F   #  V$ ' & (( #'')?#BRBRBT)T  ' &s*'D"CD/+DDD""D+c tjj|jr. t j |jd|jztjjtjs$tjtjdtj|jdd}t|}|j|jdi|j!d |j"D]S}|\}}|j"|D]:}|j!d |j%d |||d |j!d <U|j&D]}|\}}}|j&|D]\}} t)| d kr|j!d |jd|||d|zd|j!t*j,j/t1| |j3d|j!d |j4D]}|j4|D]} t)| d kr|j!d |jdd|i|j!t*j,j/t1| |j3d|j!d |j3d|j!d |j7|j9~y#t $r }td|jd|d}~wwxYw)Nz%s.oldz Backup of 'z ' failed: iwtzUTF-8)modeencodingr z rr?rLrz%dr@r"r)ospathexistsrDshutilcopy2 ExceptionIOErrorr ETC_FIREWALLDmkdiriorr startDocumentr#ignorableWhitespacer< simpleElementr=rzrsaxutilsescaperr0r> endDocumentclose) rrrrrRrrrr!rcs rwritez Direct.writess 77>>$-- ( R T]]Ht}},DEww~~f223 HHV))5 1 GGDMMw ?(+ Xr*##D);;CLS%S)++D1%%S55I++D1 *::C"% S%"&**S/$t9q=++D1$$"!&!&$(8O ++CLL,?,?,OP""6*++D1#2($$C))#.t9q=++D1$$]UCLA++CLL,?,?,OP""=1++D1/% 8$##D)  y RT]]CPQQ Rs-L"" M +MM )#r5r6r7__doc__rXDBUS_SIGNATUREPARSER_REQUIRED_ELEMENT_ATTRSPARSER_OPTIONAL_ELEMENT_ATTRSrrJrSr[rUrdriror'r{r}rrr3rrrrrr4rrrrrr __classcell__)rEs@rr:r:gs .r2q2$'(rd /N*5w %! %'!5 & -" 9V   @ V  $>   KE! &@rr:)xml.saxrrrrfirewallrfirewall.fw_typesrfirewall.functionsrrfirewall.core.io.io_objectrrr firewall.core.loggerr firewall.corer r r firewall.errorsrrr:r8rrrsU 42 %#")H%4H%VLYLr