saltstack / saltstack/salt

[BUG] Creating a mysql user with an invalid host parameter causes exception

Open
#66,310 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug needs-triage
Dominant language
Python
Stars
15.7k
Forks
5.6k
Avg merge
2d 44m
Merged PRs (30d)
80

Description

Description
Creating a user that connects to a socket the host needs to be specified. Failing to do that causes an exception to fail due to an uninitialised variable

Setup
I use the Mysql formula with the following parameters.

    core_local:
      unix_socket: true
      host: 'localhost'
      databases:
        - database: '*'
          grants: ['file']
        - database: 'core'
          grants: ['select', 'insert', 'update', 'delete', 'create temporary tables', 'execute']

Please be as specific as possible and give set-up details.

  • on-prem machine
  • VM (Virtualbox, KVM, etc. please specify)
  • VM running on a cloud service, please be explicit and add details
  • container (Kubernetes, Docker, containerd, etc. please specify)
  • or a combination, please be explicit
  • jails if it is FreeBSD
  • classic packaging
  • [ x] onedir packaging
  • used bootstrap to install

Steps to Reproduce the behavior
Change the host from localhost to anything else and you get the below stack trace. Easy fix really.

          ID: mysql_user_core_local_127.0.0.1                                                                                                                                                                      
    Function: mysql_user.present                                                                                                                                                                                   
        Name: core_local                                                                                                                                                                                           
      Result: False                                                                                                                                                                                                
     Comment: An exception occurred in this state: Traceback (most recent call last):                                                                                                                              
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/state.py", line 2430, in call                                                                                                          
                  ret = self.states[cdata["full"]](                                                                                                                                                                
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 160, in __call__                                                                                                 
                  ret = self.loader.run(run_func, *args, **kwargs)                                                                                                                                                 
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1233, in run                                                                                                     
                  return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)                                                                                                                    
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1248, in _run_as
                  return _func_or_method(*args, **kwargs)
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1281, in wrapper
                  return f(*args, **kwargs)
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/mysql_user.py", line 241, in present
                  if __salt__["mysql.user_create"](
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 160, in __call__
                  ret = self.loader.run(run_func, *args, **kwargs)
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1233, in run
                  return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1248, in _run_as
                  return _func_or_method(*args, **kwargs)
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/mysql.py", line 1840, in user_create
                  qry, args = _mariadb_user_create(
                File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/mysql.py", line 1731, in _mariadb_user_create
                  __context__["mysql.error"] = err
              UnboundLocalError: local variable 'err' referenced before assignment

Expected behavior
It's expected to fail gracefully with useful information.

Versions Report

salt --versions-report Salt Version: Salt: 3007.0

Python Version:
Python: 3.10.13 (main, Feb 19 2024, 03:31:20) [GCC 11.2.0]

Dependency Versions:
cffi: 1.16.0
cherrypy: 18.8.0
dateutil: 2.8.2
docker-py: Not Installed
gitdb: Not Installed
gitpython: Not Installed
Jinja2: 3.1.3
libgit2: Not Installed
looseversion: 1.3.0
M2Crypto: Not Installed
Mako: Not Installed
msgpack: 1.0.7
msgpack-pure: Not Installed
mysql-python: Not Installed
packaging: 23.1
pycparser: 2.21
pycrypto: Not Installed
pycryptodome: 3.19.1
pygit2: Not Installed
python-gnupg: 0.5.2
PyYAML: 6.0.1
PyZMQ: 25.1.2
relenv: 0.15.1
smmap: Not Installed
timelib: 0.3.0
Tornado: 6.3.3
ZMQ: 4.3.4

Salt Package Information:
Package Type: onedir

System Versions:
dist: ubuntu 22.04.2 jammy
locale: utf-8
machine: x86_64
release: 5.15.0-101-generic
system: Linux
version: Ubuntu 22.04.2 jammy

</details>

**Additional context**
Return text isn't allocated to the re var before returning it.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with salt/modules/mysql.py, especially user_create and _mariadb_user_create, then trace the call from salt/states/mysql_user.py. Reproduce the invalid-host case through mysql_user.present and verify that it fails gracefully with useful error information instead of an UnboundLocalError.

Written by the indexing model from the issue text.

Assessment

Tech stack
mysql, python
Domain
database
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.