mirror of
https://github.com/apache/jclouds.git
synced 2025-02-16 15:08:28 +00:00
UserAdd: guard groupadd with check if group exists
On SUSE, the “-f” force option is not available for groupadd, so `groupadd -f wheel` returns exit code 9 if the group already exists. To avoid this, first check if the group exists. In normal usage, this doesn’t matter: the script continues with the next command anyway. However, if the statements generated by UserAdd or AdminAccess are used outside of that context (e.g. by code external to jclouds), then this can cause them to fail.
This commit is contained in:
parent
ac732a0a53
commit
bdbed1ced5
@ -212,7 +212,7 @@ END_OF_JCLOUDS_SCRIPT
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /home/users
|
mkdir -p /home/users
|
||||||
chmod 0755 /home/users
|
chmod 0755 /home/users
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c 'defaultAdminUsername' -s /bin/bash -g wheel -m -d /home/users/defaultAdminUsername -p 'crypt(randompassword)' defaultAdminUsername
|
useradd -c 'defaultAdminUsername' -s /bin/bash -g wheel -m -d /home/users/defaultAdminUsername -p 'crypt(randompassword)' defaultAdminUsername
|
||||||
mkdir -p /home/users/defaultAdminUsername/.ssh
|
mkdir -p /home/users/defaultAdminUsername/.ssh
|
||||||
cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
||||||
|
@ -212,7 +212,7 @@ END_OF_JCLOUDS_SCRIPT
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /home/users
|
mkdir -p /home/users
|
||||||
chmod 0755 /home/users
|
chmod 0755 /home/users
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c 'web' -s /bin/bash -g wheel -m -d /home/users/web -p 'crypt(randompassword)' web
|
useradd -c 'web' -s /bin/bash -g wheel -m -d /home/users/web -p 'crypt(randompassword)' web
|
||||||
mkdir -p /home/users/web/.ssh
|
mkdir -p /home/users/web/.ssh
|
||||||
cat >> /home/users/web/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
cat >> /home/users/web/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
||||||
|
@ -93,7 +93,7 @@ END_OF_JCLOUDS_SCRIPT
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /over/ridden
|
mkdir -p /over/ridden
|
||||||
chmod 0755 /over/ridden
|
chmod 0755 /over/ridden
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c 'foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(randompassword)' foo
|
useradd -c 'foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(randompassword)' foo
|
||||||
mkdir -p /over/ridden/foo/.ssh
|
mkdir -p /over/ridden/foo/.ssh
|
||||||
cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
||||||
|
@ -205,7 +205,7 @@ public class UserAdd implements Statement {
|
|||||||
userAddOptions.put("-s", shell);
|
userAddOptions.put("-s", shell);
|
||||||
if (!groups.isEmpty()) {
|
if (!groups.isEmpty()) {
|
||||||
for (String group : groups)
|
for (String group : groups)
|
||||||
statements.add(Statements.exec("groupadd -f " + group));
|
statements.add(Statements.exec("getent group " + group + " || groupadd -f " + group));
|
||||||
|
|
||||||
List<String> groups = Lists.newArrayList(this.groups);
|
List<String> groups = Lists.newArrayList(this.groups);
|
||||||
String primaryGroup = groups.remove(0);
|
String primaryGroup = groups.remove(0);
|
||||||
|
@ -45,13 +45,13 @@ public class UserAddTest {
|
|||||||
|
|
||||||
public void testWithGroupUNIX() {
|
public void testWithGroupUNIX() {
|
||||||
assertEquals(UserAdd.builder().login("me").group("wheel").build().render(OsFamily.UNIX),
|
assertEquals(UserAdd.builder().login("me").group("wheel").build().render(OsFamily.UNIX),
|
||||||
"mkdir -p /home/users\nchmod 0755 /home/users\ngroupadd -f wheel\nuseradd -c me -s /bin/bash -g wheel -m -d /home/users/me me\nchown -R me /home/users/me\n");
|
"mkdir -p /home/users\nchmod 0755 /home/users\ngetent group wheel || groupadd -f wheel\nuseradd -c me -s /bin/bash -g wheel -m -d /home/users/me me\nchown -R me /home/users/me\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testWithGroupsUNIX() {
|
public void testWithGroupsUNIX() {
|
||||||
assertEquals(UserAdd.builder().login("me").groups(ImmutableList.of("wheel", "candy")).build().render(
|
assertEquals(UserAdd.builder().login("me").groups(ImmutableList.of("wheel", "candy")).build().render(
|
||||||
OsFamily.UNIX),
|
OsFamily.UNIX),
|
||||||
"mkdir -p /home/users\nchmod 0755 /home/users\ngroupadd -f wheel\ngroupadd -f candy\nuseradd -c me -s /bin/bash -g wheel -G candy -m -d /home/users/me me\nchown -R me /home/users/me\n");
|
"mkdir -p /home/users\nchmod 0755 /home/users\ngetent group wheel || groupadd -f wheel\ngetent group candy || groupadd -f candy\nuseradd -c me -s /bin/bash -g wheel -G candy -m -d /home/users/me me\nchown -R me /home/users/me\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
Function<String, String> crypt = new Function<String, String>() {
|
Function<String, String> crypt = new Function<String, String>() {
|
||||||
@ -63,7 +63,7 @@ public class UserAddTest {
|
|||||||
|
|
||||||
public void testWithPasswordUNIX() {
|
public void testWithPasswordUNIX() {
|
||||||
String userAdd = UserAdd.builder().cryptFunction(crypt).login("me").password("password").group("wheel").build().render(OsFamily.UNIX);
|
String userAdd = UserAdd.builder().cryptFunction(crypt).login("me").password("password").group("wheel").build().render(OsFamily.UNIX);
|
||||||
assert userAdd.startsWith("mkdir -p /home/users\nchmod 0755 /home/users\ngroupadd -f wheel\nuseradd -c me -s /bin/bash -g wheel -m -d /home/users/me -p 'CRYPT'") : userAdd;
|
assert userAdd.startsWith("mkdir -p /home/users\nchmod 0755 /home/users\ngetent group wheel || groupadd -f wheel\nuseradd -c me -s /bin/bash -g wheel -m -d /home/users/me -p 'CRYPT'") : userAdd;
|
||||||
assert userAdd.endsWith("' me\nchown -R me /home/users/me\n") : userAdd;
|
assert userAdd.endsWith("' me\nchown -R me /home/users/me\n") : userAdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ END_OF_FILE
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /home/users
|
mkdir -p /home/users
|
||||||
chmod 0755 /home/users
|
chmod 0755 /home/users
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c defaultAdminUsername -s /bin/bash -g wheel -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
|
useradd -c defaultAdminUsername -s /bin/bash -g wheel -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
|
||||||
mkdir -p /home/users/defaultAdminUsername/.ssh
|
mkdir -p /home/users/defaultAdminUsername/.ssh
|
||||||
cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<'END_OF_FILE'
|
cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<'END_OF_FILE'
|
||||||
|
@ -7,7 +7,7 @@ END_OF_JCLOUDS_FILE
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /over/ridden
|
mkdir -p /over/ridden
|
||||||
chmod 0755 /over/ridden
|
chmod 0755 /over/ridden
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c 'foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(bar)' foo
|
useradd -c 'foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(bar)' foo
|
||||||
mkdir -p /over/ridden/foo/.ssh
|
mkdir -p /over/ridden/foo/.ssh
|
||||||
cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
||||||
|
@ -7,7 +7,7 @@ END_OF_JCLOUDS_FILE
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /over/ridden
|
mkdir -p /over/ridden
|
||||||
chmod 0755 /over/ridden
|
chmod 0755 /over/ridden
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c 'JClouds Foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(bar)' foo
|
useradd -c 'JClouds Foo' -s /bin/bash -g wheel -m -d /over/ridden/foo -p 'crypt(bar)' foo
|
||||||
mkdir -p /over/ridden/foo/.ssh
|
mkdir -p /over/ridden/foo/.ssh
|
||||||
cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
cat >> /over/ridden/foo/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
||||||
|
@ -7,7 +7,7 @@ END_OF_JCLOUDS_FILE
|
|||||||
chmod 0440 /etc/sudoers
|
chmod 0440 /etc/sudoers
|
||||||
mkdir -p /home/users
|
mkdir -p /home/users
|
||||||
chmod 0755 /home/users
|
chmod 0755 /home/users
|
||||||
groupadd -f wheel
|
getent group wheel || groupadd -f wheel
|
||||||
useradd -c 'defaultAdminUsername' -s /bin/bash -g wheel -m -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
|
useradd -c 'defaultAdminUsername' -s /bin/bash -g wheel -m -d /home/users/defaultAdminUsername -p 'crypt(0)' defaultAdminUsername
|
||||||
mkdir -p /home/users/defaultAdminUsername/.ssh
|
mkdir -p /home/users/defaultAdminUsername/.ssh
|
||||||
cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
cat >> /home/users/defaultAdminUsername/.ssh/authorized_keys <<-'END_OF_JCLOUDS_FILE'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user