簡體   English   中英

hiredis在主機名中輸入用戶名和密碼失敗

[英]hiredis fails with username and password in hostname

我正在嘗試在CentOS C運行hiredis

以下代碼似乎運行良好:

...
const char *hostname = "my.redis-as-a-service.com";
int port = 8765;

const char *cert = "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\n";
const char *key = "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n";
const char *ca = "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----\n";

struct timeval tv = { 1, 500000 }; // 1.5 seconds
redisOptions options = {0};
REDIS_OPTIONS_SET_TCP(&options, hostname, port);
options.timeout = &tv;
c = redisConnectWithOptions(&options);

if (c == NULL || c->err) {
    if (c) {
        printf("Connection error: %s\n", c->errstr);
        redisFree(c);
    } else {
        printf("Connection error: can't allocate redis context\n");
    }
    exit(1);
}

if (redisSecureConnection(c, ca, cert, key, "sni") != REDIS_OK) {
    printf("Couldn't initialize SSL!\n");
    printf("Error: %s\n", c->errstr);
    redisFree(c);
    exit(1);
}

但是,當我嘗試在Compose.com上運行它時,需要在URL中usernamepassword ,例如:

const char *hostname = "USERNAME:PASSWORD@my.redis-as-a-service.com";

然后失敗,沒有特定的錯誤。 簡單:

Connection error: Name or service not known

您不能在主機名字符串中指定用戶名和密碼。 將整個字符串視為主機名,DNS查找失敗。

相反,您必須采用以下方式:

首先,在沒有身份驗證憑據的情況下正常連接。

成功之后,您可以通過

redisCommand(c, "AUTH password");

請注意, redis不支持用戶名,因此您不能指定用戶名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM