version 1.9, 2009/12/15 10:52:33
|
version 1.9.4.1, 2013/07/20 18:32:37
|
|
|
| |
typedef struct CimserveraResponseStruct | typedef struct CimserveraResponseStruct |
{ | { |
/* '0' means authentication successful. '-1' means authentication failed. */ |
/* '-1' means authentication failed / something went wrong in the |
|
communication |
|
'>=0' means PAM return code. */ |
int status; | int status; |
} | } |
CimserveraResponse; | CimserveraResponse; |
|
|
break; | break; |
} | } |
| |
/* Check status. */ |
/* Store status. */ |
| |
if (response.status != 0) |
status = response.status; |
{ |
|
status = -1; |
|
} |
|
} | } |
while (0); | while (0); |
| |
|
|
PAMData data; | PAMData data; |
struct pam_conv pconv; | struct pam_conv pconv; |
pam_handle_t* handle; | pam_handle_t* handle; |
|
int pam_rc; |
| |
data.password = password; | data.password = password; |
pconv.conv = PAMAuthenticateCallback; | pconv.conv = PAMAuthenticateCallback; |
pconv.appdata_ptr = &data; | pconv.appdata_ptr = &data; |
| |
|
/* commented out statement in place to allow triggering a Http 500 Error */ |
|
/* intentionally for testing purposes */ |
|
/* return PAM_SERVICE_ERR; */ |
| |
if (pam_start(PAM_CONFIG_FILE, username, &pconv, &handle) != PAM_SUCCESS) |
pam_rc = pam_start(PAM_CONFIG_FILE, username, &pconv, &handle); |
return -1; |
|
| |
if (pam_authenticate(handle, 0) != PAM_SUCCESS) |
if (pam_rc != PAM_SUCCESS) |
{ | { |
pam_end(handle, 0); |
return pam_rc; |
return -1; |
|
} | } |
| |
if (pam_acct_mgmt(handle, 0) != PAM_SUCCESS) |
pam_rc = pam_authenticate(handle, 0); |
|
if (pam_rc != PAM_SUCCESS) |
{ | { |
pam_end(handle, 0); | pam_end(handle, 0); |
return -1; |
return pam_rc; |
} | } |
| |
pam_end(handle, 0); |
pam_rc = pam_acct_mgmt(handle, 0); |
| |
return 0; |
pam_end(handle, 0); |
|
return pam_rc; |
} | } |
| |
/* | /* |
|
|
PAMData data; | PAMData data; |
struct pam_conv pconv; | struct pam_conv pconv; |
pam_handle_t* phandle; | pam_handle_t* phandle; |
|
int pam_rc; |
| |
pconv.conv = PAMValidateUserCallback; | pconv.conv = PAMValidateUserCallback; |
pconv.appdata_ptr = &data; | pconv.appdata_ptr = &data; |
| |
if (pam_start(PAM_CONFIG_FILE, username, &pconv, &phandle) != PAM_SUCCESS) |
pam_rc = pam_start(PAM_CONFIG_FILE, username, &pconv, &phandle); |
return -1; |
if (pam_rc != PAM_SUCCESS) |
|
|
if (pam_acct_mgmt(phandle, 0) != PAM_SUCCESS) |
|
{ | { |
pam_end(phandle, 0); |
return pam_rc; |
return -1; |
|
} | } |
| |
pam_end(phandle, 0); |
pam_rc = pam_acct_mgmt(phandle, 0); |
| |
return 0; |
pam_end(phandle, 0); |
|
return pam_rc; |
} | } |
| |
/* | /* |