From: Alan T. DeKok Date: Fri, 8 May 2009 13:40:07 +0000 (+0200) Subject: Expose radius_get_vp, and make switch {} use it X-Git-Tag: release_2_1_7~164 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e478247cdd0d72ecd21e1834eb00cb6049fe1991;p=thirdparty%2Ffreeradius-server.git Expose radius_get_vp, and make switch {} use it This allows bare words to be used for switch statements. If the statement is a bare word, the server looks for a VALUE_PAIR of that name, and prints its value. --- diff --git a/src/main/evaluate.c b/src/main/evaluate.c index bad147d6b9c..0c31b194042 100644 --- a/src/main/evaluate.c +++ b/src/main/evaluate.c @@ -199,8 +199,7 @@ static const FR_NAME_NUMBER modreturn_table[] = { }; -static int radius_get_vp(REQUEST *request, const char *name, VALUE_PAIR **vp_p) - +int radius_get_vp(REQUEST *request, const char *name, VALUE_PAIR **vp_p) { const char *vp_name = name; REQUEST *myrequest = request; diff --git a/src/main/modcall.c b/src/main/modcall.c index 54e80278cab..3954c7364aa 100644 --- a/src/main/modcall.c +++ b/src/main/modcall.c @@ -569,9 +569,22 @@ int modcall(int component, modcallable *c, REQUEST *request) #ifdef WITH_UNLANG case MOD_SWITCH: - radius_xlat(buffer, sizeof(buffer), - child->name, request, NULL); - + if (!strchr(child->name, '%')) { + VALUE_PAIR *vp = NULL; + + radius_get_vp(request, child->name, + &vp); + if (vp) { + vp_prints_value(buffer, + sizeof(buffer), + vp, 0); + } else { + *buffer = '\0'; + } + } else { + radius_xlat(buffer, sizeof(buffer), + child->name, request, NULL); + } null_case = q = NULL; for(p = g->children; p; p = p->next) { if (!p->name) {