Module: check_mk
Branch: master
Commit: 2dca3729f3a7c608ddb528420caa6b182cf42c78
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=2dca3729f3a7c6…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Dec 6 08:49:00 2011 +0100
Updated bug entries #0475
---
.bugs/475 | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/.bugs/475 b/.bugs/475
new file mode 100644
index 0000000..3f6385f
--- /dev/null
+++ b/.bugs/475
@@ -0,0 +1,13 @@
+Title: lnx_if fails if ethtool is not working
+Component: checks
+Benefit: 1
+State: open
+Cost: 2
+Date: 2011-12-06 08:47:42
+Targetversion: 1.1.12
+Class: bug
+
+The check should work, if information from ethtool is missing.
+That way also virtual network cards (e.g. from VMWare) will
+work. We must make shure, however, that we do not inventorize
+lo, sit and other dummy devices.
Module: check_mk
Branch: master
Commit: 37d1ad17af3b5776fc577b58113095fd71494fcb
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=37d1ad17af3b57…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Dec 5 16:47:13 2011 +0100
NagVis permissions are now written when enabled via multisite option "wato_write_nagvis_auth"
---
web/htdocs/config.py | 2 +
web/htdocs/wato.py | 22 ++++++++-----
web/plugins/wato/nagvis_auth.py | 65 +++++++++++++++++++++++++++++++++++++++
3 files changed, 81 insertions(+), 8 deletions(-)
diff --git a/web/htdocs/config.py b/web/htdocs/config.py
index 392ce4e..efb81ee 100644
--- a/web/htdocs/config.py
+++ b/web/htdocs/config.py
@@ -563,6 +563,8 @@ wato_max_snapshots = 50
wato_num_hostspecs = 12
wato_num_itemspecs = 15
+wato_write_nagvis_auth = False
+
# ____ ___
# | __ )_ _|
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index ffab9ae..933ab78 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -857,11 +857,17 @@ def check_host_permissions(hostname, exception=True):
return reason
-def check_folder_permissions(folder, how, exception=True):
- if config.may("wato.all_folders"):
- return True
- if how == "read" and config.may("wato.see_all_folders"):
- return True
+def check_folder_permissions(folder, how, exception=True, user = None):
+ if not user:
+ if config.may("wato.all_folders"):
+ return True
+ if how == "read" and config.may("wato.see_all_folders"):
+ return True
+ else:
+ if config.user_may(user, "wato.all_folders"):
+ return True
+ if how == "read" and config.user_may(user, "wato.see_all_folders"):
+ return True
# Get contact groups of that folder
effective = effective_attributes(None, folder)
@@ -7610,7 +7616,7 @@ def save_users(profiles):
# Call the users_saved hook
try:
- call_hook_users_saved()
+ call_hook_users_saved(users)
except Exception, e:
if config.debug:
raise
@@ -9862,9 +9868,9 @@ def call_hook_activate_changes():
call_hooks("activate-changes", collect_hosts(g_root_folder))
# This hook is executed when the save_users() function is called
-def call_hook_users_saved():
+def call_hook_users_saved(users):
if hook_registered('users-saved'):
- call_hooks("users-saved")
+ call_hooks("users-saved", users)
#.
diff --git a/web/plugins/wato/nagvis_auth.py b/web/plugins/wato/nagvis_auth.py
new file mode 100644
index 0000000..a3bf39b
--- /dev/null
+++ b/web/plugins/wato/nagvis_auth.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# Generate the permissions file for the multisite authorization module
+def generate_auth_file(users):
+ import json
+
+ auth_file = '%s/etc/nagvis/auth.multisite' % defaults.omd_root
+
+ #
+ # 0. Data gathering - populate g_target_maps list
+ #
+ process_tree(api.get_folder_tree())
+
+ #
+ # 1. Write out the user permissions file
+ #
+ nagvis_users = {}
+
+ for username, user in users.items():
+ if not username in nagvis_users:
+ nagvis_users[username] = { 'permissions': [] }
+
+ if 'language' in user:
+ nagvis_users[username]['language'] = user['language']
+
+ #if user_may(username, ''):
+
+ # WATO folder relatived permissions
+ for mapname, wato_folder in g_target_maps.iteritems():
+ if check_folder_permissions(wato_folder, 'read', False, user = username):
+ nagvis_users[username]['permissions'].append(('Map', 'view', mapname))
+
+ if check_folder_permissions(wato_folder, 'write', False, user = username):
+ nagvis_users[username]['permissions'].append(('Map', 'edit', mapname))
+
+ file(auth_file, 'w').write(json.dumps(nagvis_users))
+
+# Only register this hook when configured to do so
+# This works only in OMD for the moment
+if config.wato_write_nagvis_auth and defaults.omd_root:
+ api.register_hook('users-saved', generate_auth_file)
Module: check_mk
Branch: master
Commit: 5c6e80752523a031dfdd845b35d57b68017cd471
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=5c6e80752523a0…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Dec 5 15:28:43 2011 +0100
Language of user is now configurable by admin; Added users-saved hook
---
web/htdocs/lib.py | 15 ++++++++
web/htdocs/login.py | 19 +---------
web/htdocs/wato.py | 35 ++++++++++++++++++++
web/plugins/views/nagvis.py | 76 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 128 insertions(+), 17 deletions(-)
diff --git a/web/htdocs/lib.py b/web/htdocs/lib.py
index 688470a..92bd4e9 100644
--- a/web/htdocs/lib.py
+++ b/web/htdocs/lib.py
@@ -117,6 +117,21 @@ def load_web_plugins(forwhat, globalvars):
if fn.endswith(".py"):
execfile(local_plugins_path + "/" + fn, globalvars)
+def get_languages():
+ languages = []
+ dirs = [ defaults.locale_dir ]
+ if defaults.omd_root:
+ dirs.append(defaults.omd_root + "/local/share/check_mk/locale")
+
+ for lang_dir in dirs:
+ try:
+ languages += [ (val, val) for val in os.listdir(lang_dir) if not '.' in val ]
+ except OSError:
+ # Catch "OSError: [Errno 2] No such file or directory:" when directory not exists
+ pass
+
+ return languages
+
def pnp_cleanup(s):
return s \
.replace(' ', '_') \
diff --git a/web/htdocs/login.py b/web/htdocs/login.py
index a8b1185..629dbc5 100644
--- a/web/htdocs/login.py
+++ b/web/htdocs/login.py
@@ -248,21 +248,6 @@ def page_logout():
html.set_http_header('Location', defaults.url_prefix + 'check_mk/')
raise apache.SERVER_RETURN, apache.HTTP_MOVED_TEMPORARILY
-def get_languages():
- languages = []
- dirs = [ defaults.locale_dir ]
- if defaults.omd_root:
- dirs.append(defaults.omd_root + "/local/share/check_mk/locale")
-
- for lang_dir in dirs:
- try:
- languages += [ (val, val) for val in os.listdir(lang_dir) if not '.' in val ]
- except OSError:
- # Catch "OSError: [Errno 2] No such file or directory:" when directory not exists
- pass
-
- return languages
-
def page_edit_profile():
html.header(_("Edit user profile"))
@@ -282,7 +267,7 @@ def page_edit_profile():
#
if config.may('edit_profile'):
# Set the users language if requested
- language = html.var('lang')
+ language = html.var('language')
if language and language != config.get_language():
# Set custom language
users[config.user_id]['language'] = language
@@ -332,7 +317,7 @@ def page_edit_profile():
html.write("</td><td class=content>")
default_label = _('Default (%s)') % config.default_language
languages = [ ('', default_label) ] + languages
- html.select("lang", languages, config.get_language(default_label))
+ html.select("language", languages, config.get_language(default_label))
html.set_focus("lang")
html.write("</td></tr>")
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index fd51453..ffab9ae 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -7223,6 +7223,14 @@ def mode_edit_user(phase):
# Roles
new_user["roles"] = filter(lambda role: html.get_checkbox("role_" + role),
roles.keys())
+
+ # Language configuration
+ language = html.var('language')
+ if language and language != config.default_language:
+ new_user['language'] = language
+ elif not language and 'language' in new_user:
+ del new_user['language']
+
# Contact groups
cgs = []
for c in contact_groups:
@@ -7427,6 +7435,18 @@ def mode_edit_user(phase):
html.write("</ul>")
html.write("</td></tr>")
+ languages = get_languages()
+ if languages:
+ html.write("<tr><td class=legend>")
+ html.write(_("Language") + _('<br><i>Configure the default language '
+ 'to be used in the multisite GUI.</i>'))
+ html.write("</td><td class=content>")
+ default_label = _('Default (%s)') % config.default_language
+ languages = [ ('', default_label) ] + languages
+ html.select("language", languages, config.get_language(default_label))
+ html.write("</td></tr>")
+
+
# TODO: Later we could add custom macros here, which
# then could be used for notifications. On the other hand,
# if we implement some check_mk --notify, we could directly
@@ -7588,6 +7608,15 @@ def save_users(profiles):
elif os.path.exists(auth_file):
os.remove(auth_file)
+ # Call the users_saved hook
+ try:
+ call_hook_users_saved()
+ except Exception, e:
+ if config.debug:
+ raise
+ else:
+ raise MKUserError(None, "Error executing hooks: %s" % str(e))
+
#.
# .-Roles----------------------------------------------------------------.
# | ____ _ |
@@ -9832,6 +9861,12 @@ def call_hook_activate_changes():
if hook_registered('activate-changes'):
call_hooks("activate-changes", collect_hosts(g_root_folder))
+# This hook is executed when the save_users() function is called
+def call_hook_users_saved():
+ if hook_registered('users-saved'):
+ call_hooks("users-saved")
+
+
#.
# .-Helpers--------------------------------------------------------------.
# | _ _ _ |
diff --git a/web/plugins/views/nagvis.py b/web/plugins/views/nagvis.py
new file mode 100644
index 0000000..d001fb7
--- /dev/null
+++ b/web/plugins/views/nagvis.py
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# Vorgehen:
+#
+# Es gibt eine Sektion mit NagVis spezifischen Berechtigungen. Die meißten NagVis
+# internen Rechte wirken implizit.
+#
+# Im Multisite gibt es zwei Wege Nutzer zu berechtigen. Zunächst können pro Rolle
+# die allgemeinen Rechte gesetzt werden. Das ist z.B. Full Access auf alles.
+#
+# Dann gibt es noch die Berechtigungen, die sich auf die WATO Folder Maps beziehen.
+# Wir nehmn dazu einfach die Berechtigungen, die eh schon auf dem Folder liegen.
+# Im Folder sind die Contactgroups definiert. Aus diesen wird dann die Berechtigung
+# auf dem Folder abgeleitet.
+#
+# Auf WATO Ebene bedeutet die Zuordnung eine Contactgroup, dass diese Nutzer die
+# Hosts via WATO editieren können. Also kann man daraus auch ableten, dass diese
+# Nutzer die Maps in diesem Folder editieren dürfen.
+#
+# Wie werden die Anzeige-Berechtigungen geregelt?
+
+config.declare_permission_section('nagvis', _('NagVis'))
+
+config.declare_permission(
+ 'nagvis.*_*_*',
+ _('Full access'),
+ _('This permission grants full access to NagVis.'),
+ [ 'admin' ]
+)
+
+config.declare_permission(
+ 'nagvis.Map_view_*',
+ _('View all maps'),
+ _('Grants read access to all maps.'),
+ [ 'guest' ]
+)
+
+config.declare_permission(
+ 'nagvis.Map_edit_*',
+ _('Edit all maps'),
+ _('Grants modify access to all maps.'),
+ []
+)
+
+config.declare_permission(
+ 'nagvis.Map_delete_*',
+ _('Delete all maps'),
+ _('Permits to delete all maps.'),
+ []
+)
+
+# FIXME: Weitere permissions ergänzen