/* * We received a response from a remote radius server. * Find the original request, then return. * Returns: 1 replication don't reply * 0 proxy found * -1 error don't reply */ int proxy_receive(REQUEST *request) { VALUE_PAIR *proxypair; VALUE_PAIR *replicatepair; int rcode; proxypair = pairfind(request->config_items, PW_PROXY_TO_REALM); replicatepair = pairfind(request->config_items, PW_REPLICATE_TO_REALM); if (proxypair) { /* Don't do anything*/ } else if (replicatepair) { /* * The request was replicated, so we don't process the response. */ return RLM_MODULE_HANDLED; } else { radlog(L_PROXY, "Proxy reply to packet with no Realm"); return RLM_MODULE_FAIL; } /* * Delete any reply we had accumulated until now. */ pairfree(&request->reply->vps); /* * Run the packet through the post-proxy stage, * BEFORE playing games with the attributes. */ rcode = module_post_proxy(request); /* * Delete the Proxy-State Attributes from the reply. * These include Proxy-State attributes from us and * remote server. */ pairdelete(&request->proxy_reply->vps, PW_PROXY_STATE); /* * Add the attributes left in the proxy reply to * the reply list. */ pairadd(&request->reply->vps, request->proxy_reply->vps); request->proxy_reply->vps = NULL; /* * Free any other configuration items and proxy pairs */ pairfree(&request->config_items); pairfree(&request->proxy->vps); return rcode; }
/* * We received a response from a remote radius server. * Find the original request, then return. * Returns: 1 replication don't reply * 0 proxy found * -1 error don't reply */ int proxy_receive(REQUEST *request) { int rcode; int post_proxy_type = 0; VALUE_PAIR *vp; /* * Delete any reply we had accumulated until now. */ pairfree(&request->reply->vps); /* * Run the packet through the post-proxy stage, * BEFORE playing games with the attributes. */ vp = pairfind(request->config_items, PW_POST_PROXY_TYPE); if (vp) { DEBUG2(" Found Post-Proxy-Type %s", vp->strvalue); post_proxy_type = vp->lvalue; } rcode = module_post_proxy(post_proxy_type, request); /* * Delete the Proxy-State Attributes from the reply. * These include Proxy-State attributes from us and * remote server. */ pairdelete(&request->proxy_reply->vps, PW_PROXY_STATE); /* * Add the attributes left in the proxy reply to * the reply list. */ pairadd(&request->reply->vps, request->proxy_reply->vps); request->proxy_reply->vps = NULL; /* * Free proxy request pairs. */ pairfree(&request->proxy->vps); return rcode; }