From b5242e3be0801abd0edebf62955b1d1b6cd3fd7d Mon Sep 17 00:00:00 2001 From: Adam- Date: Tue, 1 Dec 2009 00:06:21 +0000 Subject: Fixed bug #1106 - Anope now keeps track of users cloaked hosts as well as virtual host and will use both in matching for things git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/stable@2679 5417fbe8-f217-4b02-8779-1006273d7864 --- src/nickserv.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/nickserv.c') diff --git a/src/nickserv.c b/src/nickserv.c index 5c3b1b72c..770bff060 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -1281,8 +1281,7 @@ NickCore *findcore(const char *nick) int is_on_access(User * u, NickCore * nc) { int i; - char *buf; - char *buf2 = NULL; + char *buf, *buf2 = NULL, *buf3 = NULL; if (nc->accesscount == 0) return 0; @@ -1294,24 +1293,33 @@ int is_on_access(User * u, NickCore * nc) buf2 = scalloc(strlen(u->username) + strlen(u->vhost) + 2, 1); sprintf(buf2, "%s@%s", u->username, u->vhost); } + if (u->chost) + { + buf3 = scalloc(strlen(u->username) + strlen(u->chost) + 2, 1); + sprintf(buf2, "%s@%s", u->username, u->chost); + } } for (i = 0; i < nc->accesscount; i++) { - if (match_wild_nocase(nc->access[i], buf) - || (ircd->vhost ? match_wild_nocase(nc->access[i], buf2) : 0)) { + if (match_wild_nocase(nc->access[i], buf) || (buf2 && match_wild_nocase(nc->access[i], buf2)) || (buf3 && match_wild_nocase(nc->access[i], buf3))) + { free(buf); if (ircd->vhost) { if (u->vhost) { free(buf2); } + if (u->chost) + free(buf3); } return 1; } } free(buf); - if (ircd->vhost) { - free(buf2); - } + if (buf2) + free(buf2); + if (buf3) + free(buf3); + return 0; } -- cgit