diff options
author | Piotr Pawel Stefaniak <pstef@FreeBSD.org> | 2020-06-20 06:20:00 +0000 |
---|---|---|
committer | Piotr Pawel Stefaniak <pstef@FreeBSD.org> | 2020-06-20 06:20:00 +0000 |
commit | 181546cc6f3a31193f3c424e0c0d322ebe7b3840 (patch) | |
tree | 6255203987fa18cc0961212b4159e8ee16c23c0f | |
parent | f1fc2d9573ad77a2ab54e0a2535ea1e1e8eb42b7 (diff) | |
download | pw-darwin-181546cc6f3a31193f3c424e0c0d322ebe7b3840.tar.gz pw-darwin-181546cc6f3a31193f3c424e0c0d322ebe7b3840.tar.zst pw-darwin-181546cc6f3a31193f3c424e0c0d322ebe7b3840.zip |
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
-rw-r--r-- | libutil/pw_util.c | 13 |
1 files 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 { |