diff --git a/sesman/libsesman/sesman_auth.h b/sesman/libsesman/sesman_auth.h index 70aeae0e..f7a679cc 100644 --- a/sesman/libsesman/sesman_auth.h +++ b/sesman/libsesman/sesman_auth.h @@ -64,14 +64,14 @@ auth_uds(const char *user, enum scp_login_status *errorcode); * * @brief Starts a session * @param auth_info Auth handle created by auth_userpass - * @param display_num Display number + * @param display Display name * @return 0 on success, 1 on failure * * The resources allocated when the session is started are de-allocated * by auth_end() - there is no separate way to do this. */ int -auth_start_session(struct auth_info *auth_info, int display_num); +auth_start_session(struct auth_info *auth_info, const char *display); /** * diff --git a/sesman/libsesman/verify_user.c b/sesman/libsesman/verify_user.c index 8251e634..420ce3f3 100644 --- a/sesman/libsesman/verify_user.c +++ b/sesman/libsesman/verify_user.c @@ -175,7 +175,7 @@ auth_uds(const char *user, enum scp_login_status *errorcode) /******************************************************************************/ /* returns error */ int -auth_start_session(struct auth_info *auth_info, int display_num) +auth_start_session(struct auth_info *auth_info, const char *display) { return 0; } diff --git a/sesman/libsesman/verify_user_bsd.c b/sesman/libsesman/verify_user_bsd.c index 06621e66..d2605fc1 100644 --- a/sesman/libsesman/verify_user_bsd.c +++ b/sesman/libsesman/verify_user_bsd.c @@ -120,7 +120,7 @@ auth_uds(const char *user, enum scp_login_status *errorcode) /******************************************************************************/ /* returns error */ int -auth_start_session(struct auth_info *auth_info, int display_num) +auth_start_session(struct auth_info *auth_info, const char *display) { return 0; } diff --git a/sesman/libsesman/verify_user_kerberos.c b/sesman/libsesman/verify_user_kerberos.c index c2bde414..e822d72d 100644 --- a/sesman/libsesman/verify_user_kerberos.c +++ b/sesman/libsesman/verify_user_kerberos.c @@ -224,7 +224,7 @@ auth_uds(const char *user, enum scp_login_status *errorcode) /******************************************************************************/ /* returns error */ int -auth_start_session(struct auth_info *auth_info, int display_num) +auth_start_session(struct auth_info *auth_info, const char *display) { return 0; } diff --git a/sesman/libsesman/verify_user_pam.c b/sesman/libsesman/verify_user_pam.c index d94dc0d2..3926415d 100644 --- a/sesman/libsesman/verify_user_pam.c +++ b/sesman/libsesman/verify_user_pam.c @@ -398,17 +398,15 @@ auth_uds(const char *user, enum scp_login_status *errorcode) /* returns error */ static int -auth_start_session_private(struct auth_info *auth_info, int display_num) +auth_start_session_private(struct auth_info *auth_info, const char *display) { int error; - char display[256]; - g_sprintf(display, ":%d", display_num); error = pam_set_item(auth_info->ph, PAM_TTY, display); if (error != PAM_SUCCESS) { - LOG(LOG_LEVEL_ERROR, "pam_set_item failed: %s", + LOG(LOG_LEVEL_ERROR, "pam_set_item(PAM_TTY) failed: %s", pam_strerror(auth_info->ph, error)); return 1; } @@ -444,9 +442,9 @@ auth_start_session_private(struct auth_info *auth_info, int display_num) * routine fails */ int -auth_start_session(struct auth_info *auth_info, int display_num) +auth_start_session(struct auth_info *auth_info, const char *display) { - int result = auth_start_session_private(auth_info, display_num); + int result = auth_start_session_private(auth_info, display); if (result != 0) { LOG(LOG_LEVEL_ERROR, diff --git a/sesman/libsesman/verify_user_pam_userpass.c b/sesman/libsesman/verify_user_pam_userpass.c index 411b0243..a63b6bd1 100644 --- a/sesman/libsesman/verify_user_pam_userpass.c +++ b/sesman/libsesman/verify_user_pam_userpass.c @@ -207,17 +207,15 @@ auth_uds(const char *user, enum scp_login_status *errorcode) /* returns error */ static int -auth_start_session_private(struct auth_info *auth_info, int display_num) +auth_start_session_private(struct auth_info *auth_info, const char *display) { int error; - char display[256]; - g_sprintf(display, ":%d", display_num); error = pam_set_item(auth_info->ph, PAM_TTY, display); if (error != PAM_SUCCESS) { - LOG(LOG_LEVEL_ERROR, "pam_set_item failed: %s", + LOG(LOG_LEVEL_ERROR, "pam_set_item(PAM_TTY) failed: %s", pam_strerror(auth_info->ph, error)); return 1; } @@ -253,9 +251,9 @@ auth_start_session_private(struct auth_info *auth_info, int display_num) * routine fails */ int -auth_start_session(struct auth_info *auth_info, int display_num) +auth_start_session(struct auth_info *auth_info, const char *display) { - int result = auth_start_session_private(auth_info, display_num); + int result = auth_start_session_private(auth_info, display); if (result != 0) { LOG(LOG_LEVEL_ERROR, diff --git a/sesman/sesexec/session.c b/sesman/sesexec/session.c index b51ba5a4..899faac4 100644 --- a/sesman/sesexec/session.c +++ b/sesman/sesexec/session.c @@ -694,6 +694,7 @@ session_start_wrapped(struct login_info *login_info, int display_pid; int window_manager_pid; enum scp_screate_status status = E_SCP_SCREATE_GENERAL_ERROR; + char displaystr[32]; /* Set the secondary groups before starting the session to prevent * problems on PAM-based systems (see Linux pam_setcred(3)). @@ -708,7 +709,8 @@ session_start_wrapped(struct login_info *login_info, } #endif - if (auth_start_session(login_info->auth_info, s->display) != 0) + snprintf(displaystr, sizeof(displaystr), "%d", s->display); + if (auth_start_session(login_info->auth_info, displaystr) != 0) { // Errors are logged by the auth module, as they are // specific to that module diff --git a/sesman/tools/authtest.c b/sesman/tools/authtest.c index c33ba80d..55790f2f 100644 --- a/sesman/tools/authtest.c +++ b/sesman/tools/authtest.c @@ -304,9 +304,9 @@ main(int argc, char **argv) rv = (int)errorcode; if (auth_info && rv == 0 && amp.command != NULL) { - int display = 10; + const char *display = "xrdp-test10"; rv = auth_start_session(auth_info, display); - LOG(LOG_LEVEL_INFO, "auth_start_session(,%d) returned %d", + LOG(LOG_LEVEL_INFO, "auth_start_session(,%s) returned %d", display, rv); if (rv == 0) {