diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 0845d76..ef41ad7 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -114,11 +114,16 @@ int main (int argc, char **argv) set_option_bool(OPT_NOWILD); } # endif - + + /* -- bind-dynamic not supported on !Linux, fall back to --bind-interfaces */ if (option_bool(OPT_CLEVERBIND)) - die(_("--bind-dynamic not available on this platform"), NULL, EC_BADCONF); + { + bind_fallback = 1; + set_option_bool(OPT_NOWILD); + reset_option_bool(OPT_CLVERBIND); + } #endif - + #ifndef HAVE_TFTP if (daemon->tftp_unlimited || daemon->tftp_interfaces) die(_("TFTP server not available: set HAVE_TFTP in src/config.h"), NULL, EC_BADCONF); diff --git a/src/dnsmasq.h b/src/dnsmasq.h index c00f029..2d8d9b2 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -932,6 +932,7 @@ char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len, char *buf, int buf_len); void reread_dhcp(void); void set_option_bool(unsigned int opt); +void reset_option_bool(unsigned int opt); struct hostsfile *expand_filelist(struct hostsfile *list); /* forward.c */ diff --git a/src/option.c b/src/option.c index 47dca0d..fdccd17 100644 --- a/src/option.c +++ b/src/option.c @@ -1119,6 +1119,14 @@ void set_option_bool(unsigned int opt) daemon->options2 |= 1u << (opt - 32); } +void reset_option_bool(unsigned int opt) +{ + if (opt < 32) + daemon->options &= ~(1u << opt); + else + daemon->options2 &= ~(1u << (opt - 32)); +} + static char *one_opt(int option, char *arg, char *gen_prob, int command_line) { int i;