def check_password(name, password, runas=None):
    '''
    .. versionadded:: 2016.3.0

    Checks if a user's password is valid.

    CLI Example:

    .. code-block:: bash

        salt '*' rabbitmq.check_password rabbit_user password
    '''
    # try to get the rabbitmq-version - adapted from _get_rabbitmq_plugin

    if runas is None and not salt.utils.platform.is_windows():
        runas = salt.utils.user.get_user()

    try:
        res = __salt__['cmd.run']([RABBITMQCTL, 'status'], reset_system_locale=False, runas=runas, python_shell=False)
        server_version = re.search(r'\{rabbit,"RabbitMQ","(.+)"\}', res)

        if server_version is None:
            raise ValueError

        server_version = server_version.group(1).split('-')[0]
        version = [int(i) for i in server_version.split('.')]
    except ValueError:
        version = (0, 0, 0)
    if len(version) < 3:
        version = (0, 0, 0)

    # rabbitmq introduced a native api to check a username and password in version 3.5.7.
    if tuple(version) >= (3, 5, 7):
        if salt.utils.platform.is_windows():
            # On Windows, if the password contains a special character
            # such as '|', normal execution will fail. For example:
            # cmd: rabbitmq.add_user abc "asdf|def"
            # stderr: 'def' is not recognized as an internal or external
            #         command,\r\noperable program or batch file.
            # Work around this by using a shell and a quoted command.
            python_shell = True
            cmd = '"{0}" authenticate_user "{1}" "{2}"'.format(
                RABBITMQCTL, name, password
            )
        else:
            python_shell = False
            cmd = [RABBITMQCTL, 'authenticate_user', name, password]

        res = __salt__['cmd.run_all'](
            cmd,
            reset_system_locale=False,
            runas=runas,
            output_loglevel='quiet',
            python_shell=python_shell)

        if res['retcode'] != 0 or res['stderr']:
            return False
        return True

    cmd = ('rabbit_auth_backend_internal:check_user_login'
        '(<<"{0}">>, [{{password, <<"{1}">>}}]).').format(
        name.replace('"', '\\"'),
        password.replace('"', '\\"'))

    res = __salt__['cmd.run_all'](
        [RABBITMQCTL, 'eval', cmd],
        reset_system_locale=False,
        runas=runas,
        output_loglevel='quiet',
        python_shell=False)
    msg = 'password-check'

    _response = _format_response(res, msg)
    _key = _response.keys()[0]

    if 'invalid credentials' in _response[_key]:
        return False

    return True
def check_password ( name , password , runas = None ) : if runas is None and not salt . utils . platform . is_windows ( ) : runas = salt . utils . user . get_user ( ) try : res = __salt__ [ 'cmd.run' ] ( [ RABBITMQCTL , 'status' ] , reset_system_locale = False , runas = runas , python_shell = False ) server_version = re . search ( r'\{rabbit,"RabbitMQ","(.+)"\}' , res ) if server_version is None : raise ValueError server_version = server_version . group ( 1 ) . split ( '-' ) [ 0 ] version = [ int ( i ) for i in server_version . split ( '.' ) ] except ValueError : version = ( 0 , 0 , 0 ) if len ( version ) < 3 : version = ( 0 , 0 , 0 ) if tuple ( version ) >= ( 3 , 5 , 7 ) : if salt . utils . platform . is_windows ( ) : python_shell = True cmd = '"{0}" authenticate_user "{1}" "{2}"' . format ( RABBITMQCTL , name , password ) else : python_shell = False cmd = [ RABBITMQCTL , 'authenticate_user' , name , password ] res = __salt__ [ 'cmd.run_all' ] ( cmd , reset_system_locale = False , runas = runas , output_loglevel = 'quiet' , python_shell = python_shell ) if res [ 'retcode' ] != 0 or res [ 'stderr' ] : return False return True cmd = ( 'rabbit_auth_backend_internal:check_user_login' '(<<"{0}">>, [{{password, <<"{1}">>}}]).' ) . format ( name . replace ( '"' , '\\"' ) , password . replace ( '"' , '\\"' ) ) res = __salt__ [ 'cmd.run_all' ] ( [ RABBITMQCTL , 'eval' , cmd ] , reset_system_locale = False , runas = runas , output_loglevel = 'quiet' , python_shell = False ) msg = 'password-check' _response = _format_response ( res , msg ) _key = _response . keys ( ) [ 0 ] if 'invalid credentials' in _response [ _key ] : return False return True
.. versionadded:: 2016.3.0

    Checks if a user's password is valid.

    CLI Example:

    .. code-block:: bash

        salt '*' rabbitmq.check_password rabbit_user password