--- evaluate.c.orig 2008-05-02 05:07:26.000000000 -0400 +++ evaluate.c 2008-05-08 17:38:18.000000000 -0400 @@ -275,6 +275,7 @@ int result; int lint, rint; VALUE_PAIR *vp = NULL; + VALUE_PAIR *check; char buffer[1024]; rt = rt; /* -Wunused */ @@ -343,6 +344,16 @@ } do_checks: + + /* check for compare callback function */ + if ( (check = pairmake(pleft, pright, token)) ) { + *presult = (radius_callback_compare(request, NULL, check, NULL, NULL) == 0); + pairfree(&check); + if (*presult) return TRUE; + /* don't return FALSE if not found. + * Let the comparisons below have the final say. */ + } + switch (token) { case T_OP_GE: case T_OP_GT: