-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Thanks for that.
You know, I love patches that include updates to the documentation. I think this is straightforward enough to go in now, even though we're in a release cycle. I tweaked the logging a bit, to log the warnings at a more appropriate time. Cheers, Simon. On 31/03/15 14:16, Stefan Tomanek wrote: > This change makes dnsmasq ignore any missing TFTP root directories > if --tftp-no-fail is specified; this is useful for router devices > that store TFTP data on an external storage that might not always > be present. > > Signed-off-by: Stefan Tomanek > <[email protected]> --- dnsmasq.conf.example | > 3 +++ man/dnsmasq.8 | 3 +++ src/dnsmasq.c | 18 > ++++++++++++++---- src/dnsmasq.h | 3 ++- src/option.c > | 3 +++ 5 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example index > 1bd305d..67be99a 100644 --- a/dnsmasq.conf.example +++ > b/dnsmasq.conf.example @@ -486,6 +486,9 @@ # Set the root directory > for files available via FTP. #tftp-root=/var/ftpd > > +# Do not abort if the tftp-root is unavailable +#tftp-no-fail + # > Make the TFTP server more secure: with this set, only files owned > by # the user dnsmasq is running as will be send over the net. > #tftp-secure diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index > 1f1dd7b..6b4626c 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ > -1711,6 +1711,9 @@ Absolute paths (starting with /) are allowed, > but they must be within the tftp-root. If the optional interface > argument is given, the directory is only used for TFTP requests via > that interface. .TP +.B --tftp-no-fail +Do not abort startup if > specified tftp root directories are inaccessible. +.TP .B > --tftp-unique-root Add the IP address of the TFTP client as a path > component on the end of the TFTP-root (in standard dotted-quad > format). Only valid if a diff --git a/src/dnsmasq.c > b/src/dnsmasq.c index b784951..8bf94ec 100644 --- a/src/dnsmasq.c > +++ b/src/dnsmasq.c @@ -645,8 +645,13 @@ int main (int argc, char > **argv) { if (!((dir = opendir(daemon->tftp_prefix)))) { - > send_event(err_pipe[1], EVENT_TFTP_ERR, errno, > daemon->tftp_prefix); - _exit(0); + if (! > option_bool(OPT_TFTP_NO_FAIL)) + { + > send_event(err_pipe[1], EVENT_TFTP_ERR, errno, > daemon->tftp_prefix); + _exit(0); + } + > else + my_syslog(LOG_WARNING, _("warning: TFTP directory > '%s' inaccessible"), daemon->tftp_prefix); } closedir(dir); } @@ > -655,8 +660,13 @@ int main (int argc, char **argv) { if (!((dir = > opendir(p->prefix)))) { - send_event(err_pipe[1], > EVENT_TFTP_ERR, errno, p->prefix); - _exit(0); + if (! > option_bool(OPT_TFTP_NO_FAIL)) + { + > send_event(err_pipe[1], EVENT_TFTP_ERR, errno, p->prefix); + > _exit(0); + } + else + my_syslog(LOG_WARNING, > _("warning: TFTP directory '%s' inaccessible"), p->prefix); } > closedir(dir); } diff --git a/src/dnsmasq.h b/src/dnsmasq.h index > de95d0e..80fcf32 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ > -240,7 +240,8 @@ struct event_desc { #define OPT_LOCAL_SERVICE 49 > #define OPT_LOOP_DETECT 50 #define OPT_EXTRALOG 51 > -#define OPT_LAST 52 +#define OPT_TFTP_NO_FAIL 52 > +#define OPT_LAST 53 > > /* extra flags for my_syslog, we use a couple of facilities since > they are known not to occupy the same bits as priorities, no matter > how syslog.h is set up. */ diff --git a/src/option.c > b/src/option.c index 3009eb5..f91cfbb 100644 --- a/src/option.c +++ > b/src/option.c @@ -153,6 +153,7 @@ struct myoption { #define > LOPT_DHOPT_INOTIFY 341 #define LOPT_HOST_INOTIFY 342 #define > LOPT_DNSSEC_STAMP 343 +#define LOPT_TFTP_NO_FAIL 344 > > #ifdef HAVE_GETOPT_LONG static const struct option opts[] = @@ > -235,6 +236,7 @@ static const struct myoption opts[] = { > "dhcp-ignore-names", 2, 0, LOPT_NO_NAMES }, { "enable-tftp", 2, 0, > LOPT_TFTP }, { "tftp-secure", 0, 0, LOPT_SECURE }, + { > "tftp-no-fail", 0, 0, LOPT_TFTP_NO_FAIL }, { "tftp-unique-root", 0, > 0, LOPT_APREF }, { "tftp-root", 1, 0, LOPT_PREFIX }, { "tftp-max", > 1, 0, LOPT_TFTP_MAX }, @@ -419,6 +421,7 @@ static struct { { > LOPT_PREFIX, ARG_DUP, "<dir>[,<iface>]", gettext_noop("Export files > by TFTP only from the specified subtree."), NULL }, { LOPT_APREF, > OPT_TFTP_APREF, NULL, gettext_noop("Add client IP address to > tftp-root."), NULL }, { LOPT_SECURE, OPT_TFTP_SECURE, NULL, > gettext_noop("Allow access only to files owned by the user running > dnsmasq."), NULL }, + { LOPT_TFTP_NO_FAIL, OPT_TFTP_NO_FAIL, NULL, > gettext_noop("Do not terminate the service if TFTP directories are > inaccessible."), NULL }, { LOPT_TFTP_MAX, ARG_ONE, "<integer>", > gettext_noop("Maximum number of conncurrent TFTP transfers > (defaults to %s)."), "#" }, { LOPT_NOBLOCK, OPT_TFTP_NOBLOCK, NULL, > gettext_noop("Disable the TFTP blocksize extension."), NULL }, { > LOPT_TFTP_LC, OPT_TFTP_LC, NULL, gettext_noop("Convert TFTP > filenames to lowercase"), NULL }, > -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iEYEARECAAYFAlUbE0MACgkQKPyGmiibgremqQCfWktFhDgQ1KhEkzgiyqDFka5c C3AAnRRy24HKZfwT6P/wENrNVJYUOKrD =U+8B -----END PGP SIGNATURE----- _______________________________________________ Dnsmasq-discuss mailing list [email protected] http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
