sms db: properly quote MSISDN in various SQL queries

Related: OS#2706
Change-Id: I793a3863e6f4ccbabafc7dabaff97a8c79bbd8e0
This commit is contained in:
Neels Hofmeyr 2017-12-05 12:39:00 +01:00 committed by Neels Hofmeyr
parent f6704f1a50
commit 50d0900916
1 changed files with 18 additions and 5 deletions

View File

@ -836,6 +836,7 @@ struct gsm_sms *db_sms_get_unsent_for_subscr(struct vlr_subscr *vsub,
struct gsm_network *net = vsub->vlr->user_ctx;
dbi_result result;
struct gsm_sms *sms;
char *q_msisdn;
if (!vsub->lu_complete)
return NULL;
@ -844,13 +845,16 @@ struct gsm_sms *db_sms_get_unsent_for_subscr(struct vlr_subscr *vsub,
if (*vsub->msisdn == '\0')
return NULL;
dbi_conn_quote_string_copy(conn, vsub->msisdn, &q_msisdn);
result = dbi_conn_queryf(conn,
"SELECT * FROM SMS"
" WHERE sent IS NULL"
" AND dest_addr=%s"
" AND dest_addr = %s"
" AND deliver_attempts <= %u"
" ORDER BY id LIMIT 1",
vsub->msisdn, max_failed);
q_msisdn, max_failed);
free(q_msisdn);
if (!result)
return NULL;
@ -872,14 +876,18 @@ struct gsm_sms *db_sms_get_next_unsent_rr_msisdn(struct gsm_network *net,
{
dbi_result result;
struct gsm_sms *sms;
char *q_last_msisdn;
dbi_conn_quote_string_copy(conn, last_msisdn, &q_last_msisdn);
result = dbi_conn_queryf(conn,
"SELECT * FROM SMS"
" WHERE sent IS NULL"
" AND dest_addr > '%s'"
" AND dest_addr > %s"
" AND deliver_attempts <= %u"
" ORDER BY dest_addr, id LIMIT 1",
last_msisdn, max_failed);
q_last_msisdn, max_failed);
free(q_last_msisdn);
if (!result)
return NULL;
@ -936,11 +944,16 @@ int db_sms_inc_deliver_attempts(struct gsm_sms *sms)
int db_sms_delete_by_msisdn(const char *msisdn)
{
dbi_result result;
char *q_msisdn;
if (!msisdn || !*msisdn)
return 0;
dbi_conn_quote_string_copy(conn, msisdn, &q_msisdn);
result = dbi_conn_queryf(conn,
"DELETE FROM SMS WHERE src_addr=%s OR dest_addr=%s",
msisdn, msisdn);
q_msisdn, q_msisdn);
free(q_msisdn);
if (!result) {
LOGP(DDB, LOGL_ERROR,
"Failed to delete SMS for %s\n", msisdn);