VError removeGroupFromGroup(VJSParms_callStaticFunction& ioParms, CUAGGroup* inGroup, const VString& s) { VError err = VE_OK; CUAGDirectory* dir = inGroup->GetDirectory(); CUAGGroup* group; { StErrorContextInstaller errs(false); group = dir->RetainGroup(s); if (group == nil) { VUUID id; id.FromString(s); group = dir->RetainGroup(id); } } if (group != nil) { err = inGroup->RemoveFromGroup(group); } else { err = ThrowError(VE_UAG_GROUPNAME_DOES_NOT_EXIST, s); } QuickReleaseRefCountable(group); return err; }
bool VJSDebuggerSettings::UserCanDebug(IAuthenticationInfos* inAuthenticationInfos) const { bool canDebug = false; CUAGSession* uagSession; uagSession = inAuthenticationInfos->GetUAGSession(); if (!uagSession) { CUAGDirectory* uagDirectory = fServerSolution->RetainUAGDirectory(); if (!uagDirectory) { // No directory defined at all so access is not protected canDebug = true; } else { VError vError = VE_OK; uagSession = uagDirectory->MakeDefaultSession(&vError); xbox_assert( vError == VE_OK ); inAuthenticationInfos->SetUAGSession(uagSession); //inAuthenticationInfos->UAGSessionHasChanged(); } ReleaseRefCountable( &uagDirectory ); } if (!canDebug && uagSession) { CUAGDirectory* uagDir = uagSession->GetDirectory(); XBOX::VUUID uuid; if (!uagDir->GetSpecialGroupID(CUAGDirectory::DebuggerGroup, uuid)) { xbox_assert(false); } else { if (uagSession->BelongsTo(uuid)) { canDebug = true; } } } return canDebug; }
VError removeGroupFromGroup(VJSParms_callStaticFunction& ioParms, CUAGGroup* inGroup, const VString& s) { VError err = VE_OK; CUAGDirectory* dir = inGroup->GetDirectory(); CUAGGroup* group = dir->RetainGroup(s); if (group == nil) { VUUID id; id.FromString(s); group = dir->RetainGroup(id); } if (group != nil) { err = inGroup->RemoveFromGroup(group); } else { err = ThrowError(VE_UAG_GROUPNAME_DOES_NOT_EXIST, s); } return err; }
bool VJSDebuggerSettings::UserCanDebug ( const UniChar* inUserName, const UniChar* inUserPassword ) const { if ( fServerSolution == 0 ) { xbox_assert ( false ); return false; // Something went really wrong } if ( !NeedsAuthentication ( ) ) return true; CUAGDirectory* uagDirectory = fServerSolution-> RetainUAGDirectory ( ); if ( uagDirectory == 0 ) return true; // No directory defined at all so access is not protected VString vstrUserName ( inUserName ); VString vstrUserPassword ( inUserPassword ); bool bCanDebug = false; VError vError = VE_OK; CUAGSession* cSession = NULL; if ((uagDirectory != NULL) && uagDirectory->HasLoginListener()) { // sc 22/06/2012, custom JavaScript authentication support VectorOfApplication applications; fServerSolution->GetApplications( applications); VRIAServerProject *app = (!applications.empty()) ? applications.front() : NULL; if (app != NULL) { VJSGlobalContext *globalContext = app->RetainJSContext( vError, true, NULL); if (vError == VE_OK) { if (testAssert(globalContext != NULL)) { VJSContext jsContext( globalContext); cSession = uagDirectory-> OpenSession ( inUserName, inUserPassword, &vError, &jsContext ); } else { vError = VE_UNKNOWN_ERROR; } } app->ReleaseJSContext( globalContext, NULL); } } else { cSession = uagDirectory-> OpenSession ( inUserName, inUserPassword, &vError, NULL ); } if ( cSession != 0 && vError == VE_OK ) { VUUID vuuidDebuggerGroup; bool bOK = uagDirectory-> GetSpecialGroupID ( CUAGDirectory::DebuggerGroup, vuuidDebuggerGroup ); xbox_assert ( bOK ); if ( cSession-> BelongsTo ( vuuidDebuggerGroup ) ) bCanDebug = true; } ReleaseRefCountable ( &cSession ); ReleaseRefCountable ( &uagDirectory ); return bCanDebug; }
CUAGDirectory* VRIAServerSolution::_OpenUAGDirectory( VError& outError) { outError = VE_OK; CUAGDirectory *directory = nil; CUAGManager *uag = VComponentManager::RetainComponentOfType<CUAGManager>(); if (uag != NULL) { if (testAssert(fDesignSolution != NULL)) { StUseLogger logger; VMicrosecondsCounter usCounter; VProjectItem *dirItem = fDesignSolution->GetProjectItemFromTag( kUAGDirectoryTag); if (dirItem != NULL) { VFilePath directoryPath; dirItem->GetFilePath( directoryPath); usCounter.Start(); logger.Log( fLoggerID, eL4JML_Information, L"Opening the users and groups directory"); VFile file( directoryPath); directory = uag->RetainDirectory( file, FA_READ_WRITE, NULL, NULL, &outError); } if (directory == NULL && outError == VE_OK) { VFilePath solpath; fDesignSolution->GetSolutionFilePath(solpath); solpath.SetExtension(RIAFileKind::kDirectoryFileExtension); VFile defaultDirFile(solpath); directory = uag->RetainDirectory( defaultDirFile, FA_READ_WRITE, NULL, NULL, &outError, NULL, true); } if (directory != NULL && outError == VE_OK) { // Create an "admin" user if needed CUAGGroup *adminGroup = directory->RetainSpecialGroup( CUAGDirectory::AdminGroup); CUAGGroup *debuggerGroup = directory->RetainSpecialGroup( CUAGDirectory::DebuggerGroup); if ((adminGroup != NULL) && (debuggerGroup != NULL)) { StErrorContextInstaller errorContext( VE_UAG_USERNAME_DOES_NOT_EXIST, VE_OK); CUAGUser *adminUser = directory->RetainUser( L"admin"); if (adminUser == NULL) adminUser = directory->AddOneUser( L"admin", L"", L"", outError); if ((outError == VE_OK) && (adminUser != NULL)) { VUUID adminUserID, userID; adminUser->GetID( adminUserID); CUAGUserVector users; adminGroup->RetainUsers( users); bool hasAdminUser = false; for (CUAGUserVector::iterator userIter = users.begin() ; (userIter != users.end()) && !hasAdminUser ; ++userIter) { (*userIter)->GetID( userID); hasAdminUser = (adminUserID == userID); } if (!hasAdminUser) outError = adminUser->PutIntoGroup( adminGroup); if (outError == VE_OK) { users.clear(); debuggerGroup->RetainUsers( users); hasAdminUser = false; for (CUAGUserVector::iterator userIter = users.begin() ; (userIter != users.end()) && !hasAdminUser ; ++userIter) { (*userIter)->GetID( userID); hasAdminUser = (adminUserID == userID); } if (!hasAdminUser) outError = adminUser->PutIntoGroup( debuggerGroup); } } ReleaseRefCountable( &adminUser); } QuickReleaseRefCountable( adminGroup); QuickReleaseRefCountable( debuggerGroup); } if (directory != NULL && outError == VE_OK) { VString logMsg; logMsg.Printf( "Users and groups directory opened (duration: %i ms)", usCounter.Stop()/1000); logger.Log( fLoggerID, eL4JML_Information, logMsg); } } uag->Release(); } else { outError = ThrowError( VE_RIA_UAG_COMPONENT_NOT_FOUND); } return directory; }