OpenDDS  Snapshot(2023/04/28-20:55)
Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
OpenDDS::Security::SecurityRegistry Class Reference

#include <SecurityRegistry.h>

Collaboration diagram for OpenDDS::Security::SecurityRegistry:
Collaboration graph
[legend]

Classes

class  SecurityConfigEntry
 

Public Member Functions

void release ()
 
SecurityPluginInst_rch get_plugin_inst (const OPENDDS_STRING &plugin_name, bool attempt_fix=true)
 
void register_plugin (const OPENDDS_STRING &plugin_name, SecurityPluginInst_rch plugin)
 
SecurityConfig_rch create_config (const OPENDDS_STRING &config_name)
 
SecurityConfig_rch create_config (const OPENDDS_STRING &config_name, SecurityPluginInst_rch plugin)
 
bool has_no_configs () const
 
SecurityConfig_rch get_config (const OPENDDS_STRING &config_name) const
 
SecurityConfig_rch default_config () const
 
void default_config (const SecurityConfig_rch &cfg)
 
SecurityConfig_rch builtin_config () const
 
void builtin_config (const SecurityConfig_rch &cfg)
 
int load_security_configuration (ACE_Configuration_Heap &cf)
 

Static Public Member Functions

static SecurityRegistryinstance ()
 Return a singleton instance of this class. More...
 
static void close ()
 Close the singleton instance of this class. More...
 

Static Public Attributes

static const char * DEFAULT_CONFIG_NAME = "_OPENDDS_DEFAULT_CONFIG"
 
static const char * BUILTIN_CONFIG_NAME = "_OPENDDS_BUILTIN_CONFIG"
 

Private Types

typedef DCPS::RcHandle< SecurityConfigEntrySecurityConfigEntry_rch
 
typedef ACE_SYNCH_MUTEX LockType
 
typedef ACE_Guard< LockTypeGuardType
 

Private Member Functions

typedef OPENDDS_MAP (OPENDDS_STRING, SecurityConfig_rch) ConfigMap
 
typedef OPENDDS_MAP (OPENDDS_STRING, SecurityPluginInst_rch) InstMap
 
typedef OPENDDS_MAP (OPENDDS_STRING, OPENDDS_STRING) LibDirectiveMap
 
typedef OPENDDS_MAP (OPENDDS_STRING, SecurityConfigEntry_rch) ConfigEntryMap
 
 SecurityRegistry ()
 
 ~SecurityRegistry ()
 
int load_security_sections (ACE_Configuration_Heap &cf, ConfigEntryMap &entries)
 
void load_security_plugin_lib (const OPENDDS_STRING &security_plugin_type)
 
bool find_config (const OPENDDS_STRING &name, SecurityConfig_rch &config)
 
bool add_config (const OPENDDS_STRING &name, SecurityConfig_rch &config)
 

Private Attributes

ConfigEntryMap config_entries_
 
ConfigMap config_map_
 
InstMap registered_plugins_
 
LibDirectiveMap lib_directive_map_
 
SecurityConfig_rch default_config_
 
SecurityConfig_rch builtin_config_
 
LockType lock_
 
LockType default_load_lock_
 

Static Private Attributes

static const char * DEFAULT_INST_PREFIX = "_OPENDDS_"
 
static const char * DEFAULT_PLUGIN_NAME = "BuiltIn"
 
static const char * SECURITY_SECTION_NAME = "security"
 
static const char * ACCESS_CTRL_PLUGIN_NAME = "access_ctrl_plugin"
 
static const char * AUTHENTICATION_PLUGIN_NAME = "auth_plugin"
 
static const char * CRYPTO_PLUGIN_NAME = "crypto_plugin"
 

Friends

class ACE_Singleton< SecurityRegistry, ACE_Recursive_Thread_Mutex >
 

Detailed Description

The TheSecurityRegistry is a singleton object which provides a mechanism to the application code to configure OpenDDS's security plugins.

Definition at line 34 of file SecurityRegistry.h.

Member Typedef Documentation

◆ GuardType

Definition at line 142 of file SecurityRegistry.h.

◆ LockType

Definition at line 141 of file SecurityRegistry.h.

◆ SecurityConfigEntry_rch

Definition at line 123 of file SecurityRegistry.h.

Constructor & Destructor Documentation

◆ SecurityRegistry()

OpenDDS::Security::SecurityRegistry::SecurityRegistry ( )
private

