|
|
@@ -318,17 +318,24 @@ int clean_environ(const char *keep_env_vars, const char *nrpe_user)
|
|
|
free(keep);
|
|
|
free(kept);
|
|
|
|
|
|
- pw = (struct passwd *)getpwnam(nrpe_user);
|
|
|
- if (pw == NULL)
|
|
|
- return OK;
|
|
|
-
|
|
|
setenv("PATH", path, 1);
|
|
|
setenv("IFS", " \t\n", 1);
|
|
|
- setenv("HOME", pw->pw_dir, 0);
|
|
|
- setenv("SHELL", pw->pw_shell, 0);
|
|
|
setenv("LOGNAME", nrpe_user, 0);
|
|
|
setenv("USER", nrpe_user, 0);
|
|
|
|
|
|
+ pw = (struct passwd *)getpwnam(nrpe_user);
|
|
|
+ if (pw == NULL) {
|
|
|
+ char *end = NULL;
|
|
|
+ uid_t uid = strtol(nrpe_user, &end, 10);
|
|
|
+ if (uid > 0)
|
|
|
+ pw = (struct passwd *)getpwuid(uid);
|
|
|
+ if (pw == NULL || *end != '\0')
|
|
|
+ return OK;
|
|
|
+ }
|
|
|
+
|
|
|
+ setenv("HOME", pw->pw_dir, 0);
|
|
|
+ setenv("SHELL", pw->pw_shell, 0);
|
|
|
+
|
|
|
return OK;
|
|
|
}
|
|
|
|