summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2017-03-20 18:59:44 -0700
committerjsorg71 <jay.sorg@gmail.com>2017-03-21 21:56:28 -0700
commit4b8a33e087ee9cf5556b40b717cd7e8ff243b3c3 (patch)
tree939bf7325777d0acb5b57e64cf41696ea65a4621
parent43899b7e0c30cde282ef72f6431029c04c8ab242 (diff)
downloadxrdp-proprietary-4b8a33e087ee9cf5556b40b717cd7e8ff243b3c3.tar.gz
xrdp-proprietary-4b8a33e087ee9cf5556b40b717cd7e8ff243b3c3.zip
sesman: move auth/pam calls to main process
-rw-r--r--sesman/scp_v0.c9
-rw-r--r--sesman/scp_v1.c20
-rw-r--r--sesman/session.c6
3 files changed, 26 insertions, 9 deletions
diff --git a/sesman/scp_v0.c b/sesman/scp_v0.c
index a1c919e2..de00068b 100644
--- a/sesman/scp_v0.c
+++ b/sesman/scp_v0.c
@@ -40,6 +40,7 @@ scp_v0_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
tbus data;
struct session_item *s_item;
int errorcode = 0;
+ bool_t do_auth_end = 1;
data = auth_userpass(s->username, s->password, &errorcode);
@@ -135,6 +136,9 @@ scp_v0_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
log_message(LOG_LEVEL_INFO, "starting Xorg session...");
display = session_start(data, SESMAN_SESSION_TYPE_XORG, c, s);
}
+ /* if the session started up ok, auth_end will be called on
+ sig child */
+ do_auth_end = display == 0;
}
else
{
@@ -155,5 +159,8 @@ scp_v0_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
{
scp_v0s_deny_connection(c);
}
- auth_end(data);
+ if (do_auth_end)
+ {
+ auth_end(data);
+ }
}
diff --git a/sesman/scp_v1.c b/sesman/scp_v1.c
index f865271b..60f82112 100644
--- a/sesman/scp_v1.c
+++ b/sesman/scp_v1.c
@@ -42,7 +42,7 @@ void
scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
{
long data;
- int display;
+ int display = 0;
int retries;
int current_try;
enum SCP_SERVER_STATES_E e;
@@ -50,6 +50,7 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
struct session_item *sitem;
int scount;
SCP_SID sid;
+ bool_t do_auth_end = 1;
retries = g_cfg->sec.login_retry;
current_try = retries;
@@ -128,14 +129,20 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
log_message(LOG_LEVEL_INFO, "starting Xvnc session...");
display = session_start(data, SESMAN_SESSION_TYPE_XVNC, c, s);
}
- else
+ else if (SCP_SESSION_TYPE_XRDP == s->type)
{
log_message(LOG_LEVEL_INFO, "starting X11rdp session...");
display = session_start(data, SESMAN_SESSION_TYPE_XRDP, c, s);
}
-
+ else if (SCP_SESSION_TYPE_XORG == s->type)
+ {
+ log_message(LOG_LEVEL_INFO, "starting Xorg session...");
+ display = session_start(data, SESMAN_SESSION_TYPE_XORG, c, s);
+ }
+ /* if the session started up ok, auth_end will be called on
+ sig child */
+ do_auth_end = display == 0;
e = scp_v1s_connect_new_session(c, display);
-
switch (e)
{
case SCP_SERVER_STATE_OK:
@@ -201,7 +208,10 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
}
/* cleanup */
- auth_end(data);
+ if (do_auth_end)
+ {
+ auth_end(data);
+ }
g_free(slist);
}
diff --git a/sesman/session.c b/sesman/session.c
index 8663fc83..aefcd258 100644
--- a/sesman/session.c
+++ b/sesman/session.c
@@ -456,6 +456,7 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
return 0;
}
+ auth_start_session(data, display);
pid = g_fork(); /* parent is fork from tcp accept,
child forks X and wm, then becomes scp */
@@ -498,7 +499,6 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
g_getpid());
}
#endif
- auth_start_session(data, display);
window_manager_pid = g_fork(); /* parent becomes X,
child forks wm, and waits, todo */
if (window_manager_pid == -1)
@@ -787,8 +787,6 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
g_waitpid(window_manager_pid);
log_message(LOG_LEVEL_ALWAYS, "window manager (pid %d) did "
"exit, cleaning up session", window_manager_pid);
- auth_stop_session(data);
- auth_end(data);
g_sigterm(display_pid);
g_sigterm(chansrv_pid);
g_deinit();
@@ -918,6 +916,8 @@ session_kill(int pid)
if (tmp->item->pid == pid)
{
+ auth_stop_session(tmp->item->data);
+ auth_end(tmp->item->data);
/* deleting the session */
log_message(LOG_LEVEL_INFO, "++ terminated session: username %s, display :%d.0, session_pid %d, ip %s", tmp->item->name, tmp->item->display, tmp->item->pid, tmp->item->client_ip);
g_free(tmp->item);