Definition at line 94 of file SecurityRegistry.cpp.

References DBG_ENTRY_LVL, DEFAULT_PLUGIN_NAME, and lib_directive_map_.

95 {
96  DBG_ENTRY_LVL("SecurityRegistry", "SecurityRegistry", 6);
97  lib_directive_map_[DEFAULT_PLUGIN_NAME] = "dynamic OpenDDS_Security Service_Object * OpenDDS_Security:_make_BuiltInPluginLoader()";
98 }
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

◆ ~SecurityRegistry()

OpenDDS::Security::SecurityRegistry::~SecurityRegistry ( )
private

Definition at line 49 of file SecurityRegistry.cpp.

References DBG_ENTRY_LVL, and release().

50 {
51  DBG_ENTRY_LVL("SecurityRegistry", "~SecurityRegistry", 6);
52  release();
53 }
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

Member Function Documentation

◆ add_config()

bool OpenDDS::Security::SecurityRegistry::add_config ( const OPENDDS_STRING name,
SecurityConfig_rch config 
)
private

Definition at line 403 of file SecurityRegistry.cpp.

References config_map_, lock_, and name.

Referenced by create_config().

404 {
405  GuardType guard(lock_);
406 
407  bool added_config = false;
408  ConfigMap::iterator iConfig = config_map_.find(name);
409  if (iConfig == config_map_.end()) {
410  config_map_[name] = config;
411  added_config = true;
412  } else {
413  // Someone else added this already. Use it instead
414  config = iConfig->second;
415  added_config = true;
416  }
417 
418  return added_config;
419 }
const char *const name
Definition: debug.cpp:60

◆ builtin_config() [1/2]

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::builtin_config ( ) const

Definition at line 278 of file SecurityRegistry.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, ACE_Guard< ACE_LOCK >::acquire(), builtin_config_, default_load_lock_, DEFAULT_PLUGIN_NAME, lib_directive_map_, lock_, OPENDDS_ASSERT, ACE_Service_Config::process_directive(), and ACE_Guard< ACE_LOCK >::release().

279 {
280 #if defined(OPENDDS_SECURITY)
282  GuardType guard(lock_);
283  if (!builtin_config_) {
284 #if !defined(ACE_AS_STATIC_LIBS)
285  LibDirectiveMap::const_iterator lib_iter = lib_directive_map_.find(DEFAULT_PLUGIN_NAME);
286  OPENDDS_ASSERT(lib_iter != lib_directive_map_.end());
287  ACE_TString directive = ACE_TEXT_CHAR_TO_TCHAR(lib_iter->second.c_str());
288  guard.release();
289  ACE_Service_Config::process_directive(directive.c_str());
290  guard.acquire();
291 #endif
292  }
293 #endif
294  return builtin_config_;
295 }
static int process_directive(const ACE_TCHAR directive[])
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)

◆ builtin_config() [2/2]

void OpenDDS::Security::SecurityRegistry::builtin_config ( const SecurityConfig_rch cfg)

Definition at line 298 of file SecurityRegistry.cpp.

References builtin_config_, and lock_.

299 {
300  GuardType guard(lock_);
301  builtin_config_ = config;
302 }

◆ close()

void OpenDDS::Security::SecurityRegistry::close ( void  )
static

◆ create_config() [1/2]

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::create_config ( const OPENDDS_STRING config_name)

Definition at line 130 of file SecurityRegistry.cpp.

References ACE_ERROR, ACE_TEXT(), add_config(), config_entries_, find_config(), get_plugin_inst(), OpenDDS::DCPS::RcHandle< T >::is_nil(), and LM_ERROR.

131 {
132  // If the configuration instance already exists, then it can be reused.
133  // Otherwise create a new one and save it for any later needs
134  SecurityConfig_rch existing_config;
135  if (find_config(config_name, existing_config)) {
136  return existing_config;
137  }
138 
139  // This is making an assumption that the entry map is only written
140  // to in single-threaded operation, and all acess from that point on
141  // is read-only
142  ConfigEntryMap::const_iterator iEntry = config_entries_.find(config_name);
143  if (iEntry == config_entries_.end()) {
144  ACE_ERROR((LM_ERROR,
145  ACE_TEXT("(%P|%t) SecurityRegistry::create_config: ")
146  ACE_TEXT("config=%C does not exist.\n"),
147  config_name.c_str()));
148  return SecurityConfig_rch();
149  }
150 
151  // This will load any libraries that need to be loaded, and use the
152  // resulting plugin instance objects to create the concrete implementations
153  const SecurityConfigEntry_rch& entry = iEntry->second;
154  SecurityPluginInst_rch auth_plugin_inst = get_plugin_inst(entry->get_auth_name());
155  if (auth_plugin_inst.is_nil()) {
156  ACE_ERROR((LM_ERROR,
157  ACE_TEXT("(%P|%t) SecurityRegistry::create_config: ")
158  ACE_TEXT("Failed to load authentication plugin %C\n"),
159  entry->get_auth_name().c_str()));
160  return SecurityConfig_rch();
161  }
162 
163  SecurityPluginInst_rch ac_plugin_inst = get_plugin_inst(entry->get_access_control_name());
164  if (ac_plugin_inst.is_nil()) {
165  ACE_ERROR((LM_ERROR,
166  ACE_TEXT("(%P|%t) SecurityRegistry::create_config: ")
167  ACE_TEXT("Failed to load access control plugin %C\n"),
168  entry->get_access_control_name().c_str()));
169  return SecurityConfig_rch();
170  }
171 
172  SecurityPluginInst_rch crypto_plugin_inst = get_plugin_inst(entry->get_crypto_name());
173  if (crypto_plugin_inst.is_nil()) {
174  ACE_ERROR((LM_ERROR,
175  ACE_TEXT("(%P|%t) SecurityRegistry::create_config: ")
176  ACE_TEXT("Failed to load crypto plugin %C\n"),
177  entry->get_crypto_name().c_str()));
178  return SecurityConfig_rch();
179  }
180 
181  // Create the new config and try to add it to the container
182  // of existing configs. If this fails for some reason, then
183  // release the new config and fail
184  SecurityConfig_rch new_config =
185  DCPS::make_rch<SecurityConfig>(config_name,
186 #ifdef OPENDDS_SECURITY
187  auth_plugin_inst->create_authentication(),
188  ac_plugin_inst->create_access_control(),
189  crypto_plugin_inst->create_crypto_key_exchange(),
190  crypto_plugin_inst->create_crypto_key_factory(),
191  crypto_plugin_inst->create_crypto_transform(),
192  DCPS::RcHandle<Utility>(),
193 #endif
194  entry->get_properties());
195 
196  if (!add_config(config_name, new_config)) {
197  ACE_ERROR((LM_ERROR,
198  ACE_TEXT("(%P|%t) SecurityRegistry::create_config: ")
199  ACE_TEXT("Error storing config instance %C\n"),
200  config_name.c_str()));
201  return SecurityConfig_rch();
202  }
203 
204  return new_config;
205 }
#define ACE_ERROR(X)
bool add_config(const OPENDDS_STRING &name, SecurityConfig_rch &config)
bool find_config(const OPENDDS_STRING &name, SecurityConfig_rch &config)
DCPS::RcHandle< SecurityPluginInst > SecurityPluginInst_rch
ACE_TEXT("TCP_Factory")
DCPS::RcHandle< SecurityConfigEntry > SecurityConfigEntry_rch
SecurityPluginInst_rch get_plugin_inst(const OPENDDS_STRING &plugin_name, bool attempt_fix=true)
DCPS::RcHandle< SecurityConfig > SecurityConfig_rch

◆ create_config() [2/2]

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::create_config ( const OPENDDS_STRING config_name,
SecurityPluginInst_rch  plugin 
)

Definition at line 208 of file SecurityRegistry.cpp.

References ACE_ERROR, ACE_TEXT(), add_config(), find_config(), and LM_ERROR.

210 {
211 #ifndef OPENDDS_SECURITY
212  ACE_UNUSED_ARG(plugin);
213 #endif
214 
215  SecurityConfig_rch existing_config;
216  if (find_config(config_name, existing_config)) {
217  return existing_config;
218  }
219 
220  SecurityConfig_rch new_config =
221  DCPS::make_rch<SecurityConfig>(config_name,
222 #ifdef OPENDDS_SECURITY
223  plugin->create_authentication(),
224  plugin->create_access_control(),
225  plugin->create_crypto_key_exchange(),
226  plugin->create_crypto_key_factory(),
227  plugin->create_crypto_transform(),
228  plugin->create_utility(),
229 #endif
230  ConfigPropertyList());
231 
232  if (!add_config(config_name, new_config)) {
233  ACE_ERROR((LM_ERROR,
234  ACE_TEXT("(%P|%t) SecurityRegistry::create_config: ")
235  ACE_TEXT("Error storing config instance %C\n"),
236  config_name.c_str()));
237  return SecurityConfig_rch();
238  }
239 
240  return new_config;
241 }
#define ACE_ERROR(X)
bool add_config(const OPENDDS_STRING &name, SecurityConfig_rch &config)
bool find_config(const OPENDDS_STRING &name, SecurityConfig_rch &config)
ACE_TEXT("TCP_Factory")
DCPS::RcHandle< SecurityConfig > SecurityConfig_rch

