OpenDDS::Security::LocalAccessCredentialData Class Reference

#include <LocalCredentialData.h>

Inheritance diagram for OpenDDS::Security::LocalAccessCredentialData:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::Security::LocalAccessCredentialData:
Collaboration graph
[legend]

List of all members.

Public Types

typedef DCPS::RcHandle
< LocalAccessCredentialData
shared_ptr

Public Member Functions

 LocalAccessCredentialData ()
 ~LocalAccessCredentialData ()
CORBA::Boolean load (const DDS::PropertySeq &props,::DDS::Security::SecurityException &ex)
const SSL::Certificateget_ca_cert ()
const SSL::SignedDocumentget_governance_doc ()
const SSL::SignedDocumentget_permissions_doc ()

Private Member Functions

std::string extract_file_name (const std::string &file_parm)
::CORBA::Boolean file_exists (const std::string &name)

Private Attributes

SSL::Certificate::unique_ptr ca_cert_
SSL::SignedDocument::unique_ptr governance_doc_
SSL::SignedDocument::unique_ptr permissions_doc_

Detailed Description

Definition at line 20 of file AccessControl/LocalCredentialData.h.


Member Typedef Documentation

Definition at line 22 of file AccessControl/LocalCredentialData.h.


Constructor & Destructor Documentation

OpenDDS::Security::LocalAccessCredentialData::LocalAccessCredentialData (  ) 

Definition at line 17 of file AccessControl/LocalCredentialData.cpp.

00018     {
00019 
00020     }

OpenDDS::Security::LocalAccessCredentialData::~LocalAccessCredentialData (  ) 

Definition at line 22 of file AccessControl/LocalCredentialData.cpp.

00023     {
00024 
00025     }


Member Function Documentation

std::string OpenDDS::Security::LocalAccessCredentialData::extract_file_name ( const std::string &  file_parm  )  [private]

Definition at line 123 of file AccessControl/LocalCredentialData.cpp.

Referenced by load().

00124     {
00125       std::string del = ":";
00126       u_long pos = file_parm.find_last_of(del);
00127       if ((pos > 0UL) && (pos != file_parm.length() - 1)) {
00128         return file_parm.substr(pos + 1);
00129       }
00130       else {
00131         return std::string("");
00132       }
00133     }

Here is the caller graph for this function:

CORBA::Boolean OpenDDS::Security::LocalAccessCredentialData::file_exists ( const std::string &  name  )  [private]

Definition at line 135 of file AccessControl/LocalCredentialData.cpp.

Referenced by load().

00136     {
00137       struct stat buffer;
00138       return (stat(name.c_str(), &buffer) == 0);
00139     }

Here is the caller graph for this function:

const SSL::Certificate& OpenDDS::Security::LocalAccessCredentialData::get_ca_cert (  )  [inline]

Definition at line 33 of file AccessControl/LocalCredentialData.h.

References ca_cert_.

00034     {
00035       return *ca_cert_;
00036     }

const SSL::SignedDocument& OpenDDS::Security::LocalAccessCredentialData::get_governance_doc (  )  [inline]

Definition at line 38 of file AccessControl/LocalCredentialData.h.

References governance_doc_.

00039     {
00040       return *governance_doc_;
00041     }

const SSL::SignedDocument& OpenDDS::Security::LocalAccessCredentialData::get_permissions_doc (  )  [inline]

Definition at line 43 of file AccessControl/LocalCredentialData.h.

References permissions_doc_.

00044     {
00045       return *permissions_doc_;
00046     }

CORBA::Boolean OpenDDS::Security::LocalAccessCredentialData::load ( const DDS::PropertySeq props,
::DDS::Security::SecurityException ex 
)

Definition at line 27 of file AccessControl/LocalCredentialData.cpp.

References ca_cert_, extract_file_name(), file, file_exists(), governance_doc_, permissions_doc_, OpenDDS::DCPS::unique_ptr< T, Deleter >::reset(), and OpenDDS::Security::CommonUtilities::set_security_error().

00029     {
00030       const std::string file("file:");
00031       bool permission = false,
00032            governance = false,
00033            ca = false;
00034 
00035       for (size_t i = 0; i < props.length(); ++i) {
00036         const std::string name = props[i].name.in();
00037         const std::string value = props[i].value.in();
00038 
00039         if (name == "dds.sec.access.permissions_ca") {
00040           if (value.length() > 0) {
00041             if (value.find(file) != std::string::npos) {
00042               std::string fn = extract_file_name(value);
00043 
00044               if (!fn.empty()) {
00045                 if (!file_exists(fn)) {
00046                   CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Certificate file could not be found");
00047                   return false;
00048                 }
00049               }
00050             }
00051           }
00052           else {
00053             CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Certificate filename not provided");
00054             return false;
00055           }
00056 
00057           ca_cert_.reset(new SSL::Certificate(value));
00058           ca = true;
00059         } else if (name == "dds.sec.access.governance") {
00060           if (value.length() > 0) {
00061             if (value.find(file) != std::string::npos) {
00062               std::string fn = extract_file_name(value);
00063 
00064               if (!fn.empty()) {
00065                 if (!file_exists(fn)) {
00066                   CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Governance file could not be found");
00067                   return false;
00068                 }
00069               }
00070             }
00071           }
00072           else {
00073             CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Governance filename not provided");
00074             return false;
00075           }
00076 
00077           governance_doc_.reset(new SSL::SignedDocument(value));
00078           governance = true;
00079         } else if (name == "dds.sec.access.permissions") {
00080           if (value.length() > 0) {
00081             if (value.find(file) != std::string::npos) {
00082               std::string fn = extract_file_name(value);
00083 
00084               if (!fn.empty()) {
00085                 if (!file_exists(fn)) {
00086                   CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Permissions file could not be found");
00087                   return false;
00088                 }
00089               }
00090             }
00091           }
00092           else {
00093             CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Permissions filename not provided");
00094             return false;
00095           }
00096 
00097           permissions_doc_.reset(new SSL::SignedDocument(value));
00098           permission = true;
00099         }
00100       }
00101 
00102       // If props did not have all 3 properties in it, set the missing properties to an empty string
00103       if (props.length() != 3) {
00104         if (!permission) {
00105           CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Certificate data not provided");
00106           return false;
00107         }
00108 
00109         if (!governance) {
00110           CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Governance data not provided");
00111           return false;
00112         }
00113 
00114         if (!ca) {
00115           CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl::validate_local_permissions: Permissions data not provided");
00116           return false;
00117         }
00118       }
00119 
00120       return true;
00121     }

Here is the call graph for this function:


Member Data Documentation

Definition at line 50 of file AccessControl/LocalCredentialData.h.

Referenced by get_ca_cert(), and load().

Definition at line 51 of file AccessControl/LocalCredentialData.h.

Referenced by get_governance_doc(), and load().

Definition at line 52 of file AccessControl/LocalCredentialData.h.

Referenced by get_permissions_doc(), and load().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1