* Make all doc fragments private.
* Make all plugin utils private.
* Make all module utils private.
* Reformat.
* Changelog fragment.
* Update configs and ignores.
* Adjust unit test names.
* udm_user - replace crypt/legacycrypt with passlib
The stdlib crypt module was removed in Python 3.13. Replace the
crypt/legacycrypt import chain with passlib (already used elsewhere
in the collection) and use CryptContext.verify() for password
comparison.
Fixes#4690
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add changelog fragment for PR 11860
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* remove redundant ignore file entries
* udm_user, homectl - replace crypt/legacycrypt with _crypt module utils
Add a new _crypt module_utils that abstracts password hashing and
verification. It uses passlib when available, falling back to the
stdlib crypt or legacycrypt, and raises ImportError if none of them
can be imported. Both udm_user and homectl now use this shared
utility, fixing compatibility with Python 3.13+.
Fixes#4690
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add BOTMETA entry for _crypt module utils
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* _crypt - fix mypy errors and handle complete unavailability
Replace CryptContext = object fallback (rejected by mypy) with a
proper dummy class definition. Add has_crypt_context flag so modules
can detect when no backend is available. Update both modules to
import and check has_crypt_context instead of testing for None.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* adjsutments from review
* Update plugins/modules/homectl.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Update plugins/modules/udm_user.py
Co-authored-by: Felix Fontein <felix@fontein.de>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>