mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-11-15 02:42:58 +00:00
Merge pull request #3246 from pvogt09/fix/user_exists
fixes #3217 by checking for existing pihole group
This commit is contained in:
commit
a9136d752a
3 changed files with 89 additions and 5 deletions
|
@ -1768,20 +1768,51 @@ create_pihole_user() {
|
||||||
printf " %b %s..." "${INFO}" "${str}"
|
printf " %b %s..." "${INFO}" "${str}"
|
||||||
# If the user pihole exists,
|
# If the user pihole exists,
|
||||||
if id -u pihole &> /dev/null; then
|
if id -u pihole &> /dev/null; then
|
||||||
|
# if group exists
|
||||||
|
if getent group pihole > /dev/null 2>&1; then
|
||||||
# just show a success
|
# just show a success
|
||||||
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
||||||
|
else
|
||||||
|
local str="Checking for group 'pihole'"
|
||||||
|
printf " %b %s..." "${INFO}" "${str}"
|
||||||
|
local str="Creating group 'pihole'"
|
||||||
|
# if group can be created
|
||||||
|
if groupadd pihole; then
|
||||||
|
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
||||||
|
local str="Adding user 'pihole' to group 'pihole'"
|
||||||
|
printf " %b %s..." "${INFO}" "${str}"
|
||||||
|
# if pihole user can be added to group pihole
|
||||||
|
if usermod -g pihole pihole; then
|
||||||
|
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
||||||
|
else
|
||||||
|
printf "%b %b %s\\n" "${OVER}" "${CROSS}" "${str}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "%b %b %s\\n" "${OVER}" "${CROSS}" "${str}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
# Otherwise,
|
# Otherwise,
|
||||||
else
|
else
|
||||||
printf "%b %b %s" "${OVER}" "${CROSS}" "${str}"
|
printf "%b %b %s" "${OVER}" "${CROSS}" "${str}"
|
||||||
local str="Creating user 'pihole'"
|
local str="Creating user 'pihole'"
|
||||||
printf "%b %b %s..." "${OVER}" "${INFO}" "${str}"
|
printf "%b %b %s..." "${OVER}" "${INFO}" "${str}"
|
||||||
# create her with the useradd command
|
# create her with the useradd command
|
||||||
|
if getent group pihole > /dev/null 2>&1; then
|
||||||
|
# add primary group pihole as it already exists
|
||||||
|
if useradd -r --no-user-group -g pihole -s /usr/sbin/nologin pihole; then
|
||||||
|
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
||||||
|
else
|
||||||
|
printf "%b %b %s\\n" "${OVER}" "${CROSS}" "${str}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# add user pihole with default group settings
|
||||||
if useradd -r -s /usr/sbin/nologin pihole; then
|
if useradd -r -s /usr/sbin/nologin pihole; then
|
||||||
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
printf "%b %b %s\\n" "${OVER}" "${TICK}" "${str}"
|
||||||
else
|
else
|
||||||
printf "%b %b %s\\n" "${OVER}" "${CROSS}" "${str}"
|
printf "%b %b %s\\n" "${OVER}" "${CROSS}" "${str}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Allow HTTP and DNS traffic
|
# Allow HTTP and DNS traffic
|
||||||
|
|
|
@ -188,6 +188,14 @@ removeNoPurge() {
|
||||||
echo -e " ${CROSS} Unable to remove 'pihole' user"
|
echo -e " ${CROSS} Unable to remove 'pihole' user"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
# If the pihole group exists, then remove
|
||||||
|
if getent group "pihole" &> /dev/null; then
|
||||||
|
if ${SUDO} groupdel pihole 2> /dev/null; then
|
||||||
|
echo -e " ${TICK} Removed 'pihole' group"
|
||||||
|
else
|
||||||
|
echo -e " ${CROSS} Unable to remove 'pihole' group"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo -e "\\n We're sorry to see you go, but thanks for checking out Pi-hole!
|
echo -e "\\n We're sorry to see you go, but thanks for checking out Pi-hole!
|
||||||
If you need help, reach out to us on Github, Discourse, Reddit or Twitter
|
If you need help, reach out to us on Github, Discourse, Reddit or Twitter
|
||||||
|
|
|
@ -92,6 +92,51 @@ def test_setupVars_saved_to_file(Pihole):
|
||||||
assert "{}={}".format(k, v) in output
|
assert "{}={}".format(k, v) in output
|
||||||
|
|
||||||
|
|
||||||
|
def test_pihole_user_group_creation(Pihole):
|
||||||
|
'''
|
||||||
|
check user creation works if user or group already exist
|
||||||
|
'''
|
||||||
|
sudo_cmd = 'su --shell /bin/bash --command "{0}" -p root'
|
||||||
|
# normal situation where neither user or group exist
|
||||||
|
user_create = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
create_pihole_user
|
||||||
|
''')
|
||||||
|
expected_stdout = tick_box + ' Creating user \'pihole\''
|
||||||
|
assert expected_stdout in user_create.stdout
|
||||||
|
# situation where both user and group already exist
|
||||||
|
user_create = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
create_pihole_user
|
||||||
|
''')
|
||||||
|
expected_stdout = tick_box + ' Checking for user \'pihole\''
|
||||||
|
assert expected_stdout in user_create.stdout
|
||||||
|
# situation where only group and no user exists
|
||||||
|
Pihole.run(sudo_cmd.format('userdel -r pihole'))
|
||||||
|
user_create = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
create_pihole_user
|
||||||
|
''')
|
||||||
|
expected_stdout = tick_box + ' Creating user \'pihole\''
|
||||||
|
assert expected_stdout in user_create.stdout
|
||||||
|
# situation where only user and no group exists
|
||||||
|
Pihole.run(sudo_cmd.format('userdel -r pihole'))
|
||||||
|
Pihole.run(sudo_cmd.format('groupdel pihole'))
|
||||||
|
Pihole.run(sudo_cmd.format('groupadd pihole_dummy'))
|
||||||
|
useradd_dummy = (
|
||||||
|
'useradd -r --no-user-group -g pihole_dummy ' +
|
||||||
|
'-s /usr/sbin/nologin pihole')
|
||||||
|
Pihole.run(sudo_cmd.format(useradd_dummy))
|
||||||
|
user_create = Pihole.run('''
|
||||||
|
source /opt/pihole/basic-install.sh
|
||||||
|
create_pihole_user
|
||||||
|
''')
|
||||||
|
expected_stdout = tick_box + ' Creating group \'pihole\''
|
||||||
|
assert expected_stdout in user_create.stdout
|
||||||
|
expected_stdout = tick_box + ' Adding user \'pihole\' to group \'pihole\''
|
||||||
|
assert expected_stdout in user_create.stdout
|
||||||
|
|
||||||
|
|
||||||
def test_configureFirewall_firewalld_running_no_errors(Pihole):
|
def test_configureFirewall_firewalld_running_no_errors(Pihole):
|
||||||
'''
|
'''
|
||||||
confirms firewalld rules are applied when firewallD is running
|
confirms firewalld rules are applied when firewallD is running
|
||||||
|
|
Loading…
Reference in a new issue