python-pam 2.1.0 — Poetry packaging, thread-safe authenticate, and refreshed tooling.
Features & changes
Switch to Poetry; drop Python 2 support
Make PAM handle checks more robust
Update documentation with a better example
CI tox suite covers Python 3.11–3.14
pam.authenticate() no longer reuses a process-global PamAuthenticator (thread-safe concurrent auth); libpam ctypes bindings are loaded once and shared (#40)
Document the threading model (do not share one PamAuthenticator across threads)
Document when to use resetcreds=True vs False (#52)
Tooling
Bump pip to 26.2.1 (CVE-2026-13346 / GHSA-qwm4-qh6w-59xr)
Refresh tox, pylint, mypy, pytest-env, and pip-tools pins
fix #40: pam.authenticate() no longer reuses a process-global
PamAuthenticator (thread-safe concurrent auth); libpam ctypes bindings
are loaded once and shared for performance
document threading model (do not share one PamAuthenticator across threads)
document when to use resetcreds=True vs False (#52)
bump pip to 26.2.1 (CVE-2026-13346 / GHSA-qwm4-qh6w-59xr)
refresh tox, pylint, mypy, pytest-env, and pip-tools pins
add GitHub Actions trusted publishing for PyPI
Commits
f9c139f Merge pull request #101 from FirefighterBlu3/deps/dev-ci-tools
02f22f4 documentation: note pip CVE and tool bumps
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase will rebase this PR
@dependabot recreate will recreate this PR, overwriting any edits that have been made to it
@dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
@dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps [python-pam](https://github.com/FirefighterBlu3/python-pam) from 2.0.2 to 2.1.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/FirefighterBlu3/python-pam/releases">python-pam's releases</a>.</em></p>
<blockquote>
<h2>2.1.0</h2>
<p>python-pam 2.1.0 — Poetry packaging, thread-safe authenticate, and refreshed tooling.</p>
<h3>Features & changes</h3>
<ul>
<li>Switch to Poetry; drop Python 2 support</li>
<li>Make PAM handle checks more robust</li>
<li>Update documentation with a better example</li>
<li>CI tox suite covers Python 3.11–3.14</li>
<li><code>pam.authenticate()</code> no longer reuses a process-global <code>PamAuthenticator</code> (thread-safe concurrent auth); libpam ctypes bindings are loaded once and shared (<a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/40">#40</a>)</li>
<li>Document the threading model (do not share one <code>PamAuthenticator</code> across threads)</li>
<li>Document when to use <code>resetcreds=True</code> vs <code>False</code> (<a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/52">#52</a>)</li>
</ul>
<h3>Tooling</h3>
<ul>
<li>Bump pip to 26.2.1 (CVE-2026-13346 / GHSA-qwm4-qh6w-59xr)</li>
<li>Refresh tox, pylint, mypy, pytest-env, and pip-tools pins</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/FirefighterBlu3/python-pam/blob/main/ChangeLog.md">python-pam's changelog</a>.</em></p>
<blockquote>
<h2>2.1.0 Latest</h2>
<p>September 16, 2026</p>
<ul>
<li>switch to poetry</li>
<li>merge outstanding PRs</li>
<li>make handle checks and make them more robust</li>
<li>update documentation with better example</li>
<li>remove py2 support</li>
<li>tox test suite set to py312 and py313</li>
<li>fix <a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/40">#40</a>: <code>pam.authenticate()</code> no longer reuses a process-global
<code>PamAuthenticator</code> (thread-safe concurrent auth); libpam ctypes bindings
are loaded once and shared for performance</li>
<li>document threading model (do not share one <code>PamAuthenticator</code> across threads)</li>
<li>document when to use <code>resetcreds=True</code> vs <code>False</code> (<a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/52">#52</a>)</li>
<li>bump pip to 26.2.1 (CVE-2026-13346 / GHSA-qwm4-qh6w-59xr)</li>
<li>refresh tox, pylint, mypy, pytest-env, and pip-tools pins</li>
<li>add GitHub Actions trusted publishing for PyPI</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/f9c139f238c552f10f2759cd598745d24340fb85"><code>f9c139f</code></a> Merge pull request <a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/101">#101</a> from FirefighterBlu3/deps/dev-ci-tools</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/02f22f4a0a2d936c204802ac1b7fb3fd1c83dacb"><code>02f22f4</code></a> documentation: note pip CVE and tool bumps</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/8d72ae029bec32e0d8766ca591c4c99bd7d86f8e"><code>8d72ae0</code></a> deps: raise pip and refresh tool pins</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/3b878f101dc68e0dbc0f722faa386ce7648cd3df"><code>3b878f1</code></a> Merge pull request <a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/72">#72</a> from FirefighterBlu3/docs/resetcreds-readme</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/20c61d3cef60ba542823b2bd8282fb67310f2912"><code>20c61d3</code></a> docs: explain resetcreds default vs password-check-only use</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/7affefe781fe8750eeeb9050b4a00559755c3443"><code>7affefe</code></a> Merge pull request <a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/71">#71</a> from FirefighterBlu3/fix/40-thread-safe-authenticate</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/bc05e9dd3dcac33417aa6ce2bf01271e3c9756d7"><code>bc05e9d</code></a> fix: restore pylint score for runtime ctypes bindings</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/f09faf15ee4fface7191c890ddaf3107b5c47dc8"><code>f09faf1</code></a> fix: make pam.authenticate() safe under concurrent threads</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/1eacf1546989a842f48a4c309c98f46e55167150"><code>1eacf15</code></a> Merge pull request <a href="https://redirect.github.com/FirefighterBlu3/python-pam/issues/70">#70</a> from FirefighterBlu3/dependabot/pip/dot-github/pip-26.1.2</li>
<li><a href="https://github.com/FirefighterBlu3/python-pam/commit/c51f9e501e70ee12408b65a86da7ee05c7acc9fc"><code>c51f9e5</code></a> Bump pip from 25.0.1 to 26.1.2 in /.github</li>
<li>Additional commits viewable in <a href="https://github.com/FirefighterBlu3/python-pam/compare/v2.0.2...v2.1.0">compare view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
</details>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Bumps python-pam from 2.0.2 to 2.1.0.
Release notes
Sourced from python-pam's releases.
Changelog
Sourced from python-pam's changelog.
Commits
f9c139fMerge pull request #101 from FirefighterBlu3/deps/dev-ci-tools02f22f4documentation: note pip CVE and tool bumps8d72ae0deps: raise pip and refresh tool pins3b878f1Merge pull request #72 from FirefighterBlu3/docs/resetcreds-readme20c61d3docs: explain resetcreds default vs password-check-only use7affefeMerge pull request #71 from FirefighterBlu3/fix/40-thread-safe-authenticatebc05e9dfix: restore pylint score for runtime ctypes bindingsf09faf1fix: make pam.authenticate() safe under concurrent threads1eacf15Merge pull request #70 from FirefighterBlu3/dependabot/pip/dot-github/pip-26.1.2c51f9e5Bump pip from 25.0.1 to 26.1.2 in /.githubDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)