diff options
author | Selva Nair | 2020-02-20 22:00:28 -0500 |
---|---|---|
committer | Gert Doering | 2020-05-13 15:33:48 +0200 |
commit | 93ba6ccddafcc87f336f50dadde144ea4f6178ad (patch) | |
tree | 089f17b629038cfe0f09ccaa5afd03649d7bc8a2 /src | |
parent | a88504010466dd5f5e0eabefd487036082444426 (diff) | |
download | openvpn-93ba6ccddafcc87f336f50dadde144ea4f6178ad.zip openvpn-93ba6ccddafcc87f336f50dadde144ea4f6178ad.tar.gz |
Persist management-query-remote and proxy prompts
Currently this prompt is only output once, not re-written to the
management interface when the management client connects. It is thus
not seen by a client that connects after the prompt is output or one that
disconnects and reconnects. This leads to a deadlock: the daemon waiting
for the "remote" command from the client, the latter not aware of it.
Resolve by adding the ">REMOTE" and ">PROXY" prompt to
man.persist.special_state_msg as done for other persisted prompts such
as ">PASSWORD"
Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1582254028-7763-1-git-send-email-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19497.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/openvpn/init.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/openvpn/init.c b/src/openvpn/init.c index f82faf3..70cd493 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -272,6 +272,7 @@ ce_management_query_proxy(struct context *c) buf_printf(&out, ">PROXY:%u,%s,%s", (l ? l->current : 0) + 1, (proto_is_udp(ce->proto) ? "UDP" : "TCP"), np(ce->remote)); management_notify_generic(management, BSTR(&out)); + management->persist.special_state_msg = BSTR(&out); } ce->flags |= CE_MAN_QUERY_PROXY; while (ce->flags & CE_MAN_QUERY_PROXY) @@ -283,6 +284,7 @@ ce_management_query_proxy(struct context *c) break; } } + management->persist.special_state_msg = NULL; gc_free(&gc); } @@ -352,6 +354,7 @@ ce_management_query_remote(struct context *c) buf_printf(&out, ">REMOTE:%s,%s,%s", np(ce->remote), ce->remote_port, proto2ascii(ce->proto, ce->af, false)); management_notify_generic(management, BSTR(&out)); + management->persist.special_state_msg = BSTR(&out); ce->flags &= ~(CE_MAN_QUERY_REMOTE_MASK << CE_MAN_QUERY_REMOTE_SHIFT); ce->flags |= (CE_MAN_QUERY_REMOTE_QUERY << CE_MAN_QUERY_REMOTE_SHIFT); @@ -365,6 +368,7 @@ ce_management_query_remote(struct context *c) break; } } + management->persist.special_state_msg = NULL; } gc_free(&gc); |