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
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel