aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-01-13 03:12:08 +0100
committerHarald Welte <laforge@gnumonks.org>2017-01-23 11:59:01 +0000
commit93bafb611a58293e0353320a14db298133c9d99a (patch)
tree4ba6d276b7f5e2fda43f21b765d7cca8c6b00d5e /openbsc/src/libmsc
parent59504dc80fe8c0d9a18994d82586a550c7efa341 (diff)
cosmetic: use osmo_strlcpy() everywhere
Shorten some code and make obvious to the reader that the string copy is done in a safe way. Change-Id: I900726cf06d34128db22a3d3d911ee0d1423b1bd
Diffstat (limited to 'openbsc/src/libmsc')
-rw-r--r--openbsc/src/libmsc/ctrl_commands.c4
-rw-r--r--openbsc/src/libmsc/db.c50
-rw-r--r--openbsc/src/libmsc/gsm_04_08.c19
-rw-r--r--openbsc/src/libmsc/gsm_04_11.c10
-rw-r--r--openbsc/src/libmsc/meas_feed.c13
-rw-r--r--openbsc/src/libmsc/smpp_openbsc.c5
-rw-r--r--openbsc/src/libmsc/vty_interface_layer3.c3
7 files changed, 45 insertions, 59 deletions
diff --git a/openbsc/src/libmsc/ctrl_commands.c b/openbsc/src/libmsc/ctrl_commands.c
index 79e136d52..d153247b0 100644
--- a/openbsc/src/libmsc/ctrl_commands.c
+++ b/openbsc/src/libmsc/ctrl_commands.c
@@ -20,6 +20,7 @@
*/
#include <osmocom/ctrl/control_cmd.h>
+#include <osmocom/core/utils.h>
#include <openbsc/gsm_data.h>
#include <openbsc/gsm_subscriber.h>
#include <openbsc/db.h>
@@ -103,8 +104,7 @@ static int set_subscriber_modify(struct ctrl_cmd *cmd, void *data)
goto fail;
subscr->authorized = 1;
- strncpy(subscr->extension, msisdn, GSM_EXTENSION_LENGTH - 1);
- subscr->extension[GSM_EXTENSION_LENGTH-1] = '\0';
+ osmo_strlcpy(subscr->extension, msisdn, sizeof(subscr->extension));
/* put it back to the db */
rc = db_sync_subscriber(subscr);
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c
index 5cccb3280..68dac766c 100644
--- a/openbsc/src/libmsc/db.c
+++ b/openbsc/src/libmsc/db.c
@@ -39,6 +39,7 @@
#include <osmocom/core/talloc.h>
#include <osmocom/core/statistics.h>
#include <osmocom/core/rate_ctr.h>
+#include <osmocom/core/utils.h>
#include <openssl/rand.h>
@@ -240,7 +241,7 @@ static struct gsm_sms *sms_from_result_v3(dbi_result result)
snprintf(buf, sizeof(buf), "%llu", sender_id);
sender = db_get_subscriber(GSM_SUBSCRIBER_ID, buf);
OSMO_ASSERT(sender);
- strncpy(sms->src.addr, sender->extension, sizeof(sms->src.addr)-1);
+ osmo_strlcpy(sms->src.addr, sender->extension, sizeof(sms->src.addr));
subscr_direct_free(sender);
sender = NULL;
@@ -252,10 +253,8 @@ static struct gsm_sms *sms_from_result_v3(dbi_result result)
"data_coding_scheme");
daddr = dbi_result_get_string(result, "dest_addr");
- if (daddr) {
- strncpy(sms->dst.addr, daddr, sizeof(sms->dst.addr));
- sms->dst.addr[sizeof(sms->dst.addr)-1] = '\0';
- }
+ if (daddr)
+ osmo_strlcpy(sms->dst.addr, daddr, sizeof(sms->dst.addr));
sms->user_data_len = dbi_result_get_field_length(result, "user_data");
user_data = dbi_result_get_binary(result, "user_data");
@@ -264,10 +263,8 @@ static struct gsm_sms *sms_from_result_v3(dbi_result result)
memcpy(sms->user_data, user_data, sms->user_data_len);
text = dbi_result_get_string(result, "text");
- if (text) {
- strncpy(sms->text, text, sizeof(sms->text));
- sms->text[sizeof(sms->text)-1] = '\0';
- }
+ if (text)
+ osmo_strlcpy(sms->text, text, sizeof(sms->text));
return sms;
}
@@ -549,7 +546,7 @@ struct gsm_subscriber *db_create_subscriber(const char *imsi, uint64_t smin,
return NULL;
}
subscr->id = dbi_conn_sequence_last(conn, NULL);
- strncpy(subscr->imsi, imsi, sizeof(subscr->imsi)-1);
+ osmo_strlcpy(subscr->imsi, imsi, sizeof(subscr->imsi));
dbi_result_free(result);
LOGP(DDB, LOGL_INFO, "New Subscriber: ID %llu, IMSI %s\n", subscr->id, subscr->imsi);
if (alloc_exten)
@@ -585,7 +582,7 @@ static int get_equipment_by_subscr(struct gsm_subscriber *subscr)
string = dbi_result_get_string(result, "imei");
if (string)
- strncpy(equip->imei, string, sizeof(equip->imei)-1);
+ osmo_strlcpy(equip->imei, string, sizeof(equip->imei));
string = dbi_result_get_string(result, "classmark1");
if (string) {
@@ -824,21 +821,19 @@ static void db_set_from_query(struct gsm_subscriber *subscr, dbi_conn result)
const char *string;
string = dbi_result_get_string(result, "imsi");
if (string)
- strncpy(subscr->imsi, string, sizeof(subscr->imsi)-1);
+ osmo_strlcpy(subscr->imsi, string, sizeof(subscr->imsi));
string = dbi_result_get_string(result, "tmsi");
if (string)
subscr->tmsi = tmsi_from_string(string);
string = dbi_result_get_string(result, "name");
- if (string) {
- strncpy(subscr->name, string, GSM_NAME_LENGTH);
- subscr->name[sizeof(subscr->name)-1] = '\0';
- }
+ if (string)
+ osmo_strlcpy(subscr->name, string, sizeof(subscr->name));
string = dbi_result_get_string(result, "extension");
if (string)
- strncpy(subscr->extension, string, GSM_EXTENSION_LENGTH);
+ osmo_strlcpy(subscr->extension, string, sizeof(subscr->extension));
subscr->lac = dbi_result_get_ulonglong(result, "lac");
@@ -1351,8 +1346,7 @@ int db_subscriber_assoc_imei(struct gsm_subscriber *subscriber, char imei[GSM230
unsigned long long equipment_id, watch_id;
dbi_result result;
- strncpy(subscriber->equipment.imei, imei,
- sizeof(subscriber->equipment.imei)-1);
+ osmo_strlcpy(subscriber->equipment.imei, imei, sizeof(subscriber->equipment.imei));
result = dbi_conn_queryf(conn,
"INSERT OR IGNORE INTO Equipment "
@@ -1502,19 +1496,15 @@ static struct gsm_sms *sms_from_result(struct gsm_network *net, dbi_result resul
sms->dst.npi = dbi_result_get_ulonglong(result, "dest_npi");
sms->dst.ton = dbi_result_get_ulonglong(result, "dest_ton");
daddr = dbi_result_get_string(result, "dest_addr");
- if (daddr) {
- strncpy(sms->dst.addr, daddr, sizeof(sms->dst.addr));
- sms->dst.addr[sizeof(sms->dst.addr)-1] = '\0';
- }
+ if (daddr)
+ osmo_strlcpy(sms->dst.addr, daddr, sizeof(sms->dst.addr));
sms->receiver = subscr_get_by_extension(net->subscr_group, sms->dst.addr);
sms->src.npi = dbi_result_get_ulonglong(result, "src_npi");
sms->src.ton = dbi_result_get_ulonglong(result, "src_ton");
saddr = dbi_result_get_string(result, "src_addr");
- if (saddr) {
- strncpy(sms->src.addr, saddr, sizeof(sms->src.addr));
- sms->src.addr[sizeof(sms->src.addr)-1] = '\0';
- }
+ if (saddr)
+ osmo_strlcpy(sms->src.addr, saddr, sizeof(sms->src.addr));
sms->user_data_len = dbi_result_get_field_length(result, "user_data");
user_data = dbi_result_get_binary(result, "user_data");
@@ -1523,10 +1513,8 @@ static struct gsm_sms *sms_from_result(struct gsm_network *net, dbi_result resul
memcpy(sms->user_data, user_data, sms->user_data_len);
text = dbi_result_get_string(result, "text");
- if (text) {
- strncpy(sms->text, text, sizeof(sms->text));
- sms->text[sizeof(sms->text)-1] = '\0';
- }
+ if (text)
+ osmo_strlcpy(sms->text, text, sizeof(sms->text));
return sms;
}
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c
index 34492bbea..742f803d4 100644
--- a/openbsc/src/libmsc/gsm_04_08.c
+++ b/openbsc/src/libmsc/gsm_04_08.c
@@ -65,6 +65,7 @@
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/talloc.h>
+#include <osmocom/core/utils.h>
#include <osmocom/gsm/tlv.h>
#include <assert.h>
@@ -1973,10 +1974,9 @@ static int gsm48_cc_rx_setup(struct gsm_trans *trans, struct msgb *msg)
/* use subscriber as calling party number */
setup.fields |= MNCC_F_CALLING;
- strncpy(setup.calling.number, trans->subscr->extension,
- sizeof(setup.calling.number)-1);
- strncpy(setup.imsi, trans->subscr->imsi,
- sizeof(setup.imsi)-1);
+ osmo_strlcpy(setup.calling.number, trans->subscr->extension,
+ sizeof(setup.calling.number));
+ osmo_strlcpy(setup.imsi, trans->subscr->imsi, sizeof(setup.imsi));
/* bearer capability */
if (TLVP_PRESENT(&tp, GSM48_IE_BEARER_CAP)) {
@@ -2153,8 +2153,8 @@ static int gsm48_cc_rx_call_conf(struct gsm_trans *trans, struct msgb *msg)
}
/* IMSI of called subscriber */
- strncpy(call_conf.imsi, trans->subscr->imsi,
- sizeof(call_conf.imsi)-1);
+ osmo_strlcpy(call_conf.imsi, trans->subscr->imsi,
+ sizeof(call_conf.imsi));
new_cc_state(trans, GSM_CSTATE_MO_TERM_CALL_CONF);
@@ -2307,10 +2307,9 @@ static int gsm48_cc_rx_connect(struct gsm_trans *trans, struct msgb *msg)
tlv_parse(&tp, &gsm48_att_tlvdef, gh->data, payload_len, 0, 0);
/* use subscriber as connected party number */
connect.fields |= MNCC_F_CONNECTED;
- strncpy(connect.connected.number, trans->subscr->extension,
- sizeof(connect.connected.number)-1);
- strncpy(connect.imsi, trans->subscr->imsi,
- sizeof(connect.imsi)-1);
+ osmo_strlcpy(connect.connected.number, trans->subscr->extension,
+ sizeof(connect.connected.number));
+ osmo_strlcpy(connect.imsi, trans->subscr->imsi, sizeof(connect.imsi));
/* facility */
if (TLVP_PRESENT(&tp, GSM48_IE_FACILITY)) {
diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c
index 48a87e055..6164a0887 100644
--- a/openbsc/src/libmsc/gsm_04_11.c
+++ b/openbsc/src/libmsc/gsm_04_11.c
@@ -37,6 +37,7 @@
#include <osmocom/core/msgb.h>
#include <osmocom/core/talloc.h>
+#include <osmocom/core/utils.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/gsm/gsm0411_utils.h>
@@ -92,15 +93,15 @@ struct gsm_sms *sms_from_text(struct gsm_subscriber *receiver,
return NULL;
sms->receiver = subscr_get(receiver);
- strncpy(sms->text, text, sizeof(sms->text)-1);
+ osmo_strlcpy(sms->text, text, sizeof(sms->text));
- strncpy(sms->src.addr, sender->extension, sizeof(sms->src.addr)-1);
+ osmo_strlcpy(sms->src.addr, sender->extension, sizeof(sms->src.addr));
sms->reply_path_req = 0;
sms->status_rep_req = 0;
sms->ud_hdr_ind = 0;
sms->protocol_id = 0; /* implicit */
sms->data_coding_scheme = dcs;
- strncpy(sms->dst.addr, receiver->extension, sizeof(sms->dst.addr)-1);
+ osmo_strlcpy(sms->dst.addr, receiver->extension, sizeof(sms->dst.addr));
/* Generate user_data */
sms->user_data_len = gsm_7bit_encode_n(sms->user_data, sizeof(sms->user_data),
sms->text, NULL);
@@ -464,7 +465,8 @@ static int gsm340_rx_tpdu(struct gsm_subscriber_connection *conn, struct msgb *m
}
}
- strncpy(gsms->src.addr, conn->subscr->extension, sizeof(gsms->src.addr)-1);
+ osmo_strlcpy(gsms->src.addr, conn->subscr->extension,
+ sizeof(gsms->src.addr));
LOGP(DLSMS, LOGL_INFO, "RX SMS: Sender: %s, MTI: 0x%02x, VPF: 0x%02x, "
"MR: 0x%02x PID: 0x%02x, DCS: 0x%02x, DA: %s, "
diff --git a/openbsc/src/libmsc/meas_feed.c b/openbsc/src/libmsc/meas_feed.c
index cd2b64842..3ddcdc39c 100644
--- a/openbsc/src/libmsc/meas_feed.c
+++ b/openbsc/src/libmsc/meas_feed.c
@@ -8,6 +8,7 @@
#include <osmocom/core/socket.h>
#include <osmocom/core/write_queue.h>
#include <osmocom/core/talloc.h>
+#include <osmocom/core/utils.h>
#include <osmocom/vty/command.h>
#include <osmocom/vty/vty.h>
@@ -52,12 +53,9 @@ static int process_meas_rep(struct gsm_meas_rep *mr)
mfm->hdr.version = MEAS_FEED_VERSION;
/* fill in MEAS_FEED_MEAS specific header */
- strncpy(mfm->imsi, subscr->imsi, sizeof(mfm->imsi)-1);
- mfm->imsi[sizeof(mfm->imsi)-1] = '\0';
- strncpy(mfm->name, subscr->name, sizeof(mfm->name)-1);
- mfm->name[sizeof(mfm->name)-1] = '\0';
- strncpy(mfm->scenario, g_mfs.scenario, sizeof(mfm->scenario));
- mfm->scenario[sizeof(mfm->scenario)-1] = '\0';
+ osmo_strlcpy(mfm->imsi, subscr->imsi, sizeof(mfm->imsi));
+ osmo_strlcpy(mfm->name, subscr->name, sizeof(mfm->name));
+ osmo_strlcpy(mfm->scenario, g_mfs.scenario, sizeof(mfm->scenario));
/* copy the entire measurement report */
memcpy(&mfm->mr, mr, sizeof(mfm->mr));
@@ -160,8 +158,7 @@ void meas_feed_cfg_get(char **host, uint16_t *port)
void meas_feed_scenario_set(const char *name)
{
- strncpy(g_mfs.scenario, name, sizeof(g_mfs.scenario)-1);
- g_mfs.scenario[sizeof(g_mfs.scenario)-1] = '\0';
+ osmo_strlcpy(g_mfs.scenario, name, sizeof(g_mfs.scenario));
}
const char *meas_feed_scenario_get(void)
diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c
index 228e61dfe..657272ed9 100644
--- a/openbsc/src/libmsc/smpp_openbsc.c
+++ b/openbsc/src/libmsc/smpp_openbsc.c
@@ -133,12 +133,13 @@ static int submit_to_sms(struct gsm_sms **psms, struct gsm_network *net,
sms->receiver = dest;
sms->dst.ton = submit->dest_addr_ton;
sms->dst.npi = submit->dest_addr_npi;
- strncpy(sms->dst.addr, dest->extension, sizeof(sms->dst.addr)-1);
+ osmo_strlcpy(sms->dst.addr, dest->extension, sizeof(sms->dst.addr));
/* fill in the source address */
sms->src.ton = submit->source_addr_ton;
sms->src.npi = submit->source_addr_npi;
- strncpy(sms->src.addr, (char *)submit->source_addr, sizeof(sms->src.addr)-1);
+ osmo_strlcpy(sms->src.addr, (char *)submit->source_addr,
+ sizeof(sms->src.addr));
if (submit->esm_class & 0x40)
sms->ud_hdr_ind = 1;
diff --git a/openbsc/src/libmsc/vty_interface_layer3.c b/openbsc/src/libmsc/vty_interface_layer3.c
index 4f412b106..490d7946b 100644
--- a/openbsc/src/libmsc/vty_interface_layer3.c
+++ b/openbsc/src/libmsc/vty_interface_layer3.c
@@ -567,8 +567,7 @@ DEFUN(ena_subscr_name,
return CMD_WARNING;
}
- strncpy(subscr->name, name, sizeof(subscr->name));
- subscr->name[sizeof(subscr->name)-1] = '\0';
+ osmo_strlcpy(subscr->name, name, sizeof(subscr->name));
talloc_free(name);
db_sync_subscriber(subscr);