SHA256
1
0
forked from pool/dhcp

Updating link to change in openSUSE:Factory/dhcp revision 33.0

OBS-URL: https://build.opensuse.org/package/show/network:dhcp/dhcp?expand=0&rev=3e128ea1dfe1f438c5c539850885a0ad
This commit is contained in:
OBS User buildservice-autocommit 2010-05-13 22:27:05 +00:00 committed by Git OBS Bridge
parent 9446034797
commit 34a5dc1e28
48 changed files with 2291 additions and 2291 deletions

View File

@ -1,5 +1,5 @@
## Name: DHCP Server
## Description: Opens ports for ISC DHCP Server.
## Name: DHCPv4 Server
## Description: Opens ports for ISC DHCPv4 4.x Server.
#
# For a more detailed description of the individual variables see
# the comments for FW_SERVICES_*_EXT in /etc/sysconfig/SuSEfirewall2

35
clearip
View File

@ -1,35 +0,0 @@
#! /usr/bin/perl
#
# Author: Kevin C. Miller <kevinm@andrew.cmu.edu>
# http://www.andrew.cmu.edu/~kevinm/dhcp/failover.html
#
# The copyright is with the author. We (SuSE) include this script
# with his permission.
#
# NOTE: you have to edit this script to make it functional for you.
use Expect;
if ($#ARGV == -1 ) {
print "Usage: $0 [IP to reset] [server to reset on]\n";
print "In most cases only one server needs to have the IP reset\n";
print "and it generates the updates to get things in sync.\n";
exit 1;
}
# Fill in your OMAPI key
my $KEY = "";
my $con = Expect->spawn("omshell");
$con->send("key defomapi $KEY\n");
$con->send("server $ARGV[1]\n");
$con->send("connect\n");
sleep(1);
$con->send("new lease\nset ip-address = $ARGV[0]\n");
sleep(1);
$con->send("open\n");
$con->send("set state = 1\n");
$con->send("update\n");
sleep(2);

3
contrib.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:699a861ef8be1a62fe1efa802ae71d9045b55bfc61b4cd76c34f94e47be4952e
size 8333

624
dhclient-script Normal file
View File

