### 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
type: float
        version_added: "1.9"
    password_lock:
        description:
            - Lock the password (C(usermod -L), C(usermod -U), C(pw lock)).
            - Implementation differs by platform. This option does not always mean the user cannot login using other methods.
            - This option does not disable the user, only lock the password.
            - This must be set to V(False) in order to unlock a currently locked password. The absence of this parameter will not unlock a password.
            - Currently supported on Linux, FreeBSD, DragonFlyBSD, NetBSD, OpenBSD.
        type: bool
        version_added: "2.6"
    local:
        description:
            - Forces the use of "local" command alternatives on platforms that implement it.
            - This is useful in environments that use centralized authentication when you want to manipulate the local users
              (in other words, it uses C(luseradd) instead of C(useradd)).
            - This will check C(/etc/passwd) for an existing account before invoking commands. If the local account database
              exists somewhere other than C(/etc/passwd), this setting will not work properly.
            - This requires that the above commands as well as C(/etc/passwd) must exist on the target host, otherwise it will be a fatal error.
        type: bool
        default: no
        version_added: "2.4"
    profile:
        description:
            - Sets the profile of the user.
            - Does nothing when used with other platforms.
            - Can set multiple profiles using comma separation.
            - To delete all the profiles, use O(profile='').
            - Currently supported on Illumos/Solaris.
        type: str