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/dialog.subr 35f_include $BSDCFG_SHARE/networking/common.subr 36f_include $BSDCFG_SHARE/networking/resolv.subr 37f_include $BSDCFG_SHARE/sysrc.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 f_dialog_input hostname "$msg" "$hostname" \ 112 "$hline_alnum_punc_tab_enter" || return 113 # Taint-check the user's input 114 f_dialog_validate_hostname "$hostname" && break 115 done 116 117 # 118 # Save hostname only if the user changed the hostname. 119 # 120 if [ "$hostname" != "$hostname_orig" ]; then 121 f_dialog_info "$msg_saving_hostname" 122 f_sysrc_set hostname "$hostname" 123 fi 124 125 # 126 # Update resolv.conf(5) search/domain directives 127 # 128 f_dialog_resolv_conf_update "$hostname" 129 130 # 131 # Only ask to apply setting if the current hostname is different than 132 # the stored configuration (in rc.conf(5)). 133 # 134 if [ "$( hostname )" != "$( f_sysrc_get hostname )" ]; then 135 [ ! "$USE_XDIALOG" ] && f_dialog_clear 136 137 # 138 # If connected via ssh(1) and performing X11-Forwarding, don't 139 # allow the hostname to be changed to prevent the fatal error 140 # "X11 connection rejected because of wrong authentication." 141 # 142 if [ "$USE_XDIALOG" -a "$SSH_CONNECTION" ]; then 143 f_show_msg "$msg_activate_hostname_x11warning" \ 144 "$( hostname )" "$hostname" 145 else 146 f_yesno "$msg_activate_hostname" \ 147 "$( hostname )" "$hostname" \ 148 && hostname "$hostname" 149 fi 150 fi 151 152 return $SUCCESS 153} 154 155############################################################ MAIN 156 157f_dprintf "%s: Successfully loaded." networking/hostname.subr 158 159fi # ! $_NETWORKING_HOSTNAME_SUBR 160