@@ -478,7 +478,16 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
478
478
pc -> log = & rctx -> log ;
479
479
pc -> get = ngx_rtmp_relay_get_peer ;
480
480
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
+
482
491
pc -> socklen = addr -> socklen ;
483
492
pc -> sockaddr = (struct sockaddr * )ngx_palloc (pool , pc -> socklen );
484
493
if (pc -> sockaddr == NULL ) {
@@ -502,12 +511,27 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t *name,
502
511
goto clear ;
503
512
}
504
513
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
+ {
506
530
len = ngx_sock_ntop (pc -> sockaddr ,
507
531
#if (nginx_version >= 1005003 )
508
532
pc -> socklen ,
509
533
#endif
510
- buf , NGX_SOCKADDR_STRLEN , 0 );
534
+ buf , NGX_SOCKADDR_STRLEN , 1 );
511
535
512
536
addr_conf -> addr_text .data = ngx_pcalloc (pool , len );
513
537
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,
520
544
ngx_memcpy (addr_conf -> addr_text .data , buf , len );
521
545
}
522
546
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
-
539
547
addr_conf -> default_server = ngx_pcalloc (pool ,
540
548
sizeof (ngx_rtmp_core_srv_conf_t ));
541
549
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,
592
600
593
601
rctx = NULL ;
594
602
save = target -> url ;
603
+ ngx_memzero (& url , sizeof (ngx_str_t ));
595
604
596
605
if (ngx_strlchr (target -> url .url .data ,
597
606
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,
628
637
629
638
error :
630
639
target -> url = save ;
640
+ if (url .len ) {
641
+ ngx_free (url .data );
642
+ ngx_memzero (& url , sizeof (ngx_str_t ));
643
+ }
631
644
632
645
return rctx ;
633
646
}
0 commit comments