Flawfinder version 2.0.10, (C) 2001-2019 David A. Wheeler. Number of rules (primarily dangerous function names) in C/C++ ruleset: 223 Examining data/libpam-tacplus-1.3.8/support.h Examining data/libpam-tacplus-1.3.8/pam_tacplus.c Examining data/libpam-tacplus-1.3.8/support.c Examining data/libpam-tacplus-1.3.8/pam_tacplus.h Examining data/libpam-tacplus-1.3.8/libtac/lib/author_s.c Examining data/libpam-tacplus-1.3.8/libtac/lib/messages.c Examining data/libpam-tacplus-1.3.8/libtac/lib/version.c Examining data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c Examining data/libpam-tacplus-1.3.8/libtac/lib/read_wait.c Examining data/libpam-tacplus-1.3.8/libtac/lib/xalloc.h Examining data/libpam-tacplus-1.3.8/libtac/lib/md5.c Examining data/libpam-tacplus-1.3.8/libtac/lib/crypt.c Examining data/libpam-tacplus-1.3.8/libtac/lib/xalloc.c Examining data/libpam-tacplus-1.3.8/libtac/lib/author_r.c Examining data/libpam-tacplus-1.3.8/libtac/lib/magic.c Examining data/libpam-tacplus-1.3.8/libtac/lib/acct_r.c Examining data/libpam-tacplus-1.3.8/libtac/lib/hdr_check.c Examining data/libpam-tacplus-1.3.8/libtac/lib/authen_r.c Examining data/libpam-tacplus-1.3.8/libtac/lib/magic.h Examining data/libpam-tacplus-1.3.8/libtac/lib/acct_s.c Examining data/libpam-tacplus-1.3.8/libtac/lib/messages.h Examining data/libpam-tacplus-1.3.8/libtac/lib/connect.c Examining data/libpam-tacplus-1.3.8/libtac/lib/md5.h Examining data/libpam-tacplus-1.3.8/libtac/lib/cont_s.c Examining data/libpam-tacplus-1.3.8/libtac/lib/header.c Examining data/libpam-tacplus-1.3.8/libtac/lib/attrib.c Examining data/libpam-tacplus-1.3.8/libtac/include/cdefs.h Examining data/libpam-tacplus-1.3.8/libtac/include/libtac.h Examining data/libpam-tacplus-1.3.8/libtac/include/tacplus.h FINAL RESULTS: data/libpam-tacplus-1.3.8/libtac/include/libtac.h:48:21: [4] (format) syslog: If syslog's format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant format string for syslog. #define TACDEBUG(x) syslog x; data/libpam-tacplus-1.3.8/libtac/include/libtac.h:54:22: [4] (format) syslog: If syslog's format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant format string for syslog. #define TACSYSLOG(x) syslog x; data/libpam-tacplus-1.3.8/libtac/lib/xalloc.c:76:12: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). return strcpy(dst, src); data/libpam-tacplus-1.3.8/support.c:45:5: [4] (format) vsnprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. vsnprintf(msg, sizeof(msg), format, args); data/libpam-tacplus-1.3.8/support.c:224:17: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(server_buf, *argv + 7); data/libpam-tacplus-1.3.8/libtac/lib/magic.c:67:5: [3] (random) srandom: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srandom(seed); data/libpam-tacplus-1.3.8/libtac/lib/magic.c:83:31: [3] (random) random: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. return (u_int32_t)random(); data/libpam-tacplus-1.3.8/libtac/lib/magic.c:87:23: [3] (random) random: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. return (u_int32_t)random(); data/libpam-tacplus-1.3.8/libtac/include/libtac.h:117:8: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. extern char tac_login[64]; data/libpam-tacplus-1.3.8/libtac/lib/acct_r.c:127:9: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy((u_char *) tb+TAC_ACCT_REPLY_FIXED_FIELDS_SIZE, msg, tb->msg_len); data/libpam-tacplus-1.3.8/libtac/lib/acct_s.c:123:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(&tb, pkt, TAC_ACCT_REQ_FIXED_FIELDS_SIZE); data/libpam-tacplus-1.3.8/libtac/lib/acct_s.c:136:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(data, pkt + pktl, len); data/libpam-tacplus-1.3.8/libtac/lib/attrib.c:71:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(name, a->attr, l1); /* paste name */ data/libpam-tacplus-1.3.8/libtac/lib/attrib.c:74:9: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(value, (a->attr+l1+1), l2); /* paste value */ data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:46:5: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char digest[MD5_LEN]; data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:70:9: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(&mdp[1], pass, strlen(pass)); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:71:9: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(mdp + strlen(pass) + 1, chal, chal_len); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:78:9: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(&token[1], chal, chal_len); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:79:9: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(token + chal_len + 1, digest, MD5_LEN); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:134:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(user, pkt+pkt_len, user_len); /* user */ data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:136:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(tty, pkt+pkt_len, port_len); /* tty */ data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:138:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(r_addr, pkt+pkt_len, r_addr_len); /* rem addr */ data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:141:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(token, pkt+pkt_len, token_len); /* password */ data/libpam-tacplus-1.3.8/libtac/lib/author_r.c:144:9: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy((u_char *) tb+TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE data/libpam-tacplus-1.3.8/libtac/lib/author_r.c:154:9: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy((u_char *) tb + TAC_AUTHOR_REPLY_FIXED_FIELDS_SIZE data/libpam-tacplus-1.3.8/libtac/lib/author_r.c:185:21: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char buff[256]; data/libpam-tacplus-1.3.8/libtac/lib/author_r.c:190:21: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(argp, buff, (int)*pktp); data/libpam-tacplus-1.3.8/libtac/lib/author_s.c:109:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(&tb, pkt, TAC_AUTHOR_REQ_FIXED_FIELDS_SIZE); data/libpam-tacplus-1.3.8/libtac/lib/author_s.c:122:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(data, pkt + pktl, len); data/libpam-tacplus-1.3.8/libtac/lib/connect.c:179:12: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. static char server_address[INET6_ADDRSTRLEN+16]; data/libpam-tacplus-1.3.8/libtac/lib/connect.c:199:13: [2] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). Risk is low because the source is a constant string. strcpy(server_address, "Unknown AF"); data/libpam-tacplus-1.3.8/libtac/lib/cont_s.c:74:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(&tb, pkt+pkt_len, TAC_AUTHEN_CONT_FIXED_FIELDS_SIZE); /* packet body beginning */ data/libpam-tacplus-1.3.8/libtac/lib/cont_s.c:76:5: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(pass, pkt+pkt_len, pass_len); /* password */ data/libpam-tacplus-1.3.8/libtac/lib/crypt.c:50:9: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(&hdr->session_id, buf, sizeof(session_id)); data/libpam-tacplus-1.3.8/libtac/lib/crypt.c:52:9: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(tac_secret, buf+bp, strlen(tac_secret)); data/libpam-tacplus-1.3.8/libtac/lib/crypt.c:61:13: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(pad+((i-1)*MD5_LEN), buf+bp, MD5_LEN); data/libpam-tacplus-1.3.8/libtac/lib/header.c:40:1: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char tac_login[64]; /* default is PAP */ data/libpam-tacplus-1.3.8/libtac/lib/magic.c:60:15: [2] (misc) open: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). rfd = open("/dev/urandom", O_RDONLY); data/libpam-tacplus-1.3.8/libtac/lib/md5.c:27:17: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. static unsigned char PADDING[64] = { data/libpam-tacplus-1.3.8/libtac/lib/md5.c:164:5: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy(hash, mdContext->digest, 16); data/libpam-tacplus-1.3.8/libtac/lib/md5.h:32:14: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. unsigned char in[64]; /* input buffer */ data/libpam-tacplus-1.3.8/libtac/lib/md5.h:33:14: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. unsigned char digest[16]; /* actual digest after MD5Final call */ data/libpam-tacplus-1.3.8/pam_tacplus.c:55:5: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char buf[64]; data/libpam-tacplus-1.3.8/pam_tacplus.c:61:5: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(buf, "%lu", (unsigned long)time(NULL)); data/libpam-tacplus-1.3.8/pam_tacplus.c:68:5: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(buf, "%hu", task_id); data/libpam-tacplus-1.3.8/pam_tacplus.c:516:9: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char attribute[attr->attr_len]; data/libpam-tacplus-1.3.8/pam_tacplus.c:517:9: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char value[attr->attr_len]; data/libpam-tacplus-1.3.8/pam_tacplus.c:524:13: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(attr->attr, attribute, attr->attr_len-strlen(sep)); data/libpam-tacplus-1.3.8/pam_tacplus.c:526:13: [2] (buffer) bcopy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. bcopy(sep, value, strlen(sep)); data/libpam-tacplus-1.3.8/support.c:36:1: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char tac_service[64]; data/libpam-tacplus-1.3.8/support.c:37:1: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char tac_protocol[64]; data/libpam-tacplus-1.3.8/support.c:38:1: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char tac_prompt[64]; data/libpam-tacplus-1.3.8/support.c:41:5: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char msg[256]; data/libpam-tacplus-1.3.8/support.c:214:17: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char *port, server_buf[256]; data/libpam-tacplus-1.3.8/support.c:260:27: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). tac_timeout = atoi(*argv + 8); data/libpam-tacplus-1.3.8/support.h:37:8: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. extern char tac_service[64]; data/libpam-tacplus-1.3.8/support.h:38:8: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. extern char tac_protocol[64]; data/libpam-tacplus-1.3.8/support.h:39:8: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. extern char tac_prompt[64]; data/libpam-tacplus-1.3.8/libtac/lib/acct_r.c:54:7: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). r=read(fd, &th, TAC_PLUS_HDR_SIZE); data/libpam-tacplus-1.3.8/libtac/lib/acct_r.c:90:7: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). r=read(fd, tb, len_from_header); data/libpam-tacplus-1.3.8/libtac/lib/acct_s.c:74:23: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). user_len=(u_char) strlen(user); data/libpam-tacplus-1.3.8/libtac/lib/acct_s.c:75:23: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). port_len=(u_char) strlen(tty); data/libpam-tacplus-1.3.8/libtac/lib/acct_s.c:76:25: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). r_addr_len=(u_char) strlen(r_addr); data/libpam-tacplus-1.3.8/libtac/lib/attrib.c:32:26: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). u_char l1 = (u_char) strlen(name); data/libpam-tacplus-1.3.8/libtac/lib/attrib.c:39:23: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). l2 = (u_char) strlen(value); data/libpam-tacplus-1.3.8/libtac/lib/authen_r.c:54:9: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). r = read(fd, &th, TAC_PLUS_HDR_SIZE); data/libpam-tacplus-1.3.8/libtac/lib/authen_r.c:83:9: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). r = read(fd, tb, len_from_header); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:66:20: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). chal_len = strlen(chal); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:67:36: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). mdp_len = sizeof(u_char) + strlen(pass) + chal_len; data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:70:31: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). memcpy(&mdp[1], pass, strlen(pass)); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:71:22: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). memcpy(mdp + strlen(pass) + 1, chal, chal_len); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:85:16: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). user_len = strlen(user); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:86:16: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). port_len = strlen(tty); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:87:18: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). r_addr_len = strlen(r_addr); data/libpam-tacplus-1.3.8/libtac/lib/authen_s.c:88:17: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). token_len = strlen(token); data/libpam-tacplus-1.3.8/libtac/lib/author_r.c:62:9: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). r = read(fd, &th, TAC_PLUS_HDR_SIZE); data/libpam-tacplus-1.3.8/libtac/lib/author_r.c:97:9: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). r = read(fd, tb, len_from_header); data/libpam-tacplus-1.3.8/libtac/lib/author_s.c:60:25: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). user_len = (u_char) strlen(user); data/libpam-tacplus-1.3.8/libtac/lib/author_s.c:61:25: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). port_len = (u_char) strlen(tty); data/libpam-tacplus-1.3.8/libtac/lib/author_s.c:62:27: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). r_addr_len = (u_char) strlen(r_addr); data/libpam-tacplus-1.3.8/libtac/lib/connect.c:186:39: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). snprintf(server_address + strlen(server_address), 14, ":%hu", data/libpam-tacplus-1.3.8/libtac/lib/connect.c:194:39: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). snprintf(server_address + strlen(server_address), 14, ":%hu", data/libpam-tacplus-1.3.8/libtac/lib/cont_s.c:50:16: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). pass_len = strlen(pass); data/libpam-tacplus-1.3.8/libtac/lib/crypt.c:39:41: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). bufsize = sizeof(hdr->session_id) + strlen(tac_secret) + sizeof(hdr->version) data/libpam-tacplus-1.3.8/libtac/lib/crypt.c:52:35: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). bcopy(tac_secret, buf+bp, strlen(tac_secret)); data/libpam-tacplus-1.3.8/libtac/lib/crypt.c:53:15: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). bp += strlen(tac_secret); data/libpam-tacplus-1.3.8/libtac/lib/magic.c:81:13: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if (read(rfd, &ret, sizeof(ret)) < sizeof(ret)) { data/libpam-tacplus-1.3.8/libtac/lib/xalloc.c:71:9: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). if (strlen(src) >= dst_size) { data/libpam-tacplus-1.3.8/pam_tacplus.c:376:18: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). bzero (pass, strlen (pass)); data/libpam-tacplus-1.3.8/pam_tacplus.c:524:57: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). bcopy(attr->attr, attribute, attr->attr_len-strlen(sep)); data/libpam-tacplus-1.3.8/pam_tacplus.c:525:38: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). attribute[attr->attr_len-strlen(sep)] = '\0'; data/libpam-tacplus-1.3.8/pam_tacplus.c:526:31: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). bcopy(sep, value, strlen(sep)); data/libpam-tacplus-1.3.8/pam_tacplus.c:527:19: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). value[strlen(sep)] = '\0'; data/libpam-tacplus-1.3.8/pam_tacplus.c:540:34: [1] (buffer) strncat: Easily used incorrectly (e.g., incorrectly computing the correct maximum size to add) [MS-banned] (CWE-120). Consider strcat_s, strlcat, snprintf, or automatically resizing strings. if (pam_putenv(pamh, strncat(attribute, value, strlen(value))) != PAM_SUCCESS) data/libpam-tacplus-1.3.8/pam_tacplus.c:540:60: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). if (pam_putenv(pamh, strncat(attribute, value, strlen(value))) != PAM_SUCCESS) data/libpam-tacplus-1.3.8/support.c:201:33: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). for (chr = 0; chr < strlen(tac_prompt); chr++) { data/libpam-tacplus-1.3.8/support.c:220:21: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). if (strlen(*argv + 7) >= sizeof(server_buf)) { ANALYSIS SUMMARY: Hits = 97 Lines analyzed = 3902 in approximately 0.19 seconds (20417 lines/second) Physical Source Lines of Code (SLOC) = 2325 Hits@level = [0] 36 [1] 39 [2] 50 [3] 3 [4] 5 [5] 0 Hits@level+ = [0+] 133 [1+] 97 [2+] 58 [3+] 8 [4+] 5 [5+] 0 Hits/KSLOC@level+ = [0+] 57.2043 [1+] 41.7204 [2+] 24.9462 [3+] 3.44086 [4+] 2.15054 [5+] 0 Dot directories skipped = 2 (--followdotdir overrides) Minimum risk level = 1 Not every hit is necessarily a security vulnerability. There may be other security vulnerabilities; review your code! See 'Secure Programming HOWTO' (https://dwheeler.com/secure-programs) for more information.