zgenhostid: accept hostid arguments equal to zero.
commit9c4b6dbb314cabd14746527c0865d98300ea5190
authorÉrico Rolim <erico.erc@gmail.com>
Tue, 10 Nov 2020 14:22:27 +0000 (10 11:22 -0300)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sun, 15 Nov 2020 01:20:54 +0000 (14 17:20 -0800)
treeaea1a23896b8570d9a2f0da78ad42a4f9cc58836
parent4352edaafb5fba9b98b6ac4987b576bbc333f68a
zgenhostid: accept hostid arguments equal to zero.

A common usage pattern for zgenhostid, including in the ZFS dracut
module, is running it as:

  zgenhostid $(hostid)

However, zgenhostid only accepted hostid arguments greater than 0, which
meant that, when the output of hostid(1) was "00000000", zgenhostid
would error out, even though 0 is a possible return value for the
gethostid(3) function used by hostid(1):

- On current musl libc, gethostid(3) is a stub that always returns 0.
- On glibc, gethostid(3) will return 0 if /etc/hostid exists but is
  smaller than 4 bytes.

In these cases, it makes more sense for zgenhostid to treat a value of 0
as other parts of the zfs codebase do, meaning that a hostid value
couldn't be determined; therefore, it should attempt to generate a
random value to write into /etc/hostid.

The manpage and usage output have been updated to reflect this.

Whitespace has also been fixed in the usage output.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Georgy Yakovlev <gyakovlev@gentoo.org>
Reviewed-by: Andrew J. Hesford <ajh@sideband.org>
Signed-off-by: Érico Rolim <erico.erc@gmail.com>
Closes #11174
Closes #11189
cmd/zgenhostid/zgenhostid.c
man/man8/zgenhostid.8