Commit 0db1137d authored by ths's avatar ths
Browse files

Change -tftp option to take a root directory, by Anthony Liguori.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2441 c046a42c-6fe2-441c-8c8c-71466251a162
parent 1f697db9
...@@ -444,13 +444,12 @@ Indicate that no network devices should be configured. It is used to ...@@ -444,13 +444,12 @@ Indicate that no network devices should be configured. It is used to
override the default configuration (@option{-net nic -net user}) which override the default configuration (@option{-net nic -net user}) which
is activated if no @option{-net} options are provided. is activated if no @option{-net} options are provided.
@item -tftp prefix @item -tftp dir
When using the user mode network stack, activate a built-in TFTP When using the user mode network stack, activate a built-in TFTP
server. All filenames beginning with @var{prefix} can be downloaded server. The files in @var{dir} will be exposed as the root of a TFTP server.
from the host to the guest using a TFTP client. The TFTP client on the The TFTP client on the guest must be configured in binary mode (use the command
guest must be configured in binary mode (use the command @code{bin} of @code{bin} of the Unix TFTP client). The host IP address on the guest is as
the Unix TFTP client). The host IP address on the guest is as usual usual 10.0.2.2.
10.0.2.2.
@item -bootp file @item -bootp file
When using the user mode network stack, broadcast @var{file} as the BOOTP When using the user mode network stack, broadcast @var{file} as the BOOTP
......
...@@ -102,8 +102,15 @@ static int tftp_read_data(struct tftp_session *spt, u_int16_t block_nr, ...@@ -102,8 +102,15 @@ static int tftp_read_data(struct tftp_session *spt, u_int16_t block_nr,
{ {
int fd; int fd;
int bytes_read = 0; int bytes_read = 0;
char buffer[1024];
int n;
fd = open(spt->filename, O_RDONLY | O_BINARY); n = snprintf(buffer, sizeof(buffer), "%s/%s",
tftp_prefix, spt->filename);
if (n >= sizeof(buffer))
return -1;
fd = open(buffer, O_RDONLY | O_BINARY);
if (fd < 0) { if (fd < 0) {
return -1; return -1;
...@@ -325,8 +332,7 @@ static void tftp_handle_rrq(struct tftp_t *tp, int pktlen) ...@@ -325,8 +332,7 @@ static void tftp_handle_rrq(struct tftp_t *tp, int pktlen)
/* only allow exported prefixes */ /* only allow exported prefixes */
if (!tftp_prefix if (!tftp_prefix) {
|| (strncmp(spt->filename, tftp_prefix, strlen(tftp_prefix)) != 0)) {
tftp_send_error(spt, 2, "Access violation", tp); tftp_send_error(spt, 2, "Access violation", tp);
return; return;
} }
......
...@@ -6402,7 +6402,7 @@ void help(void) ...@@ -6402,7 +6402,7 @@ void help(void)
" is provided, the default is '-net nic -net user'\n" " is provided, the default is '-net nic -net user'\n"
"\n" "\n"
#ifdef CONFIG_SLIRP #ifdef CONFIG_SLIRP
"-tftp prefix allow tftp access to files starting with prefix [-net user]\n" "-tftp dir allow tftp access to files in dir [-net user]\n"
"-bootp file advertise file in BOOTP replies\n" "-bootp file advertise file in BOOTP replies\n"
#ifndef _WIN32 #ifndef _WIN32
"-smb dir allow SMB access to files in 'dir' [-net user]\n" "-smb dir allow SMB access to files in 'dir' [-net user]\n"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment