gitpython-developers/GitPython — Issue #39: os.getlogin() - Inappropriate ioctl for device (mod_wsgi)
Author: gvalkov
Created: 2011-11-30 12:33:43+00:00
State: open

Using gitpython from within a mod_wsgi web app results in the following exception when trying to commit:

```python
File "...GitPython-0.3.2.RC1-py2.6.egg/git/index/base.py", line 887, in commit
return Commit.create_from_tree(self.repo, tree, message, parent_commits, head)
File "...GitPython-0.3.2.RC1-py2.6.egg/git/objects/commit.py", line 302, in create_from_tree
committer = Actor.committer(cr)
File "...GitPython-0.3.2.RC1-py2.6.egg/git/util.py", line 354, in committer
return cls._main_actor(cls.env_committer_name, cls.env_committer_email, config_reader)
File "...GitPython-0.3.2.RC1-py2.6.egg/git/util.py", line 327, in _main_actor
default_email = get_user_id()
File "...GitPython-0.3.2.RC1-py2.6.egg/git/util.py", line 120, in get_user_id
username = os.getlogin()
OSError: [Errno 25] Inappropriate ioctl for device
```

A possible explanation might be that since apache/mod_wsgi are not started by a login shell, no call to `setlogin()` has been made (in order for [`getlogin()`](http://www.daemon-systems.org/man/getlogin.2.html) to succeed a previous call to `setlogin()` must have been made). Perhaps the problem is in mod_wsgi running in daemon mode. Either way, a more robust [`get_user_id()`](https://github.com/gitpython-developers/GitPython/blob/master/git/util.py#L145) function would be nice.

A non-portable solution:

```python
120: username = pwd.getpwuid(os.getuid()).pw_name
```

These could also be helpful:
http://defect.opensolaris.org/bz/show_bug.cgi?id=3595
http://www.agmweb.ca/blog/andy/2172/ (comment by Graham Dumpleton)