summaryrefslogtreecommitdiffstats
path: root/sesman/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'sesman/session.c')
-rw-r--r--sesman/session.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/sesman/session.c b/sesman/session.c
index 8a3453dc..70efd7c0 100644
--- a/sesman/session.c
+++ b/sesman/session.c
@@ -507,7 +507,7 @@ wait_for_remote_hostname(char* username)
/* wait up to 5 secs for hostname to appear */
i = 0;
const char * hostname = raptor_sm_get_hostname_for_username(username, false);
- while (strcmp(hostname, "") == 0)
+ while ((strcmp(hostname, "") == 0) || (strcmp(hostname, "ERROR") == 0))
{
g_free(hostname);
hostname = raptor_sm_get_hostname_for_username(username, false);
@@ -682,14 +682,22 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
else if (window_manager_pid == 0)
{
char* remote_server = wait_for_remote_hostname(s->username);
- wait_for_remote_xserver(remote_server, display);
- env_set_user(s->username,
- 0,
- display,
- g_cfg->env_names,
- g_cfg->env_values);
-
- if (x_server_running_check_remote_ports(remote_server, display))
+ if ((strcmp(remote_server, "") == 0) || (strcmp(remote_server, "ERROR") == 0))
+ {
+ g_free(remote_server);
+ remote_server = NULL;
+ log_message(LOG_LEVEL_ERROR, "Unable to find available node for specified user / group. Check group mappings in database?\n");
+ }
+ else {
+ wait_for_remote_xserver(remote_server, display);
+ env_set_user(s->username,
+ 0,
+ display,
+ g_cfg->env_names,
+ g_cfg->env_values);
+ }
+
+ if (remote_server && x_server_running_check_remote_ports(remote_server, display))
{
g_free(remote_server);
@@ -788,7 +796,10 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
}
else
{
- g_free(remote_server);
+ if (remote_server)
+ {
+ g_free(remote_server);
+ }
log_message(LOG_LEVEL_ERROR, "another Xserver might "
"already be active on display %d - see log", display);
}