docs: def client_config(path, env_var='SALT_CLIENT_CONFIG', defaults=None):
      '''
      Load Master configuration data
  
      Usage:
  
      .. code-block:: python
  
          import salt.config
          master_opts = salt.config.client_config('/etc/salt/master')
  
      Returns a dictionary of the Salt Master configuration file with necessary
      options needed to communicate with a locally-running Salt Master daemon.
      This function searches for client specific configurations and adds them to
      the data from the master configuration.
  
      This is useful for master-side operations like
      :py:class:`~salt.client.LocalClient`.
      '''
      if defaults is None:
          defaults = DEFAULT_MASTER_OPTS.copy()
  
      xdg_dir = salt.utils.xdg.xdg_config_dir()
      if os.path.isdir(xdg_dir):
          client_config_dir = xdg_dir
          saltrc_config_file = 'saltrc'
      else:
          client_config_dir = os.path.expanduser('~')
          saltrc_config_file = '.saltrc'
  
      # Get the token file path from the provided defaults. If not found, specify
      # our own, sane, default
      opts = {
          'token_file': defaults.get(
              'token_file',
              os.path.join(client_config_dir, 'salt_token')
          )
      }
      # Update options with the master configuration, either from the provided
      # path, salt's defaults or provided defaults
      opts.update(
          master_config(path, defaults=defaults)
      )
      # Update with the users salt dot file or with the environment variable
      saltrc_config = os.path.join(client_config_dir, saltrc_config_file)
      opts.update(
          load_config(
              saltrc_config,
              env_var,
              saltrc_config
          )
      )
      # Make sure we have a proper and absolute path to the token file
      if 'token_file' in opts:
          opts['token_file'] = os.path.abspath(
              os.path.expanduser(
                  opts['token_file']
              )
          )
      # If the token file exists, read and store the contained token
      if os.path.isfile(opts['token_file']):
          # Make sure token is still valid
          expire = opts.get('token_expire', 43200)
          if os.stat(opts['token_file']).st_mtime + expire > time.mktime(time.localtime()):
              with salt.utils.files.fopen(opts['token_file']) as fp_:
                  opts['token'] = fp_.read().strip()
      # On some platforms, like OpenBSD, 0.0.0.0 won't catch a master running on localhost
      if opts['interface'] == '0.0.0.0':
          opts['interface'] = '127.0.0.1'
  
      # Make sure the master_uri is set
      if 'master_uri' not in opts:
          opts['master_uri'] = 'tcp://{ip}:{port}'.format(
              ip=salt.utils.zeromq.ip_bracket(opts['interface']),
              port=opts['ret_port']
          )
  
      # Return the client options
      _validate_opts(opts)
      return opts