]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
pbx_dundi: DUNDi weight parameter not processed correctly 52/5052/2
authorSean Bright <sean.bright@gmail.com>
Tue, 21 Feb 2017 21:09:47 +0000 (16:09 -0500)
committerSean Bright <sean.bright@gmail.com>
Tue, 21 Feb 2017 23:10:11 +0000 (17:10 -0600)
The DUNDi weight field is not always converted from network byte order
to host byte order. This can result in incorrect weight values and
incorrect selection of DUNDi destinations.

ASTERISK-18731 #close
Reported by: Peter Racz
Patches:
dundi_weight.patch (license #6290) patch uploaded by Peter Racz

Change-Id: Iba3e1a700ff539db57211a7bbc26f7b22ea9a1be

pbx/pbx_dundi.c

index 5ca8a8568ad49e3b4c5088c963159deae5c92824..ff4fa3f30409c4aef5e426fb0f1d94d6bf275503 100644 (file)
@@ -994,9 +994,9 @@ static int dundi_prop_precache(struct dundi_transaction *trans, struct dundi_ies
                                        sizeof(trans->parent->dr[trans->parent->respcount].tech));
                                trans->parent->respcount++;
                                ast_clear_flag_nonstd(trans->parent->hmd, DUNDI_HINT_DONT_ASK);
-                       } else if (trans->parent->dr[z].weight > ies->answers[x]->weight) {
+                       } else if (trans->parent->dr[z].weight > ntohs(ies->answers[x]->weight)) {
                                /* Update weight if appropriate */
-                               trans->parent->dr[z].weight = ies->answers[x]->weight;
+                               trans->parent->dr[z].weight = ntohs(ies->answers[x]->weight);
                        }
                } else
                        ast_log(LOG_NOTICE, "Dropping excessive answers in precache for %s@%s\n",
@@ -1764,9 +1764,9 @@ static int handle_command_response(struct dundi_transaction *trans, struct dundi
                                                                        sizeof(trans->parent->dr[trans->parent->respcount].tech));
                                                                trans->parent->respcount++;
                                                                ast_clear_flag_nonstd(trans->parent->hmd, DUNDI_HINT_DONT_ASK);
-                                                       } else if (trans->parent->dr[z].weight > ies.answers[x]->weight) {
+                                                       } else if (trans->parent->dr[z].weight > ntohs(ies.answers[x]->weight)) {
                                                                /* Update weight if appropriate */
-                                                               trans->parent->dr[z].weight = ies.answers[x]->weight;
+                                                               trans->parent->dr[z].weight = ntohs(ies.answers[x]->weight);
                                                        }
                                                } else
                                                        ast_log(LOG_NOTICE, "Dropping excessive answers to request for %s@%s\n",