当前位置: 首页 > 知识库问答 >
问题:

如何调试rabbitmq ldap代码?

刁越
2023-03-14

我正在尝试使用openldap进行Rabbitmq auth。但是在监控openldap日志时,它总是有错误信息。

计划通过替换ebin文件将调试代码插入rabbitmq的源代码中。

两个问题:

>

  • 如何使 rabbitmq-server 从 shell 输入开始,因此可以在线调试。默认情况下,ps -ef show rabbitmq 从 noshell 开始。如何改变它?

    yus-iMac:艾宾陈余$ ps -ef|grep erl

    501 16021 16014 0 Thu08AM ttys 000 48:49.47/usr/local/Cellar/Erlang/r16b 01/lib/Erlang/ERTs-5 . 10 . 2/bin/beam . SMP--root/usr/local/Cellar/Erlang/r16b 01/lib/Erlang-progname erl--home/Users/陈余--newshell-name emacs 501 19097 56527 0 4:56../../ERTs-5 . 10 . 2/bin/beam . SMP-W W-K true-A30-P 1048576--root/usr/local/Cellar/rabbit MQ/3 . 1 . 5/ERTs-5 . 10 . 2/bin/../..-progname erl--home/Users/陈余--pa/usr/local/Cellar/rabbit MQ/3 . 1 . 5/ebin < code >-no shell < code >-no input -s rabbit boot-sname rabbit @ localhost-boot/usr/local/Cellar/rabbit MQ/3 . 1 . 5/releases/3 . 1 . 5/start _ sasl-config/usr/local/etc/rabbit MQ/rabbit MQ-kernel inet _ default _ connect _ options[{ 0

    我已经检查了引导脚本“rabbitmq-server”

    exec ${ERL_DIR}erl \
        -pa ${RABBITMQ_EBIN_ROOT} \
        ${RABBITMQ_START_RABBIT} \
        -sname ${RABBITMQ_NODENAME} \
        -boot "${SASL_BOOT_FILE}" \
        ${RABBITMQ_CONFIG_ARG} \
        +W w \
        ${RABBITMQ_SERVER_ERL_ARGS} \
        ${RABBITMQ_LISTEN_ARG} \
        -sasl errlog_type error \
        -sasl sasl_error_logger false \
        -rabbit error_logger '{file,"'${RABBITMQ_LOGS}'"}' \
        -rabbit sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \
        -rabbit enabled_plugins_file "\"$RABBITMQ_ENABLED_PLUGINS_FILE\"" \
        -rabbit plugins_dir "\"$RABBITMQ_PLUGINS_DIR\"" \
        -rabbit plugins_expand_dir "\"$RABBITMQ_PLUGINS_EXPAND_DIR\"" \
        -os_mon start_cpu_sup false \
        -os_mon start_disksup false \
        -os_mon start_memsup false \
        -mnesia dir "\"${RABBITMQ_MNESIA_DIR}\"" \
        ${RABBITMQ_SERVER_START_ARGS} \
        "$@" 
    

    添加以下调试代码。

    echo "erl dir:" ${ERL_DIR}
    echo "pa:" ${RABBITMQ_EBIN_ROOT} 
    echo "ebin_root:" ${RABBITMQ_EBIN_ROOT}
    echo "boot:" ${SASL_BOOT_FILE}
    echo "start rabbit:"  ${RABBITMQ_START_RABBIT}
    echo "config_args:" ${RABBITMQ_CONFIG_ARG}
    echo "server_erl_args:" ${RABBITMQ_SERVER_ERL_ARGS}
    echo "listen_arg:"  ${RABBITMQ_LISTEN_ARG}
    

    调试结果如下:

    erl dir: /usr/local/Cellar/rabbitmq/3.1.5/erts-5.10.2/bin/
    pa: /usr/local/Cellar/rabbitmq/3.1.5/ebin
    ebin_root: /usr/local/Cellar/rabbitmq/3.1.5/ebin
    boot: /usr/local/Cellar/rabbitmq/3.1.5/releases/3.1.5/start_sasl
    start rabbit: -noinput -s rabbit boot
    config_args: -config /usr/local/etc/rabbitmq/rabbitmq
    server_erl_args: +K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]
    listen_arg: -rabbit tcp_listeners [{"127.0.0.1",5672}]
    

    只有'没有输入',但不存在"noshell",ps-ef的输出noshell来自哪里?

    >

  • 我用新的“rabbit_auth_backend_ldap.beam”替换了”但是在重新启动 rabbitmq-server 后,并连接它,但调试信息不在 rabbitmq 日志中。看来我的新一个不是工作。

    yus-iMac:ebin yuchen$ pwd /usr/local/Cellar/rabbitmq/3.1.5/plugins/expand/rabbitmq_auth_backend_ldap-3.1.5/ebin

    Yus-iMac: ebin yuchen$ls-li总计56 20682881-rw-r--r--1 yuchen车轮9648 Apr 6 03:54rabbit_auth_backend_ldap.beam20682882-rw-r--r--1 yuchen车轮2100 Aug 15 2013rabbit_auth_backend_ldap_app.beam20682883-rw-r--r--1 yuchen车轮1764 Aug 15 2013rabbit_auth_backend_ldap_sup.beam20682884-rw-r--r--1 yuchen车轮1928 Aug 15 2013rabbit_auth_backend_ldap_util.beam20682885-rw-r--r--1 yuchen车轮994 Aug 15 2013rabbitmq_auth_backend_ldap.app

    更改后的文件部分代码如下,我在模板后添加了111:

    log(_Fmt, _Args, #state{log = false}) -> ok;
    log( Fmt,  Args, _State)              -> rabbit_log:info(Fmt ++ "~n", Args).
    
    fill(Fmt, Args, State) ->
        ?L2("filling template111 \"~s\" with~n            ~p", [Fmt, Args], State),
        R = rabbit_auth_backend_ldap_util:fill(Fmt, Args),
        ?L2("template result: \"~s\"", [R], State),
        R.
    

    日志在 rabbitmq 服务器重新启动后没有变化。

    =INFO REPORT==== 6-Apr-2014::05:25:21 ===
    accepting AMQP connection <0.485.0> (127.0.0.1:62003 -> 127.0.0.1:5672)
    
    =INFO REPORT==== 6-Apr-2014::05:25:21 ===
    LDAP CHECK: login for equipment_serial_001
    
    =INFO REPORT==== 6-Apr-2014::05:25:21 ===
            LDAP filling template "${username}" with
                [{username,<<"equipment_serial_001">>}]
    
    =INFO REPORT==== 6-Apr-2014::05:25:21 ===
            LDAP template result: "equipment_serial_001"
    
    =INFO REPORT==== 6-Apr-2014::05:25:21 ===
        LDAP bind error: equipment_serial_001 invalidDNSyntax
    
    =INFO REPORT==== 6-Apr-2014::05:25:21 ===
    LDAP DECISION: login for equipment_serial_001: {error,invalidDNSyntax}
    
    =ERROR REPORT==== 6-Apr-2014::05:25:24 ===
    closing AMQP connection <0.485.0> (127.0.0.1:62003 -> 127.0.0.1:5672):
    {handshake_error,starting,0,
                     {amqp_error,access_refused,
                                 "PLAIN login refused: rabbit_auth_backend_ldap failed authenticating equipment_serial_001: invalidDNSyntax\n",
                                 'connection.start_ok'}}
    
  • 共有1个答案

    羊毅庵
    2023-03-14

    虽然此错误可能与其他内容有关,但在RabbitMQ 3.3.5上可能导致此错误的一个条件是用户名和包含感叹号的密码:“!”

     类似资料:
    • 下面通过一个简单的例子来了解一下 Eclipse 调试程序的方法。 上述代码完成的主要功能是如果 i 值满足小于或等于 5 的条件,就一直执行输出语句。可以看到 for 关键字后面的小括号中有三个表达式,第一个表达式 的作用是定义一个 int 类型的变量并赋初值为 0,第二个表达式 说明 i 要满足的条件是小于或等于 5,第三个表达式 的意思是程序每执行一次 i 加 1。 对初学者来说,可能对这几

    • 问题内容: 我正在使用Angular JavaScript进行概念验证。 如何在不同的浏览器(Firefox和Chrome)中调试Angular JavaScript代码? 问题答案: 1.镀铬 对于 chrome中的 AngularJS调试,您可以使用 AngularJS Batarang 。(从最近对该插件的评论来看,似乎不再维护AngularJS Batarang。在各种版本的chrome中

    • 我一直在尝试调试通过平台通道在颤振中调用的本机android代码,调试仅在颤振端进行。在本机android中,执行不会命中断点。应用程序按预期工作,但调试没有。我正在使用Android studio。有人能告诉我如何调试原生android代码吗?

    • 我正在使用在和中构建一个应用程序来提供内容。我在浏览器控制台中看到错误,为了调试,当我单击源代码时,我只能看到

    • 了解如何在 Dreamweaver 中清除代码、检查浏览器兼容性、验证 XML 文档并使页面符合 XHTML 规范。 清理代码 您可以自动删除空标签,合并嵌套 font 标签,以及通过其它方法改善杂乱或难以辨识的 HTML 或 XHTML 代码。 有关如何清理从 Microsoft Word 文档生成的 HTML 的信息,请参阅打开和编辑现有文档。 在打开的文档中,选择“工具”>“清理 HTML”

    • 我想用VS代码在本地windows中调试python代码(在远程linux上)。 我做了什么? 在python项目导入ptvsd ptvsd.enable_attach(address=('$linux_ip',$port))ptvsd.wait_for_attach()中添加以下代码 项目launch.json {//使用智能感知了解可能的属性。//悬停查看现有属性的说明。//有关详细信息,请访