1238438Sdteskeif [ ! "$_NETWORKING_HOSTNAME_SUBR" ]; then _NETWORKING_HOSTNAME_SUBR=1 2238438Sdteske# 3247280Sdteske# Copyright (c) 2006-2013 Devin Teske 4252980Sdteske# All rights reserved. 5238438Sdteske# 6238438Sdteske# Redistribution and use in source and binary forms, with or without 7238438Sdteske# modification, are permitted provided that the following conditions 8238438Sdteske# are met: 9238438Sdteske# 1. Redistributions of source code must retain the above copyright 10238438Sdteske# notice, this list of conditions and the following disclaimer. 11238438Sdteske# 2. Redistributions in binary form must reproduce the above copyright 12238438Sdteske# notice, this list of conditions and the following disclaimer in the 13238438Sdteske# documentation and/or other materials provided with the distribution. 14238438Sdteske# 15238438Sdteske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16252987Sdteske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17238438Sdteske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18238438Sdteske# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19238438Sdteske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20252987Sdteske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21238438Sdteske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22238438Sdteske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23238438Sdteske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24238438Sdteske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25238438Sdteske# SUCH DAMAGE. 26238438Sdteske# 27238438Sdteske# $FreeBSD: releng/10.2/usr.sbin/bsdconfig/networking/share/hostname.subr 260678 2014-01-15 07:49:17Z dteske $ 28238438Sdteske# 29238438Sdteske############################################################ INCLUDES 30238438Sdteske 31240684SdteskeBSDCFG_SHARE="/usr/share/bsdconfig" 32240684Sdteske. $BSDCFG_SHARE/common.subr || exit 1 33244675Sdteskef_dprintf "%s: loading includes..." networking/hostname.subr 34240684Sdteskef_include $BSDCFG_SHARE/dialog.subr 35240684Sdteskef_include $BSDCFG_SHARE/networking/common.subr 36240684Sdteskef_include $BSDCFG_SHARE/networking/resolv.subr 37252077Sdteskef_include $BSDCFG_SHARE/sysrc.subr 38238438Sdteske 39240684SdteskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="120.networking" 40238438Sdteskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 41238438Sdteske 42238438Sdteske############################################################ FUNCTIONS 43238438Sdteske 44244565Sdteske# f_dialog_hnerror $error $hostname 45244565Sdteske# 46244565Sdteske# Display a msgbox with the appropriate error message for an error returned by 47244565Sdteske# the f_validate_hostname function. 48244565Sdteske# 49244565Sdteskef_dialog_hnerror() 50244565Sdteske{ 51244565Sdteske local error="$1" fqhn="$2" 52244565Sdteske 53244565Sdteske [ ${error:-0} -ne 0 ] || return $SUCCESS 54244565Sdteske 55244565Sdteske case "$error" in 56252178Sdteske 1) f_show_msg "$msg_hostname_label_contains_invalid_chars" "$fqhn" ;; 57252178Sdteske 2) f_show_msg \ 58252178Sdteske "$msg_hostname_label_starts_or_ends_with_hyphen" "$fqhn" ;; 59252178Sdteske 3) f_show_msg "$msg_hostname_label_is_null" "$fqhn" ;; 60252178Sdteske 63) f_show_msg "$msg_hostname_label_exceeds_max_length" "$fqhn" ;; 61252178Sdteske 255) f_show_msg "$msg_hostname_exceeds_max_length" "$fqhn" ;; 62238438Sdteske esac 63244565Sdteske} 64238438Sdteske 65244565Sdteske# f_dialog_validate_hostname $hostname 66244565Sdteske# 67244565Sdteske# Returns zero if the given argument (a fully-qualified hostname) is compliant 68244565Sdteske# with standards set-forth in RFC's 952 and 1123 of the Network Working Group: 69244565Sdteske# 70244565Sdteske# RFC 952 - DoD Internet host table specification 71244565Sdteske# http://tools.ietf.org/html/rfc952 72244565Sdteske# 73244565Sdteske# RFC 1123 - Requirements for Internet Hosts - Application and Support 74244565Sdteske# http://tools.ietf.org/html/rfc1123 75244565Sdteske# 76244565Sdteske# If the hostname is determined to be invalid, the appropriate error will be 77244565Sdteske# displayed using the f_dialog_hnerror function above. 78244565Sdteske# 79244565Sdteskef_dialog_validate_hostname() 80244565Sdteske{ 81244565Sdteske local fqhn="$1" 82244565Sdteske 83244565Sdteske f_validate_hostname "$fqhn" 84244565Sdteske local retval=$? 85244565Sdteske 86244565Sdteske # Produce an appropriate error message if necessary. 87244565Sdteske [ $retval -eq $SUCCESS ] || f_dialog_hnerror $retval "$fqhn" 88244565Sdteske 89238438Sdteske return $retval 90238438Sdteske} 91238438Sdteske 92238438Sdteske# f_dialog_input_hostname 93238438Sdteske# 94238438Sdteske# Edits the current hostname. 95238438Sdteske# 96238438Sdteskef_dialog_input_hostname() 97238438Sdteske{ 98260678Sdteske local funcname=f_dialog_input_hostname 99238438Sdteske local hostname="$( f_sysrc_get 'hostname:-$(hostname)' )" 100238438Sdteske local hostname_orig="$hostname" # for change-tracking 101238438Sdteske 102238438Sdteske local msg 103238438Sdteske if [ "$USE_XDIALOG" ]; then 104238438Sdteske msg="$xmsg_please_enter_fqhn" 105238438Sdteske else 106238438Sdteske msg="$msg_please_enter_fqhn" 107238438Sdteske fi 108238438Sdteske 109238438Sdteske # 110238438Sdteske # Loop until the user provides taint-free input. 111238438Sdteske # 112238438Sdteske while :; do 113251242Sdteske f_dialog_input hostname "$msg" "$hostname" \ 114256181Sdteske "$hline_alnum_punc_tab_enter" || return $? 115238438Sdteske # Taint-check the user's input 116238438Sdteske f_dialog_validate_hostname "$hostname" && break 117238438Sdteske done 118238438Sdteske 119238438Sdteske # 120238438Sdteske # Save hostname only if the user changed the hostname. 121238438Sdteske # 122238438Sdteske if [ "$hostname" != "$hostname_orig" ]; then 123238438Sdteske f_dialog_info "$msg_saving_hostname" 124260678Sdteske f_eval_catch $funcname f_sysrc_set \ 125260678Sdteske 'f_sysrc_set hostname "%s"' "$hostname" 126238438Sdteske fi 127238438Sdteske 128238438Sdteske # 129238438Sdteske # Update resolv.conf(5) search/domain directives 130238438Sdteske # 131238438Sdteske f_dialog_resolv_conf_update "$hostname" 132238438Sdteske 133238438Sdteske # 134238438Sdteske # Only ask to apply setting if the current hostname is different than 135238438Sdteske # the stored configuration (in rc.conf(5)). 136238438Sdteske # 137238438Sdteske if [ "$( hostname )" != "$( f_sysrc_get hostname )" ]; then 138244797Sdteske [ ! "$USE_XDIALOG" ] && f_dialog_clear 139238438Sdteske 140238438Sdteske # 141238438Sdteske # If connected via ssh(1) and performing X11-Forwarding, don't 142238438Sdteske # allow the hostname to be changed to prevent the fatal error 143238438Sdteske # "X11 connection rejected because of wrong authentication." 144238438Sdteske # 145238438Sdteske if [ "$USE_XDIALOG" -a "$SSH_CONNECTION" ]; then 146244554Sdteske f_show_msg "$msg_activate_hostname_x11warning" \ 147244554Sdteske "$( hostname )" "$hostname" 148238438Sdteske else 149245402Sdteske f_yesno "$msg_activate_hostname" \ 150245402Sdteske "$( hostname )" "$hostname" \ 151238438Sdteske && hostname "$hostname" 152238438Sdteske fi 153238438Sdteske fi 154238438Sdteske 155256181Sdteske return $DIALOG_OK 156238438Sdteske} 157238438Sdteske 158244675Sdteske############################################################ MAIN 159244675Sdteske 160244675Sdteskef_dprintf "%s: Successfully loaded." networking/hostname.subr 161244675Sdteske 162238438Sdteskefi # ! $_NETWORKING_HOSTNAME_SUBR 163