@@ -478,7 +478,16 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
478478 pc -> log = & rctx -> log ;
479479 pc -> get = ngx_rtmp_relay_get_peer ;
480480 pc -> free = ngx_rtmp_relay_free_peer ;
481- pc -> name = & addr -> name ;
481+
482+ pc -> name = ngx_palloc (pool , sizeof (ngx_str_t ) + addr -> name .len );
483+ if (pc -> name == NULL ) {
484+ goto clear ;
485+ }
486+
487+ pc -> name -> len = addr -> name .len ;
488+ pc -> name -> data = (u_char * ) pc -> name + sizeof (ngx_str_t );
489+ ngx_memcpy (pc -> name -> data , addr -> name .data , addr -> name .len );
490+
482491 pc -> socklen = addr -> socklen ;
483492 pc -> sockaddr = (struct sockaddr * )ngx_palloc (pool , pc -> socklen );
484493 if (pc -> sockaddr == NULL ) {
@@ -502,12 +511,27 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
502511 goto clear ;
503512 }
504513
505- if (addr -> sockaddr -> sa_family != AF_UNIX ) {
514+ #if (NGX_HAVE_UNIX_DOMAIN )
515+ if (addr -> sockaddr -> sa_family == AF_UNIX ) {
516+ addr_conf -> addr_text .len = target -> url .host .len ;
517+ addr_conf -> addr_text .data = ngx_pcalloc (pool ,
518+ addr_conf -> addr_text .len );
519+ if (addr_conf -> addr_text .data == NULL ) {
520+ ngx_log_error (NGX_LOG_ERR , racf -> log , 0 ,
521+ "relay: allocation for unix address failed" );
522+ goto clear ;
523+ }
524+
525+ ngx_memcpy (addr_conf -> addr_text .data , target -> url .host .data ,
526+ addr_conf -> addr_text .len );
527+ } else
528+ #endif
529+ {
506530 len = ngx_sock_ntop (pc -> sockaddr ,
507531#if (nginx_version >= 1005003 )
508532 pc -> socklen ,
509533#endif
510- buf , NGX_SOCKADDR_STRLEN , 0 );
534+ buf , NGX_SOCKADDR_STRLEN , 1 );
511535
512536 addr_conf -> addr_text .data = ngx_pcalloc (pool , len );
513537 if (addr_conf -> addr_text .data == NULL ) {
@@ -520,22 +544,6 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
520544 ngx_memcpy (addr_conf -> addr_text .data , buf , len );
521545 }
522546
523- #if (NGX_HAVE_UNIX_DOMAIN )
524- if (addr -> sockaddr -> sa_family == AF_UNIX ) {
525- addr_conf -> addr_text .len = target -> url .host .len ;
526- addr_conf -> addr_text .data = ngx_pcalloc (pool ,
527- addr_conf -> addr_text .len );
528- if (addr_conf -> addr_text .data == NULL ) {
529- ngx_log_error (NGX_LOG_ERR , racf -> log , 0 ,
530- "relay: allocation for unix address failed" );
531- goto clear ;
532- }
533-
534- ngx_memcpy (addr_conf -> addr_text .data , target -> url .host .data ,
535- addr_conf -> addr_text .len );
536- }
537- #endif
538-
539547 addr_conf -> default_server = ngx_pcalloc (pool ,
540548 sizeof (ngx_rtmp_core_srv_conf_t ));
541549 if (addr_conf -> default_server == NULL ) {
@@ -592,6 +600,7 @@ ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t *name,
592600
593601 rctx = NULL ;
594602 save = target -> url ;
603+ ngx_memzero (& url , sizeof (ngx_str_t ));
595604
596605 if (ngx_strlchr (target -> url .url .data ,
597606 target -> url .url .data + target -> url .url .len , '$' ))
@@ -628,6 +637,10 @@ ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t *name,
628637
629638error :
630639 target -> url = save ;
640+ if (url .len ) {
641+ ngx_free (url .data );
642+ ngx_memzero (& url , sizeof (ngx_str_t ));
643+ }
631644
632645 return rctx ;
633646}
0 commit comments