Skip to content

Commit

Permalink
home-manager: ignore hostname -f lookup errors
Browse files Browse the repository at this point in the history
`hostname -f` could fail depending on the resolver. Discard any stderr
and test for the exit status before using the value for flake attribute
lookup.

I was unable to repro the exact bad exit status in #5665.
With
  - nscd disabled,
  - nsswitch.conf pointing to 'files',
  - hostname entry removed from /etc/hosts
`hostname -f` from inetutils-2.5 fell back to showing just the nodename
from `uname(2)`. Injecting an empty string into the
`(struct utsname).nodename` field of `uname(2)` using strace still
exited with empty output and 0 exit-status.

Fixes #5665
  • Loading branch information
gauravjuvekar committed Jul 29, 2024
1 parent 792757f commit 89670e2
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion home-manager/home-manager
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,19 @@ function setFlakeAttribute() {
;;
*)
local name="$USER"

local hostnameArray=()
# FQDN lookup can fail depending on the resolver.
local fqdn
fqdn="$(hostname -f 2> /dev/null)"
if [[ $? -eq 0 ]]; then
hostnameArray+=( "$USER@$fqdn" )
fi
# Check FQDN, long, and short hostnames; long first to preserve
# pre-existing behaviour in case both happen to be defined.
for n in "$USER@$(hostname -f)" "$USER@$(hostname)" "$USER@$(hostname -s)"; do
hostnameArray+=( "$USER@$(hostname)" "$USER@$(hostname -s)" )

for n in "${hostnameArray[@]}"; do
if [[ "$(nix eval "$flake#homeConfigurations" --apply "x: x ? \"$n\"")" == "true" ]]; then
name="$n"
if [[ -v VERBOSE ]]; then
Expand Down

0 comments on commit 89670e2

Please sign in to comment.