Index: cdr_addon_mysql.c =================================================================== --- cdr_addon_mysql.c (revision 407) +++ cdr_addon_mysql.c (working copy) @@ -14,6 +14,10 @@ * Added an automatic reconnect as to not lose a cdr record * Cleaned up the original code to match the coding guidelines * + * Modified Juli 2006 + * Martin Portmann + * Added mysql ssl support + * * This program is free software, distributed under the terms of * the GNU General Public License. * @@ -58,6 +62,8 @@ *dstchannel_field = NULL, *lastapp_field = NULL, *lastdata_field = NULL, *duration_field = NULL, *billsec_field =NULL, *disposition_field = NULL, *amaflags_field = NULL, *accountcode_field = NULL, *userfield_field = NULL, *uniqueid_field = NULL; +static struct ast_str *ssl_ca = NULL, *ssl_cert = NULL, *ssl_key = NULL; + static int dbport = 0; static int connected = 0; static time_t connect_time = 0; @@ -88,11 +94,11 @@ char status[256], status2[100] = ""; int ctime = time(NULL) - connect_time; if (dbport) - snprintf(status, 255, "Connected to %s@%s, port %d", dbname->str, hostname, dbport); + snprintf(status, 255, "Connected to %s@%s, port %d", dbname->str, hostname->str, dbport); else if (dbsock) - snprintf(status, 255, "Connected to %s on socket file %s", dbname->str, dbsock); + snprintf(status, 255, "Connected to %s on socket file %s", dbname->str, dbsock->str); else - snprintf(status, 255, "Connected to %s@%s", dbname->str, hostname); + snprintf(status, 255, "Connected to %s@%s", dbname->str, hostname->str); if (!ast_strlen_zero(dbuser->str)) snprintf(status2, 99, " with username %s", dbuser->str); @@ -152,12 +158,15 @@ ast_log(LOG_ERROR, "cdr_mysql: mysql_options returned (%d) %s\n", mysql_errno(&mysql), mysql_error(&mysql)); } tmp = dbsock ? dbsock->str : NULL; - if (mysql_real_connect(&mysql, hostname->str, dbuser->str, password->str, dbname->str, dbport, tmp, 0)) { + if (ssl_ca || ssl_cert || ssl_key) { + mysql_ssl_set (&mysql, ssl_key->str, ssl_cert->str, ssl_ca->str, NULL, NULL); + } + if (mysql_real_connect(&mysql, hostname->str, dbuser->str, password->str, dbname->str, dbport, tmp, ssl_ca ? CLIENT_SSL : 0)) { connected = 1; connect_time = time(NULL); records = 0; } else { - ast_log(LOG_ERROR, "cdr_mysql: cannot connect to database server %s.\n", hostname); + ast_log(LOG_ERROR, "cdr_mysql: cannot connect to database server %s.\n", hostname->str); connected = 0; } } else { @@ -330,7 +339,7 @@ ast_log(LOG_WARNING, "Unable to load config for mysql CDR's: %s\n", config); return AST_MODULE_LOAD_SUCCESS; } - + var = ast_variable_browse(cfg, "global"); if (!var) { /* nothing configured */ @@ -346,6 +355,10 @@ res |= my_load_config_string(cfg, "global", "table", &dbtable, "cdr"); res |= my_load_config_string(cfg, "global", "password", &password, ""); + res |= my_load_config_string(cfg, "global", "ssl_ca", &ssl_ca, NULL); + res |= my_load_config_string(cfg, "global", "ssl_cert", &ssl_cert, NULL); + res |= my_load_config_string(cfg, "global", "ssl_key", &ssl_key, NULL); + res |= my_load_config_number(cfg, "global", "port", &dbport, 0); res |= my_load_config_number(cfg, "global", "timeout", &timeout, 0); res |= my_load_config_number(cfg, "global", "userfield", &userfield, 0); @@ -405,9 +418,12 @@ if (timeout && mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, (char *)&timeout)!=0) { ast_log(LOG_ERROR, "cdr_mysql: mysql_options returned (%d) %s\n", mysql_errno(&mysql), mysql_error(&mysql)); } + if (ssl_ca || ssl_cert || ssl_key) { + mysql_ssl_set (&mysql, ssl_key->str, ssl_cert->str, ssl_ca->str, NULL, NULL); + } temp = dbsock ? dbsock->str : NULL; - if (!mysql_real_connect(&mysql, hostname->str, dbuser->str, password->str, dbname->str, dbport, temp, 0)) { - ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", dbname, hostname); + if (!mysql_real_connect(&mysql, hostname->str, dbuser->str, password->str, dbname->str, dbport, temp, ssl_ca ? CLIENT_SSL : 0)) { + ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", dbname->str, hostname->str); connected = 0; records = 0; } else { Index: configs/cdr_mysql.conf.sample =================================================================== --- configs/cdr_mysql.conf.sample (revision 407) +++ configs/cdr_mysql.conf.sample (working copy) @@ -40,3 +40,8 @@ ;accountcode_field=accountcode ;userfield_field=userfield ;uniqueid_field=uniqueid +; +; ssl connections (optional) +;ssl_ca= +;ssl_cert= +;ssl_key=