diff options
| author | Karel Zak <kzak@redhat.com> | 2025-11-14 09:56:03 +0100 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2025-11-14 09:56:03 +0100 |
| commit | 376496a3d35fd5a94e9c429b00c695885539f197 (patch) | |
| tree | 687d5151d7220b0f0cf69302b0f4b7566827d1a0 | |
| parent | 792824f65ce627be880b3f60f77f734be704a445 (diff) | |
| parent | 28e91d087ed1b9e3851bb16b129a1acda9253986 (diff) | |
| download | util-linux-376496a3d35fd5a94e9c429b00c695885539f197.tar.gz | |
Merge branch 'fix/su_lsb5_compliance' of https://github.com/cgoesche/util-linux-fork
* 'fix/su_lsb5_compliance' of https://github.com/cgoesche/util-linux-fork:
tests: (su) add more options tests
su: pass arguments after <user> to shell
| -rw-r--r-- | login-utils/su-common.c | 4 | ||||
| -rw-r--r-- | tests/expected/su/group-primary-login | 1 | ||||
| -rw-r--r-- | tests/expected/su/group-primary-no-login | 1 | ||||
| -rw-r--r-- | tests/expected/su/group-supplemental-login | 1 | ||||
| -rw-r--r-- | tests/expected/su/group-supplemental-no-login | 1 | ||||
| -rw-r--r-- | tests/expected/su/shell-additional-args | 1 | ||||
| -rw-r--r-- | tests/expected/su/shell-command-option | 1 | ||||
| -rwxr-xr-x | tests/ts/su/group | 78 | ||||
| -rwxr-xr-x | tests/ts/su/shell | 35 |
9 files changed, 121 insertions, 2 deletions
diff --git a/login-utils/su-common.c b/login-utils/su-common.c index 38d476a1a2..4d54eab31b 100644 --- a/login-utils/su-common.c +++ b/login-utils/su-common.c @@ -1036,7 +1036,7 @@ int su_main(int argc, char **argv, int mode) su->conv.appdata_ptr = (void *) su; while ((optc = - getopt_long(argc, argv, "c:fg:G:lmpPTs:u:hVw:", longopts, + getopt_long(argc, argv, "+c:fg:G:lmpPTs:u:hVw:", longopts, NULL)) != -1) { err_exclusive_options(optc, longopts, excl, excl_st); @@ -1142,7 +1142,7 @@ int su_main(int argc, char **argv, int mode) } FALLTHROUGH; case SU_MODE: - if (optind < argc) + if (optind < argc && *argv[optind] != '-') su->new_user = argv[optind++]; break; } diff --git a/tests/expected/su/group-primary-login b/tests/expected/su/group-primary-login new file mode 100644 index 0000000000..b4b6910249 --- /dev/null +++ b/tests/expected/su/group-primary-login @@ -0,0 +1 @@ +ts_grp diff --git a/tests/expected/su/group-primary-no-login b/tests/expected/su/group-primary-no-login new file mode 100644 index 0000000000..b4b6910249 --- /dev/null +++ b/tests/expected/su/group-primary-no-login @@ -0,0 +1 @@ +ts_grp diff --git a/tests/expected/su/group-supplemental-login b/tests/expected/su/group-supplemental-login new file mode 100644 index 0000000000..b4b6910249 --- /dev/null +++ b/tests/expected/su/group-supplemental-login @@ -0,0 +1 @@ +ts_grp diff --git a/tests/expected/su/group-supplemental-no-login b/tests/expected/su/group-supplemental-no-login new file mode 100644 index 0000000000..b4b6910249 --- /dev/null +++ b/tests/expected/su/group-supplemental-no-login @@ -0,0 +1 @@ +ts_grp diff --git a/tests/expected/su/shell-additional-args b/tests/expected/su/shell-additional-args new file mode 100644 index 0000000000..01dca2d74b --- /dev/null +++ b/tests/expected/su/shell-additional-args @@ -0,0 +1 @@ +/bin/bash diff --git a/tests/expected/su/shell-command-option b/tests/expected/su/shell-command-option new file mode 100644 index 0000000000..01dca2d74b --- /dev/null +++ b/tests/expected/su/shell-command-option @@ -0,0 +1 @@ +/bin/bash diff --git a/tests/ts/su/group b/tests/ts/su/group new file mode 100755 index 0000000000..9bb4b14f0a --- /dev/null +++ b/tests/ts/su/group @@ -0,0 +1,78 @@ +#!/bin/bash + +# This file is part of util-linux. +# +# This file 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 2 of the License, or +# (at your option) any later version. +# +# This file 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. +# +# Copyright (C) 2025 Christian Goeschel Ndjomouo <cgoesc2@wgu.edu> + +TS_TOPDIR="${0%/*}/../.." +TS_DESC="group" + +. "$TS_TOPDIR/functions.sh" +ts_init "$*" + +ts_skip_nonroot +ts_check_test_command "$TS_CMD_SU" +ts_check_prog "groupadd" +ts_check_prog "groupdel" +ts_check_prog "getent" + +TS_CMD_ID="id" + +username="$(whoami)" +grp_name="ts_grp" + +if ! groupadd --force "$grp_name"; then + ts_skip "could not create group '$grp_name'" +fi + +# Since here '-c' comes after <user> it'll be passed to the actual shell +# instead of being interpreted by su(1). +ts_init_subtest "primary-no-login" + +"$TS_CMD_SU" --group "$grp_name" "$username" \ + -c "$TS_CMD_ID --groups --name" 2>> "$TS_ERRLOG" \ + | grep -o "$grp_name" \ + | uniq >> "$TS_OUTPUT" + +ts_finalize_subtest + +ts_init_subtest "primary-login" +"$TS_CMD_SU" --group "$grp_name" - "$username" \ + -c "$TS_CMD_ID --groups --name" 2>> "$TS_ERRLOG" \ + | grep -o "$grp_name" \ + | uniq >> "$TS_OUTPUT" + +grep -q 'Authentication failure' "$TS_ERRLOG" +[ "$?" -eq 0 ] && ts_skip_subtest "authentication failure" +ts_finalize_subtest + +ts_init_subtest "supplemental-no-login" +"$TS_CMD_SU" --supp-group "$grp_name" "$username" \ + -c "$TS_CMD_ID --groups --name" 2>> "$TS_ERRLOG" \ + | grep -o "$grp_name" \ + | uniq >> "$TS_OUTPUT" +ts_finalize_subtest + +ts_init_subtest "supplemental-login" +"$TS_CMD_SU" --supp-group "$grp_name" - "$username" \ + -c "$TS_CMD_ID --groups --name" 2>> "$TS_ERRLOG" \ + | grep -o "$grp_name" \ + | uniq >> "$TS_OUTPUT" + +grep -q 'Authentication failure' "$TS_ERRLOG" +[ "$?" -eq 0 ] && ts_skip_subtest "authentication failure" +ts_finalize_subtest + +groupdel "$grp_name" + +ts_finalize
\ No newline at end of file diff --git a/tests/ts/su/shell b/tests/ts/su/shell new file mode 100755 index 0000000000..dc77b0b4fb --- /dev/null +++ b/tests/ts/su/shell @@ -0,0 +1,35 @@ +#!/bin/bash + +# This file is part of util-linux. +# +# This file 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 2 of the License, or +# (at your option) any later version. +# +# This file 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. +# +# Copyright (C) 2025 Christian Goeschel Ndjomouo <cgoesc2@wgu.edu> + +TS_TOPDIR="${0%/*}/../.." +TS_DESC="shell" + +. "$TS_TOPDIR/functions.sh" +ts_init "$*" + +ts_skip_nonroot + +username="$(whoami)" + +ts_init_subtest "command-option" +"$TS_CMD_SU" --shell "/bin/bash" --command "echo \$SHELL" "$username" >> "$TS_OUTPUT" 2>> "$TS_ERRLOG" +ts_finalize_subtest + +ts_init_subtest "additional-args" +"$TS_CMD_SU" --shell "/bin/bash" "$username" -c "echo \$SHELL" >> "$TS_OUTPUT" 2>> "$TS_ERRLOG" +ts_finalize_subtest + +ts_finalize
\ No newline at end of file |
