svn commit: r362430 - head/lib/libutil

Piotr Pawel Stefaniak pstef at FreeBSD.org
Sat Jun 20 06:20:01 UTC 2020


Author: pstef
Date: Sat Jun 20 06:20:00 2020
New Revision: 362430
URL: https://svnweb.freebsd.org/changeset/base/362430

Log:
  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

Modified:
  head/lib/libutil/pw_util.c

Modified: head/lib/libutil/pw_util.c
==============================================================================
--- head/lib/libutil/pw_util.c	Sat Jun 20 06:10:42 2020	(r362429)
+++ head/lib/libutil/pw_util.c	Sat Jun 20 06:20:00 2020	(r362430)
@@ -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 {


More information about the svn-src-head mailing list