From owner-freebsd-arch@FreeBSD.ORG Mon Aug 23 18:09:58 2004 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AA66116A4DB for ; Mon, 23 Aug 2004 18:09:58 +0000 (GMT) Received: from mail5.speakeasy.net (mail5.speakeasy.net [216.254.0.205]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8019943D1D for ; Mon, 23 Aug 2004 18:09:58 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: (qmail 30867 invoked from network); 23 Aug 2004 18:09:58 -0000 Received: from dsl027-160-063.atl1.dsl.speakeasy.net (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender ) encrypted SMTP for ; 23 Aug 2004 18:09:57 -0000 Received: from [10.50.40.208] (gw1.twc.weather.com [216.133.140.1]) (authenticated bits=0) by server.baldwin.cx (8.12.11/8.12.11) with ESMTP id i7NI9rEA088096; Mon, 23 Aug 2004 14:09:54 -0400 (EDT) (envelope-from jhb@FreeBSD.org) From: John Baldwin To: freebsd-arch@FreeBSD.org Date: Mon, 23 Aug 2004 11:41:24 -0400 User-Agent: KMail/1.6.2 References: <20040821191659.GA94336@gothmog.gr> <20040821202252.GB94336@gothmog.gr> In-Reply-To: <20040821202252.GB94336@gothmog.gr> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200408231141.25077.jhb@FreeBSD.org> X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on server.baldwin.cx cc: Giorgos Keramidas Subject: Re: Introducing a poweroff(8) command X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Aug 2004 18:09:58 -0000 On Saturday 21 August 2004 04:22 pm, Giorgos Keramidas wrote: > On 2004-08-21 22:16, Giorgos Keramidas wrote: > > Hi guys, > > > > In response to PR misc/70476 about `halt -p' I wrote a simple patch to > > introduce a "poweroff" command that will default to "halt -p" behavior > > and inhibit the need for changing the default behavior of halt(8). > > > > o Does this look ok to you all? > > > > o Should I suggest using it as a workaround of the behavior > > described in the PR? > > It would be nice if I also included the patch :-? > > %%% > Add a hard link to reboot(8) called "poweroff" which defaults to the > same behavior as "halt -p". Also fix a related bug while here. When > called as "halt -p" the previous reboot program would not disallow the > use of -d for saving kernel dumps (it would inhibit dumps without the > -p option though). > > Index: Makefile > =================================================================== > RCS file: /home/ncvs/src/sbin/reboot/Makefile,v > retrieving revision 1.13 > diff -u -r1.13 Makefile > --- Makefile 22 Mar 2004 00:52:27 -0000 1.13 > +++ Makefile 21 Aug 2004 18:45:36 -0000 > @@ -14,8 +14,8 @@ > MLINKS+= boot_i386.8 boot.8 > .endif > > -LINKS= ${BINDIR}/reboot ${BINDIR}/halt ${BINDIR}/reboot ${BINDIR}/fastboot > \ - ${BINDIR}/reboot ${BINDIR}/fasthalt > +LINKS= ${BINDIR}/reboot ${BINDIR}/halt ${BINDIR}/reboot ${BINDIR}/poweroff > \ + ${BINDIR}/reboot ${BINDIR}/fastboot ${BINDIR}/reboot ${BINDIR}/fasthalt > > SCRIPTS= nextboot.sh > > Index: reboot.8 > =================================================================== > RCS file: /home/ncvs/src/sbin/reboot/reboot.8,v > retrieving revision 1.22 > diff -u -r1.22 reboot.8 > --- reboot.8 9 Apr 2004 19:58:35 -0000 1.22 > +++ reboot.8 17 Aug 2004 22:04:34 -0000 > @@ -34,6 +34,7 @@ > .Sh NAME > .Nm reboot , > .Nm halt , > +.Nm poweroff , > .Nm fastboot , > .Nm fasthalt > .Nd stopping and restarting the system > @@ -41,6 +42,9 @@ > .Nm halt > .Op Fl lnqp > .Op Fl k Ar kernel > +.Nm poweroff > +.Op Fl lnqp > +.Op Fl k Ar kernel > .Nm > .Op Fl dlnqp > .Op Fl k Ar kernel > @@ -52,7 +56,8 @@ > .Op Fl k Ar kernel > .Sh DESCRIPTION > The > -.Nm halt > +.Nm halt , > +.Nm poweroff > and > .Nm > utilities flush the file system cache to disk, send all running processes > @@ -91,9 +96,10 @@ > This option is intended for applications such as > .Xr shutdown 8 , > that call > -.Nm > -or > +.Nm , > .Nm halt > +or > +.Nm poweroff > and log this themselves. > .It Fl n > The file system cache is not flushed. > @@ -106,6 +112,9 @@ > This option should probably not be used. > .It Fl p > The system will turn off the power if it can. > +This is the default action if > +.Nm poweroff > +is called. > If the power down action fails, the system > will halt or reboot normally, depending on whether > .Nm halt > Index: reboot.c > =================================================================== > RCS file: /home/ncvs/src/sbin/reboot/reboot.c,v > retrieving revision 1.20 > diff -u -r1.20 reboot.c > --- reboot.c 9 Apr 2004 19:58:35 -0000 1.20 > +++ reboot.c 17 Aug 2004 21:55:57 -0000 > @@ -70,9 +70,13 @@ > char *kernel, *p; > const char *user; > > - if (strstr((p = rindex(*argv, '/')) ? p + 1 : *argv, "halt")) { > + p = rindex(*argv, '/') ? p + 1 : *argv; > + if (strcmp(p, "halt") == 0) { I think this is buggy in that p will point to the / character since you don't modify it in the second case. I.e. what you wrote is basically this: p = rindex(*argv, '/'); if (p != NULL) p + 1; /* does nothing */ else *argv; /* also does nothing */ Note that in the old code the expression generates a char * that gets passed to strstr(), but in your version the result of the expression is just discarded. gcc(1) should have warned about this. (Assuming you compiled with warnings on of course. :) It would probably be better to use an explicit if statement rather than the more obfuscated ?: in this case anyways: p = rindex(argv[0], '/'); if (p != NULL) p++; else p = argv[0]; Also, given the behavior of poweroff(8) on other OS's, I think that it would violate POLA to make it a link to shutdown. If a sysadmin wants to be nice and/or wants to run rc.d scripts on shutdown he can already use 'shutdown [-hrp]' as it is. The fact that shutdown does all 3 via command line options but halt/reboot/poweroff each only do one I think it makes more sense for poweroff to link to halt/reboot. -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org