Module: check_mk
Branch: master
Commit: 094de0b28bbbc53966e5ba1579de263f4bcd29b0
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=094de0b28bbbc5…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Feb 1 21:28:43 2018 +0100
5718 FIX omd: Improved error handling when deleting site users
When deleting a Check_MK site, the whole site user including it's
home directory and group is removed. Previous versions were suppressing
errors occuring during deletion of the site user which could leave
the site user untouched including the site group which can only
be deleted when the user has been deleted.
The <tt>omd rm</tt> command will now fail with an error in case the
user can not be deleted and print out the reason for this issue. After
resolving it, you can then try to execute <tt>omd rm</tt> again.
Change-Id: I2fba84fbc625fc44cde679b785ebc85c4f8da702
---
.werks/5718 | 18 ++++++++++++++++++
omd/packages/omd/omd | 23 +++++++++++++++++++++--
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/.werks/5718 b/.werks/5718
new file mode 100644
index 0000000..9cd5c93
--- /dev/null
+++ b/.werks/5718
@@ -0,0 +1,18 @@
+Title: omd: Improved error handling when deleting site users
+Level: 1
+Component: omd
+Compatible: compat
+Edition: cre
+Version: 1.5.0i3
+Date: 1517516618
+Class: fix
+
+When deleting a Check_MK site, the whole site user including it's
+home directory and group is removed. Previous versions were suppressing
+errors occuring during deletion of the site user which could leave
+the site user untouched including the site group which can only
+be deleted when the user has been deleted.
+
+The <tt>omd rm</tt> command will now fail with an error in case the
+user can not be deleted and print out the reason for this issue. After
+resolving it, you can then try to execute <tt>omd rm</tt> again.
diff --git a/omd/packages/omd/omd b/omd/packages/omd/omd
index d419094..60ae1fa 100644
--- a/omd/packages/omd/omd
+++ b/omd/packages/omd/omd
@@ -398,7 +398,16 @@ def find_processes_of_user(username):
return []
def groupdel(groupname):
- os.system("groupdel " + groupname)
+ try:
+ p = subprocess.Popen(["groupdel", groupname],
+ stdin=open(os.devnull, "r"), stdout=open(os.devnull,
"w"),
+ stderr=subprocess.PIPE, close_fds=True)
+ except OSError, e:
+ bail_out("\n" + tty_error + ": Failed to delete user '%s':
%s" % (groupname, e))
+
+ stderr = p.communicate()[1]
+ if p.returncode != 0:
+ bail_out("\n" + tty_error + ": Failed to delete user '%s':
%s" % (groupname, stderr))
def groupadd(groupname, gid = None):
cmd = "groupadd "
@@ -434,7 +443,17 @@ def add_user_to_group(user, group):
return os.system(cmd + " >/dev/null") == 0
def userdel(name):
- os.system("userdel -r %s >/dev/null 2>&1" % name)
+ try:
+ p = subprocess.Popen(["userdel", "-r", name],
+ stdin=open(os.devnull, "r"), stdout=open(os.devnull,
"w"),
+ stderr=subprocess.PIPE, close_fds=True)
+ except OSError, e:
+ bail_out("\n" + tty_error + ": Failed to delete user '%s':
%s" % (name, e))
+
+ stderr = p.communicate()[1]
+ if p.returncode != 0:
+ bail_out("\n" + tty_error + ": Failed to delete user '%s':
%s" % (name, stderr))
+
# On some OSes (e.g. debian) the group is automatically removed if
# it bears the same name as the user. So first check for the group.
if group_exists(name):