OpenVPN 3 implements these messages to send information during the authentication to the UI, implement these message also in OpenVPN 2.x --- src/openvpn/forward.c | 8 ++++++++ src/openvpn/push.c | 29 +++++++++++++++++++++++++++++ src/openvpn/push.h | 2 ++ 3 files changed, 39 insertions(+)
diff --git a/src/openvpn/forward.c b/src/openvpn/forward.c index 9905b5a0..d3e6eede 100644 --- a/src/openvpn/forward.c +++ b/src/openvpn/forward.c @@ -169,6 +169,14 @@ check_incoming_control_channel_dowork(struct context *c) { server_pushed_signal(c, &buf, false, 4); } + else if (buf_string_match_head_str(&buf, "INFO_PRE")) + { + server_pushed_info(c, &buf, 8); + } + else if (buf_string_match_head_str(&buf, "INFO")) + { + server_pushed_info(c, &buf, 4); + } else { msg(D_PUSH_ERRORS, "WARNING: Received unknown control message: %s", BSTR(&buf)); diff --git a/src/openvpn/push.c b/src/openvpn/push.c index d1ca84d1..069a32c4 100644 --- a/src/openvpn/push.c +++ b/src/openvpn/push.c @@ -175,6 +175,34 @@ server_pushed_signal(struct context *c, const struct buffer *buffer, const bool } } +void server_pushed_info(struct context *c, const struct buffer *buffer, const int adv) +{ + struct gc_arena gc; + const char *m = ""; + struct buffer buf = *buffer; + + if (buf_advance(&buf, adv) && buf_read_u8(&buf) == ',' && BLEN(&buf)) + { + m = BSTR(&buf); + } + + #ifdef ENABLE_MANAGEMENT + if (management) + { + gc = gc_new(); + + /* We use >INFOMSG here instead of plain >INFO since INFO is used to */ + /* for management greeting and we don't want to confuse the client */ + struct buffer out = alloc_buf_gc(256, &gc); + buf_printf(&out, ">%s:%s", "INFOMSG", m); + management_notify_generic(management, BSTR(&out)); + + gc_free(&gc); + } + #endif + msg(D_PUSH, "Info command was pushed by server ('%s')", m); +} + #if P2MP_SERVER /** * Add an option to the given push list by providing a format string. diff --git a/src/openvpn/push.h b/src/openvpn/push.h index 5f6181e7..acc94003 100644 --- a/src/openvpn/push.h +++ b/src/openvpn/push.h @@ -50,6 +50,8 @@ void receive_auth_failed(struct context *c, const struct buffer *buffer); void server_pushed_signal(struct context *c, const struct buffer *buffer, const bool restart, const int adv); +void server_pushed_info(struct context *c, const struct buffer *buffer, const int adv); + void incoming_push_message(struct context *c, const struct buffer *buffer); #if P2MP_SERVER -- 2.17.1 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel