bool AuthorizationManager::pam_checkPW(QString user, QString pass){ //Convert the inputs to C character arrays for use in PAM QByteArray tmp = user.toUtf8(); char* cUser = tmp.data(); QByteArray tmp2 = pass.toUtf8(); char* cPassword = tmp2.data(); //initialize variables bool result = false; int ret; //Initialize PAM ret = pam_start( user=="root" ? "system": "login", cUser, &pamc, &pamh); if( ret == PAM_SUCCESS ){ //Place the user-supplied password into the structure ret = pam_set_item(pamh, PAM_AUTHTOK, cPassword); //Set the TTY //ret = pam_set_item(pamh, PAM_TTY, "pcdm-terminal"); //Authenticate with PAM ret = pam_authenticate(pamh,0); if( ret == PAM_SUCCESS ){ //Check for valid, unexpired account and verify access restrictions ret = pam_acct_mgmt(pamh,0); if( ret == PAM_SUCCESS ){ result = true; } }else{ pam_logFailure(ret); } } //return verification result return result; }
bool XProcess::pam_checkPW(){ //Requires internal "xuser" and "xpwd" variables to be set //Convert the inputs to C character arrays for use in PAM QByteArray tmp = xuser.toUtf8(); char* cUser = tmp.data(); QByteArray tmp2 = xpwd.toUtf8(); char* cPassword = tmp2.data(); //initialize variables bool result = FALSE; int ret; //Initialize PAM ret = pam_start("login", cUser, &pamc, &pamh); if( ret == PAM_SUCCESS ){ pam_started = TRUE; //flag that pam is started //Place the user-supplied password into the structure ret = pam_set_item(pamh, PAM_AUTHTOK, cPassword); //Set the TTY //ret = pam_set_item(pamh, PAM_TTY, "pcdm-terminal"); //Authenticate with PAM ret = pam_authenticate(pamh,0); if( ret == PAM_SUCCESS ){ //Check for valid, unexpired account and verify access restrictions ret = pam_acct_mgmt(pamh,0); if( ret == PAM_SUCCESS ){ result = TRUE; } }else{ pam_logFailure(ret); } } //return verification result return result; }
bool XProcess::pam_stopSession(){ //This should only be run if pam_startSession was successful int ret = pam_close_session(pamh,0); bool ok = FALSE; if(ret == PAM_SUCCESS){ ok = TRUE; } else{ pam_logFailure(ret); } return ok; }
bool XProcess::pam_startSession(){ //This should only be run if pam_checkPW was successful int ret = pam_open_session(pamh,0); bool ok = false; if(ret == PAM_SUCCESS){ ok = true; } else{ pam_logFailure(ret); } return ok; }