◆ default_config() [1/2]

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::default_config ( ) const

Definition at line 252 of file SecurityRegistry.cpp.

References default_config_, lock_, and TheServiceParticipant.

253 {
254 #if defined(OPENDDS_SECURITY)
255  GuardType guard(lock_);
256  if (!default_config_ && !TheServiceParticipant->get_security()) {
257  Authentication_var a;
258  AccessControl_var b;
259  CryptoKeyExchange_var c;
260  CryptoKeyFactory_var d;
261  CryptoTransform_var e;
262  default_config_ = DCPS::make_rch<SecurityConfig>("NoPlugins", a, b, c, d, e,
263  DCPS::RcHandle<Utility>(),
264  ConfigPropertyList());
265  }
266 #endif
267  return default_config_;
268 }
#define TheServiceParticipant

◆ default_config() [2/2]

void OpenDDS::Security::SecurityRegistry::default_config ( const SecurityConfig_rch cfg)

Definition at line 271 of file SecurityRegistry.cpp.

References default_config_, and lock_.

272 {
273  GuardType guard(lock_);
274  default_config_ = config;
275 }

◆ find_config()

bool OpenDDS::Security::SecurityRegistry::find_config ( const OPENDDS_STRING name,
SecurityConfig_rch config 
)
private

Definition at line 388 of file SecurityRegistry.cpp.

References config_map_, and lock_.

Referenced by create_config().

389 {
390  GuardType guard(lock_);
391 
392  bool found_config = false;
393  ConfigMap::iterator iConfig = config_map_.find(name);
394  if (iConfig != config_map_.end()) {
395  config = iConfig->second;
396  found_config = true;
397  }
398 
399  return found_config;
400 }
const char *const name
Definition: debug.cpp:60

◆ get_config()

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::get_config ( const OPENDDS_STRING config_name) const

Definition at line 244 of file SecurityRegistry.cpp.

References config_map_, and lock_.

245 {
246  GuardType guard(lock_);
247  ConfigMap::const_iterator found = config_map_.find(config_name);
248  return found == config_map_.end() ? SecurityConfig_rch() : found->second;
249 }
DCPS::RcHandle< SecurityConfig > SecurityConfig_rch

◆ get_plugin_inst()

SecurityPluginInst_rch OpenDDS::Security::SecurityRegistry::get_plugin_inst ( const OPENDDS_STRING plugin_name,
bool  attempt_fix = true 
)

If the plugin is registered then return it. If it's not and attempt_fix is true, then try to load and return the plugin, otherwise return a nil rch.

Definition at line 421 of file SecurityRegistry.cpp.

References ACE_Guard< ACE_LOCK >::acquire(), find(), load_security_plugin_lib(), lock_, registered_plugins_, and ACE_Guard< ACE_LOCK >::release().

Referenced by create_config().

423 {
424  GuardType guard(lock_);
425 
426  SecurityPluginInst_rch plugin_inst;
427 
428  if (find(registered_plugins_, plugin_name, plugin_inst) != 0 && attempt_fix) {
429 #if !defined(ACE_AS_STATIC_LIBS)
430  guard.release();
431  // Not present, try to load library
432  load_security_plugin_lib(plugin_name);
433  guard.acquire();
434 
435  // Try to find it again
436  find(registered_plugins_, plugin_name, plugin_inst);
437 #endif
438  }
439 
440  return plugin_inst;
441 }
DCPS::RcHandle< SecurityPluginInst > SecurityPluginInst_rch
int find(const PG_Property_Set &decoder, const ACE_CString &key, TYPE &value)
void load_security_plugin_lib(const OPENDDS_STRING &security_plugin_type)

◆ has_no_configs()

bool OpenDDS::Security::SecurityRegistry::has_no_configs ( ) const

