|
|
@@ -93,6 +93,19 @@ np_arg_list* np_get_defaults(const char *locator, const char *default_section){
|
|
|
np_arg_list *defaults=NULL;
|
|
|
np_ini_info i;
|
|
|
struct stat fstat;
|
|
|
+ uid_t euid = -1;
|
|
|
+ uid_t egid = -1;
|
|
|
+ bool is_uid_set = false;
|
|
|
+
|
|
|
+ if (getuid() != getuid()) {
|
|
|
+ is_uid_set = true;
|
|
|
+ euid = geteuid();
|
|
|
+ egid = getegid();
|
|
|
+ if (seteuid(getuid()) != 0)
|
|
|
+ die(STATE_UNKNOWN, "%s %s\n", _("Can't drop user permissions."), strerror(errno));
|
|
|
+ if (setegid(getgid()) != 0)
|
|
|
+ die(STATE_UNKNOWN, "%s %s\n", _("Can't drop group permissions."), strerror(errno));
|
|
|
+ }
|
|
|
|
|
|
parse_locator(locator, default_section, &i);
|
|
|
/* If a file was specified or if we're using the default file. */
|
|
|
@@ -123,6 +136,14 @@ np_arg_list* np_get_defaults(const char *locator, const char *default_section){
|
|
|
|
|
|
if (i.file != NULL) free(i.file);
|
|
|
free(i.stanza);
|
|
|
+
|
|
|
+ if (is_uid_set == true) {
|
|
|
+ if (seteuid(euid) != 0)
|
|
|
+ die(STATE_UNKNOWN, "%s %s\n", _("Can't restore user id."), strerror(errno));
|
|
|
+ if (setegid(egid) != 0)
|
|
|
+ die(STATE_UNKNOWN, "%s %s\n", _("Can't restore group id."), strerror(errno));
|
|
|
+ }
|
|
|
+
|
|
|
return defaults;
|
|
|
}
|
|
|
|