diff options
author | Jan Luebbe <jluebbe@debian.org> | 2009-08-12 21:04:54 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2009-08-12 22:22:42 +0200 |
commit | 9eca37f93cd8937fd97a8d7edfea38ee464c7007 (patch) | |
tree | 71c6c0023139c71e76a123156faae4879fa01469 | |
parent | 1da59edf83b0a83ae648b6f12372b56321284935 (diff) |
fix problems with tmsi uniqueness in the subscriber table
-rw-r--r-- | openbsc/include/openbsc/db.h | 1 | ||||
-rw-r--r-- | openbsc/src/db.c | 24 |
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; |