diff options
-rw-r--r-- | xrdp/xrdp_wm.c | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c index 335bf27f..8765809f 100644 --- a/xrdp/xrdp_wm.c +++ b/xrdp/xrdp_wm.c @@ -554,6 +554,7 @@ xrdp_wm_init(struct xrdp_wm *self) char *q; const char *r; char param[256]; + char default_section_name[256]; char section_name[256]; char cfg_file[256]; char autorun_name[256]; @@ -581,6 +582,22 @@ xrdp_wm_init(struct xrdp_wm *self) values = list_create(); values->auto_free = 1; + /* pick up the first section name except for 'globals', 'Logging', 'channels' + * in xrdp.ini and use it as default section name */ + file_read_sections(fd, names); + default_section_name[0] = '\0'; + for (index = 0; index < names->count; index++) + { + q = (char *)list_get_item(names, index); + if ((g_strncasecmp("globals", q, 8) != 0) && + (g_strncasecmp("Logging", q, 8) != 0) && + (g_strncasecmp("channels", q, 9) != 0)) + { + g_strncpy(default_section_name, q, 255); + break; + } + } + /* look for module name to be loaded */ if (autorun_name[0] != 0) { @@ -594,34 +611,36 @@ xrdp_wm_init(struct xrdp_wm *self) * simplify for the user in a proxy setup */ /* we use the domain name as the module name to be loaded */ - g_strncpy(section_name, self->session->client_info->domain, - 255); + g_strncpy(section_name, + self->session->client_info->domain, 255); } else { - /* if no domain is passed, and no autorun in xrdp.ini, - use the first item in the xrdp.ini - file that's not named - 'globals' or 'Logging' or 'channels' */ - /* TODO: change this and have an 'autologin' - line in globals section */ - file_read_sections(fd, names); - section_name[0] = '\0'; - for (index = 0; index < names->count; index++) - { - q = (char *)list_get_item(names, index); - if ((g_strncasecmp("globals", q, 8) != 0) && - (g_strncasecmp("Logging", q, 8) != 0) && - (g_strncasecmp("channels", q, 9) != 0)) - { - g_strncpy(section_name, q, 255); - break; - } - } + /* if no domain is given, and autorun is not specified in xrdp.ini + * use default_section_name as section_name */ + g_strncpy(section_name, default_section_name, 255); } list_clear(names); + /* if given section name doesn't match any sections configured + * in xrdp.ini, fallback to default_section_name */ + if (file_read_section(fd, section_name, names, values) != 0) + { + log_message(LOG_LEVEL_INFO, + "Module \"%s\" specified by %s from %s port %s " + "is not configured. Using \"%s\" instead.", + section_name, + self->session->client_info->username, + self->session->client_info->client_addr, + self->session->client_info->client_port, + default_section_name); + list_clear(names); + list_clear(values); + + g_strncpy(section_name, default_section_name, 255); + } + /* look for the required module in xrdp.ini, fetch its parameters */ if (file_read_section(fd, section_name, names, values) == 0) { @@ -684,10 +703,9 @@ xrdp_wm_init(struct xrdp_wm *self) } else { - /* requested module name not found in xrdp.ini */ - xrdp_wm_log_msg(self, LOG_LEVEL_ERROR, - "Section \"%s\" not configured in xrdp.ini", - section_name); + /* Hopefully, we never reach here. */ + log_message(LOG_LEVEL_DEBUG, + "Control should never reach %s:%d", __FILE__, __LINE__); } list_delete(names); |