@@ -3909,7 +3909,7 @@ static int proxy_to_virtual_server(REQUEST *request)
39093909 uint32_t error_cause = 0 ;
39103910
39113911 if (request -> packet -> dst_port == 0 ) {
3912- WARN ("Cannot proxy an internal request" );
3912+ RWDEBUG ("Cannot proxy an internal request" );
39133913 return 0 ;
39143914 }
39153915
@@ -3968,6 +3968,17 @@ static int proxy_to_virtual_server(REQUEST *request)
39683968 return -1 ; /* so we call request_finish */
39693969}
39703970
3971+ static int rad_proxy_to_virtual_server (REQUEST * request )
3972+ {
3973+ fr_assert (request -> original_handle != NULL );
3974+
3975+ request -> handle = request -> original_handle ;
3976+ request -> original_handle = NULL ;
3977+
3978+ (void ) proxy_to_virtual_server (request );
3979+
3980+ return RLM_MODULE_OK ;
3981+ }
39713982
39723983static int request_proxy (REQUEST * request )
39733984{
@@ -4145,10 +4156,17 @@ static int request_proxy_anew(REQUEST *request)
41454156 * server.
41464157 */
41474158 if (home -> virtual_server ) {
4159+ if (request -> packet -> dst_port == 0 ) {
4160+ RWDEBUG ("Cannot proxy an internal request" );
4161+ goto post_proxy_fail ;
4162+ }
4163+
41484164 request -> home_server = home ;
41494165 TALLOC_FREE (request -> proxy );
41504166
4151- (void ) proxy_to_virtual_server (request );
4167+ request -> original_handle = request -> handle ;
4168+ request -> handle = rad_proxy_to_virtual_server ;
4169+ request_queue_or_run (request , request -> process );
41524170 return 0 ;
41534171 }
41544172
0 commit comments