Package: qemu Version: 0.8.2-4 Severity: normal
reportbug-qemu-20070104-12998-TR9hMc -- System Information: Debian Release: 4.0 APT prefers testing APT policy: (500, 'testing'), (100, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.19-minimal Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R) Versions of packages qemu depends on: ii bochsbios 2.3-2 BIOS for the Bochs emulator ii libasound2 1.0.13-1 ALSA library ii libc6 2.3.6.ds1-8 GNU C Library: Shared libraries ii libncurses5 5.5-5 Shared libraries for terminal hand ii libsdl1.2debian 1.2.11-7 Simple DirectMedia Layer ii openhackware 0.4.1-2 OpenFirmware emulator for PowerPC ii proll 18-2 JavaStation PROM 2.x compatible re ii vgabios 0.6a-1 VGA BIOS software for the Bochs an ii zlib1g 1:1.2.3-13 compression library - runtime Versions of packages qemu recommends: ii debootstrap 0.3.3.1 Bootstrap a basic Debian system ii sharutils 1:4.2.1-15 shar, unshar, uuencode, uudecode ii vde 1.5.11-1 virtual distributed ethernet -- no debconf information
Index: qemu-0.8.2/slirp/tcp_subr.c =================================================================== --- qemu-0.8.2.orig/slirp/tcp_subr.c 2007-01-04 16:22:41.128335686 +0300 +++ qemu-0.8.2/slirp/tcp_subr.c 2007-01-04 16:49:25.000000000 +0300 @@ -989,6 +989,10 @@ /* * Need to emulate the PORT command */ + struct socket *tmpso; + struct sockaddr_in addr; + int len; + x = sscanf(bptr, "ORT %d,%d,%d,%d,%d,%d\r\n%256[^\177]", &n1, &n2, &n3, &n4, &n5, &n6, buff); if (x < 6) @@ -997,15 +1001,17 @@ laddr = htonl((n1 << 24) | (n2 << 16) | (n3 << 8) | (n4)); lport = htons((n5 << 8) | (n6)); - if ((so = solisten(0, laddr, lport, SS_FACCEPTONCE)) == NULL) + if ((tmpso = solisten(0, laddr, lport, SS_FACCEPTONCE)) == NULL) return 1; - n6 = ntohs(so->so_fport); + n6 = ntohs(tmpso->so_fport); n5 = (n6 >> 8) & 0xff; n6 &= 0xff; - laddr = ntohl(so->so_faddr.s_addr); + len = sizeof(addr); + getsockname(so->s, &addr, &len); + laddr = ntohl(addr.sin_addr.s_addr); n1 = ((laddr >> 24) & 0xff); n2 = ((laddr >> 16) & 0xff); @@ -1020,6 +1026,10 @@ /* * Need to emulate the PASV response */ + struct socket *tmpso; + struct sockaddr_in addr; + int len; + x = sscanf(bptr, "27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%256[^\177]", &n1, &n2, &n3, &n4, &n5, &n6, buff); if (x < 6) @@ -1028,15 +1038,17 @@ laddr = htonl((n1 << 24) | (n2 << 16) | (n3 << 8) | (n4)); lport = htons((n5 << 8) | (n6)); - if ((so = solisten(0, laddr, lport, SS_FACCEPTONCE)) == NULL) + if ((tmpso = solisten(0, laddr, lport, SS_FACCEPTONCE)) == NULL) return 1; - n6 = ntohs(so->so_fport); + n6 = ntohs(tmpso->so_fport); n5 = (n6 >> 8) & 0xff; n6 &= 0xff; - laddr = ntohl(so->so_faddr.s_addr); + len = sizeof(addr); + getsockname(so->s, &addr, &len); + laddr = ntohl(addr.sin_addr.s_addr); n1 = ((laddr >> 24) & 0xff); n2 = ((laddr >> 16) & 0xff); Index: qemu-0.8.2/vl.c =================================================================== --- qemu-0.8.2.orig/vl.c 2007-01-04 16:20:39.505954959 +0300 +++ qemu-0.8.2/vl.c 2007-01-04 16:52:56.000000000 +0300 @@ -62,6 +62,7 @@ #if defined(CONFIG_SLIRP) #include "libslirp.h" +extern void add_emu(char *buf); #endif #ifdef _WIN32 @@ -2831,12 +2832,19 @@ slirp_input(buf, size); } -static int net_slirp_init(VLANState *vlan) +static void do_slirp_init(void) { if (!slirp_inited) { slirp_inited = 1; slirp_init(); + /* emulate ftp on port 21 by default */ + add_emu("ftp 21"); } +} + +static int net_slirp_init(VLANState *vlan) +{ + do_slirp_init(); slirp_vc = qemu_new_vlan_client(vlan, slirp_receive, NULL, NULL); snprintf(slirp_vc->info_str, sizeof(slirp_vc->info_str), "user redirector"); @@ -2850,11 +2858,8 @@ const char *p; struct in_addr guest_addr; int host_port, guest_port; - - if (!slirp_inited) { - slirp_inited = 1; - slirp_init(); - } + + do_slirp_init(); p = redir_str; if (get_str_sep(buf, sizeof(buf), &p, ':') < 0) @@ -2929,10 +2934,7 @@ char smb_cmdline[1024]; FILE *f; - if (!slirp_inited) { - slirp_inited = 1; - slirp_init(); - } + do_slirp_init(); /* XXX: better tmp dir construction */ snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());