Added session management.
This commit is contained in:
parent
4c94f2daa0
commit
1f9394b9f8
1 changed files with 99 additions and 2 deletions
|
@ -136,10 +136,10 @@ int parse_opts(pam_url_opts* opts, int argc, const char** argv, int mode)
|
||||||
strcpy(opts->userfield, DEF_USER);
|
strcpy(opts->userfield, DEF_USER);
|
||||||
|
|
||||||
opts->passwdfield = calloc(1, strlen(DEF_PASSWD) + 1);
|
opts->passwdfield = calloc(1, strlen(DEF_PASSWD) + 1);
|
||||||
strcpy(opts->passwdfield, "passwd");
|
strcpy(opts->passwdfield, DEF_PASSWD);
|
||||||
|
|
||||||
opts->extrafield = calloc(1, strlen(DEF_EXTRA) + 1);
|
opts->extrafield = calloc(1, strlen(DEF_EXTRA) + 1);
|
||||||
strcpy(opts->extrafield, "&mode=login");
|
strcpy(opts->extrafield, DEF_EXTRA);
|
||||||
|
|
||||||
if( 0 == argc )
|
if( 0 == argc )
|
||||||
{
|
{
|
||||||
|
@ -464,16 +464,113 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const c
|
||||||
|
|
||||||
PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
|
PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
|
||||||
{
|
{
|
||||||
|
pam_url_opts opts;
|
||||||
|
int ret=0;
|
||||||
|
char* addextra = "&PAM_SM_SESSION=open\0";
|
||||||
|
char* tmp;
|
||||||
|
|
||||||
|
if ( PAM_SUCCESS != pam_get_item(pamh, PAM_USER, &opts.user) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Could not get user item from pam.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( PAM_SUCCESS != parse_opts(&opts, argc, argv, PAM_SM_SESSION) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Could not parse module options.");
|
||||||
|
}
|
||||||
|
|
||||||
|
opts.extrafield = realloc(opts.extrafield, strlen(opts.extrafield) + strlen(addextra) + 1);
|
||||||
|
tmp = calloc(1, strlen(opts.extrafield) );
|
||||||
|
sprintf(tmp, "%s", opts.extrafield );
|
||||||
|
sprintf(opts.extrafield, "%s%s", addextra, tmp);
|
||||||
|
free(tmp);
|
||||||
|
|
||||||
|
if( PAM_SUCCESS != fetch_url(opts) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Could not fetch URL.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( PAM_SUCCESS != check_psk(opts) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Pre Shared Key differs from ours.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( 0 == ret )
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
|
||||||
|
debug(pamh, "Session not registering. Failing.");
|
||||||
|
|
||||||
|
cleanup(opts);
|
||||||
|
|
||||||
return PAM_SESSION_ERR;
|
return PAM_SESSION_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
|
PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
|
||||||
{
|
{
|
||||||
|
pam_url_opts opts;
|
||||||
|
int ret=0;
|
||||||
|
char* addextra = "&PAM_SM_SESSION=close\0";
|
||||||
|
char* tmp;
|
||||||
|
|
||||||
|
if ( PAM_SUCCESS != pam_get_item(pamh, PAM_USER, &opts.user) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Could not get user item from pam.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( PAM_SUCCESS != parse_opts(&opts, argc, argv, PAM_SM_SESSION) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Could not parse module options.");
|
||||||
|
}
|
||||||
|
|
||||||
|
opts.extrafield = realloc(opts.extrafield, strlen(opts.extrafield) + strlen(addextra) + 1);
|
||||||
|
tmp = calloc(1, strlen(opts.extrafield) );
|
||||||
|
sprintf(tmp, "%s", opts.extrafield );
|
||||||
|
sprintf(opts.extrafield, "%s%s", addextra, tmp);
|
||||||
|
free(tmp);
|
||||||
|
|
||||||
|
if( PAM_SUCCESS != fetch_url(opts) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Could not fetch URL.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( PAM_SUCCESS != check_psk(opts) )
|
||||||
|
{
|
||||||
|
ret++;
|
||||||
|
debug(pamh, "Pre Shared Key differs from ours.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( 0 == ret )
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
|
||||||
|
debug(pamh, "Session not releasing. Failing.");
|
||||||
|
|
||||||
|
cleanup(opts);
|
||||||
|
|
||||||
return PAM_SESSION_ERR;
|
return PAM_SESSION_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv)
|
PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
char* oldp = NULL, newp1 = NULL, newp2 = NULL;
|
||||||
|
|
||||||
|
pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &oldp, "%s", " Enter OLD password: ");
|
||||||
|
pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &newp1, "%s"," Enter NEW password: ");
|
||||||
|
pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &newp2, "%s","Retype NEW password: ");
|
||||||
|
|
||||||
|
if( 0 == strcmp(newp1,newp2) )
|
||||||
|
{
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
return PAM_AUTHTOK_ERR;
|
return PAM_AUTHTOK_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue