Changeset 738:d666051658bd in freeDiameter for libfdcore
- Timestamp:
- Mar 2, 2011, 6:21:59 PM (13 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- libfdcore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/p_ce.c
r725 r738 304 304 305 305 /* We check that the value matches what we know, otherwise disconnect the peer */ 306 if (fd_os_almostcase cmp(hdr->avp_value->os.data, hdr->avp_value->os.len,307 peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen )) {306 if (fd_os_almostcasesrch(hdr->avp_value->os.data, hdr->avp_value->os.len, 307 peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen, NULL)) { 308 308 TRACE_DEBUG(INFO, "Received a message with Origin-Host set to '%.*s' while expecting '%s'\n", 309 309 hdr->avp_value->os.len, hdr->avp_value->os.data, peer->p_hdr.info.pi_diamid); … … 813 813 if (peer->p_hdr.info.config.pic_realm) { 814 814 size_t len = strlen(peer->p_hdr.info.config.pic_realm); 815 if (fd_os_almostcase cmp(peer->p_hdr.info.config.pic_realm, len, peer->p_hdr.info.runtime.pir_realm, peer->p_hdr.info.runtime.pir_realmlen)) {815 if (fd_os_almostcasesrch(peer->p_hdr.info.config.pic_realm, len, peer->p_hdr.info.runtime.pir_realm, peer->p_hdr.info.runtime.pir_realmlen, NULL)) { 816 816 TRACE_DEBUG(INFO, "Rejected CER from peer '%s', realm mismatch with configured value (returning DIAMETER_UNKNOWN_PEER).\n", peer->p_hdr.info.pi_diamid); 817 817 pei.pei_errcode = "DIAMETER_UNKNOWN_PEER"; /* maybe AVP_NOT_ALLOWED would be better fit? */ -
libfdcore/peers.c
r725 r738 94 94 { 95 95 struct fd_peer *p = NULL; 96 struct fd_list * li ;96 struct fd_list * li, *li_inf; 97 97 int ret = 0; 98 98 … … 143 143 /* Ok, now check if we don't already have an entry with the same Diameter Id, and insert this one */ 144 144 CHECK_POSIX( pthread_rwlock_wrlock(&fd_g_peers_rw) ); 145 145 li_inf = &fd_g_peers; 146 146 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 147 147 struct fd_peer * next = (struct fd_peer *)li; 148 int cmp = fd_os_almostcasecmp( p->p_hdr.info.pi_diamid, p->p_hdr.info.pi_diamidlen, 149 next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); 150 if (cmp > 0) 151 continue; 152 if (cmp == 0) 148 int cont; 149 int cmp = fd_os_almostcasesrch( p->p_hdr.info.pi_diamid, p->p_hdr.info.pi_diamidlen, 150 next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, 151 &cont ); 152 if (cmp < 0) 153 li_inf = li; 154 155 if (cmp == 0) { 153 156 ret = EEXIST; 154 break; 157 break; 158 } 159 if (!cont) 160 break; 155 161 } 156 162 … … 162 168 163 169 /* Insert the new element in the list */ 164 fd_list_insert_ before( li, &p->p_hdr.chain );170 fd_list_insert_after( li_inf, &p->p_hdr.chain ); 165 171 } while (0); 166 172 … … 185 191 /* Search in the list */ 186 192 CHECK_POSIX( pthread_rwlock_rdlock(&fd_g_peers_rw) ); 187 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 188 struct fd_peer * next = (struct fd_peer *)li; 189 int cmp; 190 if (igncase) 191 cmp = fd_os_almostcasecmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); 192 else 193 cmp = fd_os_cmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); 194 if (cmp > 0) 195 continue; 196 if (cmp == 0) 197 *peer = &next->p_hdr; 198 break; 199 } 193 if (igncase) 194 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 195 struct fd_peer * next = (struct fd_peer *)li; 196 int cmp, cont; 197 cmp = fd_os_almostcasesrch( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, &cont ); 198 if (cmp == 0) { 199 *peer = &next->p_hdr; 200 break; 201 } 202 if (!cont) 203 break; 204 } 205 else 206 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 207 struct fd_peer * next = (struct fd_peer *)li; 208 int cmp = fd_os_cmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); 209 if (cmp > 0) 210 continue; 211 if (cmp == 0) 212 *peer = &next->p_hdr; 213 break; 214 } 200 215 CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) ); 201 216 … … 429 444 struct avp *avp_oh; 430 445 struct avp_hdr * avp_hdr; 431 struct fd_list * li ;446 struct fd_list * li, *li_inf; 432 447 int found = 0; 433 448 int ret = 0; … … 470 485 CHECK_POSIX( pthread_rwlock_wrlock(&fd_g_peers_rw) ); 471 486 487 li_inf = &fd_g_peers; 472 488 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 473 int cmp ;489 int cmp, cont; 474 490 peer = (struct fd_peer *)li->o; 475 cmp = fd_os_almostcasecmp( avp_hdr->avp_value->os.data, avp_hdr->avp_value->os.len, peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen ); 476 if (cmp > 0) 491 cmp = fd_os_almostcasesrch( avp_hdr->avp_value->os.data, avp_hdr->avp_value->os.len, peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen, &cont ); 492 if (cmp < 0) { 493 li_inf = li; 477 494 continue; 478 if (cmp == 0) 495 } 496 if (cmp == 0) { 479 497 found = 1; 480 break; 498 break; 499 } 500 if (!cont) 501 break; 481 502 } 482 503 … … 500 521 501 522 /* Insert the new peer in the list (the PSM will take care of setting the expiry after validation) */ 502 fd_list_insert_ before( li, &peer->p_hdr.chain );523 fd_list_insert_after( li_inf, &peer->p_hdr.chain ); 503 524 504 525 /* Start the PSM, which will receive the event bellow */ -
libfdcore/routing_dispatch.c
r717 r738 274 274 275 275 /* In the AVPs, the value comes from the network, so let's be case permissive */ 276 if (dh && !fd_os_almostcase cmp(dh->os.data, dh->os.len, c->diamid, c->diamidlen) ) {276 if (dh && !fd_os_almostcasesrch(dh->os.data, dh->os.len, c->diamid, c->diamidlen, NULL) ) { 277 277 /* The candidate is the Destination-Host */ 278 278 c->score += FD_SCORE_FINALDEST; 279 279 } else { 280 if (dr && !fd_os_almostcase cmp(dr->os.data, dr->os.len, c->realm, c->realmlen) ) {280 if (dr && !fd_os_almostcasesrch(dr->os.data, dr->os.len, c->realm, c->realmlen, NULL) ) { 281 281 /* The candidate's realm matchs the Destination-Realm */ 282 282 c->score += FD_SCORE_REALM; … … 592 592 ASSERT( ahdr->avp_value ); 593 593 /* Compare the Destination-Host AVP of the message with our identity */ 594 if (!fd_os_almostcase cmp(ahdr->avp_value->os.data, ahdr->avp_value->os.len, fd_g_config->cnf_diamid, fd_g_config->cnf_diamid_len)) {594 if (!fd_os_almostcasesrch(ahdr->avp_value->os.data, ahdr->avp_value->os.len, fd_g_config->cnf_diamid, fd_g_config->cnf_diamid_len, NULL)) { 595 595 is_dest_host = YES; 596 596 } else { … … 613 613 dr_val = ahdr->avp_value; 614 614 /* Compare the Destination-Realm AVP of the message with our identity */ 615 if (!fd_os_almostcase cmp(dr_val->os.data, dr_val->os.len, fd_g_config->cnf_diamrlm, fd_g_config->cnf_diamrlm_len)) {615 if (!fd_os_almostcasesrch(dr_val->os.data, dr_val->os.len, fd_g_config->cnf_diamrlm, fd_g_config->cnf_diamrlm_len, NULL)) { 616 616 is_dest_realm = YES; 617 617 } else {
Note: See TracChangeset
for help on using the changeset viewer.