diff options
| -rw-r--r-- | support.c | 44 |
1 files changed, 20 insertions, 24 deletions
@@ -37,10 +37,22 @@ char tac_service[64]; char tac_protocol[64]; char tac_prompt[64]; +void _pam_log(int err, const char *format,...) { + char msg[256]; + va_list args; + + va_start(args, format); + vsnprintf(msg, sizeof(msg), format, args); + openlog("PAM-tacplus", LOG_PID, LOG_AUTH); + syslog(err, "%s", msg); + va_end(args); + closelog(); +} + /* - safe string copy, like strlcpy() really + safe string copy that aborts when destination buffer is too small */ -size_t xstrcpy(char *dst, const char *src, size_t dst_size) { +char *xstrcpy(char *dst, const char *src, size_t dst_size) { if (dst == NULL) _pam_log(LOG_ERR, "xstrcpy(): dst == NULL"); @@ -48,30 +60,14 @@ size_t xstrcpy(char *dst, const char *src, size_t dst_size) { _pam_log(LOG_ERR, "xstrcpy(): src == NULL"); if (!dst_size) - return 0; - - size_t s_len = strlen(src); + return NULL; - size_t n = s_len; - if (n >= dst_size) - n = dst_size - 1; + if (strlen(src) >= dst_size) { + _pam_log(LOG_ERR, "xstrcpy(): argument too long, aborting"); + abort(); + } - strncpy(dst, src, n); - dst[n] = 0; - - return n; -} - -void _pam_log(int err, const char *format,...) { - char msg[256]; - va_list args; - - va_start(args, format); - vsnprintf(msg, sizeof(msg), format, args); - openlog("PAM-tacplus", LOG_PID, LOG_AUTH); - syslog(err, "%s", msg); - va_end(args); - closelog(); + return strcpy(dst, src); } char *_pam_get_user(pam_handle_t *pamh) { |
