gpt4 book ai didi

authentication - 为什么 Redis 不能使用 requirepass 指令?

转载 作者:IT王子 更新时间:2023-10-29 06:03:43 25 4
gpt4 key购买 nike

我想设置密码以连接到 Redis 服务器。

正确的方法是在配置文件中使用 requirepass 指令。 http://redis.io/commands/auth

但是,设置值后,我在重新启动 Redis 时得到了这个:

Stopping redis-server: redis-server.
Starting redis-server: Segmentation fault (core dumped)
failed

这是为什么?

最佳答案

密码长度限制为 512 个字符。

在redis.h中:

#define REDIS_AUTHPASS_MAX_LEN 512

在 config.c 中:

    } else if (!strcasecmp(argv[0],"requirepass") && argc == 2) {
if (strlen(argv[1]) > REDIS_AUTHPASS_MAX_LEN) {
err = "Password is longer than REDIS_AUTHPASS_MAX_LEN";
goto loaderr;
}
server.requirepass = zstrdup(argv[1]);
}

现在,配置文件的解析机制已经很基本了。使用 sds(字符串管理)库的 sdssplitargs 函数拆分所有行。此函数解释特定的字符序列,例如:

  • 单引号和双引号
  • \x 十六进制数
  • \n、\r、\t、\b、\a等特殊字符

这里的问题是您的密码包含一个双引号字符。解析失败,因为字符串末尾没有匹配的双引号。在这种情况下,sdssplitargs 函数返回 NULL 指针。发生核心转储是因为在 config.c 代码中未正确检查此指针:

    /* Split into arguments */
argv = sdssplitargs(lines[i],&argc);
sdstolower(argv[0]);

这是一个应该提交 IMO 的错误。

一个简单的解决方法是将双引号字符或任何其他解释字符替换为十六进制序列(即,双引号为\x22)。

关于authentication - 为什么 Redis 不能使用 requirepass 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13961520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com