Definition at line 443 of file SecurityRegistry.cpp.

References config_map_, lock_, and OPENDDS_END_VERSIONED_NAMESPACE_DECL.

444 {
445  GuardType guard(lock_);
446  return config_map_.empty();
447 }

◆ instance()

SecurityRegistry * OpenDDS::Security::SecurityRegistry::instance ( void  )
static

Return a singleton instance of this class.

Definition at line 83 of file SecurityRegistry.cpp.

References ACE_Unmanaged_Singleton< TYPE, ACE_LOCK >::instance().

◆ load_security_configuration()

int OpenDDS::Security::SecurityRegistry::load_security_configuration ( ACE_Configuration_Heap cf)

For internal use by OpenDDS DCPS layer: Transfer the configuration in ACE_Configuration_Heap object to the SecurityRegistry. This is called by the Service_Participant at initialization time. This function iterates each section in the configuration file, and creates SecurityConfigEntry objects and adds them to the registry.

Definition at line 305 of file SecurityRegistry.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), ACE_TEXT_CHAR_TO_TCHAR, ACE_String_Base< char >::c_str(), config_entries_, ACE_Configuration_Heap::enumerate_sections(), LM_ERROR, ACE_Configuration_Heap::open_section(), OPENDDS_STRING, OpenDDS::DCPS::processSections(), OpenDDS::DCPS::pullValues(), ACE_Configuration::root_section(), SECURITY_SECTION_NAME, and ACE_OS::strcmp().

306 {
307  const ACE_Configuration_Section_Key& root = cf.root_section();
308  ACE_TString sect_name;
309 
310  for (int index = 0; cf.enumerate_sections(root, index, sect_name) == 0; ++index) {
312  // found the section, now iterate through subsections...
314  if (cf.open_section(root, sect_name.c_str(), false, sect) != 0) {
315  ACE_ERROR_RETURN((LM_ERROR,
316  ACE_TEXT("(%P|%t) SecurityRegistry::load_plugin_properties: ")
317  ACE_TEXT("failed to open section %s\n"),
318  sect_name.c_str()),
319  -1);
320  }
321 
322  // Ensure there are no properties in this section
323  DCPS::ValueMap vm;
324  if (DCPS::pullValues(cf, sect, vm) > 0) {
325  // There are values inside [transport]
326  ACE_ERROR_RETURN((LM_ERROR,
327  ACE_TEXT("(%P|%t) SecurityRegistry::load_plugin_properties: ")
328  ACE_TEXT("[%s] sections must have a section name\n"),
329  sect_name.c_str()),
330  -1);
331  }
332  // Process the subsections of this section
333  DCPS::KeyList keys;
334  if (DCPS::processSections(cf, sect, keys) != 0) {
335  ACE_ERROR_RETURN((LM_ERROR,
336  ACE_TEXT("(%P|%t) SecurityRegistry::load_plugin_properties: ")
337  ACE_TEXT("too many nesting layers in [%s] section.\n"),
338  sect_name.c_str()),
339  -1);
340  }
341 
342  // Save the properties configured for each security entry
343  for (DCPS::KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
344  const OPENDDS_STRING& entry_name = it->first;
345  // Duplicate entry check
346  if (config_entries_.find(entry_name) != config_entries_.end()) {
347  ACE_ERROR_RETURN((LM_ERROR,
348  ACE_TEXT("(%P|%t) SecurityRegistry::load_plugin_properties: ")
349  ACE_TEXT("duplicate sections named [%s/%C].\n"),
350  sect_name.c_str(), entry_name.c_str()),
351  -1);
352  }
353 
354  // Copy any existing properties in the entry and create the SecurityConfigEntry, which
355  // will be stored until actual plugin instances are needed for this configuration
356  SecurityConfigEntry_rch newEntry =
357  DCPS::make_rch<SecurityConfigEntry>(it->first);
358  DCPS::ValueMap values;
359  DCPS::pullValues(cf, it->second, values);
360  for (DCPS::ValueMap::const_iterator val = values.begin(); val != values.end(); ++val) {
361  newEntry->add_property(val->first, val->second);
362  }
363 
364  config_entries_[it->first] = newEntry;
365  }
366  }
367  }
368 
369  return 0;
370 }
const char * c_str(void) const
virtual const ACE_Configuration_Section_Key & root_section(void) const
#define OPENDDS_STRING
static const char * SECURITY_SECTION_NAME
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)
int strcmp(const char *s, const char *t)
ACE_TEXT("TCP_Factory")
DCPS::RcHandle< SecurityConfigEntry > SecurityConfigEntry_rch
virtual int open_section(const ACE_Configuration_Section_Key &base, const ACE_TCHAR *sub_section, bool create, ACE_Configuration_Section_Key &result)
int processSections(ACE_Configuration_Heap &cf, const ACE_Configuration_Section_Key &key, KeyList &subsections)
Definition: ConfigUtils.cpp:41
virtual int enumerate_sections(const ACE_Configuration_Section_Key &key, int index, ACE_TString &name)
#define ACE_ERROR_RETURN(X, Y)
int pullValues(ACE_Configuration_Heap &cf, const ACE_Configuration_Section_Key &key, ValueMap &values)
Definition: ConfigUtils.cpp:17

