Operating System - Linux
1753524 Members
4777 Online
108795 Solutions
New Discussion

PAM Error (Change password)

 
shijith_1
Occasional Contributor

PAM Error (Change password)

I wrote a sample program to test PAM functionality in HP Unix 11i. (basically pam_chauthtok).

It is prefectly working in most of the Unix flavours but not in HP UX 11i.

My program


#define DEBUG
#include
#include
#include
#include
#include
/*
* PAM call back function to read the password values
*/

extern int convert(int num_msg,struct pam_message **msg,struct
pam_response **resp,void *appdata_ptr)
{
// Initialize PAM response object and set password
struct pam_response *temp;
temp = (struct pam_response *)calloc(num_msg,sizeof(struct pam_response));
temp[0].resp_retcode = 0;
temp[0].resp = strdup((const char*)appdata_ptr);
*resp = temp;
return PAM_SUCCESS;
}
static struct pam_conv conv = {convert,NULL};
/*
* Function used to change the password of a user
*/
int changePasswd(char *user,char *pass)
{
pam_handle_t *pamh=NULL;
int retval;
struct pam_response *pp=NULL;
conv.appdata_ptr = pass;
// initialize PAM
retval = pam_start("fisclsnr", user, &conv, &pamh);
if (retval == PAM_SUCCESS)
{
// Change password (auth tocken)
retval = pam_chauthtok(pamh, PAM_SILENT);
}
if (retval != PAM_SUCCESS)
{
return -1;
}
// End PAM Session
if (pam_end(pamh,retval) != PAM_SUCCESS)
{
pamh = NULL;
return -1;
}
return 0;
}
int main()
{
int res = changePasswd("user","123");
printf( "Res = %d", res);
return 0;
}


If I am trying to change the password of a normal user it doesnot work.
(
retval = pam_chauthtok(pamh, PAM_SILENT);
retval is not 0. Error code is PAM_PERM_DENIED
}
But change password of root user works fine.
( int res = changePasswd("user","123");
value of res is 0 and password changed )


I add more debug meesages on "convert"
function. It shows that, if the username specified is not root, then an Old password request recieved at convert function. But if it is root ,then no Old password request.

In both case I am running the program as root. I could not understand why this happend? Anyone have any Idea ??? any solution to implement a custom "passwd" program??