lib/port.c: getportent(): Make sure there are at least 2 ':' in the line

Otherwise, the line is invalidly formatted, and we ignore it.

Closes: <https://github.com/shadow-maint/shadow/issues/1036>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
Alejandro Colomar
2024-07-02 14:43:26 +02:00
committed by Serge Hallyn
parent f1f82c2105
commit c3f97e251e

View File

@@ -147,17 +147,15 @@ next:
* TTY devices.
*/
if (strchr(buf, ':') == NULL)
goto next;
port.pt_names = ttys;
for (cp = buf, j = 0; j < PORT_TTY; j++) {
port.pt_names[j] = cp;
cp = strpbrk(cp, ":,");
if (cp == NULL)
goto next; /* line format error */
if (':' == *cp) { /* end of tty name list */
if (':' == *cp) /* end of tty name list */
break;
}
if (',' == *cp) /* end of current tty name */
stpcpy(cp++, "");
}
@@ -171,6 +169,9 @@ next:
* The last entry in the list is a NULL pointer.
*/
if (strchr(cp, ':') == NULL)
goto next;
if (':' != *cp) {
port.pt_users = users;
port.pt_users[0] = cp;