diff options
author | Daniel Collins <daniel.collins@smoothwall.net> | 2014-06-07 21:21:44 +0100 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2014-06-07 21:21:44 +0100 |
commit | c4638f9e666ffd275dd5d943def298b7e6e11ad4 (patch) | |
tree | 1645bd748c7453d4b816bb8b8b7b3b906167e3ea | |
parent | 4b34f5d22f4381f725b571d89079dd133640a435 (diff) | |
download | dnsmasq-c4638f9e666ffd275dd5d943def298b7e6e11ad4.tar.gz |
New DBus methods.
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | dbus/DBus-interface | 8 | ||||
-rw-r--r-- | src/dbus.c | 38 |
3 files changed, 49 insertions, 0 deletions
@@ -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 @@ -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 |