Преглед на файлове

fix erroneous return of partial username matches by getspnam[_r]

when using /etc/shadow (rather than tcb) as its backend, getspnam_r
matched any username starting with the caller-provided string rather
than requiring an exact match. in practice this seems to have affected
only systems where one valid username is a prefix for another valid
username, and where the longer username appears first in the shadow
file.

(cherry picked from commit ecb608192a48d3688e1a0a21027bfd968d3301a1)
Rich Felker преди 10 години
родител
ревизия
2604958894
променени са 1 файла, в които са добавени 1 реда и са изтрити 1 реда
  1. 1 1
      src/passwd/getspnam_r.c

+ 1 - 1
src/passwd/getspnam_r.c

@@ -98,7 +98,7 @@ int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct
 
 	pthread_cleanup_push(cleanup, f);
 	while (fgets(buf, size, f) && (k=strlen(buf))>0) {
-		if (skip || strncmp(name, buf, l)) {
+		if (skip || strncmp(name, buf, l) || buf[l]!=':') {
 			skip = buf[k-1] != '\n';
 			continue;
 		}