OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | Private Member Functions | Private Attributes | List of all members
OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask Class Reference
Inheritance diagram for OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask:
Collaboration graph
[legend]

Public Member Functions

 RevokePermissionsTask (const DCPS::TimeSource &time_source, DCPS::ReactorInterceptor_rch interceptor, AccessControlBuiltInImpl &impl)
 
virtual ~RevokePermissionsTask ()
 
void insert (DDS::Security::PermissionsHandle pm_handle, const time_t &expiration)
 
void erase (DDS::Security::PermissionsHandle pm_handle)
 
- Public Member Functions inherited from OpenDDS::DCPS::SporadicTask
 SporadicTask (const TimeSource &time_source, RcHandle< ReactorInterceptor > interceptor)
 
virtual ~SporadicTask ()
 
void schedule (const TimeDuration &delay)
 
void cancel ()
 
- Public Member Functions inherited from OpenDDS::DCPS::RcEventHandler
 RcEventHandler ()
 
ACE_Event_Handler::Reference_Count add_reference ()
 
ACE_Event_Handler::Reference_Count remove_reference ()
 
- Public Member Functions inherited from ACE_Event_Handler
virtual ~ACE_Event_Handler (void)
 
virtual ACE_HANDLE get_handle (void) const
 
virtual void set_handle (ACE_HANDLE)
 
virtual int priority (void) const
 
virtual void priority (int priority)
 
