Hello community,

here is the log from the commit of package dhcp for openSUSE:11.3
checked in at Tue Aug 30 19:16:06 CEST 2011.



--------
--- old-versions/11.3/UPDATES/all/dhcp/dhcp.changes     2011-05-03 
14:41:40.000000000 +0200
+++ 11.3/dhcp/dhcp.changes      2011-08-30 10:35:54.000000000 +0200
@@ -1,0 +2,16 @@
+Tue Aug 30 08:33:41 UTC 2011 - [email protected]
+
+- Applied fixes extracted from dhcp-4.1-ESV-R1..R3 correcting
+  two denial of service flaws via crafted BOOTP packets
+  (CVE-2011-2748,CVE-2011-2749,[ISC-Bugs #24960],bnc#712653).
+- Moved server pid files into chroot directory even chroot is
+  not used and create a link in /var/run, so it can write one
+  when started as user without chroot and avoid stop problems
+  when the chroot sysconfig setting changed (bnc#712438).
+- Fixed dhclient-script to not remove alias IP when it didn't
+  changed to not wipe out iptables connmark when renewing the
+  lease (bnc#700771). Thanks to James Carter for the patch.
+- Disabled log-info level messages in dhclient(6) quiet mode to
+  avoid excessive logging of non-critical messages (bnc#711420).
+
+-------------------------------------------------------------------

calling whatdependson for 11.3-i586


New:
----
  dhcp-4.1-ESV-R1-CVE-2011-2748_2749.diff
  dhcp-4.2.2-quiet-dhclient.bnc711420.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dhcp.spec ++++++
--- /var/tmp/diff_new_pack.ZDqHeu/_old  2011-08-30 19:08:59.000000000 +0200
+++ /var/tmp/diff_new_pack.ZDqHeu/_new  2011-08-30 19:08:59.000000000 +0200
@@ -33,7 +33,7 @@
 Group:          Productivity/Networking/Boot/Servers
 AutoReqProv:    on
 Version:        4.1.2.ESV.1
-Release:        0.<RELEASE8>
+Release:        0.<RELEASE10>
 Summary:        Common Files Used by ISC DHCP Software
 Url:            http://www.isc.org/software/dhcp
 Source0:        dhcp-%{isc_version}.tar.bz2
@@ -83,6 +83,8 @@
 Patch41:        dhcp-4.1.1-P1-relay-no-ip-on-interface.diff
 Patch42:        dhcp-4.1.1-P1-optional-value-infinite-loop.diff
 Patch43:        dhcp-4.1-ESV-R1-xen-checksum.patch
+Patch44:        dhcp-4.1-ESV-R1-CVE-2011-2748_2749.diff
+Patch45:        dhcp-4.2.2-quiet-dhclient.bnc711420.diff
 ##
 PreReq:         /bin/touch /sbin/chkconfig sysconfig
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -207,6 +209,8 @@
 %patch41 -p1
 %patch42 -p1
 %patch43 -p1
+%patch44 -p1
+%patch45 -p1
 ##
 find . -type f -name \*.cat\* -exec rm -f {} \;
 dos2unix contrib/ms2isc/*

++++++ dhclient-script ++++++
--- /var/tmp/diff_new_pack.ZDqHeu/_old  2011-08-30 19:08:59.000000000 +0200
+++ /var/tmp/diff_new_pack.ZDqHeu/_new  2011-08-30 19:08:59.000000000 +0200
@@ -400,8 +400,8 @@
 BOUND|RENEW|REBIND|REBOOT)
   ####################################################################
 
-  if [ x$old_ip_address != x -a x$alias_ip_address != x ] && \
-     [ x$alias_ip_address != x$old_ip_address ] ;
+  if [ x$alias_ip_address != x -a x$alias_ip_address != x$old_ip_address -a \
+       x$new_ip_address != x$old_ip_address ] ;
   then
     # Possible new alias. Remove old alias.
     /sbin/ip addr del $alias_ip_address/$alias_subnet_mask dev $interface
@@ -426,7 +426,8 @@
 
     set_ipv4_routes
   fi
-  if [ x$new_ip_address != x$alias_ip_address -a x$alias_ip_address != x ];
+  if [ x$new_ip_address != x$alias_ip_address -a x$alias_ip_address != x \
+    -a x$new_ip_address != x$old_ip_address ];
   then
     /sbin/ip addr add $alias_ip_address/$alias_subnet_mask \
                       dev $interface

++++++ dhcp-4.1-ESV-R1-CVE-2011-2748_2749.diff ++++++
--- dhcp-4.1-ESV-R1/common/discover.c
+++ dhcp-4.1-ESV-R1/common/discover.c   2011/08/29 11:27:34
@@ -1378,12 +1378,16 @@ isc_result_t got_one (h)
        if (result == 0)
                return ISC_R_UNEXPECTED;
 
-       /* If we didn't at least get the fixed portion of the BOOTP
-          packet, drop the packet.  We're allowing packets with no
-          sname or filename, because we're aware of at least one
-          client that sends such packets, but this definitely falls
-          into the category of being forgiving. */
-       if (result < DHCP_FIXED_NON_UDP - DHCP_SNAME_LEN - DHCP_FILE_LEN)
+       /*
+        * If we didn't at least get the fixed portion of the BOOTP
+        * packet, drop the packet.
+        * Previously we allowed packets with no sname or filename
+        * as we were aware of at least one client that did.  But
+        * a bug caused short packets to not work and nobody has
+        * complained, it seems rational to tighten up that
+        * restriction.
+        */
+       if (result < DHCP_FIXED_NON_UDP)
                return ISC_R_UNEXPECTED;
 
        if (bootp_packet_handler) {
--- dhcp-4.1-ESV-R1/common/options.c
+++ dhcp-4.1-ESV-R1/common/options.c    2011/08/29 11:27:06
@@ -592,8 +592,8 @@ cons_options(struct packet *inpacket, st
        } else if (bootpp) {
                mb_size = 64;
                if (inpacket != NULL &&
-                   (inpacket->packet_length - DHCP_FIXED_LEN >= 64))
-                       mb_size = inpacket->packet_length - DHCP_FIXED_LEN;
+                   (inpacket->packet_length >= 64 + DHCP_FIXED_NON_UDP))
+                       mb_size = inpacket->packet_length - DHCP_FIXED_NON_UDP;
        } else
                mb_size = DHCP_MIN_OPTION_LEN;
 
--- dhcp-4.1-ESV-R1/server/dhcp.c
+++ dhcp-4.1-ESV-R1/server/dhcp.c       2011/08/29 11:27:06
@@ -1541,6 +1541,7 @@ void ack_lease (packet, lease, offer, wh
         * by the user into the new state, not just give up.
         */
        if (!packet->agent_options_stashed &&
+           (packet->options != NULL) &&
            packet->options->universe_count > agent_universe.index &&
            packet->options->universes[agent_universe.index] != NULL &&
            (state->options->universe_count <= agent_universe.index ||
@@ -2346,6 +2347,7 @@ void ack_lease (packet, lease, offer, wh
         * giaddr.
         */
        if (!packet->agent_options_stashed &&
+           (packet->options != NULL) &&
            packet->options->universe_count > agent_universe.index &&
            packet->options->universes[agent_universe.index] != NULL) {
            oc = lookup_option (&server_universe, state -> options,
++++++ dhcp-4.2.2-quiet-dhclient.bnc711420.diff ++++++
diff --git a/client/dhclient.c b/client/dhclient.c
index a1cab01..ff5ede5 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -444,6 +444,9 @@ main(int argc, char **argv) {
        } else {
                log_perror = 0;
                quiet_interface_discovery = 1;
+#if !defined(DEBUG)
+               setlogmask(LOG_UPTO(LOG_NOTICE));
+#endif
        }
 
        /* If we're given a relay agent address to insert, for testing
-- 
1.7.3.4



++++++ rc.dhcpd ++++++
--- /var/tmp/diff_new_pack.ZDqHeu/_old  2011-08-30 19:08:59.000000000 +0200
+++ /var/tmp/diff_new_pack.ZDqHeu/_new  2011-08-30 19:08:59.000000000 +0200
@@ -59,6 +59,11 @@
 DAEMON_CONF=/etc/dhcpd.conf
 DAEMON_STATE=/var/lib/dhcp
 DAEMON_LEASES=dhcpd.leases
+# note: $DAEMON_PIDFILE is a symlink to the
+#       $DAEMON_STATE$DAEMON_PIDFILE (also
+#       while DHCPD_RUN_CHROOTED=no) now,
+#       as DHCPD_RUN_AS is not allowed to
+#       create pid files in /var/run.
 DAEMON_PIDFILE=/var/run/dhcpd.pid
 STARTPROC_LOGFILE=/var/log/rc.dhcpd.log
 LDAP_CONF=/etc/openldap/ldap.conf
@@ -128,7 +133,7 @@
 # remove empty pid files to avoid disturbing warnings by checkproc/killproc
 # (these can occur if dhcpd does not start correctly)
 test -e $DAEMON_PIDFILE && ! test -s $DAEMON_PIDFILE && rm $DAEMON_PIDFILE
-test -e $CHROOT_PREFIX/$DAEMON_PIDFILE && ! test -s 
$CHROOT_PREFIX/$DAEMON_PIDFILE && rm $CHROOT_PREFIX/$DAEMON_PIDFILE
+test -e $DAEMON_STATE/$DAEMON_PIDFILE && ! test -s 
$DAEMON_STATE/$DAEMON_PIDFILE && rm $DAEMON_STATE/$DAEMON_PIDFILE
 
 case "$1" in
     start)
@@ -240,33 +245,33 @@
                ## the chroot jail. Therefore, and old pid file may exist. This 
is only a problem if it 
                ## incidentally contains the pid of a running process. If this 
process is not a 'dhcpd', 
                ## we remove the pid. (dhcpd itself only checks whether the pid 
is alive or not.)
-               if test -e $CHROOT_PREFIX/$DAEMON_PIDFILE -a -s 
$CHROOT_PREFIX/$DAEMON_PIDFILE; then
-                       p=$(<$CHROOT_PREFIX/$DAEMON_PIDFILE)
+               if test -s $DAEMON_STATE/$DAEMON_PIDFILE; then
+                       p=$(<$DAEMON_STATE/$DAEMON_PIDFILE)
                        if test -n "$p" && grep -qsE "^${DAEMON_BIN}" 
"/proc/$p/cmdline" ; then
                                echo -n '(already running) '
                        else
-                               rm $CHROOT_PREFIX/$DAEMON_PIDFILE
+                               rm -f $DAEMON_STATE/$DAEMON_PIDFILE
                        fi
                fi
+               PID_FILE_ARG="$DAEMON_PIDFILE"
        else
                DHCPD_ARGS="-lf ${DAEMON_STATE}/db/$DAEMON_LEASES"
+               PID_FILE_ARG="$DAEMON_STATE$DAEMON_PIDFILE"
        fi
 
        if [ -n "$DHCPD_RUN_AS" ]; then
                DHCPD_RUN_AS_GROUP="$(getent group $(getent passwd 
$DHCPD_RUN_AS | cut -d: -f4) | cut -d: -f1)"
                DHCPD_ARGS="$DHCPD_ARGS -user $DHCPD_RUN_AS -group 
$DHCPD_RUN_AS_GROUP"
 
-               if test "$DHCPD_RUN_CHROOTED" = "yes" ; then
-                       chown   "${DHCPD_RUN_AS}:${DHCPD_RUN_AS_GROUP}" \
-                               "$CHROOT_PREFIX/${DAEMON_PIDFILE%/*}"
-               fi
+               chown   "${DHCPD_RUN_AS}:${DHCPD_RUN_AS_GROUP}" \
+                       "$DAEMON_STATE/${DAEMON_PIDFILE%/*}"
        fi
 
 
        ## check syntax with -t (output to log file) and start only when the 
syntax is okay
        rm -f $STARTPROC_LOGFILE # start log
        error=0
-       if ! $DAEMON_BIN $DHCPDv_OPT -t -cf $CHROOT_PREFIX/$DAEMON_CONF -pf 
$DAEMON_PIDFILE > $STARTPROC_LOGFILE 2>&1 ; then
+       if ! $DAEMON_BIN $DHCPDv_OPT -t -cf $CHROOT_PREFIX/$DAEMON_CONF -pf 
$PID_FILE_ARG > $STARTPROC_LOGFILE 2>&1 ; then
                error=1
        else
                ## Start daemon. If this fails the return value is set 
appropriate.
@@ -274,17 +279,20 @@
                ## to match the LSB spec.
 
                test "$2" = "-v" && echo -en \
-                       "\nexecuting '$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF 
-pf $DAEMON_PIDFILE $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE'"
+                       "\nexecuting '$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF 
-pf $PID_FILE_ARG $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE'"
 
-               $DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $DAEMON_PIDFILE 
$DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
+               $DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $PID_FILE_ARG 
$DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
                ret=$?
        fi      
-       
-       if [ $error -gt 0 -o ${ret:-0} -gt 0 ]; then 
-               cat $STARTPROC_LOGFILE 
+
+       if [ $error -gt 0 -o ${ret:-0} -gt 0 ]; then
+               ## be verbose
+               echo ""
+               echo -n "  please see $STARTPROC_LOGFILE for details "
                ## set status to failed
                rc_failed
        else
+               ln -sf "$DAEMON_STATE$DAEMON_PIDFILE" "$DAEMON_PIDFILE"
                [ "$DHCPD_RUN_CHROOTED" = "yes" ] && echo -n "[chroot]" || :
        fi
 
@@ -294,14 +302,29 @@
     stop)
        echo -n "Shutting down $DAEMON "
 
+       # Catch the case where daemon is running without chroot,
+       # but sysconfig/dhcp has been changed to use chroot (and
+       # another way around).
+       # In this case is there is no $chroot/$pidfile, but there
+       # should be a /pidfile that we use instead.
+       # We can not kill without pid file or dhcp4 kills dhcp6.
+       PID_FILE="$DAEMON_STATE$DAEMON_PIDFILE"
+       if test "$DHCPD_RUN_CHROOTED" = "yes" ; then
+               if test ! -s "$DAEMON_STATE$DAEMON_PIDFILE" -a \
+                         -s "$DAEMON_PIDFILE" ; then
+                       PID_FILE="$DAEMON_PIDFILE"
+               fi
+       else
+               if test ! -s "$DAEMON_PIDFILE" -a \
+                         -s "$DAEMON_STATE$DAEMON_PIDFILE" ; then
+                       PID_FILE="$DAEMON_STATE$DAEMON_PIDFILE"
+               fi
+       fi
+
        ## Stop daemon with killproc(8) and if this fails
        ## set echo the echo return value.
-
-       killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -TERM $DAEMON_BIN
+       killproc -p "$PID_FILE" $DAEMON_BIN
        ret=$?
-       if test -s $CHROOT_PREFIX/$DAEMON_PIDFILE; then 
-               kill $(<$CHROOT_PREFIX/$DAEMON_PIDFILE) 2>/dev/null
-       fi
 
        # umount proc and remove libraries from the chroot jail,
        # so they are not left over if the server is deinstalled
@@ -345,8 +368,8 @@
        echo -n "Reload service $DAEMON"
 
        if [ "$SUPPORTS_HUP" = "yes" ]; then 
-               killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
-               #touch $CHROOT_PREFIX/$DAEMON_PIDFILE
+               killproc -p $DAEMON_STATE/$DAEMON_PIDFILE -HUP $DAEMON_BIN
+               #touch $DAEMON_STATE/$DAEMON_PIDFILE
                rc_status -v
        else
                $0 stop  &&  sleep 3  &&  $0 start
@@ -360,8 +383,8 @@
        echo -n "Reload service $DAEMON"
        if [ "$SUPPORTS_HUP" = "yes" ]; then
                # If it supports signalling:
-               killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
-               #touch $CHROOT_PREFIX/$DAEMON_PIDFILE
+               killproc -p $DAEMON_STATE/$DAEMON_PIDFILE -HUP $DAEMON_BIN
+               #touch $DAEMON_STATE/$DAEMON_PIDFILE
                rc_status -v
        else
                ## Otherwise if it does not support reload:
@@ -381,7 +404,7 @@
        # 3 - service not running
 
        # NOTE: checkproc returns LSB compliant status values.
-       checkproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE $DAEMON_BIN
+       checkproc -p $DAEMON_STATE/$DAEMON_PIDFILE $DAEMON_BIN
        rc_status -v
        ;;
     probe)
@@ -390,7 +413,7 @@
 
        rc=0
        for i in /etc/sysconfig/dhcpd $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES; do
-               test $i -nt $CHROOT_PREFIX/$DAEMON_PIDFILE && rc=1
+               test $i -nt $DAEMON_STATE/$DAEMON_PIDFILE && rc=1
        done
        test $rc = 1 && echo restart
        ;;

++++++ rc.dhcpd6 ++++++
--- /var/tmp/diff_new_pack.ZDqHeu/_old  2011-08-30 19:08:59.000000000 +0200
+++ /var/tmp/diff_new_pack.ZDqHeu/_new  2011-08-30 19:08:59.000000000 +0200
@@ -63,6 +63,11 @@
 DAEMON_CONF=/etc/dhcpd6.conf
 DAEMON_STATE=/var/lib/dhcp6
 DAEMON_LEASES=dhcpd6.leases
+# note: $DAEMON_PIDFILE is a symlink to the
+#       $DAEMON_STATE$DAEMON_PIDFILE (also
+#       while DHCPD_RUN_CHROOTED=no) now,
+#       as DHCPD_RUN_AS is not allowed to
+#       create pid files in /var/run.
 DAEMON_PIDFILE=/var/run/dhcpd6.pid
 STARTPROC_LOGFILE=/var/log/rc.dhcpd6.log
 LDAP_CONF=
@@ -132,7 +137,7 @@
 # remove empty pid files to avoid disturbing warnings by checkproc/killproc
 # (these can occur if dhcpd does not start correctly)
 test -e $DAEMON_PIDFILE && ! test -s $DAEMON_PIDFILE && rm $DAEMON_PIDFILE
-test -e $CHROOT_PREFIX/$DAEMON_PIDFILE && ! test -s 
$CHROOT_PREFIX/$DAEMON_PIDFILE && rm $CHROOT_PREFIX/$DAEMON_PIDFILE
+test -e $DAEMON_STATE/$DAEMON_PIDFILE && ! test -s 
$DAEMON_STATE/$DAEMON_PIDFILE && rm $DAEMON_STATE/$DAEMON_PIDFILE
 
 case "$1" in
     start)
@@ -244,33 +249,33 @@
                ## the chroot jail. Therefore, and old pid file may exist. This 
is only a problem if it 
                ## incidentally contains the pid of a running process. If this 
process is not a 'dhcpd', 
                ## we remove the pid. (dhcpd itself only checks whether the pid 
is alive or not.)
-               if test -e $CHROOT_PREFIX/$DAEMON_PIDFILE -a -s 
$CHROOT_PREFIX/$DAEMON_PIDFILE; then
-                       p=$(<$CHROOT_PREFIX/$DAEMON_PIDFILE)
+               if test -s $DAEMON_STATE/$DAEMON_PIDFILE; then
+                       p=$(<$DAEMON_STATE/$DAEMON_PIDFILE)
                        if test -n "$p" && grep -qsE "^${DAEMON_BIN}" 
"/proc/$p/cmdline" ; then
                                echo -n '(already running) '
                        else
-                               rm $CHROOT_PREFIX/$DAEMON_PIDFILE
+                               rm -f $DAEMON_STATE/$DAEMON_PIDFILE
                        fi
                fi
+               PID_FILE_ARG="$DAEMON_PIDFILE"
        else
                DHCPD_ARGS="-lf ${DAEMON_STATE}/db/$DAEMON_LEASES"
+               PID_FILE_ARG="$DAEMON_STATE$DAEMON_PIDFILE"
        fi
 
        if [ -n "$DHCPD_RUN_AS" ]; then
                DHCPD_RUN_AS_GROUP="$(getent group $(getent passwd 
$DHCPD_RUN_AS | cut -d: -f4) | cut -d: -f1)"
                DHCPD_ARGS="$DHCPD_ARGS -user $DHCPD_RUN_AS -group 
$DHCPD_RUN_AS_GROUP"
 
-               if test "$DHCPD_RUN_CHROOTED" = "yes" ; then
-                       chown   "${DHCPD_RUN_AS}:${DHCPD_RUN_AS_GROUP}" \
-                               "$CHROOT_PREFIX/${DAEMON_PIDFILE%/*}"
-               fi
+               chown   "${DHCPD_RUN_AS}:${DHCPD_RUN_AS_GROUP}" \
+                       "$DAEMON_STATE/${DAEMON_PIDFILE%/*}"
        fi
 
 
        ## check syntax with -t (output to log file) and start only when the 
syntax is okay
        rm -f $STARTPROC_LOGFILE # start log
        error=0
-       if ! $DAEMON_BIN $DHCPDv_OPT -t -cf $CHROOT_PREFIX/$DAEMON_CONF -pf 
$DAEMON_PIDFILE > $STARTPROC_LOGFILE 2>&1 ; then
+       if ! $DAEMON_BIN $DHCPDv_OPT -t -cf $CHROOT_PREFIX/$DAEMON_CONF -pf 
$PID_FILE_ARG > $STARTPROC_LOGFILE 2>&1 ; then
                error=1
        else
                ## Start daemon. If this fails the return value is set 
appropriate.
@@ -278,17 +283,20 @@
                ## to match the LSB spec.
 
                test "$2" = "-v" && echo -en \
-                       "\nexecuting '$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF 
-pf $DAEMON_PIDFILE $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE'"
+                       "\nexecuting '$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF 
-pf $PID_FILE_ARG $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE'"
 
-               $DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $DAEMON_PIDFILE 
$DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
+               $DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $PID_FILE_ARG 
$DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
                ret=$?
        fi      
-       
-       if [ $error -gt 0 -o ${ret:-0} -gt 0 ]; then 
-               cat $STARTPROC_LOGFILE 
+
+       if [ $error -gt 0 -o ${ret:-0} -gt 0 ]; then
+               ## be verbose
+               echo ""
+               echo -n "  please see $STARTPROC_LOGFILE for details "
                ## set status to failed
                rc_failed
        else
+               ln -sf "$DAEMON_STATE$DAEMON_PIDFILE" "$DAEMON_PIDFILE"
                [ "$DHCPD_RUN_CHROOTED" = "yes" ] && echo -n "[chroot]" || :
        fi
 
@@ -298,14 +306,29 @@
     stop)
        echo -n "Shutting down $DAEMON "
 
+       # Catch the case where daemon is running without chroot,
+       # but sysconfig/dhcp has been changed to use chroot (and
+       # another way around).
+       # In this case is there is no $chroot/$pidfile, but there
+       # should be a /pidfile that we use instead.
+       # We can not kill without pid file or dhcp4 kills dhcp6.
+       PID_FILE="$DAEMON_STATE$DAEMON_PIDFILE"
+       if test "$DHCPD_RUN_CHROOTED" = "yes" ; then
+               if test ! -s "$DAEMON_STATE$DAEMON_PIDFILE" -a \
+                         -s "$DAEMON_PIDFILE" ; then
+                       PID_FILE="$DAEMON_PIDFILE"
+               fi
+       else
+               if test ! -s "$DAEMON_PIDFILE" -a \
+                         -s "$DAEMON_STATE$DAEMON_PIDFILE" ; then
+                       PID_FILE="$DAEMON_STATE$DAEMON_PIDFILE"
+               fi
+       fi
+
        ## Stop daemon with killproc(8) and if this fails
        ## set echo the echo return value.
-
-       killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -TERM $DAEMON_BIN
+       killproc -p "$PID_FILE" $DAEMON_BIN
        ret=$?
-       if test -s $CHROOT_PREFIX/$DAEMON_PIDFILE; then 
-               kill $(<$CHROOT_PREFIX/$DAEMON_PIDFILE) 2>/dev/null
-       fi
 
        # umount proc and remove libraries from the chroot jail,
        # so they are not left over if the server is deinstalled
@@ -349,8 +372,8 @@
        echo -n "Reload service $DAEMON"
 
        if [ "$SUPPORTS_HUP" = "yes" ]; then 
-               killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
-               #touch $CHROOT_PREFIX/$DAEMON_PIDFILE
+               killproc -p $DAEMON_STATE/$DAEMON_PIDFILE -HUP $DAEMON_BIN
+               #touch $DAEMON_STATE/$DAEMON_PIDFILE
                rc_status -v
        else
                $0 stop  &&  sleep 3  &&  $0 start
@@ -364,8 +387,8 @@
        echo -n "Reload service $DAEMON"
        if [ "$SUPPORTS_HUP" = "yes" ]; then
                # If it supports signalling:
-               killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
-               #touch $CHROOT_PREFIX/$DAEMON_PIDFILE
+               killproc -p $DAEMON_STATE/$DAEMON_PIDFILE -HUP $DAEMON_BIN
+               #touch $DAEMON_STATE/$DAEMON_PIDFILE
                rc_status -v
        else
                ## Otherwise if it does not support reload:
@@ -385,7 +408,7 @@
        # 3 - service not running
 
        # NOTE: checkproc returns LSB compliant status values.
-       checkproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE $DAEMON_BIN
+       checkproc -p $DAEMON_STATE/$DAEMON_PIDFILE $DAEMON_BIN
        rc_status -v
        ;;
     probe)
@@ -394,7 +417,7 @@
 
        rc=0
        for i in /etc/sysconfig/dhcpd $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES; do
-               test $i -nt $CHROOT_PREFIX/$DAEMON_PIDFILE && rc=1
+               test $i -nt $DAEMON_STATE/$DAEMON_PIDFILE && rc=1
        done
        test $rc = 1 && echo restart
        ;;


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to