1
votes

I am trying to use openldap for rabbitmq auth. But when monitoring openldap log, it always has error information.

It is planed to insert debug code into rabbitmq's source code by replacing the ebin file.

Two question:

  1. how to make rabbitmq-server started with shell input, so it is possible to debug online. By default ps -ef show rabbitmq start with noshell. How to change it?

    yus-iMac:ebin yuchen$ ps -ef|grep erl

    501 16021 16014 0 Thu08AM ttys000 48:49.47 /usr/local/Cellar/erlang/R16B01/lib/erlang/erts-5.10.2/bin/beam.smp -- -root /usr/local/Cellar/erlang/R16B01/lib/erlang -progname erl -- -home /Users/yuchen -- -newshell -name emacs 501 19097 56527 0 4:56AM ttys006 0:00.00 grep erl 501 18980 56711 0 4:56AM ttys007 0:04.09 /usr/local/Cellar/rabbitmq/3.1.5/erts-5.10.2/bin/../../erts-5.10.2/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /usr/local/Cellar/rabbitmq/3.1.5/erts-5.10.2/bin/../.. -progname erl -- -home /Users/yuchen -- -pa /usr/local/Cellar/rabbitmq/3.1.5/ebin -noshell -noinput -s rabbit boot -sname rabbit@localhost -boot /usr/local/Cellar/rabbitmq/3.1.5/releases/3.1.5/start_sasl -config /usr/local/etc/rabbitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"127.0.0.1",5672}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/usr/local/var/log/rabbitmq/[email protected]"} -rabbit sasl_error_logger {file,"/usr/local/var/log/rabbitmq/[email protected]"} -rabbit enabled_plugins_file "/usr/local/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/local/Cellar/rabbitmq/3.1.5/plugins" -rabbit plugins_expand_dir "/usr/local/var/lib/rabbitmq/mnesia/rabbit@localhost-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/usr/local/var/lib/rabbitmq/mnesia/rabbit@localhost"

I have checked the boot script "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} \
    "$@" 

Add the following debug code.

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}

The debug result is as following:

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}]

There is only 'no input',but not exists "noshell", where ps -ef 's output noshell comes from?

  1. I have replaced the "rabbit_auth_backend_ldap.beam" with new one. But after restart rabbitmq-server, and connect it, but the debugging information is not in the rabbitmq log. It seems that my new one is not work.

    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 total 56 20682881 -rw-r--r-- 1 yuchen wheel 9648 Apr 6 03:54 rabbit_auth_backend_ldap.beam 20682882 -rw-r--r-- 1 yuchen wheel 2100 Aug 15 2013 rabbit_auth_backend_ldap_app.beam 20682883 -rw-r--r-- 1 yuchen wheel 1764 Aug 15 2013 rabbit_auth_backend_ldap_sup.beam 20682884 -rw-r--r-- 1 yuchen wheel 1928 Aug 15 2013 rabbit_auth_backend_ldap_util.beam 20682885 -rw-r--r-- 1 yuchen wheel 994 Aug 15 2013 rabbitmq_auth_backend_ldap.app

The changed file partly code as follows, I have added 111 after template:

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.

The log no change after rabbitmq-server's restart.

=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

1 Answers

0
votes

While this error might be related to something else, one condition that can result in this error on RabbitMQ 3.3.5 is a username with a password that contains an exclamation mark: "!"