From 48025ff39c3a78b7805bf803ac96730cef53e15c Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Wed, 18 Jun 2014 23:22:12 +0200 Subject: lib/parse_ini.c: Drop privileges for reading file Read the configuration file with privileges temporarily dropped if the code is used by a setuid plugin. diff --git a/lib/parse_ini.c b/lib/parse_ini.c index 447bd45..86b94e7 100644 --- a/lib/parse_ini.c +++ b/lib/parse_ini.c @@ -22,6 +22,7 @@ *****************************************************************************/ #include "common.h" +#include "idpriv.h" #include "utils_base.h" #include "parse_ini.h" @@ -118,6 +119,11 @@ np_get_defaults(const char *locator, const char *default_section) FILE *inifile = NULL; np_arg_list *defaults = NULL; np_ini_info i; + int is_suid_plugin = mp_suid(); + + if (is_suid_plugin && idpriv_temp_drop() == -1) + die(STATE_UNKNOWN, _("Cannot drop privileges: %s\n"), + strerror(errno)); parse_locator(locator, default_section, &i); inifile = strcmp(i.file, "-") == 0 ? stdin : fopen(i.file, "r"); @@ -133,6 +139,10 @@ np_get_defaults(const char *locator, const char *default_section) if (inifile != stdin) fclose(inifile); free(i.stanza); + if (is_suid_plugin && idpriv_temp_restore() == -1) + die(STATE_UNKNOWN, _("Cannot restore privileges: %s\n"), + strerror(errno)); + return defaults; } -- cgit v0.10-9-g596f