Skip to content

Conversation

@ikerexxe
Copy link
Collaborator

Link: #999

@ikerexxe ikerexxe force-pushed the remove-logoutd branch 2 times, most recently from 8e939db to c8f8aed Compare August 25, 2025 08:36
@ikerexxe ikerexxe marked this pull request as ready for review August 25, 2025 08:45
Link: <shadow-maint#999>
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
@alejandro-colomar
Copy link
Collaborator

alejandro-colomar commented Aug 25, 2025

Are there 0 users of this program?

@ikerexxe
Copy link
Collaborator Author

AFAIK, neither Debian nor Fedora or openSUSE provide this binary. So, yeah, I'd say nobody out there is using this binary.

Copy link
Collaborator

@alejandro-colomar alejandro-colomar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! LGTM then.

Reviewed-by: Alejandro Colomar <alx@kernel.org>

CC: @thesamesam , @Karlson2k , just in case Gentoo has anything to say.

@ikerexxe
Copy link
Collaborator Author

Curious. I thought we had discussed this topic and decided to deprecate this utility and announced it in a release. I don't see any release announcement, so I'm fine with announcing the deprecation in the upcoming release and postponing the removal until the next one.

@hallyn
Copy link
Member

hallyn commented Sep 10, 2025

@ikerexxe how should we announce it?

Putting it into the git log is probably the only way that I would remember to put it into release notes. So perhaps you should open a PR creating an API.md or DEPRECATIONS.md or something, put a dated note in there with a meaningful subject line on the git commit entry, and then the git shortlog will automatically put that into the release notes?

@ikerexxe
Copy link
Collaborator Author

@ikerexxe how should we announce it?

In the release notes.

Putting it into the git log is probably the only way that I would remember to put it into release notes. So perhaps you should open a PR creating an API.md or DEPRECATIONS.md or something, put a dated note in there with a meaningful subject line on the git commit entry, and then the git shortlog will automatically put that into the release notes?

I don't like this approach. When Alejandro opens the issue to create the new release I'll try to write this topic there.

@alejandro-colomar
Copy link
Collaborator

@ikerexxe how should we announce it?

In the release notes.

Putting it into the git log is probably the only way that I would remember to put it into release notes. So perhaps you should open a PR creating an API.md or DEPRECATIONS.md or something, put a dated note in there with a meaningful subject line on the git commit entry, and then the git shortlog will automatically put that into the release notes?

I don't like this approach. When Alejandro opens the issue to create the new release I'll try to write this topic there.

I've opened the release ticket. Feel free to add the deprecation notices there.

@zeha
Copy link
Contributor

zeha commented Sep 16, 2025

Should this also remove various references to (/etc/)porttime?

@zeha
Copy link
Contributor

zeha commented Sep 16, 2025

Should this also remove various references to (/etc/)porttime?

Doesn't seem super clear, maybe porttime and co wants to go away in a release after logoutd is removed.

@ikerexxe
Copy link
Collaborator Author

I wasn't aware of /etc/porttime, but from what I can see it isn't distributed in major distributions. I've added the deprecation to 4.19 Release plan (H).

What is this co that you mention? Any file I can check? If we aren't using it anywhere we should also remove it.

@zeha
Copy link
Contributor

zeha commented Sep 17, 2025

What is this co that you mention? Any file I can check? If we aren't using it anywhere we should also remove it.

Specifically I was refering to isttytime and port.[ch]. My understanding there is not complete, please check it.

@ikerexxe
Copy link
Collaborator Author

Those things that you mentioned are part of shadow's internal library and being used by other binaries apart from logoutd, so I think we'll keep using them (at least for the moment)

@alejandro-colomar
Copy link
Collaborator

This PR needs a rebase. :)

@alejandro-colomar alejandro-colomar marked this pull request as draft December 6, 2025 12:29
@ikerexxe
Copy link
Collaborator Author

ikerexxe commented Dec 9, 2025

Yes, but I don't think it's worth doing it before releasing 4.19. The removal will happen in 4.20 or later.

@alejandro-colomar
Copy link
Collaborator

Yes, but I don't think it's worth doing it before releasing 4.19. The removal will happen in 4.20 or later.

I'd like to merge it right after the release. That would remove it in 4.20, and we'd avoid applying any refactors to it during the development of 4.20.

alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
-  Some user names and group names are too dangerous and are rejected,
   even with --badname.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  Password aging
	The ability to periodically expire passwords is detrimental to
	safety, and will be removed eventually.  See also:
	<shadow-maint#1432>
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	Because removing all of these suddently would be too disruptive
	(mainly, because of contracts in regulated environments, with
	 contracts that enforce outdated policies), we'll continue
	providing most of these features for a relatively long time.
	However, you should consider not using them, and if it doesn't
	depend on you, you should consider contacting whoever is
	responsible for it.  We'll eventually and gradually remove them.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
