From 0abcf08262a2c96281938a91f7503e42d750a17e Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 31 Jul 2024 22:33:56 +0200 Subject: [PATCH] Implement no_create_home for users --- lib/tiny-cloud/user-data/alpine-config | 11 +++++++++-- tests/tiny-cloud-alpine.test | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/tiny-cloud/user-data/alpine-config b/lib/tiny-cloud/user-data/alpine-config index 1164140..a4118c0 100644 --- a/lib/tiny-cloud/user-data/alpine-config +++ b/lib/tiny-cloud/user-data/alpine-config @@ -270,7 +270,8 @@ in_list() { init__userdata_users() { local users="$(get_userdata users)" for i in $users; do - local name gecos homedir shell system=false lock_passwd=true + local name gecos homedir shell + local system=false no_create_home=false lock_passwd=true local keys="$(get_userdata users/$i)" if [ "$i" = 1 ] && [ "$keys" = "default" ]; then continue @@ -292,6 +293,9 @@ init__userdata_users() { if in_list system $keys; then system="$(get_userdata users/$i/system)" fi + if in_list no_create_home $keys; then + no_create_home="$(get_userdata users/$i/no_create_home)" + fi if getent passwd "$user" >/dev/null; then log -i -t "$phase" info "$ACTION: user $user already exists" @@ -299,7 +303,10 @@ init__userdata_users() { if [ "$system" != "true" ]; then unset system fi - $MOCK adduser -D ${gecos:+-g "$gecos"} ${homedir:+-h "$homedir"} ${shell:+-s "$shell"} ${system:+-S} "$name" + if [ "$no_create_home" != "true" ]; then + unset no_create_home + fi + $MOCK adduser -D ${gecos:+-g "$gecos"} ${homedir:+-h "$homedir"} ${shell:+-s "$shell"} ${system:+-S} ${no_create_home:+-H} "$name" fi if in_list lock_passwd $keys; then diff --git a/tests/tiny-cloud-alpine.test b/tests/tiny-cloud-alpine.test index 0a1fc5e..6bf3b0a 100755 --- a/tests/tiny-cloud-alpine.test +++ b/tests/tiny-cloud-alpine.test @@ -23,6 +23,7 @@ init_tests \ userdata_users_homedir \ userdata_users_shell \ userdata_users_system \ + userdata_users_no_create_home \ userdata_users_lock_passwd \ userdata_users_ssh_authorized_keys \ userdata_ssh_authorized_keys \ @@ -264,6 +265,22 @@ userdata_users_system_body() { tiny-cloud main } +userdata_users_no_create_home_body() { + # first specified user will replace default user + fake_userdata_nocloud <<-EOF + #alpine-config + users: + - default + - name: foo + no_create_home: true + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"userdata_users: done" \ + -o match:"adduser.*-H.*foo" \ + tiny-cloud main +} + userdata_users_lock_passwd_body() { # first specified user will replace default user fake_userdata_nocloud <<-EOF