1if [ ! "$_NETWORKING_HOSTNAME_SUBR" ]; then _NETWORKING_HOSTNAME_SUBR=1 2# 3# Copyright (c) 2006-2013 Devin Teske 4# All Rights Reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# $FreeBSD$ 28# 29############################################################ INCLUDES 30 31BSDCFG_SHARE="/usr/share/bsdconfig" 32. $BSDCFG_SHARE/common.subr || exit 1 33f_dprintf "%s: loading includes..." networking/hostname.subr 34f_include $BSDCFG_SHARE/sysrc.subr 35f_include $BSDCFG_SHARE/dialog.subr 36f_include $BSDCFG_SHARE/networking/common.subr 37f_include $BSDCFG_SHARE/networking/resolv.subr 38 39BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="120.networking" 40f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 41 42############################################################ FUNCTIONS 43 44# f_dialog_hnerror $error $hostname 45# 46# Display a msgbox with the appropriate error message for an error returned by 47# the f_validate_hostname function. 48# 49f_dialog_hnerror() 50{ 51 local error="$1" fqhn="$2" 52 53 [ ${error:-0} -ne 0 ] || return $SUCCESS 54 55 case "$error" in 56 1) f_show_msg "$msg_hostname_label_contains_invalid_chars" "$fqhn";; 57 2) f_show_msg "$msg_hostname_label_starts_or_ends_with_hyphen" "$fqhn";; 58 3) f_show_msg "$msg_hostname_label_is_null" "$fqhn";; 59 63) f_show_msg "$msg_hostname_label_exceeds_max_length" "$fqhn";; 60 255) f_show_msg "$msg_hostname_exceeds_max_length" "$fqhn";; 61 esac 62} 63 64# f_dialog_validate_hostname $hostname 65# 66# Returns zero if the given argument (a fully-qualified hostname) is compliant 67# with standards set-forth in RFC's 952 and 1123 of the Network Working Group: 68# 69# RFC 952 - DoD Internet host table specification 70# http://tools.ietf.org/html/rfc952 71# 72# RFC 1123 - Requirements for Internet Hosts - Application and Support 73# http://tools.ietf.org/html/rfc1123 74# 75# If the hostname is determined to be invalid, the appropriate error will be 76# displayed using the f_dialog_hnerror function above. 77# 78f_dialog_validate_hostname() 79{ 80 local fqhn="$1" 81 82 f_validate_hostname "$fqhn" 83 local retval=$? 84 85 # Produce an appropriate error message if necessary. 86 [ $retval -eq $SUCCESS ] || f_dialog_hnerror $retval "$fqhn" 87 88 return $retval 89} 90 91# f_dialog_input_hostname 92# 93# Edits the current hostname. 94# 95f_dialog_input_hostname() 96{ 97 local hostname="$( f_sysrc_get 'hostname:-$(hostname)' )" 98 local hostname_orig="$hostname" # for change-tracking 99 100 local msg 101 if [ "$USE_XDIALOG" ]; then 102 msg="$xmsg_please_enter_fqhn" 103 else 104 msg="$msg_please_enter_fqhn" 105 fi 106 107 # 108 # Loop until the user provides taint-free input. 109 # 110 while :; do 111 hostname=$( f_dialog_input "$msg" "$hostname" \ 112 "$hline_alnum_punc_tab_enter" 113 ) || return 114 # Taint-check the user's input 115 f_dialog_validate_hostname "$hostname" && break 116 done 117 118 # 119 # Save hostname only if the user changed the hostname. 120 # 121 if [ "$hostname" != "$hostname_orig" ]; then 122 f_dialog_info "$msg_saving_hostname" 123 f_sysrc_set hostname "$hostname" 124 fi 125 126 # 127 # Update resolv.conf(5) search/domain directives 128 # 129 f_dialog_resolv_conf_update "$hostname" 130 131 # 132 # Only ask to apply setting if the current hostname is different than 133 # the stored configuration (in rc.conf(5)). 134 # 135 if [ "$( hostname )" != "$( f_sysrc_get hostname )" ]; then 136 [ ! "$USE_XDIALOG" ] && f_dialog_clear 137 138 # 139 # If connected via ssh(1) and performing X11-Forwarding, don't 140 # allow the hostname to be changed to prevent the fatal error 141 # "X11 connection rejected because of wrong authentication." 142 # 143 if [ "$USE_XDIALOG" -a "$SSH_CONNECTION" ]; then 144 f_show_msg "$msg_activate_hostname_x11warning" \ 145 "$( hostname )" "$hostname" 146 else 147 f_yesno "$msg_activate_hostname" \ 148 "$( hostname )" "$hostname" \ 149 && hostname "$hostname" 150 fi 151 fi 152 153 return $SUCCESS 154} 155 156############################################################ MAIN 157 158f_dprintf "%s: Successfully loaded." networking/hostname.subr 159 160fi # ! $_NETWORKING_HOSTNAME_SUBR 161