◆ load_security_plugin_lib()

void OpenDDS::Security::SecurityRegistry::load_security_plugin_lib ( const OPENDDS_STRING security_plugin_type)
private

For internal use by OpenDDS DCPS layer: Dynamically load the library for the supplied security plugin type.

Definition at line 373 of file SecurityRegistry.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, ACE_String_Base< char >::c_str(), lib_directive_map_, lock_, ACE_Service_Config::process_directive(), and ACE_Guard< ACE_LOCK >::release().

Referenced by get_plugin_inst().

374 {
375  ACE_UNUSED_ARG(security_plugin_type);
376 #if !defined(ACE_AS_STATIC_LIBS)
377  GuardType guard(lock_);
378  LibDirectiveMap::iterator lib_iter = lib_directive_map_.find(security_plugin_type);
379  if (lib_iter != lib_directive_map_.end()) {
380  ACE_TString directive = ACE_TEXT_CHAR_TO_TCHAR(lib_iter->second.c_str());
381  guard.release();
383  }
384 #endif
385 }
const char * c_str(void) const
static int process_directive(const ACE_TCHAR directive[])
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)

◆ load_security_sections()

int OpenDDS::Security::SecurityRegistry::load_security_sections ( ACE_Configuration_Heap cf,
ConfigEntryMap &  entries 
)
private

◆ OPENDDS_MAP() [1/4]

typedef OpenDDS::Security::SecurityRegistry::OPENDDS_MAP ( OPENDDS_STRING  ,
SecurityConfig_rch   
)
private

◆ OPENDDS_MAP() [2/4]

typedef OpenDDS::Security::SecurityRegistry::OPENDDS_MAP ( OPENDDS_STRING  ,
SecurityPluginInst_rch   
)
private

◆ OPENDDS_MAP() [3/4]

typedef OpenDDS::Security::SecurityRegistry::OPENDDS_MAP ( OPENDDS_STRING  ,
OPENDDS_STRING   
)
private

◆ OPENDDS_MAP() [4/4]

typedef OpenDDS::Security::SecurityRegistry::OPENDDS_MAP ( OPENDDS_STRING  ,
SecurityConfigEntry_rch   
)
private

◆ register_plugin()

void OpenDDS::Security::SecurityRegistry::register_plugin ( const OPENDDS_STRING plugin_name,
SecurityPluginInst_rch  plugin 
)

Definition at line 114 of file SecurityRegistry.cpp.

References ACE_ERROR, ACE_TEXT(), LM_ERROR, lock_, and registered_plugins_.

116 {
117  GuardType guard(lock_);
118 
119  if (registered_plugins_.find(plugin_name) != registered_plugins_.end()) {
120  ACE_ERROR((LM_ERROR,
121  ACE_TEXT("(%P|%t) SecurityRegistry::register_plugin: ")
122  ACE_TEXT("plugin=%C already exists.\n"),
123  plugin_name.c_str()));
124  } else {
125  registered_plugins_.insert(std::make_pair(plugin_name, plugin));
126  }
127 }
#define ACE_ERROR(X)
ACE_TEXT("TCP_Factory")

◆ release()

void OpenDDS::Security::SecurityRegistry::release ( void  )

This will shutdown all Security plugin objects.

Client Application calls this method to tear down the security framework.

Definition at line 101 of file SecurityRegistry.cpp.

References config_map_, DBG_ENTRY_LVL, lock_, and registered_plugins_.

Referenced by ~SecurityRegistry().

