diff options
Diffstat (limited to 'modules/pam_time/pam_time.c')
-rw-r--r-- | modules/pam_time/pam_time.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/modules/pam_time/pam_time.c b/modules/pam_time/pam_time.c index ccbd88bf..d4aee8a4 100644 --- a/modules/pam_time/pam_time.c +++ b/modules/pam_time/pam_time.c @@ -247,7 +247,7 @@ logic_member(const char *string, int *at) default: if (isalpha(c) || c == '*' || isdigit(c) || c == '_' - || c == '-' || c == '.' || c == '/') { + || c == '-' || c == '.' || c == '/' || c == ':') { token = 1; } else if (token) { --to; @@ -591,8 +591,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED, D(("PAM_TTY not set, probing stdin")); tty = ttyname(STDIN_FILENO); if (tty == NULL) { - pam_syslog(pamh, LOG_ERR, "couldn't get the tty name"); - return PAM_ABORT; + tty = ""; } if (pam_set_item(pamh, PAM_TTY, tty) != PAM_SUCCESS) { pam_syslog(pamh, LOG_ERR, "couldn't set tty name"); @@ -602,8 +601,12 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED, else tty = void_tty; - if (strncmp("/dev/",tty,5) == 0) { /* strip leading /dev/ */ - tty += 5; + if (tty[0] == '/') { /* full path */ + const char *t; + tty++; + if ((t = strchr(tty, '/')) != NULL) { + tty = t + 1; + } } /* good, now we have the service name, the user and the terminal name */ |