Browse Source

Use USER and LOGNAME for logging

Serj Kalichev 9 years ago
parent
commit
af7dff9d3f
1 changed files with 12 additions and 4 deletions
  1. 12 4
      clish/callback_log.c

+ 12 - 4
clish/callback_log.c

@@ -6,6 +6,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <syslog.h>
+#include <unistd.h>
 #include <sys/types.h>
 #include <pwd.h>
 
@@ -19,7 +20,7 @@ int clish_log_callback(clish_context_t *context, const char *line,
 {
 	clish_shell_t *this = context->shell;
 	struct passwd *user = NULL;
-	char *uname = "unknown";
+	char *uname = NULL;
 
 	/* Initialization */
 	if (!line) {
@@ -29,9 +30,16 @@ int clish_log_callback(clish_context_t *context, const char *line,
 	}
 
 	/* Log the given line */
-	if ((user = clish_shell__get_user(this)))
-		uname = user->pw_name;
-	syslog(LOG_INFO, "(%s) %s : %d", uname, line, retcode);
+	/* Try to get username from environment variables
+	 * USER and LOGNAME and then from /etc/passwd.
+	 */
+	user = clish_shell__get_user(this);
+	if (!(uname = getenv("USER"))) {
+		if (!(uname = getenv("LOGNAME")))
+			uname = user ? user->pw_name : "unknown";
+	}
+	syslog(LOG_INFO, "%u(%s) %s : %d",
+		user ? user->pw_uid : getuid(), uname, line, retcode);
 
 	return 0;
 }