diff options
author | jsorg71 <jsorg71> | 2005-07-07 03:08:03 +0000 |
---|---|---|
committer | jsorg71 <jsorg71> | 2005-07-07 03:08:03 +0000 |
commit | ef1be2c6d3251139a50e1cf5c5e812741471b34a (patch) | |
tree | 0e6b17035fd98cec3e15a2b8ebf54a18bcb58c1b /sesman/verify_user_pam_userpass.c | |
parent | c2ff24010a345442a9d6f96274a22f454bfa3918 (diff) | |
download | xrdp-proprietary-ef1be2c6d3251139a50e1cf5c5e812741471b34a.tar.gz xrdp-proprietary-ef1be2c6d3251139a50e1cf5c5e812741471b34a.zip |
pam changes
Diffstat (limited to 'sesman/verify_user_pam_userpass.c')
-rw-r--r-- | sesman/verify_user_pam_userpass.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/sesman/verify_user_pam_userpass.c b/sesman/verify_user_pam_userpass.c new file mode 100644 index 00000000..df097823 --- /dev/null +++ b/sesman/verify_user_pam_userpass.c @@ -0,0 +1,70 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + xrdp: A Remote Desktop Protocol server. + Copyright (C) Jay Sorg 2005 + + authenticate user + +*/ + +#include "arch.h" +#include "os_calls.h" + +#include <security/pam_userpass.h> + +#define SERVICE "xrdp" + +/******************************************************************************/ +/* returns boolean */ +int DEFAULT_CC +auth_userpass(char* user, char* pass) +{ + pam_handle_t* pamh; + pam_userpass_t userpass; + struct pam_conv conv = {pam_userpass_conv, &userpass}; + const void* template1; + int status; + + userpass.user = user; + userpass.pass = pass; + if (pam_start(SERVICE, user, &conv, &pamh) != PAM_SUCCESS) + { + return 0; + } + status = pam_authenticate(pamh, 0); + if (status != PAM_SUCCESS) + { + pam_end(pamh, status); + return 0; + } + status = pam_acct_mgmt(pamh, 0); + if (status != PAM_SUCCESS) + { + pam_end(pamh, status); + return 0; + } + status = pam_get_item(pamh, PAM_USER, &template1); + if (status != PAM_SUCCESS) + { + pam_end(pamh, status); + return 0; + } + if (pam_end(pamh, PAM_SUCCESS) != PAM_SUCCESS) + { + return 0; + } + return 1; +} |