@ -0,0 +1,624 @@
#!/bin/bash
#
# Copyright (C) 2010 SUSE LINUX Products GmbH / Novell Inc.
#
# Author: Marius Tomaschewski <mt@suse.de>
#
# /sbin/dhclient-script for openSUSE / SUSE Linux Enterprise Server
# based on the scripts shipped with the ISC DHCP (4.1.1) client.
#
# Note:
# It is used by sysconfig alias netcontrol alias ifup-dhcp,
# but not by the NetworkManager that is using an own script.
#
##
## check mandatory parameters or ignore & exit
##
test "x$reason" = x -o "x$interface" = x && exit 1
#
# source sysconfig functions
#
SYSCONFIG_CFG_DIR="/etc/sysconfig/network"
. "$SYSCONFIG_CFG_DIR/scripts/functions"
SYSCONFIG_RUN_DIR=${SYSCONFIG_RUN_DIR:-/dev/.sysconfig/network}
#
# Debugging:
# logs entire run of dhclient-script to /var/log/${dhclient}-script.*.log,
# when DHCLIENT_DEBUG/DHCLIENT6_DEBUG are "yes" in sysconfig/network/dhcp
#
eval `grep '^DHCLIENT6\?_DEBUG=' "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null`
case $reason in
*6) DEBUG=$DHCLIENT6_DEBUG ; dhclient=dhclient6 ; ipver=6 ;;
*) DEBUG=$DHCLIENT_DEBUG ; dhclient=dhclient ; ipver=4 ;;
esac
if [ "$DEBUG" = yes ]; then
set -a # allexport
(
echo '****************'
echo "$0 $*"
date
echo '----------------'
env
echo '----------------'
) >> /var/log/${dhclient}-script.$interface.log
exec 2>> /var/log/${dhclient}-script.$interface.log
set +a
set -x
fi
is_ifup_controlled()
{
test -f "$SYSCONFIG_RUN_DIR/if-${interface}"
}
# netconfig makes all "additional" modifications as DNS or NTP
netconfig_modify() {
if test -x /sbin/netconfig -a -n "$interface" ; then
{
echo "INTERFACE='$interface'"
for v in ${!new_*}; do
case $ipver in
6)
case $v in
(new_ip6_address) k='IPADDR' ;;
(new_ip6_prefixlen) k='PREFIXLEN' ;;
(new_dhcp6_client_id) k='DHCP6CID' ;;
(new_dhcp6_server_id) k='DHCP6SID' ;;
(new_dhcp6_domain_search) k='DNSSEARCH' ;;
(new_dhcp6_name_servers) k='DNSSERVERS' ;;
(*) k="dhclient6_${v#new_}" ;;
esac
;;
4)
case $v in
(new_ip_address) k='IPADDR' ;;
(new_subnet_mask) k='NETMASK' ;;
(new_network_number) k='NETWORK' ;;
(new_broadcast_address) k='BROADCAST' ;;
(new_interface_mtu) k='MTU' ;;
(new_rfc3442_classless_static_routes)
k='ROUTES' ;;
# (new_static_routes) k='ROUTES' ;;
(new_routers) k='GATEWAYS' ;;
(new_host_name) k='HOSTNAME' ;;
(new_domain_search) k='DNSSEARCH' ;;
(new_domain_name) k='DNSDOMAIN' ;;
(new_domain_name_servers) k='DNSSERVERS' ;;
(new_ntp_servers) k='NTPSERVERS' ;;
(new_nis_domain) k='NISDOMAIN' ;;
(new_nis_servers) k='NISSERVERS' ;;
(new_root_path) k='ROOTPATH' ;;
(new_dhcp_server_identifier)k='DHCPSID' ;;
(new_lpr_servers) k='LPRSERVER' ;;
(new_log_servers) k='LOGSERVER' ;;
(new_netbios_dd_server) k='NETBIOSDDSERVER' ;;
(new_netbios_name_servers) k='NETBIOSNAMESERVER' ;;
(new_netbios_node_type) k='NETBIOSNODETYPE' ;;
(new_netbios_scope) k='NETBIOSSCOPE' ;;
(*) k="dhclient_${v#new_}" ;;
esac
esac
[ "k${k}" != k ] && echo "${k}='${!v}'"
done
} | /sbin/netconfig modify -s "dhclient$ipver" -i "$interface"
fi
}
netconfig_remove() {
if test -x /sbin/netconfig -a -n "$interface" ; then
/sbin/netconfig remove -s "dhclient$ipver" -i "$interface" </dev/null
fi
}
parse_ipv4_classless_routes()
{
local route_regex='^[0-9]{1,3}([ ][0-9]{1,3}){4,}$'
local rfc_routes=() _routes=()
# check whether it is a list of numbers
[[ $* =~ $route_regex ]] && rfc_routes=($*)
for (( i=0; i < ${#rfc_routes[@]}; )) ; do
net_length=${rfc_routes[$i]}
test $net_length -gt 32 && return 1
((i++))
net_octets=$(($net_length / 8 + ($net_length % 8 ? 1 : 0)))
test ${#rfc_routes[@]} -lt $(( $i + $net_octets + 4 )) && \
return 1
net_netmask=$(pfxlen2mask $net_length)
net_netmask=(${net_netmask//./ })
net_address=(0 0 0 0)
for(( j=0; j < $net_octets; j++, i++)); do
net_address[$j]=$((${rfc_routes[$i]} & ${net_netmask[$j]}))
done
gateway=(0 0 0 0)
for (( j=0; j < 4; j++, i++ )); do
gateway[$j]=${rfc_routes[$i]}
done
old_IFS=$IFS
IFS='.'
_routes+=("${net_address[*]},${net_netmask[*]},${gateway[*]}")
IFS=$old_IFS
done
echo "${_routes[*]}"
return 0
}
set_ipv4_route()
{
local dest=$1 ; shift
local mask=$1 ; shift
local gate=("$@")
local hops args
hops=()
if [ ${#gate[@]} -gt 1 ] ; then
for((g=0; g<${#gate[@]}; g++)) ; do
hops+=(nexthop ${gate[$g]:+via ${gate[$g]}}
dev $interface weight $((g+1)))
done
elif [ ${#gate[@]} -gt 0 ] ; then
hops+=(${gate[$g]:+via ${gate[$g]}} dev $interface)
fi
[ ${#hops[@]} -eq 0 ] && hops=(dev $interface)
args=("$dest${mask:+/$mask}" $metric_arg ${hops[*]})
err=`LC_ALL=C /sbin/ip route replace ${args[*]} 2>&1` && return 0
case $err in
RTNETLINK*answers:*File*exists) ;;
RTNETLINK*answers:*No*such*process)
#
# The gateway seems to be not reachable via local network
# route (implicitly created by ifconfig based on the IP
# and netmask provided by dhcp).
# Check this, set an explicit host route to the gateway
# over the current interface and try again (bnc#266215).
#
retry=0
for router in ${gate[@]} ; do
matches=$(/sbin/ip -f inet -o route list match $router | \
grep -v ^default | grep -c -v "^$" 2>/dev/null)
if [ -n "$matches" -a $(($matches)) -eq 0 ] ; then
LC_ALL=C /sbin/ip route add $router/32 dev $interface || retry=1
fi
done
if [ $retry -eq 0 ] ; then
LC_ALL=C /sbin/ip route replace ${args[*]} && return 0
fi
;;
esac
return 1
}
get_ipv4_default_gw()
{
if [ "x$new_rfc3442_classless_static_routes" != x ] ; then
local r route=() gw=()
for r in $new_rfc3442_classless_static_routes ; do
route=(${r//,/ })
case ${route[0]}/${route[1]} in
0.0.0.0/0.0.0.0)
[ "x${route[2]}" = "x0.0.0.0" ] || \
gw+=(${route[2]})
;;
esac
done
echo "${gw[*]}"
elif [ "$new_routers" != x ] ; then
echo "$new_routers"
fi
}
set_ipv4_routes()
{
if [ "x$new_rfc3442_classless_static_routes" != x ] ; then
local r route=()
# TODO: multiple gw's to one dest as in $new_routers?
for r in $new_rfc3442_classless_static_routes ; do
route=(${r//,/ })
case ${route[0]}/${route[1]} in
0.0.0.0/0.0.0.0)
[ "x$DHCLIENT_SET_DEFAULT_ROUTE" = xyes ] || continue ;;
esac
set_ipv4_route ${route[*]}
done
elif [ "$new_routers" != x ] ; then
if [ "x$DHCLIENT_SET_DEFAULT_ROUTE" = xyes ] ; then
set_ipv4_route default "" $new_routers
fi
fi
}
set_ipv6_routes()
{
: TODO
}
set_hostname()
{
if [ "$DHCLIENT_SET_HOSTNAME" = yes ] ; then
current_hostname=`hostname`
if [ "x${current_hostname%%.*}" = "x" ] || \
[ "x${current_hostname%%.*}" = "x(none)" ] || \
[ "x${current_hostname%%.*}" = "xlocalhost" ] || \
[ "x${current_hostname%%.*}" != "x${new_host_name%%.*}" ]; then
if [ "x${new_host_name%%.*}" != "x" ]; then
hostname "${new_host_name%%.*}"
else
if [ -x /usr/bin/host ] ; then
if out=`host -W 2 "$new_ip_address" 2>/dev/null` ; then
_hostname="`echo "$out" | sed 's:^.* ::; s:\..*::'`"
if [ "x${_hostname}" != "x" -a \
"x${_hostname}" != "x${current_hostname%%.*}" ]; then
hostname "${_hostname}"
fi
fi
fi
fi
fi
fi
if is_ifup_controlled ; then
# check regardless the DHCLIENT_SET_HOSTNAME setting
# and whether we've set it above or not, because when
# it changed, we've to handle it anyway...
local OLD_HOSTNAME=`read_cached_config_data hostname $interface`
local CUR_HOSTNAME=`hostname 2>/dev/null`
if test "x$OLD_HOSTNAME" != "x$CUR_HOSTNAME" ; then
write_cached_config_data hostname "$CUR_HOSTNAME" $interface
commit_cached_config_data $interface
# reload syslog so it knows the new hostname
/etc/init.d/syslog reload
fi
fi
}
# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
exit_with_hooks() {
exit_status=$1
if [ -f /etc/${dhclient}-exit-hooks ]; then
. /etc/${dhclient}-exit-hooks
fi
# probably should do something with exit status of the local script
exit $exit_status
}
# Invoke the local dhcp client enter hooks, if they exist.
if [ -f /etc/${dhclient}-enter-hooks ]; then
exit_status=0
. /etc/${dhclient}-enter-hooks
# allow the local script to abort processing of this state
# local script must set exit_status variable to nonzero.
if [ $exit_status -ne 0 ]; then
exit $exit_status
fi
fi
case $dhclient in
dhclient)
if is_ifup_controlled ; then
# STARTMODE
eval `grep --no-filename \
'^[[:space:]]*STARTMODE=' \
"$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
tmp_startmode=`read_cached_config_data startmode $INTERFACE`
[ -n "$tmp_startmode" ] && STARTMODE="$tmp_startmode"
# DHCLIENT_SET_HOSTNAME and DHCLIENT_SET_DEFAULT_ROUTE
if grep -qs '^primary=yes' "$SYSCONFIG_RUN_DIR/if-${interface}" 2>/dev/null ;
then
eval `grep --no-filename \
'^[[:space:]]*DHCLIENT_SET_\(HOSTNAME\|DEFAULT_ROUTE\)=' \
"$SYSCONFIG_CFG_DIR/dhcp"
"$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
else
eval `grep --no-filename \
'^[[:space:]]*DHCLIENT_SET_\(HOSTNAME\|DEFAULT_ROUTE\)=' \
"$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
fi
else
STARTMODE=manual
eval `grep --no-filename \
'^[[:space:]]*DHCLIENT_SET_\(HOSTNAME\|DEFAULT_ROUTE\)=' \
"$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null`
fi
if [ "x$new_rfc3442_classless_static_routes_raw" != x ] ; then
new_rfc3442_classless_static_routes=$(
parse_ipv4_classless_routes $new_rfc3442_classless_static_routes_raw
)
else
unset new_rfc3442_classless_static_routes
fi
if [ x$new_broadcast_address != x ] ; then
new_broadcast_arg="brd $new_broadcast_address"
elif [ "x$new_subnet_mask" != "x255.255.255.255" ] ; then
new_broadcast_arg="brd +"
fi
if [ x$new_interface_mtu != x -a \
$(( $new_interface_mtu )) -lt 576 ] ;
then
# 68 is the minimal legal value, but 576 the real life minimum
unset new_interface_mtu
fi
if [ x$IF_METRIC != x ]; then
metric_arg="metric $IF_METRIC"
fi
;;
dhclient6)
if is_ifup_controlled ; then
# STARTMODE
eval `grep --no-filename \
'^[[:space:]]*STARTMODE=' \
"$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
tmp_startmode=`read_cached_config_data startmode $INTERFACE`
[ -n "$tmp_startmode" ] && STARTMODE="$tmp_startmode"
else
STARTMODE=manual
fi
;;
esac
case $reason in
######################################################################
## DHCPv4 #
######################################################################
MEDIUM)
####################################################################
exit_with_hooks 0
;;
PREINIT)
####################################################################
if [ "x$alias_ip_address" != x ]; then
/sbin/ip addr del $alias_ip_address/$alias_subnet_mask dev $interface
fi
if [ "x$STARTMODE" != "xnfsroot" ] ; then
/sbin/ip -4 addr flush dev $interface
fi
/sbin/ip link set $interface up
# We need to give the kernel some time to get the interface up.
sleep 1
exit_with_hooks 0
;;
ARPCHECK|ARPSEND)
####################################################################
exit_with_hooks 0
;;
BOUND|RENEW|REBIND|REBOOT)
####################################################################
if [ x$old_ip_address != x -a x$alias_ip_address != x ] && \
[ x$alias_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
fi
if [ x$old_ip_address != x -a x$old_ip_address != x$new_ip_address ]; then
# IP address changed. Flush to clear routes and ARP cache.
if [ "x$STARTMODE" != "xnfsroot" ] ; then
/sbin/ip -4 addr flush dev $interface
fi
fi
if [ x$new_interface_mtu != x ] ; then
/sbin/ip link set $interface mtu $new_interface_mtu
fi
if [ x$new_ip_address != x ] && \
[ x$new_ip_address != x$old_ip_address -o \
x$reason = xBOUND -o x$reason = xREBOOT ]; then
/sbin/ip addr add $new_ip_address/${new_subnet_mask:-32} \
${new_broadcast_arg} \
dev $interface
set_ipv4_routes
fi
if [ x$new_ip_address != x$alias_ip_address -a x$alias_ip_address != x ];
then
/sbin/ip addr add $alias_ip_address/$alias_subnet_mask \
dev $interface
fi
netconfig_modify
if [ x$old_ip_address != x -a x$old_ip_address != x$new_ip_address ]; then
if is_ifup_controlled ; then
ifdown $interface -o dhcp
write_cached_config_data dhcp4_state "new" $interface
commit_cached_config_data $interface
fi
else
if is_ifup_controlled ; then
write_cached_config_data dhcp4_state "up" $interface
commit_cached_config_data $interface
fi
fi
set_hostname
if is_ifup_controlled ; then
# execute ifservice and if-up.d scripts
ifup $interface -o dhcp
write_cached_config_data dhcp4_state "complete" $interface
commit_cached_config_data $interface
fi
exit_with_hooks 0
;;
EXPIRE|FAIL|RELEASE|STOP)
####################################################################
if [ x$old_ip_address != x ]; then
if [ "x$STARTMODE" != "xnfsroot" ] ; then
/sbin/ip -4 addr flush dev $interface
fi
fi
if [ x$alias_ip_address != x ]; then
/sbin/ip addr add $alias_ip_address/$alias_subnet_mask \
dev $interface
fi
if is_ifup_controlled ; then
write_cached_config_data dhcp4_state "down" $interface
commit_cached_config_data $interface
fi
netconfig_remove
exit_with_hooks 0
;;
TIMEOUT)
####################################################################
if [ x$alias_ip_address != x ]; then
/sbin/ip addr del $alias_ip_address/$alias_subnet_mask \
dev $interface
fi
if [ x$new_ip_address != x -a x$old_ip_address != x$new_ip_address ];
then
/sbin/ip addr add $new_ip_address/${new_subnet_mask:-32} \
${new_broadcast_arg} \
dev $interface
set -- $(get_ipv4_default_gw)
if [ -n "$1" ] && /sbin/arping -q -c 1 -w 5 -I $interface $1 ;
then
if [ x$new_ip_address != x$alias_ip_address ] && \
[ x$alias_ip_address != x ]; then
/sbin/ip addr add $alias_ip_address/$alias_subnet_arg
fi
set_ipv4_routes
netconfig_modify
set_hostname
if is_ifup_controlled ; then
# execute ifservice and if-up.d scripts
ifup $interface -o dhcp
write_cached_config_data dhcp4_state "complete" $interface
commit_cached_config_data $interface
fi
exit_with_hooks 0
else
if [ x$old_ip_address != x ]; then
if [ "x$STARTMODE" != "xnfsroot" ] ; then
/sbin/ip -4 addr flush dev $interface
fi
fi
if is_ifup_controlled ; then
write_cached_config_data dhcp4_state "down" $interface
commit_cached_config_data $interface
fi
netconfig_remove
exit_with_hooks 1
fi
fi
;;
######################################################################
## DHCPv6 #
######################################################################
PREINIT6)
####################################################################
if [ "x$STARTMODE" != "xnfsroot" ] ; then
/sbin/ip -6 addr flush dev $interface scope global permanent
fi
/sbin/ip link set $interface up
# We need to give the kernel some time to get the interface up.
sleep 1
exit_with_hooks 0
;;
BOUND6|RENEW6|REBIND6|REBOOT6)
####################################################################
if [ x$old_ip6_address != x -a x$old_ip6_address != x$new_ip6_address ];
then
/sbin/ip addr del "$old_ip6_address/$old_ip6_prefixlen" dev $interface
if is_ifup_controlled ; then
write_cached_config_data dhcp6_state "new" $interface
commit_cached_config_data $interface
fi
else
if is_ifup_controlled ; then
write_cached_config_data dhcp6_state "up" $interface
commit_cached_config_data $interface
fi
fi
if [ "x$new_ip6_address" != x -a "x$new_ip6_prefixlen" != x ] ; then
/sbin/ip addr add "$new_ip6_address/$new_ip6_prefixlen" \
dev $interface scope global
set_ipv6_routes
fi
netconfig_modify
if [ x$old_ip6_address != x -a x$old_ip6_address != x$new_ip_address ];
then
if is_ifup_controlled ; then
/sbin/ifdown $interface -o dhcp
fi
fi
#set_hostname
if is_ifup_controlled ; then
# execute ifservice and if-up.d scripts
/sbin/ifup $interface -o dhcp
write_cached_config_data dhcp6_state "complete" $interface
commit_cached_config_data $interface
fi
exit_with_hooks 0
;;
DEPREF6)
####################################################################
if [ x$new_ip6_address = x -o x$new_ip6_prefixlen = x ] ; then
exit_with_hooks 2
fi
/sbin/ip addr change "$new_ip6_address/$new_ip6_prefixlen" \
dev $interface scope global preferred_lft 0
exit_with_hooks 0
;;
EXPIRE6|RELEASE6|STOP6)
####################################################################
if [ x$old_ip6_address != x -a x$old_ip6_prefixlen != x ] ; then
/sbin/ip addr del "$old_ip6_address/$old_ip6_prefixlen" \
dev $interface
fi
if is_ifup_controlled ; then
write_cached_config_data dhcp6_state "down" $interface
commit_cached_config_data $interface
fi
netconfig_remove
exit_with_hooks 0
;;
esac
exit_with_hooks 0

57
dhclient.conf Normal file
View File

@ -0,0 +1,57 @@
#
# /etc/dhclient.conf -- dhclient configuration file
# See "man dhclient.conf" for further details
#
######################################################
# Sometimes, a special configuration is required for
# e.g. Cable Modem providers (@Home -- TCI).
# For example, it may be required to send out a special
# dhcp-client-identifier or to override some settings.
#
# Uncomment and fill in the appropriate settings:
#
#send dhcp-client-identifier "c32423-a"
# or as hex octets
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#
# Note, that hostname is usually send using -H option.
#send host-name "andare.fugue.com";
#
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
#
#####################################################
# uncomment to request a specific lease time, otherwise
# the dhcp server will provide its default lease time:
#send dhcp-lease-time 3600;
#
# define classless static route option
#
option rfc3442-classless-static-routes_raw code 121 = array of unsigned integer 8;
# Request several well known/usefull dhcp options.
request subnet-mask, broadcast-address, routers,
rfc3442-classless-static-routes_raw,
interface-mtu, host-name, domain-name,
domain-name-servers, nis-domain, nis-servers,
nds-context, nds-servers, nds-tree-name,
netbios-name-servers, netbios-dd-server,
netbios-node-type, netbios-scope, ntp-servers;
# We request above options, require only the IP configuration:
require subnet-mask;
# All another options (DNS, NTP, NIS, ...) are applied using
# netconfig(8) modules.
# To enforce the availability of the dns server list, set to:
#require subnet-mask, domain-name-servers;
timeout 60;
retry 60;
reboot 10;
select-timeout 5;
initial-interval 2;

9
dhclient6.conf Normal file
View File

@ -0,0 +1,9 @@
# Client configuration file example for DHCPv6
# The client side command to enable rapid-commit (2 packet exchange)
##send dhcp6.rapid-commit;
# name-servers and domain-search are requested by default.
# here is the way to request sip-servers-addresses too
also request dhcp6.sip-servers-addresses;

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:75faa831bcd8594c621ab48aacf0ae55f676facf205d7e0059f2a0216ac0030a
size 626100

View File

@ -1,81 +0,0 @@
--- client/dhclient.conf
+++ client/dhclient.conf 2008/11/11 09:12:22
@@ -1,36 +1,48 @@
-send host-name "andare.fugue.com";
-send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
+#
+# /etc/dhclient.conf -- dhclient configuration file
+# see "man dhclient.conf" for further details
+#
+
+######################################################
+# Sometimes, a special configuration is required for
+# e.g. Cable Modem providers (@Home -- TCI).
+# For example, it may be required to send out a special
+# dhcp-client-identifier or to override some settings.
+#
+# Uncomment and fill in the appropriate settings:
+#
+#send dhcp-client-identifier "c32423-a"
+# or as hex octets
+#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
+#
+#send host-name "andare.fugue.com";
+#
+#supersede domain-name "fugue.com home.vix.com";
+#prepend domain-name-servers 127.0.0.1;
+#
+#####################################################
+
send dhcp-lease-time 3600;
-supersede domain-name "fugue.com home.vix.com";
-prepend domain-name-servers 127.0.0.1;
-request subnet-mask, broadcast-address, time-offset, routers,
- domain-name, domain-name-servers, host-name;
-require subnet-mask, domain-name-servers;
+
+# Request several well known/usefull dhcp options.
+request subnet-mask, broadcast-address, routers,
+ interface-mtu, host-name, domain-name,
+ domain-name-servers, nis-domain, nis-servers,
+ nds-context, nds-servers, nds-tree-name,
+ netbios-name-servers, netbios-dd-server,
+ netbios-node-type, netbios-scope, ntp-servers;
+
+# We request above options, require only the IP configuration:
+require subnet-mask;
+# All another options (DNS, NTP, NIS, ...) are applied using
+# netconfig(8) modules.
+
+# To enforce the availability of the dns server list, set to:
+#require subnet-mask, domain-name-servers;
+
timeout 60;
retry 60;
reboot 10;
select-timeout 5;
initial-interval 2;
-script "/etc/dhclient-script";
-media "-link0 -link1 -link2", "link0 link1";
-reject 192.33.137.209;
-
-alias {
- interface "ep0";
- fixed-address 192.5.5.213;
- option subnet-mask 255.255.255.255;
-}
-
-lease {
- interface "ep0";
- fixed-address 192.33.137.200;
- medium "link0 link1";
- option host-name "andare.swiftmedia.com";
- option subnet-mask 255.255.255.0;
- option broadcast-address 192.33.137.255;
- option routers 192.33.137.250;
- option domain-name-servers 127.0.0.1;
- renew 2 2000/1/12 00:00:01;
- rebind 2 2000/1/12 00:00:01;
- expire 2 2000/1/12 00:00:01;
-}
+

View File

@ -1,17 +0,0 @@
--- client/dhclient.c
+++ client/dhclient.c 2008/09/08 15:31:00
@@ -355,6 +355,14 @@ int main (argc, argv, envp)
/* Parse the dhclient.conf file. */
read_client_conf ();
+ /*
+ ** Override the script name definition in the config file
+ ** with the one provided as command line argument...:
+ */
+ if(no_dhclient_script) {
+ top_level_config.script_name = path_dhclient_script;
+ }
+
/* If the user specified a hostname, send it here and now */
if ((dhclient_hostname != NULL) && (*dhclient_hostname != '\0') ) {
struct parse *cfile = NULL;

View File

@ -1,26 +0,0 @@
--- dhcpctl/dhcpctl.3
+++ dhcpctl/dhcpctl.3 2008/09/08 10:02:38
@@ -425,8 +425,8 @@ that most error checking has been ommitt
#include <stdio.h>
#include <netinet/in.h>
-#include <isc/result.h>
-#include <dhcpctl/dhcpctl.h>
+#include <isc-dhcp/result.h>
+#include <dhcpctl.h>
int main (int argc, char **argv) {
dhcpctl_data_string ipaddrstring = NULL;
--- omapip/omapi.3
+++ omapip/omapi.3 2008/09/08 10:02:38
@@ -87,8 +87,8 @@ the lease ends.
#include <stdio.h>
#include <netinet/in.h>
- #include <isc/result.h>
- #include <dhcpctl/dhcpctl.h>
+ #include <isc-dhcp/result.h>
+ #include <dhcpctl.h>
int main (int argc, char **argv) {
dhcpctl_data_string ipaddrstring = NULL;

View File

@ -1,10 +0,0 @@
--- omapip/test.c
+++ omapip/test.c 2008/09/05 08:24:16
@@ -40,6 +40,7 @@
#include <isc-dhcp/result.h>
#include <sys/time.h>
#include <omapip/omapip.h>
+#include <string.h>
int main (int argc, char **argv)
{

View File

@ -1,170 +0,0 @@
--- server/dhcpd.c
+++ server/dhcpd.c 2008/09/05 08:22:38
@@ -47,6 +47,15 @@ static char url [] = "For info, please v
#include "version.h"
#include <omapip/omapip_p.h>
+#ifdef PARANOIA
+# include <errno.h>
+# include <pwd.h>
+/* get around the ISC's declaration of group */
+#define group real_group
+# include <grp.h>
+#undef group
+#endif
+
static void usage PROTO ((void));
struct iaddr server_identifier;
@@ -225,6 +234,15 @@ int main (argc, argv, envp)
char *traceinfile = (char *)0;
char *traceoutfile = (char *)0;
#endif
+#ifdef PARANOIA
+ char *set_user = NULL;
+ char *set_group = NULL;
+ char *set_chroot = NULL;
+
+ uid_t set_uid = 0;
+ gid_t set_gid = 0;
+#endif
+
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
2 (stderr) are open. To do this, we assume that when we
@@ -286,6 +304,20 @@ int main (argc, argv, envp)
daemon = 0;
#endif
log_perror = -1;
+#ifdef PARANOIA
+ } else if (!strcmp (argv [i], "-user")) {
+ if (++i == argc)
+ usage ();
+ set_user = argv [i];
+ } else if (!strcmp (argv [i], "-group")) {
+ if (++i == argc)
+ usage ();
+ set_group = argv [i];
+ } else if (!strcmp (argv [i], "-chroot")) {
+ if (++i == argc)
+ usage ();
+ set_chroot = argv [i];
+#endif
} else if (!strcmp (argv [i], "-s")) {
if (++i == argc)
usage ();
@@ -347,7 +379,7 @@ int main (argc, argv, envp)
log_fatal ("Insufficient memory to %s %s: %s",
"record interface", argv [i],
isc_result_totext (result));
- strcpy (tmp -> name, argv [i]);
+ strncpy (tmp -> name, argv [i], sizeof(tmp->name)-1);
if (interfaces) {
interface_reference (&tmp -> next,
interfaces, MDL);
@@ -412,6 +444,66 @@ int main (argc, argv, envp)
}
}
+#ifdef PARANOIA
+ /* get user and group info if those options were given */
+ if (set_user) {
+ struct passwd *tmp_pwd;
+
+ /*
+ ** I query for the real UID and not for the effective UID
+ ** just to force the user to run this server as root and
+ ** not setting it suid. It should be a paranoia patch and
+ ** not a teletubbie patch. *eg*
+ ** Note: That the user is still able to set it suid! *zitter*
+ ** thomas@suse.de
+ */
+ if (getuid())
+ error ("you must be root to set user");
+
+ if (!(tmp_pwd = getpwnam(set_user)))
+ error ("no such user: %s", set_user);
+
+ set_uid = tmp_pwd->pw_uid;
+
+ /* use the user's group as the default gid */
+ if (!set_group)
+ set_gid = tmp_pwd->pw_gid;
+
+ }
+
+ if (set_group) {
+/* get around the ISC's declaration of group */
+#define group real_group
+ struct group *tmp_grp;
+
+ /*
+ ** getuid() instead of geteuid(), see above
+ */
+ if (getuid())
+ error ("you must be root to set group");
+
+ if (!(tmp_grp = getgrnam(set_group)))
+ error ("no such group: %s", set_group);
+
+ set_gid = tmp_grp->gr_gid;
+#undef group
+ }
+
+ if (set_chroot) {
+ if (getuid()) /* see above */
+ error ("you must be root to use chroot");
+
+ if (chroot(set_chroot) != 0) {
+ error ("chroot(\"%s\"): %s", set_chroot,
+ strerror(errno));
+ }
+ if (chdir ("/") != 0) {
+ /* probably permission denied */
+ error ("chdir(\"/\"): %s", strerror(errno));
+ }
+ }
+#endif /* PARANOIA */
+
remote_port = htons (ntohs (local_port) + 1);
if (server) {
@@ -601,6 +693,27 @@ int main (argc, argv, envp)
omapi_set_int_value ((omapi_object_t *)dhcp_control_object,
(omapi_object_t *)0, "state", server_running);
+#ifdef PARANOIA
+ /* change uid to the specified one */
+
+ /*
+ ** common failure: forget to drop supplementary GID'S ;->
+ ** thomas@suse.de
+ */
+
+ if (set_gid) {
+ if(setgroups(0, NULL) < 0)
+ error("couldn't drop supplementary groups!");
+ if (setgid (set_gid) != 0)
+ error ("couldn't set gid to %d", set_gid);
+ }
+
+ if (set_uid) {
+ if (setuid (set_uid) != 0)
+ error ("couldn't set uid to %d", set_uid);
+ }
+#endif
+
/* Receive packets and dispatch them... */
dispatch ();
@@ -879,6 +992,10 @@ static void usage ()
log_fatal ("Usage: dhcpd [-p <UDP port #>] [-d] [-f]%s%s%s%s",
"\n [-cf config-file] [-lf lease-file]",
+#ifdef PARANOIA
+ "\n [-user <user>] [-group <group>]",
+ "\n [-chroot <dir>]",
+#endif
#if defined (TRACING)
"\n [-tf trace-output-file]",
"\n [-play trace-input-file]",

View File

@ -1,148 +0,0 @@
--- includes/cf/linux.h
+++ includes/cf/linux.h 2008/09/08 09:56:54
@@ -75,7 +75,7 @@ extern int h_errno;
#include <sys/time.h> /* gettimeofday()*/
-/* Databases go in /var/state/dhcp. It would also be valid to put them
+/* Databases go in /var/lib/dhcp. It would also be valid to put them
in /var/state/misc - indeed, given that there's only one lease file, it
would probably be better. However, I have some ideas for optimizing
the lease database that may result in a _lot_ of smaller files being
@@ -83,11 +83,11 @@ extern int h_errno;
directory. */
#ifndef _PATH_DHCPD_DB
-#define _PATH_DHCPD_DB "/var/state/dhcp/dhcpd.leases"
+#define _PATH_DHCPD_DB "/var/lib/dhcp/db/dhcpd.leases"
#endif
#ifndef _PATH_DHCLIENT_DB
-#define _PATH_DHCLIENT_DB "/var/state/dhcp/dhclient.leases"
+#define _PATH_DHCLIENT_DB "/var/lib/dhcp/dhclient.leases"
#endif
/* Varargs stuff... */
--- includes/dhcpd.h
+++ includes/dhcpd.h 2008/09/08 09:56:54
@@ -1062,7 +1062,7 @@ typedef unsigned char option_mask [16];
#endif
#ifndef _PATH_DHCPD_DB
-#define _PATH_DHCPD_DB "/etc/dhcpd.leases"
+#define _PATH_DHCPD_DB "/var/lib/dhcp/db/dhcpd.leases"
#endif
#ifndef _PATH_DHCPD_PID
@@ -1083,7 +1083,7 @@ typedef unsigned char option_mask [16];
#endif
#ifndef _PATH_DHCLIENT_DB
-#define _PATH_DHCLIENT_DB "/etc/dhclient.leases"
+#define _PATH_DHCLIENT_DB "/var/run/dhclient.leases"
#endif
#ifndef _PATH_RESOLV_CONF
--- Makefile.conf
+++ Makefile.conf 2008/09/08 09:56:58
@@ -42,8 +42,10 @@ CATMANPAGES =
ETC = /etc
VARRUN = /var/run
VARDB = /var/db
-LIBDIR=/usr/local/lib
-INCDIR=/usr/local/include
+ifeq (${LIBDIR},)
+LIBDIR=/usr/lib
+endif
+INCDIR=/usr/include
LIBS =
COPTS = $(BINDDEF) $(CC_OPTIONS)
DEBUG = -g
@@ -277,17 +279,17 @@ MINORVERSION=MinorVersion
#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) \
# $(BINDDEF) $(CC_OPTIONS)
#CF = cf/linux.h
-#ADMMANDIR = /usr/man/man8
+#ADMMANDIR = /usr/share/man/man8
#ADMMANEXT = .8
-#FFMANDIR = /usr/man/man5
+#FFMANDIR = /usr/share/man/man5
#FFMANEXT = .5
-#LIBMANDIR = /usr/man/man3
+#LIBMANDIR = /usr/share/man/man3
#LIBMANEXT = .3
-#USRMANDIR = /usr/man/man1
+#USRMANDIR = /usr/share/man/man1
#USRMANEXT = .1
#MANCAT = man
#VARRUN = /var/run
-#VARDB = /var/state/dhcp
+#VARDB = /var/lib/dhcp
#SCRIPT=linux
##--linux-2.0--
@@ -296,17 +298,17 @@ MINORVERSION=MinorVersion
#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) \
# $(BINDDEF) $(CC_OPTIONS)
#CF = cf/linux.h
-#ADMMANDIR = /usr/man/man8
+#ADMMANDIR = /usr/share/man/man8
#ADMMANEXT = .8
-#FFMANDIR = /usr/man/man5
+#FFMANDIR = /usr/share/man/man5
#FFMANEXT = .5
-#LIBMANDIR = /usr/man/man3
+#LIBMANDIR = /usr/share/man/man3
#LIBMANEXT = .3
-#USRMANDIR = /usr/man/man1
+#USRMANDIR = /usr/share/man/man1
#USRMANEXT = .1
#MANCAT = man
#VARRUN = /var/run
-#VARDB = /var/state/dhcp
+#VARDB = /var/lib/dhcp
#SCRIPT=linux
##--linux-2.1--
@@ -315,20 +317,36 @@ MINORVERSION=MinorVersion
#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) \
# $(BINDDEF) $(CC_OPTIONS)
#CF = cf/linux.h
-#ADMMANDIR = /usr/man/man8
+#ADMMANDIR = /usr/share/man/man8
#ADMMANEXT = .8
-#FFMANDIR = /usr/man/man5
+#FFMANDIR = /usr/share/man/man5
#FFMANEXT = .5
-#LIBMANDIR = /usr/man/man3
+#LIBMANDIR = /usr/share/man/man3
#LIBMANEXT = .3
-#USRMANDIR = /usr/man/man1
+#USRMANDIR = /usr/share/man/man1
#USRMANEXT = .1
#MANCAT = man
#VARRUN = /var/run
-#VARDB = /var/state/dhcp
+#VARDB = /var/lib/dhcp
#SCRIPT=linux
##--linux-2.2--
+## Linux 2.4
+##--linux-2.4--
+#COPTS = -DLINUX_MAJOR=$(MAJORVERSION) -DLINUX_MINOR=$(MINORVERSION) $(BINDDEF)
+#CF = cf/linux.h
+#ADMMANDIR = /usr/share/man/man8
+#ADMMANEXT = .8
+#FFMANDIR = /usr/share/man/man5
+#FFMANEXT = .5
+#LIBMANDIR = /usr/share/man/man3
+#LIBMANEXT = .3
+#MANCAT = man
+#VARRUN = /var/run
+#VARDB = /var/lib/dhcp
+#SCRIPT=linux
+##--linux-2.4--
+
## SCO UnixWare 7
##--uw7--
#CF = cf/uw7.h

View File

@ -1,45 +0,0 @@
--- client/Makefile.dist
+++ client/Makefile.dist
@@ -128,6 +128,6 @@
dhclient: $(OBJS) $(DHCPLIB)
- $(CC) $(LFLAGS) -o $(PROG) $(OBJS) $(DHCPLIB) $(LIBS)
+ $(CC) $(LFLAGS) -pie -o $(PROG) $(OBJS) $(DHCPLIB) $(LIBS)
# Dependencies (semi-automatically-generated)
--- dhcpctl/Makefile.dist
+++ dhcpctl/Makefile.dist
@@ -37,10 +37,10 @@
all: libdhcpctl.a omshell cltest $(CATMANPAGES)
omshell: omshell.o $(DHCPCTLLIBS)
- $(CC) $(DEBUG) $(LFLAGS) -o omshell omshell.o $(DHCPCTLLIBS) $(LIBS)
+ $(CC) $(DEBUG) $(LFLAGS) -pie -o omshell omshell.o $(DHCPCTLLIBS) $(LIBS)
cltest: cltest.o $(DHCPCTLLIBS)
- $(CC) $(DEBUG) $(LFLAGS) -o cltest cltest.o $(DHCPCTLLIBS) $(LIBS)
+ $(CC) $(DEBUG) $(LFLAGS) -pie -o cltest cltest.o $(DHCPCTLLIBS) $(LIBS)
libdhcpctl.a: $(OBJ)
rm -f libdhcpctl.a
--- relay/Makefile.dist
+++ relay/Makefile.dist
@@ -83,6 +83,6 @@
-e "s#RUNDIR#$(VARRUN)#" < dhcrelay.8 >dhcrelay.man8
dhcrelay: dhcrelay.o $(DHCPLIB)
- $(CC) $(LFLAGS) -o $(PROG) dhcrelay.o $(DHCPLIB) $(LIBS)
+ $(CC) $(LFLAGS) -pie -o $(PROG) dhcrelay.o $(DHCPLIB) $(LIBS)
# Dependencies (semi-automatically-generated)
--- server/Makefile.dist
+++ server/Makefile.dist
@@ -103,6 +103,6 @@
-e "s#RUNDIR#$(VARRUN)#g" < dhcpd.leases.5 >dhcpd.leases.man5
dhcpd: $(OBJS) $(COBJ) $(DHCPLIB)
- $(CC) $(LFLAGS) -o dhcpd $(OBJS) $(DHCPLIB) $(LIBS)
+ $(CC) $(LFLAGS) -pie -o dhcpd $(OBJS) $(DHCPLIB) $(LIBS)
# Dependencies (semi-automatically-generated)

View File

@ -1,13 +0,0 @@
--- client/dhclient.conf
+++ client/dhclient.conf 2009/12/14 21:31:00
@@ -22,7 +22,9 @@
#
#####################################################
-send dhcp-lease-time 3600;
+# uncomment to request a specific lease time, otherwise
+# the dhcp server will provide its default lease time:
+#send dhcp-lease-time 3600;
# Request several well known/usefull dhcp options.
request subnet-mask, broadcast-address, routers,

View File

@ -1,73 +0,0 @@
--- client/scripts/linux
+++ client/scripts/linux 2009/12/14 22:29:11
@@ -28,7 +28,11 @@
# logs entire run of dhclient-script to /var/log/dhclient-script,
# if DHCLIENT_DEBUG is set in sysconfig/network/dhcp
#
-eval `grep "^DHCLIENT_DEBUG=" /etc/sysconfig/network/dhcp 2>/dev/null`
+SYSCONFIG_CFG_DIR="/etc/sysconfig/network"
+SYSCONFIG_RUN_DIR=`. "$SYSCONFIG_CFG_DIR/scripts/functions" \
+ 2>/dev/null && echo "$RUN_FILES_BASE"`
+SYSCONFIG_RUN_DIR=${SYSCONFIG_RUN_DIR:-/dev/.sysconfig/network}
+eval `grep "^DHCLIENT_DEBUG=" "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null`
if [ "$DHCLIENT_DEBUG" = yes ]; then
set -a # allexport
(
@@ -90,21 +94,21 @@ netconfig_remove() {
}
set_default_gw_route()
{
- if test -f /etc/sysconfig/network/ifcfg-${interface} -o \
- -f /dev/shm/sysconfig/if-${interface} ;
+ if test -f "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" -o \
+ -f "$SYSCONFIG_RUN_DIR/if-${interface}" ;
then
- if grep -qs '^primary=yes' /dev/shm/sysconfig/if-${interface} 2>/dev/null ;
+ if grep -qs '^primary=yes' "$SYSCONFIG_RUN_DIR/if-${interface}" 2>/dev/null ;
then
eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
- /etc/sysconfig/network/dhcp
- /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ "$SYSCONFIG_CFG_DIR/dhcp"
+ "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
else
eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
- /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
fi
else
eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
- /etc/sysconfig/network/dhcp 2>/dev/null`
+ "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null`
fi
if [ "$DHCLIENT_SET_DEFAULT_ROUTE" = yes ] ; then
for router in $new_routers; do
@@ -130,21 +134,21 @@ set_default_gw_route()
}
set_hostname()
{
- if test -f /etc/sysconfig/network/ifcfg-${interface} -o \
- -f /dev/shm/sysconfig/if-${interface} ;
+ if test -f "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" -o \
+ -f "$SYSCONFIG_RUN_DIR/if-${interface}" ;
then
- if grep -qs '^primary=yes' /dev/shm/sysconfig/if-${interface} 2>/dev/null ;
+ if grep -qs '^primary=yes' "$SYSCONFIG_RUN_DIR/if-${interface}" 2>/dev/null ;
then
eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
- /etc/sysconfig/network/dhcp
- /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ "$SYSCONFIG_CFG_DIR/dhcp"
+ "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
else
eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
- /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" 2>/dev/null`
fi
else
eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
- /etc/sysconfig/network/dhcp 2>/dev/null`
+ "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null`
fi
if [ "$DHCLIENT_SET_HOSTNAME" = yes ] ; then
current_hostname=`hostname`

View File

@ -1,156 +0,0 @@
--- client/scripts/linux
+++ client/scripts/linux 2010/03/04 13:30:09
@@ -29,8 +29,7 @@
# if DHCLIENT_DEBUG is set in sysconfig/network/dhcp
#
SYSCONFIG_CFG_DIR="/etc/sysconfig/network"
-SYSCONFIG_RUN_DIR=`. "$SYSCONFIG_CFG_DIR/scripts/functions" \
- 2>/dev/null && echo "$RUN_FILES_BASE"`
+. "$SYSCONFIG_CFG_DIR/scripts/functions"
SYSCONFIG_RUN_DIR=${SYSCONFIG_RUN_DIR:-/dev/.sysconfig/network}
eval `grep "^DHCLIENT_DEBUG=" "$SYSCONFIG_CFG_DIR/dhcp" 2>/dev/null`
if [ "$DHCLIENT_DEBUG" = yes ]; then
@@ -40,7 +39,7 @@ if [ "$DHCLIENT_DEBUG" = yes ]; then
echo "$0 $*"
date
echo '----------------'
- set
+ env
echo '----------------'
) >> /var/log/dhclient-script.log
exec 2>> /var/log/dhclient-script.log
@@ -48,6 +47,10 @@ if [ "$DHCLIENT_DEBUG" = yes ]; then
set -x
fi
+is_ifup_controlled()
+{
+ test -f "$SYSCONFIG_RUN_DIR/if-${interface}"
+}
# netconfig makes all "additional" modifications as DNS or NTP
use_netconfig() {
test -x /sbin/netconfig
@@ -94,9 +97,7 @@ netconfig_remove() {
}
set_default_gw_route()
{
- if test -f "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" -o \
- -f "$SYSCONFIG_RUN_DIR/if-${interface}" ;
- then
+ if is_ifup_controlled ; then
if grep -qs '^primary=yes' "$SYSCONFIG_RUN_DIR/if-${interface}" 2>/dev/null ;
then
eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
@@ -134,9 +135,7 @@ set_default_gw_route()
}
set_hostname()
{
- if test -f "$SYSCONFIG_CFG_DIR/ifcfg-${interface}" -o \
- -f "$SYSCONFIG_RUN_DIR/if-${interface}" ;
- then
+ if is_ifup_controlled ; then
if grep -qs '^primary=yes' "$SYSCONFIG_RUN_DIR/if-${interface}" 2>/dev/null ;
then
eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
@@ -157,13 +156,14 @@ set_hostname()
[ "x${current_hostname%%.*}" = "xlocalhost" ] || \
[ "x${current_hostname%%.*}" != "x${new_host_name%%.*}" ]; then
- if [ "x${new_host_name%%.*}" != x ]; then
+ if [ "x${new_host_name%%.*}" != "x" ]; then
hostname "${new_host_name%%.*}"
else
if [ -x /usr/bin/host ] ; then
if out=`host -W 2 "$new_ip_address" 2>/dev/null` ; then
_hostname="`echo "$out" | sed 's:^.* ::; s:\..*::'`"
- if [ "x${_hostname}" != x ]; then
+ if [ "x${_hostname}" != "x" -a \
+ "x${_hostname}" != "x${current_hostname%%.*}" ]; then
hostname "${_hostname}"
fi
fi
@@ -171,6 +171,20 @@ set_hostname()
fi
fi
fi
+ if is_ifup_controlled ; then
+ # check regardless the DHCLIENT_SET_HOSTNAME setting
+ # and whether we've set it above or not, because when
+ # it changed, we've to handle it anyway...
+ local OLD_HOSTNAME=`read_cached_config_data hostname $interface`
+ local CUR_HOSTNAME=`hostname 2>/dev/null`
+ if test "x$OLD_HOSTNAME" != "x$CUR_HOSTNAME" ; then
+ write_cached_config_data hostname "$CUR_HOSTNAME" $interface
+ commit_cached_config_data $interface
+
+ # reload syslog so it knows the new hostname
+ /etc/init.d/syslog reload
+ fi
+ fi
}
resolv_conf_dhclient="/var/lib/dhcp/resolv.conf.dhclient.$interface"
@@ -300,7 +314,15 @@ if [ x$reason = xBOUND ] || [ x$reason =
# and clear the ARP cache.
ifconfig $interface inet 0
+ if is_ifup_controlled ; then
+ write_cached_config_data dhcp4_state "new" $interface
+ commit_cached_config_data $interface
+ fi
+ elif is_ifup_controlled ; then
+ write_cached_config_data dhcp4_state "up" $interface
+ commit_cached_config_data $interface
fi
+
if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
[ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
@@ -328,7 +350,20 @@ if [ x$reason = xBOUND ] || [ x$reason =
make_resolv_conf
fi
+ if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
+ if is_ifup_controlled ; then
+ ifdown $interface -o dhcp
+ fi
+ fi
+
set_hostname
+ if is_ifup_controlled ; then
+ # execute ifservice and if-up.d scripts
+ ifup $interface -o dhcp
+
+ write_cached_config_data dhcp4_state "complete" $interface
+ commit_cached_config_data $interface
+ fi
exit_with_hooks 0
fi
@@ -376,12 +411,26 @@ if [ x$reason = xTIMEOUT ]; then
make_resolv_conf
fi
+ set_hostname
+ if is_ifup_controlled ; then
+ # execute ifservice and if-up.d scripts
+ ifup $interface -o dhcp
+
+ write_cached_config_data dhcp4_state "complete" $interface
+ commit_cached_config_data $interface
+ fi
+
exit_with_hooks 0
fi
ifconfig $interface inet 0
exit_with_hooks 1
fi
+if is_ifup_controlled ; then
+ write_cached_config_data dhcp4_state "down" $interface
+ commit_cached_config_data $interface
+fi
+
if use_netconfig ; then
netconfig_remove
else

View File

@ -1,383 +0,0 @@
--- client/dhclient-script.8
+++ client/dhclient-script.8 2009/10/16 08:10:52
@@ -45,9 +45,10 @@ any, and also called once if no valid le
This script is not meant to be customized by the end user. If local
customizations are needed, they should be possible using the enter and
exit hooks provided (see HOOKS for details). These hooks will allow the
-user to override the default behaviour of the client in creating a
+user to override the default behaviour of the client in applying of
+additional settings like DNS (e.g. creating a
.B /etc/resolv.conf
-file.
+file), NTP or YP to the system.
.PP
No standard client script exists for some operating systems, even though
the actual client may work, so a pioneering user may well need to create
@@ -59,12 +60,43 @@ customizing
.B ETCDIR/dhclient.conf
or using the enter and exit hooks, please submit a bug report.
.SH HOOKS
-When it starts, the client script first defines a shell function,
-.B make_resolv_conf ,
-which is later used to create the
+When it starts, the client script first defines several shell functions:
+.BR use_netconfig ,
+.BR netconfig_modify ,
+.BR netconfig_remove ,
+.BR make_resolv_conf ,
+and
+.BR restore_resolv_conf .
+These functions are later used to apply DNS, NTP, YP, and other additional
+settings to the system.
+
+The
+.B use_netconfig
+returns true (0), when the /sbin/netconfig script is installed and enables
+the use of the
+.B netconfig_modify
+and
+.B netconfig_remove
+functions.
+.br
+Otherwise, the
+.BR make_resolv_conf
+and
+.BR restore_resolv_conf
+functions are used. These functions are modified to create
+/var/lib/dhcp/resolv.conf.dhclient.$interface files only
+instead of the
.B /etc/resolv.conf
-file. To override the default behaviour, redefine this function in
-the enter hook script.
+file.
+To override the default behaviour, redefine these function in the enter
+hook script. Before you start doing this, consider to implement own
+netconfig modules.
+
+.IR Note :
+Note, that since openSUSE 11.1, the modify_resolvconf script / mechanizm
+is obsoleted by netconfig and not shipped or supported any more.
+See the netconfig(8) manual page for more informations.
+
.PP
On after defining the make_resolv_conf function, the client script checks
for the presence of an executable
@@ -221,7 +253,7 @@ valid, this shouldn't cause any real pro
confusing.
.SH SEE ALSO
dhclient(8), dhcpd(8), dhcrelay(8), dhclient.conf(5) and
-dhclient.leases(5).
+dhclient.leases(5) and netconfig(8).
.SH AUTHOR
.B dhclient-script(8)
has been written for Internet Systems Consortium
--- client/scripts/linux
+++ client/scripts/linux 2009/10/16 08:16:11
@@ -22,25 +22,183 @@
# 4. TIMEOUT not tested. ping has a flag I don't know, and I'm suspicious
# of the $1 in its args.
+
+# Debugging:
+#
+# logs entire run of dhclient-script to /var/log/dhclient-script,
+# if DHCLIENT_DEBUG is set in sysconfig/network/dhcp
+#
+eval `grep "^DHCLIENT_DEBUG=" /etc/sysconfig/network/dhcp 2>/dev/null`
+if [ "$DHCLIENT_DEBUG" = yes ]; then
+ set -a # allexport
+ (
+ echo '****************'
+ echo "$0 $*"
+ date
+ echo '----------------'
+ set
+ echo '----------------'
+ ) >> /var/log/dhclient-script.log
+ exec 2>> /var/log/dhclient-script.log
+ set +a
+ set -x
+fi
+
+# netconfig makes all "additional" modifications as DNS or NTP
+use_netconfig() {
+ test -x /sbin/netconfig
+}
+netconfig_modify() {
+ if test -x /sbin/netconfig -a -n "$interface" ; then
+ {
+ echo "INTERFACE='$interface'"
+ for v in ${!new_*}; do
+ case $v in
+ (new_ip_address) k='IPADDR' ;;
+ (new_subnet_mask) k='NETMASK' ;;
+ (new_network_number) k='NETWORK' ;;
+ (new_broadcast_address) k='BROADCAST' ;;
+ (new_interface_mtu) k='MTU' ;;
+ # (new_static_routes) k='ROUTES' ;;
+ (new_routers) k='GATEWAYS' ;;
+ (new_host_name) k='HOSTNAME' ;;
+ (new_domain_search) k='DNSSEARCH' ;;
+ (new_domain_name) k='DNSDOMAIN' ;;
+ (new_domain_name_servers) k='DNSSERVERS' ;;
+ (new_ntp_servers) k='NTPSERVERS' ;;
+ (new_nis_domain) k='NISDOMAIN' ;;
+ (new_nis_servers) k='NISSERVERS' ;;
+ (new_root_path) k='ROOTPATH' ;;
+ (new_dhcp_server_identifier)k='DHCPSID' ;;
+ (new_lpr_servers) k='LPRSERVER' ;;
+ (new_log_servers) k='LOGSERVER' ;;
+ (new_netbios_dd_server) k='NETBIOSDDSERVER' ;;
+ (new_netbios_name_servers) k='NETBIOSNAMESERVER' ;;
+ (new_netbios_node_type) k='NETBIOSNODETYPE' ;;
+ (new_netbios_scope) k='NETBIOSSCOPE' ;;
+ (*) k="dhclient_${v#new_}" ;;
+ esac
+ [ "k${k}" != k ] && echo "${k}='${!v}'"
+ done
+ } | /sbin/netconfig modify -s "dhclient3" -i "$interface"
+ fi
+}
+netconfig_remove() {
+ if test -x /sbin/netconfig -a -n "$interface" ; then
+ /sbin/netconfig remove -s "dhclient3" -i "$interface" </dev/null
+ fi
+}
+set_default_gw_route()
+{
+ if test -f /etc/sysconfig/network/ifcfg-${interface} -o \
+ -f /dev/shm/sysconfig/if-${interface} ;
+ then
+ if grep -qs '^primary=yes' /dev/shm/sysconfig/if-${interface} 2>/dev/null ;
+ then
+ eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
+ /etc/sysconfig/network/dhcp
+ /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ else
+ eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
+ /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ fi
+ else
+ eval `grep --no-filename '^[[:space:]]*DHCLIENT_SET_DEFAULT_ROUTE=' \
+ /etc/sysconfig/network/dhcp 2>/dev/null`
+ fi
+ if [ "$DHCLIENT_SET_DEFAULT_ROUTE" = yes ] ; then
+ for router in $new_routers; do
+ err=`route add default gw $router $metric_arg dev $interface 2>&1` && break || \
+ case "$err" in
+ SIOCADDRT:*)
+ # The gateway seems to be not reachable via local network
+ # route (implicitely created by ifconfig based on the IP
+ # an netmask provided by dhcp).
+ # Check this, set an explicit host route to the gateway
+ # over the current interface and try again (bnc#266215).
+ matches=$(test -x /sbin/ip && \
+ /sbin/ip -f inet -o route list match $router | \
+ grep -v ^default | grep -c -v "^$" 2>/dev/null)
+ if test -n "$matches" -a $(($matches)) -eq 0 ; then
+ route add -host $router dev $interface && \
+ route add default gw $router $metric_arg dev $interface && break
+ fi
+ ;;
+ esac
+ done
+ fi
+}
+set_hostname()
+{
+ if test -f /etc/sysconfig/network/ifcfg-${interface} -o \
+ -f /dev/shm/sysconfig/if-${interface} ;
+ then
+ if grep -qs '^primary=yes' /dev/shm/sysconfig/if-${interface} 2>/dev/null ;
+ then
+ eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
+ /etc/sysconfig/network/dhcp
+ /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ else
+ eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
+ /etc/sysconfig/network/ifcfg-${interface} 2>/dev/null`
+ fi
+ else
+ eval `grep --no-filename "^[[:space:]]*DHCLIENT_SET_HOSTNAME=" \
+ /etc/sysconfig/network/dhcp 2>/dev/null`
+ fi
+ if [ "$DHCLIENT_SET_HOSTNAME" = yes ] ; then
+ current_hostname=`hostname`
+ if [ "x${current_hostname%%.*}" = "x" ] || \
+ [ "x${current_hostname%%.*}" = "x(none)" ] || \
+ [ "x${current_hostname%%.*}" = "xlocalhost" ] || \
+ [ "x${current_hostname%%.*}" != "x${new_host_name%%.*}" ]; then
+
+ if [ "x${new_host_name%%.*}" != x ]; then
+ hostname "${new_host_name%%.*}"
+ else
+ if [ -x /usr/bin/host ] ; then
+ if out=`host -W 2 "$new_ip_address" 2>/dev/null` ; then
+ _hostname="`echo "$out" | sed 's:^.* ::; s:\..*::'`"
+ if [ "x${_hostname}" != x ]; then
+ hostname "${_hostname}"
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+}
+
+resolv_conf_dhclient="/var/lib/dhcp/resolv.conf.dhclient.$interface"
make_resolv_conf() {
+ ###
+ ### note: this function is never used by default
+ ### and it has been modified to create the
+ ### /var/lib/dhcp/resolv.conf.dhclient.$interface
+ ### file instead /etc/resolv.conf.
+ ###
if [ x"$new_domain_name_servers" != x ]; then
- cat /dev/null > /etc/resolv.conf.dhclient
- chmod 644 /etc/resolv.conf.dhclient
+ cat /dev/null > "$resolv_conf_dhclient"
+ chmod 644 "$resolv_conf_dhclient"
if [ x"$new_domain_search" != x ]; then
- echo search $new_domain_search >> /etc/resolv.conf.dhclient
+ echo search $new_domain_search >> "$resolv_conf_dhclient"
elif [ x"$new_domain_name" != x ]; then
# Note that the DHCP 'Domain Name Option' is really just a domain
# name, and that this practice of using the domain name option as
# a search path is both nonstandard and deprecated.
- echo search $new_domain_name >> /etc/resolv.conf.dhclient
+ echo search $new_domain_name >> "$resolv_conf_dhclient"
fi
for nameserver in $new_domain_name_servers; do
- echo nameserver $nameserver >>/etc/resolv.conf.dhclient
+ echo nameserver $nameserver >> "$resolv_conf_dhclient"
done
- mv /etc/resolv.conf.dhclient /etc/resolv.conf
+ ### mv /etc/resolv.conf.dhclient /etc/resolv.conf
fi
}
+restore_resolv_conf()
+{
+ rm -f "$resolv_conf_dhclient"
+}
# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
exit_with_hooks() {
@@ -84,7 +242,12 @@ if [ x$alias_subnet_mask != x ]; then
alias_subnet_arg="netmask $alias_subnet_mask"
fi
if [ x$new_interface_mtu != x ]; then
- mtu_arg="mtu $new_interface_mtu"
+ if [ $(( $new_interface_mtu )) -lt 576 ] ; then
+ # 68 is the minimal legal value, but 576 the real life minimum
+ unset new_interface_mtu
+ else
+ mtu_arg="mtu $new_interface_mtu"
+ fi
fi
if [ x$IF_METRIC != x ]; then
metric_arg="metric $IF_METRIC"
@@ -122,15 +285,6 @@ fi
if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
[ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
- current_hostname=`hostname`
- if [ x$current_hostname = x ] || \
- [ x$current_hostname = "x(none)" ] || \
- [ x$current_hostname = xlocalhost ] || \
- [ x$current_hostname = x$old_host_name ]; then
- if [ x$new_host_name != x$old_host_name ]; then
- hostname "$new_host_name"
- fi
- fi
if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
[ x$alias_ip_address != x$old_ip_address ]; then
@@ -140,7 +294,7 @@ if [ x$reason = xBOUND ] || [ x$reason =
if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
# IP address changed. Bringing down the interface will delete all routes,
# and clear the ARP cache.
- ifconfig $interface inet 0 down
+ ifconfig $interface inet 0
fi
if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
@@ -153,17 +307,25 @@ if [ x$reason = xBOUND ] || [ x$reason =
( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then
route add -net $new_network_number $new_subnet_arg dev $interface
fi
- for router in $new_routers; do
- route add default gw $router $metric_arg dev $interface
- done
+
+ set_default_gw_route
fi
+
if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
then
ifconfig $interface:0- inet 0
ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
route add -host $alias_ip_address $interface:0
fi
- make_resolv_conf
+
+ if use_netconfig ; then
+ netconfig_modify
+ else
+ make_resolv_conf
+ fi
+
+ set_hostname
+
exit_with_hooks 0
fi
@@ -175,7 +337,7 @@ if [ x$reason = xEXPIRE ] || [ x$reason
fi
if [ x$old_ip_address != x ]; then
# Shut down interface, which will delete routes and clear arp cache.
- ifconfig $interface inet 0 down
+ ifconfig $interface inet 0
fi
if [ x$alias_ip_address != x ]; then
ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
@@ -190,7 +352,7 @@ if [ x$reason = xTIMEOUT ]; then
fi
ifconfig $interface inet $new_ip_address $new_subnet_arg \
$new_broadcast_arg $mtu_arg
- set $new_routers
+ set -- $new_routers
if ping -q -c 1 $1; then
if [ x$new_ip_address != x$alias_ip_address ] && \
[ x$alias_ip_address != x ]; then
@@ -201,14 +363,25 @@ if [ x$reason = xTIMEOUT ]; then
( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then
route add -net $new_network_number
fi
- for router in $new_routers; do
- route add default gw $router $metric_arg dev $interface
- done
- make_resolv_conf
+
+ set_default_gw_route
+
+ if use_netconfig ; then
+ netconfig_modify
+ else
+ make_resolv_conf
+ fi
+
exit_with_hooks 0
fi
- ifconfig $interface inet 0 down
+ ifconfig $interface inet 0
exit_with_hooks 1
fi
+if use_netconfig ; then
+ netconfig_remove
+else
+ restore_resolv_conf
+fi
+
exit_with_hooks 0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9d652eebb6a2d447fbc85635bb6c64211434c2dd9ec4862017d69871e5dc20f0
size 44910

View File

@ -0,0 +1,32 @@
diff --git a/includes/dhcpd.h b/includes/dhcpd.h
index 90f8a73..6fa5b9e 100644
--- a/includes/dhcpd.h
+++ b/includes/dhcpd.h
@@ -1285,11 +1285,11 @@ typedef unsigned char option_mask [16];
#endif /* DEBUG */
#ifndef _PATH_DHCPD_DB
-#define _PATH_DHCPD_DB LOCALSTATEDIR"/db/dhcpd.leases"
+#define _PATH_DHCPD_DB LOCALSTATEDIR"/lib/dhcp/db/dhcpd.leases"
#endif
#ifndef _PATH_DHCPD6_DB
-#define _PATH_DHCPD6_DB LOCALSTATEDIR"/db/dhcpd6.leases"
+#define _PATH_DHCPD6_DB LOCALSTATEDIR"/lib/dhcp6/db/dhcpd6.leases"
#endif
#ifndef _PATH_DHCPD_PID
@@ -1319,11 +1319,11 @@ typedef unsigned char option_mask [16];
#endif
#ifndef _PATH_DHCLIENT_DB
-#define _PATH_DHCLIENT_DB LOCALSTATEDIR"/db/dhclient.leases"
+#define _PATH_DHCLIENT_DB LOCALSTATEDIR"/lib/dhcp/dhclient.leases"
#endif
#ifndef _PATH_DHCLIENT6_DB
-#define _PATH_DHCLIENT6_DB LOCALSTATEDIR"/db/dhclient6.leases"
+#define _PATH_DHCLIENT6_DB LOCALSTATEDIR"/lib/dhcp6/dhclient6.leases"
#endif
#ifndef _PATH_RESOLV_CONF

View File

@ -1,6 +1,8 @@
--- client/dhclient.c
+++ client/dhclient.c 2008/09/08 09:27:16
@@ -2659,6 +2659,12 @@ int script_go (client)
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);

View File

@ -0,0 +1,16 @@
--- dhcp-4.1.1/configure.ac
+++ dhcp-4.1.1/configure.ac 2010/05/03 12:25:59
@@ -420,8 +420,13 @@ AC_TRY_LINK(
AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
# find an MD5 library
+saved_LIBS="$LIBS"
+LIBS=""
AC_SEARCH_LIBS(MD5_Init, [crypto])
AC_SEARCH_LIBS(MD5Init, [crypto])
+CRYPTO_LIBS="$LIBS"
+LIBS="$saved_LIBS"
+AC_SUBST(CRYPTO_LIBS)
# Solaris needs some libraries for functions
AC_SEARCH_LIBS(socket, [socket])

View File

@ -1,6 +1,8 @@
--- client/dhclient.8
+++ client/dhclient.8 2008/09/08 15:19:13
@@ -36,6 +36,9 @@
diff --git a/client/dhclient.8 b/client/dhclient.8
index b805528..d31fa8d 100644
--- a/client/dhclient.8
+++ b/client/dhclient.8
@@ -60,6 +60,9 @@ dhclient - Dynamic Host Configuration Protocol Client
.I port
]
[
@ -10,47 +12,50 @@
.B -d
]
[
@@ -172,6 +175,11 @@
@@ -227,6 +230,11 @@ If a different port is specified for the client to listen on and
transmit on, the client will also use a different destination port -
one less than the specified port.
.PP
+The
+.B -H
+flag may be used to specify a client hostname that should be sent to
+the DHCP server.
+the DHCP server. Note, that this option is a SUSE/Novell extension.
+.PP
The DHCP client normally transmits any protocol messages it sends
before acquiring an IP address to, 255.255.255.255, the IP limited
broadcast address. For debugging purposes, it may be useful to have
--- client/dhclient.c
+++ client/dhclient.c 2008/09/08 15:17:50
@@ -100,6 +100,7 @@ int main (argc, argv, envp)
diff --git a/client/dhclient.c b/client/dhclient.c
index 15c31a5..65e9c23 100644
--- a/client/dhclient.c
+++ b/client/dhclient.c
@@ -108,6 +108,7 @@ main(int argc, char **argv) {
int no_dhclient_db = 0;
int no_dhclient_pid = 0;
int no_dhclient_script = 0;
+ char *dhclient_hostname = NULL;
char *s;
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
@@ -189,6 +190,15 @@ int main (argc, argv, envp)
#ifdef DHCPv6
int local_family_set = 0;
#endif /* DHCPv6 */
@@ -212,6 +213,16 @@ main(int argc, char **argv) {
if (++i == argc)
usage ();
relay = argv [i];
+ } else if (!strcmp (argv [i], "-H")) {
usage();
mockup_relay = argv[i];
+ } else if (!strcmp (argv[i], "-H")) {
+ if (++i == argc || !argv[i] || *(argv[i]) == '\0')
+ usage ();
+ if (strlen (argv[i]) > HOST_NAME_MAX) {
+ log_error("-H option host-name string \"%s\" is too long:"
+ "maximum length is %d characters", argv[i], HOST_NAME_MAX);
+ "maximum length is %d characters",
+ argv[i], HOST_NAME_MAX);
+ exit(1);
+ }
+ dhclient_hostname = argv [i];
} else if (!strcmp (argv [i], "-nw")) {
} else if (!strcmp(argv[i], "-nw")) {
nowait = 1;
} else if (!strcmp (argv [i], "-n")) {
@@ -345,6 +355,32 @@ int main (argc, argv, envp)
} else if (!strcmp(argv[i], "-n")) {
@@ -445,6 +456,32 @@ main(int argc, char **argv) {
/* Parse the dhclient.conf file. */
read_client_conf ();
read_client_conf();
+ /* If the user specified a hostname, send it here and now */
+ if ((dhclient_hostname != NULL) && (*dhclient_hostname != '\0') ) {
@ -79,17 +84,20 @@
+ }
+
/* Parse the lease database. */
read_client_leases ();
read_client_leases();
@@ -483,9 +519,9 @@ static void usage ()
log_info (arr);
log_info (url);
@@ -653,12 +690,12 @@ static void usage()
- log_error ("Usage: dhclient [-1dqrx] [-nw] [-p <port>] %s",
+ log_error ("Usage: dhclient [-1dqrx] [-nw] [-H <hostname>] [-p <port>] %s",
"[-s server]");
- log_error (" [-cf config-file] [-lf lease-file]%s",
+ log_error (" [-cf config-file] [-lf lease-file] %s",
"[-pf pid-file] [-e VAR=val]");
log_fatal (" [-sf script-file] [interface]");
log_error("Usage: dhclient %s %s",
#ifdef DHCPv6
- "[-4|-6] [-SNTP1dvrx] [-nw] [-p <port>]",
+ "[-4|-6] [-SNTP1dvrx] [-nw] [-H <hostname>] [-p <port>]",
#else /* DHCPv6 */
"[-1dvrx] [-nw] [-p <port>]",
#endif /* DHCPv6 */
"[-s server]");
- log_error(" [-cf config-file] [-lf lease-file]%s",
+ log_error(" [-cf config-file] [-lf lease-file] %s",
"[-pf pid-file] [-e VAR=val]");
log_fatal(" [-sf script-file] [interface]");
}

View File

@ -0,0 +1,21 @@
diff --git a/common/socket.c b/common/socket.c
index 036f7ae..6f56740 100644
--- a/common/socket.c
+++ b/common/socket.c
@@ -40,11 +40,16 @@
* I have implemented it under Linux; other systems should be doable also.
*/
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
#include "dhcpd.h"
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/uio.h>
#include <sys/uio.h>
+#include <netinet/in.h> /* for struct in6_pktinfo, with glibc >= 2.10.1
+ _GNU_SOURCE required to enable it */
#ifdef USE_SOCKET_FALLBACK
# if !defined (USE_SOCKET_SEND)

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:176dec01acb2704866f516ed21b6210c9d16bd4667db9b265c57bb2b07735510
size 46012

View File

@ -0,0 +1,26 @@
diff --git a/dhcpctl/dhcpctl.3 b/dhcpctl/dhcpctl.3
index 2e1cb8a..ee44755 100644
--- a/dhcpctl/dhcpctl.3
+++ b/dhcpctl/dhcpctl.3
@@ -425,7 +425,7 @@ that most error checking has been ommitted for brevity.
#include <stdio.h>
#include <netinet/in.h>
-#include <isc/result.h>
+#include <isc-dhcp/result.h>
#include <dhcpctl/dhcpctl.h>
int main (int argc, char **argv) {
diff --git a/omapip/omapi.3 b/omapip/omapi.3
index 4673549..8e2503f 100644
--- a/omapip/omapi.3
+++ b/omapip/omapi.3
@@ -87,7 +87,7 @@ the lease ends.
#include <stdio.h>
#include <netinet/in.h>
- #include <isc/result.h>
+ #include <isc-dhcp/result.h>
#include <dhcpctl/dhcpctl.h>
int main (int argc, char **argv) {

63
dhcp-4.1.1-paranoia.diff Normal file
View File

@ -0,0 +1,63 @@
diff --git a/server/dhcpd.c b/server/dhcpd.c
index f0cacb6..6e30d33 100644
--- a/server/dhcpd.c
+++ b/server/dhcpd.c
@@ -210,7 +210,11 @@ static void omapi_listener_start (void *foo)
#if defined (PARANOIA)
/* to be used in one of two possible scenarios */
static void setup_chroot (char *chroot_dir) {
- if (geteuid())
+ /*
+ ** getuid() instead of geteuid(), see
+ ** comment by thomas@suse.de bellow
+ */
+ if (getuid())
log_fatal ("you must be root to use chroot");
if (chroot(chroot_dir)) {
@@ -402,7 +406,7 @@ main(int argc, char **argv) {
log_fatal ("Insufficient memory to %s %s: %s",
"record interface", argv [i],
isc_result_totext (result));
- strcpy (tmp -> name, argv [i]);
+ strncpy (tmp -> name, argv [i], sizeof(tmp->name)-1);
if (interfaces) {
interface_reference (&tmp -> next,
interfaces, MDL);
@@ -487,7 +491,15 @@ main(int argc, char **argv) {
if (set_user) {
struct passwd *tmp_pwd;
- if (geteuid())
+ /*
+ ** I query for the real UID and not for the effective UID
+ ** just to force the user to run this server as root and
+ ** not setting it suid. It should be a paranoia patch and
+ ** not a teletubbie patch. *eg*
+ ** Note: That the user is still able to set it suid! *zitter*
+ ** thomas@suse.de
+ */
+ if (getuid())
log_fatal ("you must be root to set user");
if (!(tmp_pwd = getpwnam(set_user)))
@@ -505,7 +517,10 @@ main(int argc, char **argv) {
#define group real_group
struct group *tmp_grp;
- if (geteuid())
+ /*
+ ** getuid() instead of geteuid(), see above
+ */
+ if (getuid())
log_fatal ("you must be root to set group");
if (!(tmp_grp = getgrnam(set_group)))
@@ -751,6 +766,7 @@ main(int argc, char **argv) {
/* change uid to the specified one */
if (set_gid) {
+ /* setgroups is done, OK */
if (setgroups (0, (void *)0))
log_fatal ("setgroups: %m");
if (setgid (set_gid))

View File

@ -1,6 +1,8 @@
--- server/db.c
+++ server/db.c 2006/11/07 10:19:41
@@ -782,21 +782,16 @@
diff --git a/server/db.c b/server/db.c
index a4e1558..1d5f5b0 100644
--- a/server/db.c
+++ b/server/db.c
@@ -1059,21 +1059,16 @@ int new_lease_file ()
db_validity = lease_file_is_corrupt;

3
dhcp-4.1.1.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:56937cd8e59da6ea0560e82d6b3dd637a96cc3052e0f8e163727c46a22fb87c4
size 875897

View File

@ -1,3 +1,27 @@
-------------------------------------------------------------------
Tue May 11 11:22:48 UTC 2010 - mt@suse.de
- Fixed dhcprelay scripts to source sysconfig file correctly
- Fixed spec file typo in arping path require, enabled ldap
- Fixed a dhclient option name and new/old ip address check
-------------------------------------------------------------------
Fri May 7 14:10:21 UTC 2010 - mt@suse.de
- Updated to ISC DHCP 4.1.1, the current 4.x series production
release, providing DHCPv6 client/server/relay implementation.
The programs act in DHCPv6 mode, when the -6 start option is set.
We install separate init scripts with a 6 at the end to handle
them, that is /etc/init.d/dhcpd6 and dhrelay6. Further, there is
also a link to the binaries with a 6 at the end, e.g. dhclient6,
making it visible, that the installed version supports DHCPv6.
- Moved additional documentation to a separate dhcp-doc package.
- Changed to provide config files and scripts as source files
instead of patches to the ISC scripts.
- Adopted spec file and config/scripts, merged in all patches.
- Implemented RFC 3442 classless static routes support in the
dhclient-script (bnc#555870).
-------------------------------------------------------------------
Thu Apr 29 11:18:20 UTC 2010 - mt@suse.de

608
dhcp.spec
View File

@ -1,5 +1,5 @@
#
# spec file for package dhcp (Version 3.1.3.ESV)
# spec file for package dhcp (Version 4.1.1)
#
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@ -17,75 +17,70 @@
# norootforbuild
%define isc_version 4.1.1
%define susefw2dir %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services
%define omc_prefix /usr/share/omc
%define omc_svcdir %{omc_prefix}/svcinfo.d
%define with_ldap 1
Name: dhcp
%define isc_version 3.1-ESV
%define susefw2dir %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services
%define omc_prefix /usr/share/omc
%define omc_svcdir %{omc_prefix}/svcinfo.d
%define with_casa 0%{?sles_version} >= 10 || 0%{?suse_version} >= 1110
%if 0%{?with_casa:%with_casa}
%if 0%{?with_ldap:1}
BuildRequires: CASA-devel
BuildRequires: openldap2-devel
%endif
BuildRequires: dos2unix openldap2-devel
BuildRequires: dos2unix
License: BSD3c(or similar)
Group: Productivity/Networking/Boot/Servers
AutoReqProv: on
Version: 3.1.3.ESV
Version: 4.1.1
Release: 1
Summary: Common Files Used by ISC DHCP Software
Url: http://www.isc.org/isc/dhcp.html
Url: http://www.isc.org/software/dhcp
Source0: dhcp-%{isc_version}.tar.bz2
#Source0: http://ftp.isc.org/isc/dhcp/dhcp-%{isc_version}.tar.gz
#Source1: http://ftp.isc.org/isc/dhcp/dhcp-%{isc_version}.tar.gz.asc
Source2: rc.dhcpd
Source3: rc.dhcrelay
Source11: sysconfig.dhcpd
Source12: sysconfig.syslog-dhcpd
Source14: sysconfig.dhcrelay
Source15: dhcp.README
Source16: dhcp.LIESMICH
Source17: examples.tar.gz
Source18: dhcp.README.upgrade
Source19: dhcpsync
Source20: dhcpsync.8
Source21: DDNS-howto.txt
Source30: http://www.andrew.cmu.edu/~kevinm/dhcp/leasestate
Source31: http://www.andrew.cmu.edu/~kevinm/dhcp/listlease
Source32: http://www.andrew.cmu.edu/~kevinm/dhcp/clearip
Source33: http://www.andrew.cmu.edu/~kevinm/dhcp/reset-ip
Source40: http://www3.baylor.edu/~Jeff_Wilson/GiveAway/leases.awk
Source41: http://www.suse.de/~poeml/dnscompr.py
Source42: dhcpd.xml
Source43: SuSEfirewall2.dhcp-server
Source44: if-up.d.dhcpd-restart-hook
Patch0: dhcp-3.1.1-paths.dif
## chroot patch by Ari Edelkind (see readme)
## and patch supplied by <thomas@suse.de>
Patch1: dhcp-3.1.1-paranoia.dif
Patch2: dhcp-3.1.1-omapi-test.c.dif
Patch3: dhcp-3.1.1-man-includes.dif
Patch4: dhcp-3.1.1-tmpfile.dif
## LDAP support for DHCP server
#
Source10: rc.dhcpd
Source11: rc.dhcpd6
Source12: rc.dhcrelay
Source14: sysconfig.dhcpd
Source15: sysconfig.syslog-dhcpd
Source16: sysconfig.dhcrelay
Source19: if-up.d.dhcpd-restart-hook
#
Source20: dhclient.conf
Source21: dhclient6.conf
Source22: dhcpd.conf
Source23: dhcpd6.conf
Source24: dhclient-script
#
Source30: dhcpd.xml
Source31: dhcpd6.xml
Source32: SuSEfirewall2.dhcp-server
#
Source40: dhcp.LIESMICH
Source41: dhcp.README
Source42: dhcp.README.upgrade
Source43: DDNS-howto.txt
Source44: contrib.tar.gz
Source45: examples.tar.gz
#
Patch10: dhcp-4.1.1-default-paths.diff
# paranoia patch is included now, but not the
# additional patch by thomas@suse.de not ...
Patch11: dhcp-4.1.1-paranoia.diff
Patch12: dhcp-4.1.1-man-includes.diff
Patch13: dhcp-4.1.1-tmpfile.diff
Patch14: dhcp-4.1.1-in6_pktinfo-prototype.diff
Patch20: dhcp-4.1.1-dhclient-exec-filedes.diff
Patch21: dhcp-4.1.1-dhclient-send-hostname-rml.diff
## patch lives here: http://www.suse.de/~mt/git/dhcp-ldap.git/
%define DHCPD_LDAP 1
%if %DHCPD_LDAP
Patch10: dhcp-3.1.3-ldap-patch-mt-01.diff.bz2
%if 0%{?with_ldap:1}
Patch30: dhcp-4.1.1-ldap-patch-mt-01.diff.bz2
%else
Patch30: dhcp-4.1.1-dhclient-no-libcrypto.diff
%endif
%if %{?suse_version:%suse_version}%{?!suse_version:99999} > 930
Patch30: dhcp-3.1.1-pie.dif
%endif
Patch40: dhcp-3.1.1-dhclient-exec-filedes.dif
Patch41: dhcp-3.1.1-dhclient-send-hostname-rml.dif
Patch42: dhcp-3.1.1-dhclient-use-script-cmdline.dif
Patch50: dhcp-3.1.1-dhclient-conf.dif
Patch51: dhcp-3.1.3-dhclient-conf.bnc516459.dif
Patch60: dhcp-3.1.3-dhclient-script.dif
Patch61: dhcp-3.1.3-dhclient-script.bnc555095.dif
Patch62: dhcp-3.1.3-dhclient-script.bnc585380.dif
##
Obsoletes: dhcp-base
Provides: dhcp-base:/usr/bin/omshell
PreReq: /bin/touch /sbin/chkconfig sysconfig
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -93,31 +88,27 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
License: BSD3c(or similar)
Summary: ISC DHCP Server
Group: Productivity/Networking/Boot/Servers
Requires: net-tools dhcp
Requires: net-tools dhcp = %{version}
PreReq: %insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /bin/cp /usr/sbin/useradd
Provides: dhcp_server dhcp:/usr/sbin/dhcpd
Provides: dhcp_server dhcp_server6
AutoReqProv: on
%package client
License: BSD3c(or similar)
Summary: ISC DHCP Client
Group: Productivity/Networking/Boot/Clients
Requires: net-tools dhcp /usr/bin/host
PreReq: %insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /bin/cp
Provides: dhcp_client
Provides: dhclient = %{version}
Obsoletes: dhclient < %{version}
Requires: net-tools dhcp = %{version} /sbin/arping /usr/bin/host
PreReq: %insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /bin/cp /bin/grep
Provides: dhcp_client dhcp_client6
AutoReqProv: on
%package relay
License: BSD3c(or similar)
Summary: DHCP Relay Agent
Summary: ISC DHCP Relay Agent
Group: Productivity/Networking/Boot/Servers
Requires: net-tools dhcp
Requires: net-tools dhcp = %{version}
PreReq: %insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /bin/cp
Provides: dhcp_relay
Provides: dhcrelay = %{version}
Obsoletes: dhcrelay < %{version}
Provides: dhcp_relay dhcp_relay6
AutoReqProv: on
%package devel
@ -125,21 +116,21 @@ License: BSD3c(or similar)
Summary: Header Files and Libraries for dhcpctl API
Group: Development/Libraries/C and C++
Requires: dhcp = %{version}
%if %ul_version >= 1
%define VENDOR UnitedLinux
%else
%define VENDOR SuSE
%endif
%package doc
License: BSD3c(or similar)
Summary: Documentation
Group: Productivity/Networking/Boot/Servers
%description
This package contains common files used by both the ISC DHCP server
("dhcp-server" package) and client ("dhcp-client").
This package contains common programs used by both the ISC DHCP
server ("dhcp-server" package) and client ("dhcp-client") as the
omshell and common manual pages.
Authors:
--------
Ted Lemon <mellon@fugue.com>
Internet Systems Consortium, Inc. <info@isc.org>
%description server
This package contains the ISC DHCP server.
@ -147,14 +138,10 @@ This package contains the ISC DHCP server.
Please read the documentation in /usr/share/doc/packages/dhcp-server
regarding configuration of the DHCP server.
Authors:
--------
Ted Lemon <mellon@fugue.com>
Internet Systems Consortium, Inc. <info@isc.org>
This package also contains software written by Kevin C. Miller <kevinm@andrew.cmu.edu>
and Jeff Wilson <wilsonj@cs.ecs.baylor.edu>.
%description client
This is an alternative DHCP client, the ISC DHCP client for Linux. Like
@ -167,11 +154,9 @@ It is configurable via the configuration file /etc/dhclient.conf and
you can define your own 'hooks' to be used by the /sbin/dhclient-script
(which is called by the daemon).
Authors:
--------
Ted Lemon <mellon@fugue.com>
Internet Systems Consortium, Inc. <info@isc.org>
%description relay
This is the ISC DHCP relay agent. It can be used as a 'gateway' for
@ -180,310 +165,317 @@ because requests can be broadcast, and they will normally not be
routed.
Authors:
--------
Internet Systems Consortium, Inc. <info@isc.org>
%description doc
This package contains additional documentation files provided with
the software. The manual pages are in the corresponding packages.
Authors:
--------
Internet Systems Consortium, Inc. <info@isc.org>
%description devel
This package contains all of the libraries and headers for developing
with the Internet Software Consortium (ISC) dhcpctl API.
Authors:
--------
Ted Lemon <mellon@fugue.com>
Internet Systems Consortium, Inc. <info@isc.org>
%prep
%setup -q -n %{name}-%{isc_version}
##
%patch0 -p0
%patch1 -p0
%patch2 -p0
%patch3 -p0
%patch4 -p0
%if %DHCPD_LDAP
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch20 -p1
%patch21 -p1
%if 0%{?with_ldap:%with_ldap}
%patch30 -p1
%else
%patch30 -p1
%endif
%if %{?suse_version:%suse_version}%{?!suse_version:99999} > 930
%patch30 -p0
%endif
%patch40 -p0
%patch41 -p0
%patch42 -p0
%patch50 -p0
%patch51 -p0
%patch60 -p0
%patch61 -p0
%patch62 -p0
##
find . -type f -name \*.cat\* -exec rm -f {} \;
cp -p %{S:2} %{S:3} %{S:11} %{S:12} %{S:14} %{S:32} %{S:33} .
for i in README LIESMICH; do
sed 's/SuSE/%VENDOR/' $RPM_SOURCE_DIR/dhcp.$i > $i.%VENDOR
done
cp -p $RPM_SOURCE_DIR/dhcp.README.upgrade README.upgrade
cp -p $RPM_SOURCE_DIR/DDNS-howto.txt .
echo "exec /usr/bin/genDDNSkey \"$@\"" > genDDNSKey.sh
tar xzf $RPM_SOURCE_DIR/examples.tar.gz
dos2unix contrib/ms2isc/*
%build
export CFLAGS
CFLAGS="$RPM_OPT_FLAGS -W -Wall -fno-strict-aliasing -Wno-unused -DLDAP_DEPRECATED -DUSE_SSL -DPARANOIA -DHAVE_INET_PTON -DHAVE_INET_NTOP"
%if 0%{?with_casa:%with_casa}
CFLAGS="$CFLAGS -DLDAP_CASA_AUTH"
%endif
# seems obsolete (redefined reports) => double check
#%ifarch ia64 sparc64 alpha s390x ppc64 x86_64
# CFLAGS="$CFLAGS -DPTRSIZE_64BIT"
#%endif
CFLAGS="$RPM_OPT_FLAGS -W -Wall -fno-strict-aliasing -Wno-unused"
%ifarch ppc ppc64 s390x
# bugs 134590, 171532
CFLAGS="$CFLAGS -fsigned-char"
%endif
%if %{?suse_version:%suse_version}%{?!suse_version:99999} > 930
%ifarch ia64 %sparc alpha s390x ppc64 x86_64
CFLAGS="$CFLAGS -fPIE"
%else
CFLAGS="$CFLAGS -fpie"
%endif
LDFLAGS="-pie"
FFLAGS="$CFLAGS"
CXXFLAGS="$CFLAGS"
export RPM_OPT_FLAGS LDFLAGS
export CFLAGS FFLAGS CXXFLAGS
#
%{?suse_update_config:%{suse_update_config -f}}
libtoolize --force
autoreconf
#
%configure \
--enable-dhcpv6 \
--enable-failover \
--enable-paranoia \
--enable-early-chroot \
%if 0%{?with_ldap:%with_ldap}
--enable-ldap-conf \
--enable-ldap-casa \
%endif
export DEBUG_FLAGS=$CFLAGS
./configure
# first, build binaries which use bsd sockets instead of lpf
cp includes/site.h includes/site.h.save.lpf
echo "#define USE_SOCKETS" >> includes/site.h
make %{?_smp_mflags} DEBUG="$DEBUG_FLAGS -W" all
cp -p work.linux-2.2/server/dhcpd work.linux-2.2/server/dhcpd.bsd
make clean
# then, build the normal binaries using lpf
mv includes/site.h.save.lpf includes/site.h
make %{?_smp_mflags} DEBUG="$DEBUG_FLAGS -W" all
--with-cli-pid-file=%{_localstatedir}/run/dhclient.pid \
--with-cli-lease-file=%{_localstatedir}/lib/dhcp/dhclient.leases \
--with-cli6-pid-file=%{_localstatedir}/run/dhclient6.pid \
--with-cli6-lease-file=%{_localstatedir}/lib/dhcp6/dhclient.leases \
--with-srv-pid-file=%{_localstatedir}/run/dhcpd.pid \
--with-srv-lease-file=%{_localstatedir}/lib/dhcp/db/dhcpd.leases \
--with-srv6-pid-file=%{_localstatedir}/run/dhcpd6.pid \
--with-srv6-lease-file=%{_localstatedir}/lib/dhcp6/db/dhcpd6.leases
#
make %{?_smp_mflags}
%check
# with a minimal config, see if it runs
echo "ddns-update-style interim;" > testconf
work.linux-2.2/server/dhcpd -t -cf testconf || exit 1
./server/dhcpd -4 -t -cf testconf || exit 1
./server/dhcpd -6 -t -cf testconf || exit 1
# check syntax in our scripts
bash -n $RPM_SOURCE_DIR/rc.dhcpd
bash -n $RPM_SOURCE_DIR/rc.dhcpd6
bash -n $RPM_SOURCE_DIR/rc.dhcrelay
bash -n $RPM_SOURCE_DIR/rc.dhcrelay6
bash -n $RPM_SOURCE_DIR/dhclient-script
%install
MANDIR=%{_mandir} DESTDIR=$RPM_BUILD_ROOT LIBDIR=%{_libdir} make install
install -m 744 work.linux-2.2/omapip/svtest $RPM_BUILD_ROOT/usr/sbin/svtest
install -m 644 work.linux-2.2/dst/libdst.a $RPM_BUILD_ROOT/%{_libdir}
# install the saved bsd flavor binary
install -m 755 work.linux-2.2/server/dhcpd.bsd $RPM_BUILD_ROOT/usr/sbin/dhcpd.bsd
mkdir -p $RPM_BUILD_ROOT/etc/init.d
mkdir -p $RPM_BUILD_ROOT/%{susefw2dir}
mkdir -p $RPM_BUILD_ROOT/%{omc_svcdir}
mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
mkdir -p $RPM_BUILD_ROOT/var/run
# set up chroot jail
mkdir -p $RPM_BUILD_ROOT/var/lib/dhcp/etc
mkdir -p $RPM_BUILD_ROOT/var/lib/dhcp/dev
mkdir -p $RPM_BUILD_ROOT/var/lib/dhcp/%_lib
mkdir -p $RPM_BUILD_ROOT/var/lib/dhcp/var/run
mkdir -p $RPM_BUILD_ROOT/var/lib/dhcp/db
%if %DHCPD_LDAP
mkdir -p $RPM_BUILD_ROOT/etc/openldap/schema
install -m 644 contrib/dhcp.schema $RPM_BUILD_ROOT/etc/openldap/schema/
%endif
install -m 744 rc.dhcpd $RPM_BUILD_ROOT/etc/init.d/dhcpd
install -m 744 rc.dhcrelay $RPM_BUILD_ROOT/etc/init.d/dhcrelay
ln -sf ../../etc/init.d/dhcpd $RPM_BUILD_ROOT/usr/sbin/rcdhcpd
ln -sf ../../etc/init.d/dhcrelay $RPM_BUILD_ROOT/usr/sbin/rcdhcrelay
install -m 755 $RPM_SOURCE_DIR/dhcpsync $RPM_BUILD_ROOT/usr/sbin/
install -m 644 $RPM_SOURCE_DIR/dhcpsync.8 $RPM_BUILD_ROOT/%{_mandir}/man8/
install -m 755 $RPM_SOURCE_DIR/leasestate $RPM_BUILD_ROOT/usr/sbin/
install -m 755 $RPM_SOURCE_DIR/listlease $RPM_BUILD_ROOT/usr/sbin/
install -m 755 $RPM_SOURCE_DIR/leases.awk $RPM_BUILD_ROOT/usr/sbin/
cp -p $RPM_SOURCE_DIR/dnscompr.py .
install -m 644 sysconfig.dhcpd $RPM_BUILD_ROOT/var/adm/fillup-templates/
install -m 644 sysconfig.syslog-dhcpd $RPM_BUILD_ROOT/var/adm/fillup-templates/
install -m 644 sysconfig.dhcrelay $RPM_BUILD_ROOT/var/adm/fillup-templates/
rm -f $RPM_BUILD_ROOT/var/lib/dhcp/dhcpd.leases
install -m 644 client/dhclient.conf $RPM_BUILD_ROOT/etc/dhclient.conf
sed '/^max-lease-time/ a \
\
# if you do not use dynamical DNS updates:\
#\
# this statement is needed by dhcpd-3 needs at least this statement.\
# you have to delete it for dhcpd-2, because it does not know it.\
#\
# if you want to use dynamical DNS updates, you should first read\
# read /usr/share/doc/packages/dhcp-server/DDNS-howto.txt\
ddns-update-style none; ddns-updates off;\
' server/dhcpd.conf > dhcpd.conf
install -m644 contrib/3.0b1-lease-convert 3.0b1-lease-convert
find $RPM_BUILD_ROOT/%{_mandir} -type f | xargs chmod 644
install -m 644 $RPM_SOURCE_DIR/dhcpd.xml $RPM_BUILD_ROOT/%{omc_svcdir}/
install -m 644 $RPM_SOURCE_DIR/SuSEfirewall2.dhcp-server \
$RPM_BUILD_ROOT/%{susefw2dir}/dhcp-server
install -m 755 -d $RPM_BUILD_ROOT/etc/sysconfig/network/if-up.d
install -m 755 -d $RPM_BUILD_ROOT/etc/sysconfig/network/scripts
install -m 755 $RPM_SOURCE_DIR/if-up.d.dhcpd-restart-hook \
export RPM_BUILD_ROOT
make install DESTDIR="$RPM_BUILD_ROOT"
#
# directories
install -d -m0755 $RPM_BUILD_ROOT/sbin
install -d -m0755 $RPM_BUILD_ROOT%{_sysconfdir}/init.d
install -d -m0755 $RPM_BUILD_ROOT/%{susefw2dir}
install -d -m0755 $RPM_BUILD_ROOT/%{omc_svcdir}
install -d -m0755 $RPM_BUILD_ROOT%{_sysconfdir}/openldap/schema
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/run
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/adm/fillup-templates
# chroot jail
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/{dhcp,dhcp6}/etc
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/{dhcp,dhcp6}/dev
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/{dhcp,dhcp6}/%_lib
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/{dhcp,dhcp6}/var/run
install -d -m0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/{dhcp,dhcp6}/db
# move the dhclient binary to /sbin
mv -f $RPM_BUILD_ROOT/usr/sbin/dhclient $RPM_BUILD_ROOT/sbin/
# provide a ...6 link, so we know it supports DHCPv6
ln -sf dhcpd $RPM_BUILD_ROOT%{_sbindir}/dhcpd6
ln -sf dhcrelay $RPM_BUILD_ROOT%{_sbindir}/dhcrelay6
ln -sf dhclient $RPM_BUILD_ROOT/sbin/dhclient6
# install our adopted config examples and dhclient-script:
install -m0644 $RPM_SOURCE_DIR/dhcpd.conf $RPM_BUILD_ROOT%{_sysconfdir}/
install -m0644 $RPM_SOURCE_DIR/dhcpd6.conf $RPM_BUILD_ROOT%{_sysconfdir}/
install -m0644 $RPM_SOURCE_DIR/dhclient.conf $RPM_BUILD_ROOT%{_sysconfdir}/
install -m0644 $RPM_SOURCE_DIR/dhclient6.conf $RPM_BUILD_ROOT%{_sysconfdir}/
install -m0750 $RPM_SOURCE_DIR/dhclient-script $RPM_BUILD_ROOT/sbin/
# init scripts
install -m0755 $RPM_SOURCE_DIR/rc.dhcpd \
$RPM_BUILD_ROOT%{_sysconfdir}/init.d/dhcpd
ln -sf %{_sysconfdir}/init.d/dhcpd \
$RPM_BUILD_ROOT%{_sbindir}/rcdhcpd
install -m0755 $RPM_SOURCE_DIR/rc.dhcpd6 \
$RPM_BUILD_ROOT%{_sysconfdir}/init.d/dhcpd6
ln -sf %{_sysconfdir}/init.d/dhcpd6 \
$RPM_BUILD_ROOT%{_sbindir}/rcdhcpd6
install -m0755 $RPM_SOURCE_DIR/rc.dhcrelay \
$RPM_BUILD_ROOT%{_sysconfdir}/init.d/dhcrelay
ln -sf %{_sysconfdir}/init.d/dhcrelay \
$RPM_BUILD_ROOT%{_sbindir}/rcdhcrelay
install -m0755 $RPM_SOURCE_DIR/rc.dhcrelay6 \
$RPM_BUILD_ROOT%{_sysconfdir}/init.d/dhcrelay6
ln -sf %{_sysconfdir}/init.d/dhcrelay6 \
$RPM_BUILD_ROOT%{_sbindir}/rcdhcrelay6
# sysconfig files
install -m0644 $RPM_SOURCE_DIR/sysconfig.dhcpd \
$RPM_BUILD_ROOT%{_localstatedir}/adm/fillup-templates/
install -m0644 $RPM_SOURCE_DIR/sysconfig.syslog-dhcpd \
$RPM_BUILD_ROOT%{_localstatedir}/adm/fillup-templates/
install -m0644 $RPM_SOURCE_DIR/sysconfig.dhcrelay \
$RPM_BUILD_ROOT%{_localstatedir}/adm/fillup-templates/
# another config files and scripts
install -m0644 contrib/dhcp.schema \
$RPM_BUILD_ROOT%{_sysconfdir}/openldap/schema
install -m0644 $RPM_SOURCE_DIR/dhcpd.xml \
$RPM_SOURCE_DIR/dhcpd6.xml \
$RPM_BUILD_ROOT/%{omc_svcdir}/
install -m0644 $RPM_SOURCE_DIR/SuSEfirewall2.dhcp-server \
$RPM_BUILD_ROOT/%{susefw2dir}/dhcp-server
install -d -m0755 $RPM_BUILD_ROOT/etc/sysconfig/network/if-up.d
install -d -m0755 $RPM_BUILD_ROOT/etc/sysconfig/network/scripts
install -m0755 $RPM_SOURCE_DIR/if-up.d.dhcpd-restart-hook \
$RPM_BUILD_ROOT/etc/sysconfig/network/scripts/dhcpd-restart-hook
ln -sf ../scripts/dhcpd-restart-hook \
$RPM_BUILD_ROOT/etc/sysconfig/network/if-up.d/60-dhcpd-restart-hook
%pre
# In the past, the name of the source package was "dhcp" but the subpackage
# with the common files was named "dhcp-base" -- thus, no subpackage had the
# same name as the parent package. This lead to trouble on various ends, like
# the putonftp mechanism, so "dhcp-base" was renamed to "dhcp".
#
# During a YaST system update, the first package to be updated is "dhcp", which
# should --and does-- obsolete the dhcp-base package.
# However, if RPMv4 is used, there is a peculiarity: RPMv4 automatically
# invents an 'obsolete' when it sees a 'provides'.
# Since the old dhcp-server package (SLES8) did provide
# Provides: dhcp_server dhcp:/usr/sbin/dhcpd dhcp
# RPMv4 removes the dhcp-server package.
#
# This in itself is not a problem because the package is re-installed later
# (RPMv4 is not that intelligent). However, if the service is destined to be
# started at boot time, the runlevel links will be gone, so the service will
# not be started after the update. To restore the links, there is no better way
# than remember that the service was running before updating the "dhcp" package,
# and restore the links at "dhcp-server" installation time.
if [ ${1:-0} -gt 1 ]; then # update
if sbin/chkconfig -c dhcpd; then
touch var/adm/dhcpd_needs_insserv
fi
fi
# fix manual page permissions
find $RPM_BUILD_ROOT/%{_mandir} -type f | xargs chmod 644
# copy some documentation and examples from src dir
install -m0644 $RPM_SOURCE_DIR/dhcp.LIESMICH LIESMICH.SuSE
install -m0644 $RPM_SOURCE_DIR/dhcp.README README.SuSE
install -m0644 $RPM_SOURCE_DIR/dhcp.README.upgrade README.upgrade
install -m0644 $RPM_SOURCE_DIR/DDNS-howto.txt .
tar xzf $RPM_SOURCE_DIR/contrib.tar.gz
mv doc/examples .
tar xzf $RPM_SOURCE_DIR/examples.tar.gz
rm -f doc/{References.xml,Makefile*}
rm -f contrib/dhcp.spec
%if ! 0%{?with_ldap:%with_ldap}
rm -f doc/draft-ietf-dhc-ldap-schema-01.txt
rm -f contrib/dhcp.schema README.ldap
rm -f contrib/dhcpd-conf-to-ldap.pl
%endif
%pre server
/usr/sbin/useradd -r -g nogroup -s /bin/false -c "DHCP server daemon" -d /var/lib/dhcp dhcpd 2> /dev/null ||:
if [ ! -x usr/sbin/dhcpd.lpf -a \
! -d usr/share/doc/packages/dhcp-server/ms2isc ]; then
# usr/sbin/dhcpd.lpf was added _after_ release of 9.1;
# usr/share/doc/packages/dhcp-server/ms2isc was added with 9.0;
# thus, if both are not present we are updating from pre 9.0 AND
# we are NOT updating a 9.1 released package (that has not been updated before).
# 9.0 already had a binary compiled with BSD sockets.
touch etc/dhcpd_updating_from_lpf_style
fi
%post server
%{fillup_and_insserv -n dhcpd dhcpd}
%{fillup_only -ans syslog dhcpd}
if grep -q '^DHCPD_RUN_AS="nobody"' etc/sysconfig/dhcpd; then
tmpfile=$(mktemp -q etc/sysconfig/dhcpd.XXXXXX)
sed 's|^DHCPD_RUN_AS="nobody"|DHCPD_RUN_AS="dhcpd"|' etc/sysconfig/dhcpd \
> $tmpfile && mv $tmpfile etc/sysconfig/dhcpd
rm -f $tmpfile
fi
%{fillup_and_insserv -n dhcpd dhcpd dhcpd6}
%{fillup_only -ans syslog dhcpd}
# update?
if [ ${FIRST_ARG:-0} -gt 1 ]; then
if [ -e etc/dhcpd_updating_from_lpf_style -a -x usr/sbin/dhcpd.lpf ]; then
if /etc/init.d/dhcpd status &>/dev/null; then
was_running=true
/etc/init.d/dhcpd stop
else
was_running=false
fi
tmpfile=$(mktemp -q etc/sysconfig/dhcpd.XXXXXX)
sed 's|^DHCPD_BINARY=""|DHCPD_BINARY="/usr/sbin/dhcpd.lpf"|' etc/sysconfig/dhcpd \
> $tmpfile && mv $tmpfile etc/sysconfig/dhcpd
rm -f $tmpfile
if $was_running; then
/etc/init.d/dhcpd start
fi
fi
# see comment above
if [ -f var/adm/dhcpd_needs_insserv ]; then
sbin/insserv dhcpd
rm var/adm/dhcpd_needs_insserv
fi
if grep -q '^DHCPD_RUN_AS=.*nobody' etc/sysconfig/dhcpd; then
tmpfile=$(mktemp -q etc/sysconfig/dhcpd.XXXXXX)
sed 's|^DHCPD_RUN_AS=.*|DHCPD_RUN_AS="dhcpd"|' etc/sysconfig/dhcpd \
> $tmpfile && mv $tmpfile etc/sysconfig/dhcpd
rm -f $tmpfile
fi
if grep -q '^DHCPD_BINARY=.*dhcpd\..*' etc/sysconfig/dhcpd; then
tmpfile=$(mktemp -q etc/sysconfig/dhcpd.XXXXXX)
sed 's|^DHCPD_BINARY=.*|DHCPD_BINARY=""|' etc/sysconfig/dhcpd \
> $tmpfile && mv $tmpfile etc/sysconfig/dhcpd
rm -f $tmpfile
fi
fi
rm -f etc/dhcpd_updating_from_lpf_style
test -s etc/dhcpd.conf || { cp -p usr/share/doc/packages/dhcp-server/dhcpd.conf etc/; }
exit 0
%postun server
%restart_on_update dhcpd
%insserv_cleanup
%preun server
%stop_on_removal dhcpd
%stop_on_removal dhcpd6
%postun server
%restart_on_update dhcpd
%restart_on_update dhcpd6
%insserv_cleanup
%post relay
%{fillup_and_insserv -n dhcrelay dhcrelay}
%postun relay
%restart_on_update dhcrelay
%insserv_cleanup
%{fillup_and_insserv -n dhcrelay dhcrelay dhcrelay6}
%preun relay
%stop_on_removal dhcrelay
%stop_on_removal dhcrelay6
%postun relay
%restart_on_update dhcrelay
%restart_on_update dhcrelay6
%insserv_cleanup
%post client
touch var/lib/dhcp/dhclient.leases
test -e %{_localstatedir}/lib/dhcp/dhclient.leases || \
touch %{_localstatedir}/lib/dhcp/dhclient.leases
test -e %{_localstatedir}/lib/dhcp6/dhclient6.leases || \
touch %{_localstatedir}/lib/dhcp6/dhclient6.leases
%clean
if ! test -f /.buildenv; then rm -rf $RPM_BUILD_ROOT; fi
%files
%defattr(-,root,root)
%doc LICENSE README RELNOTES doc
/usr/bin/omshell
%dir /var/lib/dhcp
%config %{susefw2dir}/dhcp-server
%{_bindir}/omshell
%doc %{_mandir}/man1/omshell.1.gz
%doc %{_mandir}/man5/dhcp-eval.5.gz
%config %{susefw2dir}/dhcp-server
%doc %{_mandir}/man5/dhcp-options.5.gz
%files doc
%defattr(-,root,root)
%doc LICENSE README RELNOTES
%doc LIESMICH.* README.*
%doc DDNS-howto.txt doc/*
%doc contrib examples
%files server
%defattr(-,root,root)
%doc clearip reset-ip
%doc dnscompr.py
/usr/sbin/dhcpd
/usr/sbin/dhcpd.bsd
/usr/sbin/rcdhcpd
/usr/sbin/svtest
%config /usr/sbin/dhcpsync
%config /usr/sbin/leasestate
%config /usr/sbin/listlease
%config /usr/sbin/leases.awk
%config /etc/init.d/dhcpd
%dir /var/lib/dhcp/var
%dir /var/lib/dhcp/var/run
%attr(755,dhcpd,root) %dir /var/lib/dhcp/db
%dir /var/lib/dhcp/etc
%dir /var/lib/dhcp/dev
%doc %{_mandir}/man5/dhcpd.conf.5.gz
%doc %{_mandir}/man5/dhcp-options.5.gz
%doc %{_mandir}/man5/dhcpd.leases.5.gz
%{_sbindir}/dhcpd
%{_sbindir}/dhcpd6
%{_sbindir}/rcdhcpd
%{_sbindir}/rcdhcpd6
%config %{_sysconfdir}/init.d/dhcpd
%config %{_sysconfdir}/init.d/dhcpd6
%config(noreplace) %{_sysconfdir}/dhcpd.conf
%config(noreplace) %{_sysconfdir}/dhcpd6.conf
%dir %{_localstatedir}/lib/dhcp
%dir %{_localstatedir}/lib/dhcp/etc
%dir %{_localstatedir}/lib/dhcp/dev
%dir %{_localstatedir}/lib/dhcp/%_lib
%dir %{_localstatedir}/lib/dhcp/var
%dir %{_localstatedir}/lib/dhcp/var/run
%attr(755,dhcpd,root) %dir %{_localstatedir}/lib/dhcp/db
%dir %{_localstatedir}/lib/dhcp6
%dir %{_localstatedir}/lib/dhcp6/etc
%dir %{_localstatedir}/lib/dhcp6/dev
%dir %{_localstatedir}/lib/dhcp6/%_lib
%dir %{_localstatedir}/lib/dhcp6/var
%dir %{_localstatedir}/lib/dhcp6/var/run
%attr(755,dhcpd,root) %dir %{_localstatedir}/lib/dhcp6/db
%doc %{_mandir}/man8/dhcpd.8.gz
%doc %{_mandir}/man8/dhcpsync.8.gz
%doc dhcpd.conf LIESMICH.%VENDOR README.%VENDOR README.upgrade 3.0b1-lease-convert DDNS-howto.txt genDDNSKey.sh
%doc examples
%doc contrib/ms2isc
%if %DHCPD_LDAP
%doc contrib/dhcp.schema
%doc contrib/dhcpd-conf-to-ldap.pl
%doc README.ldap doc/draft-ietf-dhc-ldap-schema-01.txt
%dir /etc/openldap
%dir /etc/openldap/schema
%attr(0644, root, root) %config /etc/openldap/schema/dhcp.schema
%doc %{_mandir}/man5/dhcpd.conf.5.gz
%doc %{_mandir}/man5/dhcpd.leases.5.gz
%if 0%{?with_ldap:1}
%dir %{_sysconfdir}/openldap
%dir %{_sysconfdir}/openldap/schema
%attr(0644, root, root) %config %{_sysconfdir}/openldap/schema/dhcp.schema
%endif
/var/adm/fillup-templates/sysconfig.dhcpd
/var/adm/fillup-templates/sysconfig.syslog-dhcpd
%dir /var/lib/dhcp/%_lib
%{omc_svcdir}/dhcpd.xml
/etc/sysconfig/network/scripts/dhcpd-restart-hook
/etc/sysconfig/network/if-up.d/60-dhcpd-restart-hook
%{omc_svcdir}/dhcpd6.xml
%{_sysconfdir}/sysconfig/network/scripts/dhcpd-restart-hook
%{_sysconfdir}/sysconfig/network/if-up.d/60-dhcpd-restart-hook
%{_localstatedir}/adm/fillup-templates/sysconfig.dhcpd
%{_localstatedir}/adm/fillup-templates/sysconfig.syslog-dhcpd
%files client
%defattr(-,root,root)
/sbin/dhclient
/sbin/dhclient6
/sbin/dhclient-script
%config(noreplace) /etc/dhclient.conf
%config(noreplace) %{_sysconfdir}/dhclient.conf
%config(noreplace) %{_sysconfdir}/dhclient6.conf
%doc %{_mandir}/man5/dhclient.conf.5.gz
%doc %{_mandir}/man5/dhclient.leases.5.gz
%doc %{_mandir}/man8/dhclient.8.gz
%doc %{_mandir}/man8/dhclient-script.8.gz
%dir %{_localstatedir}/lib/dhcp
%dir %{_localstatedir}/lib/dhcp6
%files relay
%defattr(-,root,root)
/usr/sbin/dhcrelay
/usr/sbin/rcdhcrelay
%config /etc/init.d/dhcrelay
%{_sbindir}/dhcrelay
%{_sbindir}/dhcrelay6
%{_sbindir}/rcdhcrelay
%{_sbindir}/rcdhcrelay6
%config %{_sysconfdir}/init.d/dhcrelay
%config %{_sysconfdir}/init.d/dhcrelay6
%doc %{_mandir}/man8/dhcrelay.8.gz
/var/adm/fillup-templates/sysconfig.dhcrelay
%{_localstatedir}/adm/fillup-templates/sysconfig.dhcrelay
%files devel
%defattr(-,root,root)

138
dhcpd.conf Normal file
View File

@ -0,0 +1,138 @@
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# if you do not use dynamical DNS updates:
#
# if you want to use dynamical DNS updates, you should first read
# read /usr/share/doc/packages/dhcp-server/DDNS-howto.txt
#
ddns-updates off;
# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
#
# Define RFC 3442 classless static route option (121);
# the following _example_ routes:
# 192.168.2.254/32 via 0.0.0.0 (device route)
# 192.168.2.253/32 via 192.168.1.2 (255.255.255.255)
# 192.2.0.128/25 via 192.168.1.2 (255.255.255.128)
# 192.168.2.0/24 via 192.168.1.2 (255.255.255.0)
# 172.16.0.0/12 via 192.168.1.2 (255.240.0.0)
# 10.0.0.0/8 via 192.168.1.2 (255.0.0.0)
# default via 192.168.1.1
# have to be written as:
# option rfc3442-classless-static-routes
# 32, 192, 168, 2, 254, 0, 0, 0, 0,
# 32, 192, 168, 2, 253, 192, 168, 1, 2,
# 25, 192, 2, 0, 128, 192, 168, 1, 2,
# 24, 192, 168, 3, 192, 168, 1, 2,
# 12, 172, 16, 192, 168, 1, 2,
# 8, 10, 192, 168, 1, 2,
# 0, 192, 168, 1, 1;
#
# Note: you have to specify the default gateway here
# as well, because when classless routes are in use,
# the 'routers' option is ignored by the dhcp client.
#
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 10.152.187.0 netmask 255.255.255.0 {
}
# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;
option broadcast-address 10.254.239.31;
option routers rtr-239-32-1.example.org;
}
# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}

107
dhcpd6.conf Normal file
View File

@ -0,0 +1,107 @@
# Server configuration file example for DHCPv6
# From the file used for TAHI tests.
#
# For more iformations about IPv6 addresses, see also:
# http://tools.ietf.org/html/rfc4193
# http://tools.ietf.org/html/rfc4291
# http://www.iana.org/assignments/ipv6-address-space/
#
# The addresses in the examples bellow are from the:
# FC00::/7 Unique Local Unicast [RFC4193]
# address space.
#
# Please allocate own prefix (6to4, tunnel broker) !
#
# IPv6 address valid lifetime
# (at the end the address is no longer usable by the client)
# (set to 30 days, the usual IPv6 default)
default-lease-time 2592000;
# IPv6 address preferred lifetime
# (at the end the address is deprecated, i.e., the client should use
# other addresses for new connections)
# (set to 7 days, the usual IPv6 default)
preferred-lifetime 604800;
# T1, the delay before Renew
# (default is 1/2 preferred lifetime)
# (set to 1 hour)
option dhcp-renewal-time 3600;
# T2, the delay before Rebind (if Renews failed)
# (default is 3/4 preferred lifetime)
# (set to 2 hours)
option dhcp-rebinding-time 7200;
# Enable RFC 5007 support (same than for DHCPv4)
allow leasequery;
# Global definitions for name server address(es) and domain search list
option dhcp6.name-servers fc00:501:ffff:100:200:ff:fe00:3f3e;
option dhcp6.domain-search "test.example.com","example.com";
# Set preference to 255 (maximum) in order to avoid waiting for
# additional servers when there is only one
##option dhcp6.preference 255;
# Server side command to enable rapid-commit (2 packet exchange)
##option dhcp6.rapid-commit;
# The delay before information-request refresh
# (minimum is 10 minutes, maximum one day, default is to not refresh)
# (set to 6 hours)
option dhcp6.info-refresh-time 21600;
# Static definition (must be global)
host myclient {
# The entry is looked up by this
host-identifier option
dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2;
# A fixed address
fixed-address6 fc00:501:ffff:100::1234;
# A fixed prefix
fixed-prefix6 fc00:501:ffff:101::/64;
# Override of the global definitions,
# works only when a resource (address or prefix) is assigned
option dhcp6.name-servers fc00:501:ffff:100:200:ff:fe00:4f4e;
# For debug (to see when the entry statements are executed)
# (log "sol" when a matching Solicitation is received)
##if packet(0,1) = 1 { log(debug,"sol"); }
}
# The subnet where the server is attached
# (i.e., the server has an address in this subnet)
subnet6 fc00:501:ffff:100::/64 {
# Two addresses available to clients
# (the third client should get NoAddrsAvail)
range6 fc00:501:ffff:100::10 fc00:501:ffff:100::11;
# Use the whole /64 prefix for temporary addresses
# (i.e., direct application of RFC 4941)
range6 fc00:501:ffff:100:: temporary;
# Some /64 prefixes available for Prefix Delegation (RFC 3633)
prefix6 fc00:501:ffff:100:: fc00:501:ffff:111:: /64;
}
# A second subnet behind a relay agent
subnet6 fc00:501:ffff:101::/64 {
range6 fc00:501:ffff:101::10 fc00:501:ffff:101::11;
# Override of the global definitions,
# works only when a resource (address or prefix) is assigned
option dhcp6.name-servers fc00:501:ffff:101:200:ff:fe00:3f3e;
}
# A third subnet behind a relay agent chain
subnet6 fc00:501:ffff:102::/64 {
range6 fc00:501:ffff:102::10 fc00:501:ffff:102::11;
}

88
dhcpd6.xml Normal file
View File

@ -0,0 +1,88 @@
<?xml version="1.0"?>
<!--
Copyright (c) 2006 Novell, Inc. All rights reserved.
Service Description XML Document for dhcpd6.
This file should be placed in /etc/omc/svcinfo.d
Note: The name of the service is the name of this file without the .xml
file extension.
-->
<serviceDescription version="1.0">
<!-- Caption for display purposes -->
<caption>ISC DHCPv6 4.x Server</caption>
<!-- Description of this service -->
<description>
ISC Dynamic Host Configuration Protocol for IPv6 Server
</description>
<!--
The startCommand tag specifies the command line that will be
invoked to start the service. The return code from this command
must be as follows:
0 - success
1 - generic or unspecified error
2 - invalid or excess argument(s)
3 - unimplemented feature (e.g. "reload")
4 - user had insufficient privileges
5 - program is not installed
6 - program is not configured
7 - program is not running
-->
<startCommand>/etc/init.d/dhcpd6 start</startCommand>
<!--
The reStartCommand tag specifies the command line that will be
invoked to restart the service. The return code from this command
must be as specified in the startCommand tag.
-->
<reStartCommand>/etc/init.d/dhcpd6 restart</reStartCommand>
<!--
The stopCommand tag specifies the command line that will be
invoked to stop the service. The return code from this command
must be as specified in the startCommand tag.
-->
<stopCommand>/etc/init.d/dhcpd6 stop</stopCommand>
<!--
The statusCommand specifies the command line that can be run
that will report on the status of the service. The return code
from this command line should be as follows:
0 - service up and running
1 - service dead, but /var/run/ pid file exists
2 - service dead, but /var/lock/ lock file exists
3 - service not running (unused)
4 - service status unknown :-(
-->
<statusCommand>/etc/init.d/dhcpd6 status</statusCommand>
<!--
The processInformation tag allows the XML Service provider to
identify the processes that belong to the service. This allows
the ServiceProcess associations to be instrumented.
If the process_information tag is not specifed, the will be no
ServiceProcess association for the service.
-->
<processInformation>
<name>dhcpd6</name>
<modulePath>/usr/sbin/dhcpd6</modulePath>
</processInformation>
<!--
Define the services that this service has a dependency on.
There must be a corresponding Service Description XML file
for the antecedent service in the /etc/omc/svcinfo.d directory.
-->
<dependsOn>
<serviceName>network</serviceName>
</dependsOn>
</serviceDescription>

View File

@ -1,37 +0,0 @@
#!/bin/bash
# Peter Poeml <poeml@suse.de>
# $Id: dhcpsync,v 1.10 2002/01/27 14:24:42 poeml Exp $
# for usage info, refer to dhcpsync(8)
test -n "$1" && SLAVE=$1
: ${SLAVE:?}
: ${SHARED:="/etc/dhcpd.conf.shared"}
: ${KEY:="/root/.ssh/dhcp-share"}
: ${SLEEP:=10}
# if run from the commandline, do not use an identity
# that ssh-agent holds for us -- use the $KEY
test -t 0 && unset SSH_AUTH_SOCK
PROGNAME=`basename $0`
PIDFILE=/var/run/$PROGNAME.pid
test "`/etc/init.d/dhcpd probe`" = restart \
&& {
trap 'rm $PIDFILE; exit 0' SIGTERM SIGINT SIGQUIT
test -e $PIDFILE \
&& { echo "$0 [`cat $PIDFILE`] is already running... maybe you can delete $PIDFILE. Exiting."; exit 2; }
echo $$ > $PIDFILE
logger $PROGNAME: restarting dhcpd;
/etc/init.d/dhcpd try-restart;
sleep $SLEEP;
RSYNC_RSH="/usr/bin/ssh -i $KEY" /usr/bin/rsync -cav $SHARED $SLAVE:/etc/;
rm $PIDFILE
}
exit 0

View File

@ -1,265 +0,0 @@
.\" Automatically generated by Pod::Man version 1.15
.\" Sun Jan 27 15:29:23 2002
.\"
.\" Standard preamble:
.\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used
.\" to do unbreakable dashes and therefore won't be available. \*(C` and
.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr
.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
.\" index entries marked with X<> in POD. Of course, you'll have to process
.\" the output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.\"
.\" For nroff, turn off justification. Always turn off hyphenation; it
.\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
.bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ======================================================================
.\"
.IX Title "DHCPSYNC.8 1"
.TH DHCPSYNC.8 1 "1.10" "2002-01-27" " "
.UC
.SH "NAME"
dhcpsync \- synchronize \s-1DHCP\s0 configuration file
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
[ KEY=keyfile ] [ SHARED=/path/to/conffile ] [ SLEEP=seconds ] \fBdhcpsync\fR <hostname of slave>
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This script shows how to detect if the dhcpd configuration has changed,
and sync a shared conf file to the slave, and restart both servers.
.Ip "o" 4
It is run on the master failover peer
.Ip "o" 4
It uses rsync over ssh with an enforced command on the slave.
.Ip "o" 4
It relies on all include files being mentioned in \f(CW\*(C`DHCPD_CONF_INCLUDE_FILES\*(C'\fR in
/etc/rc.config.d/dhcpd.rc.config. These files are looked at to find out
whether one of the config files is newer than dhcpd's pid file
('\fBrcdhcpd probe\fR')
.PP
\&\fBdhcpsync\fR should actually be usable without modification. But you need to do
some configuration, read on.
.SH "CONFIGURATION"
.IX Header "CONFIGURATION"
In this example, host1 is the master, host2 is the slave.
.PP
A key can be generated like this:
(save the key in /root/.ssh/dhcp-share, and press enter when asked
for the passphrase.)
.PP
.Vb 11
\& root@host1 ~ # ssh-keygen -C 'dhcp-share@host1'
\& Generating public/private rsa1 key pair.
\& Enter file in which to save the key (/root/.ssh/identity):
\& /root/.ssh/dhcp-share
\& Enter passphrase (empty for no passphrase):
\& Enter same passphrase again:
\& Your identification has been saved in /root/.ssh/dhcp-share.
\& Your public key has been saved in /root/.ssh/dhcp-share.pub.
\& The key fingerprint is:
\& 21:11:ec:20:00:42:2f:20:7e:1f:df:6a:d1:25:3d:81 dhcp-share@host1
\& root@host1 ~ #
.Ve
Now you add the key to the authorized_keys file on the slave (host2):
.PP
.Vb 2
\& root@host1 ~ # cat ~/.ssh/dhcp-share.pub | ssh root@host2 \e
\& 'mkdir -p .ssh; cat >> .ssh/authorized_keys'
.Ve
(This will append the key to an existing authorized_keys file, or create one.)
.PP
To protect the root account (you could as well use another account, of
course), you can edit .ssh/authorized_keys on host2 like this:
(Thereby, only the forced command can be executed, and only from host1.)
.PP
.Vb 9
\& from="host1",command="rsync --server -vlogDtprc . /etc//dhcpd.con
\& f.shared; logger dhcpsync: restarting dhcpd; /etc/init.d/dhcpd tr
\& y-restart",no-port-forwarding,no-X11-forwarding,no-agent-forwardi
\& ng,no-pty 1024 35 15374502219051682029939108886754918218659904062
\& 39933745099888497383649196106925140349057243770084885129581786366
\& 05465027720474718409180919631615923416064825206960144541025646589
\& 06475280304001588034598721095438582948133259768243300555751330261
\& 946744924207972755699883176592160263892584211118353855811030877 d
\& hcp-share@host1
.Ve
To run \fBdhcpsync\fR, you must specify the hostname of the \f(CW\*(C`SLAVE\*(C'\fR by putting it
into the environment,
.PP
.Vb 1
\& root@host1 ~ # SLAVE=host2 dhcpsync
.Ve
or, alternatively, giving the name as the first argument:
.PP
.Vb 1
\& root@host1 ~ # dhcpsync host2
.Ve
.SH "CHANGING THE DEFAULTS"
.IX Header "CHANGING THE DEFAULTS"
Please refer to the \s-1FILES\s0 section to see what the defaults are.
.PP
The name of the file to be synced can be overridden from the environment
(bash example):
.PP
.Vb 1
\& root@host1 ~ # SHARED="some_other_file" dhcpsync host2
.Ve
Likewise, the ssh key to be used to authenticate can be specified via the
\&\f(CW\*(C`KEY\*(C'\fR variable.
.SH "AUTOMATION"
.IX Header "AUTOMATION"
The script can be run from cron, such as:
.PP
.Vb 1
\& -* * * * * root /usr/sbin/dhcpsync host2
.Ve
.SH "FILES"
.IX Header "FILES"
.Vb 2
\& /etc/dhcpd.conf.shared default conf file that is to be synced
\& /root/.ssh/dhcp-share default file name of the ssh1 private key
.Ve
.SH "AUTHORS"
.IX Header "AUTHORS"
.Vb 1
\& Peter Poeml <poeml@suse.de>
.Ve
.SH "BUGS"
.IX Header "BUGS"
If you feel that this script could be improved, please submit a bug report!
.PP
Someone who has access to the private key and the master's \s-1IP\s0 address can
overwrite the configuration file, possibly causing harm.
.PP
After an offline time of the secondary machine, it would in fact have to pull a fresh
config before starting up on next reboot.
.SH "DISCLAIMER"
.IX Header "DISCLAIMER"
\&\fBdhcpsync\fR is provided ``\s-1AS\s0 \s-1IS\s0'' and any express or implied warranties,
including, but not limited to, the implied warranties of merchantability
and fitness for a particular purpose are disclaimed.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIdhcpd\fR\|(8), /usr/share/doc/packages/dhcp/*

View File

@ -1,25 +0,0 @@
#!/usr/bin/python
# Copyright 2005 Peter Poeml <poeml@suse.de>. All Rights Reserved.
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
def compr(names):
import dns, dns.name, cStringIO
f = cStringIO.StringIO()
compress = {}
for i in names:
n = dns.name.from_text(i)
n.to_wire(f, compress)
return f.getvalue()
if __name__ == '__main__':
import sys
nlist = sys.argv[1:]
print repr(compr(nlist))

View File

@ -57,6 +57,7 @@ fi
. /etc/sysconfig/network/ifcfg-"$CONFIG" 2>/dev/null || true
: ${DHCPD_IFUP_RESTART:=auto}
: ${DHCPD6_IFUP_RESTART:=auto}
iface_needs_restart()
{
@ -65,17 +66,17 @@ iface_needs_restart()
-f /proc/net/vlan/$1
}
case "$0" in
*if-up.d*)
dhcpv4_server_restart()
{
#
# don't do anything if we are disabled either
# in the /etc/sysconfig/dhcpd or per interface
# in the /etc/sysconfig/network/ifcfg-"$CONFIG"
#
test "$DHCPD_IFUP_RESTART" = no && exit 0
test "$DHCPD_IFUP_RESTART" = no && return 0
# don't restart for loopback interface
case $INTERFACE in (lo) exit 0 ;; esac
case $INTERFACE in (lo) return 0 ;; esac
restart_needed=$DHCPD_IFUP_RESTART
if test -n "$DHCPD_INTERFACE" \
@ -86,7 +87,7 @@ case "$0" in
# don't restart when _one_ involved
# interface is not available/up yet
is_iface_up $I || exit 0
is_iface_up $I || return 0
# check if this interface is involved
if test "$I" = "$INTERFACE" ; then
@ -102,6 +103,50 @@ case "$0" in
if test "$restart_needed" = yes ; then
/etc/init.d/dhcpd try-restart
fi
}
dhcpv6_server_restart()
{
#
# don't do anything if we are disabled either
# in the /etc/sysconfig/dhcpd or per interface
# in the /etc/sysconfig/network/ifcfg-"$CONFIG"
#
test "$DHCPD6_IFUP_RESTART" = no && return 0
# don't restart for loopback interface
case $INTERFACE in (lo) return 0 ;; esac
restart_needed=$DHCPD6_IFUP_RESTART
if test -n "$DHCPD6_INTERFACE" \
-a "$restart_needed" != yes ;
then
for I in $DHCPD6_INTERFACE ; do
test -n "$I" || continue
# don't restart when _one_ involved
# interface is not available/up yet
is_iface_up $I || return 0
# check if this interface is involved
if test "$I" = "$INTERFACE" ; then
# check if a restart is needed
if iface_needs_restart $I ; then
restart_needed=yes
fi
fi
done
fi
if test "$restart_needed" = yes ; then
/etc/init.d/dhcpd6 try-restart
fi
}
case "$0" in
*if-up.d*)
dhcpv4_server_restart
dhcpv6_server_restart
;;
*if-down.d*)
# don't do anything

View File

@ -1,116 +0,0 @@
#!/usr/bin/awk -f
# Author: wilsonj@cs.baylor.edu
# Date: I think I wrote this January 2002
# Disclaimer: at one point, it worked with the lease file for ISC DHCPD v3.0pl2
# legalese: Copyright © 1998-2003 Baylor University
# THIS SOFTWARE, DATA AND/OR DOCUMENTATION ARE PROVIDED "AS IS"
# AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
# LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE.
# Expected input: /var/lib/dhcp/db/dhcpd.leases
# (For best results, pre-process the lease
# file with 'grep -v "uid \""')
# Usually invoked as, 'leases.awk /var/lib/dhcp/db/dhcpd.leases'
# Format of output (tab-delimited):
# ip,hardware[ip],compname[ip],state[ip],expiration-time-in-GMT[ip]
# set the RECORD SEPARATOR, RS, to "}" ... records span multiple lines
BEGIN {RS="}"}
# we only care about records that are greater than so-many-characters
# (why 5? I guess a CRLF may be 2 bytes ... isn't it just LF in BSD?)
length($0) > 5 { total++
# only want record those variables we've captured,
# so reset values to null
endtime = ""
hwaddr = ""
cn = ""
st = ""
for(i=1;i<=NF;i++) {
# if this field matches the word "lease"
if($i ~ /lease/)
# capture the next field into ipaddr
ipaddr=$(i+1)
# if this field matches the word "ethernet"
else if($i ~ /ethernet/) {
# get rid of the trailing semi-colon
split($(i+1),arr,";")
# and capture the hwaddr with ipaddr as key
hwaddr=arr[1]
}
# if this field matches the word "client-hostname"
else if($i ~ /client-hostname/) {
# get rid of the enclosing quotes
split($(i+1),arr,"\"")
# capture the computer name
cn=arr[2]
}
# if this field matches the word "binding"
else if($i ~ /binding/) {
# we don't care about what the next binding state is
# so go on and process the rest of this record
if($(i-1) ~ /next/) { # do nothing
}
else {
split($(i+2),arr,";")
st=arr[1]
}
}
# give me a timestamp or two
else if($i ~ /ends/) {
#if $i == "ends" then $i+2 is enddate, and $i+3 is endtime
dtstmp = $(i+2);
split($(i+3),arr,";")
tmstmp = arr[1];
endtime=sprintf("%s %s",dtstmp,tmstmp)
}
}
if( length(hwaddr) > 0 )
hardware[ipaddr]=hwaddr
else
hardward[ipaddr]="NONE"
if( length(cn) > 0 )
compname[ipaddr]=cn
else
compname[ipaddr]="NONE"
if( length(st) > 0 )
state[ipaddr]=st
else
state[ipaddr]="NONE"
if( length(endtime) > 0 )
mytime[ipaddr]=endtime
else
mytime[ipaddr]="NONE"
}
# for every ipaddr we captured, display ip, hardware, and compname
END { for(ip in hardware) {
if(length(IP_ONLY)>0)
print ip
else
printf("%s\t%s\t%s\t%s\t%s\n",\
ip,hardware[ip],compname[ip],state[ip],mytime[ip])
}
}

View File

@ -1,61 +0,0 @@
#! /usr/bin/perl
#
# Author: Kevin C. Miller <kevinm@andrew.cmu.edu>
# http://www.andrew.cmu.edu/~kevinm/dhcp/failover.html
#
# The copyright is with the author. We (SuSE) include this script
# with his permission.
#
use strict;
my %LeaseBS;
my %LeaseNBS;
my %Update;
my $level = 1;
my $IP = '';
my ($ip, $bs, $nbs, $join);
open(FILE, "/var/lib/dhcp/dhcpd.leases");
while(my $line = <FILE>) {
next if ($line =~ /^\#/);
if ($level == 1) {
if ($line =~ /lease ([\d\.]+) \{/) {
$level++;
$IP = $1;
$LeaseBS{$IP} = '';
$LeaseNBS{$IP} = '';
$Update{$IP} = 0;
}
}elsif($level == 2) {
if ($line =~ /next binding state ([^\;]+)/) {
$LeaseNBS{$IP} = $1;
}elsif($line =~ /binding state ([^\;]+)/) {
$LeaseBS{$IP} = $1;
}elsif($line =~ /f_lupdate/) {
$Update{$IP} = 1;
}elsif($line =~ /\}/) {
$level--;
# print "$IP: $Leases{$IP}->[0] $Leases{$IP}->[1]\n";
$IP = '';
}
}
}
close(FILE);
format IP =
@<<<<<<<<<<<<<<<<<< @<<<<<<<<< @ @<<<<<<<<<
$ip, $bs, $join, $nbs
.
$~ = "IP";
print
"IP Address Binding Next Binding\n";
foreach $ip (sort keys %LeaseBS) {
$bs = $LeaseBS{$ip};
$nbs = $LeaseNBS{$ip};
$join = '>';
$join = '*' if ($Update{$ip});
write(STDOUT);
}

View File

@ -1,36 +0,0 @@
#! /usr/bin/perl
#
# Author: Kevin C. Miller <kevinm@andrew.cmu.edu>
# http://www.andrew.cmu.edu/~kevinm/dhcp/failover.html
#
# The copyright is with the author. We (SuSE) include this script
# with his permission.
#
use strict;
my $LastLease = '';
my $savelease = 0;
my $prlease = 0;
my $LFILE = "/var/lib/dhcp/dhcpd.leases";
$LFILE = $ARGV[1] if ($ARGV[1] ne '');
open(FILE, $LFILE);
while(my $a = <FILE>) {
if ($a =~ /^lease /) {
print $LastLease if ($prlease);
$savelease = 1;
$prlease = 0;
$LastLease = $a;
}else{
$LastLease .= $a if ($savelease);
}
if ($a =~ /^\}/) {
$savelease = 0;
}
$prlease = 1 if ($a =~ /$ARGV[0]/);
}
close(FILE);
print $LastLease if ($prlease);

162
rc.dhcpd
View File

@ -2,63 +2,70 @@
# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH
# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH
# Copyright (c) 2002, 2003 SuSE Linux AG
# Copyright (c) 2004-2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# Author: Rolf Haberrecker <rolf@suse.de>, 1997, 1998, 1999
# Peter Poeml <poeml@suse.de>, 2000, 2001, 2002, 2003
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# /etc/init.d/dhcpd
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author: Rolf Haberrecker <rolf@suse.de>, 1997-1999
# Peter Poeml <poeml@suse.de>, 2000-2006
# Marius Tomaschewski <mt@suse.de>, 2006-2010
#
# /etc/init.d/dhcp-server
# and its symbolic link
# /usr/sbin/rcdhcpd
# /usr/sbin/rcdhcp-server
#
### BEGIN INIT INFO
# Provides: dhcpd
# Required-Start: $network $remote_fs network-remotefs
# Should-Start: $named $syslog $time ldap ndsd
# Required-Stop: $network $remote_fs network-remotefs
# Should-Stop: $named $syslog ldap ndsd
# Provides: dhcp-server
# Required-Start: $remote_fs $network
# Should-Start: network-remotefs $named $syslog $time ldap ndsd
# Required-Stop: $remote_fs $network
# Should-Stop: network-remotefs $named $syslog ldap ndsd
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: DHCP Server
# Description: Start DHCP (Dynamic Host Configuration Protocol)
# server. (Note: if configured for failover it
# Short-Description: ISC DHCP 4.x Server
# Description: Start ISC DHCP (Dynamic Host Configuration Protocol)
# 4.x series server.
# (Note: if configured for failover it
# needs to rely on time synchronisation.)
### END INIT INFO
test -s /etc/sysconfig/dhcpd && . /etc/sysconfig/dhcpd
if [ -s /etc/sysconfig/dhcpd ]; then
SUPPORTS_CHROOT="yes"
SUPPORTS_RUN_AS="yes"
SUPPORTS_HUP="no"
. /etc/sysconfig/dhcpd
DHCPDv_OPT=-4
test "$SUPPORTS_CHROOT" = no && DHCPD_RUN_CHROOTED=no
test "$SUPPORTS_RUN_AS" = no && DHCPD_RUN_AS=""
test "$DHCPD_BINARY" = "/usr/sbin/dhcpd.lpf" -o \
"$DHCPD_BINARY" = "/usr/sbin/dhcpd.bsd" && \
DHCPD_BINARY=/usr/sbin/dhcpd
else
# pre 8.0
# Source SuSE config
. /etc/rc.config
test -s /etc/rc.config.d/dhcpd.rc.config && \
. /etc/rc.config.d/dhcpd.rc.config
# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
# Force execution if not called by a runlevel directory.
test $link = $base && START_DHCPD=yes
test "$START_DHCPD" = yes || exit 0
fi
test "$DHCPD_RUN_CHROOTED" = "yes" && CHROOT_PREFIX=/var/lib/dhcp/
DAEMON="DHCP server"
[ "$DHCPD_BINARY" = /usr/sbin/dhcpd.lpf ] && DHCPD_BINARY=/usr/sbin/dhcpd
DAEMON='ISC DHCPv4 4.x Server'
DAEMON_BIN=${DHCPD_BINARY:=/usr/sbin/dhcpd}
DAEMON_CONF=/etc/dhcpd.conf
DAEMON_STATE=/var/lib/dhcp
DAEMON_LEASES=dhcpd.leases
DAEMON_PIDFILE=/var/run/dhcpd.pid
STARTPROC_LOGFILE=/var/log/rc.dhcpd.log
SUPPORTS_HUP="no"
LDAP_CONF=/etc/openldap/ldap.conf
test "$DHCPD_RUN_CHROOTED" = "yes" && \
CHROOT_PREFIX="$DAEMON_STATE" || CHROOT_PREFIX=''
# 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
@ -88,11 +95,15 @@ rc_reset
# with force-reload (in case signalling is not supported) are
# considered a success.
if ! [ -x $DAEMON_BIN ]; then
if ! [ -x "$DAEMON_BIN" ]; then
if [ "$1" = "stop" ]; then exit 0; fi
echo >&2 "$0: \"$DAEMON_BIN\" is not an executable file. Exiting."
rc_failed 1
rc_status -v1
rc_exit
exit 5
fi
if ! [ -r "$DAEMON_CONF" ] ; then
if [ "$1" = "stop" ]; then exit 0; fi
echo >&2 "$0: \"$DAEMON_CONF\" config file missed. Exiting."
exit 6
fi
# remove empty pid files to avoid disturbing warnings by checkproc/killproc
@ -117,7 +128,9 @@ case "$1" in
## If the interfaces are not set, skip starting of dhcpd
## and return with "program not configured"
if [ -z "$DHCPD_INTERFACE" ]; then
echo -n "... set DHCPD_INTERFACE in /etc/sysconfig/dhcpd"
var="DHCPD_INTERFACE"
case $DHCPDv_OPT in -6) var=DHCPD6_INTERFACE ;; esac
echo -n "... set $var in /etc/sysconfig/dhcpd"
# Tell the user this has skipped
rc_status -s
# service is not configured
@ -128,7 +141,7 @@ case "$1" in
DHCPD_INTERFACE=""
fi
jail=/var/lib/dhcp; leases=dhcpd.leases
jail=${CHROOT_PREFIX:-${DAEMON_STATE}}; leases=$DAEMON_LEASES
if ! [ -e $jail/db/$leases ]; then
# until 9.0, the lease file was in /var/lib/dhcp and part of the package
if test -e $jail/$leases -a '!' -L $jail/$leases; then
@ -150,7 +163,7 @@ case "$1" in
if test "$DHCPD_RUN_CHROOTED" = "yes" ; then
## copy the conf file to the chroot jail (dhcpd has to be restarted anyway,
## when it has changed) and change path to leases file
for i in $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES $LDAP_CONF; do
for i in $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES $LDAP_CONF /etc /dev; do
if test -d "${i}" ; then
test -d "$CHROOT_PREFIX/${i}" || \
mkdir -p "$CHROOT_PREFIX/${i}"
@ -165,18 +178,19 @@ case "$1" in
cp -aL "$i" "${CHROOT_PREFIX}/${i%/*}/" &>/dev/null \
|| { echo "...$0:$LINENO: could not copy $i to chroot jail"; rc_failed; rc_status -v1; exit 6; }
done
libdir=$(basename $(echo /var/lib/dhcp/lib*))
libdir=$(basename $(echo ${CHROOT_PREFIX}/lib*))
if test -x /usr/bin/ldd ; then
get_ldd_deps()
{
ldd_wl="\/${libdir}\/lib"
ldd_bl="\/${libdir}\/libc\."
/usr/bin/ldd "$1" | \
while read -sr a b c d ; do
[ -n "$c" ] || continue
[[ $c =~ $ldd_wl ]] || continue
[[ $c =~ $ldd_bl ]] && continue
echo $c
done < <(/usr/bin/ldd "$1")
done
}
else
get_ldd_deps() { :; }
@ -191,11 +205,16 @@ case "$1" in
done | sort -u`
for i in $cplibs ; do
if [ -s "$i" ]; then
cp -pL "$i" "/var/lib/dhcp/$libdir/" \
cp -pL "$i" "${CHROOT_PREFIX}/$libdir/" \
|| { echo "...$0:$LINENO: could not copy $i to chroot jail"; rc_failed; rc_status -v1; exit 6; }
fi
fi
done
DHCPD_ARGS="-chroot $CHROOT_PREFIX -lf /db/dhcpd.leases"
# mount /proc into the chroot; the server fails if unable to read /proc/net/{dev,if_inet6}
mkdir -p ${CHROOT_PREFIX}/proc
mount -t proc -o ro proc ${CHROOT_PREFIX}/proc 2>/dev/null
DHCPD_ARGS="-chroot $CHROOT_PREFIX -lf /db/$DAEMON_LEASES"
## If there is a pid file containing a pid, the machine might have crashed. pid files in
## /var/run are always cleaned up at boot time, but this is not the case for the pid file in
@ -203,26 +222,32 @@ case "$1" in
## 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
i=$(<$CHROOT_PREFIX/$DAEMON_PIDFILE)
if pidof dhcpd &>/dev/null; then
echo -n "(already running) "
p=$(<$CHROOT_PREFIX/$DAEMON_PIDFILE)
if test -n "$p" && grep -qE "^${DAEMON_BIN}" "/proc/$p/cmdline" ; then
echo -n '(already running) '
else
rm $CHROOT_PREFIX/$DAEMON_PIDFILE
fi
fi
else
DHCPD_ARGS="-lf ${DAEMON_STATE}/db/$DAEMON_LEASES"
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
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 -t -cf $CHROOT_PREFIX/$DAEMON_CONF > $STARTPROC_LOGFILE 2>&1 ; then
if ! $DAEMON_BIN $DHCPDv_OPT -t -cf $CHROOT_PREFIX/$DAEMON_CONF -pf $DAEMON_PIDFILE > $STARTPROC_LOGFILE 2>&1 ; then
error=1
else
## Start daemon. If this fails the return value is set appropriate.
@ -230,9 +255,9 @@ case "$1" in
## to match the LSB spec.
test "$2" = "-v" && echo -en \
"\nexecuting '$DAEMON_BIN $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE'"
"\nexecuting '$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $DAEMON_PIDFILE $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE'"
$DAEMON_BIN $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $DAEMON_PIDFILE $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
ret=$?
fi
@ -259,9 +284,10 @@ case "$1" in
kill $(<$CHROOT_PREFIX/$DAEMON_PIDFILE) 2>/dev/null
fi
# remove libraries from the chroot jail, just so they are not left over
# if the server is deinstalled
if [ "$DHCPD_RUN_CHROOTED" = yes ]; then
# umount proc and remove libraries from the chroot jail,
# so they are not left over if the server is deinstalled
if [ "$DHCPD_RUN_CHROOTED" = yes -a -n "$CHROOT_PREFIX" ]; then
umount ${CHROOT_PREFIX}/proc 2>/dev/null
rm -f $CHROOT_PREFIX/lib*/*
fi
@ -300,8 +326,8 @@ case "$1" in
echo -n "Reload service $DAEMON"
if [ "$SUPPORTS_HUP" = "yes" ]; then
killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN
#touch $DAEMON_PIDFILE
killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
#touch $CHROOT_PREFIX/$DAEMON_PIDFILE
rc_status -v
else
$0 stop && sleep 3 && $0 start
@ -315,8 +341,8 @@ case "$1" in
echo -n "Reload service $DAEMON"
if [ "$SUPPORTS_HUP" = "yes" ]; then
# If it supports signalling:
killproc -p $DAEMON_PIDFILE -HUP $DAEMON_BIN
#touch $DAEMON_PIDFILE
killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
#touch $CHROOT_PREFIX/$DAEMON_PIDFILE
rc_status -v
else
## Otherwise if it does not support reload:
@ -354,10 +380,10 @@ case "$1" in
## this nice bit is from Edwin Groothuis:
## check syntax (quiet)
$DAEMON_BIN -q -t -cf $DAEMON_CONF
$DAEMON_BIN $DHCPDv_OPT -q -t -cf $DAEMON_CONF
if ! [ $? -eq 0 ]; then
## check syntax (verbose)
$DAEMON_BIN -t -cf $DAEMON_CONF
$DAEMON_BIN $DHCPDv_OPT -t -cf $DAEMON_CONF
echo -e '\nConfig is NOT okay\n'
else
echo 'Config is okay. Hope you also specified existent network devices ;) '
@ -365,10 +391,10 @@ case "$1" in
## in v3, lease file checking is also implemented
if [ $DAEMON_BIN != "/usr/sbin/dhcpd-2" ]; then
## check leases file (quiet)
$DAEMON_BIN -q -T -cf $DAEMON_CONF -lf /var/lib/dhcp/db/dhcpd.leases
$DAEMON_BIN $DHCPDv_OPT -q -T -cf $DAEMON_CONF -lf ${DAEMON_STATE}/db/$DAEMON_LEASES
if ! [ $? -eq 0 ]; then
## check leases file (verbose)
$DAEMON_BIN -T -cf $DAEMON_CONF -lf /var/lib/dhcp/db/dhcpd.leases
$DAEMON_BIN $DHCPDv_OPT -T -cf $DAEMON_CONF -lf ${DAEMON_STATE}/db/$DAEMON_LEASES
echo -e '\nLease file is NOT okay'
else
echo 'Lease file is okay'

413
rc.dhcpd6 Normal file
View File

@ -0,0 +1,413 @@
#! /bin/bash
# Copyright (c) 1996, 1997, 1998 S.u.S.E. GmbH
# Copyright (c) 1998, 1999, 2000, 2001 SuSE GmbH
# Copyright (c) 2002, 2003 SuSE Linux AG
# Copyright (c) 2004-2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author: Rolf Haberrecker <rolf@suse.de>, 1997-1999
# Peter Poeml <poeml@suse.de>, 2000-2006
# Marius Tomaschewski <mt@suse.de>, 2006-2010
#
# /etc/init.d/dhcp-server
# and its symbolic link
# /usr/sbin/rcdhcp-server
#
### BEGIN INIT INFO
# Provides: dhcp6-server
# Required-Start: $remote_fs $network
# Should-Start: network-remotefs $named $syslog $time ldap ndsd
# Required-Stop: $remote_fs $network
# Should-Stop: network-remotefs $named $syslog ldap ndsd
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: ISC DHCP 4.x Server
# Description: Start ISC DHCP (Dynamic Host Configuration Protocol)
# 4.x series server.
# (Note: if configured for failover it
# needs to rely on time synchronisation.)
### END INIT INFO
test -s /etc/sysconfig/dhcpd && . /etc/sysconfig/dhcpd
SUPPORTS_CHROOT="yes"
SUPPORTS_RUN_AS="yes"
SUPPORTS_HUP="no"
DHCPDv_OPT=-6
DHCPD_RUN_CHROOTED=$DHCPD6_RUN_CHROOTED
DHCPD_RUN_AS=$DHCPD6_RUN_AS
DHCPD_BINARY=$DHCPD6_BINARY
DHCPD_INTERFACE=$DHCPD6_INTERFACE
DHCPD_CONF_INCLUDE_FILES=$DHCPD6_CONF_INCLUDE_FILES
DHCPD_OTHER_ARGS=$DHCPD6_OTHER_ARGS
test "$SUPPORTS_CHROOT" = no && DHCPD_RUN_CHROOTED=no
test "$SUPPORTS_RUN_AS" = no && DHCPD_RUN_AS=""
DAEMON='ISC DHCPv6 4.x Server'
DAEMON_BIN=${DHCPD_BINARY:=/usr/sbin/dhcpd6}
DAEMON_CONF=/etc/dhcpd6.conf
DAEMON_STATE=/var/lib/dhcp6
DAEMON_LEASES=dhcpd6.leases
DAEMON_PIDFILE=/var/run/dhcpd6.pid
STARTPROC_LOGFILE=/var/log/rc.dhcpd6.log
LDAP_CONF=
test "$DHCPD_RUN_CHROOTED" = "yes" && \
CHROOT_PREFIX="$DAEMON_STATE" || CHROOT_PREFIX=''
# 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 <num> set local and overall rc status to <num><num>
# 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.
if ! [ -x "$DAEMON_BIN" ]; then
if [ "$1" = "stop" ]; then exit 0; fi
echo >&2 "$0: \"$DAEMON_BIN\" is not an executable file. Exiting."
exit 5
fi
if ! [ -r "$DAEMON_CONF" ] ; then
if [ "$1" = "stop" ]; then exit 0; fi
echo >&2 "$0: \"$DAEMON_CONF\" config file missed. Exiting."
exit 6
fi
# 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
case "$1" in
start)
echo -n "Starting $DAEMON "
## If there is no conf file, skip starting of dhcpd
## and return with "program not configured"
if ! [ -f $DAEMON_CONF ]; then
echo -n "... no configuration file found";
# Tell the user this has skipped
rc_status -s
# service is not configured
exit 6;
fi
## If the interfaces are not set, skip starting of dhcpd
## and return with "program not configured"
if [ -z "$DHCPD_INTERFACE" ]; then
var="DHCPD_INTERFACE"
case $DHCPDv_OPT in -6) var=DHCPD6_INTERFACE ;; esac
echo -n "... set $var in /etc/sysconfig/dhcpd"
# Tell the user this has skipped
rc_status -s
# service is not configured
exit 6;
fi
if [ "$DHCPD_INTERFACE" = "ANY" ]; then
DHCPD_INTERFACE=""
fi
jail=${CHROOT_PREFIX:-${DAEMON_STATE}}; leases=$DAEMON_LEASES
if ! [ -e $jail/db/$leases ]; then
# until 9.0, the lease file was in /var/lib/dhcp and part of the package
if test -e $jail/$leases -a '!' -L $jail/$leases; then
# this is the case where the %post script runs _before_ the old package is
# removed (i.e., dhcpd.leases has not renamed to .rpmsave yet)
mv $jail/$leases $jail/db/$leases && \
ln -s db/$leases $jail/
elif test -e $jail/$leases.rpmsave; then
# this is what's left when the package is already gone.
mv $jail/$leases.rpmsave $jail/db/$leases && \
ln -s db/$leases $jail/
else
# fresh installation:
# a lease file must be present. the server won't start without
touch $jail/db/$leases
fi
fi
if test "$DHCPD_RUN_CHROOTED" = "yes" ; then
## copy the conf file to the chroot jail (dhcpd has to be restarted anyway,
## when it has changed) and change path to leases file
for i in $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES $LDAP_CONF /etc /dev; do
if test -d "${i}" ; then
test -d "$CHROOT_PREFIX/${i}" || \
mkdir -p "$CHROOT_PREFIX/${i}"
elif test -e "${i}" ; then
test -d "$CHROOT_PREFIX/${i%/*}" || \
mkdir -p "$CHROOT_PREFIX/${i%/*}"
fi
done
rm -f $CHROOT_PREFIX/dev/urandom
for i in $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES $LDAP_CONF /etc/{gai.conf,nsswitch.conf,resolv.conf,host.conf,hosts,localtime} /dev/urandom; do
if ! test -e "$i"; then continue; fi # neither of them is absolutely necessary
cp -aL "$i" "${CHROOT_PREFIX}/${i%/*}/" &>/dev/null \
|| { echo "...$0:$LINENO: could not copy $i to chroot jail"; rc_failed; rc_status -v1; exit 6; }
done
libdir=$(basename $(echo ${CHROOT_PREFIX}/lib*))
if test -x /usr/bin/ldd ; then
get_ldd_deps()
{
ldd_wl="\/${libdir}\/lib"
ldd_bl="\/${libdir}\/libc\."
/usr/bin/ldd "$1" | \
while read -sr a b c d ; do
[ -n "$c" ] || continue
[[ $c =~ $ldd_wl ]] || continue
[[ $c =~ $ldd_bl ]] && continue
echo $c
done
}
else
get_ldd_deps() { :; }
fi
cplibs=`for i in /$libdir/{libresolv.so.*,libnss_*.so.*} \
/$libdir/{libpthread.so.0,libdl.so.2} ;
do
if [ -s "$i" ] ; then
echo "$i"
get_ldd_deps "$i"
fi
done | sort -u`
for i in $cplibs ; do
if [ -s "$i" ]; then
cp -pL "$i" "${CHROOT_PREFIX}/$libdir/" \
|| { echo "...$0:$LINENO: could not copy $i to chroot jail"; rc_failed; rc_status -v1; exit 6; }
fi
done
# mount /proc into the chroot; the server fails if unable to read /proc/net/{dev,if_inet6}
mkdir -p ${CHROOT_PREFIX}/proc
mount -t proc -o ro proc ${CHROOT_PREFIX}/proc 2>/dev/null
DHCPD_ARGS="-chroot $CHROOT_PREFIX -lf /db/$DAEMON_LEASES"
## If there is a pid file containing a pid, the machine might have crashed. pid files in
## /var/run are always cleaned up at boot time, but this is not the case for the pid file in
## 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 -n "$p" && grep -qE "^${DAEMON_BIN}" "/proc/$p/cmdline" ; then
echo -n '(already running) '
else
rm $CHROOT_PREFIX/$DAEMON_PIDFILE
fi
fi
else
DHCPD_ARGS="-lf ${DAEMON_STATE}/db/$DAEMON_LEASES"
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
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
error=1
else
## Start daemon. If this fails the return value is set appropriate.
## The init script should return 0, even if service is already running,
## 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'"
$DAEMON_BIN $DHCPDv_OPT -cf $DAEMON_CONF -pf $DAEMON_PIDFILE $DHCPD_ARGS $DHCPD_OTHER_ARGS $DHCPD_INTERFACE &> $STARTPROC_LOGFILE
ret=$?
fi
if [ $error -gt 0 -o ${ret:-0} -gt 0 ]; then
cat $STARTPROC_LOGFILE
## set status to failed
rc_failed
else
[ "$DHCPD_RUN_CHROOTED" = "yes" ] && echo -n "[chroot]" || :
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 $CHROOT_PREFIX/$DAEMON_PIDFILE -TERM $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
if [ "$DHCPD_RUN_CHROOTED" = yes -a -n "$CHROOT_PREFIX" ]; then
umount ${CHROOT_PREFIX}/proc 2>/dev/null
rm -f $CHROOT_PREFIX/lib*/*
fi
# Remember status and be verbose
rc_failed $ret
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 3
$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.
echo -n "Reload service $DAEMON"
if [ "$SUPPORTS_HUP" = "yes" ]; then
killproc -p $CHROOT_PREFIX/$DAEMON_PIDFILE -HUP $DAEMON_BIN
#touch $CHROOT_PREFIX/$DAEMON_PIDFILE
rc_status -v
else
$0 stop && sleep 3 && $0 start
rc_status
fi
;;
reload)
## Like force-reload, but if daemon does not support
## signalling, do nothing (!)
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
rc_status -v
else
## Otherwise if it does not support reload:
rc_failed 3
rc_status -v
fi
;;
status)
echo -n "Checking for $DAEMON: "
## 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 $CHROOT_PREFIX/$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.
rc=0
for i in /etc/sysconfig/dhcpd $DAEMON_CONF $DHCPD_CONF_INCLUDE_FILES; do
test $i -nt $CHROOT_PREFIX/$DAEMON_PIDFILE && rc=1
done
test $rc = 1 && echo restart
;;
check-syntax|syntax-check)
echo "Checking syntax of $DAEMON_CONF: "
## this nice bit is from Edwin Groothuis:
## check syntax (quiet)
$DAEMON_BIN $DHCPDv_OPT -q -t -cf $DAEMON_CONF
if ! [ $? -eq 0 ]; then
## check syntax (verbose)
$DAEMON_BIN $DHCPDv_OPT -t -cf $DAEMON_CONF
echo -e '\nConfig is NOT okay\n'
else
echo 'Config is okay. Hope you also specified existent network devices ;) '
## in v3, lease file checking is also implemented
if [ $DAEMON_BIN != "/usr/sbin/dhcpd-2" ]; then
## check leases file (quiet)
$DAEMON_BIN $DHCPDv_OPT -q -T -cf $DAEMON_CONF -lf ${DAEMON_STATE}/db/$DAEMON_LEASES
if ! [ $? -eq 0 ]; then
## check leases file (verbose)
$DAEMON_BIN $DHCPDv_OPT -T -cf $DAEMON_CONF -lf ${DAEMON_STATE}/db/$DAEMON_LEASES
echo -e '\nLease file is NOT okay'
else
echo 'Lease file is okay'
fi
fi
fi
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe|check-syntax} [-v]"
exit 1
esac
rc_exit

View File

@ -2,8 +2,10 @@
# 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 <poeml@suse.de>, 2001
# Marius Tomaschewski <mt@suse.de>, 2010
#
# /etc/init.d/dhcrelay
# and its symbolic link
@ -18,23 +20,23 @@
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: DHCP Relay
# Description: Start DHCP (Dynamic Host Configuration Protocol)
# gateway, relaying DHCP requests from one
# physical network segment to another.
# Description: Start DHCP (Dynamic Host Configuration Protocol)
# relay agent, forwarding DHCP requests from one
# physical network segment to another.
### END INIT INFO
test -s /etc/sysconfig/dhcrelay && \
. /etc/sysconfig/dhcrelay
DAEMON="dhcp relay agent"
DAEMON="ISC DHCPv4 relay agent"
DAEMON_BIN=/usr/sbin/dhcrelay
DAEMON_CONF=/etc/sysconfig/dhcrelay
DAEMON_PIDFILE=/var/run/dhcrelay.pid
STARTPROC_LOGFILE=/var/log/rc.dhcrelay.log
SUPPORTS_HUP="no"
test -x $DAEMON_BIN || exit 5
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

142
reset-ip
View File

@ -1,142 +0,0 @@
#! /usr/bin/perl
#
# Author: Kevin C. Miller <kevinm@andrew.cmu.edu>
# http://www.andrew.cmu.edu/~kevinm/dhcp/failover.html
#
# The copyright is with the author. We (SuSE) include this script
# with his permission.
#
# NOTE: you have to edit this script to make it functional for you.
## Reset IPs that are stuck in some weird state on the DHCP servers
## You can run it standalone, and it just reports statistics
##
## Or run with option '-reset' to reset many of the problem IPs
## Or run with option '-primary' to only reset problem IPs on the primary
##
## ** Note: You probably want to run -primary if you are in a low-free-IP
## situation. In this case -reset may enter a race condition and
## reset valid IPs on the secondary.
use strict;
my $PRIMARY = "/afs/andrew/usr/kevinm/dhcp1";
my $PRIMARY_IP = '128.2.4.2';
my $SEC = "/afs/andrew/usr/kevinm/dhcp3";
my $SEC_IP = '128.2.32.38';
my $RESET = "/afs/andrew/usr/kevinm/bin/clearip";
my %curstate;
my %nextstate;
my ($TotalPrimary, $TotalSecondary) = (0,0);
my ($LeasesDiff, $LeasesEq) = (0,0);
open(FILE, $PRIMARY)
|| die "Cannot open primary $PRIMARY";
while(<FILE>) {
next if ($_ =~ /^\#/);
my @a = split(/\s+/, $_);
$curstate{$a[0]} = $a[1];
$nextstate{$a[0]} = $a[3];
$TotalPrimary++;
}
close(FILE);
my @ResetPrimary;
my @ResetSecondary;
open(FILE, $SEC)
|| die "Cannot open secondary $SEC";
while(<FILE>) {
next if ($_ =~ /^\#/);
my @a = split(/\s+/, $_);
my ($key, $cur, $next) = ($a[0], $a[1], $a[3]);
$TotalSecondary++;
if ($curstate{$key} ne $cur &&
($nextstate{$key} ne $next ||
$nextstate{$key} eq '' && $next eq '')) {
## There is some difference
$LeasesDiff++;
if ($curstate{$key} eq 'active' &&
$nextstate{$key} eq 'expired' &&
$cur eq 'expired' && $next eq 'free') {
# Reset both
push(@ResetPrimary, $key);
push(@ResetSecondary, $key);
}elsif($curstate{$key} eq 'expired' &&
$nextstate{$key} eq 'free' &&
$cur eq 'active' &&
$next eq 'expired') {
# Reset both
push(@ResetPrimary, $key);
push(@ResetSecondary, $key);
}elsif( ($curstate{$key} eq 'backup' &&
$cur eq 'free') ) {
# Reset both
push(@ResetPrimary, $key);
push(@ResetSecondary, $key);
}elsif($curstate{$key} eq 'expired' &&
$nextstate{$key} eq 'free' &&
$cur eq 'free') {
# Reset both
push(@ResetPrimary, $key);
push(@ResetSecondary, $key);
}elsif(!defined $curstate{$key} &&
!defined $nextstate{$key}) {
push(@ResetSecondary, $key);
}
# There are other tests that could be made (primary
# thinks the lease is 'backup', secondary doesn't know
# about it).. etc.
}else{
# No difference in state
$LeasesEq++;
}
delete $curstate{$key};
delete $nextstate{$key};
}
# Go through all the IPs on the primary that aren't defined
# on the secondary at all.
foreach my $key (keys %curstate) {
if ($curstate{$key} eq 'backup') {
push(@ResetPrimary, $key);
}
}
if ($ARGV[0] eq '-reset') {
reset_ips($PRIMARY_IP, $SEC_IP, \@ResetPrimary,
\@ResetSecondary, $RESET);
}elsif($ARGV[0] eq '-primary') {
reset_ips($PRIMARY_IP, '', \@ResetPrimary, [], $RESET);
}
# Print statistics
print "Leases compared. Primary: $TotalPrimary Secondary: $TotalSecondary\n";
print " Different: $LeasesDiff Equal: $LeasesEq\n";
print " (Different+Equal may not add up to Primary, due to \n";
print " missing entries in the leases file.)\n";
exit(1);
## ***********************************************************************
# Arguments:
# - IP Address of primary DHCP server
# - IP Address of secondary DHCP server
# - Reference to an array of IPs to reset on the primary
# - Reference to an array of IPs to reset on the secondary
# - Reset script
sub reset_ips {
my ($PrimaryIP, $SecIP, $rResetPrimary, $rResetSec, $Prog) = @_;
foreach my $IP (@$rResetPrimary) {
print "Resetting $IP on $PrimaryIP\n";
`$Prog $IP $PrimaryIP`;
}
foreach my $IP (@$rResetSec) {
print "Resetting $IP on $SecIP\n";
`$Prog $IP $SecIP`;
}
}

View File

@ -1,24 +1,38 @@
## Path: Network/DHCP/DHCP server
## Description: DHCP server settings
## Description: DHCPv4 server settings
## Type: string
## Default: ""
## ServiceRestart: dhcpd
#
# Interface(s) for the DHCP server to listen on.
# Interface(s) for the DHCPv4 server to listen on.
#
# A special keyword is ANY, it will cause dhcpd to autodetect available
# interfaces.
#
# Examples: DHCPD_INTERFACE="eth0"
# DHCPD_INTERFACE="eth0 eth1 eth2 tr0 wlan0"
# DHCPD_INTERFACE="internal0 internal1"
# Examples: DHCPD_INTERFACE="eth0 eth1 eth2"
# DHCPD_INTERFACE="ANY"
#
DHCPD_INTERFACE=""
## Path: Network/DHCP/DHCP server
## Description: DHCPv6 server settings
## Type: string
## Default: ""
## ServiceRestart: dhcpd6
#
# Interface(s) for the DHCPv6 server to listen on.
#
# A special keyword is ANY, it will cause dhcpd to autodetect available
# interfaces.
#
# Examples: DHCPD6_INTERFACE="eth0 eth1 eth2"
# DHCPD6_INTERFACE="ANY"
#
DHCPD6_INTERFACE=""
## Type: list(yes,no,auto,)
## Default:
## Description: Restart dhcp server when interface goes up (again)
## Description: Restart dhcpv4 server when interface goes up (again)
#
# When the dhcp server is listening on a virtual interface, e.g. bridge,
# bonding or vlan, and this interface gets deleted and recreated during
@ -38,6 +52,28 @@ DHCPD_INTERFACE=""
#
DHCPD_IFUP_RESTART=""
## Type: list(yes,no,auto,)
## Default:
## Description: Restart dhcpv6 server when interface goes up (again)
#
# When the dhcp server is listening on a virtual interface, e.g. bridge,
# bonding or vlan, and this interface gets deleted and recreated during
# a network restart, dhcpd will stop answering requests on this interface
# and needs a restart as well.
# Begining with SLE-10 SP3, we install an if-up.d post script (see ifup(8)
# and also ifservices(5)), enabled in auto mode by default. This variable
# can be used to force or avoid the dhcp server restart:
#
# no: do not restart dhcpd
# yes: force a dhcp server restart
# auto: (default) restart for virtual interfaces (bond,bridge,vlan) when
# all interfaces used in DHCPD_INTERFACE variable are up as well.
#
# Except of this global setting, the variable can be specified per interface
# in the interface configurations (/etc/sysconfig/network/ifcfg-$name).
#
DHCPD6_IFUP_RESTART=""
## Type: yesno
## Default: yes
## ServiceRestart: dhcpd
@ -57,6 +93,25 @@ DHCPD_IFUP_RESTART=""
#
DHCPD_RUN_CHROOTED="yes"
## Type: yesno
## Default: yes
## ServiceRestart: dhcpd6
#
# Shall the DHCP server dhcpd run in a chroot jail (/var/lib/dhcp)?
#
# Each time you start dhcpd with the init script, /etc/dhcpd.conf will
# be copied to /var/lib/dhcp/etc/.
#
# Some files that are important for hostname to IP address resolution
# (/etc/{gai.conf,nsswitch.conf,resolv.conf,host.conf,hosts,localtime},
# /lib/lib{resolv.so.*,libnss_*.so.*,libpthread.so.0,libdl.so.2}) will
# also be copied to the chroot jail by the init script when you start
# it (less than 1MB altogether).
#
# The pid file will be in /var/lib/dhcp/var/run/dhcpd.pid.
#
DHCPD6_RUN_CHROOTED="yes"
## Type: string
## Default: ""
## ServiceRestart: dhcpd
@ -73,6 +128,22 @@ DHCPD_RUN_CHROOTED="yes"
#
DHCPD_CONF_INCLUDE_FILES=""
## Type: string
## Default: ""
## ServiceRestart: dhcpd6
#
# Since version 3, dhcpd.conf can contain include statements.
# If you enter the names of any include files here, _all_ conf
# files will be copied to $chroot/etc/, when dhcpd is started in the
# chroot jail. (/etc/dhcpd.conf is always copied.)
#
# For your convenience, you can also specify entire directories, like
# "/etc/dhcpd.conf.d".
#
# Example: "/etc/dhcpd.conf.shared /etc/dhcpd.conf.bootp-clients"
#
DHCPD6_CONF_INCLUDE_FILES=""
## Type: string
## Default: "dhcpd"
## ServiceRestart: dhcpd
@ -82,6 +153,15 @@ DHCPD_CONF_INCLUDE_FILES=""
#
DHCPD_RUN_AS="dhcpd"
## Type: string
## Default: "dhcpd"
## ServiceRestart: dhcpd6
#
# Leave empty or enter "root" to let dhcpd run as root.
# Enter "dhcpd" to run dhcpd as user 'dhcpd'.
#
DHCPD6_RUN_AS="dhcpd"
## Type: string
## Default: ""
## ServiceRestart: dhcpd
@ -91,6 +171,15 @@ DHCPD_RUN_AS="dhcpd"
#
DHCPD_OTHER_ARGS=""
## Type: string
## Default: ""
## ServiceRestart: dhcpd6
#
# Other arguments that you want dhcpd to be started with
# (e.g. "-p 1234" for a non-standard port to listen on)
#
DHCPD6_OTHER_ARGS=""
## Type: string
## Default: ""
## ServiceRestart: dhcpd
@ -102,3 +191,14 @@ DHCPD_OTHER_ARGS=""
#
DHCPD_BINARY=""
## Type: string
## Default: ""
## ServiceRestart: dhcpd6
#
# You may specify another dhcpd binary to be run.
# The full path needs to be specified.
#
# If empty, the default applies.
#
DHCPD6_BINARY=""

View File

@ -4,11 +4,9 @@
## Default: ""
## ServiceRestart: dhcrelay
#
# Interface(s) for DHCP relay agent to listen on
# Interface(s) for DHCPv4 relay agent to listen on
#
# Examples: DHCPD_INTERFACE="eth0"
# DHCPD_INTERFACE="eth0 eth1 eth2 tr0 wlan0"
# DHCPD_INTERFACE="internal0 internal1"
# Example: DHCPD_INTERFACE="eth0 eth1 eth2 wlan0"
#
DHCRELAY_INTERFACES=""
@ -16,7 +14,7 @@ DHCRELAY_INTERFACES=""
## Default: ""
## ServiceRestart: dhcrelay
#
# DHCP servers to be used by DHCP relay agent
# DHCPv4 servers to be used by DHCPv4 relay agent
# (separated by spaces, e.g. "192.168.0.11 191.168.0.12")
#
DHCRELAY_SERVERS=""
@ -25,8 +23,37 @@ DHCRELAY_SERVERS=""
## Default: ""
## ServiceRestart: dhcrelay
#
# Additional options
# Additional DHCPv4 relay start options
# Example: "-c 8"
#
DHCRELAY_OPTIONS=""
## Type: string
## Default: ""
## ServiceRestart: dhcrelay6
#
# Specifies the ``lower'' network interface for DHCPv6 relay mode
# separated by spaces.
# The format of the lower interface is: "[address%]ifname[#index]".
#
DHCRELAY6_LOWER_INTERFACES_ARGS=""
## Type: string
## Default: ""
## ServiceRestart: dhcrelay6
#
# Specifies the ``upper'' network interface for DHCPv6 relay mode
# separated by spaces.
# The format of the upper interface is "[address%]ifname".
#
DHCRELAY6_UPPER_INTERFACES_ARGS=""
## Type: string
## Default: ""
## ServiceRestart: dhcrelay6
#
# Additional DHCPv6 relay start options
# Example: "-c 8 -I"
#
DHCRELAY6_OPTIONS=""

View File

@ -3,10 +3,24 @@
## ServiceRestart: syslog
#
# The filename mentioned here will be added with the "-a ..." option as
# additional socket via SYSLOGD_PARAMS when syslogd is started.
# additional socket via SYSLOGD_PARAMS when syslogd is started or used
# to generate an include file for another syslog daemons.
#
# This additional socket is needed in case that syslogd is restarted. Otherwise
# a chrooted dhcpd won't be able to continue logging.
# This additional socket is needed in case that syslogd is restarted.
# Otherwise a chrooted dhcpd won't be able to continue logging.
#
SYSLOGD_ADDITIONAL_SOCKET_DHCP="/var/lib/dhcp/dev/log"
## Type: string
## Default: "/var/lib/dhcp6/dev/log"
## ServiceRestart: syslog
#
# The filename mentioned here will be added with the "-a ..." option as
# additional socket via SYSLOGD_PARAMS when syslogd is started or used
# to generate an include file for another syslog daemons.
#
# This additional socket is needed in case that syslogd is restarted.
# Otherwise a chrooted dhcpd won't be able to continue logging.
#
SYSLOGD_ADDITIONAL_SOCKET_DHCP6="/var/lib/dhcp6/dev/log"