### Summary

User module is not idempotent when update_password: always parameter set in the playbook for macOS 

Result is always showing changed if use already present and no changes in the password . 



### Issue Type

Bug Report

### Component Name

user

### Ansible Version

```console
ansible 2.9.21
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/navarihtak/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/navarihtak/.local/lib/python3.8/site-packages/ansible
  executable location = /home/navarihtak/.local/bin/ansible
  python version = 3.8.10 (default, Nov 14 2022, 12:59:47) [GCC 9.4.0]
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
$ ansible-config dump --only-changed
DEFAULT_VAULT_PASSWORD_FILE(env: ANSIBLE_VAULT_PASSWORD_FILE) = /home/navarihtak/.ansible/.vault_pass
HOST_KEY_CHECKING(env: ANSIBLE_HOST_KEY_CHECKING) = False
$
```


### OS / Environment

All MacOS version 

### Steps to Reproduce

```yaml
      - name: Add user for Darwin
        user:
          name: "{{ username }}"
          comment: "{{ username }}"
          shell: "/bin/bash"
          group: "{{ user_group }}"
          password: "{{ user_pass }}"
          update_password: always
          state: present
        when: ansible_os_family == 'Darwin'
        become: yes
```

### Expected Results

It should be idempotent. Result status should shows ok if user is already exist and password is not changed. 

### Actual Results

```console
Always shows result status is changed if user is already exist and password is not changed.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
self.module.fail_json(msg='Cannot user "%s" to hidden user list.' % self.name, err=err, out=out, rc=rc)
                return 0
        else:
            if self.name in hidden_users:
                del (hidden_users[hidden_users.index(self.name)])
                cmd = ['defaults', 'write', plist_file, 'HiddenUsersList', '-array'] + hidden_users
                (rc, out, err) = self.execute_command(cmd)
                if rc != 0:
                    self.module.fail_json(msg='Cannot remove user "%s" from hidden user list.' % self.name, err=err, out=out, rc=rc)
                return 0
    def user_exists(self):
        '''Check is SELF.NAME is a known user on the system.'''
        cmd = self._get_dscl()
        cmd += ['-read', '/Users/%s' % self.name, 'UniqueID']
        (rc, out, err) = self.execute_command(cmd, obey_checkmode=False)
        return rc == 0
    def remove_user(self):
        '''Delete SELF.NAME. If SELF.FORCE is true, remove its home directory.'''
        info = self.user_info()
        cmd = self._get_dscl()
        cmd += ['-delete', '/Users/%s' % self.name]
        (rc, out, err) = self.execute_command(cmd)
        if rc != 0:
            self.module.fail_json(msg='Cannot delete user "%s".' % self.name, err=err, out=out, rc=rc)
        if self.force:
            if os.path.exists(info[5]):
                shutil.rmtree(info[5])
                out += "Removed %s" % info[5]
        return (rc, out, err)
    def create_user(self, command_name='dscl'):