diff options
author | Bernhard Voelker <mail@bernhard-voelker.de> | 2013-09-21 14:15:45 +0200 |
---|---|---|
committer | Bernhard Voelker <mail@bernhard-voelker.de> | 2013-09-21 14:15:45 +0200 |
commit | 2a0d241f69f7f3f5b826656a97f9bafb20bd8711 (patch) | |
tree | 3e23194ad9215ceee6f4f6cb2158b4f925318ea3 /tests | |
parent | b3578fc9ffe70b9466687f9f6470a85f1a0ab14f (diff) | |
download | coreutils-2a0d241f69f7f3f5b826656a97f9bafb20bd8711.tar.xz |
id: add -z, --zero option
* src/group-list.h (print_group_list): Add a parameter for the
delimiter of type char.
* src/group-list.c (print_group_list): Likewise, and use it instead
of a white space character to delimit the group entries.
* src/groups.c (main): Pass white space character to print_group_list().
* src/id.c (longopts): Add array element for the new long option.
(usage): Document the new option. While at it, fix the alignment
of the descriptions to match that of HELP_OPTION_DESCRIPTION.
(main): Define the bool flag opt_zero indicating the use of the
new option. In the getopt_long loop, handle it.
Output an error diagnostic in the case the --zero option has been
specified together with the default format.
In the case of -gG, pass either a NUL or a white space character to
print_group_list() - depending on the above new flag.
Likewise change the printing of the final newline character: output
a NUL instead if the --zero option has been specified.
* doc/coreutils.texi (id invocation): Document the new option.
While at it, move the @exitstatus macro down after the macro
@primaryAndSupplementaryGroups in order to be consistent with
other texinfo documents.
(groups invocation): Move @exitstatus down after the macro
@primaryAndSupplementaryGroups here, too.
* tests/misc/id-zero.sh: Add new test exercising the new option.
* tests/local.mk (all_tests): Reference it.
* NEWS (New features): Mention the new option.
Fixes http://bugs.gnu.org/9987
Diffstat (limited to 'tests')
-rw-r--r-- | tests/local.mk | 1 | ||||
-rwxr-xr-x | tests/misc/id-zero.sh | 62 |
2 files changed, 63 insertions, 0 deletions
diff --git a/tests/local.mk b/tests/local.mk index b00ff5958..8f76b2371 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -277,6 +277,7 @@ all_tests = \ tests/misc/id-context.sh \ tests/misc/id-groups.sh \ tests/misc/id-setgid.sh \ + tests/misc/id-zero.sh \ tests/misc/md5sum.pl \ tests/misc/md5sum-bsd.sh \ tests/misc/md5sum-newline.pl \ diff --git a/tests/misc/id-zero.sh b/tests/misc/id-zero.sh new file mode 100755 index 000000000..cef5672fc --- /dev/null +++ b/tests/misc/id-zero.sh @@ -0,0 +1,62 @@ +#!/bin/sh +# Exercise "id --zero". + +# Copyright (C) 2013 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src +print_ver_ id + +u="$( id -nu )" +id || fail=1 +id "$u" || fail=1 + +# id(1) should refuse --zero in default format. +echo 'id: option --zero not permitted in default format' > err-exp \ + || framework_failure_ +id --zero > out 2>err && fail=1 +compare /dev/null out || fail=1 +compare err-exp err || fail=1 + +# Create a nice list of users. +# Add $USER to ensure we have at least one explicit entry. +users="$u" +# Add a few typical users to test single group and multiple groups. +for u in root man postfix sshd nobody ; do + id $u >/dev/null 2>&1 && users="$users $u" +done +# Add $users and '' (implicit $USER) to list to process. +printf '%s\n' $users '' >> users || framework_failure_ + +# Exercise "id -z" with various options. +printf '\n' > exp || framework_failure_ +:> out || framework_failure_ + +while read u ; do + for o in g gr G Gr u ur ; do + for n in '' n ; do + printf '%s: ' "id -${o}${n}[z] $u" >> exp || framework_failure_ + printf '\n%s: ' "id -${o}${n}[z] $u" >> out || framework_failure_ + id -${o}${n} $u >> exp || fail=1 + id -${o}${n}z $u > tmp || fail=1 + head -c-1 < tmp >> out || framework_failure_ + done + done +done < users +printf '\n' >> out || framework_failure_ +tr '\0' ' ' < out > out2 || framework_failure_ +compare exp out2 || fail=1 + +Exit $fail |