3 @)fu@sddlmZddlZeejd<ddlZddlZddlZddlZddl m Z ddl m Z m Z mZddlmZddlmZmZmZddl mZdd lmZGd d d ejjjZdS) )GObjectNZgobject)config)dbus_to_python%dbus_introspection_prepare_properties!dbus_introspection_add_properties)log)handle_exceptionsdbus_handle_exceptionsdbus_service_method)errors) FirewallErrorcseZdZdZdZejjZe fddZ e ddZ e ddZ e d d Zeejd d d e dddZeejddd e dddZejjjejjeejdde dddZejjejddddZejjjejjeejdde dfdd Zeejjd de dd!d"Zeejjdde dd#d$Zeejjd de dd%d&Z eejjdde dd'd(Z!eejje dd)d*Z"ejjejjdde d+d,Z#eejje dd-d.Z$ejjejjdde d/d0Z%eejjdde dd1d2Z&ejjejjdde d3d4Z'eejjdde dd5d6Z(eejjdde dd7d8Z)eejjdde dd9d:Z*eejjdde dd;d<Z+eejjdde dd=d>Z,eejjdde dd?d@Z-eejjdAde ddBdCZ.eejjdAde ddDdEZ/eejjd de ddFdGZ0eejjd de ddHdIZ1eejjd dJd e ddKdLZ2eejjdMde ddNdOZ3eejjdMde ddPdQZ4eejjdde ddRdSZ5eejjdde ddTdUZ6eejjddJd e ddVdWZ7eejjdAde ddXdYZ8eejjdAde ddZd[Z9eejjd de dd\d]Z:eejjd de dd^d_Z;eejjd dJd e dd`daZeejjdde ddfdgZ?eejjdde ddhdiZ@eejjddJd e ddjdkZAeejjdlde ddmdnZBeejjdlde ddodpZCeejjddd e ddqdrZDeejjd de ddsdtZEeejjdde ddudvZFeejjd dJd e ddwdxZGeejjdMde ddydzZHeejjdMde dd{d|ZIeejjdde dd}d~ZJeejjdde dddZKeejjddJd e dddZLZMS)FirewallDConfigServicezFirewallD main classTcs\tt|j||||_||_||_||_|d|_|d|_d|j|_ t |tj j dS)Nrzconfig.service.%d) superr __init__parentrobjitem_idbusnamepath _log_prefixrdbusDBUS_INTERFACE_CONFIG_SERVICE)selfrZconfservicerargskwargs) __class__$/usr/lib/python3.6/config_service.pyr7s   zFirewallDConfigService.__init__cCsdS)Nr)rrrr__del__DszFirewallDConfigService.__del__cCs |jdS)N)Zremove_from_connection)rrrr unregisterHsz!FirewallDConfigService.unregistercCs|dkrtj|jjS|dkr,tj|jjS|dkrBtj|jjS|dkrXtj|jjS|dkrntj|jjStj j d|dS)NnamefilenamerdefaultbuiltinzDorg.freedesktop.DBus.Error.InvalidArgs: Property '%s' does not exist) rStringrr"r#rZBooleanr$r% exceptions DBusException)r property_namerrr _get_propertyPsz$FirewallDConfigService._get_propertyZssv) in_signature out_signatureNcCsLt|t}t|t}tjd|j|||tjjkrBtjj d||j |S)Nz%s.Get('%s', '%s')zJorg.freedesktop.DBus.Error.UnknownInterface: Interface '%s' does not exist) rstrrdebug1rrrrr'r(r*)rinterface_namer)senderrrrGetas    zFirewallDConfigService.Getsza{sv}cCsdt|t}tjd|j||tjjkr6tjj d|i}xd D]}|j |||<q@Wtj |dd S) Nz%s.GetAll('%s')zJorg.freedesktop.DBus.Error.UnknownInterface: Interface '%s' does not existr"r#rr$r%Zsv) signature)r"r#rr$r%) rr.rr/rrrrr'r(r*Z Dictionary)rr0r1retxrrrGetAllrs   zFirewallDConfigService.GetAllZssv)r,cCslt|t}t|t}t|}tjd|j||||jj||tjj krXtj j d|tj j d|dS)Nz%s.Set('%s', '%s', '%s')zJorg.freedesktop.DBus.Error.UnknownInterface: Interface '%s' does not existzGorg.freedesktop.DBus.Error.PropertyReadOnly: Property '%s' is read-only) rr.rr/rr accessCheckrrrr'r()rr0r)Z new_valuer1rrrSets      zFirewallDConfigService.Setzsa{sv}as)r4cCs2t|t}t|}t|}tjd|j|||dS)Nz&%s.PropertiesChanged('%s', '%s', '%s'))rr.rr/r)rr0Zchanged_propertiesZinvalidated_propertiesrrrPropertiesChangeds   z(FirewallDConfigService.PropertiesChanged)r-cs8tjd|jtt|j|j|jj}t ||t j j S)Nz%s.Introspect()) rZdebug2rrr IntrospectrrZget_busrrrr)rr1data)rrrr;s  z!FirewallDConfigService.Introspectz(sssa(ss)asa{ss}asa(ss))cCstjd|j|jj|jS)z!get settings for service z%s.getSettings())rr/rrZget_service_configr)rr1rrr getSettingssz"FirewallDConfigService.getSettingscCstjd|j|jj|jS)z!get settings for service z%s.getSettings2())rr/rrget_service_config_dictr)rr1rrr getSettings2sz#FirewallDConfigService.getSettings2cCsFt|}tjd|j|jj||jj|j||_|j |jj dS)z$update settings for service z%s.update('...')N) rrr/rrr8rZset_service_configrUpdatedr")rsettingsr1rrrupdates  zFirewallDConfigService.updatecCsFt|}tjd|j|jj||jj|j||_|j |jj dS)Nz%s.update2('...')) rrr/rrr8rset_service_config_dictrr@r")rrAr1rrrupdate2s  zFirewallDConfigService.update2cCs<tjd|j|jj||jj|j|_|j|jj dS)z2load default settings for builtin service z%s.loadDefaults()N) rr/rrr8rZload_service_defaultsrr@r")rr1rrr loadDefaultss z#FirewallDConfigService.loadDefaultscCstjd|j|fdS)Nz%s.Updated('%s'))rr/r)rr"rrrr@szFirewallDConfigService.UpdatedcCs:tjd|j|jj||jj|j|jj|jdS)zremove service z%s.removeService()N) rr/rrr8rZremove_servicerZ removeService)rr1rrrremoves zFirewallDConfigService.removecCstjd|j|fdS)Nz%s.Removed('%s'))rr/r)rr"rrrRemovedszFirewallDConfigService.RemovedcCsFt|t}tjd|j||jj||jj|j ||_ |j |dS)zrename service z%s.rename('%s')N) rr.rr/rrr8rZrename_servicerRenamed)rr"r1rrrrenames   zFirewallDConfigService.renamecCstjd|j|fdS)Nz%s.Renamed('%s'))rr/r)rr"rrrrHszFirewallDConfigService.RenamedcCstjd|j|jdS)Nz%s.getVersion()r)rr/rr=)rr1rrr getVersionsz!FirewallDConfigService.getVersioncCsHt|t}tjd|j||jj|t|j}||d<|j |dS)Nz%s.setVersion('%s')r) rr.rr/rrr8listr=rB)rversionr1rArrr setVersions    z!FirewallDConfigService.setVersioncCstjd|j|jdS)Nz %s.getShort()r)rr/rr=)rr1rrrgetShort"szFirewallDConfigService.getShortcCsHt|t}tjd|j||jj|t|j}||d<|j |dS)Nz%s.setShort('%s')r) rr.rr/rrr8rKr=rB)rZshortr1rArrrsetShort)s    zFirewallDConfigService.setShortcCstjd|j|jdS)Nz%s.getDescription())rr/rr=)rr1rrrgetDescription6sz%FirewallDConfigService.getDescriptioncCsHt|t}tjd|j||jj|t|j}||d<|j |dS)Nz%s.setDescription('%s')rP) rr.rr/rrr8rKr=rB)r descriptionr1rArrrsetDescription=s    z%FirewallDConfigService.setDescriptionza(ss)cCstjd|j|jdS)Nz %s.getPorts())rr/rr=)rr1rrrgetPortsKszFirewallDConfigService.getPortscCsg}x6t|tD](}t|tr.|jt|q|j|qW|}tjd|jdjdd|D|j j |t|j }||d<|j |dS)Nz%s.setPorts('[%s]'),css"|]}d|d|dfVqdS)z ('%s, '%s')rrNr).0portrrr _sz2FirewallDConfigService.setPorts..rT) rrK isinstanceappendtuplerr/rjoinrr8r=rB)rportsr1_portsrXrArrrsetPortsRs    zFirewallDConfigService.setPortscCst|t}t|t}tjd|j|||jj|t|j}||f|dkrbt t j d||f|dj ||f|j |dS)Nz%s.addPort('%s', '%s')rTz%s:%s)rr.rr/rrr8rKr=r r ALREADY_ENABLEDr[rB)rrXprotocolr1rArrraddPortes     zFirewallDConfigService.addPortcCst|t}t|t}tjd|j|||jj|t|j}||f|dkrbt t j d||f|dj ||f|j |dS)Nz%s.removePort('%s', '%s')rTz%s:%s)rr.rr/rrr8rKr=r r NOT_ENABLEDrFrB)rrXrbr1rArrr removePortus     z!FirewallDConfigService.removePortbcCs:t|t}t|t}tjd|j||||f|jdkS)Nz%s.queryPort('%s', '%s')rT)rr.rr/rr=)rrXrbr1rrr queryPorts    z FirewallDConfigService.queryPortascCstjd|j|jdS)Nz%s.getProtocols())rr/rr=)rr1rrr getProtocolssz#FirewallDConfigService.getProtocolscCsNt|t}tjd|jdj||jj|t|j}||d<|j |dS)Nz%s.setProtocols('[%s]')rVri) rrKrr/rr]rr8r=rB)rZ protocolsr1rArrr setProtocolss     z#FirewallDConfigService.setProtocolscCsft|t}tjd|j||jj|t|j}||dkrJt t j ||dj ||j |dS)Nz%s.addProtocol('%s')ri)rr.rr/rrr8rKr=r r rar[rB)rrbr1rArrr addProtocols     z"FirewallDConfigService.addProtocolcCsft|t}tjd|j||jj|t|j}||dkrJt t j ||dj ||j |dS)Nz%s.removeProtocol('%s')ri)rr.rr/rrr8rKr=r r rdrFrB)rrbr1rArrrremoveProtocols     z%FirewallDConfigService.removeProtocolcCs*t|t}tjd|j|||jdkS)Nz%s.queryProtocol(%s')ri)rr.rr/rr=)rrbr1rrr queryProtocols z$FirewallDConfigService.queryProtocolcCstjd|j|jdS)Nz%s.getSourcePorts())rr/rr=)rr1rrrgetSourcePortssz%FirewallDConfigService.getSourcePortscCsg}x6t|tD](}t|tr.|jt|q|j|qW|}tjd|jdjdd|D|j j |t|j }||d<|j |dS)Nz%s.setSourcePorts('[%s]')rVcss"|]}d|d|dfVqdS)z ('%s, '%s')rrNr)rWrXrrrrYsz8FirewallDConfigService.setSourcePorts..ro) rrKrZr[r\rr/rr]rr8r=rB)rr^r1r_rXrArrrsetSourcePortss    z%FirewallDConfigService.setSourcePortscCst|t}t|t}tjd|j|||jj|t|j}||f|dkrbt t j d||f|dj ||f|j |dS)Nz%s.addSourcePort('%s', '%s')roz%s:%s)rr.rr/rrr8rKr=r r rar[rB)rrXrbr1rArrr addSourcePorts     z$FirewallDConfigService.addSourcePortcCst|t}t|t}tjd|j|||jj|t|j}||f|dkrbt t j d||f|dj ||f|j |dS)Nz%s.removeSourcePort('%s', '%s')roz%s:%s)rr.rr/rrr8rKr=r r rdrFrB)rrXrbr1rArrrremoveSourcePorts     z'FirewallDConfigService.removeSourcePortcCs:t|t}t|t}tjd|j||||f|jdkS)Nz%s.querySourcePort('%s', '%s')ro)rr.rr/rr=)rrXrbr1rrrquerySourcePorts    z&FirewallDConfigService.querySourcePortcCstjd|j|jdS)Nz%s.getModules())rr/rr=)rr1rrr getModules sz!FirewallDConfigService.getModulescCst|t}g}x@|D]8}|jdrB|jdd}d|krB|jdd}|j|qW|}tjd|jdj||j j |t|j }||d<|j |dS)N nf_conntrack__-z%s.setModules('[%s]')rVru) rrK startswithreplacer[rr/rr]rr8r=rB)rmodulesr1Z_modulesmodulerArrr setModuless         z!FirewallDConfigService.setModulescCst|t}|jdr4|jdd}d|kr4|jdd}tjd|j||jj|t |j }||dkrtt t j ||dj||j|dS)Nrwrxryrzz%s.addModule('%s')ru)rr.r{r|rr/rrr8rKr=r r rar[rB)rr~r1rArrr addModule's        z FirewallDConfigService.addModulecCst|t}|jdr4|jdd}d|kr4|jdd}tjd|j||jj|t |j }||dkrtt t j ||dj||j|dS)Nrwrxryrzz%s.removeModule('%s')ru)rr.r{r|rr/rrr8rKr=r r rdrFrB)rr~r1rArrr removeModule8s        z#FirewallDConfigService.removeModulecCsTt|t}|jdr4|jdd}d|kr4|jdd}tjd|j|||jdkS)Nrwrxryrzz%s.queryModule('%s')ru)rr.r{r|rr/rr=)rr~r1rrr queryModuleIs    z"FirewallDConfigService.queryModuleza{ss}cCstjd|j|jdS)Nz%s.getDestinations())rr/rr=)rr1rrrgetDestinationsWsz&FirewallDConfigService.getDestinationscCsVt|t}tjd|j|jd|jd|jj|t|j }||d<|j |dS)Nz*%s.setDestinations({ipv4:'%s', ipv6:'%s'})Zipv4Zipv6r) rdictrr/rgetrr8rKr=rB)rZ destinationsr1rArrrsetDestinations^s     z&FirewallDConfigService.setDestinationscCsVt|t}tjd|j||jj|t|j}||dkrJt t j ||d|S)Nz%s.getDestination('%s')r) rr.rr/rrr8rKr=r r rd)rfamilyr1rArrrgetDestinationks      z%FirewallDConfigService.getDestinationcCst|t}t|t}tjd|j|||jj|t|j}||dkrn|d||krnt t j d||f||d|<|j |dS)Nz%s.setDestination('%s', '%s')rz '%s': '%s') rr.rr/rrr8rKr=r r rarB)rraddressr1rArrrsetDestinationxs      z%FirewallDConfigService.setDestinationcCsbt|t}tjd|j||jj|t|j}||dkrJt t j ||d|=|j |dS)Nz%s.removeDestination('%s')r) rr.rr/rrr8rKr=r r rdrB)rrr1rArrrremoveDestinations       z(FirewallDConfigService.removeDestinationcCsJt|t}t|t}tjd|j|||j}||dkoH||d|kS)Nz%s.queryDestination('%s', '%s')r)rr.rr/rr=)rrrr1rArrrqueryDestinations    z'FirewallDConfigService.queryDestinationcCs<tjd|j|jj||jj|j}d|kr8|dSgS)Nz%s.getIncludes()includes)rr/rrr8rr>r)rr1rArrr getIncludess z"FirewallDConfigService.getIncludescCsZt|t}tjd|j||jj|d|ddi}|jj|j ||_ |j |j j dS)Nz%s.setIncludes('%s')r) rrKrr/rrr8rrCrr@r")rrr1rArrr setIncludess   z"FirewallDConfigService.setIncludescCsjt|t}tjd|j||jj||jj|j }|j dgj ||jj |j ||_ |j |j jdS)Nz%s.addInclude('%s')r)rr.rr/rrr8rr>r setdefaultr[rCr@r")rincluder1rArrr addIncludes  z!FirewallDConfigService.addIncludecCsft|t}tjd|j||jj||jj|j }|dj ||jj |j ||_ |j |j j dS)Nz%s.removeInclude('%s')r)rr.rr/rrr8rr>rrFrCr@r")rrr1rArrr removeIncludes  z$FirewallDConfigService.removeIncludecCs@t|t}tjd|j||jj|j}d|kr<||dkSdS)Nz%s.queryInclude('%s')rF)rr.rr/rrr>r)rrr1rArrr queryIncludes z#FirewallDConfigService.queryInclude)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N__name__ __module__ __qualname____doc__Z persistentrrZPK_ACTION_CONFIGZdefault_polkit_auth_requiredrrr r r!r*r ZPROPERTIES_IFACEr2r7slipZpolkitZ require_authr9rsignalr:ZPK_ACTION_INFOZINTROSPECTABLE_IFACEr;rr=r?rBrDrEr@rFrGrIrHrJrMrNrOrQrSrUr`rcrergrjrkrlrmrnrprqrrrsrtrvrrrrrrrrrrrrrrr __classcell__rr)rrr /s                                 r )Z gi.repositoryrsysr}rZ dbus.serviceZ slip.dbusrZslip.dbus.serviceZfirewallrZfirewall.dbus_utilsrrrZfirewall.core.loggerrZfirewall.server.decoratorsrr r r Zfirewall.errorsr rZObjectr rrrrs