[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/41] slirp: Do not allow to remove non-hostfwd soc
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 13/41] slirp: Do not allow to remove non-hostfwd sockets |
Date: |
Wed, 24 Jun 2009 14:42:29 +0200 |
User-agent: |
StGIT/0.14.3 |
Prevent that the users accidentally shoots down dynamic sockets. This
allows to remove looping for removals as there can now only be one
match.
Signed-off-by: Jan Kiszka <address@hidden>
---
net.c | 8 ++++----
slirp/slirp.c | 14 +++++---------
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/net.c b/net.c
index 6753993..71aaa1e 100644
--- a/net.c
+++ b/net.c
@@ -880,7 +880,7 @@ void net_slirp_hostfwd_remove(Monitor *mon, const char
*src_str)
char buf[256] = "";
const char *p = src_str;
int is_udp = 0;
- int n;
+ int err;
if (!slirp_inited) {
monitor_printf(mon, "user mode network stack not in use\n");
@@ -909,10 +909,10 @@ void net_slirp_hostfwd_remove(Monitor *mon, const char
*src_str)
host_port = atoi(p);
- n = slirp_remove_hostfwd(is_udp, host_addr, host_port);
+ err = slirp_remove_hostfwd(is_udp, host_addr, host_port);
- monitor_printf(mon, "removed %d host forwarding rules for %s\n", n,
- src_str);
+ monitor_printf(mon, "host forwarding rule for %s %s\n", src_str,
+ err ? "removed" : "not found");
return;
fail_syntax:
diff --git a/slirp/slirp.c b/slirp/slirp.c
index ad35c1f..35de4e3 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -757,9 +757,7 @@ void if_encap(const uint8_t *ip_data, int ip_data_len)
}
}
-/* Unlistens a redirection
- *
- * Return value: number of redirs removed */
+/* Drop host forwarding rule, return 0 if found. */
int slirp_remove_hostfwd(int is_udp, struct in_addr host_addr, int host_port)
{
struct socket *so;
@@ -767,22 +765,20 @@ int slirp_remove_hostfwd(int is_udp, struct in_addr
host_addr, int host_port)
struct sockaddr_in addr;
int port = htons(host_port);
socklen_t addr_len;
- int n = 0;
- loop_again:
for (so = head->so_next; so != head; so = so->so_next) {
addr_len = sizeof(addr);
- if (getsockname(so->s, (struct sockaddr *)&addr, &addr_len) == 0 &&
+ if ((so->so_state & SS_HOSTFWD) &&
+ getsockname(so->s, (struct sockaddr *)&addr, &addr_len) == 0 &&
addr.sin_addr.s_addr == host_addr.s_addr &&
addr.sin_port == port) {
close(so->s);
sofree(so);
- n++;
- goto loop_again;
+ return 0;
}
}
- return n;
+ return -1;
}
int slirp_add_hostfwd(int is_udp, struct in_addr host_addr, int host_port,
- [Qemu-devel] [PATCH 00/41] Slirp Fixes and Enhancements - Reloaded, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 01/41] slirp: Drop redundant lines from udp_input, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 02/41] slirp: Refactor tcp_ctl, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 03/41] Revert "User networking: Show active connections", Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 08/41] slirp: Fix port comparision in slirp_remove_hostfwd, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 09/41] slirp: Rework monitor commands for host forwarding, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 11/41] slirp: Prepare for persistent socket state flags, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 07/41] slirp: Rework external configuration interface, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 10/41] slirp: Bind support for host forwarding rules, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 12/41] slirp: Explicitely mark host-forwarding sockets, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 13/41] slirp: Do not allow to remove non-hostfwd sockets,
Jan Kiszka <=
- [Qemu-devel] [PATCH 15/41] slirp: Add info usernet for dumping connection states, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 17/41] slirp: Drop statistic code, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 23/41] slirp: tftp: Rework filename handling, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 24/41] slirp: Factor out one-time initialization, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 19/41] slirp: Drop unused icmp_var.h, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 20/41] slirp: tftp: Cleanup tftp_prefix check, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 21/41] slirp: tftp: Clean up tftp_send_error, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 29/41] slirp: Clean up timeout handling around slirp_select_fill/poll, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 26/41] slirp: Clean up updtime, Jan Kiszka, 2009/06/24
- [Qemu-devel] [PATCH 25/41] slirp: Make IP packet ID consistent, Jan Kiszka, 2009/06/24