diff options
| author | jsorg71 <jsorg71> | 2005-08-14 02:22:11 +0000 |
|---|---|---|
| committer | jsorg71 <jsorg71> | 2005-08-14 02:22:11 +0000 |
| commit | c3ff1bcebbe08abbd64067209e388a91dbc402c3 (patch) | |
| tree | 36bccaec79eac0ec9d61600cfc057c0b60261102 /sesman/verify_user_pam.c | |
| parent | dda426982272f86c5054a5bddca727f4625936be (diff) | |
| download | xrdp-proprietary-c3ff1bcebbe08abbd64067209e388a91dbc402c3.tar.gz xrdp-proprietary-c3ff1bcebbe08abbd64067209e388a91dbc402c3.zip | |
changed pam session and env
Diffstat (limited to 'sesman/verify_user_pam.c')
| -rw-r--r-- | sesman/verify_user_pam.c | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/sesman/verify_user_pam.c b/sesman/verify_user_pam.c index e58576fe..40af68af 100644 --- a/sesman/verify_user_pam.c +++ b/sesman/verify_user_pam.c @@ -133,12 +133,20 @@ auth_userpass(char* user, char* pass) /******************************************************************************/ /* returns error */ int DEFAULT_CC -auth_start_session(long in_val) +auth_start_session(long in_val, int in_display) { struct t_auth_info* auth_info; int error; + char display[256]; + g_sprintf(display, ":%d", in_display); auth_info = (struct t_auth_info*)in_val; + error = pam_set_item(auth_info->ph, PAM_TTY, display); + if (error != PAM_SUCCESS) + { + g_printf("pam_set_item failed: %s\n\r", pam_strerror(auth_info->ph, error)); + return 1; + } error = pam_setcred(auth_info->ph, PAM_ESTABLISH_CRED); if (error != PAM_SUCCESS) { @@ -185,3 +193,40 @@ auth_end(long in_val) g_free(auth_info); return 0; } + +/******************************************************************************/ +/* returns error */ +/* set any pam env vars */ +int DEFAULT_CC +auth_set_env(long in_val) +{ + struct t_auth_info* auth_info; + char** pam_envlist; + char** pam_env; + char item[256]; + char value[256]; + int eq_pos; + + auth_info = (struct t_auth_info*)in_val; + if (auth_info != 0) + { + /* export PAM environment */ + pam_envlist = pam_getenvlist(auth_info->ph); + if (pam_envlist != NULL) + { + for (pam_env = pam_envlist; *pam_env != NULL; ++pam_env) + { + eq_pos = g_pos(*pam_env, "="); + if (eq_pos >= 0 && eq_pos < 250) + { + g_strncpy(item, *pam_env, eq_pos); + g_strncpy(value, (*pam_env) + eq_pos + 1, 255); + g_setenv(item, value, 1); + } + g_free(*pam_env); + } + g_free(pam_envlist); + } + } + return 0; +} |