virtual int handle_input (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_output (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_exception (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_exit (ACE_Process *)
 
virtual int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
 
virtual int handle_signal (int signum, siginfo_t *=0, ucontext_t *=0)
 
virtual int resume_handler (void)
 
virtual int handle_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual int handle_group_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual void reactor (ACE_Reactor *reactor)
 
virtual ACE_Reactorreactor (void) const
 
virtual ACE_Reactor_Timer_Interfacereactor_timer_interface (void) const
 
Reference_Counting_Policyreference_counting_policy (void)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Private Member Functions

typedef OPENDDS_MAP (DDS::Security::PermissionsHandle, time_t) HandleToExpiration
 
typedef OPENDDS_MULTIMAP (time_t, DDS::Security::PermissionsHandle) ExpirationToHandle
 
virtual void execute (const DCPS::MonotonicTimePoint &now)
 

Private Attributes

AccessControlBuiltInImplimpl_
 
ACE_Thread_Mutex lock_
 
HandleToExpiration handle_to_expiration_
 
ExpirationToHandle expiration_to_handle_
 

Additional Inherited Members

- Public Types inherited from ACE_Event_Handler
typedef long Reference_Count
 
- Static Public Member Functions inherited from ACE_Event_Handler
static ACE_THR_FUNC_RETURN read_adapter (void *event_handler)
 
static int register_stdin_handler (ACE_Event_Handler *eh, ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr, int flags=THR_DETACHED)
 
static int remove_stdin_handler (ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr)
 
- Public Attributes inherited from ACE_Event_Handler
 LO_PRIORITY
 
 HI_PRIORITY
 
 NULL_MASK
 
 READ_MASK
 
 WRITE_MASK
 
 EXCEPT_MASK
 
 ACCEPT_MASK
 
 CONNECT_MASK
 
 TIMER_MASK
 
 QOS_MASK
 
 GROUP_QOS_MASK
 
 SIGNAL_MASK
 
 ALL_EVENTS_MASK
 
 RWE_MASK
 
 DONT_CALL
 
 ACE_EVENT_HANDLER_NOT_RESUMED
 
 ACE_REACTOR_RESUMES_HANDLER
 
 ACE_APPLICATION_RESUMES_HANDLER
 
- Protected Types inherited from ACE_Event_Handler
typedef ACE_Atomic_Op< ACE_SYNCH_MUTEX, Reference_CountAtomic_Reference_Count
 
- Protected Member Functions inherited from OpenDDS::DCPS::SporadicTask
long get_timer_id ()
 
- Protected Member Functions inherited from ACE_Event_Handler
 ACE_Event_Handler (ACE_Reactor *=0, int priority=ACE_Event_Handler::LO_PRIORITY)
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Attributes inherited from ACE_Event_Handler
Atomic_Reference_Count reference_count_
 

Detailed Description

Definition at line 261 of file AccessControlBuiltInImpl.h.

Constructor & Destructor Documentation

◆ RevokePermissionsTask()

OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::RevokePermissionsTask ( const DCPS::TimeSource time_source,
DCPS::ReactorInterceptor_rch  interceptor,
AccessControlBuiltInImpl impl 
)

Definition at line 1546 of file AccessControlBuiltInImpl.cpp.

1549  : SporadicTask(time_source, interceptor)
1550  , impl_(impl)
1551 { }
SporadicTask(const TimeSource &time_source, RcHandle< ReactorInterceptor > interceptor)
Definition: SporadicTask.h:23

◆ ~RevokePermissionsTask()

OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::~RevokePermissionsTask ( )
virtual

Definition at line 1553 of file AccessControlBuiltInImpl.cpp.

References ACE_DEBUG, ACE_TEXT(), expiration_to_handle_, handle_to_expiration_, LM_DEBUG, and OpenDDS::DCPS::security_debug.

1554 {
1555  if (DCPS::security_debug.bookkeeping) {
1556  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1557  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::~RevokePermissionsTask %@ handle_to_expiration_ %B expiration_to_handle_ %B\n"),
1558  this,
1559  handle_to_expiration_.size(),
1560  expiration_to_handle_.size()));
1561  }
1562 }
#define ACE_DEBUG(X)
ACE_TEXT("TCP_Factory")
OpenDDS_Dcps_Export SecurityDebug security_debug
Definition: debug.cpp:32

Member Function Documentation

◆ erase()

void OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::erase ( DDS::Security::PermissionsHandle  pm_handle)

Definition at line 1615 of file AccessControlBuiltInImpl.cpp.

References ACE_DEBUG, ACE_GUARD, ACE_TEXT(), expiration_to_handle_, handle_to_expiration_, LM_DEBUG, lock_, and OpenDDS::DCPS::security_debug.

Referenced by OpenDDS::Security::AccessControlBuiltInImpl::return_permissions_handle().

1616 {
1617  ACE_GUARD(ACE_Thread_Mutex, guard, lock_);
1618 
1619  HandleToExpiration::iterator iter = handle_to_expiration_.find(pm_handle);
1620  if (iter == handle_to_expiration_.end()) {
1621  return;
1622  }
1623 
1624  const time_t expiration = iter->second;
1625 
1626  std::pair<ExpirationToHandle::iterator, ExpirationToHandle::iterator> er =
1627  expiration_to_handle_.equal_range(expiration);
1628  while (er.first != er.second) {
1629  if (er.first->second == pm_handle) {
1630  expiration_to_handle_.erase(er.first++);
1631  if (DCPS::security_debug.bookkeeping) {
1632  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1633  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::erase expiration_to_handle_ (total %B)\n"),
1634  expiration_to_handle_.size()));
1635  }
1636  } else {
1637  ++er.first;
1638  }
1639  }
1640 
1641  handle_to_expiration_.erase(pm_handle);
1642  if (DCPS::security_debug.bookkeeping) {
1643  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1644  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::execute handle_to_expiration_ (total %B)\n"),
1645  handle_to_expiration_.size()));
1646  }
1647 }
#define ACE_DEBUG(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_TEXT("TCP_Factory")
OpenDDS_Dcps_Export SecurityDebug security_debug
Definition: debug.cpp:32

◆ execute()

void OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::execute ( const DCPS::MonotonicTimePoint now)
privatevirtual

Implements OpenDDS::DCPS::SporadicTask.

Definition at line 1650 of file AccessControlBuiltInImpl.cpp.

