[Asterisk-cvs] asterisk/channels chan_iax2.c,1.123,1.124
markster at lists.digium.com
markster at lists.digium.com
Tue Apr 20 20:28:45 CDT 2004
Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv13725/channels
Modified Files:
chan_iax2.c
Log Message:
Select user by more logical grounds when no user is specified (bug #1458, sorta)
Index: chan_iax2.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_iax2.c,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -d -r1.123 -r1.124
--- chan_iax2.c 20 Apr 2004 15:14:06 -0000 1.123
+++ chan_iax2.c 21 Apr 2004 00:33:09 -0000 1.124
@@ -3191,7 +3191,8 @@
/* Start pessimistic */
int res = -1;
int version = 2;
- struct iax2_user *user;
+ struct iax2_user *user, *best = NULL;
+ int bestscore = 0;
int gotcapability=0;
if (!iaxs[callno])
return res;
@@ -3240,11 +3241,45 @@
&& ast_apply_ha(user->ha, sin) /* Access is permitted from this IP */
&& (!strlen(iaxs[callno]->context) || /* No context specified */
apply_context(user->contexts, iaxs[callno]->context))) { /* Context is permitted */
- break;
+ if (strlen(iaxs[callno]->username)) {
+ /* Exact match, stop right now. */
+ best = user;
+ break;
+ } else if (!strlen(user->secret)) {
+ /* No required authentication */
+ if (user->ha) {
+ /* There was host authentication and we passed, bonus! */
+ if (bestscore < 4) {
+ bestscore = 4;
+ best = user;
+ }
+ } else {
+ /* No host access, but no secret, either, not bad */
+ if (bestscore < 3) {
+ bestscore = 3;
+ best = user;
+ }
+ }
+ } else {
+ if (user->ha) {
+ /* Authentication, but host access too, eh, it's something.. */
+ if (bestscore < 2) {
+ bestscore = 2;
+ best = user;
+ }
+ } else {
+ /* Authentication and no host access... This is our baseline */
+ if (bestscore < 1) {
+ bestscore = 1;
+ best = user;
+ }
+ }
+ }
}
user = user->next;
}
ast_mutex_unlock(&userl.lock);
+ user = best;
#ifdef MYSQL_FRIENDS
if (!user && mysql && strlen(iaxs[callno]->username) && (strlen(iaxs[callno]->username) < 128)) {
user = mysql_user(iaxs[callno]->username);
More information about the svn-commits
mailing list