Closed alejandro-colomar closed 1 month ago
While at it, I found and fixed a file-descriptor leak too, and a free(3) of an invalid pointer.
Revisions:
Thanks! =)
While at it, I found and fixed a file-descriptor leak too, and a free(3) of an invalid pointer.
Revisions:
v2
- The only fdopen(3) mode that makes sense with mkstemp(3) is `"w"`. ``` $ git range-diff shadow/master gh/goto2 goto2 1: f753dbe8 = 1: f753dbe8 src/useradd.c: set_defaults(): Fix order of clean-ups 2: 29e95616 = 2: 29e95616 src/useradd.c: set_defaults(): Rename goto label 3: 555b8b07 = 3: 555b8b07 src/useradd.c: set_defaults(): Do not free(3) the result of asprintf(3) if it failed 4: 29471eec = 4: 29471eec src/useradd.c: De-duplicate code 5: 4d125f77 ! 5: 59bb454a src/useradd.c: Add fmkstemp() to fix file-descriptor leak @@ src/useradd.c: static void create_home (void); static void create_mail (void); static void check_uid_range(int rflg, uid_t user_id); -+static FILE *fmkstemp(char *restrict template, const char *restrict mode); ++static FILE *fmkstemp(char *template); + + /* @@ src/useradd.c: static int set_defaults (void) - } - - ofp = fdopen (ofd, "w"); -+ ofp = fmkstemp(new_file, "w"); ++ ofp = fmkstemp(new_file); if (NULL == ofp) { fprintf (stderr, _("%s: cannot open new defaults file\n"), @@ src/useradd.c: int main (int argc, char **argv) + +static FILE * -+fmkstemp(char *restrict template, const char *restrict mode) ++fmkstemp(char *template) +{ + int fd; + FILE *fp; @@ src/useradd.c: int main (int argc, char **argv) + if (fd == -1) + return NULL; + -+ fp = fdopen(fd, mode); ++ fp = fdopen(fd, "w"); + if (fp == NULL) { + close(fd); + unlink(template); 6: 2a44857f = 6: 29aa3459 src/useradd.c: set_defaults(): Fix FILE* leak ```