--- 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:
