diff --git a/xrdp/xrdp_login_wnd.c b/xrdp/xrdp_login_wnd.c index 49477a12..34cb70ed 100644 --- a/xrdp/xrdp_login_wnd.c +++ b/xrdp/xrdp_login_wnd.c @@ -24,6 +24,7 @@ #include "xrdp.h" #include "log.h" +#include "ssl_calls.h" /*****************************************************************************/ /* all login help screen events go here */ @@ -339,6 +340,8 @@ xrdp_wm_show_edits(struct xrdp_wm *self, struct xrdp_bitmap *combo) struct xrdp_bitmap *b; struct xrdp_cfg_globals *globals; char resultIP[256]; + char *plain; /* base64 decoded string */ + size_t base64_length; /* length of base64 string */ globals = &self->xrdp_config->cfg_globals; @@ -366,7 +369,16 @@ xrdp_wm_show_edits(struct xrdp_wm *self, struct xrdp_bitmap *combo) { value = (char *)list_get_item(mod->values, index); - if (g_strncmp("ask", value, 3) == 0) + /* if the value begins with "{base64}", decode the string following it */ + if (g_strncmp("{base64}", value, 8) == 0) + { + base64_length = g_strlen(value + 8); + plain = (char *)g_malloc(base64_length, 0); + base64_decode(plain, value + 8, base64_length); + g_strncpy(value, plain, g_strlen(plain)); + free(plain); + } + else if (g_strncmp("ask", value, 3) == 0) { /* label */ b = xrdp_bitmap_create(95, DEFAULT_EDIT_H, self->screen->bpp, @@ -399,7 +411,19 @@ xrdp_wm_show_edits(struct xrdp_wm *self, struct xrdp_bitmap *combo) b->pointer = 1; b->tab_stop = 1; b->caption1 = (char *)g_malloc(256, 1); - g_strncpy(b->caption1, value + 3, 255); + /* ask{base64}... 3 for "ask", 8 for "{base64}" */ + if (g_strncmp("{base64}", value + 3, 8) == 0) + { + base64_length = g_strlen(value + 3 + 8); + plain = (char *)g_malloc(base64_length, 0); + base64_decode(plain, value + 3 + 8, base64_length); + g_strncpy(b->caption1, plain, 255); + free(plain); + } + else + { + g_strncpy(b->caption1, value + 3, 255); + } b->edit_pos = g_mbstowcs(0, b->caption1, 0); if (self->login_window->focused_control == 0)