diff -u -r1.466 chan_sip.c --- channels/chan_sip.c 31 Jul 2004 04:04:05 -0000 1.466 +++ channels/chan_sip.c 5 Aug 2004 10:31:34 -0000 @@ -1006,7 +1006,7 @@ mysql_real_escape_string(mysql, name, user, strlen(user)); } - snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name=\"%s\"", name); + snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds, callerid, restrictcid FROM sipfriends WHERE name='%s'", name); ast_mutex_lock(&mysqllock); mysql_query(mysql, query); @@ -1074,12 +1074,19 @@ time(&nowtime); mysql_real_escape_string(mysql, name, peer, strlen(peer)); mysql_real_escape_string(mysql, uname, username, strlen(username)); - snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=\"%s\", port=\"%d\", regseconds=\"%ld\", username=\"%s\" WHERE name=\"%s\"", + /* In case of IP address or account change, reset address,port,regseconds and username if address is found */ + snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr=NULL, regseconds=NULL, username=NULL WHERE ipaddr='%s'", + ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr)); + ast_mutex_lock(&mysqllock); + if (mysql_real_query(mysql, query, strlen(query))) + ast_log(LOG_WARNING, "Unable to update database (%s)\n",query); + ast_mutex_unlock(&mysqllock); + /* Update with the correct address */ + snprintf(query, sizeof(query), "UPDATE sipfriends SET ipaddr='%s', port='%d', regseconds='%ld', username='%s' WHERE name='%s'", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port), nowtime + expiry, uname, name); ast_mutex_lock(&mysqllock); if (mysql_real_query(mysql, query, strlen(query))) - ast_log(LOG_WARNING, "Unable to update database\n"); - + ast_log(LOG_WARNING, "Unable to update database (%s)\n",query); ast_mutex_unlock(&mysqllock); } } @@ -1107,9 +1114,9 @@ mysql_real_escape_string(mysql, name, peer, strlen(peer)); } if (sin) - snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE ipaddr=\"%s\" AND port=\"%d\"", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port)); + snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE ipaddr='%s' AND port='%d'", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port)); else - snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE name=\"%s\"", name); + snprintf(query, sizeof(query), "SELECT name, secret, context, username, ipaddr, port, regseconds FROM sipfriends WHERE name='%s'", name); ast_mutex_lock(&mysqllock); mysql_query(mysql, query); if ((result = mysql_store_result(mysql))) {