-  Some user names and group names are too dangerous and are rejected,
   even with --badname.

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  DES, MD5
	These hashing algorithms have been deprecated for a long time,
	and support for them will be removed in a future release.

-  Password aging
	The ability to periodically expire passwords is detrimental to
	safety, and will be removed eventually.  See also:
	<shadow-maint#1432>
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	Because removing all of these suddently would be too disruptive
	(mainly, because of contracts in regulated environments, with
	 contracts that enforce outdated policies), we'll continue
	providing most of these features for a relatively long time.
	However, you should consider not using them, and if it doesn't
	depend on you, you should consider contacting whoever is
	responsible for it.  We'll eventually and gradually remove them.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
-  Some user names and group names are too dangerous and are rejected,
   even with --badname.

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  Password aging
	The ability to periodically expire passwords is detrimental to
	safety, and will be removed eventually.  See also:
	<shadow-maint#1432>
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	Because removing all of these suddently would be too disruptive
	(mainly, because of contracts in regulated environments, with
	 contracts that enforce outdated policies), we'll continue
	providing most of these features for a relatively long time.
	However, you should consider not using them, and if it doesn't
	depend on you, you should consider contacting whoever is
	responsible for it.  We'll eventually and gradually remove them.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
-  Some user names and group names are too dangerous and are rejected,
   even with --badname.

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  Password aging
	Security research shows that periodic password expiration leads
	to predictable password patterns, and that even in a theoretical
	scenario where that wouldn't happen the gains in security are
	mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  Password aging
	Security research shows that periodic password expiration leads
	to predictable password patterns, and that even in a theoretical
	scenario where that wouldn't happen the gains in security are
	mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Security research shows that periodic password expiration leads
	to predictable password patterns, and that even in a theoretical
	scenario where that wouldn't happen the gains in security are
	mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 29, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 30, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 30, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 30, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Support:

-  Several years ago, there were talks about deprecating su(1) and
   login(1), back when this project was maintained as part of Debian.
   However, nothing was clearly stated, and there was doubt about the
   status of these programs.  Let's clarify them now.

   Our implementations pf su(1) and login(1) are fully supported, and we
   don't have any plans to remove them.  They are NOT deprecated.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 30, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Support:

-  Several years ago, there were talks about deprecating su(1) and
   login(1), back when this project was maintained as part of Debian.
   However, nothing was clearly stated, and there was doubt about the
   status of these programs.  Let's clarify them now.

   Our implementations pf su(1) and login(1) are fully supported, and we
   don't have any plans to remove them.  They are NOT deprecated.
   See <shadow-maint#464>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 30, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Support:

-  Several years ago, there were talks about deprecating su(1) and
   login(1), back when this project was maintained as part of Debian.
   However, nothing was clearly stated, and there were doubts about the
   status of these programs.  Let's clarify them now.

   Our implementations of su(1) and login(1) are fully supported, and we
   don't have any plans to remove them.  They are NOT deprecated.
   See <shadow-maint#464>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
alejandro-colomar added a commit to alejandro-colomar/shadow that referenced this pull request Dec 30, 2025
Breaking changes:

-  Remove support for escaped newlines in configuration files.
   It never worked correctly.
   b0a7ce5 (2025-12-05; "lib/, po/: Remove fgetsx() and fputsx()")

-  Some user names and group names are too dangerous and are rejected,
   even with --badname.
   25aea74 (2025-12-25; "lib/chkname.c, src/: Strictly disallow really bad names")

Future breaking changes:

-  SHA512 and SHA256 will be supported unconditionally in the next
   release.  The build-time flag '--with-sha-crypt' will be removed.
   See <shadow-maint#1452>.

Support:

-  Several years ago, there were talks about deprecating su(1) and
   login(1), back when this project was maintained as part of Debian.
   However, nothing was clearly stated, and there were doubts about the
   status of these programs.  Let's clarify them now.

   Our implementations of su(1) and login(1) are fully supported, and we
   don't have any plans to remove them.  They are NOT deprecated.
   See <shadow-maint#464>.

Deprecations:

-  groupmems(8)
	The program will be removed in a future release.
	See <shadow-maint#1343>.

-  logoutd(8)
	The program will be removed in the next release.
	See <shadow-maint#999>,
	and <shadow-maint#1344>.

-  DES
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1456>

