Edit File: direct.cpython-36.pyc
3 Ye�=������������������@���s����d�dl�jZd�dlZd�dlZd�dlZd�dlmZ�d�dlmZ�d�dl m Z mZmZ�d�dl mZmZmZ�d�dlmZ�d�dlmZ�d�dlmZ�d�d lmZ�d�d lmZ�G�dd��de�ZG�d d��de�ZdS�)�����N)�config)�LastUpdatedOrderedDict)� splitArgs�joinArgs� u2b_if_py2)� IO_Object�IO_Object_ContentHandler�IO_Object_XMLGenerator)�log)� ipXtables)�ebtables)�errors)� FirewallErrorc���������������@���s$���e�Zd�Zdd��Zdd��Zdd��ZdS�)�direct_ContentHandlerc�������������C���s���t�j|�|��d|�_d�S�)NF)r����__init__�direct)�self�item��r����/usr/lib/python3.6/direct.pyr���(���s����zdirect_ContentHandler.__init__c�������������C���s���t�j|�||��|�jj||��|dkr@|�jr6ttjd��d|�_�n>|dkr�|�js\tj d��d�S�|d�}|d�}|d�}|�jj t|�t|�t|���n�|dk�r6|�js�tj d ��d�S�|d�}|dkr�ttjd |���|d�}|d�}yt |d��}W�n(�tk �r���tj d|d����d�S�X�t|�t|�t|�|g|�_nH|dk�rl|�j�sVtj d��d�S�|d�}t|�g|�_ntj d|���d�S�d�S�)Nr���zMore than one direct tag.T�chainz$Parse Error: chain outside of direct�ipv�table�rulez#Parse Error: rule outside of direct�ipv4�ipv6�ebz"'%s' not from {'ipv4'|'ipv6'|'eb'}�priorityz'Parse Error: %s is not a valid priority�passthroughz&Parse Error: command outside of directzUnknown XML element %s)r���r���r���)r����startElementr���Zparser_check_element_attrsr���r���r ���ZPARSE_ERRORr ����error� add_chainr����INVALID_IPV�int� ValueError�_rule�_passthrough)r����nameZattrsr���r���r���r���r���r���r���r���,���sT���� z"direct_ContentHandler.startElementc�������������C���s����t�j|�|��|dkrX|�jrF|�jjdd��t|�j�D����|�jj|�j���n tj d��d�|�_nJ|dkr�|�jr�|�j jdd��t|�j�D����|�jj|�j ���n tj d ��d�|�_ d�S�) Nr���c�������������S���s���g�|�]}t�|��qS�r���)r���)�.0�xr���r���r���� <listcomp>d���s���z4direct_ContentHandler.endElement.<locals>.<listcomp>z2Error: rule does not have any arguments, ignoring.r���c�������������S���s���g�|�]}t�|��qS�r���)r���)r(���r)���r���r���r���r*���m���s���z0Error: passthrough does not have any arguments, z ignoring.z9Error: passthrough does not have any arguments, ignoring.)r���� endElementZ_elementr%����appendr���r����add_ruler ���r ���r&����add_passthrough)r���r'���r���r���r���r+���^���s ���� z direct_ContentHandler.endElementN)�__name__� __module__�__qualname__r���r���r+���r���r���r���r���r���'���s���2r���c�������������������s<��e�Zd�ZdZddBgfddddddgfgfdddgfgffZdZdd d dgd d ddgd gd �Zi�Z��fdd�Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��Zdd��Zd d!��Zd"d#��Zd$d%��Zd&d'��Zd(d)��Zd*d+��Zd,d-��Zd.d/��Zd0d1��Zd2d3��Zd4d5��Zd6d7��Zd8d9��Zd:d;��Zd<d=��Zd>d?��Z d@dA��Z!���Z"S�)C�Directz Direct class �chains���rulesr����passthroughsz(a(sss)a(sssias)a(sas))Nr���r���r���r���)r���r���r���r���c����������������s0���t�t|��j���||�_t��|�_t��|�_t��|�_d�S�)N)�superr2���r����filenamer���r3���r5���r6���)r���r8���)� __class__r���r���r�������s ����zDirect.__init__c�������������C���s���d�S�)Nr���)r����confr���Zall_confr���r���r���� _check_config����s����zDirect._check_configc�������������C���s��g�}g�}x>|�j�D�]4}x.|�j�|�D�] }|jtt|�t|g�����q W�qW�|j|��g�}xR|�jD�]H}xB|�j|�D�]4}|jt|d�|d�|d�|d�t|d��f���qnW�q^W�|j|��g�}x8|�jD�].}x(|�j|�D�]}|jt|t|�f���q�W�q�W�|j|��t|�S�)Nr�����������)r3���r,����tuple�listr5���r6���)r����retr)����keyr���r���r���r���r���� export_config����s$����$ zDirect.export_configc�������������C���s����|�j����|�j|��x�t|�j�D�]x\}\}}|dkrNx||�D�]}|�j|���q<W�|dkrrx||�D�]}|�j|���q`W�|dkrx||�D�]}|�j|���q�W�qW�d�S�)Nr3���r5���r6���)�cleanupZcheck_config� enumerate�IMPORT_EXPORT_STRUCTUREr!���r-���r.���)r���r:����i�elementZdummyr)���r���r���r���� import_config����s���� zDirect.import_configc�������������C���s"���|�j�j���|�jj���|�jj���d�S�)N)r3����clearr5���r6���)r���r���r���r���rC�������s���� zDirect.cleanupc�������������C���s����t�d��x4|�jD�]*}t�d|d�|d�dj|�j|��f���qW�t�d��xZ|�jD�]P}t�d|d�|d�|d�f���x,|�j|�D�]\}}t�d |d j|�f���q|W�qNW�t�d��x@|�jD�]6}t�d|���x$|�j|�D�]}t�d d j|����q�W�q�W�d�S�)Nr3���z (%s, %s): %sr���r<����,r5���z (%s, %s, %s):r=���z (%d, ('%s'))z','r6���z %s:z ('%s'))�printr3����joinr5���r6���)r���rA���r����argsr���r���r����output����s����z Direct.outputc�������������C���s*���dddg}||kr&t�tjd||f���d�S�)Nr���r���r���z'%s' not in '%s')r���r ���r"���)r���r���Zipvsr���r���r���� _check_ipv����s���� zDirect._check_ipvc�������������C���sF���|�j�|��|dkrtjj��ntjj��}||krBttjd||f���d�S�)Nr���r���z'%s' not in '%s')r���r���)rO���r���ZBUILT_IN_CHAINS�keysr���r���r ���Z INVALID_TABLE)r���r���r���Ztablesr���r���r����_check_ipv_table����s���� zDirect._check_ipv_tablec�������������C���sd���|�j�||��||f}||�jkr(g�|�j|<�||�j|�krH|�j|�j|��ntjd|||f�d���d�S�)Nz(Chain '%s' for table '%s' with ipv '%s' zalready in list, ignoring)rQ���r3���r,���r ����warning)r���r���r���r���rA���r���r���r���r!�������s���� zDirect.add_chainc�������������C���sn���|�j�||��||f}||�jkrX||�j|�krX|�j|�j|��t|�j|��dkrj|�j|=�ntd|||f���d�S�)Nr���z4Chain '%s' with table '%s' with ipv '%s' not in list)rQ���r3����remove�lenr$���)r���r���r���r���rA���r���r���r����remove_chain����s���� zDirect.remove_chainc�������������C���s,���|�j�||��||f}||�jko*||�j|�kS�)N)rQ���r3���)r���r���r���r���rA���r���r���r����query_chain����s����zDirect.query_chainc�������������C���s<���|�j�||��||f}||�jkr(|�j|�S�td||f���d�S�)Nz&No chains for table '%s' with ipv '%s')rQ���r3���r$���)r���r���r���rA���r���r���r���� get_chains����s���� zDirect.get_chainsc�������������C���s���|�j�S�)N)r3���)r���r���r���r����get_all_chains��s����zDirect.get_all_chainsc�������������C���s����|�j�||��|||f}||�jkr,t��|�j|<�|t|�f}||�j|�krV||�j|�|<�n*tjddj|�||f�d||f��d���d�S�)Nz(Rule '%s' for table '%s' and chain '%s' z',zwith ipv '%s' and priority %d zalready in list, ignoring)rQ���r5���r���r>���r ���rR���rL���)r���r���r���r���r���rM���rA����valuer���r���r���r-�����s���� zDirect.add_rulec�������������C���s����|�j�||��|||f}|t|�f}||�jkrb||�j|�krb|�j|�|=�t|�j|��dkr�|�j|=�n$tddj|�||f�d||f����d�S�)Nr���z(Rule '%s' for table '%s' and chain '%s' z',z)with ipv '%s' and priority %d not in list)rQ���r>���r5���rT���r$���rL���)r���r���r���r���r���rM���rA���rY���r���r���r����remove_rule��s���� zDirect.remove_rulec�������������C���sb���|�j�||��|||f}||�jkr^x"|�j|�j��D�]}|�j|�|=�q0W�t|�j|��dkr^|�j|=�d�S�)Nr���)rQ���r5���rP���rT���)r���r���r���r���rA���rY���r���r���r����remove_rules"��s���� zDirect.remove_rulesc�������������C���s:���|�j�||��|||f}|t|�f}||�jko8||�j|�kS�)N)rQ���r>���r5���)r���r���r���r���r���rM���rA���rY���r���r���r���� query_rule+��s���� zDirect.query_rulec�������������C���sF���|�j�||��|||f}||�jkr*|�j|�S�td||f�d|����d�S�)Nz'No rules for table '%s' and chain '%s' z with ipv '%s')rQ���r5���r$���)r���r���r���r���rA���r���r���r���� get_rules1��s���� zDirect.get_rulesc�������������C���s���|�j�S�)N)r5���)r���r���r���r���� get_all_rules:��s����zDirect.get_all_rulesc�������������C���s^���|�j�|��||�jkrg�|�j|<�||�j|�kr>|�j|�j|��ntjddj|�|f�d���d�S�)NzPassthrough '%s' for ipv '%s'z',zalready in list, ignoring)rO���r6���r,���r ���rR���rL���)r���r���rM���r���r���r���r.���?��s���� zDirect.add_passthroughc�������������C���sl���|�j�|��||�jkrN||�j|�krN|�j|�j|��t|�j|��dkrh|�j|=�ntddj|�|f�d���d�S�)Nr���zPassthrough '%s' for ipv '%s'z',znot in list)rO���r6���rS���rT���r$���rL���)r���r���rM���r���r���r����remove_passthroughI��s���� zDirect.remove_passthroughc�������������C���s"���|�j�|��||�jko ||�j|�kS�)N)rO���r6���)r���r���rM���r���r���r����query_passthroughS��s���� zDirect.query_passthroughc�������������C���s.���|�j�|��||�jkr|�j|�S�td|���d�S�)NzNo passthroughs for ipv '%s')rO���r6���r$���)r���r���r���r���r����get_passthroughsW��s���� zDirect.get_passthroughsc�������������C���s���|�j�S�)N)r6���)r���r���r���r����get_all_passthroughs^��s����zDirect.get_all_passthroughsc�������������C���s����|�j����|�jjd�s&ttjd|�j���t|��}tj��}|j |��t |�jd��b}tjd��}|j|��y|j |��W�n8�tjk r��}�zttjd|j�����W�Y�d�d�}~X�nX�W�d�Q�R�X�d�S�)Nz.xmlz'%s' is missing .xml suffix�rbzNot a valid file: %s)rC���r8����endswithr���r ���ZINVALID_NAMEr����saxZmake_parserZsetContentHandler�openZInputSourceZ setByteStream�parseZSAXParseExceptionZINVALID_TYPEZgetException)r����handler�parser�f�source�msgr���r���r����readc��s ���� zDirect.readc������� ������C���sB��t�jj|�j�r\ytj|�jd|�j���W�n4�tk rZ�}�ztd|�j|f���W�Y�d�d�}~X�nX�t�jjtj �sxt�j tj d��tj|�jddd�}t |�}|j���|jdi���|jd��xR|�jD�]H}|\}}x:|�j|�D�],}|jd ��|jd |||d���|jd��q�W�q�W�x�|�jD�]�}|\}}}xx|�j|�D�]j\}} t| �dk��r@�q&|jd ��|jd |||d|�d���|jtjjt| ����|jd ��|jd���q&W��qW�x||�jD�]r}xj|�j|�D�]\} t| �dk��rȐq�|jd ��|jdd|i��|jtjjt| ����|jd��|jd���q�W��q�W�|jd��|jd��|j���|j���~d�S�)Nz%s.oldzBackup of '%s' failed: %si���ZwtzUTF-8)�mode�encodingr���� z r���)r���r���r���r<���r���z%d)r���r���r���r���r���r���)�os�path�existsr8����shutilZcopy2� Exception�IOErrorr���Z ETC_FIREWALLD�mkdir�iorf���r ���Z startDocumentr���ZignorableWhitespacer3���Z simpleElementr5���rT���re���Zsaxutils�escaper���r+���r6���ZendDocument�close) r���rl���rj���rh���rA���r���r���r���r���rM���r���r���r����writeu��sZ����$ zDirect.write)r4���r4���r4���)#r/���r0���r1����__doc__rE���ZDBUS_SIGNATUREZPARSER_REQUIRED_ELEMENT_ATTRSZPARSER_OPTIONAL_ELEMENT_ATTRSr���r;���rB���rH���rC���rN���rO���rQ���r!���rU���rV���rW���rX���r-���rZ���r[���r\���r]���r^���r.���r_���r`���ra���rb���rm���r{���� __classcell__r���r���)r9���r���r2���u���sH��� r2���)Zxml.saxre���rq���rx���rt���Zfirewallr���Zfirewall.fw_typesr���Zfirewall.functionsr���r���r���Zfirewall.core.io.io_objectr���r���r ���Zfirewall.core.loggerr ���Z firewall.corer���r���r ���Zfirewall.errorsr���r���r2���r���r���r���r����<module>���s��� N