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 (INCLUDING, 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# 28############################################################ INCLUDES 29 30BSDCFG_SHARE="/usr/share/bsdconfig" 31. $BSDCFG_SHARE/common.subr || exit 1 32f_dprintf "%s: loading includes..." networking/hostname.subr 33f_include $BSDCFG_SHARE/dialog.subr 34f_include $BSDCFG_SHARE/networking/common.subr 35f_include $BSDCFG_SHARE/networking/resolv.subr 36f_include $BSDCFG_SHARE/sysrc.subr 37 38BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="120.networking" 39f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 40 41############################################################ FUNCTIONS 42 43# f_dialog_hnerror $error $hostname 44# 45# Display a msgbox with the appropriate error message for an error returned by 46# the f_validate_hostname function. 47# 48f_dialog_hnerror() 49{ 50 local error="$1" fqhn="$2" 51 52 [ ${error:-0} -ne 0 ] || return $SUCCESS 53 54 case "$error" in 55 1) f_show_msg "$msg_hostname_label_contains_invalid_chars" "$fqhn" ;; 56 2) f_show_msg \ 57 "$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# https://tools.ietf.org/html/rfc952 71# 72# RFC 1123 - Requirements for Internet Hosts - Application and Support 73# https://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 funcname=f_dialog_input_hostname 98 local hostname="$( f_sysrc_get 'hostname:-$(hostname)' )" 99 local hostname_orig="$hostname" # for change-tracking 100 101 local msg 102 if [ "$USE_XDIALOG" ]; then 103 msg="$xmsg_please_enter_fqhn" 104 else 105 msg="$msg_please_enter_fqhn" 106 fi 107 108 # 109 # Loop until the user provides taint-free input. 110 # 111 while :; do 112 f_dialog_input hostname "$msg" "$hostname" \ 113 "$hline_alnum_punc_tab_enter" || 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_eval_catch $funcname f_sysrc_set \ 124 'f_sysrc_set hostname "%s"' "$hostname" 125 fi 126 127 # 128 # Update resolv.conf(5) search/domain directives 129 # 130 f_dialog_resolv_conf_update "$hostname" 131 132 # 133 # Only ask to apply setting if the current hostname is different than 134 # the stored configuration (in rc.conf(5)). 135 # 136 if [ "$( hostname )" != "$( f_sysrc_get hostname )" ]; then 137 [ ! "$USE_XDIALOG" ] && f_dialog_clear 138 139 # 140 # If connected via ssh(1) and performing X11-Forwarding, don't 141 # allow the hostname to be changed to prevent the fatal error 142 # "X11 connection rejected because of wrong authentication." 143 # 144 if [ "$USE_XDIALOG" -a "$SSH_CONNECTION" ]; then 145 f_show_msg "$msg_activate_hostname_x11warning" \ 146 "$( hostname )" "$hostname" 147 else 148 f_yesno "$msg_activate_hostname" \ 149 "$( hostname )" "$hostname" \ 150 && hostname "$hostname" 151 fi 152 fi 153 154 return $DIALOG_OK 155} 156 157############################################################ MAIN 158 159f_dprintf "%s: Successfully loaded." networking/hostname.subr 160 161fi # ! $_NETWORKING_HOSTNAME_SUBR 162