From owner-freebsd-bugs@FreeBSD.ORG Mon Apr 7 07:40:08 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F19FD37B401 for ; Mon, 7 Apr 2003 07:40:07 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9926A43FCB for ; Mon, 7 Apr 2003 07:40:07 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h37Ee7Up086700 for ; Mon, 7 Apr 2003 07:40:07 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h37Ee7Pj086699; Mon, 7 Apr 2003 07:40:07 -0700 (PDT) Date: Mon, 7 Apr 2003 07:40:07 -0700 (PDT) Message-Id: <200304071440.h37Ee7Pj086699@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Tim Robbins Subject: Re: bin/50679: vi invoked from chpass and vipw exits on ^C X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Tim Robbins List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Apr 2003 14:40:08 -0000 The following reply was made to PR bin/50679; it has been noted by GNATS. From: Tim Robbins To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org Cc: Subject: Re: bin/50679: vi invoked from chpass and vipw exits on ^C Date: Tue, 8 Apr 2003 00:35:31 +1000 Possible patch: Index: pw_util.c =================================================================== RCS file: /home/ncvs/src/lib/libutil/pw_util.c,v retrieving revision 1.28 diff -U10 -p -r1.28 pw_util.c --- pw_util.c 17 Mar 2003 02:12:55 -0000 1.28 +++ pw_util.c 7 Apr 2003 13:41:01 -0000 @@ -315,20 +315,22 @@ pw_edit(int notsetuid) _exit(EXIT_FAILURE); } errno = 0; execl(_PATH_BSHELL, "sh", "-c", editcmd, NULL); free(editcmd); _exit(errno); default: /* parent */ break; } + setpgid(editpid, editpid); + tcsetpgrp(1, editpid); for (;;) { editpid = waitpid(editpid, &pstat, WUNTRACED); if (editpid == -1) { unlink(tempname); return (-1); } else if (WIFSTOPPED(pstat)) { raise(WSTOPSIG(pstat)); } else if (WIFEXITED(pstat) && WEXITSTATUS(pstat) == 0) { editpid = -1; break;