Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 585916 Details for
Bug 821569
Reconnection to existing xrdp sessions fails
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Add a fork to satisfy systemd-logind
pam_session.patch (text/plain), 8.61 KB, created by
Bojan Smojver
on 2012-05-22 02:10:19 UTC
(
hide
)
Description:
Add a fork to satisfy systemd-logind
Filename:
MIME Type:
Creator:
Bojan Smojver
Created:
2012-05-22 02:10:19 UTC
Size:
8.61 KB
patch
obsolete
>diff --git a/sesman/auth.h b/sesman/auth.h >index a6c5e7f..86bfc96 100644 >--- a/sesman/auth.h >+++ b/sesman/auth.h >@@ -58,6 +58,16 @@ auth_start_session(long in_val, int in_display); > * > */ > int DEFAULT_CC >+auth_stop_session(long in_val); >+ >+/** >+ * >+ * @brief FIXME >+ * @param in_val >+ * @return 0 on success, 1 on failure >+ * >+ */ >+int DEFAULT_CC > auth_end(long in_val); > > /** >diff --git a/sesman/session.c b/sesman/session.c >index 36262ad..b3226fd 100644 >--- a/sesman/session.c >+++ b/sesman/session.c >@@ -310,7 +310,7 @@ session_start_fork(int width, int height, int bpp, char* username, > { > int display = 0; > int pid = 0; >- int wmpid = 0; >+ int wmpid = 0, pampid = 0; > int xpid = 0; > int i = 0; > char geometry[32]; >@@ -369,7 +369,6 @@ session_start_fork(int width, int height, int bpp, char* username, > } > else if (pid == 0) /* child sesman */ > { >- auth_start_session(data, display); > g_sprintf(geometry, "%dx%d", width, height); > g_sprintf(depth, "%d", bpp); > g_sprintf(screen, ":%d", display); >@@ -380,80 +379,93 @@ session_start_fork(int width, int height, int bpp, char* username, > else if (wmpid == 0) /* child (child sesman) xserver */ > { > wait_for_xserver(display); >- env_set_user(username, 0, display); >- if (x_server_running(display)) >+ auth_start_session(data, display); >+ pampid = g_fork(); >+ if(pampid == -1) > { >- auth_set_env(data); >- if (directory != 0) >+ } >+ else if (pampid == 0) /* child: X11/client */ >+ { >+ env_set_user(username, 0, display); >+ if (x_server_running(display)) > { >- if (directory[0] != 0) >+ auth_set_env(data); >+ if (directory != 0) > { >- g_set_current_dir(directory); >+ if (directory[0] != 0) >+ { >+ g_set_current_dir(directory); >+ } > } >- } >- if (program != 0) >- { >- if (program[0] != 0) >+ if (program != 0) > { >- g_execlp3(program, program, 0); >- log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS, >- "error starting program %s for user %s - pid %d", >- program, username, g_getpid()); >+ if (program[0] != 0) >+ { >+ g_execlp3(program, program, 0); >+ log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS, >+ "error starting program %s for user %s - pid %d", >+ program, username, g_getpid()); >+ } > } >- } >- /* try to execute user window manager if enabled */ >- if (g_cfg->enable_user_wm) >- { >- g_sprintf(text,"%s/%s", g_getenv("HOME"), g_cfg->user_wm); >- if (g_file_exist(text)) >+ /* try to execute user window manager if enabled */ >+ if (g_cfg->enable_user_wm) > { >- g_execlp3(text, g_cfg->user_wm, 0); >- log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS,"error starting user " >- "wm for user %s - pid %d", username, g_getpid()); >- /* logging parameters */ >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, "errno: %d, " >- "description: %s", errno, g_get_strerror()); >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG,"execlp3 parameter " >- "list:"); >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[0] = %s", >- text); >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[1] = %s", >- g_cfg->user_wm); >+ g_sprintf(text,"%s/%s", g_getenv("HOME"), g_cfg->user_wm); >+ if (g_file_exist(text)) >+ { >+ g_execlp3(text, g_cfg->user_wm, 0); >+ log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS,"error starting user " >+ "wm for user %s - pid %d", username, g_getpid()); >+ /* logging parameters */ >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, "errno: %d, " >+ "description: %s", errno, g_get_strerror()); >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG,"execlp3 parameter " >+ "list:"); >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[0] = %s", >+ text); >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[1] = %s", >+ g_cfg->user_wm); >+ } > } >+ /* if we're here something happened to g_execlp3 >+ so we try running the default window manager */ >+ g_sprintf(text, "%s/%s", XRDP_CFG_PATH, g_cfg->default_wm); >+ g_execlp3(text, g_cfg->default_wm, 0); >+ >+ log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS,"error starting default " >+ "wm for user %s - pid %d", username, g_getpid()); >+ /* logging parameters */ >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, "errno: %d, description: " >+ "%s", errno, g_get_strerror()); >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG,"execlp3 parameter list:"); >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[0] = %s", >+ text); >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[1] = %s", >+ g_cfg->default_wm); >+ >+ /* still a problem starting window manager just start xterm */ >+ g_execlp3("xterm", "xterm", 0); >+ >+ /* should not get here */ >+ log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS,"error starting xterm " >+ "for user %s - pid %d", username, g_getpid()); >+ /* logging parameters */ >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, "errno: %d, description: " >+ "%s", errno, g_get_strerror()); > } >- /* if we're here something happened to g_execlp3 >- so we try running the default window manager */ >- g_sprintf(text, "%s/%s", XRDP_CFG_PATH, g_cfg->default_wm); >- g_execlp3(text, g_cfg->default_wm, 0); >- >- log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS,"error starting default " >- "wm for user %s - pid %d", username, g_getpid()); >- /* logging parameters */ >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, "errno: %d, description: " >- "%s", errno, g_get_strerror()); >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG,"execlp3 parameter list:"); >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[0] = %s", >- text); >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, " argv[1] = %s", >- g_cfg->default_wm); >- >- /* still a problem starting window manager just start xterm */ >- g_execlp3("xterm", "xterm", 0); >- >- /* should not get here */ >- log_message(&(g_cfg->log), LOG_LEVEL_ALWAYS,"error starting xterm " >- "for user %s - pid %d", username, g_getpid()); >- /* logging parameters */ >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG, "errno: %d, description: " >- "%s", errno, g_get_strerror()); >+ else >+ { >+ log_message(&(g_cfg->log), LOG_LEVEL_ERROR, "another Xserver is " >+ "already active on display %d", display); >+ } >+ log_message(&(g_cfg->log), LOG_LEVEL_DEBUG,"aborting connection..."); >+ g_exit(0); > } > else > { >- log_message(&(g_cfg->log), LOG_LEVEL_ERROR, "another Xserver is " >- "already active on display %d", display); >+ g_waitpid(pampid); >+ auth_stop_session(data); > } >- log_message(&(g_cfg->log), LOG_LEVEL_DEBUG,"aborting connection..."); >- g_exit(0); > } > else /* parent (child sesman) */ > { >diff --git a/sesman/verify_user_pam.c b/sesman/verify_user_pam.c >index e3d8596..54aaeaa 100644 >--- a/sesman/verify_user_pam.c >+++ b/sesman/verify_user_pam.c >@@ -173,6 +173,26 @@ auth_start_session(long in_val, int in_display) > > /******************************************************************************/ > /* returns error */ >+int DEFAULT_CC >+auth_stop_session(long in_val) >+{ >+ struct t_auth_info* auth_info; >+ int error; >+ >+ auth_info = (struct t_auth_info*)in_val; >+ error = pam_close_session(auth_info->ph, 0); >+ if (error != PAM_SUCCESS) >+ { >+ g_printf("pam_close_session failed: %s\r\n", >+ pam_strerror(auth_info->ph, error)); >+ return 1; >+ } >+ auth_info->session_opened = 0; >+ return 0; >+} >+ >+/******************************************************************************/ >+/* returns error */ > /* cleanup */ > int DEFAULT_CC > auth_end(long in_val)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 821569
:
585916
|
585917