fix problems with tmsi uniqueness in the subscriber table
diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h
index 1f52d4e..67436df 100644
--- a/openbsc/include/openbsc/db.h
+++ b/openbsc/include/openbsc/db.h
@@ -38,6 +38,7 @@
 					 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 001605a..5f591df 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -341,16 +341,30 @@
 
 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;