diff options
Diffstat (limited to 'libutil')
-rw-r--r-- | libutil/pw_util.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libutil/pw_util.c b/libutil/pw_util.c index 90c9d72..6d372c0 100644 --- a/libutil/pw_util.c +++ b/libutil/pw_util.c @@ -481,13 +481,22 @@ pw_copy(int ffd, int tfd, const struct passwd *pw, struct passwd *old_pw) } /* is it the one we're looking for? */ + t = *q; *q = '\0'; + fpw = pw_scan(r, PWSCAN_MASTER); + + /* + * fpw is either the struct password for the current line, + * or NULL if the line is malformed. + */ + *q = t; - if (strcmp(fpw->pw_name, pw->pw_name) != 0) { + if (fpw == NULL || strcmp(fpw->pw_name, pw->pw_name) != 0) { /* nope */ - free(fpw); + if (fpw != NULL) + free(fpw); if (write(tfd, p, q - p + 1) != q - p + 1) goto err; ++q; |