From 26345550258b3ed6f9e9f1e1a3c43f05b7ce59ca Mon Sep 17 00:00:00 2001 From: cnelson Date: Wed, 30 May 2012 20:36:31 -0700 Subject: [PATCH] Added support for authentication --- samples/cdr_mongodb.conf | 4 ++++ src/cdr_mongodb.c | 25 ++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/samples/cdr_mongodb.conf b/samples/cdr_mongodb.conf index e1c6975..a1d648e 100644 --- a/samples/cdr_mongodb.conf +++ b/samples/cdr_mongodb.conf @@ -3,3 +3,7 @@ hostname=127.0.0.1 port=27017 dbname=asterisk collection=cdr +;you can optionally set a username and password +;if your mongodb requires authentication +;username=someguy +;password=omg916 \ No newline at end of file diff --git a/src/cdr_mongodb.c b/src/cdr_mongodb.c index ed86d64..43ef661 100644 --- a/src/cdr_mongodb.c +++ b/src/cdr_mongodb.c @@ -59,7 +59,7 @@ static char *desc = "MongoDB CDR Backend"; static char *name = "mongodb"; static char *config = "cdr_mongodb.conf"; -static struct ast_str *hostname = NULL, *dbname = NULL, *dbcollection = NULL, *dbnamespace = NULL; +static struct ast_str *hostname = NULL, *dbname = NULL, *dbcollection = NULL, *dbnamespace = NULL, *dbuser = NULL, *password = NULL; static int dbport = 0; static int connected = 0; @@ -100,6 +100,14 @@ static int mongodb_log(struct ast_cdr *cdr) return -1; } + if (ast_str_strlen(dbuser) != 0 && (mongo_cmd_authenticate(&conn, ast_str_buffer(dbname), ast_str_buffer(dbuser), ast_str_buffer(password)) != MONGO_OK)) { + mongo_destroy( &conn ); + ast_log(LOG_ERROR, "Method: mongodb_log, MongoDB failed to authenticate to do %s with username %s!\n", ast_str_buffer(dbname), ast_str_buffer(dbuser)); + connected = 0; + records = 0; + return -1; + } + ast_debug(1, "mongodb: Locking mongodb_lock.\n"); ast_mutex_lock(&mongodb_lock); @@ -303,6 +311,8 @@ static int _load_module(int reload) res |= load_config_string(cfg, "global", "dbname", &dbname, "astriskcdrdb"); res |= load_config_string(cfg, "global", "collection", &dbcollection, "cdr"); res |= load_config_number(cfg, "global", "port", &dbport, 27017); + res |= load_config_string(cfg, "global", "username", &dbuser, ""); + res |= load_config_string(cfg, "global", "password", &password, ""); if (res < 0) { return AST_MODULE_LOAD_FAILURE; @@ -312,7 +322,10 @@ static int _load_module(int reload) ast_debug(1, "Got port of %d\n", dbport); ast_debug(1, "Got dbname of %s\n", ast_str_buffer(dbname)); ast_debug(1, "Got dbcollection of %s\n", ast_str_buffer(dbcollection)); - + ast_debug(1, "Got user of %s\n", ast_str_buffer(dbuser)); + ast_debug(1, "Got password of %s\n", ast_str_buffer(password)); + + dbnamespace = ast_str_create(255); ast_str_set(&dbnamespace, 0, "%s.%s", ast_str_buffer(dbname), ast_str_buffer(dbcollection)); @@ -320,7 +333,13 @@ static int _load_module(int reload) ast_log(LOG_ERROR, "Method: _load_module, MongoDB failed to connect to %s:%d!\n", ast_str_buffer(hostname), dbport); res = -1; } else { - connected = 1; + if (ast_str_strlen(dbuser) != 0 && (mongo_cmd_authenticate(&conn, ast_str_buffer(dbname), ast_str_buffer(dbuser), ast_str_buffer(password)) != MONGO_OK)) { + ast_log(LOG_ERROR, "Method: _load_module, MongoDB failed to authenticate to do %s with username %s!\n", ast_str_buffer(dbname), ast_str_buffer(dbuser)); + res = -1; + } else { + connected = 1; + } + mongo_destroy(&conn); }