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.
diff --git a/src/passwd/getspnam_r.c b/src/passwd/getspnam_r.c
index 15f8c87..9233952 100644
--- a/src/passwd/getspnam_r.c
+++ b/src/passwd/getspnam_r.c
@@ -98,7 +98,7 @@
 
 	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;
 		}