diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2022-07-01 13:57:24 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2022-07-01 14:08:31 +0200 |
commit | 11492f2e2adc07fce1e98e09c88ee518c8b448ac (patch) | |
tree | 60a6d706a56390d210774ae0d64b591d1d0cd075 | |
parent | ac908aa749f9854a257f6d4957e1342a4db0e1f9 (diff) | |
download | alpine-conf-11492f2e2adc07fce1e98e09c88ee518c8b448ac.zip |
setup-user: avoid eternal loop on adduser failure
Make sure we dont loop forever if adduser fails to create the user.
fixes https://gitlab.alpinelinux.org/alpine/alpine-conf/-/issues/10519
-rw-r--r-- | setup-user.in | 6 | ||||
-rwxr-xr-x | tests/setup_user_test | 15 |
2 files changed, 21 insertions, 0 deletions
diff --git a/setup-user.in b/setup-user.in index 34a5a38..c39c15b 100644 --- a/setup-user.in +++ b/setup-user.in @@ -55,6 +55,10 @@ while true; do else suggest=no fi + # dont suggest something that has failed before + if [ "$suggest" = "$failed_username" ]; then + suggest= + fi ask "Setup a user? (enter a lower-case loginname, or 'no')" $suggest case "$resp" in no) exit 0;; @@ -76,6 +80,8 @@ while true; do if ! [ -n "$interactive" ]; then exit 1 fi + failed_username="$username" + username= done if [ -n "$interactive" ] && [ -z "$keysopt" ]; then diff --git a/tests/setup_user_test b/tests/setup_user_test index 8213e02..03dd601 100755 --- a/tests/setup_user_test +++ b/tests/setup_user_test @@ -7,6 +7,7 @@ init_tests \ setup_user_interactive_no \ setup_user_interactive \ setup_user_interactive_fullname \ + setup_user_interactive_fullname_existing \ setup_user_interactive_singlename \ setup_user_interactive_suggest_ssh \ setup_user_groups_commas \ @@ -74,6 +75,20 @@ setup_user_interactive_fullname_body() { setup-user -f "Joe User" -k none <answers } +setup_user_interactive_fullname_existing_body() { + init_env + ( + echo "existinguser" + echo "testuser" + ) >answers + ADDUSER_EXIST=existinguser atf_check -s exit:0 \ + -o match:"Setup a user.*\[existinguser\]" \ + -o match:"Setup a user.*\) adduser" \ + -o match:"adduser.* -g existinguser .*testuser" \ + -e match:"adduser: user 'existinguser' in use" \ + setup-user -f "existinguser" -k none <answers +} + setup_user_interactive_singlename_body() { init_env echo "" >answers |