View | Details | Raw Unified | Return to bug 45957
Collapse All | Expand All

(-)a/management/univention-directory-manager-modules/modules/univention/admin/handlers/users/user.py (-19 / +21 lines)
 Lines 2030-2058   def _modlist_password_change(self, ml): Link Here 
2030
		pwd_change_next_login = self.hasChanged('pwdChangeNextLogin') and self['pwdChangeNextLogin'] == '1'
2030
		pwd_change_next_login = self.hasChanged('pwdChangeNextLogin') and self['pwdChangeNextLogin'] == '1'
2031
		unset_pwd_change_next_login = self.hasChanged('pwdChangeNextLogin') and self['pwdChangeNextLogin'] == '0'
2031
		unset_pwd_change_next_login = self.hasChanged('pwdChangeNextLogin') and self['pwdChangeNextLogin'] == '0'
2032
2032
2033
		old_shadow_last_change = self.oldattr.get('shadowLastChange', [''])[0]
2034
		old_shadow_max = self.oldattr.get('shadowMax', [''])[0]
2035
		shadow_last_change = old_shadow_last_change
2036
		shadow_max = old_shadow_max
2037
2033
		if pwd_change_next_login:
2038
		if pwd_change_next_login:
2034
			# force user to change password on next login
2039
			shadow_last_change = '0'
2035
			shadowMax = "1"
2040
		elif modifypassword or (unset_pwd_change_next_login and old_shadow_last_change == '0') or (pwhistoryPolicy.expiryInterval and not old_shadow_last_change):
2036
		elif not pwhistoryPolicy.expiryInterval or unset_pwd_change_next_login:
2041
			# 1. The password was changed
2037
			# 1. no pw expiry interval is defined or
2042
			# 2. User doesn't need to change password on next login anymore
2038
			# 2. remove that user has to change password on next login
2043
			# 3. a password history policy exists but no last password change date
2039
			shadowMax = ''
2044
			shadow_last_change = str(int(long(time.time()) / 3600 / 24))
2045
2046
		if pwhistoryPolicy.expiryInterval:
2047
			# a password history policy exists
2048
			shadow_max = pwhistoryPolicy.expiryInterval
2040
		else:
2049
		else:
2041
			shadowMax = pwhistoryPolicy.expiryInterval
2050
			# no password history policy exists anymore (could be removed)
2042
2051
			shadow_max = ''
2043
		old_shadowMax = self.oldattr.get('shadowMax', [''])[0]
2044
		if old_shadowMax != shadowMax:
2045
			ml.append(('shadowMax', old_shadowMax, shadowMax))
2046
2052
2047
		now = (long(time.time()) / 3600 / 24)
2053
		if old_shadow_last_change != shadow_last_change:
2048
		shadowLastChange = ''
2054
			ml.append(('shadowLastChange', old_shadow_last_change, shadow_last_change))
2049
		if pwhistoryPolicy.expiryInterval or unset_pwd_change_next_login:
2050
			shadowLastChange = str(int(now))
2051
		if pwd_change_next_login:
2052
			shadowLastChange = str(int(now) - int(shadowMax) - 1)
2053
2055
2054
		if shadowLastChange:  # FIXME: this check causes, that the value is not unset. Is this correct?
2056
		if old_shadow_max != shadow_max:
2055
			ml.append(('shadowLastChange', self.oldattr.get('shadowLastChange', [''])[0], shadowLastChange))
2057
			ml.append(('shadowMax', old_shadow_max, shadow_max))
2056
2058
2057
		# if pwdChangeNextLogin has been set, set sambaPwdLastSet to 0 (see UCS Bug #17890)
2059
		# if pwdChangeNextLogin has been set, set sambaPwdLastSet to 0 (see UCS Bug #17890)
2058
		# OLD behavior was: set sambaPwdLastSet to 1 (see UCS Bug #8292 and Samba Bug #4313)
2060
		# OLD behavior was: set sambaPwdLastSet to 1 (see UCS Bug #8292 and Samba Bug #4313)

Return to bug 45957