changeset 2066:aac040a20586 draft

By default we should not set a fully qualified hostname.
author Roy Marples <roy@marples.name>
date Tue, 02 Jul 2013 14:02:17 +0000
parents 8cd9f993cbbd
children 71c2f78a9b33
files dhcpcd-hooks/30-hostname
diffstat 1 files changed, 55 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/dhcpcd-hooks/30-hostname	Tue Jul 02 13:45:27 2013 +0000
+++ b/dhcpcd-hooks/30-hostname	Tue Jul 02 14:02:17 2013 +0000
@@ -1,5 +1,8 @@
 # Set the hostname from DHCP data if required
 
+# Generally we should not set the system hostname to be fully qualified
+: ${hostname_fqdn:=false}
+
 # Some systems don't have hostname(1)
 _hostname()
 {
@@ -38,24 +41,47 @@
 
 need_hostname()
 {
-	local hostname=""
+	local hostname hfqdn
 
 	case "$force_hostname" in
-	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1) ;;
-	*) hostname="$(_hostname)";;
+	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1) return 0;;
 	esac
+
+	hostname="$(_hostname)"
 	case "$hostname" in
-	""|"(none)"|localhost|localhost.localdomain)
-		[ -n "$new_host_name" -o -n "$new_fqdn_name" ];;
-	"$old_host_name"|"$old_fqdn_name")
-		true;;
-	*)
-		false;;
+	""|"(none)"|localhost|localhost.localdomain) return 0;;
+	esac
+	
+	case "$hostname_fqdn" in
+	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1)	hfqdn=true;;
+	*)					hfqdn=false;;
 	esac
+
+	if [ -n "$old_fqdn_name" ]; then
+		if ${hfqdn}; then
+			[ "$hostname" = "$old_fqdn_name" ]
+		else	
+			[ "$hostname" = "${old_fqdn_name%%.*}" ]
+		fi
+	elif [ -n "$old_host_name" ]; then
+		if ${hfqdn}; then
+			if [ -n "$old_domain_name" -a \
+			    "$old_host_name" = "${old_host_name#*.}" ]
+			then
+				[ "$hostname" = \
+				    "$old_host_name.$old_domain_name" ]
+			else
+				[ "$hostname" = "$old_host_name" ]
+			fi
+		else
+			[ "$hostname" = "${old_host_name%%.*}" ]
+		fi
+	fi
 }
 
 try_hostname()
 {
+
 	if valid_domainname "$1"; then
 		_hostname "$1"
 	else
@@ -65,20 +91,32 @@
 
 set_hostname()
 {
+	local hfqdn
 
 	need_hostname || return
 
+	case "$hostname_fqdn" in
+	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|1)	hfqdn=true;;
+	*)					hfqdn=false;;
+	esac
+
 	if [ -n "$new_fqdn_name" ]; then
-		try_hostname "$new_fqdn_name"
+		if ${hfqdn}; then
+			try_hostname "$new_fqdn_name"
+		else
+			try_hostname "${new_fqdn_name%%.*}"
+		fi
 	elif [ -n "$new_host_name" ]; then
-		# Could be non RFC conformant domain in the
-		# hostname field
-		if [ -n "$new_domain_name" -a \
-		    "$new_host_name" = "${new_host_name#*.}" ]
-		then
-			try_hostname "$new_host_name.$new_domain_name"
+		if ${hfqdn}; then
+			if [ -n "$new_domain_name" -a \
+			    "$new_host_name" = "${new_host_name#*.}" ]
+			then
+				try_hostname "$new_host_name.$new_domain_name"
+			else
+				try_hostname "$new_host_name"
+			fi
 		else
-			try_hostname "$new_host_name"
+			try_hostname "${new_host_name%%.*}"
 		fi
 	fi
 }