-  MD5
	This hashing algorithm has been deprecated for a long time,
	and support for it will be removed in a future release.
	See <shadow-maint#1457>

-  login.defs(5): MD_CRYPT_ENAB
	This feature had been deprecated for decades.  It will be
	removed in a future release.
	The command-line equivalents (-m, --md5) of this feature in
	chpasswd(8) and chgpasswd(8) will also be removed in a future
	release.
	See <shadow-maint#1455>.

-  login.defs(5): PASS_MAX_LEN
	This feature is ignored except for DES.  Once DES is removed,
	it makes no sense keeping it.  It may be removed in a future
	release.

-  Password aging
	Scientific research shows that periodic password expiration
	leads to predictable password patterns, and that even in a
	theoretical scenario where that wouldn't happen the gains in
	security are mathematically negligible.
	<https://people.scs.carleton.ca/~paulv/papers/expiration-authorcopy.pdf>

	Modern security standards, such as NIST SP 800-63B-4 in the USA,
	prohibit periodic password expiration.
	<https://pages.nist.gov/800-63-4/sp800-63b.html#passwordver>
	<https://pages.nist.gov/800-63-FAQ/#q-b05>
	<https://www.ncsc.gov.uk/collection/passwords/updating-your-approach#PasswordGuidance:UpdatingYourApproach-Don'tenforceregularpasswordexpiry>

	To align with these, we're deprecating the ability to
	periodically expire passwords.  The specifics and long-term
	roadmap are currently being discussed, and we invite feedback
	from users, particularly from those in regulated environments.
	See <shadow-maint#1432>.

	This deprecation includes the following programs and features:

	expiry(1)
	chage(1):
		-I,--inactive (also the interactive version)
		-m,--mindays (also the interactive version)
		-M,--maxdays (also the interactive version)
		-W,--warndays (also the interactive version)
	passwd(1):
		-k,--keep-tokens
		-n,--mindays
		-x,--maxdays
		-i,--inactive
		-w,--warndays
	useradd(8):
		-f,--inactive
	usermod(8):
		-f,--inactive
	login.defs(5):
		PASS_MIN_DAYS
		PASS_MAX_DAYS
		PASS_WARN_AGE
	/etc/default/useradd:
		INACTIVE
	shadow(5):
		sp_lstchg: Restrict to just the values 0 and empty.
		sp_min
		sp_max
		sp_warn
		sp_inact

	We recognize that many users operate in environments with
	regulatory or contractual requirements that still mandate
	password aging.  To minimize disruption, these features will
	remain functional for a significant period.  However, we
	encourage administrators to review their internal policies,
	talk to their regulators if appropriate, and participate in the
	roadmap discussion linked above.

Co-authored-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
@alejandro-colomar alejandro-colomar marked this pull request as ready for review December 31, 2025 23:41
@alejandro-colomar
Copy link
Collaborator

If you rebase, I'll merge. :)

@alejandro-colomar
Copy link
Collaborator

alejandro-colomar commented Jan 1, 2026

Cc: @sem-gh, @thalman, @firasuke, @dkwo, @jubalh , @floppym , @vapier , @dvzrv, @nobodino, @q66

Does anyone oppose to this? I'd like to make sure this is okay to everyone.

@dvzrv
Copy link

dvzrv commented Jan 1, 2026

Fine by me. We don't ship it on Arch Linux.

@firasuke
Copy link

firasuke commented Jan 1, 2026

Cc: @sem-gh, @thalman, @firasuke, @dkwo, @jubalh , @floppym , @vapier , @dvzrv

Does anyone oppose to this? I'd like to make sure this is okay to everyone.

Fine by me.

Shouldn't sulogin be removed as well? util-linux provides a relatively "better" version, and shadow's version gets built either way but is not installed (#1082).

@alejandro-colomar
Copy link
Collaborator

alejandro-colomar commented Jan 1, 2026

Cc: @sem-gh, @thalman, @firasuke, @dkwo, @jubalh , @floppym , @vapier , @dvzrv
Does anyone oppose to this? I'd like to make sure this is okay to everyone.

Fine by me.

Thanks!

Shouldn't sulogin be removed as well? util-linux provides a relatively "better" version, and shadow's version gets built either way but is not installed (#1082).

That would be off-topic here. And in the thread you linked, there seem to be users of the program, so I'd prefer to keep it.

@vapier
Copy link
Contributor

vapier commented Jan 1, 2026

makes sense to drop logoutd since it's old & generally unused

@q66
Copy link

q66 commented Jan 1, 2026

lgtm

1 similar comment
@zeha
Copy link
Contributor

zeha commented Jan 1, 2026

lgtm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants