Re: [Dnsmasq-discuss] [PATCH 1/1] Allow overriding of ubus service name.
Great, thanks :-) Oldrich. so 28. 3. 2020 v 20:23 odesílatel Simon Kelley napsal: > Patch applied, thanks. > > > Simon. > > > On 20/03/2020 21:18, Oldřich Jedlička wrote: > > Same as for the dbus, allow specifying ubus service name (namespace) on > > the command line as an optional argument to --enable-ubus option. > > > > Signed-off-by: Oldřich Jedlička > > --- > > man/dnsmasq.8 | 7 +-- > > src/config.h | 1 + > > src/dnsmasq.h | 1 + > > src/option.c | 14 +++--- > > src/ubus.c| 3 ++- > > 5 files changed, 20 insertions(+), 6 deletions(-) > > > > diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 > > index 2032a37..034e3cf 100644 > > --- a/man/dnsmasq.8 > > +++ b/man/dnsmasq.8 > > @@ -366,10 +366,13 @@ been built with DBus support. If the service name > is given, dnsmasq > > provides service at that name, rather than the default which is > > .B uk.org.thekelleys.dnsmasq > > .TP > > -.B --enable-ubus > > +.B --enable-ubus[=] > > Enable dnsmasq UBus interface. It sends notifications via UBus on > > DHCPACK and DHCPRELEASE events. Furthermore it offers metrics. > > -Requires that dnsmasq has been built with UBus support. > > +Requires that dnsmasq has been built with UBus support. If the service > > +name is given, dnsmasq provides service at that namespace, rather than > > +the default which is > > +.B dnsmasq > > .TP > > .B \-o, --strict-order > > By default, dnsmasq will send queries to any of the upstream servers > > diff --git a/src/config.h b/src/config.h > > index b002560..7d08f7d 100644 > > --- a/src/config.h > > +++ b/src/config.h > > @@ -50,6 +50,7 @@ > > #define RANDFILE "/dev/urandom" > > #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq" /* Default - may be > overridden by config */ > > #define DNSMASQ_PATH "/uk/org/thekelleys/dnsmasq" > > +#define DNSMASQ_UBUS_NAME "dnsmasq" /* Default - may be overridden by > config */ > > #define AUTH_TTL 600 /* default TTL for auth DNS */ > > #define SOA_REFRESH 1200 /* SOA refresh default */ > > #define SOA_RETRY 180 /* SOA retry default */ > > diff --git a/src/dnsmasq.h b/src/dnsmasq.h > > index f747868..b47ef74 100644 > > --- a/src/dnsmasq.h > > +++ b/src/dnsmasq.h > > @@ -1063,6 +1063,7 @@ extern struct daemon { > >unsigned int duid_enterprise, duid_config_len; > >unsigned char *duid_config; > >char *dbus_name; > > + char *ubus_name; > >char *dump_file; > >int dump_mask; > >unsigned long soa_sn, soa_refresh, soa_retry, soa_expiry; > > diff --git a/src/option.c b/src/option.c > > index 9ffd7fc..1f698da 100644 > > --- a/src/option.c > > +++ b/src/option.c > > @@ -238,7 +238,7 @@ static const struct myoption opts[] = > > { "caa-record", 1, 0 , LOPT_CAA }, > > { "dns-rr", 1, 0, LOPT_RR }, > > { "enable-dbus", 2, 0, '1' }, > > -{ "enable-ubus", 0, 0, LOPT_UBUS }, > > +{ "enable-ubus", 2, 0, LOPT_UBUS }, > > { "bootp-dynamic", 2, 0, '3' }, > > { "dhcp-mac", 1, 0, '4' }, > > { "no-ping", 0, 0, '5' }, > > @@ -428,7 +428,7 @@ static struct { > >{ 'z', OPT_NOWILD, NULL, gettext_noop("Bind only to interfaces in > use."), NULL }, > >{ 'Z', OPT_ETHERS, NULL, gettext_noop("Read DHCP static host > information from %s."), ETHERSFILE }, > >{ '1', ARG_ONE, "[=]", gettext_noop("Enable the DBus > interface for setting upstream servers, etc."), NULL }, > > - { LOPT_UBUS, OPT_UBUS, NULL, gettext_noop("Enable the UBus > interface."), NULL }, > > + { LOPT_UBUS, ARG_ONE, "[=]", gettext_noop("Enable the UBus > interface."), NULL }, > >{ '2', ARG_DUP, "", gettext_noop("Do not provide DHCP on > this interface, only provide DNS."), NULL }, > >{ '3', ARG_DUP, "[=tag:]...", gettext_noop("Enable dynamic > address allocation for bootp."), NULL }, > >{ '4', ARG_DUP, "set:,", gettext_noop("Map MAC > address (with wildcards) to option set."), NULL }, > > @@ -1881,7 +1881,15 @@ static int one_opt(int option, char *arg, char > *errstr, char *gen_err, int comma > >else > > daemon->dbus_name = DNSMASQ_SERVICE; > >break; > > - >
[Dnsmasq-discuss] [PATCH 1/1] Allow overriding of ubus service name.
Same as for the dbus, allow specifying ubus service name (namespace) on the command line as an optional argument to --enable-ubus option. Signed-off-by: Oldřich Jedlička --- man/dnsmasq.8 | 7 +-- src/config.h | 1 + src/dnsmasq.h | 1 + src/option.c | 14 +++--- src/ubus.c| 3 ++- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 2032a37..034e3cf 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -366,10 +366,13 @@ been built with DBus support. If the service name is given, dnsmasq provides service at that name, rather than the default which is .B uk.org.thekelleys.dnsmasq .TP -.B --enable-ubus +.B --enable-ubus[=] Enable dnsmasq UBus interface. It sends notifications via UBus on DHCPACK and DHCPRELEASE events. Furthermore it offers metrics. -Requires that dnsmasq has been built with UBus support. +Requires that dnsmasq has been built with UBus support. If the service +name is given, dnsmasq provides service at that namespace, rather than +the default which is +.B dnsmasq .TP .B \-o, --strict-order By default, dnsmasq will send queries to any of the upstream servers diff --git a/src/config.h b/src/config.h index b002560..7d08f7d 100644 --- a/src/config.h +++ b/src/config.h @@ -50,6 +50,7 @@ #define RANDFILE "/dev/urandom" #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq" /* Default - may be overridden by config */ #define DNSMASQ_PATH "/uk/org/thekelleys/dnsmasq" +#define DNSMASQ_UBUS_NAME "dnsmasq" /* Default - may be overridden by config */ #define AUTH_TTL 600 /* default TTL for auth DNS */ #define SOA_REFRESH 1200 /* SOA refresh default */ #define SOA_RETRY 180 /* SOA retry default */ diff --git a/src/dnsmasq.h b/src/dnsmasq.h index f747868..b47ef74 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1063,6 +1063,7 @@ extern struct daemon { unsigned int duid_enterprise, duid_config_len; unsigned char *duid_config; char *dbus_name; + char *ubus_name; char *dump_file; int dump_mask; unsigned long soa_sn, soa_refresh, soa_retry, soa_expiry; diff --git a/src/option.c b/src/option.c index 9ffd7fc..1f698da 100644 --- a/src/option.c +++ b/src/option.c @@ -238,7 +238,7 @@ static const struct myoption opts[] = { "caa-record", 1, 0 , LOPT_CAA }, { "dns-rr", 1, 0, LOPT_RR }, { "enable-dbus", 2, 0, '1' }, -{ "enable-ubus", 0, 0, LOPT_UBUS }, +{ "enable-ubus", 2, 0, LOPT_UBUS }, { "bootp-dynamic", 2, 0, '3' }, { "dhcp-mac", 1, 0, '4' }, { "no-ping", 0, 0, '5' }, @@ -428,7 +428,7 @@ static struct { { 'z', OPT_NOWILD, NULL, gettext_noop("Bind only to interfaces in use."), NULL }, { 'Z', OPT_ETHERS, NULL, gettext_noop("Read DHCP static host information from %s."), ETHERSFILE }, { '1', ARG_ONE, "[=]", gettext_noop("Enable the DBus interface for setting upstream servers, etc."), NULL }, - { LOPT_UBUS, OPT_UBUS, NULL, gettext_noop("Enable the UBus interface."), NULL }, + { LOPT_UBUS, ARG_ONE, "[=]", gettext_noop("Enable the UBus interface."), NULL }, { '2', ARG_DUP, "", gettext_noop("Do not provide DHCP on this interface, only provide DNS."), NULL }, { '3', ARG_DUP, "[=tag:]...", gettext_noop("Enable dynamic address allocation for bootp."), NULL }, { '4', ARG_DUP, "set:,", gettext_noop("Map MAC address (with wildcards) to option set."), NULL }, @@ -1881,7 +1881,15 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma else daemon->dbus_name = DNSMASQ_SERVICE; break; - + +case LOPT_UBUS: /* --enable-ubus */ + set_option_bool(OPT_UBUS); + if (arg) + daemon->ubus_name = opt_string_alloc(arg); + else + daemon->ubus_name = DNSMASQ_UBUS_NAME; + break; + case '8': /* --log-facility */ /* may be a filename */ if (strchr(arg, '/') || strcmp (arg, "-") == 0) diff --git a/src/ubus.c b/src/ubus.c index c7f6b19..5f81287 100644 --- a/src/ubus.c +++ b/src/ubus.c @@ -38,7 +38,7 @@ static struct ubus_object_type ubus_object_type = UBUS_OBJECT_TYPE("dnsmasq", ubus_object_methods); static struct ubus_object ubus_object = { - .name = "dnsmasq", + .name = NULL, .type = &ubus_object_type, .methods = ubus_object_methods, .n_methods = ARRAY_SIZE(ubus_object_methods), @@ -94,6 +94,7 @@ void ubus_init() return; } + ubus_object.name = daemon->ubus_name; ret = ubus_add_object(ubus, &ubus_object); if (ret) { -- 2.17.1 ___ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
[Dnsmasq-discuss] [PATCH 0/1] Allow overriding of ubus service name
Hi, Another patch, now adding option to specify the name of ubus service visible by a call to `ubus list`. This is useful when you have more than one dnsmasq instances running -- the ubus service name has to be unique for each instance, otherwise `ubus_add_object` fails. With this patch, it is possible to change the registered name, like for the D-Bus case. Tested on OpenWrt. Regards, Oldrich. Oldřich Jedlička (1): Allow overriding of ubus service name. man/dnsmasq.8 | 7 +-- src/config.h | 1 + src/dnsmasq.h | 1 + src/option.c | 14 +++--- src/ubus.c| 3 ++- 5 files changed, 20 insertions(+), 6 deletions(-) -- 2.17.1 ___ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
[Dnsmasq-discuss] [PATCH 0/1] Fix resource leak on ubus_init failure.
Hi, This is my first patch here. I discovered one resource leak in ubus_init, when ubus_add_object fails - the ubus connection stays open. I added a patch, see follow-up email. (Hopefully git send-email sends it.) Regards, Oldrich. Oldřich Jedlička (1): Fixed resource leak on ubus_init failure. src/ubus.c | 1 + 1 file changed, 1 insertion(+) -- 2.17.1 ___ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
[Dnsmasq-discuss] [PATCH 1/1] Fixed resource leak on ubus_init failure.
When ubus_add_object fails, the ubus_connect object is not freed, so the connection leaks. Add ubus_destroy to free the connection object. Signed-off-by: Oldřich Jedlička --- src/ubus.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ubus.c b/src/ubus.c index 79e2563..c7f6b19 100644 --- a/src/ubus.c +++ b/src/ubus.c @@ -102,6 +102,7 @@ void ubus_init() my_syslog(LOG_ERR, _("Cannot add object to UBus: %s"), ubus_strerror(ret)); error_logged = 1; } + ubus_destroy(ubus); return; } -- 2.17.1 ___ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss