c`c@sdddgZddljZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZmZmZmZmZddlmZdd lmZdd lmZde fd YZd e fd YZdZddZdS(tServicetservice_readertservice_writeriN(tconfig(t u2b_if_py2(tPY2t IO_ObjecttIO_Object_ContentHandlertIO_Object_XMLGeneratort check_portt check_tcpudptcheck_protocolt check_address(tlog(terrors(t FirewallErrorc BseZdddddgfddgfdidd6fddgfddgffZd Zd d gZidd6dd6dd 6Zid dgd 6ddgd6dgd6d gd6ddgd6ddgd6ZdZdZ dZ dZ RS(tversionttshortt descriptiontportstmodulest destinationt protocolst source_portss(sssa(ss)asa{ss}asa(ss))t_t-tservicetnametporttprotocoltvaluetmoduletipv4tipv6s source-portcCs_tt|jd|_d|_d|_g|_g|_g|_i|_ g|_ dS(NR( tsuperRt__init__RRRRRRRR(tself((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pyR$As       cCsHd|_d|_d|_|j2|j2|j2|jj|j2dS(NR( RRRRRRRtclearR(R%((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pytcleanupLs    cCst|j|_t|j|_t|j|_g|jD]$\}}t|t|f^q@|_g|jD]}t|^qw|_d|jjD|_g|jD]}t|^q|_g|j D]$\}}t|t|f^q|_ dS(s HACK. I haven't been able to make sax parser return strings encoded (because of python 2) instead of in unicode. Get rid of it once we throw out python 2 support.cSs+i|]!\}}t|t|qS((R(t.0tktv((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pys _s N( RRRRRRRtitemsRR(R%tpotprtm((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pytencode_stringsVs7%%cCs|dkr]x|D]C}|ddkrHt|dt|dqt|dqWnH|dkrx9|D]}t|qpWn|dkrx|D]"}t|dt|dqWn|dkrx|D]<}|dkrttjd |nt|||qWn|d krx}|D]r}|jd rw|jd d}d |krw|jd d}qwnt |dkr,ttj |q,q,WndS(NRiRiRRRR!R"s'%s' not in {'ipv4'|'ipv6'}Rt nf_conntrack_RRi(R!R"( R R R RRtINVALID_DESTINATIONR t startswithtreplacetlentINVALID_MODULE(R%RtitemRtprotoRR ((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pyt _check_configds8              (sversionR(sshortR(s descriptionR(RR(RRN( t__name__t __module__tIMPORT_EXPORT_STRUCTUREtDBUS_SIGNATUREtADDITIONAL_ALNUM_CHARStNonetPARSER_REQUIRED_ELEMENT_ATTRStPARSER_OPTIONAL_ELEMENT_ATTRSR$R'R/R8(((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pyR&s2           tservice_ContentHandlercBseZdZRS(cCsxtj||||jj|||dkrwd|krUtjd|dnd|krt|d|j_qtn|dkrn|dkrn|dkr||ddkr't|dt|d |d|d f}||jj kr |jj j |qytjd |d|d qtt |d |d |jj kre|jj j |d qttjd |d n|d krt |d |d |jj kr|jj j |d qttjd |d n|d kr_t|dt|d |d|d f}||jj krA|jj j |qttjd|d|d n|dkrxddgD]_}||krxt|||||jjkrtjd|q|||jj|t setByteStreamtparsetSAXParseExceptiontINVALID_SERVICEt getExceptionRR/( RMRNRthandlertparserRtftsourcetmsg((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pyRs8     !       c Cs|r |n|j}|jr4d||jf}nd||jf}tjj|rytj|d|Wqtk r}tj d||qXntjj |}|j t j rtjj| rtjjt j stjt j dntj|dntj|dddd }t|}|ji}|jrq|jd krq|j|d R(((s</usr/lib/python2.7/site-packages/firewall/core/io/service.pyts   :dE