Merge pull request #5819 from pprindeville/add-explicit-domain
Add more functionality to ISC-DHCP configuration
This commit is contained in:
commit
d72c130c13
1 changed files with 44 additions and 2 deletions
|
@ -120,7 +120,44 @@ static_hosts() {
|
|||
config_foreach static_host_add host "$@"
|
||||
}
|
||||
|
||||
typeof() {
|
||||
echo "$1" | awk '
|
||||
/^\d+\.\d+\.\d+\.d+$/ { print "ip\n"; next; }
|
||||
/^(true|false)$/ { print "bool\n"; next; }
|
||||
/^\d+$/ { print "integer\n"; next; }
|
||||
/^"[^"]*"$/ { print "string\n"; next; }
|
||||
{ print "other\n"; next; }
|
||||
'
|
||||
}
|
||||
|
||||
append_dhcp_options() {
|
||||
local tuple="$1"
|
||||
|
||||
# strip redundant "option:" prefix
|
||||
tuple="${tuple#option:}"
|
||||
|
||||
local tag="${tuple%%,*}"
|
||||
local values="${tuple#$tag,}"
|
||||
|
||||
local formatted value
|
||||
local IFS=$', \n'
|
||||
for value in $values; do
|
||||
# detect type of $value and quote if necessary
|
||||
case $(typeof "$value") in
|
||||
ip|bool|integer|string)
|
||||
;;
|
||||
other)
|
||||
value="\"$value\""
|
||||
;;
|
||||
esac
|
||||
formatted="$formatted${formatted:+, }$value"
|
||||
done
|
||||
echo " option $tag $formatted;"
|
||||
}
|
||||
|
||||
gen_dhcp_subnet() {
|
||||
local cfg="$1"
|
||||
|
||||
echo "subnet $NETWORK netmask $NETMASK {"
|
||||
echo " range $START $END;"
|
||||
echo " option subnet-mask $netmask;"
|
||||
|
@ -140,6 +177,7 @@ gen_dhcp_subnet() {
|
|||
fi
|
||||
echo " option routers $gateway;"
|
||||
echo " option domain-name-servers $DNS;"
|
||||
config_list_foreach "$cfg" "dhcp_option" append_dhcp_options
|
||||
echo "}"
|
||||
}
|
||||
|
||||
|
@ -193,7 +231,7 @@ dhcpd_add() {
|
|||
gateway="$IP"
|
||||
fi
|
||||
|
||||
gen_dhcp_subnet >> $config_file
|
||||
gen_dhcp_subnet "$cfg" >> $config_file
|
||||
}
|
||||
|
||||
general_config() {
|
||||
|
@ -206,6 +244,8 @@ general_config() {
|
|||
config_get max_lease_time "isc_dhcpd" "max_lease_time" 86400
|
||||
config_get log_facility "isc_dhcpd" "log_facility"
|
||||
|
||||
config_get domain "isc_dhcpd" "domain"
|
||||
|
||||
[ $always_broadcast -eq 1 ] && echo "always-broadcast true;"
|
||||
[ $authoritative -eq 1 ] && echo "authoritative;"
|
||||
[ $boot_unknown_clients -eq 0 ] && echo "boot-unknown-clients false;"
|
||||
|
@ -220,6 +260,8 @@ general_config() {
|
|||
fi
|
||||
echo "default-lease-time $default_lease_time;"
|
||||
echo "max-lease-time $max_lease_time;"
|
||||
|
||||
[ -n "$domain" ] && echo "option domain-name \"$domain\";"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
|
@ -231,7 +273,7 @@ start_service() {
|
|||
touch $lease_file
|
||||
fi
|
||||
|
||||
dhcp_ifs=""
|
||||
local domain dhcp_ifs
|
||||
|
||||
if [ -e "/etc/dhcpd.conf" ] ; then
|
||||
config_file="/etc/dhcpd.conf"
|
||||
|
|
Loading…
Reference in a new issue