From 2a0d241f69f7f3f5b826656a97f9bafb20bd8711 Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Sat, 21 Sep 2013 14:15:45 +0200 Subject: 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 --- tests/local.mk | 1 + tests/misc/id-zero.sh | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100755 tests/misc/id-zero.sh (limited to 'tests') 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 . + +. "${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 -- cgit v1.2.3-54-g00ecf