// Join the user to the group void JoinUserToGroup(USER *u, USERGROUP *g) { // Validate arguments if (u == NULL) { return; } if (g != NULL) { // Join Lock(u->lock); { Lock(g->lock); { if (u->Group != NULL) { // Remove the user from current group first // ReleaseGroup(u->Group); u->Group = NULL; Free(u->GroupName); u->GroupName = NULL; } // Join the user to the group u->GroupName = CopyStr(g->Name); u->Group = g; AddRef(g->ref); } Unlock(g->lock); } Unlock(u->lock); } else { // Withdrawal Lock(u->lock); { if (u->Group != NULL) { // Remove the user from current group ReleaseGroup(u->Group); u->Group = NULL; Free(u->GroupName); u->GroupName = NULL; } } Unlock(u->lock); } }
// Cleanup the user object void CleanupUser(USER *u) { // Validate arguments if (u == NULL) { return; } DeleteLock(u->lock); Free(u->Name); Free(u->RealName); Free(u->Note); Free(u->GroupName); if (u->Group != NULL) { ReleaseGroup(u->Group); } // Free authntication data FreeAuthData(u->AuthType, u->AuthData); if (u->Policy) { // Free policy data Free(u->Policy); } FreeTraffic(u->Traffic); Free(u); }
// Get the policy to be applied for the user POLICY *SamGetUserPolicy(HUB *h, char *username) { POLICY *ret = NULL; // Validate arguments if (h == NULL || username == NULL) { return NULL; } AcLock(h); { USER *u; u = AcGetUser(h, username); if (u) { USERGROUP *g = NULL; Lock(u->lock); { if (u->Policy != NULL) { ret = ClonePolicy(u->Policy); } g = u->Group; if (g != NULL) { AddRef(g->ref); } } Unlock(u->lock); ReleaseUser(u); u = NULL; if (ret == NULL) { if (g != NULL) { Lock(g->lock); { ret = ClonePolicy(g->Policy); } Unlock(g->lock); } } if (g != NULL) { ReleaseGroup(g); } } } AcUnlock(h); return ret; }
// Delete the group bool AcDeleteGroup(HUB *h, char *name) { USERGROUP *g; UINT i; // Validate arguments if (h == NULL || name == NULL) { return false; } g = AcGetGroup(h, name); if (g == NULL) { return false; } if (Delete(h->HubDb->GroupList, g)) { ReleaseGroup(g); } for (i = 0;i < LIST_NUM(h->HubDb->UserList);i++) { USER *u = LIST_DATA(h->HubDb->UserList, i); Lock(u->lock); { if (u->Group == g) { JoinUserToGroup(u, NULL); } } Unlock(u->lock); } ReleaseGroup(g); return true; }
// Validate group name bool AcIsGroup(HUB *h, char *name) { USERGROUP *g; // Validate arguments if (h == NULL || name == NULL || NO_ACCOUNT_DB(h)) { return false; } g = AcGetGroup(h, name); if (g == NULL) { return false; } ReleaseGroup(g); return true; }
void CSoundGroup::Reload() { m_index = 0; // reset our index #if CONFIG2_AUDIO ReleaseGroup(); if ( g_SoundManager ) { for (size_t i = 0; i < filenames.size(); i++) { VfsPath thePath = m_filepath/filenames[i]; CSoundData* itemData = CSoundData::SoundDataFromFile(thePath); if (itemData == NULL) HandleError(L"error loading sound", thePath, ERR::FAIL); else snd_group.push_back(itemData->IncrementCount()); } if (TestFlag(eRandOrder)) random_shuffle(snd_group.begin(), snd_group.end()); } #endif // CONFIG2_AUDIO }
CSoundGroup::~CSoundGroup() { // clean up all the handles from this group. ReleaseGroup(); }