Просмотр исходного кода

better fix for nrpe_user patch earlier

Bryan Heden 8 лет назад
Родитель
Сommit
37daf739ca
1 измененных файлов с 20 добавлено и 13 удалено
  1. 20 13
      src/utils.c

+ 20 - 13
src/utils.c

@@ -326,28 +326,35 @@ int clean_environ(const char *keep_env_vars, const char *nrpe_user)
 	free(keep);
 	free(kept);
 
-	setenv("PATH", path, 1);
-	setenv("IFS", " \t\n", 1);
 
-	if (nrpe_user != NULL) {
-		
-		setenv("LOGNAME", nrpe_user, 0);
-		setenv("USER", nrpe_user, 0);
+	char * user = NULL;
 
+	if (nrpe_user != NULL) {
+		user = strdup(nrpe_user);
 		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;
+	}
+
+	if (nrpe_user == NULL || pw == NULL) {
+		pw = (struct passwd *)getpwuid(getuid());
+		if (pw != NULL) {
+			user = strdup(pw->pw_name);
 		}
 	}
+	
+	if (pw == NULL) {
+		free(user);
+		return OK;
+	}
 
+	setenv("PATH", path, 1);
+	setenv("IFS", " \t\n", 1);
+	setenv("LOGNAME", user, 0);
+	setenv("USER", user, 0);
 	setenv("HOME", pw->pw_dir, 0);
 	setenv("SHELL", pw->pw_shell, 0);
 
+	free(user);
+
 	return OK;
 }