From 181546cc6f3a31193f3c424e0c0d322ebe7b3840 Mon Sep 17 00:00:00 2001 From: Piotr Pawel Stefaniak Date: Sat, 20 Jun 2020 06:20:00 +0000 Subject: Make vipw error message less cryptic Unable to find an editor, vipw would give this error: # env EDITOR=fnord vipw vipw: pw_edit(): No such file or directory vigr or crontab do better: # env EDITOR=fnord crontab -e crontab: no crontab for root - using an empty one crontab: fnord: No such file or directory crontab: "fnord" exited with status 1 After this change, vipw behaves more like vigr or crontab: # env EDITOR=fnord vipw vipw: fnord: No such file or directory vipw: "fnord" exited with status 1 Reviewed by: rpokala, emaste MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D25369 --- libutil/pw_util.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libutil/pw_util.c b/libutil/pw_util.c index 94db720..4d708c0 100644 --- a/libutil/pw_util.c +++ b/libutil/pw_util.c @@ -308,12 +308,13 @@ pw_edit(int notsetuid) sigaction(SIGQUIT, &sa_quit, NULL); sigprocmask(SIG_SETMASK, &oldsigset, NULL); if (notsetuid) { - (void)setgid(getgid()); - (void)setuid(getuid()); + if (setgid(getgid()) == -1) + err(1, "setgid"); + if (setuid(getuid()) == -1) + err(1, "setuid"); } - errno = 0; execlp(editor, editor, tempname, (char *)NULL); - _exit(errno); + err(1, "%s", editor); default: /* parent */ break; @@ -327,7 +328,9 @@ pw_edit(int notsetuid) break; } else if (WIFSTOPPED(pstat)) { raise(WSTOPSIG(pstat)); - } else if (WIFEXITED(pstat) && WEXITSTATUS(pstat) == 0) { + } else if (WIFEXITED(pstat)) { + if (WEXITSTATUS(pstat) != 0) + errx(1, "\"%s\" exited with status %d", editor, WEXITSTATUS(pstat)); editpid = -1; break; } else { -- cgit v1.2.3-56-ge451