From f362d10fa24395c21b1629923ccd705ba73ae996 Mon Sep 17 00:00:00 2001
From: Sebastian Wallat <sebastian@wallat.de>
Date: Thu, 2 Feb 2012 16:42:54 +0100
Subject: [PATCH] Fixed 'Inappropriate ioctl for device' problem on posix
 systems

---
 git/util.py | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/git/util.py b/git/util.py
index 0e7e4cbaa..79c6008fe 100644
--- a/git/util.py
+++ b/git/util.py
@@ -20,7 +20,9 @@
 					SlidingWindowMapManager,
 					SlidingWindowMapBuffer
 				)
-
+# Import the user database on unix based systems
+if os.name == "posix":
+    import pwd
 
 
 __all__ = ( "stream_copy", "join_path", "to_native_path_windows", "to_native_path_linux", 
@@ -144,12 +146,17 @@ def __getslice__(self, start, end):
 
 def get_user_id():
 	""":return: string identifying the currently active system user as name@node
-	:note: user can be set with the 'USER' environment variable, usually set on windows"""
-	ukn = 'UNKNOWN'
-	username = os.environ.get('USER', os.environ.get('USERNAME', ukn))
-	if username == ukn and hasattr(os, 'getlogin'):
-		username = os.getlogin()
-	# END get username from login
+	:note: user can be set with the 'USER' environment variable, usually set on windows
+	:note: on unix based systems you can use the password database
+	to get the login name of the effective process user"""
+        if os.name == "posix":
+                username = pwd.getpwuid(os.geteuid()).pw_name
+        else:
+	        ukn = 'UNKNOWN'
+	        username = os.environ.get('USER', os.environ.get('USERNAME', ukn))
+	        if username == ukn and hasattr(os, 'getlogin'):
+		        username = os.getlogin()
+	        # END get username from login
 	return "%s@%s" % (username, platform.node())
 
 def is_git_dir(d):