* add database handling
* fix IMSI handling

diff --git a/src/db.c b/src/db.c
index 2e0042a..679899b 100644
--- a/src/db.c
+++ b/src/db.c
@@ -69,7 +69,7 @@
 		"created TIMESTAMP NOT NULL, "
 		"updated TIMESTAMP NOT NULL, "
 		"imsi NUMERIC UNIQUE NOT NULL, "
-		"tmsi NUMERIC UNIQUE, "
+		"tmsi TEXT UNIQUE, "
 		"extension TEXT UNIQUE, "
 		"lac INTEGER NOT NULL DEFAULT 0, "
 		"authorized INTEGER NOT NULL DEFAULT 0" 
@@ -146,6 +146,8 @@
 
 int db_get_subscriber(enum gsm_subscriber_field field, struct gsm_subscriber* subscriber) {
 	dbi_result result;
+	char *string;
+
 	switch (field) {
 	case GSM_SUBSCRIBER_IMSI:
 		result = dbi_conn_queryf(conn,
@@ -174,9 +176,16 @@
 		dbi_result_free(result);
 		return 1;
 	}
+	memset(subscriber, 0, sizeof(*subscriber));
 	subscriber->id = dbi_result_get_ulonglong(result, "id");
-	strncpy(subscriber->imsi, dbi_result_get_string(result, "imsi"), GSM_IMSI_LENGTH);
-	strncpy(subscriber->tmsi, dbi_result_get_string(result, "tmsi"), GSM_TMSI_LENGTH);
+	string = dbi_result_get_string(result, "imsi");
+	if (string)
+		strncpy(subscriber->imsi, string, GSM_IMSI_LENGTH);
+
+	string = dbi_result_get_string(result, "tmsi");
+	if (string)
+		strncpy(subscriber->tmsi, string, GSM_TMSI_LENGTH);
+	
 	// FIXME handle extension
 	subscriber->lac = dbi_result_get_uint(result, "lac");
 	subscriber->authorized = dbi_result_get_uint(result, "authorized");