bool CPermissionsCache::lookup(ISecUser& sec_user) { if(!isCacheEnabled()) return false; const char* username = sec_user.getName(); if(!username || !*username) return false; string key(username); ReadLockBlock readLock(m_userCacheRWLock ); MapUserCache::iterator it = m_userCache.find(key); if (it == m_userCache.end()) return false; CachedUser* user = (CachedUser*)(it->second); time_t now; time(&now); if(user->getTimestamp() < (now - m_cacheTimeout)) { m_userCache.erase(username); delete user; return false; } const char* cachedpw = user->queryUser()->credentials().getPassword(); StringBuffer pw(sec_user.credentials().getPassword()); if(cachedpw && pw.length() > 0) { StringBuffer md5pbuf; md5_string(pw, md5pbuf); if(strcmp(cachedpw, md5pbuf.str()) == 0) { #ifdef _DEBUG DBGLOG("CACHE: CPermissionsCache Found validated user %s", username); #endif // Copy cached user to the sec_user structure, but still keep the original clear text password. user->queryUser()->copyTo(sec_user); sec_user.credentials().setPassword(pw.str()); return true; } else { m_userCache.erase(username); delete user; return false; } } return false; }
ISecUser* CPermissionsCache::getCachedUser( ISecUser& sec_user) { if(!isCacheEnabled()) return NULL; const char* username = sec_user.getName(); if(!username || !*username) return NULL; synchronized block(m_userCacheMonitor); CachedUser* user = m_userCache[username]; if(user == NULL) return NULL; return LINK(user->queryUser()); }
bool CPermissionsCache::lookup(ISecUser& sec_user) { if(!isCacheEnabled()) return false; const char* username = sec_user.getName(); if(!username || !*username) return false; synchronized block(m_userCacheMonitor); CachedUser* user = m_userCache[username]; if(user == NULL) return false; time_t now; time(&now); if(user->getTimestamp() < (now - m_cacheTimeout)) { m_userCache.erase(username); delete user; return false; } const char* cachedpw = user->queryUser()->credentials().getPassword(); StringBuffer pw(sec_user.credentials().getPassword()); if(cachedpw && pw.length() > 0) { StringBuffer md5pbuf; md5_string(pw, md5pbuf); if(strcmp(cachedpw, md5pbuf.str()) == 0) { // Copy cached user to the sec_user structure, but still keep the original clear text password. user->queryUser()->copyTo(sec_user); sec_user.credentials().setPassword(pw.str()); return true; } else { m_userCache.erase(username); delete user; return false; } } return false; }
ISecUser* CPermissionsCache::getCachedUser( ISecUser& sec_user) { if(!isCacheEnabled()) return NULL; const char* username = sec_user.getName(); if(!username || !*username) return NULL; string key(username); ReadLockBlock readLock(m_userCacheRWLock ); MapUserCache::iterator it = m_userCache.find(key); if (it == m_userCache.end()) return NULL; CachedUser* user = (CachedUser*)(it->second); return LINK(user->queryUser()); }
void CPermissionsCache::add(ISecUser& sec_user) { if(!isCacheEnabled() || &sec_user == NULL) return; const char* username = sec_user.getName(); if(!username || !*username) return; synchronized block(m_userCacheMonitor); CachedUser* user = m_userCache[username]; if(user) { m_userCache.erase(username); delete user; } m_userCache[username] = new CachedUser(sec_user.clone()); }
void CPermissionsCache::add(ISecUser& sec_user) { if(!isCacheEnabled()) return; const char* username = sec_user.getName(); if(!username || !*username) return; synchronized block(m_userCacheMonitor); string key(username); MapUserCache::iterator it = m_userCache.find(key); CachedUser* user = NULL; if (it != m_userCache.end()) { user = (CachedUser*)(it->second); m_userCache.erase(username); delete user; } m_userCache[username] = new CachedUser(sec_user.clone()); }
void CPermissionsCache::add(ISecUser& sec_user) { if(!isCacheEnabled()) return; const char* username = sec_user.getName(); if(!username || !*username) return; string key(username); WriteLockBlock writeLock(m_userCacheRWLock ); MapUserCache::iterator it = m_userCache.find(key); CachedUser* user = NULL; if (it != m_userCache.end()) { user = (CachedUser*)(it->second); m_userCache.erase(username); delete user; } #ifdef _DEBUG DBGLOG("CACHE: CPermissionsCache Adding cached user %s", username); #endif m_userCache[username] = new CachedUser(sec_user.clone()); }