From eb85a612a3321c57efbd672f8b11bfefbc659876 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Sat, 21 Jun 2014 15:15:44 +0200 Subject: Add UID to state retention file path Add the UID of the invoking user to the state retention file path. This helps solving permission issues when different users run the same plugin. --- lib/utils_base.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/utils_base.c') diff --git a/lib/utils_base.c b/lib/utils_base.c index 04c4b4f9..55d35fdd 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c @@ -489,7 +489,9 @@ void np_enable_state(char *keyname, int expected_data_version) { this_state->state_data=NULL; /* Calculate filename */ - asprintf(&temp_filename, "%s/%s/%s", _np_state_calculate_location_prefix(), this_monitoring_plugin->plugin_name, this_state->name); + asprintf(&temp_filename, "%s/%lu/%s/%s", + _np_state_calculate_location_prefix(), (unsigned long)geteuid(), + this_monitoring_plugin->plugin_name, this_state->name); this_state->_filename=temp_filename; this_monitoring_plugin->state = this_state; -- cgit v1.2.3-74-g34f1 From ba21e26443385dd283d08e0419ff6ff25fedd0e8 Mon Sep 17 00:00:00 2001 From: Jan Wagner Date: Sun, 6 Jul 2014 12:58:04 +0200 Subject: check_icmp/check_dhcp: disable check, if we are root As it is possible to use capabilities(7) on linux or solaris privileges for example, it is not necessary in all cases to have those binaries making use of setuid. --- lib/utils_base.c | 13 ------------- lib/utils_base.h | 3 --- plugins-root/check_dhcp.c | 3 --- plugins-root/check_icmp.c | 3 --- 4 files changed, 22 deletions(-) (limited to 'lib/utils_base.c') diff --git a/lib/utils_base.c b/lib/utils_base.c index 55d35fdd..addf26bd 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c @@ -300,19 +300,6 @@ char *np_escaped_string (const char *string) { int np_check_if_root(void) { return (geteuid() == 0); } -int np_warn_if_not_root(void) { - int status = np_check_if_root(); - if(!status) { - printf(_("Warning: ")); - printf(_("This plugin must be either run as root or setuid root.\n")); - printf(_("To run as root, you can use a tool like sudo.\n")); - printf(_("To set the setuid permissions, use the command:\n")); - /* XXX could we use something like progname? */ - printf("\tchmod u+s yourpluginfile\n"); - } - return status; -} - /* * Extract the value from key/value pairs, or return NULL. The value returned * can be free()ed. diff --git a/lib/utils_base.h b/lib/utils_base.h index d69b0da1..42ae0c09 100644 --- a/lib/utils_base.h +++ b/lib/utils_base.h @@ -75,9 +75,6 @@ void die (int, const char *, ...) __attribute__((noreturn,format(printf, 2, 3))) /* a simple check to see if we're running as root. * returns zero on failure, nonzero on success */ int np_check_if_root(void); -/* and a helpful wrapper around that. it returns the same status - * code from the above function, in case it's helpful for testing */ -int np_warn_if_not_root(void); /* mp_suid() returns true if the real and effective uids differs, such as when * running a suid plugin */ diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c index b69a10da..b874c555 100644 --- a/plugins-root/check_dhcp.c +++ b/plugins-root/check_dhcp.c @@ -270,9 +270,6 @@ int main(int argc, char **argv){ usage4 (_("Could not parse arguments")); } - /* this plugin almost certainly needs root permissions. */ - np_warn_if_not_root(); - /* create socket for DHCP communications */ dhcp_socket=create_dhcp_socket(); diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 4b4197d8..8b563e40 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -383,9 +383,6 @@ main(int argc, char **argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); - /* print a helpful error message if geteuid != 0 */ - np_warn_if_not_root(); - /* we only need to be setsuid when we get the sockets, so do * that before pointer magic (esp. on network data) */ icmp_sockerrno = udp_sockerrno = tcp_sockerrno = sockets = 0; -- cgit v1.2.3-74-g34f1