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
This commit is contained in:
Piotr Pawel Stefaniak 2020-06-20 06:20:00 +00:00
parent 39c64ed6d1
commit 830efe5539

View File

@ -308,12 +308,13 @@ pw_edit(int notsetuid)
sigaction(SIGQUIT, &sa_quit, NULL); sigaction(SIGQUIT, &sa_quit, NULL);
sigprocmask(SIG_SETMASK, &oldsigset, NULL); sigprocmask(SIG_SETMASK, &oldsigset, NULL);
if (notsetuid) { if (notsetuid) {
(void)setgid(getgid()); if (setgid(getgid()) == -1)
(void)setuid(getuid()); err(1, "setgid");
if (setuid(getuid()) == -1)
err(1, "setuid");
} }
errno = 0;
execlp(editor, editor, tempname, (char *)NULL); execlp(editor, editor, tempname, (char *)NULL);
_exit(errno); err(1, "%s", editor);
default: default:
/* parent */ /* parent */
break; break;
@ -327,7 +328,9 @@ pw_edit(int notsetuid)
break; break;
} else if (WIFSTOPPED(pstat)) { } else if (WIFSTOPPED(pstat)) {
raise(WSTOPSIG(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; editpid = -1;
break; break;
} else { } else {