<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->
Ansible user module fails on casting the `expires` value to an `int` when an entry already exists in `/etc/passwd` for a user with the error message `ValueError: invalid literal for int() with base 10: ''`.
https://github.com/ansible/ansible/blob/31ddca4c0db2584b0a68880bdea1d97bd8b22032/lib/ansible/modules/user.py#L800

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
user module

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/export/home/rrotaru/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /tech/home/rrotaru/venv/lib64/python3.6/site-packages/ansible
  executable location = /tech/home/rrotaru/venv/bin/ansible
  python version = 3.6.8 (default, Jun 11 2019, 15:15:01) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```
```
ansible 2.10.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/export/home/rrotaru/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /tech/home/rrotaru/venv/lib64/python3.6/site-packages/ansible
  executable location = /tech/home/rrotaru/venv/bin/ansible
  python version = 3.6.8 (default, Jun 11 2019, 15:15:01) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
N/A

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Red Hat Enterprise Linux Server release 7.5 (Maipo)


##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
Run the playbook below.


<!--- Paste example playbooks or commands between quotes below -->
```yaml
---

- hosts: localhost
  become: yes
  tasks:

    - lineinfile:
        path: /etc/passwd
        line: "dummy::123:123::/export/home/dummy:/bin/ksh"
        regexp: "^dummy.*"
        state: present

    - user:
        name: dummy
        state: present
        uid: 123
        expires: -1
        password: "dummy#password | password_hash('sha512') }}"
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
User module should update the user expiration to non-expiring.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
User module fails with python ValueError.

<!--- Paste verbatim command output between quotes -->
```paste below
(venv) $ ansible-playbook expirestest.yml -K -v
Using /etc/ansible/ansible.cfg as config file
BECOME password:
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'

PLAY [localhost] *******************************************************************************

TASK [Gathering Facts] *************************************************************************
ok: [localhost]

TASK [lineinfile] ******************************************************************************
changed: [localhost] => {"backup": "", "changed": true, "msg": "line added"}

TASK [user] ************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ValueError: invalid literal for int() with base 10: ''
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n  File \"/export/home/rrotaru/.ansible/tmp/ansible-tmp-1600960729.601071-12482-194155520219212/AnsiballZ_user.py\", line 102, in <module>\n    _ansiballz_main()\n  File \"/export/home/rrotaru/.ansible/tmp/ansible-tmp-1600960729.601071-12482-194155520219212/AnsiballZ_user.py\", line 94, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/export/home/rrotaru/.ansible/tmp/ansible-tmp-1600960729.601071-12482-194155520219212/AnsiballZ_user.py\", line 40, in invoke_module\n    runpy.run_module(mod_name='ansible.modules.user', init_globals=None, run_name='__main__', alter_sys=True)\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 3026, in <module>\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 2965, in main\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 1111, in modify_user\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 799, in modify_user_usermod\nValueError: invalid literal for int() with base 10: ''\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

PLAY RECAP *************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

```

chunk = os.read(master_out_fd, 10240)
                            out_buffer += chunk
                            if prompt in out_buffer:
                                os.write(master_in_fd, to_bytes(self.ssh_passphrase, errors='strict') + b'\r')
                                prompt = second_prompt
                        else:
                            chunk = os.read(master_err_fd, 10240)
                            err_buffer += chunk
                            if prompt in err_buffer:
                                os.write(master_in_fd, to_bytes(self.ssh_passphrase, errors='strict') + b'\r')
                                prompt = second_prompt
                        if b'Overwrite (y/n)?' in out_buffer or b'Overwrite (y/n)?' in err_buffer:
                            
                            return (None, 'Key already exists', '')
                rc = p.returncode
                out = to_native(out_buffer)
                err = to_native(err_buffer)
            except OSError as e:
                return (1, '', to_native(e))
        else:
            cmd.append('-N')
            cmd.append('')
            (rc, out, err) = self.execute_command(cmd, data=overwrite)
        if rc == 0 and not self.module.check_mode:
            
            
            os.chown(ssh_key_file, info[2], info[3])
            os.chown('%s.pub' % ssh_key_file, info[2], info[3])
        return (rc, out, err)
    def ssh_key_fingerprint(self):