in tacacs-F4.0.4.28/pwlib.c [44:114]
static int pam_tacacs(int, const struct pam_message **, struct pam_response **,
void *);
#endif
/*
* Generic password verification routines for des, file and cleartext passwords
*/
static int etc_passwd_file_verify(char *, char *, struct authen_data *);
static int des_verify(char *, char *);
#if HAVE_PAM
static int pam_verify(char *, char *, struct authen_data *data);
#endif
static int passwd_file_verify(char *, char *, struct authen_data *, char *);
extern char *progname;
/* Adjust data->status depending on whether a user has expired or not */
void
set_expiration_status(char *exp_date, struct authen_data *data)
{
int expired;
/* if the status is anything except pass, there's no point proceeding */
if (data->status != TAC_PLUS_AUTHEN_STATUS_PASS) {
return;
}
/*
* Check the expiration date, if any. If NULL, this check will return
* PW_OK
*/
expired = check_expiration(exp_date);
switch (expired) {
case PW_OK:
if (debug & DEBUG_PASSWD_FLAG)
report(LOG_DEBUG, "Password has not expired %s",
exp_date ? exp_date : "<no expiry date set>");
data->status = TAC_PLUS_AUTHEN_STATUS_PASS;
break;
case PW_EXPIRING:
if (debug & DEBUG_PASSWD_FLAG)
report(LOG_DEBUG, "Password will expire soon %s",
exp_date ? exp_date : "<no expiry date set>");
if (data->server_msg)
free(data->server_msg);
data->server_msg = tac_strdup("Password will expire soon");
data->status = TAC_PLUS_AUTHEN_STATUS_PASS;
break;
case PW_EXPIRED:
if (debug & DEBUG_PASSWD_FLAG)
report(LOG_DEBUG, "Password has expired %s",
exp_date ? exp_date : "<no expiry date set>");
if (data->server_msg)
free(data->server_msg);
data->server_msg = tac_strdup("Password has expired");
data->status = TAC_PLUS_AUTHEN_STATUS_FAIL;
break;
default:
report(LOG_ERR, "%s: Bogus return value %d from check_expiration",
session.peer, expired);
data->status = TAC_PLUS_AUTHEN_STATUS_ERROR;
break;
}
return;
}