From owner-freebsd-bugs@FreeBSD.ORG Mon Apr 7 07:35:30 2003 Return-Path: Delivered-To: freebsd-bugs@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 015AF37B401; Mon, 7 Apr 2003 07:35:30 -0700 (PDT) Received: from smtp02.syd.iprimus.net.au (smtp02.syd.iprimus.net.au [210.50.76.52]) by mx1.FreeBSD.org (Postfix) with ESMTP id 69D3643F75; Mon, 7 Apr 2003 07:35:29 -0700 (PDT) (envelope-from tim@robbins.dropbear.id.au) Received: from dilbert.robbins.dropbear.id.au (210.50.44.252) by smtp02.syd.iprimus.net.au (7.0.012) id 3E8A16000013730C; Tue, 8 Apr 2003 00:35:27 +1000 Received: by dilbert.robbins.dropbear.id.au (Postfix, from userid 1000) id D29EEC90D; Tue, 8 Apr 2003 00:35:31 +1000 (EST) Date: Tue, 8 Apr 2003 00:35:31 +1000 From: Tim Robbins To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org Message-ID: <20030408003531.A94716@dilbert.robbins.dropbear.id.au> References: <20030407141422.3A994C90D@dilbert.robbins.dropbear.id.au> <200304071420.h37EKDxJ061860@freefall.freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <200304071420.h37EKDxJ061860@freefall.freebsd.org>; 07:20:13AM -0700 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 List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Apr 2003 14:35:30 -0000 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;