|
|
723150 |
From 96ad7ec4fa84dd32439e3473c0128612dd5f9d49 Mon Sep 17 00:00:00 2001
|
|
|
723150 |
From: Noriko Hosoi <nhosoi@redhat.com>
|
|
|
723150 |
Date: Wed, 11 Jan 2017 15:04:42 -0800
|
|
|
723150 |
Subject: [PATCH 62/67] Ticket #49082 - Fix password expiration related shadow
|
|
|
723150 |
attributes
|
|
|
723150 |
|
|
|
723150 |
The original patch was provided by Gordon Messmer (gordon.messmer@gmail.com)
|
|
|
723150 |
with the description:
|
|
|
723150 |
Bug description:
|
|
|
723150 |
Shadow attributes (in /etc/shadow and in LDAP) are typically unset when no
|
|
|
723150 |
policy is in place. 389-ds will incorrectly return values (possibly set to 0)
|
|
|
723150 |
when there is no policy.
|
|
|
723150 |
|
|
|
723150 |
Fix description:
|
|
|
723150 |
Only auto-fill shadow attributes when a password policy is available. These
|
|
|
723150 |
are empty when no policy is in place.
|
|
|
723150 |
|
|
|
723150 |
Don't auto-fill expiration related shadow attributes if passwords never expire.
|
|
|
723150 |
|
|
|
723150 |
Reviewed by William Brown <wibrown@redhat.com> (Thanks!!).
|
|
|
723150 |
|
|
|
723150 |
(cherry picked from commit 5bcd966b73708f6b558f01e6b11a7a11e8d3b126)
|
|
|
723150 |
(cherry picked from commit faae0fa5a4a6b3d590c1a9e068d9436965cc49c9)
|
|
|
723150 |
---
|
|
|
723150 |
ldap/servers/slapd/pw.c | 74 +++++++++++++++++++++++++------------------------
|
|
|
723150 |
1 file changed, 38 insertions(+), 36 deletions(-)
|
|
|
723150 |
|
|
|
723150 |
diff --git a/ldap/servers/slapd/pw.c b/ldap/servers/slapd/pw.c
|
|
|
723150 |
index ce1ca2a..30a2cb9 100644
|
|
|
723150 |
--- a/ldap/servers/slapd/pw.c
|
|
|
723150 |
+++ b/ldap/servers/slapd/pw.c
|
|
|
723150 |
@@ -2802,7 +2802,7 @@ add_shadow_ext_password_attrs(Slapi_PBlock *pb, Slapi_Entry **e)
|
|
|
723150 |
{
|
|
|
723150 |
const char *dn = NULL;
|
|
|
723150 |
passwdPolicy *pwpolicy = NULL;
|
|
|
723150 |
- long long shadowval = 0;
|
|
|
723150 |
+ long long shadowval = -1;
|
|
|
723150 |
Slapi_Mods *smods = NULL;
|
|
|
723150 |
LDAPMod **mods;
|
|
|
723150 |
long long sval;
|
|
|
723150 |
@@ -2840,64 +2840,66 @@ add_shadow_ext_password_attrs(Slapi_PBlock *pb, Slapi_Entry **e)
|
|
|
723150 |
if (shadowval > _MAX_SHADOW) {
|
|
|
723150 |
shadowval = _MAX_SHADOW;
|
|
|
723150 |
}
|
|
|
723150 |
- } else {
|
|
|
723150 |
- shadowval = 0;
|
|
|
723150 |
}
|
|
|
723150 |
- shmin = slapi_entry_attr_get_charptr(*e, "shadowMin");
|
|
|
723150 |
- if (shmin) {
|
|
|
723150 |
- sval = strtoll(shmin, NULL, 0);
|
|
|
723150 |
- if (sval != shadowval) {
|
|
|
723150 |
- slapi_ch_free_string(&shmin);
|
|
|
723150 |
- shmin = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
+ if (shadowval > 0) {
|
|
|
723150 |
+ shmin = slapi_entry_attr_get_charptr(*e, "shadowMin");
|
|
|
723150 |
+ if (shmin) {
|
|
|
723150 |
+ sval = strtoll(shmin, NULL, 0);
|
|
|
723150 |
+ if (sval != shadowval) {
|
|
|
723150 |
+ slapi_ch_free_string(&shmin);
|
|
|
723150 |
+ shmin = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
+ mod_num++;
|
|
|
723150 |
+ }
|
|
|
723150 |
+ } else {
|
|
|
723150 |
mod_num++;
|
|
|
723150 |
+ shmin = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
}
|
|
|
723150 |
- } else {
|
|
|
723150 |
- mod_num++;
|
|
|
723150 |
- shmin = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
}
|
|
|
723150 |
|
|
|
723150 |
/* shadowMax - the maximum number of days for which the user password remains valid. */
|
|
|
723150 |
- if (pwpolicy->pw_maxage > 0) {
|
|
|
723150 |
+ shadowval = -1;
|
|
|
723150 |
+ if (pwpolicy->pw_exp == 1 && pwpolicy->pw_maxage > 0) {
|
|
|
723150 |
shadowval = pwpolicy->pw_maxage / _SEC_PER_DAY;
|
|
|
723150 |
if (shadowval > _MAX_SHADOW) {
|
|
|
723150 |
shadowval = _MAX_SHADOW;
|
|
|
723150 |
}
|
|
|
723150 |
- } else {
|
|
|
723150 |
- shadowval = _MAX_SHADOW;
|
|
|
723150 |
}
|
|
|
723150 |
- shmax = slapi_entry_attr_get_charptr(*e, "shadowMax");
|
|
|
723150 |
- if (shmax) {
|
|
|
723150 |
- sval = strtoll(shmax, NULL, 0);
|
|
|
723150 |
- if (sval != shadowval) {
|
|
|
723150 |
- slapi_ch_free_string(&shmax);
|
|
|
723150 |
- shmax = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
+ if (shadowval > 0) {
|
|
|
723150 |
+ shmax = slapi_entry_attr_get_charptr(*e, "shadowMax");
|
|
|
723150 |
+ if (shmax) {
|
|
|
723150 |
+ sval = strtoll(shmax, NULL, 0);
|
|
|
723150 |
+ if (sval != shadowval) {
|
|
|
723150 |
+ slapi_ch_free_string(&shmax);
|
|
|
723150 |
+ shmax = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
+ mod_num++;
|
|
|
723150 |
+ }
|
|
|
723150 |
+ } else {
|
|
|
723150 |
mod_num++;
|
|
|
723150 |
+ shmax = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
}
|
|
|
723150 |
- } else {
|
|
|
723150 |
- mod_num++;
|
|
|
723150 |
- shmax = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
}
|
|
|
723150 |
|
|
|
723150 |
/* shadowWarning - the number of days of advance warning given to the user before the user password expires. */
|
|
|
723150 |
- if (pwpolicy->pw_warning > 0) {
|
|
|
723150 |
+ shadowval = -1;
|
|
|
723150 |
+ if (pwpolicy->pw_exp == 1 && pwpolicy->pw_warning > 0) {
|
|
|
723150 |
shadowval = pwpolicy->pw_warning / _SEC_PER_DAY;
|
|
|
723150 |
if (shadowval > _MAX_SHADOW) {
|
|
|
723150 |
shadowval = _MAX_SHADOW;
|
|
|
723150 |
}
|
|
|
723150 |
- } else {
|
|
|
723150 |
- shadowval = 0;
|
|
|
723150 |
}
|
|
|
723150 |
- shwarn = slapi_entry_attr_get_charptr(*e, "shadowWarning");
|
|
|
723150 |
- if (shwarn) {
|
|
|
723150 |
- sval = strtoll(shwarn, NULL, 0);
|
|
|
723150 |
- if (sval != shadowval) {
|
|
|
723150 |
- slapi_ch_free_string(&shwarn);
|
|
|
723150 |
- shwarn = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
+ if (shadowval > 0) {
|
|
|
723150 |
+ shwarn = slapi_entry_attr_get_charptr(*e, "shadowWarning");
|
|
|
723150 |
+ if (shwarn) {
|
|
|
723150 |
+ sval = strtoll(shwarn, NULL, 0);
|
|
|
723150 |
+ if (sval != shadowval) {
|
|
|
723150 |
+ slapi_ch_free_string(&shwarn);
|
|
|
723150 |
+ shwarn = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
+ mod_num++;
|
|
|
723150 |
+ }
|
|
|
723150 |
+ } else {
|
|
|
723150 |
mod_num++;
|
|
|
723150 |
+ shwarn = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
}
|
|
|
723150 |
- } else {
|
|
|
723150 |
- mod_num++;
|
|
|
723150 |
- shwarn = slapi_ch_smprintf("%lld", shadowval);
|
|
|
723150 |
}
|
|
|
723150 |
|
|
|
723150 |
smods = slapi_mods_new();
|
|
|
723150 |
--
|
|
|
723150 |
2.9.3
|
|
|
723150 |
|