Repository :
http://git.fedorahosted.org/cgit/firewalld-recode.git
On branch : master
---------------------------------------------------------------
commit af1a7c6ca91d470fd1e3db8c587a792004d3b33d
Author: Daniel Kopecek <dkopecek(a)redhat.com>
Date: Fri Aug 29 12:22:49 2014 +0200
Return DBus errors in the correct domain
---------------------------------------------------------------
src/Daemon/DBus.cpp | 4 +++-
src/Daemon/DBus.hpp | 43 +++++++++++++++++++++++++++++++++++--------
src/Daemon/DBus/reload.cpp | 3 +--
src/Daemon/FirewallD.cpp | 4 ++--
4 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/src/Daemon/DBus.cpp b/src/Daemon/DBus.cpp
index bcdb961..4a8f4e9 100644
--- a/src/Daemon/DBus.cpp
+++ b/src/Daemon/DBus.cpp
@@ -150,7 +150,9 @@ namespace firewalld
method_called(method_name, dbus_parameters, dbus_result);
if (unlikely(dbus_result.isError())) {
- invocation->return_error(dbus_result.getError());
+ const DBusError& error = dbus_result.getError();
+ UString error_domain = UString(DBUS_ERROR_DOMAIN) + error.name();
+ invocation->return_dbus_error(error_domain, error.message());
} else {
//
// Build/Serialize the result into the VariantContainer
diff --git a/src/Daemon/DBus.hpp b/src/Daemon/DBus.hpp
index b614b56..af3055d 100644
--- a/src/Daemon/DBus.hpp
+++ b/src/Daemon/DBus.hpp
@@ -43,6 +43,7 @@
#define DBUS_INTERFACE_CONFIG_ICMPTYPE DBUS_INTERFACE_CONFIG ".icmptype"
#define DBUS_INTERFACE_CONFIG_POLICIES DBUS_INTERFACE_CONFIG ".policies"
#define DBUS_INTERFACE_CONFIG_DIRECT DBUS_INTERFACE_CONFIG ".direct"
+#define DBUS_ERROR_DOMAIN DBUS_INTERFACE ".Error."
#define DBUS_PATH "/org/fedoraproject/FirewallD"
__STRINGIFY(DBUS_INTERFACE_VERSION)
#define DBUS_PATH_CONFIG DBUS_PATH "/config"
@@ -55,6 +56,35 @@
namespace firewalld
{
+ class DBusError
+ {
+ public:
+ DBusError()
+ {
+ _name = "Unknown";
+ _message = "";
+ }
+
+ DBusError(const UString& error_name, const UString& error_message)
+ {
+ _name = error_name;
+ _message = error_message;
+ }
+
+ const UString& name() const
+ {
+ return _name;
+ }
+
+ const UString& message() const
+ {
+ return _message;
+ }
+ private:
+ UString _name;
+ UString _message;
+ };
+
//
// Operator usage:
// dbus_result << value .... Add a list value
@@ -68,7 +98,7 @@ namespace firewalld
typedef std::map<UString,DBusResultBuilder*> _Dictionary;
typedef std::vector<DBusResultBuilder *> _Array;
typedef Glib::VariantBase _Value;
- typedef Gio::DBus::Error _Error;
+ typedef DBusError _Error;
enum BuilderType {
PropertyValue,
@@ -106,8 +136,7 @@ namespace firewalld
public:
DBusResultBuilder(const char *signature = NULL)
: _g_variant_base(_dummy_variant_base),
- _g_variant_container(_dummy_variant_container),
- _error(NULL)
+ _g_variant_container(_dummy_variant_container)
{
_builder_type = Intermediate;
_value_type = Unknown;
@@ -118,8 +147,7 @@ namespace firewalld
DBusResultBuilder(Glib::VariantContainerBase& g_variant_container, const char
*signature = NULL)
: _g_variant_container(g_variant_container),
- _g_variant_base(_dummy_variant_base),
- _error(NULL)
+ _g_variant_base(_dummy_variant_base)
{
_builder_type = MethodResponse;
_value_type = Unknown;
@@ -130,8 +158,7 @@ namespace firewalld
DBusResultBuilder(Glib::VariantBase& g_variant_base, const char *signature =
NULL)
: _g_variant_base(g_variant_base),
- _g_variant_container(_dummy_variant_container),
- _error(NULL)
+ _g_variant_container(_dummy_variant_container)
{
_builder_type = PropertyValue;
_value_type = Unknown;
@@ -150,7 +177,7 @@ namespace firewalld
_value_signature = signature;
}
- DBusResultBuilder& operator=(const Gio::DBus::Error& error)
+ DBusResultBuilder& operator=(const DBusError& error)
{
_value_type = Error;
_error = error;
diff --git a/src/Daemon/DBus/reload.cpp b/src/Daemon/DBus/reload.cpp
index ffefd32..e6fa6d5 100644
--- a/src/Daemon/DBus/reload.cpp
+++ b/src/Daemon/DBus/reload.cpp
@@ -24,7 +24,6 @@ namespace firewalld
{
FIREWALLD_DBUS_METHOD(reload)
{
- LOG(TRACE) << "reload: " << this;
- result = Gio::DBus::Error(Gio::DBus::Error::NOT_SUPPORTED, "Method not
implemented");
+ result = DBusError("NotImplemented", "The reload method is currently
not implemented");
}
} /* namespace firewalld */
diff --git a/src/Daemon/FirewallD.cpp b/src/Daemon/FirewallD.cpp
index 04880f7..fb305fa 100644
--- a/src/Daemon/FirewallD.cpp
+++ b/src/Daemon/FirewallD.cpp
@@ -269,7 +269,7 @@ namespace firewalld
(*this.*method)(parameters, result);
} catch(const std::out_of_range& ex) {
LOG(WARNING) << "Requested DBus method not found in the method table:
" << name;
- result = Gio::DBus::Error(Gio::DBus::Error::NOT_SUPPORTED, "Method not
implemented");
+ result = DBusError("NotImplemented", "The " + name + "
method is currently not implented");
}
return;
}
@@ -277,7 +277,7 @@ namespace firewalld
void FirewallD::dbus_property_get(const ustring& name, DBusResultBuilder&
result)
{
LOG(DEBUG) << "DBus property get: name=" << name;
- result = Gio::DBus::Error(Gio::DBus::Error::NOT_SUPPORTED, "Property not
implemented");
+ result = DBusError("NotImplemented", "The " + name + "
property is currently not implented");
return;
}