Module: check_mk
Branch: master
Commit: d93687a00f0cfc643875e38b4f666f7ed7d5a63d
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d93687a00f0cfc…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Nov 7 13:35:31 2016 +0100
3978 FIX mkbackup: Fixed backup to some CIFS shares ([Errno 13] Permission denied)
'...')
On some CIFS shares the backup was not possible because chown / chmod operation failed
with a permission denied error during backup.
---
.werks/3978 | 10 ++++++++++
ChangeLog | 1 +
bin/mkbackup | 29 +++++++++++++++++++++++------
3 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/.werks/3978 b/.werks/3978
new file mode 100644
index 0000000..fa7ee7b
--- /dev/null
+++ b/.werks/3978
@@ -0,0 +1,10 @@
+Title: mkbackup: Fixed backup to some CIFS shares ([Errno 13] Permission denied)
'...')
+Level: 1
+Component: core
+Compatible: compat
+Version: 1.4.0i2
+Date: 1478522063
+Class: fix
+
+On some CIFS shares the backup was not possible because chown / chmod operation failed
+with a permission denied error during backup.
diff --git a/ChangeLog b/ChangeLog
index 4ee89ee..c718034 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
* 4036 Measurement of time used by Check_MK now includes time waited for agent...
* 3648 FIX: Fixed log file parsing of host states...
* 3965 FIX: Nagios: Improved handling of broken core config...
+ * 3978 FIX: mkbackup: Fixed backup to some CIFS shares ([Errno 13] Permission denied)
'...')...
Checks & Agents:
* 3841 cups_queues: thresholds are now configurable in WATO...
diff --git a/bin/mkbackup b/bin/mkbackup
index f5c1265..5b5a7f2 100755
--- a/bin/mkbackup
+++ b/bin/mkbackup
@@ -170,8 +170,7 @@ def acquire_backup_lock():
if not os.path.exists(lock_file_path):
try:
g_backup_lock_f = tempfile.NamedTemporaryFile(mode="a+",
dir="/tmp", delete=False)
- os.chown(g_backup_lock_f.name, -1, grp.getgrnam("omd").gr_gid)
- os.chmod(g_backup_lock_f.name, 0660)
+ set_permissions(g_backup_lock_f.name, -1,
grp.getgrnam("omd").gr_gid, 0660)
os.rename(g_backup_lock_f.name, lock_file_path)
except (IOError, OSError), e:
raise MKGeneralException("Failed to open lock file \"%s\":
%s" %
@@ -194,6 +193,26 @@ def acquire_backup_lock():
fcntl.fcntl(fd, fcntl.F_SETFD, fcntl.fcntl(fd, fcntl.F_GETFD) | cloexec_flag)
+def set_permissions(path, uid, gid, mode):
+ try:
+ os.chown(path, uid, gid)
+ except OSError, e:
+ if e.errno == 13:
+ pass # On CIFS mounts where "uid=0,forceuid,gid=1000,forcegid"
mount options
+ # are set, this is not possible. So skip over.
+ else:
+ raise
+
+ try:
+ os.chmod(path, mode)
+ except OSError, e:
+ if e.errno == 13:
+ pass # On CIFS mounts where "uid=0,forceuid,gid=1000,forcegid"
mount options
+ # are set, this is not possible. So skip over.
+ else:
+ raise
+
+
# TODO: Move to cmklib?
def makedirs(path, user=None, group=None, mode=None):
head, tail = os.path.split(path)
@@ -229,8 +248,7 @@ def makedir(path, user=None, group=None, mode=None):
else:
gid = -1
- os.chown(path, uid, gid)
- os.chmod(path, mode)
+ set_permissions(path, uid, gid, mode)
# Wenn als root ausgeführt:
@@ -1487,8 +1505,7 @@ def do_site_restore(opts, info, site=None):
omd_root = "/omd/sites/%s" % site
if not os.path.exists(omd_root):
os.mkdir(omd_root)
- os.chown(omd_root, pwd.getpwnam(site).pw_uid, grp.getgrnam(site).gr_gid)
- os.chmod(omd_root, 0755)
+ set_permissions(omd_root, pwd.getpwnam(site).pw_uid,
grp.getgrnam(site).gr_gid, 0775)
cmd.append("-")