summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Collins <daniel.collins@smoothwall.net>2014-06-07 21:21:44 +0100
committerSimon Kelley <simon@thekelleys.org.uk>2014-06-07 21:21:44 +0100
commitc4638f9e666ffd275dd5d943def298b7e6e11ad4 (patch)
tree1645bd748c7453d4b816bb8b8b7b3b906167e3ea
parent4b34f5d22f4381f725b571d89079dd133640a435 (diff)
downloaddnsmasq-c4638f9e666ffd275dd5d943def298b7e6e11ad4.tar.gz
New DBus methods.
-rw-r--r--CHANGELOG3
-rw-r--r--dbus/DBus-interface8
-rw-r--r--src/dbus.c38
3 files changed, 49 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 4e56a6a..d42d3f5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,6 +7,9 @@ version 2.72
Fix race condition which could lock up dnsmasq when an
interface goes down and up rapidly. Thanks to Conrad
Kostecki for helping to chase this down.
+
+ Add DBus methods SetFilterWin2KOption and SetBogusPrivOption
+ Thanks to the Smoothwall project for the patch.
version 2.71
diff --git a/dbus/DBus-interface b/dbus/DBus-interface
index cbb6e82..8e7ed9d 100644
--- a/dbus/DBus-interface
+++ b/dbus/DBus-interface
@@ -40,6 +40,14 @@ ClearCache
Returns nothing. Clears the domain name cache and re-reads
/etc/hosts. The same as sending dnsmasq a HUP signal.
+SetFilterWin2KOption
+--------------------
+Takes boolean, sets or resets the --filterwin2k option.
+
+SetBogusPrivOption
+------------------
+Takes boolean, sets or resets the --bogus-priv option.
+
SetServers
----------
Returns nothing. Takes a set of arguments representing the new
diff --git a/src/dbus.c b/src/dbus.c
index ed7ac8a..93c597c 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -44,6 +44,12 @@ const char* introspection_xml_template =
" <method name=\"SetServersEx\">\n"
" <arg name=\"servers\" direction=\"in\" type=\"aas\"/>\n"
" </method>\n"
+" <method name=\"SetFilterWin2KOption\">\n"
+" <arg name=\"filterwin2k\" direction=\"in\" type=\"b\"/>\n"
+" </method>\n"
+" <method name=\"SetBogusPrivOption\">\n"
+" <arg name=\"boguspriv\" direction=\"in\" type=\"b\"/>\n"
+" </method>\n"
" <signal name=\"DhcpLeaseAdded\">\n"
" <arg name=\"ipaddr\" type=\"s\"/>\n"
" <arg name=\"hwaddr\" type=\"s\"/>\n"
@@ -372,6 +378,30 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
return error;
}
+static DBusMessage *dbus_set_bool(DBusMessage *message, int flag, char *name)
+{
+ DBusMessageIter iter;
+ dbus_bool_t enabled;
+
+ if (!dbus_message_iter_init(message, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN)
+ return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS, "Expected boolean argument");
+
+ dbus_message_iter_get_basic(&iter, &enabled);
+
+ if (enabled)
+ {
+ my_syslog(LOG_INFO, "Enabling --%s option from D-Bus", name);
+ set_option_bool(flag);
+ }
+ else
+ {
+ my_syslog(LOG_INFO, "Disabling --$s option from D-Bus", name);
+ reset_option_bool(flag);
+ }
+
+ return NULL;
+}
+
DBusHandlerResult message_handler(DBusConnection *connection,
DBusMessage *message,
void *user_data)
@@ -415,6 +445,14 @@ DBusHandlerResult message_handler(DBusConnection *connection,
reply = dbus_read_servers_ex(message, 1);
new_servers = 1;
}
+ else if (strcmp(method, "SetFilterWin2KOption") == 0)
+ {
+ reply = dbus_set_bool(message, OPT_FILTER, "filterwin2k");
+ }
+ else if (strcmp(method, "SetBogusPrivOption") == 0)
+ {
+ reply = dbus_set_bool(message, OPT_BOGUSPRIV, "bogus-priv");
+ }
else if (strcmp(method, "ClearCache") == 0)
clear_cache = 1;
else