From dfcb1477dc31cf7ae1e3b66fc25fb3d8acd5f163 Mon Sep 17 00:00:00 2001 From: venaas Date: Tue, 15 May 2007 14:19:44 +0000 Subject: fixed bug in id2server git-svn-id: https://svn.testnett.uninett.no/radsecproxy/trunk@87 e88ac4ed-0b26-0410-9574-a7f39faa03bf --- radsecproxy.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'radsecproxy.c') diff --git a/radsecproxy.c b/radsecproxy.c index 779a1fa..6e1e3b5 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -992,6 +993,7 @@ int msmppdecrypt(uint8_t *text, uint8_t len, uint8_t *shared, uint8_t sharedlen, } struct server *id2server(char *id, uint8_t len) { +#ifndef REGEXP int i; char *idrealm; struct server *deflt = NULL; @@ -1004,29 +1006,22 @@ struct server *id2server(char *id, uint8_t len) { idrealm = "-"; len = 1; } -#if 0 - char **realm; - for (i = 0; i < server_count; i++) { - for (realm = servers[i].realms; *realm; realm++) { - if ((strlen(*realm) == 1 && **realm == '*') || - (strlen(*realm) == len && !memcmp(idrealm, *realm, len))) { - debug(DBG_DBG, "found matching realm: %s, host %s", *realm, servers[i].peer.host); - return servers + i; - } - } - } - return NULL; -#else + for (i = 0; i < realm_count; i++) { if (!deflt && realms[i].name[0] == '*' && realms[i].name[1] == '\0') deflt = realms[i].server; else if (!strncasecmp(idrealm, realms[i].name, len)) { - debug(DBG_DBG, "found matching realm: %s, host %s", realms[i].name, servers[i].peer.host); - return servers + i; + debug(DBG_DBG, "found matching realm: %s, host %s", realms[i].name, realms[i].server->peer.host); + return realms[i].server; } } return deflt; -#endif +#else + for (i = 0; i < realm_count; i++) + if (!regexec(&realms[i].regex, id, 0, NULL, 0)) + return realms[i].server; + return NULL; +#endif } int rqinqueue(struct server *to, struct client *from, uint8_t id) { @@ -1665,6 +1660,8 @@ void addrealm(char *value, char *server) { memset(realm, 0, sizeof(struct realm)); realm->name = stringcopy(value, 0); realm->server = servers + i; + if (regcomp(&realm->regex, value, REG_ICASE | REG_NOSUB)) + debugx(1, DBG_ERR, "addrealm: failed to compile regular expression %s", value); debug(DBG_DBG, "addrealm: added realm %s for server %s", value, server); } -- cgit v1.2.3