diff options
Diffstat (limited to 'net-scripts/net.modules.d/system.sh')
-rw-r--r-- | net-scripts/net.modules.d/system.sh | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/net-scripts/net.modules.d/system.sh b/net-scripts/net.modules.d/system.sh new file mode 100644 index 0000000..5d841d3 --- /dev/null +++ b/net-scripts/net.modules.d/system.sh @@ -0,0 +1,155 @@ +# Copyright (c) 2005-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# Contributed by Roy Marples (uberlord@gentoo.org) + +# void system_depend(void) +# +# Sets up the dependancies for the module +system_depend() { + after interface + before dhcp +} + +# void system_expose(void) +# +# Expose variables that can be configured +system_expose() { + variables dns_servers dns_domain dns_options dns_search dns_sortlist \ + ntp_servers nis_domain nis_servers +} + +system_dns_extra() { + local iface="$1" ifvar="$(bash_variable "$1")" out="$2" x sortlist + local -a options + + x="dns_options_${ifvar}[@]" + options=( "${!x}" ) + [[ -z ${options} ]] && options=( "${dns_options[@]}" ) + for x in "${options[@]}" ; do + echo "options ${x}" >> "${out}" + done + + sortlist="dns_sortlist_${ifvar}" + [[ -z ${!sortlist} ]] && sortlist="dns_sortlist" + [[ -n ${!sortlist} ]] && echo "sortlist ${!sortlist}" >> "${out}" +} + +system_dns() { + local iface="$1" ifvar="$(bash_variable "$1")" x domain search + local conffile="${statedir}/${iface}/resolv.conf" tmpfile="${conffile}.$$" + local -a servers + + servers="dns_servers_${ifvar}[@]" + [[ -z ${!servers} ]] && servers="dns_servers[@]" + servers="${!servers}" + + domain="dns_domain_${ifvar}" + [[ -z ${!domain} ]] && domain="dns_domain" + domain="${!domain}" + + search="dns_search_${ifvar}" + [[ -z ${!search} ]] && search="dns_search" + search="${!search}" + + [[ -z ${servers} && -z ${domain} && -z ${search} ]] && return 0 + + echo "# Generated by net-scripts for interface ${iface}" > "${tmpfile}" + chmod 644 "${tmpfile}" + + if [[ -n ${domain} ]] ; then + # Strip leading and trailing spaces + domain="${domain# *}" + domain="${domain%* }" + if [[ ${domain} == *" "* ]] ; then + [[ -z ${search} ]] && search="${domain}" + domain="${domain%% *}" + fi + echo "domain ${domain}" >> "${tmpfile}" + fi + + for x in ${servers} ; do + echo "nameserver ${x}" >> "${tmpfile}" + done + + [[ -n ${search} ]] && echo "search ${search}" >> "${tmpfile}" + + system_dns_extra "${iface}" "${tmpfile}" + + mv "${tmpfile}" "${conffile}" +} + +system_ntp() { + local iface="$1" ifvar="$(bash_variable "$1")" x + local conffile="${statedir}/${iface}/ntp.conf" tmpfile="${conffile}.$$" + local -a servers + + servers="ntp_servers_${ifvar}[@]" + [[ -z ${!servers} ]] && servers="ntp_servers[@]" + [[ -z ${!servers} ]] && return 0 + + echo "# Generated by net-scripts for interface ${iface}" > "${tmpfile}" + chmod 644 "${tmpfile}" + + echo "restrict default noquery notrust nomodify" >> "${tmpfile}" + echo "restrict 127.0.0.1" >> "${tmpfile}" + + for x in ${!servers} ; do + echo "restrict ${x} nomodify notrap noquery" >> "${tmpfile}" + echo "server ${x}" >> "${tmpfile}" + done + + echo "driftfile /var/lib/ntp/ntp.drift" >> "${tmpfile}" + echo "logfile /var/log/ntp.log" >> "${tmpfile}" + + mv "${tmpfile}" "${conffile}" +} + +system_nis() { + local iface="$1" ifvar="$(bash_variable "$1")" domain x + local conffile="${statedir}/${iface}/yp.conf" tmpfile="${conffile}.$$" + local -a servers + + servers="nis_servers_${ifvar}[@]" + [[ -z ${!servers} ]] && servers="nis_servers[@]" + + domain="nis_domain_${ifvar}" + [[ -z ${!domain} ]] && domain="nis_domain" + + [[ -z ${!servers} && -z ${!domain} ]] && return 0 + + echo "# Generated by net-scripts for interface ${iface}" > "${tmpfile}" + chmod 644 "${tmpfile}" + + if [[ -n ${!domain} ]] ; then + hostname -y "${!domain}" + if [[ -n ${!servers} ]] ; then + for x in ${!servers} ; do + echo "domain ${!domain} server ${x}" >> "${tmpfile}" + done + else + echo "domain ${!domain} broadcast" >> "${tmpfile}" + fi + else + for x in ${!servers} ; do + echo "ypserver ${x}" >> "${tmpfile}" + done + fi + + mv "${tmpfile}" "${conffile}" +} + +# bool system_post_start(char *iface) +# +# Configures the host system for dns, ntp and nis information +# Always returns 0 +system_pre_start() { + local iface="$1" + + system_dns "${iface}" + system_ntp "${iface}" + system_nis "${iface}" + + return 0 +} + +# vim: set ft=sh ts=4 : |