]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
--tftp-lowercase option.
authorSimon Kelley <simon@thekelleys.org.uk>
Fri, 20 Apr 2012 20:28:49 +0000 (21:28 +0100)
committerSimon Kelley <simon@thekelleys.org.uk>
Fri, 20 Apr 2012 20:28:49 +0000 (21:28 +0100)
CHANGELOG
man/dnsmasq.8
src/dnsmasq.h
src/option.c
src/tftp.c

index fee3305a6b9da0357838cfd19646ed45637550f3..5300f6dbe4a70ce124797dfdf3fff4e84cfe66d6 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -93,6 +93,9 @@ version 2.61
            Give correct from-cache answers to explict CNAME queries.
            Thanks to Rob Zwissler for spotting this.
            
+           Add --dhcp-lowercase option. Thanks to Oliver Rath for the
+           patch. 
+           
 
 version 2.60
             Fix compilation problem in Mac OS X Lion. Thanks to Olaf
index c43aee5d9afe54e8a462443425679044ca025502..0a3b5df4a6013e70bb8ed33d69704f5c8ac86000 100644 (file)
@@ -1385,6 +1385,12 @@ are accessible. It is not recommended to run dnsmasq as root with TFTP
 enabled, and certainly not without specifying --tftp-root. Doing so
 can expose any world-readable file on the server to any host on the net. 
 .TP
+.B --tftp-lowercase
+Convert filenames in TFTP requests to all lowercase. This is useful
+for requests from Windows machines, which have case-insensitive
+filesystems and tend to play fast-and-loose with case in filenames.
+Note that dnsmasq's tftp server always converts "\\" to "/" in filenames.
+.TP
 .B --tftp-max=<connections>
 Set the maximum number of concurrent TFTP connections allowed. This
 defaults to 50. When serving a large number of TFTP connections,
index 082c9238459f8017e02ffa95c6ce91bdee7d2de7..3b4eac27fd1baeac1375e02eb977697392b37eac 100644 (file)
@@ -217,7 +217,8 @@ struct event_desc {
 #define OPT_CONNTRACK      35
 #define OPT_FQDN_UPDATE    36
 #define OPT_RA             37
-#define OPT_LAST           38
+#define OPT_TFTP_LC        38
+#define OPT_LAST           39
 
 /* 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. */
index 611b5998c5d4cc8b3fdb1051f7d3c799d01a1925..5cb7d7b1cc5c33b533567656961ca610834c80d9 100644 (file)
@@ -117,6 +117,7 @@ struct myoption {
 #define LOPT_RA        306
 #define LOPT_DUID      307
 #define LOPT_HOST_REC  308
+#define LOPT_TFTP_LC   309
 
 #ifdef HAVE_GETOPT_LONG
 static const struct option opts[] =  
@@ -196,6 +197,7 @@ static const struct myoption opts[] =
     { "tftp-unique-root", 0, 0, LOPT_APREF },
     { "tftp-root", 1, 0, LOPT_PREFIX },
     { "tftp-max", 1, 0, LOPT_TFTP_MAX },
+    { "tftp-lowercase", 0, 0, LOPT_TFTP_LC },
     { "ptr-record", 1, 0, LOPT_PTR },
     { "naptr-record", 1, 0, LOPT_NAPTR },
     { "bridge-interface", 1, 0 , LOPT_BRIDGE },
@@ -342,6 +344,7 @@ static struct {
   { LOPT_SECURE, OPT_TFTP_SECURE, NULL, gettext_noop("Allow access only to files owned by the user running dnsmasq."), 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 },
   { LOPT_TFTPPORTS, ARG_ONE, "<start>,<end>", gettext_noop("Ephemeral port range for use by TFTP transfers."), NULL },
   { LOPT_LOG_OPTS, OPT_LOG_OPTS, NULL, gettext_noop("Extra logging for DHCP."), NULL },
   { LOPT_MAX_LOGS, ARG_ONE, "[=<integer>]", gettext_noop("Enable async. logging; optionally set queue length."), NULL },
index a67fcaaf4c9ca8015eed4fe88870a540be4da779..bda04f380471efec305bac2db6565e348c2dd2a4 100644 (file)
@@ -345,9 +345,12 @@ void tftp_request(struct listener *listen, time_t now)
        }
 
       /* cope with backslashes from windows boxen. */
-      while ((p = strchr(filename, '\\')))
-       *p = '/';
-
+      for (p = filename; *p; p++)
+       if (*p == '\\')
+         *p = '/';
+       else if (option_bool(OPT_TFTP_LC))
+         *p = tolower(*p);
+               
       strcpy(daemon->namebuff, "/");
       if (prefix)
        {