opensips将配置文件中的数据库密码加密
本来没想着给数据库密码加密,结果当时用的数据库密码中有个@符号,opensips在解析数据库连接串的时候,会将@字符后的数据认为是数据库地址,导致一直连接失败。
解决方法:
1、配置文件中将数据库密码采用base64加密
opensips.cfg中,将数据库密码采用base64加密,搜索下base64在线加密工具即可。
2、在opensips源码中,将pwd解密,再进行连接
需要修改的源码 modules/db_mysql/my_con.c
需要修改的方法 int db_mysql_connect(struct my_con* ptr)
具体修改的内容 char pwdbuf[256] = "";
base64decode(pwdbuf, ptr->id->password, strlen(ptr->id->password));
if (!mysql_real_connect(ptr->con, ptr->id->host,
ptr->id->username, pwdbuf,
ptr->id->database, ptr->id->port, 0,
#if (MYSQL_VERSION_ID >= 40100)
CLIENT_MULTI_STATEMENTS|CLIENT_REMEMBER_OPTIONS
#else
CLIENT_REMEMBER_OPTIONS
#endif
)) {
LM_ERR("driver error(%d): %s\n",
mysql_errno(ptr->con), mysql_error(ptr->con));
mysql_close(ptr->con);
return -1;
}