
bert.wesarg at googlemail
May 3, 2012, 4:33 AM
Post #1 of 1
(130 views)
Permalink
|
|
[PATCH/RFC 4/6] remove closed forwardings from options
|
|
--- mux.c | 8 +------- readconf.c | 32 ++++++++++++++++++++++++++++++++ readconf.h | 1 + 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/mux.c b/mux.c index 337ef54..c59bb97 100644 --- a/mux.c +++ b/mux.c @@ -835,13 +835,7 @@ process_mux_close_fwd(u_int rid, Channel *c, Buffer *m, Buffer *r) buffer_put_int(r, MUX_S_OK); buffer_put_int(r, rid); - found_fwd->type = 0; - if (found_fwd->listen_host != NULL) - xfree(found_fwd->listen_host); - if (found_fwd->connect_host != NULL) - xfree(found_fwd->connect_host); - found_fwd->listen_host = found_fwd->connect_host = NULL; - found_fwd->listen_port = found_fwd->connect_port = 0; + remove_forward(&options, found_fwd); } else { buffer_put_int(r, MUX_S_FAILURE); buffer_put_int(r, rid); diff --git a/readconf.c b/readconf.c index a89b07a..371570d 100644 --- a/readconf.c +++ b/readconf.c @@ -286,6 +286,38 @@ add_forward(Options *options, const Forward *newfwd) return fwd->id; } +/* + * Remove a TCP/IP port forward from the options. + */ + +void +remove_forward(Options *options, Forward *remfwd) +{ + if (remfwd < options->forwards || + options->forwards + options->num_forwards <= remfwd) + fatal("Invalid forwarding to remove."); + + if (remfwd->listen_host != NULL) + xfree(remfwd->listen_host); + if (remfwd->connect_host != NULL) + xfree(remfwd->connect_host); + remfwd->listen_host = remfwd->connect_host = NULL; + remfwd->listen_port = remfwd->connect_port = 0; + + options->num_forwards--; + while (remfwd < options->forwards + options->num_forwards) { + *remfwd = *(remfwd + 1); + remfwd++; + } + if (options->num_forwards > 0) + options->forwards = xrealloc(options->forwards, + options->num_forwards, sizeof(*remfwd)); + else { + xfree(options->forwards); + options->forwards = NULL; + } +} + static void clear_forwardings(Options *options) { diff --git a/readconf.h b/readconf.h index d44946b..6877888 100644 --- a/readconf.h +++ b/readconf.h @@ -160,5 +160,6 @@ process_config_line(Options *, const char *, char *, const char *, int, int *); int parse_forward(Forward *, const char *, u_int); u_int add_forward(Options *, const Forward *); +void remove_forward(Options *, Forward *); #endif /* READCONF_H */ -- 1.7.9.rc0.542.g07ca1 _______________________________________________ openssh-unix-dev mailing list openssh-unix-dev [at] mindrot https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev
|