102 {
103  DBG_ENTRY_LVL("SecurityRegistry", "release", 6);
104  GuardType guard(lock_);
105 
106  for (InstMap::iterator iter = registered_plugins_.begin(); iter != registered_plugins_.end(); ++iter) {
107  iter->second->shutdown();
108  }
109  registered_plugins_.clear();
110  config_map_.clear();
111 }
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

Friends And Related Function Documentation

◆ ACE_Singleton< SecurityRegistry, ACE_Recursive_Thread_Mutex >

Definition at line 88 of file SecurityRegistry.h.

Member Data Documentation

◆ ACCESS_CTRL_PLUGIN_NAME

const char * OpenDDS::Security::SecurityRegistry::ACCESS_CTRL_PLUGIN_NAME = "access_ctrl_plugin"
staticprivate

Definition at line 93 of file SecurityRegistry.h.

◆ AUTHENTICATION_PLUGIN_NAME

const char * OpenDDS::Security::SecurityRegistry::AUTHENTICATION_PLUGIN_NAME = "auth_plugin"
staticprivate

Definition at line 94 of file SecurityRegistry.h.

◆ builtin_config_

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::builtin_config_
mutableprivate

Definition at line 149 of file SecurityRegistry.h.

Referenced by builtin_config().

◆ BUILTIN_CONFIG_NAME

const char * OpenDDS::Security::SecurityRegistry::BUILTIN_CONFIG_NAME = "_OPENDDS_BUILTIN_CONFIG"
static

Definition at line 44 of file SecurityRegistry.h.

◆ config_entries_

ConfigEntryMap OpenDDS::Security::SecurityRegistry::config_entries_
private

Definition at line 144 of file SecurityRegistry.h.

Referenced by create_config(), and load_security_configuration().

◆ config_map_

ConfigMap OpenDDS::Security::SecurityRegistry::config_map_
private

Definition at line 145 of file SecurityRegistry.h.

Referenced by add_config(), find_config(), get_config(), has_no_configs(), and release().

◆ CRYPTO_PLUGIN_NAME

const char * OpenDDS::Security::SecurityRegistry::CRYPTO_PLUGIN_NAME = "crypto_plugin"
staticprivate

Definition at line 95 of file SecurityRegistry.h.

◆ default_config_

SecurityConfig_rch OpenDDS::Security::SecurityRegistry::default_config_
mutableprivate

Definition at line 148 of file SecurityRegistry.h.

Referenced by default_config().

◆ DEFAULT_CONFIG_NAME

const char * OpenDDS::Security::SecurityRegistry::DEFAULT_CONFIG_NAME = "_OPENDDS_DEFAULT_CONFIG"
static

Definition at line 43 of file SecurityRegistry.h.

Referenced by OpenDDS::Security::BuiltInPluginLoader::init().

◆ DEFAULT_INST_PREFIX

const char * OpenDDS::Security::SecurityRegistry::DEFAULT_INST_PREFIX = "_OPENDDS_"
staticprivate

Definition at line 90 of file SecurityRegistry.h.

◆ default_load_lock_

LockType OpenDDS::Security::SecurityRegistry::default_load_lock_
mutableprivate

Definition at line 152 of file SecurityRegistry.h.

Referenced by builtin_config().

◆ DEFAULT_PLUGIN_NAME

const char * OpenDDS::Security::SecurityRegistry::DEFAULT_PLUGIN_NAME = "BuiltIn"
staticprivate

Definition at line 91 of file SecurityRegistry.h.

Referenced by builtin_config(), and SecurityRegistry().

◆ lib_directive_map_

LibDirectiveMap OpenDDS::Security::SecurityRegistry::lib_directive_map_
private

Definition at line 147 of file SecurityRegistry.h.

Referenced by builtin_config(), load_security_plugin_lib(), and SecurityRegistry().

◆ lock_

LockType OpenDDS::Security::SecurityRegistry::lock_
mutableprivate

◆ registered_plugins_

InstMap OpenDDS::Security::SecurityRegistry::registered_plugins_
private

Definition at line 146 of file SecurityRegistry.h.

Referenced by get_plugin_inst(), register_plugin(), and release().

◆ SECURITY_SECTION_NAME

const char * OpenDDS::Security::SecurityRegistry::SECURITY_SECTION_NAME = "security"
staticprivate

Definition at line 92 of file SecurityRegistry.h.

Referenced by load_security_configuration().


The documentation for this class was generated from the following files: