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
This commit is contained in:
ths 2007-02-20 00:12:07 +00:00
parent 1f697db9c3
commit 0db1137dbf
3 changed files with 15 additions and 10 deletions

View File

@ -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

View File

@ -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)
/* 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;
} }

2
vl.c
View File

@ -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"