References ACE_DEBUG, ACE_GUARD, ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, expiration_to_handle_, gmtime(), handle_to_expiration_, impl_, OpenDDS::Security::AccessControlBuiltInImpl::listener_ptr_, LM_DEBUG, LM_ERROR, OpenDDS::Security::AccessControlBuiltInImpl::local_ac_perms_, lock_, mktime(), OpenDDS::DCPS::SporadicTask::schedule(), OpenDDS::DCPS::security_debug, and time().

1651 {
1652  ACE_GUARD(ACE_Thread_Mutex, guard, lock_);
1653 
1654  const time_t current_date_time = time(0);
1655  tm* current_time_tm = gmtime(&current_date_time);
1656  const time_t cur_utc_time = mktime(current_time_tm);
1657 
1658  for (ExpirationToHandle::iterator pos = expiration_to_handle_.begin(), limit = expiration_to_handle_.end();
1659  pos != limit && pos->first < cur_utc_time;) {
1660  const ::DDS::Security::PermissionsHandle pm_handle = pos->second;
1661  ACPermsMap::iterator iter = impl_.local_ac_perms_.find(pm_handle);
1662  if (iter == impl_.local_ac_perms_.end()) {
1663  ACE_DEBUG((LM_ERROR, ACE_TEXT("(%P|%t) AccessControlBuiltInImpl::Revoke_Permissions_Timer::execute: ")
1664  ACE_TEXT("pm_handle %d not found!\n"), pm_handle));
1665  }
1666  impl_.local_ac_perms_.erase(iter);
1667  if (DCPS::security_debug.bookkeeping) {
1668  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1669  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::execute local_ac_perms_ (total %B)\n"),
1670  impl_.local_ac_perms_.size()));
1671  }
1672 
1673  // If a listener exists, call on_revoke_permissions
1674  if (impl_.listener_ptr_ && !impl_.listener_ptr_->on_revoke_permissions(&impl_, pm_handle)) {
1675  ACE_DEBUG((LM_ERROR, ACE_TEXT("(%P|%t) AccessControlBuiltInImpl::Revoke_Permissions_Timer::execute: ")
1676  ACE_TEXT("on_revoke_permissions failed for pm_handle %d!\n"), pm_handle));
1677  }
1678 
1680  ACE_DEBUG((LM_DEBUG,
1681  ACE_TEXT("(%P|%t) AccessControlBuiltInImpl::Revoke_Permissions_Timer::execute: Completed...\n")));
1682  }
1683 
1684  handle_to_expiration_.erase(pm_handle);
1685  if (DCPS::security_debug.bookkeeping) {
1686  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1687  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::execute handle_to_expiration_ (total %B)\n"),
1688  handle_to_expiration_.size()));
1689  }
1690 
1691  expiration_to_handle_.erase(pos++);
1692  if (DCPS::security_debug.bookkeeping) {
1693  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1694  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::execute expiration_to_handle_ (total %B)\n"),
1695  expiration_to_handle_.size()));
1696  }
1697  }
1698 
1699  if (!expiration_to_handle_.empty()) {
1700  const TimeDuration duration = std::min(TimeDuration(expiration_to_handle_.begin()->first - cur_utc_time), MAX_DURATION);
1701  schedule(duration);
1702  }
1703 }
#define ACE_DEBUG(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
time_t time(time_t *tloc=0)
void schedule(const TimeDuration &delay)
Definition: SporadicTask.h:36
struct tm * gmtime(const time_t *clock)
ACE_TEXT("TCP_Factory")
DDS::Security::AccessControlListener_ptr listener_ptr_
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
time_t mktime(struct tm *timeptr)
OpenDDS_Dcps_Export SecurityDebug security_debug
Definition: debug.cpp:32

◆ insert()

void OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::insert ( DDS::Security::PermissionsHandle  pm_handle,
const time_t &  expiration 
)

Definition at line 1572 of file AccessControlBuiltInImpl.cpp.

References ACE_DEBUG, ACE_GUARD, ACE_TEXT(), OpenDDS::DCPS::SporadicTask::cancel(), expiration_to_handle_, gmtime(), handle_to_expiration_, LM_DEBUG, lock_, mktime(), OpenDDS::DCPS::SporadicTask::schedule(), OpenDDS::DCPS::security_debug, and time().

Referenced by OpenDDS::Security::AccessControlBuiltInImpl::check_create_datareader(), OpenDDS::Security::AccessControlBuiltInImpl::check_create_datawriter(), OpenDDS::Security::AccessControlBuiltInImpl::check_remote_datareader(), and OpenDDS::Security::AccessControlBuiltInImpl::check_remote_datawriter().

1574 {
1575  ACE_GUARD(ACE_Thread_Mutex, guard, lock_);
1576 
1577  if (handle_to_expiration_.count(pm_handle)) {
1578  return;
1579  }
1580 
1581  const time_t current_date_time = time(0);
1582  tm* current_time_tm = gmtime(&current_date_time);
1583  const time_t cur_utc_time = mktime(current_time_tm);
1584  const TimeDuration duration = std::min(TimeDuration(expiration - cur_utc_time), MAX_DURATION);
1585 
1586  const bool empty_before = expiration_to_handle_.empty();
1587 
1588  handle_to_expiration_[pm_handle] = expiration;
1589 
1590  if (DCPS::security_debug.bookkeeping) {
1591  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1592  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::insert handle_to_expiration_ (total %B)\n"),
1593  handle_to_expiration_.size()));
1594  }
1595 
1596  ExpirationToHandle::const_iterator pos =
1597  expiration_to_handle_.insert(ExpirationToHandle::value_type(expiration, pm_handle));
1598 
1599  if (DCPS::security_debug.bookkeeping) {
1600  ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) {bookkeeping} ")
1601  ACE_TEXT("AccessControlBuiltInImpl::RevokePermissionsTask::insert expiration_to_handle_ (total %B)\n"),
1602  expiration_to_handle_.size()));
1603  }
1604 
1605  if (!empty_before && pos == expiration_to_handle_.begin()) {
1606  cancel();
1607  }
1608 
1609  if (pos == expiration_to_handle_.begin()) {
1610  schedule(duration);
1611  }
1612 }
#define ACE_DEBUG(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
time_t time(time_t *tloc=0)
void schedule(const TimeDuration &delay)
Definition: SporadicTask.h:36
struct tm * gmtime(const time_t *clock)
ACE_TEXT("TCP_Factory")
time_t mktime(struct tm *timeptr)
OpenDDS_Dcps_Export SecurityDebug security_debug
Definition: debug.cpp:32

◆ OPENDDS_MAP()

typedef OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::OPENDDS_MAP ( DDS::Security::PermissionsHandle  ,
time_t   
)
private

◆ OPENDDS_MULTIMAP()

typedef OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::OPENDDS_MULTIMAP ( time_t  ,
DDS::Security::PermissionsHandle   
)
private

Member Data Documentation

◆ expiration_to_handle_

ExpirationToHandle OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::expiration_to_handle_
private

Definition at line 280 of file AccessControlBuiltInImpl.h.

Referenced by erase(), execute(), insert(), and ~RevokePermissionsTask().

◆ handle_to_expiration_

HandleToExpiration OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::handle_to_expiration_
private

Definition at line 279 of file AccessControlBuiltInImpl.h.

Referenced by erase(), execute(), insert(), and ~RevokePermissionsTask().

◆ impl_

AccessControlBuiltInImpl& OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::impl_
private

Definition at line 276 of file AccessControlBuiltInImpl.h.

Referenced by execute().

◆ lock_

ACE_Thread_Mutex OpenDDS::Security::AccessControlBuiltInImpl::RevokePermissionsTask::lock_
mutableprivate

Definition at line 278 of file AccessControlBuiltInImpl.h.

Referenced by erase(), execute(), and insert().


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