Enable matching local non-secure participants with remote secure participants that allow unauthenticated participants
Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
This commit is contained in:
		
							parent
							
								
									155f8c059d
								
							
						
					
					
						commit
						2fc2cdc225
					
				
					 1 changed files with 11 additions and 11 deletions
				
			
		| 
						 | 
					@ -4774,21 +4774,21 @@ void handshake_end_cb(struct ddsi_handshake *handshake, struct participant *pp,
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int proxy_participant_check_security_info(struct ddsi_domaingv *gv, struct proxy_participant *proxypp)
 | 
					static bool proxy_participant_has_pp_match(struct ddsi_domaingv *gv, struct proxy_participant *proxypp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int r = 0;
 | 
					  bool match = false;
 | 
				
			||||||
  struct participant *pp;
 | 
					  struct participant *pp;
 | 
				
			||||||
  struct entidx_enum_participant est;
 | 
					  struct entidx_enum_participant est;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  entidx_enum_participant_init (&est, gv->entity_index);
 | 
					  entidx_enum_participant_init (&est, gv->entity_index);
 | 
				
			||||||
  while (((pp = entidx_enum_participant_next (&est)) != NULL) && (r == 0)) {
 | 
					  while ((pp = entidx_enum_participant_next (&est)) != NULL && !match)
 | 
				
			||||||
    if (q_omg_is_similar_participant_security_info(pp, proxypp)) {
 | 
					  {
 | 
				
			||||||
      r = 1;
 | 
					    /* remote secure pp can possibly match with local non-secured pp in case allow-unauthenticated pp
 | 
				
			||||||
      break;
 | 
					       is enabled in the remote pp's security settings */
 | 
				
			||||||
 | 
					    match = !q_omg_participant_is_secure (pp) || q_omg_is_similar_participant_security_info (pp, proxypp);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  }
 | 
					  entidx_enum_participant_fini (&est);
 | 
				
			||||||
  entidx_enum_participant_fini(&est);
 | 
					  return match;
 | 
				
			||||||
  return r;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void proxy_participant_create_handshakes(struct ddsi_domaingv *gv, struct proxy_participant *proxypp)
 | 
					static void proxy_participant_create_handshakes(struct ddsi_domaingv *gv, struct proxy_participant *proxypp)
 | 
				
			||||||
| 
						 | 
					@ -4955,9 +4955,9 @@ void new_proxy_participant (struct ddsi_domaingv *gv, const struct ddsi_guid *pp
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    q_omg_security_init_remote_participant (proxypp);
 | 
					    q_omg_security_init_remote_participant (proxypp);
 | 
				
			||||||
    /* check if the proxy participant has a match with a local participant */
 | 
					    /* check if the proxy participant has a match with a local participant */
 | 
				
			||||||
    if (!proxy_participant_check_security_info (gv, proxypp))
 | 
					    if (!proxy_participant_has_pp_match (gv, proxypp))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 //     GVWARNING ("Remote secure participant "PGUIDFMT" not allowed\n", PGUID (*ppguid));
 | 
					      GVWARNING ("Remote secure participant "PGUIDFMT" not allowed\n", PGUID (*ppguid));
 | 
				
			||||||
      free_proxy_participant (proxypp);
 | 
					      free_proxy_participant (proxypp);
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue