From: Alan T. DeKok Date: Tue, 29 May 2012 08:28:17 +0000 (+0200) Subject: Added database selection capability to rlm_redis X-Git-Tag: release_2_2_0~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b97695f34837d5b0cdaf370c7f5f74d7cd9ecef;p=thirdparty%2Ffreeradius-server.git Added database selection capability to rlm_redis --- diff --git a/src/modules/rlm_redis/rlm_redis.c b/src/modules/rlm_redis/rlm_redis.c index d7f5c5546d1..2eb778d5e09 100644 --- a/src/modules/rlm_redis/rlm_redis.c +++ b/src/modules/rlm_redis/rlm_redis.c @@ -37,6 +37,8 @@ static const CONF_PARSER module_config[] = { offsetof(REDIS_INST, hostname), NULL, "127.0.0.1"}, { "port", PW_TYPE_INTEGER, offsetof(REDIS_INST, port), NULL, "6379"}, + { "database", PW_TYPE_INTEGER, + offsetof(REDIS_INST, database), NULL, "0"}, { "password", PW_TYPE_STRING_PTR, offsetof(REDIS_INST, password), NULL, NULL}, {"connect_failure_retry_delay", PW_TYPE_INTEGER, @@ -116,6 +118,38 @@ static int connect_single_socket(REDIS_INST *inst, REDISSOCK *dissocket) } } + if (inst->database) { + snprintf(buffer, sizeof(buffer), "SELECT %d", inst->database); + + dissocket->reply = redisCommand(dissocket->conn, buffer); + if (!dissocket->reply) { + radlog(L_ERR, "rlm_redis (%s): Failed select database", + inst->xlat_name); + redis_close_socket(inst, dissocket); + return -1; + } + + switch (dissocket->reply->type) { + case REDIS_REPLY_STATUS: + if (strcmp(dissocket->reply->str, "OK") != 0) { + radlog(L_ERR, "rlm_redis (%s): Failed SELECT %u : reply %s", + inst->xlat_name, inst->database, + dissocket->reply->str); + redis_close_socket(inst, dissocket); + return -1; + } + break; /* else it's OK */ + + default: + radlog(L_ERR, "rlm_redis (%s): Unexpected reply to SELECT", + inst->xlat_name); + redis_close_socket(inst, dissocket); + return -1; + } + } + + + radlog(L_INFO, "rlm_redis (%s): Connected new DB handle, #%d", inst->xlat_name, dissocket->id); diff --git a/src/modules/rlm_redis/rlm_redis.h b/src/modules/rlm_redis/rlm_redis.h index 1bde5186d39..a55d4db4403 100644 --- a/src/modules/rlm_redis/rlm_redis.h +++ b/src/modules/rlm_redis/rlm_redis.h @@ -66,6 +66,8 @@ typedef struct rlm_redis_t { char *hostname; int port; + int database; + int database; char *password; REDISSOCK *(*redis_get_socket)(REDIS_INST * inst);