aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Luebbe <jluebbe@debian.org>2009-08-12 21:04:54 +0200
committerHarald Welte <laforge@gnumonks.org>2009-08-12 22:22:42 +0200
commit9eca37f93cd8937fd97a8d7edfea38ee464c7007 (patch)
tree71c6c0023139c71e76a123156faae4879fa01469
parent1da59edf83b0a83ae648b6f12372b56321284935 (diff)
fix problems with tmsi uniqueness in the subscriber table
-rw-r--r--openbsc/include/openbsc/db.h1
-rw-r--r--openbsc/src/db.c24
2 files changed, 20 insertions, 5 deletions
diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h
index 1f52d4e62..67436dfb3 100644
--- a/openbsc/include/openbsc/db.h
+++ b/openbsc/include/openbsc/db.h
@@ -38,6 +38,7 @@ struct gsm_subscriber* db_get_subscriber(struct gsm_network *net,
const char *subscr);
int db_sync_subscriber(struct gsm_subscriber* subscriber);
int db_subscriber_alloc_tmsi(struct gsm_subscriber* subscriber);
+int db_subscriber_alloc_exten(struct gsm_subscriber* subscriber);
int db_subscriber_alloc_token(struct gsm_subscriber* subscriber, u_int32_t* token);
int db_subscriber_assoc_imei(struct gsm_subscriber* subscriber, char *imei);
int db_sync_equipment(struct gsm_equipment *equip);
diff --git a/openbsc/src/db.c b/openbsc/src/db.c
index 001605a46..5f591dfaf 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -341,16 +341,30 @@ struct gsm_subscriber *db_get_subscriber(struct gsm_network *net,
int db_sync_subscriber(struct gsm_subscriber* subscriber) {
dbi_result result;
+ char *q_tmsi;
+ if (subscriber->tmsi[0])
+ dbi_conn_quote_string_copy(conn,
+ subscriber->tmsi,
+ &q_tmsi);
+ else
+ q_tmsi = strdup("NULL");
result = dbi_conn_queryf(conn,
"UPDATE Subscriber "
"SET updated = datetime('now'), "
- "tmsi = '%s', "
- "lac = %i, "
- "authorized = %i "
+ "name = '%s', "
+ "extension = '%s', "
+ "authorized = %i, "
+ "tmsi = %s, "
+ "lac = %i "
"WHERE imsi = %s ",
- subscriber->tmsi, subscriber->lac, subscriber->authorized, subscriber->imsi
+ subscriber->name,
+ subscriber->extension,
+ subscriber->authorized,
+ q_tmsi,
+ subscriber->lac,
+ subscriber->imsi
);
-
+ free(q_tmsi);
if (result==NULL) {
printf("DB: Failed to update Subscriber (by IMSI).\n");
return 1;