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 = " \n" " \n" " \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" " \n" " \n" " \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