From owner-freebsd-ports-bugs@FreeBSD.ORG Wed Mar 25 20:00:03 2009 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4BB31065679 for ; Wed, 25 Mar 2009 20:00:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 83FD68FC21; Wed, 25 Mar 2009 20:00:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n2PK038b035306; Wed, 25 Mar 2009 20:00:03 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n2PK03n3035263; Wed, 25 Mar 2009 20:00:03 GMT (envelope-from gnats) Resent-Date: Wed, 25 Mar 2009 20:00:03 GMT Resent-Message-Id: <200903252000.n2PK03n3035263@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Cc: Joerg.Pulz@frm2.tum.de Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Eygene Ryabinkin Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8AD9E106566C for ; Wed, 25 Mar 2009 19:58:14 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from 0.mx.codelabs.ru (0.mx.codelabs.ru [144.206.177.45]) by mx1.freebsd.org (Postfix) with ESMTP id 3979F8FC0C for ; Wed, 25 Mar 2009 19:58:14 +0000 (UTC) (envelope-from rea-fbsd@codelabs.ru) Received: from amnesiac.at.no.dns (ppp91-77-175-43.pppoe.mtu-net.ru [91.77.175.43]) by 0.mx.codelabs.ru with esmtps (TLSv1:CAMELLIA256-SHA:256) id 1LmZEq-000Kq8-Qy for FreeBSD-gnats-submit@freebsd.org; Wed, 25 Mar 2009 22:58:13 +0300 Received: by amnesiac.at.no.dns (Postfix, from userid 1001) id 071DA17123; Wed, 25 Mar 2009 22:58:06 +0300 (MSK) Message-Id: <20090325195806.071DA17123@amnesiac.at.no.dns> Date: Wed, 25 Mar 2009 22:58:06 +0300 (MSK) From: Eygene Ryabinkin To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 X-GNATS-Notify: Joerg.Pulz@frm2.tum.de Cc: Subject: ports/133072: [patch] net/isc-dhcp30-server, net/isc-dhcp30-server: check configuration file before restart X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Eygene Ryabinkin List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Mar 2009 20:00:04 -0000 >Number: 133072 >Category: ports >Synopsis: [patch] net/isc-dhcp30-server, net/isc-dhcp30-server: check configuration file before restart >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Mar 25 20:00:02 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Eygene Ryabinkin >Release: FreeBSD 7.2-PRERELEASE amd64 >Organization: Code Labs >Environment: System: FreeBSD 7.2-PRERELEASE amd64 >Description: Had just been beaten by the following (silly) error: I had made a mistake in the DHCP configuration file, restarted daemon and started to scratch my head in order to understarnd why clients aren't getting their IPs and other stuff. I understarnd that it is my fault, but if rc.d script will be able to test configuration and refuse to start with the broken config file -- it will be great. Moreover, there is no point in doing restart with the broken configuration file -- it is better to leave the running instance. >How-To-Repeat: Make a mistake in the configuration file and do '/usr/local/etc/rc.d/isc-dhcpd restart'. You'll see the following output: ----- Stopping dhcpd. Starting dhcpd. ----- Sounds like everything is good, but in reality dhcpd daemon will not be running. >Fix: The following patch adds the check both to the rc.d script for DHCPD 3.0 and 3.1. I had tested it for 3.0, but it should also work for 3.1. --- implement-configuration-file-check.diff begins here --- >From 5d719245842864e73515d976b8a32f20a9437db3 Mon Sep 17 00:00:00 2001 From: Eygene Ryabinkin Date: Wed, 25 Mar 2009 22:29:31 +0300 This feature is very handy, because when 'restart' cmd is run with the broken configuration file, rc.d script will show that it stops and starts the daemon. And one will discover that dhcp daemon isn't running only on the next restart or looking at the process list -- not cool. Signed-off-by: Eygene Ryabinkin --- net/isc-dhcp30-server/files/isc-dhcpd.in | 20 ++++++++++++++++++++ net/isc-dhcp31-server/files/isc-dhcpd.in | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 0 deletions(-) diff --git a/net/isc-dhcp30-server/files/isc-dhcpd.in b/net/isc-dhcp30-server/files/isc-dhcpd.in index 9532d91..0bc65bb 100644 --- a/net/isc-dhcp30-server/files/isc-dhcpd.in +++ b/net/isc-dhcp30-server/files/isc-dhcpd.in @@ -701,6 +701,25 @@ dhcpd_uninstall () fi } +dhcpd_checkconfig () +{ + local rc_flags_saved rc_flags_our + rc_flags_saved="$rc_flags" + setup_flags + # Eliminate '-q' flag if it is present + rc_flags_our=`echo "${rc_flags}" | sed -Ee's/(^-q | -q | -q$)'//` + rc_flags="${rc_flags_saved}" + if ${command} -t -q ${rc_flags_our}; then + true + else + echo "Configuration file sanity check failed:" + echo "=======================================" + ${command} -t ${rc_flags_our} + echo "=======================================" + false + fi +} + rcvar=${name}_enable load_rc_config ${name} @@ -719,6 +738,7 @@ pidfile=${_dhcpd_pidfile} required_files=${dhcpd_conf} start_precmd=${name}_precmd stop_postcmd=${name}_postcmd +restart_precmd="dhcpd_checkconfig" install_cmd=dhcpd_install uninstall_cmd=dhcpd_uninstall extra_commands="install uninstall" diff --git a/net/isc-dhcp31-server/files/isc-dhcpd.in b/net/isc-dhcp31-server/files/isc-dhcpd.in index 6ed05f8..b526bfb 100644 --- a/net/isc-dhcp31-server/files/isc-dhcpd.in +++ b/net/isc-dhcp31-server/files/isc-dhcpd.in @@ -700,6 +700,25 @@ dhcpd_uninstall () fi } +dhcpd_checkconfig () +{ + local rc_flags_saved rc_flags_our + rc_flags_saved="$rc_flags" + setup_flags + # Eliminate '-q' flag if it is present + rc_flags_our=`echo "${rc_flags}" | sed -Ee's/(^-q | -q | -q$)'//` + rc_flags="${rc_flags_saved}" + if ${command} -t -q ${rc_flags_our}; then + true + else + echo "Configuration file sanity check failed:" + echo "=======================================" + ${command} -t ${rc_flags_our} + echo "=======================================" + false + fi +} + rcvar=${name}_enable load_rc_config ${name} @@ -718,6 +737,7 @@ pidfile=${_dhcpd_pidfile} required_files=${dhcpd_conf} start_precmd=${name}_precmd stop_postcmd=${name}_postcmd +restart_precmd="dhcpd_checkconfig" install_cmd=dhcpd_install uninstall_cmd=dhcpd_uninstall extra_commands="install uninstall" -- 1.6.1.3 --- implement-configuration-file-check.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: