Я пишу свою собственную реализацию memcachedClient, в которой я хочу добавить аутентификацию. Я только начал с PLAIN auth, но потерпел неудачу. Короче говоря, команда LIST_MECH всегда возвращает пустой результат, если я продолжу и выполню команду PLAIN AUTH, она говорит:
mech: ``PLAIN'' with 34 bytes of data
SASL (severity 2): Couldn't find mech PLAIN
Ниже моя конфигурация:
% cat memcached.conf
mech_list: plain
log_level: 5
sasldb_path: /tmp/memcached-sasl-db
% cat memcached-sasl-db
myname:mypass
export MEMCACHED_SASL_PWDB=/tmp/memcached-sasl-db
export SASL_CONF_PATH=`pwd`/memcached.conf
При запуске:
./memcached -m 32 -S -B binary -vvvv
Reading configuration from: </MemcachedBuildDirection/build/bin/>
Initialized SASL.
LIST_MECH показывает:
<29 Read binary protocol data:
<29 0x80 0x20 0x00 0x00
<29 0x00 0x00 0x00 0x00
<29 0x00 0x00 0x00 0x00
<29 0x00 0x00 0x00 0x01
<29 0x00 0x00 0x00 0x00
<29 0x00 0x00 0x00 0x00
authenticated() in cmd 0x20 is true
>29 Writing bin response:
>29 0x81 0x20 0x00 0x00
>29 0x00 0x00 0x00 0x00
>29 0x00 0x00 0x00 0x00
>29 0x00 0x00 0x00 0x01
>29 0x00 0x00 0x00 0x00
>29 0x00 0x00 0x00 0x00
Он показывает, что общая длина ответа равна нулю. Таким образом, я читаю пустой список с вывода.
И команда AUTH:
<29 Read binary protocol data:
<29 0x80 0x21 0x00 0x05
<29 0x00 0x00 0x00 0x00
<29 0x00 0x00 0x00 0x27
<29 0x00 0x00 0x00 0x01
<29 0x00 0x00 0x00 0x00
<29 0x00 0x00 0x00 0x00
authenticated() in cmd 0x21 is true
29: going from conn_parse_cmd to conn_nread
mech: ``PLAIN'' with 34 bytes of data
SASL (severity 2): Couldn't find mech PLAIN
sasl result code: -4
Unknown sasl response: -4
>29 Writing an error: Auth failure.
>29 Writing bin response:
>29 0x81 0x21 0x00 0x00
>29 0x00 0x00 0x00 0x20
>29 0x00 0x00 0x00 0x0d
>29 0x00 0x00 0x00 0x01
>29 0x00 0x00 0x00 0x00
>29 0x00 0x00 0x00 0x00
Я ожидаю, что LIST_MECH будет возвращать список поддерживаемых механизмов аутентификации.
Может ли кто-нибудь здесь указать мне какое-то направление, которое могло бы заставить его работать?





Я понял это наше сам. Cyrus-SASL не был правильно установлен в моем рабочем пространстве.
Обычно вы можете установить sasl sudo yum install cyrus-sasl-devel это работает для меня.
Иногда среда управления пакетами, с которой вы работаете, не позволяет вам использовать yum для установки зависимостей, но через какой-то определенный инструмент управления зависимостями. Тогда вы должны понять это оттуда. В моем случае я должен указать SASL_PATH в качестве переменной среды и указать, где мой инструмент управления зависимостями установил общую библиотеку SASL.