aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2017-12-05 12:39:00 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-12-06 12:54:13 +0000
commit50d0900916656df6ae5ed4bdb2c8db30649ff886 (patch)
tree5335bbcb371214a502062e7c1393e6af128d9d5e
parentf6704f1a50fa7ab74c02f90ad8c81c3f21d7c986 (diff)
sms db: properly quote MSISDN in various SQL queries
-rw-r--r--src/libmsc/db.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/libmsc/db.c b/src/libmsc/db.c
index ca27b6a22..eba4b1bf7 100644
--- a/src/libmsc/db.c
+++ b/src/libmsc/db.c
@@ -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);