]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
By default we should not set a fully qualified hostname.
authorRoy Marples <roy@marples.name>
Tue, 2 Jul 2013 14:02:17 +0000 (14:02 +0000)
committerRoy Marples <roy@marples.name>
Tue, 2 Jul 2013 14:02:17 +0000 (14:02 +0000)
dhcpcd-hooks/30-hostname

index ede7503b4f643934025b4b19042844d37aecf22f..8bbc5d623eb4730f7968f3ddcec5935f582d81f4 100644 (file)
@@ -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 @@ _hostname()
 
 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 @@ try_hostname()
 
 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
 }