docs: @Nonnull
    public EChange setUserPassword (@Nullable final String sUserID, @Nonnull final String sNewPlainTextPassword)
    {
      // Resolve user
      final User aUser = getOfID (sUserID);
      if (aUser == null)
      {
        AuditHelper.onAuditModifyFailure (User.OT, sUserID, "no-such-user-id", "password");
        return EChange.UNCHANGED;
      }
  
      // Create a new password salt upon password change
      final PasswordHash aPasswordHash = GlobalPasswordSettings.createUserDefaultPasswordHash (new PasswordSalt (),
                                                                                               sNewPlainTextPassword);
      m_aRWLock.writeLock ().lock ();
      try
      {
        final EChange eChange = aUser.setPasswordHash (aPasswordHash);
        if (eChange.isUnchanged ())
          return EChange.UNCHANGED;
  
        BusinessObjectHelper.setLastModificationNow (aUser);
        internalUpdateItem (aUser);
      }
      finally
      {
        m_aRWLock.writeLock ().unlock ();
      }
      AuditHelper.onAuditModifySuccess (User.OT, "password", sUserID);
  
      // Execute callback as the very last action
      m_aCallbacks.forEach (aCB -> aCB.onUserPasswordChanged (aUser));
  
      return EChange.CHANGED;
    }