summaryrefslogtreecommitdiff
path: root/src/database-redis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/database-redis.cpp')
-rw-r--r--src/database-redis.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/database-redis.cpp b/src/database-redis.cpp
index 3bcedad9b..93e6717fa 100644
--- a/src/database-redis.cpp
+++ b/src/database-redis.cpp
@@ -44,7 +44,8 @@ Database_Redis::Database_Redis(Settings &conf)
}
const char *addr = tmp.c_str();
int port = conf.exists("redis_port") ? conf.getU16("redis_port") : 6379;
- ctx = redisConnect(addr, port);
+ // if redis_address contains '/' assume unix socket, else hostname/ip
+ ctx = tmp.find('/') != std::string::npos ? redisConnectUnix(addr) : redisConnect(addr, port);
if (!ctx) {
throw DatabaseException("Cannot allocate redis context");
} else if (ctx->err) {
@@ -52,6 +53,18 @@ Database_Redis::Database_Redis(Settings &conf)
redisFree(ctx);
throw DatabaseException(err);
}
+ if (conf.exists("redis_password")) {
+ tmp = conf.get("redis_password");
+ redisReply *reply = static_cast<redisReply *>(redisCommand(ctx, "AUTH %s", tmp.c_str()));
+ if (!reply)
+ throw DatabaseException("Redis authentication failed");
+ if (reply->type == REDIS_REPLY_ERROR) {
+ std::string err = "Redis authentication failed: " + std::string(reply->str, reply->len);
+ freeReplyObject(reply);
+ throw DatabaseException(err);
+ }
+ freeReplyObject(reply);
+ }
}
Database_Redis::~Database_Redis()