Browse Source

usrloc(k): corrected non-gruu db insert with multidomain

- if +sip.instance parameter in contact was missing and multidomain was
  enabled, then inserted values didn't match proper columns
- reported by Juha Heinanen
Daniel-Constantin Mierla 13 years ago
parent
commit
2e8264a3ed
2 changed files with 15 additions and 8 deletions
  1. 14 7
      modules_k/usrloc/ucontact.c
  2. 1 1
      modules_k/usrloc/udomain.c

+ 14 - 7
modules_k/usrloc/ucontact.c

@@ -510,21 +510,23 @@ int db_insert_ucontact(ucontact_t* _c)
 
 	if(_c->ruid.len>0)
 	{
-		keys[nr_cols] = &ruid_col;
 		vals[nr_cols].type = DB1_STR;
 		vals[nr_cols].nul = 0;
 		vals[nr_cols].val.str_val = _c->ruid;
-		nr_cols++;
+	} else {
+		vals[nr_cols].nul = 1;
 	}
+	nr_cols++;
 
 	if(_c->instance.len>0)
 	{
-		keys[nr_cols] = &instance_col;
 		vals[nr_cols].type = DB1_STR;
 		vals[nr_cols].nul = 0;
 		vals[nr_cols].val.str_val = _c->instance;
-		nr_cols++;
+	} else {
+		vals[nr_cols].nul = 1;
 	}
+	nr_cols++;
 
 	if (use_domain) {
 		vals[nr_cols].type = DB1_STR;
@@ -541,7 +543,7 @@ int db_insert_ucontact(ucontact_t* _c)
 		}
 		nr_cols++;
 	}
-	
+
 	if (ul_dbf.use_table(ul_dbh, _c->domain) < 0) {
 		LM_ERR("sql use_table failed\n");
 		return -1;
@@ -672,15 +674,20 @@ int db_update_ucontact(ucontact_t* _c)
 		vals2[nr_cols2].type = DB1_STR;
 		vals2[nr_cols2].nul = 0;
 		vals2[nr_cols2].val.str_val = _c->ruid;
-		nr_cols2++;
+	} else {
+		vals2[nr_cols2].nul = 1;
 	}
+	nr_cols2++;
+
 	if(_c->instance.len>0)
 	{
 		vals2[nr_cols2].type = DB1_STR;
 		vals2[nr_cols2].nul = 0;
 		vals2[nr_cols2].val.str_val = _c->instance;
-		nr_cols2++;
+	} else {
+		vals2[nr_cols2].nul = 1;
 	}
+	nr_cols2++;
 
 	if (use_domain) {
 		vals1[3].type = DB1_STR;

+ 1 - 1
modules_k/usrloc/udomain.c

@@ -412,7 +412,7 @@ int preload_udomain(db1_con_t* _c, udomain_t* _d)
 			return -1;
 		}
 	} else {
-		if (ul_dbf.query(_c, 0, 0, 0, columns, 0, (use_domain)?(15):(14), 0,
+		if (ul_dbf.query(_c, 0, 0, 0, columns, 0, (use_domain)?(17):(16), 0,
 		&res) < 0) {
 			LM_ERR("db_query failed\n");
 			return -1;