### 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
cmd.append(self.ssh_bits)
        cmd.append('-C')
        cmd.append(self.ssh_comment)
        cmd.append('-f')
        cmd.append(ssh_key_file)
        if self.ssh_passphrase is not None:
            if self.module.check_mode:
                self.module.debug('In check mode, would have run: "%s"' % cmd)
                return (0, '', '')
            master_in_fd, slave_in_fd = pty.openpty()
            master_out_fd, slave_out_fd = pty.openpty()
            master_err_fd, slave_err_fd = pty.openpty()
            env = os.environ.copy()
            env['LC_ALL'] = get_best_parsable_locale(self.module)
            try:
                p = subprocess.Popen([to_bytes(c) for c in cmd],
                                     stdin=slave_in_fd,
                                     stdout=slave_out_fd,
                                     stderr=slave_err_fd,
                                     preexec_fn=os.setsid,
                                     env=env)
                out_buffer = b''
                err_buffer = b''
                while p.poll() is None:
                    r_list = select.select([master_out_fd, master_err_fd], [], [], 1)[0]
                    first_prompt = b'Enter passphrase (empty for no passphrase):'
                    second_prompt = b'Enter same passphrase again'
                    prompt = first_prompt
                    for fd in r_list:
                        if fd == master_out_fd: