From 8b749a20b7cdbe6e5eaf2d3c9cd3f11a1f2ae2c2dae3ab46f037dbf0608a856e Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Tue, 18 May 2010 07:39:08 +0000 Subject: [PATCH 1/5] Fixed last, inconsistent submition missing rc.dhcrelay6 scipt and dhcp-4.1.1-dhclient-exec-filedes.dif patch. OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=25 --- dhcp-4.1.1-dhclient-exec-filedes.dif | 17 +++ rc.dhcrelay6 | 220 +++++++++++++++++++++++++++ 2 files changed, 237 insertions(+) create mode 100644 dhcp-4.1.1-dhclient-exec-filedes.dif create mode 100644 rc.dhcrelay6 diff --git a/dhcp-4.1.1-dhclient-exec-filedes.dif b/dhcp-4.1.1-dhclient-exec-filedes.dif new file mode 100644 index 0000000..ef6fe7c --- /dev/null +++ b/dhcp-4.1.1-dhclient-exec-filedes.dif @@ -0,0 +1,17 @@ +diff --git a/client/dhclient.c b/client/dhclient.c +index 69dcc91..15c31a5 100644 +--- a/client/dhclient.c ++++ b/client/dhclient.c +@@ -3173,6 +3173,12 @@ int script_go (client) + */ + if (leaseFile != NULL) + fclose(leaseFile); ++ if ((i = open("/dev/null", O_RDWR)) != -1) { ++ dup2(i, STDIN_FILENO); ++ dup2(i, STDOUT_FILENO); ++ if (i > STDERR_FILENO) ++ close(i); ++ } + execve (scriptName, argv, envp); + log_error ("execve (%s, ...): %m", scriptName); + exit (0); diff --git a/rc.dhcrelay6 b/rc.dhcrelay6 new file mode 100644 index 0000000..ddecca8 --- /dev/null +++ b/rc.dhcrelay6 @@ -0,0 +1,220 @@ +#! /bin/sh +# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH +# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH +# Copyright (c) 2002 SuSE Linux AG +# Copyright (c) 2003-2010 SUSE LINUX Products GmbH +# +# Author: Peter Poeml , 2001 +# Marius Tomaschewski , 2010 +# +# /etc/init.d/dhcrelay6 +# and its symbolic link +# /usr/sbin/rcdhcrelay6 +# +### BEGIN INIT INFO +# Provides: dhcrelay6 +# Required-Start: $network $remote_fs network-remotefs +# Should-Start: $named $syslog $time +# Required-Stop: $network $remote_fs network-remotefs +# Should-Stop: $named $syslog +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Short-Description: DHCPv6 Relay +# Description: Start DHCPv6 (Dynamic Host Configuration Protocol) +# relay agent, forwarding DHCP requests from one +# physical network segment to another. +### END INIT INFO + + +DAEMON="ISC DHCPv6 relay agent" +DAEMON_BIN=/usr/sbin/dhcrelay6 +DAEMON_CONF=/etc/sysconfig/dhcrelay +DAEMON_PIDFILE=/var/run/dhcrelay6.pid +STARTPROC_LOGFILE=/var/log/rc.dhcrelay6.log +SUPPORTS_HUP="no" + +test -s "$DAEMON_CONF" && . "$DAEMON_CONF" +test -x $DAEMON_BIN || { + echo >&2 "$0: \"$DAEMON_BIN\" is not executable." + test "x$1" = xstop && exit 0 || exit 5 +} + +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v ditto but be verbose in local rc status +# rc_status -v -r ditto and clear the local rc status +# rc_failed set local and overall rc status to failed +# rc_failed set local and overall rc status to +# rc_reset clear local rc status (overall remains) +# rc_exit exit appropriate to overall rc status +. /etc/rc.status + +# First reset status of this service +rc_reset + +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - insufficient privilege +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signalling is not supported) are +# considered a success. + +case "$1" in + start) + echo -n "Starting $DAEMON" + checkproc $DAEMON_BIN && { echo -n "... already running"; rc_status -v; exit 0; } + + for l in $DHCRELAY6_LOWER_INTERFACES ; do + test x"$l" = x && continue + DHCRELAY6_LOWER_INTERFACES_ARGS="$DHCRELAY6_LOWER_INTERFACES_ARGS -l $l" + done + for u in $DHCRELAY6_UPPER_INTERFACES ; do + test x"$u" = x && continue + DHCRELAY6_UPPER_INTERFACES_ARGS="$DHCRELAY6_UPPER_INTERFACES_ARGS -u $u" + done + + ## If interfaces or servers are not set, skip starting of dhcrelay + ## and return with "program not configured" + if [ "x$DHCRELAY6_LOWER_INTERFACES_ARGS" = x -o \ + "x$DHCRELAY6_UPPER_INTERFACES_ARGS" = x ]; then + # Tell the user this has skipped + rc_status -s + # service is not configured + exit 6; + fi + + + ## Start daemon with startproc(8). If this fails + ## the echo return value is set appropriate. + + # startproc should return 0, even if service is + # already running to match LSB spec. + test "$2" = "-v" && echo -en \ + "\nexecuting '$DAEMON_BIN $DHCRELAY6_OPTIONS $DHCRELAY6_LOWER_INTERFACES_ARGS $DHCRELAY6_UPPER_INTERFACES_ARGS'" + startproc -q -l $STARTPROC_LOGFILE $DAEMON_BIN $DHCRELAY6_OPTIONS $DHCRELAY6_LOWER_INTERFACES_ARGS $DHCRELAY6_UPPER_INTERFACES_ARGS + rc=$? + if ! [ $rc -eq 0 ]; then + if [ $link = $base ] ; then + ## be quiet + cat $STARTPROC_LOGFILE + else + ## be verbose + echo -e -n " please see $STARTPROC_LOGFILE for details "; + fi + ## set status to failed + rc_failed + fi + + # Remember status and be verbose + rc_status -v + ;; + stop) + echo -n "Shutting down $DAEMON" + ## Stop daemon with killproc(8) and if this fails + ## set echo the echo return value. + + killproc -p $DAEMON_PIDFILE -TERM $DAEMON_BIN + + # Remember status and be verbose + rc_status -v + ;; + try-restart) + ## Do a restart only if the service was active before. + ## Note: try-restart is now part of LSB (as of 1.9). + ## RH has a similar command named condrestart. + $0 status + if test $? = 0; then + $0 restart + else + rc_reset # Not running is not a failure. + fi + # Remember status and be quiet + rc_status + ;; + restart) + ## Stop the service and regardless of whether it was + ## running or not, start it again. + $0 stop + sleep 1 + $0 start + + # Remember status and be quiet + rc_status + ;; + force-reload) + ## Signal the daemon to reload its config. Most daemons + ## do this on signal 1 (SIGHUP). + ## If it does not support it, restart. + + $0 stop && sleep 1 && $0 start + rc_status + + echo -n "Reload service $DAEMON" + + if "$SUPPORTS_HUP" = "yes" ; then + killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN + #touch $DAEMON_PIDFILE + rc_status -v + else + $0 stop && $0 start + rc_status + fi + ;; + reload) + ## Like force-reload, but if daemon does not support + ## signalling, do nothing (!) + + if "$SUPPORTS_HUP" = "yes" ; then + # If it supports signalling: + echo -n "Reload service $DAEMON" + killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN + #touch $DAEMON_PIDFILE + rc_status -v + else + ## Otherwise if it does not support reload: + rc_failed 3 + rc_status -v + fi + ;; + status) + echo -n "Checking for dhcp relay agent: " + ## Check status with checkproc(8), if process is running + ## checkproc will return with exit status 0. + + # Status has a slightly different for the status command: + # 0 - service running + # 1 - service dead, but /var/run/ pid file exists + # 2 - service dead, but /var/lock/ lock file exists + # 3 - service not running + + # NOTE: checkproc returns LSB compliant status values. + checkproc -p $DAEMON_PIDFILE $DAEMON_BIN + rc_status -v + ;; + probe) + ## Optional: Probe for the necessity of a reload, + ## give out the argument which is required for a reload. + + if [ "$DAEMON_CONF" -nt "$DAEMON_PIDFILE" ]; then + if [ "$SUPPORTS_HUP" = "yes" ]; then + echo reload + else + echo restart + fi + fi + ;; + *) + echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe} [-v]" + exit 1 + ;; +esac +rc_exit From 29eefd46b07c81010bb565bbceddab952ee9a2801f4cef65ebc6fcbe7e1608d3 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Tue, 18 May 2010 08:47:43 +0000 Subject: [PATCH 2/5] - Added rc.dhcrelay6 as source in the spec file OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=26 --- dhcp.changes | 5 +++++ dhcp.spec | 1 + 2 files changed, 6 insertions(+) diff --git a/dhcp.changes b/dhcp.changes index f3f7801..abd6e10 100644 --- a/dhcp.changes +++ b/dhcp.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue May 18 08:46:37 UTC 2010 - mt@suse.de + +- Added rc.dhcrelay6 as source in the spec file + ------------------------------------------------------------------- Tue May 11 11:22:48 UTC 2010 - mt@suse.de diff --git a/dhcp.spec b/dhcp.spec index b0fc0fe..7c957bc 100644 --- a/dhcp.spec +++ b/dhcp.spec @@ -43,6 +43,7 @@ Source0: dhcp-%{isc_version}.tar.bz2 Source10: rc.dhcpd Source11: rc.dhcpd6 Source12: rc.dhcrelay +Source13: rc.dhcrelay6 Source14: sysconfig.dhcpd Source15: sysconfig.syslog-dhcpd Source16: sysconfig.dhcrelay From 4b487d7490d5075852d2c568d48c83688e699957e6d3c64a1678949a97b8bf40 Mon Sep 17 00:00:00 2001 From: Marius Tomaschewski Date: Tue, 18 May 2010 08:51:17 +0000 Subject: [PATCH 3/5] removed .dif, exists as .diff OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=27 --- dhcp-4.1.1-dhclient-exec-filedes.dif | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 dhcp-4.1.1-dhclient-exec-filedes.dif diff --git a/dhcp-4.1.1-dhclient-exec-filedes.dif b/dhcp-4.1.1-dhclient-exec-filedes.dif deleted file mode 100644 index ef6fe7c..0000000 --- a/dhcp-4.1.1-dhclient-exec-filedes.dif +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/client/dhclient.c b/client/dhclient.c -index 69dcc91..15c31a5 100644 ---- a/client/dhclient.c -+++ b/client/dhclient.c -@@ -3173,6 +3173,12 @@ int script_go (client) - */ - if (leaseFile != NULL) - fclose(leaseFile); -+ if ((i = open("/dev/null", O_RDWR)) != -1) { -+ dup2(i, STDIN_FILENO); -+ dup2(i, STDOUT_FILENO); -+ if (i > STDERR_FILENO) -+ close(i); -+ } - execve (scriptName, argv, envp); - log_error ("execve (%s, ...): %m", scriptName); - exit (0); From e429139b4e727b5fbca6bd5ebc36e3f3e8a65ffa8ba0141762c4ea710816db03 Mon Sep 17 00:00:00 2001 From: OBS User autobuild Date: Tue, 18 May 2010 18:37:37 +0000 Subject: [PATCH 4/5] Accepting request 40238 from network:dhcp checked in (request 40238) OBS-URL: https://build.opensuse.org/request/show/40238 OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=28 --- dhcp.changes | 5 -- dhcp.spec | 1 - rc.dhcrelay6 | 220 --------------------------------------------------- 3 files changed, 226 deletions(-) delete mode 100644 rc.dhcrelay6 diff --git a/dhcp.changes b/dhcp.changes index abd6e10..f3f7801 100644 --- a/dhcp.changes +++ b/dhcp.changes @@ -1,8 +1,3 @@ -------------------------------------------------------------------- -Tue May 18 08:46:37 UTC 2010 - mt@suse.de - -- Added rc.dhcrelay6 as source in the spec file - ------------------------------------------------------------------- Tue May 11 11:22:48 UTC 2010 - mt@suse.de diff --git a/dhcp.spec b/dhcp.spec index 7c957bc..b0fc0fe 100644 --- a/dhcp.spec +++ b/dhcp.spec @@ -43,7 +43,6 @@ Source0: dhcp-%{isc_version}.tar.bz2 Source10: rc.dhcpd Source11: rc.dhcpd6 Source12: rc.dhcrelay -Source13: rc.dhcrelay6 Source14: sysconfig.dhcpd Source15: sysconfig.syslog-dhcpd Source16: sysconfig.dhcrelay diff --git a/rc.dhcrelay6 b/rc.dhcrelay6 deleted file mode 100644 index ddecca8..0000000 --- a/rc.dhcrelay6 +++ /dev/null @@ -1,220 +0,0 @@ -#! /bin/sh -# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH -# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH -# Copyright (c) 2002 SuSE Linux AG -# Copyright (c) 2003-2010 SUSE LINUX Products GmbH -# -# Author: Peter Poeml , 2001 -# Marius Tomaschewski , 2010 -# -# /etc/init.d/dhcrelay6 -# and its symbolic link -# /usr/sbin/rcdhcrelay6 -# -### BEGIN INIT INFO -# Provides: dhcrelay6 -# Required-Start: $network $remote_fs network-remotefs -# Should-Start: $named $syslog $time -# Required-Stop: $network $remote_fs network-remotefs -# Should-Stop: $named $syslog -# Default-Start: 3 5 -# Default-Stop: 0 1 2 6 -# Short-Description: DHCPv6 Relay -# Description: Start DHCPv6 (Dynamic Host Configuration Protocol) -# relay agent, forwarding DHCP requests from one -# physical network segment to another. -### END INIT INFO - - -DAEMON="ISC DHCPv6 relay agent" -DAEMON_BIN=/usr/sbin/dhcrelay6 -DAEMON_CONF=/etc/sysconfig/dhcrelay -DAEMON_PIDFILE=/var/run/dhcrelay6.pid -STARTPROC_LOGFILE=/var/log/rc.dhcrelay6.log -SUPPORTS_HUP="no" - -test -s "$DAEMON_CONF" && . "$DAEMON_CONF" -test -x $DAEMON_BIN || { - echo >&2 "$0: \"$DAEMON_BIN\" is not executable." - test "x$1" = xstop && exit 0 || exit 5 -} - -# Shell functions sourced from /etc/rc.status: -# rc_check check and set local and overall rc status -# rc_status check and set local and overall rc status -# rc_status -v ditto but be verbose in local rc status -# rc_status -v -r ditto and clear the local rc status -# rc_failed set local and overall rc status to failed -# rc_failed set local and overall rc status to -# rc_reset clear local rc status (overall remains) -# rc_exit exit appropriate to overall rc status -. /etc/rc.status - -# First reset status of this service -rc_reset - -# Return values acc. to LSB for all commands but status: -# 0 - success -# 1 - generic or unspecified error -# 2 - invalid or excess argument(s) -# 3 - unimplemented feature (e.g. "reload") -# 4 - insufficient privilege -# 5 - program is not installed -# 6 - program is not configured -# 7 - program is not running -# -# Note that starting an already running service, stopping -# or restarting a not-running service as well as the restart -# with force-reload (in case signalling is not supported) are -# considered a success. - -case "$1" in - start) - echo -n "Starting $DAEMON" - checkproc $DAEMON_BIN && { echo -n "... already running"; rc_status -v; exit 0; } - - for l in $DHCRELAY6_LOWER_INTERFACES ; do - test x"$l" = x && continue - DHCRELAY6_LOWER_INTERFACES_ARGS="$DHCRELAY6_LOWER_INTERFACES_ARGS -l $l" - done - for u in $DHCRELAY6_UPPER_INTERFACES ; do - test x"$u" = x && continue - DHCRELAY6_UPPER_INTERFACES_ARGS="$DHCRELAY6_UPPER_INTERFACES_ARGS -u $u" - done - - ## If interfaces or servers are not set, skip starting of dhcrelay - ## and return with "program not configured" - if [ "x$DHCRELAY6_LOWER_INTERFACES_ARGS" = x -o \ - "x$DHCRELAY6_UPPER_INTERFACES_ARGS" = x ]; then - # Tell the user this has skipped - rc_status -s - # service is not configured - exit 6; - fi - - - ## Start daemon with startproc(8). If this fails - ## the echo return value is set appropriate. - - # startproc should return 0, even if service is - # already running to match LSB spec. - test "$2" = "-v" && echo -en \ - "\nexecuting '$DAEMON_BIN $DHCRELAY6_OPTIONS $DHCRELAY6_LOWER_INTERFACES_ARGS $DHCRELAY6_UPPER_INTERFACES_ARGS'" - startproc -q -l $STARTPROC_LOGFILE $DAEMON_BIN $DHCRELAY6_OPTIONS $DHCRELAY6_LOWER_INTERFACES_ARGS $DHCRELAY6_UPPER_INTERFACES_ARGS - rc=$? - if ! [ $rc -eq 0 ]; then - if [ $link = $base ] ; then - ## be quiet - cat $STARTPROC_LOGFILE - else - ## be verbose - echo -e -n " please see $STARTPROC_LOGFILE for details "; - fi - ## set status to failed - rc_failed - fi - - # Remember status and be verbose - rc_status -v - ;; - stop) - echo -n "Shutting down $DAEMON" - ## Stop daemon with killproc(8) and if this fails - ## set echo the echo return value. - - killproc -p $DAEMON_PIDFILE -TERM $DAEMON_BIN - - # Remember status and be verbose - rc_status -v - ;; - try-restart) - ## Do a restart only if the service was active before. - ## Note: try-restart is now part of LSB (as of 1.9). - ## RH has a similar command named condrestart. - $0 status - if test $? = 0; then - $0 restart - else - rc_reset # Not running is not a failure. - fi - # Remember status and be quiet - rc_status - ;; - restart) - ## Stop the service and regardless of whether it was - ## running or not, start it again. - $0 stop - sleep 1 - $0 start - - # Remember status and be quiet - rc_status - ;; - force-reload) - ## Signal the daemon to reload its config. Most daemons - ## do this on signal 1 (SIGHUP). - ## If it does not support it, restart. - - $0 stop && sleep 1 && $0 start - rc_status - - echo -n "Reload service $DAEMON" - - if "$SUPPORTS_HUP" = "yes" ; then - killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN - #touch $DAEMON_PIDFILE - rc_status -v - else - $0 stop && $0 start - rc_status - fi - ;; - reload) - ## Like force-reload, but if daemon does not support - ## signalling, do nothing (!) - - if "$SUPPORTS_HUP" = "yes" ; then - # If it supports signalling: - echo -n "Reload service $DAEMON" - killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN - #touch $DAEMON_PIDFILE - rc_status -v - else - ## Otherwise if it does not support reload: - rc_failed 3 - rc_status -v - fi - ;; - status) - echo -n "Checking for dhcp relay agent: " - ## Check status with checkproc(8), if process is running - ## checkproc will return with exit status 0. - - # Status has a slightly different for the status command: - # 0 - service running - # 1 - service dead, but /var/run/ pid file exists - # 2 - service dead, but /var/lock/ lock file exists - # 3 - service not running - - # NOTE: checkproc returns LSB compliant status values. - checkproc -p $DAEMON_PIDFILE $DAEMON_BIN - rc_status -v - ;; - probe) - ## Optional: Probe for the necessity of a reload, - ## give out the argument which is required for a reload. - - if [ "$DAEMON_CONF" -nt "$DAEMON_PIDFILE" ]; then - if [ "$SUPPORTS_HUP" = "yes" ]; then - echo reload - else - echo restart - fi - fi - ;; - *) - echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe} [-v]" - exit 1 - ;; -esac -rc_exit From ac9d62fb12155475b1b7d12b359a1908fe90136b459fb767118e22711713fb67 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Tue, 18 May 2010 18:37:44 +0000 Subject: [PATCH 5/5] Updating link to change in openSUSE:Factory/dhcp revision 34.0 OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=04c9445a0b7e996100d9cf87360be886 --- dhcp.changes | 5 ++ dhcp.spec | 3 +- rc.dhcrelay6 | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 rc.dhcrelay6 diff --git a/dhcp.changes b/dhcp.changes index f3f7801..abd6e10 100644 --- a/dhcp.changes +++ b/dhcp.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue May 18 08:46:37 UTC 2010 - mt@suse.de + +- Added rc.dhcrelay6 as source in the spec file + ------------------------------------------------------------------- Tue May 11 11:22:48 UTC 2010 - mt@suse.de diff --git a/dhcp.spec b/dhcp.spec index b0fc0fe..8181147 100644 --- a/dhcp.spec +++ b/dhcp.spec @@ -33,7 +33,7 @@ License: BSD3c(or similar) Group: Productivity/Networking/Boot/Servers AutoReqProv: on Version: 4.1.1 -Release: 1 +Release: 2 Summary: Common Files Used by ISC DHCP Software Url: http://www.isc.org/software/dhcp Source0: dhcp-%{isc_version}.tar.bz2 @@ -43,6 +43,7 @@ Source0: dhcp-%{isc_version}.tar.bz2 Source10: rc.dhcpd Source11: rc.dhcpd6 Source12: rc.dhcrelay +Source13: rc.dhcrelay6 Source14: sysconfig.dhcpd Source15: sysconfig.syslog-dhcpd Source16: sysconfig.dhcrelay diff --git a/rc.dhcrelay6 b/rc.dhcrelay6 new file mode 100644 index 0000000..ddecca8 --- /dev/null +++ b/rc.dhcrelay6 @@ -0,0 +1,220 @@ +#! /bin/sh +# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH +# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH +# Copyright (c) 2002 SuSE Linux AG +# Copyright (c) 2003-2010 SUSE LINUX Products GmbH +# +# Author: Peter Poeml , 2001 +# Marius Tomaschewski , 2010 +# +# /etc/init.d/dhcrelay6 +# and its symbolic link +# /usr/sbin/rcdhcrelay6 +# +### BEGIN INIT INFO +# Provides: dhcrelay6 +# Required-Start: $network $remote_fs network-remotefs +# Should-Start: $named $syslog $time +# Required-Stop: $network $remote_fs network-remotefs +# Should-Stop: $named $syslog +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Short-Description: DHCPv6 Relay +# Description: Start DHCPv6 (Dynamic Host Configuration Protocol) +# relay agent, forwarding DHCP requests from one +# physical network segment to another. +### END INIT INFO + + +DAEMON="ISC DHCPv6 relay agent" +DAEMON_BIN=/usr/sbin/dhcrelay6 +DAEMON_CONF=/etc/sysconfig/dhcrelay +DAEMON_PIDFILE=/var/run/dhcrelay6.pid +STARTPROC_LOGFILE=/var/log/rc.dhcrelay6.log +SUPPORTS_HUP="no" + +test -s "$DAEMON_CONF" && . "$DAEMON_CONF" +test -x $DAEMON_BIN || { + echo >&2 "$0: \"$DAEMON_BIN\" is not executable." + test "x$1" = xstop && exit 0 || exit 5 +} + +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v ditto but be verbose in local rc status +# rc_status -v -r ditto and clear the local rc status +# rc_failed set local and overall rc status to failed +# rc_failed set local and overall rc status to +# rc_reset clear local rc status (overall remains) +# rc_exit exit appropriate to overall rc status +. /etc/rc.status + +# First reset status of this service +rc_reset + +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - insufficient privilege +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signalling is not supported) are +# considered a success. + +case "$1" in + start) + echo -n "Starting $DAEMON" + checkproc $DAEMON_BIN && { echo -n "... already running"; rc_status -v; exit 0; } + + for l in $DHCRELAY6_LOWER_INTERFACES ; do + test x"$l" = x && continue + DHCRELAY6_LOWER_INTERFACES_ARGS="$DHCRELAY6_LOWER_INTERFACES_ARGS -l $l" + done + for u in $DHCRELAY6_UPPER_INTERFACES ; do + test x"$u" = x && continue + DHCRELAY6_UPPER_INTERFACES_ARGS="$DHCRELAY6_UPPER_INTERFACES_ARGS -u $u" + done + + ## If interfaces or servers are not set, skip starting of dhcrelay + ## and return with "program not configured" + if [ "x$DHCRELAY6_LOWER_INTERFACES_ARGS" = x -o \ + "x$DHCRELAY6_UPPER_INTERFACES_ARGS" = x ]; then + # Tell the user this has skipped + rc_status -s + # service is not configured + exit 6; + fi + + + ## Start daemon with startproc(8). If this fails + ## the echo return value is set appropriate. + + # startproc should return 0, even if service is + # already running to match LSB spec. + test "$2" = "-v" && echo -en \ + "\nexecuting '$DAEMON_BIN $DHCRELAY6_OPTIONS $DHCRELAY6_LOWER_INTERFACES_ARGS $DHCRELAY6_UPPER_INTERFACES_ARGS'" + startproc -q -l $STARTPROC_LOGFILE $DAEMON_BIN $DHCRELAY6_OPTIONS $DHCRELAY6_LOWER_INTERFACES_ARGS $DHCRELAY6_UPPER_INTERFACES_ARGS + rc=$? + if ! [ $rc -eq 0 ]; then + if [ $link = $base ] ; then + ## be quiet + cat $STARTPROC_LOGFILE + else + ## be verbose + echo -e -n " please see $STARTPROC_LOGFILE for details "; + fi + ## set status to failed + rc_failed + fi + + # Remember status and be verbose + rc_status -v + ;; + stop) + echo -n "Shutting down $DAEMON" + ## Stop daemon with killproc(8) and if this fails + ## set echo the echo return value. + + killproc -p $DAEMON_PIDFILE -TERM $DAEMON_BIN + + # Remember status and be verbose + rc_status -v + ;; + try-restart) + ## Do a restart only if the service was active before. + ## Note: try-restart is now part of LSB (as of 1.9). + ## RH has a similar command named condrestart. + $0 status + if test $? = 0; then + $0 restart + else + rc_reset # Not running is not a failure. + fi + # Remember status and be quiet + rc_status + ;; + restart) + ## Stop the service and regardless of whether it was + ## running or not, start it again. + $0 stop + sleep 1 + $0 start + + # Remember status and be quiet + rc_status + ;; + force-reload) + ## Signal the daemon to reload its config. Most daemons + ## do this on signal 1 (SIGHUP). + ## If it does not support it, restart. + + $0 stop && sleep 1 && $0 start + rc_status + + echo -n "Reload service $DAEMON" + + if "$SUPPORTS_HUP" = "yes" ; then + killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN + #touch $DAEMON_PIDFILE + rc_status -v + else + $0 stop && $0 start + rc_status + fi + ;; + reload) + ## Like force-reload, but if daemon does not support + ## signalling, do nothing (!) + + if "$SUPPORTS_HUP" = "yes" ; then + # If it supports signalling: + echo -n "Reload service $DAEMON" + killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN + #touch $DAEMON_PIDFILE + rc_status -v + else + ## Otherwise if it does not support reload: + rc_failed 3 + rc_status -v + fi + ;; + status) + echo -n "Checking for dhcp relay agent: " + ## Check status with checkproc(8), if process is running + ## checkproc will return with exit status 0. + + # Status has a slightly different for the status command: + # 0 - service running + # 1 - service dead, but /var/run/ pid file exists + # 2 - service dead, but /var/lock/ lock file exists + # 3 - service not running + + # NOTE: checkproc returns LSB compliant status values. + checkproc -p $DAEMON_PIDFILE $DAEMON_BIN + rc_status -v + ;; + probe) + ## Optional: Probe for the necessity of a reload, + ## give out the argument which is required for a reload. + + if [ "$DAEMON_CONF" -nt "$DAEMON_PIDFILE" ]; then + if [ "$SUPPORTS_HUP" = "yes" ]; then + echo reload + else + echo restart + fi + fi + ;; + *) + echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe} [-v]" + exit 1 + ;; +esac +rc_exit