// mmf added member function for use for things like circumventing rank restrictions //TheBored 25-JUN-07: Edited function to be case insensitive (@HQ == @hq) bool UTL::PrivilegedUser(const char* szName, DWORD dwCookie) { //Imago 6/10 #2 ZString zName = szName; if (m_PrivilegedUsersMap.Count() > 0) { ZVersionInfo vi; ZString zInfo = (LPCSTR)vi.GetCompanyName(); zInfo += (LPCSTR)vi.GetLegalCopyright(); ZString zPrivilegedUsers = GetPrivilegedUsers(dwCookie); zPrivilegedUsers = zPrivilegedUsers.Unscramble(zInfo); ZString zPrivilegedUser = zPrivilegedUsers.GetToken(); int iChop = 0; iChop = zName.Find('@'); if (iChop == -1) { iChop = zName.Find('(') + 1; } while (!zPrivilegedUser.IsEmpty()) { if (zPrivilegedUser.ToUpper() == zName.ToUpper() || zPrivilegedUser.ToUpper() == zName.Left(iChop).ToUpper() || zPrivilegedUser.ToUpper() == zName.Left(iChop).ToUpper()) { return true; } zPrivilegedUser = zPrivilegedUsers.GetToken(); } } // /#2 size_t nameLen; nameLen=strlen(szName); if ( (nameLen>2) && ( ((strncmp(szName,"?",1))==0) || ((strncmp(szName,"+",1))==0) || ((strncmp(szName,"$",1))==0) ) ) return true; if ( (nameLen>3) && ( (_stricmp(szName+(nameLen-3),"@HQ"))==0 ) ) return true; if ( (nameLen>4) && ( (_stricmp(szName+(nameLen-4),"@Dev"))==0 ) ) return true; if ( (nameLen>6) && ( (_stricmp(szName+(nameLen-6),"@Alleg"))==0 ) ) return true; //TheBored 25-JUN-07: Added @Zone if ( (nameLen>5) && ( (_stricmp(szName+(nameLen-5),"@Zone"))==0 ) ) return true; return false; }
VOID CServiceModule::RunAsExecutable() { //Imago: we parents needs to keep track of our children #if defined(SRV_PARENT) InitPIDs(); #endif HRESULT hr; #if defined(SRV_PARENT) if (g.bRestarting == false) { ZVersionInfo vi; printf("%s\n%s\n\n", (LPCSTR)vi.GetFileDescription(), (LPCSTR)vi.GetLegalCopyright()); } #else #if !defined(SRV_CHILD) ZVersionInfo vi; printf("%s\n%s\n\n", (LPCSTR)vi.GetFileDescription(), (LPCSTR)vi.GetLegalCopyright()); #endif #endif if (IsWinNT()) printf("Running as an executable.\n"); printf("Initializing...\n"); hr = FedSrv_Init(); #if !defined(_CONSOLE) if (SUCCEEDED(hr)) { RunAsWindow(); return; } #endif if (SUCCEEDED(hr)) { HANDLE hConsole; printf("\rType 'Q' to Quit.\n"); printf("\rType 'P' to Pause.\n"); printf("\rType 'C' to Continue.\n"); hConsole = GetStdHandle(STD_INPUT_HANDLE); SetConsoleMode(hConsole, 0); SetConsoleCtrlHandler(HandlerRoutine, true); assert(g.hKillReceiveEvent); //Imago - parents restart everything after tricking the lobby into sending the client to our child #if defined(SRV_PARENT) g.bRestarting = false; #endif HANDLE hEventArray[] = { g.hKillReceiveEvent, hConsole }; DWORD dwAwaker; // // Wait until Receive Thread dies; if Q is pressed, kill Receive Thread // do { dwAwaker = MsgWaitForMultipleObjects(2, hEventArray, FALSE, INFINITE, 0); if (dwAwaker == WAIT_OBJECT_0 + 1) { INPUT_RECORD Key; DWORD dwRead; ReadConsoleInput(hConsole, &Key, 1, &dwRead); if (Key.EventType == KEY_EVENT && Key.Event.KeyEvent.wVirtualKeyCode == 'Q') { debugf("Q pressed\n"); SetEvent(g.hKillReceiveEvent); } if (Key.EventType == KEY_EVENT && Key.Event.KeyEvent.wVirtualKeyCode == 'P') { debugf("P pressed\n"); FedSrv_Pause(); } if (Key.EventType == KEY_EVENT && Key.Event.KeyEvent.wVirtualKeyCode == 'C') { debugf("C pressed\n"); FedSrv_Continue(); } } } while (dwAwaker != WAIT_OBJECT_0); FedSrv_Terminate(); // here is a good spot to restart -Imago #if defined(SRV_PARENT) if (g.bRestarting) RunAsExecutable(); #endif } else { printf("\rInitialization failed. (%x)\n", hr); } }