1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-06-11 02:25:36 +00:00
community.general/plugins
Alexei Znamensky 49ca175f01
htpasswd: fix hash_scheme aliases and Apache-compatible bcrypt (#12123)
* fix(htpasswd): support HtpasswdFile aliases and Apache-compatible bcrypt

CryptContext does not recognise HtpasswdFile alias names such as
portable, portable_apache_24, host_apache_24, causing a KeyError.
In addition, building a CryptContext for bcrypt produced $2b$ hashes
that Apache rejects (it only accepts $2y$/$2a$).

Use htpasswd_context for schemes it already supports, fall back to
htpasswd_context on KeyError for aliases, and import CryptContext
from module_utils/_crypt.py instead of passlib directly.

Fixes #6135

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(changelog): add fragment for PR 12123

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(_crypt): silence DeprecationWarning when importing stdlib crypt

On Python 3.11/3.12, `import crypt` emits a DeprecationWarning that
ansible-test sanity --test import treats as an error. Suppress it since
the import is an intentional fallback when passlib is not available.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(htpasswd): fix sanity ignores and bcrypt version constraint

- Revert _crypt.py DeprecationWarning suppression; add sanity ignore
  entries for htpasswd.py import-3.11/3.12 instead (mirrors existing
  entries for _crypt.py itself)
- Pin bcrypt<4.2 in integration tests: bcrypt 4.2 removed __about__
  which passlib 1.7.x uses, breaking passlib.apache import
- Fix regex_search assertion to use 'is not none' for a boolean result
- Add bcrypt version constraint note to module documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(htpasswd): handle system-installed bcrypt in integration tests

On Debian/Ubuntu, bcrypt may be installed by the system package manager
with no RECORD file, making pip downgrade impossible. Move bcrypt
installation into a self-contained block in test_schemes.yml with
ignore_errors, a functional passlib+bcrypt check, and always-cleanup.
Bcrypt tests are skipped when a compatible version cannot be used.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(htpasswd): extract obtain_crypt_context(); import CryptContext from passlib directly

Extract context selection logic into obtain_crypt_context(). Import
CryptContext inside the deps.declare("passlib") block instead of from
module_utils/_crypt.py — passlib is already a hard dependency and
other symbols are imported from it there. Remove now-unnecessary
htpasswd.py sanity import ignore entries.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 22:01:51 +12:00
..
action iptables_state: clean up code (#12093) 2026-05-25 14:58:55 +02:00
become pfexec become plugin: fix broken defaults for illumos/SmartOS (#11623) 2026-04-25 21:12:36 +02:00
cache Sort imports with ruff check --fix (#11400) 2026-01-09 07:40:58 +01:00
callback unixy callback: fix KeyError when task is delegated to host without ansible_host set (#12113) 2026-05-30 20:02:20 +02:00
connection saltstack connection plugin: add documentation (#11992) 2026-05-07 07:36:47 +12:00
doc_fragments kopia: Add kopia_repository module (#11752) 2026-05-30 13:38:30 +02:00
filter Add from_toml filter (#12081) (#12081) 2026-05-30 13:36:38 +02:00
inventory multiple: replace namedtuple with dataclass (#12094) 2026-05-25 15:50:34 +02:00
lookup consul_kv: add empty_value option for null Consul values (#12120) 2026-05-31 20:48:48 +12:00
module_utils xenserver_guest_info: add VDI uuid and vdi_type to disk info (#12119) 2026-05-30 19:43:30 +02:00
modules htpasswd: fix hash_scheme aliases and Apache-compatible bcrypt (#12123) 2026-05-31 22:01:51 +12:00
plugin_utils Lookup plugins: prevent using _terms for positional arguments, and reject positional arguments completely for lookups that don't use them (#12060) 2026-05-17 09:43:21 +02:00
test Make all doc fragments, module utils, and plugin utils private (#11896) 2026-04-20 20:16:26 +02:00