Bug 1698015
| Summary: | glibc: Calling getpwent after endpwent should not crash? | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Paulo Andrade <pandrade> | |
| Component: | glibc | Assignee: | DJ Delorie <dj> | |
| Status: | CLOSED ERRATA | QA Contact: | qe-baseos-tools-bugs | |
| Severity: | medium | Docs Contact: | ||
| Priority: | medium | |||
| Version: | 7.6 | CC: | ashankar, bgollahe, codonell, dj, fweimer, mnewsome, pfrankli, skolosov | |
| Target Milestone: | rc | Keywords: | Patch | |
| Target Release: | --- | |||
| Hardware: | All | |||
| OS: | Linux | |||
| Whiteboard: | ||||
| Fixed In Version: | glibc-2.17-302.el7 | Doc Type: | No Doc Update | |
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 1747502 (view as bug list) | Environment: | ||
| Last Closed: | 2020-03-31 19:08:32 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1710258 | |||
Confirmed. This is distinct from bug 1213603. Verified with the reproducer Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2020:0989 |
To setup the problem, edit /etc/nsswith.conf and add 'db' first, for example -passwd files sss +passwd db files sss Then, this example program will crash if setpwent is not called: """ #include <stdio.h> #include <sys/types.h> #include <pwd.h> #include <grp.h> void main() { int usercnt; int grpcnt; struct passwd *p; // setpwent(); not absolutely required but good practice p = getpwent(); for(usercnt = 0; p; p = getpwent(), usercnt++); endpwent(); // setpwent(); if uncomment it the code does not segfault p = getpwent(); for(usercnt = 0; p; p = getpwent(), usercnt++) { printf("%s (%d)\tHOME %s\tSHELL %s\n", p->pw_name, p->pw_uid, p->pw_dir, p->pw_shell); } setpwent(); } """ If not using passwd.db apparently the default behaviour is to have endpwent to implicitly rewind, so, setpwent is somewhat useless other than when using a database. Is the crash (due to reading past the end of the stream) expected?