summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Pawel Stefaniak <pstef@FreeBSD.org>2020-06-20 06:20:00 +0000
committerPiotr Pawel Stefaniak <pstef@FreeBSD.org>2020-06-20 06:20:00 +0000
commit181546cc6f3a31193f3c424e0c0d322ebe7b3840 (patch)
tree6255203987fa18cc0961212b4159e8ee16c23c0f
parentf1fc2d9573ad77a2ab54e0a2535ea1e1e8eb42b7 (diff)
downloadpw-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.c13
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 {