Repeat after me: If you change IFS, it will break something unexpected.
The problem is that we use IFS to change read's field separator. This
has the side effect of changing how sh(1) splits all string, including
in command parsing functions.
In this case, unless quoted, the strings are always splitted using IFS.
So changing IFS will change how these strings are splitted, and you end
up having a headache. For example:
$ GID_FILES="foo bar"
$ set -x
$ echo $GID_FILES
+ echo foo bar
foo bar
$ IFS=:
$ GID_FILES="foo bar"
$ set -x
$ echo $GID_FILES
+ echo 'foo bar'
foo bar
In the first case, it runs echo with two arguments, first is foo, second is bar.
In the second case, it runs echo with one argument, 'foo bar'.
To fix this, restrict the time during which IFS changes to only one
command, set, and use positional parameters to extract values.
Reported by: feld
Sponsored by: Absolight
Differential Revision: https://reviews.freebsd.org/D11632
This happens when the UID/GID doesn't match the expected number from
UIDs/GIDs.
https://github.com/freebsd/pkg/issues/1485 has more details.
With hat: portmgr
Discussed with: bapt, mat
This adds a few features:
- it checks that the UID line has the right number of fields [1]
- it tells the user that there are groups that he may want to remove [2]
PR: 208800, 173318 [1], 157546 [2]
Submitted by: mat
Sponsored by: Absolight
Differential Revision: https://reviews.freebsd.org/D5939