Skip to content

Commit

Permalink
[tftp] Strip the initial '/' to keep Windows TFTP servers happy.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Brown committed Jul 2, 2008
1 parent 4fbbf65 commit 227bb05
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions src/net/udp/tftp.c
Expand Up @@ -316,17 +316,30 @@ void tftp_set_mtftp_port ( unsigned int port ) {
*/
static int tftp_send_rrq ( struct tftp_request *tftp ) {
struct tftp_rrq *rrq;
const char *path = tftp->uri->path;
size_t len = ( sizeof ( *rrq ) + strlen ( path ) + 1 /* NUL */
+ 5 + 1 /* "octet" + NUL */
+ 7 + 1 + 5 + 1 /* "blksize" + NUL + ddddd + NUL */
+ 5 + 1 + 1 + 1 /* "tsize" + NUL + "0" + NUL */
+ 9 + 1 + 1 /* "multicast" + NUL + NUL */ );
const char *path;
size_t len;
struct io_buffer *iobuf;

/* Strip initial '/' if present. If we were opened via the
* URI interface, then there will be an initial '/', since a
* full tftp:// URI provides no way to specify a non-absolute
* path. However, many TFTP servers (particularly Windows
* TFTP servers) complain about having an initial '/', and it
* violates user expectations to have a '/' silently added to
* the DHCP-specified filename.
*/
path = tftp->uri->path;
if ( *path == '/' )
path++;

DBGC ( tftp, "TFTP %p requesting \"%s\"\n", tftp, path );

/* Allocate buffer */
len = ( sizeof ( *rrq ) + strlen ( path ) + 1 /* NUL */
+ 5 + 1 /* "octet" + NUL */
+ 7 + 1 + 5 + 1 /* "blksize" + NUL + ddddd + NUL */
+ 5 + 1 + 1 + 1 /* "tsize" + NUL + "0" + NUL */
+ 9 + 1 + 1 /* "multicast" + NUL + NUL */ );
iobuf = xfer_alloc_iob ( &tftp->socket, len );
if ( ! iobuf )
return -ENOMEM;
Expand Down

0 comments on commit 227bb05

Please sign in to comment.