ATTRIBUTE MS-CHAP-Peer-Challenge 1192 octets
ATTRIBUTE Home-Server-Name 1193 string
-ATTRIBUTE TCP-Session-Key 1194 string
+ATTRIBUTE Originating-Realm-Key 1194 string
+ATTRIBUTE Proxy-To-Originating-Realm 1195 string
#
# Range: 1200-1279
int dual_tls_send_coa_request(rad_listen_t *listener, REQUEST *request);
void listen_coa_add(rad_listen_t *listener, char const *key);
void listen_coa_delete(rad_listen_t *listener);
-rad_listen_t *listen_coa_find(REQUEST *request, char const *key);
+int listen_coa_find(REQUEST *request, char const *key);
#endif
#endif
home->coa_mrt = this->coa_mrt;
home->coa_mrc = this->coa_mrc;
home->coa_mrd = this->coa_mrd;
- home->coa_server = this->server;
+ home->server = this->server;
}
#endif
/*
* Find an active listener by key.
+ *
+ * This function will update request->home_server, and
+ * request->proxy_listener.
*/
-rad_listen_t *listen_coa_find(UNUSED REQUEST *request, UNUSED char const *key)
+int listen_coa_find(UNUSED REQUEST *request, UNUSED char const *key)
{
/*
* Do more things here.
*/
- return NULL;
+ return -1;
}
#endif
return 0;
+#ifdef WITH_COA_TUNNEL
+ } else if (((request->packet->code == PW_CODE_COA_REQUEST) ||
+ (request->packet->code == PW_CODE_DISCONNECT_REQUEST)) &&
+ ((vp = fr_pair_find_by_num(request->config, PW_PROXY_TO_ORIGINATING_REALM, 0, TAG_ANY)) != NULL)) {
+
+ /*
+ * This function will set request->home_server,
+ * and also request->proxy_listener.
+ */
+ if (listen_coa_find(request, vp->vp_strvalue) < 0) return 0;
+
+ /*
+ * Initialise request->proxy, and copy VPs over.
+ */
+ home_server_update_request(request->home_server, request);
+ goto add_proxy_state;
+
} else {
+#endif
return 0;
}
* The RFC's say we have to do this, but FreeRADIUS
* doesn't need it.
*/
+#ifdef WITH_COA_TUNNEL
+add_proxy_state:
+#endif
+
vp = radius_pair_create(request->proxy, &request->proxy->vps, PW_PROXY_STATE, 0);
fr_pair_value_sprintf(vp, "%u", request->packet->id);
if (listener->send_coa && !listener->key) {
VALUE_PAIR *vp = NULL;
- vp = fr_pair_find_by_num(request->config, PW_TCP_SESSION_KEY, 0, TAG_ANY);
+ vp = fr_pair_find_by_num(request->config, PW_ORIGINATING_REALM_KEY, 0, TAG_ANY);
if (vp) {
RDEBUG("Adding send CoA listener with key %s", vp->vp_strvalue);
listen_coa_add(request->listener, vp->vp_strvalue);