Skip to content

os.getlogin() fails with OSError: [Errno 34] for usernames > 9 characters #135497

Closed
@alebcay

Description

@alebcay

Bug report

Bug description:

import os
print(os.getlogin())
$ python3 -c "import os; print(os.getlogin())"

Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import os; print(os.getlogin())
                     ~~~~~~~~~~~^^
OSError: [Errno -34] Unknown error: -34

It appears that if Python is compiled in an environment without HAVE_MAXLOGNAME but with HAVE_UT_NAMESIZE, getlogin_r will return error 34 if username is >9 characters.

This appears to be a regression introduced in #132751:

https://github.com/duaneg/cpython/blob/675342cf59ffe53337d92af989b97dad687a10ea/configure.ac#L5434

The correct header file to search for is sys/param.h, not sys/params.h. As a result, HAVE_UT_NAMESIZE is satisfied (via utmp.h) but HAVE_MAXLOGNAME is not.

This was originally reported to Homebrew via Homebrew/homebrew-core#226857.

CPython versions tested on:

3.15

Operating systems tested on:

macOS

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    extension-modulesC modules in the Modules dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions