Selaa lähdekoodia

modules_k/uac: uac_reg: skip realm checking if realm is empty

When realm is the empty string, do not check the realm, but accept anything
the UAS throws at us.
Alex Hermann 13 vuotta sitten
vanhempi
commit
7432aa5ee1
1 muutettua tiedostoa jossa 14 lisäystä ja 5 poistoa
  1. 14 5
      modules_k/uac/uac_reg.c

+ 14 - 5
modules_k/uac/uac_reg.c

@@ -554,10 +554,15 @@ void uac_reg_tm_callback( struct cell *t, int type, struct tmcb_params *ps)
 			LM_ERR("failed to parse auth hdr body\n");
 			LM_ERR("failed to parse auth hdr body\n");
 			goto done;
 			goto done;
 		}
 		}
-		if(auth.realm.len!=ri->realm.len
-				|| strncmp(auth.realm.s, ri->realm.s, ri->realm.len)!=0)
-		{
-			LM_ERR("realms are different - ignore?!?!\n");
+		if (ri->realm.len>0) {
+			/* only check if realms match if it is non-empty */
+			if(auth.realm.len!=ri->realm.len
+					|| strncmp(auth.realm.s, ri->realm.s, ri->realm.len)!=0)
+			{
+				LM_ERR("realms do not match. requested realm: [%.*s]\n",
+					auth.realm.len, auth.realm.s);
+				goto error;
+			}
 		}
 		}
 		cred.realm = auth.realm;
 		cred.realm = auth.realm;
 		cred.user = ri->auth_username; 
 		cred.user = ri->auth_username; 
@@ -841,7 +846,11 @@ int uac_reg_load_db(void)
 			reg_db_set_attr(l_domain, 2);
 			reg_db_set_attr(l_domain, 2);
 			reg_db_set_attr(r_username, 3);
 			reg_db_set_attr(r_username, 3);
 			reg_db_set_attr(r_domain, 4);
 			reg_db_set_attr(r_domain, 4);
-			reg_db_set_attr(realm, 5);
+			/* realm may be empty */
+			if(!VAL_NULL(&RES_ROWS(db_res)[i].values[5])) {
+				reg.realm.s = (char*)(RES_ROWS(db_res)[i].values[5].val.string_val);
+				reg.realm.len = strlen(reg.realm.s);
+			}
 			reg_db_set_attr(auth_username, 6);
 			reg_db_set_attr(auth_username, 6);
 			reg_db_set_attr(auth_password, 7);
 			reg_db_set_attr(auth_password, 7);
 			reg_db_set_attr(auth_proxy, 8);
 			reg_db_set_attr(auth_proxy, 8);