diff options
| author | Jay Sorg <jay.sorg@gmail.com> | 2017-03-20 18:59:44 -0700 | 
|---|---|---|
| committer | jsorg71 <jay.sorg@gmail.com> | 2017-03-21 21:56:28 -0700 | 
| commit | 4b8a33e087ee9cf5556b40b717cd7e8ff243b3c3 (patch) | |
| tree | 939bf7325777d0acb5b57e64cf41696ea65a4621 | |
| parent | 43899b7e0c30cde282ef72f6431029c04c8ab242 (diff) | |
| download | xrdp-proprietary-4b8a33e087ee9cf5556b40b717cd7e8ff243b3c3.tar.gz xrdp-proprietary-4b8a33e087ee9cf5556b40b717cd7e8ff243b3c3.zip | |
sesman: move auth/pam calls to main process
| -rw-r--r-- | sesman/scp_v0.c | 9 | ||||
| -rw-r--r-- | sesman/scp_v1.c | 20 | ||||
| -rw-r--r-- | sesman/session.c | 6 | 
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); | 
