posix_getlogin():  Handle the possibility that getlogin() can return
                   NULL without setting errno; observed on Linux
                   Mandrake 7.2 by an anonymous user.

This closes bug #124758.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index a2251b1..2ddcebc 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1904,12 +1904,21 @@
     PyObject *result = NULL;
 
     if (PyArg_ParseTuple(args, ":getlogin")) {
-        char *name = getlogin();
+        char *name;
+        int old_errno = errno;
 
-        if (name == NULL)
-            posix_error();
+        errno = 0;
+        name = getlogin();
+        if (name == NULL) {
+            if (errno)
+                posix_error();
+            else
+                PyErr_SetString(PyExc_OSError,
+                                "unexpected NULL from getlogin()");
+        }
         else
             result = PyString_FromString(name);
+        errno = old_errno;
     }
     return result;
 }