/* * Routine: * Purpose: * Algorithm: * Data Structures: * * Params: * Returns: * Called By: * Calls: * Assumptions: * Side Effects: * TODO: None */ int main(int ac, char* av[]) { template_t *pTemplate; process_options (ac, av); if (!is_set("QUIET")) { fprintf (stderr, "%s Query Generator (Version %d.%d.%d%s)\n", get_str("PROG"), VERSION, RELEASE, MODIFICATION, PATCH); fprintf (stderr, "Copyright %s %s\n", COPYRIGHT, C_DATES); } TemplateList = makeList(L_FL_TAIL, NULL); /* sync the keyword defines between lex/yacc/qgen */ InitKeywords(); if (is_set("YYDEBUG")) yydebug = 1; if (is_set("TEMPLATE")) parseTemplate(get_str("TEMPLATE"), 1); else parseQueries(); /* load the query templates */ if (is_set("VERBOSE") && !is_set("QUIET")) fprintf(stderr, "Parsed %d templates\n", length(TemplateList)); if (is_set("DUMP")) { for (pTemplate = (template_t *)getHead(TemplateList); pTemplate; pTemplate = (template_t *)getNext(TemplateList)) PrintTemplate(pTemplate); } init_rand(); generateQueryStreams(); /* output the resulting SQL */ exit(0); }
void CPrintPref::OnBnClickedResetall() { m_Template = PrintTemplate(); m_hsListBox.RedrawAll(); SetModified(); }
CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CString& sPageRet) { if (CZNC::Get().GetProtectWebSessions() && GetSession()->GetIP() != GetRemoteIP()) { DEBUG("Expected IP: " << GetSession()->GetIP()); DEBUG("Remote IP: " << GetRemoteIP()); PrintErrorPage(403, "Access denied", "This session does not belong to your IP."); return PAGE_DONE; } // Check that they really POSTed from one our forms by checking if they // know the "secret" CSRF check value. Don't do this for login since // CSRF against the login form makes no sense and the login form does a // cookies-enabled check which would break otherwise. if (IsPost() && GetParam("_CSRF_Check") != GetCSRFCheck() && sURI != "/login") { DEBUG("Expected _CSRF_Check: " << GetCSRFCheck()); DEBUG("Actual _CSRF_Check: " << GetParam("_CSRF_Check")); PrintErrorPage(403, "Access denied", "POST requests need to send " "a secret token to prevent cross-site request forgery attacks."); return PAGE_DONE; } SendCookie("SessionId", GetSession()->GetId()); if (GetSession()->IsLoggedIn()) { m_sUser = GetSession()->GetUser()->GetUserName(); m_bLoggedIn = true; } // Handle the static pages that don't require a login if (sURI == "/") { if(!m_bLoggedIn && GetParam("cookie_check", false).ToBool() && GetRequestCookie("SessionId").empty()) { GetSession()->AddError("Your browser does not have cookies enabled for this site!"); } return PrintTemplate("index", sPageRet); } else if (sURI == "/favicon.ico") { return PrintStaticFile("/pub/favicon.ico", sPageRet); } else if (sURI == "/robots.txt") { return PrintStaticFile("/pub/robots.txt", sPageRet); } else if (sURI == "/logout") { GetSession()->SetUser(NULL); SetLoggedIn(false); Redirect("/"); // We already sent a reply return PAGE_DONE; } else if (sURI == "/login") { if (GetParam("submitted").ToBool()) { m_sUser = GetParam("user"); m_sPass = GetParam("pass"); m_bLoggedIn = OnLogin(m_sUser, m_sPass); // AcceptedLogin()/RefusedLogin() will call Redirect() return PAGE_DEFERRED; } Redirect("/"); // the login form is here return PAGE_DONE; } else if (sURI.Left(5) == "/pub/") { return PrintStaticFile(sURI, sPageRet); } else if (sURI.Left(11) == "/skinfiles/") { CString sSkinName = sURI.substr(11); CString::size_type uPathStart = sSkinName.find("/"); if (uPathStart != CString::npos) { CString sFilePath = sSkinName.substr(uPathStart + 1); sSkinName.erase(uPathStart); m_Template.ClearPaths(); m_Template.AppendPath(GetSkinPath(sSkinName) + "pub"); if (PrintFile(m_Template.ExpandFile(sFilePath))) { return PAGE_DONE; } else { return PAGE_NOTFOUND; } } return PAGE_NOTFOUND; } else if (sURI.Left(6) == "/mods/" || sURI.Left(10) == "/modfiles/") { ParsePath(); // Make sure modules are treated as directories if (sURI.Right(1) != "/" && sURI.find(".") == CString::npos && sURI.TrimLeft_n("/mods/").TrimLeft_n("/").find("/") == CString::npos) { Redirect(sURI + "/"); return PAGE_DONE; } CModule *pModule = CZNC::Get().GetModules().FindModule(m_sModName); if (!pModule) { // Check if GetSession()->GetUser() is NULL and display // an error in that case if (!ForceLogin()) return PAGE_DONE; pModule = GetSession()->GetUser()->GetModules().FindModule(m_sModName); } if (!pModule) { return PAGE_NOTFOUND; } else if (pModule->WebRequiresLogin() && !ForceLogin()) { return PAGE_PRINT; } else if (pModule->WebRequiresAdmin() && !GetSession()->IsAdmin()) { PrintErrorPage(403, "Forbidden", "You need to be an admin to access this module"); return PAGE_DONE; } else if (!pModule->IsGlobal() && pModule->GetUser() != GetSession()->GetUser()) { PrintErrorPage(403, "Forbidden", "You must login as " + pModule->GetUser()->GetUserName() + " in order to view this page"); return PAGE_DONE; } else if (pModule->OnWebPreRequest(*this, m_sPage)) { return PAGE_DEFERRED; } VWebSubPages& vSubPages = pModule->GetSubPages(); for (unsigned int a = 0; a < vSubPages.size(); a++) { TWebSubPage& SubPage = vSubPages[a]; bool bActive = (m_sModName == pModule->GetModName() && m_sPage == SubPage->GetName()); if (bActive && SubPage->RequiresAdmin() && !GetSession()->IsAdmin()) { PrintErrorPage(403, "Forbidden", "You need to be an admin to access this page"); return PAGE_DONE; } } if (pModule && !pModule->IsGlobal() && (!IsLoggedIn() || pModule->GetUser() != GetSession()->GetUser())) { AddModLoop("UserModLoop", *pModule); } if (sURI.Left(10) == "/modfiles/") { m_Template.AppendPath(GetSkinPath(GetSkinName()) + "/mods/" + m_sModName + "/files/"); m_Template.AppendPath(pModule->GetModDataDir() + "/files/"); if (PrintFile(m_Template.ExpandFile(m_sPage.TrimLeft_n("/")))) { return PAGE_PRINT; } else { return PAGE_NOTFOUND; } } else { SetPaths(pModule, true); /* if a module returns false from OnWebRequest, it does not want the template to be printed, usually because it did a redirect. */ if (pModule->OnWebRequest(*this, m_sPage, m_Template)) { // If they already sent a reply, let's assume // they did what they wanted to do. if (SentHeader()) { return PAGE_DONE; } return PrintTemplate(m_sPage, sPageRet, pModule); } if (!SentHeader()) { PrintErrorPage(404, "Not Implemented", "The requested module does not acknowledge web requests"); } return PAGE_DONE; } } else { CString sPage(sURI.Trim_n("/")); if (sPage.length() < 32) { for (unsigned int a = 0; a < sPage.length(); a++) { unsigned char c = sPage[a]; if ((c < '0' || c > '9') && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && c != '_') { return PAGE_NOTFOUND; } } return PrintTemplate(sPage, sPageRet); } } return PAGE_NOTFOUND; }
//************************************************************************* // InitPICE() // //************************************************************************* BOOLEAN InitPICE(void) { ULONG ulHandleScancode=0,ulHandleKbdEvent=0; ARGS Args; KIRQL Dirql; KAFFINITY Affinity; ULONG ulAddr; ENTER_FUNC(); DPRINT((0,"InitPICE(): trace step 0.5\n")); KeyboardIRQL = HalGetInterruptVector(Internal, 0, 0, KEYBOARD_IRQ, &Dirql, &Affinity); DPRINT((0,"KeyboardIRQL: %x\n", KeyboardIRQL)); DPRINT((0,"InitPICE(): trace step 1\n")); // enable monochrome passthrough on BX type chipset EnablePassThrough(); DPRINT((0,"InitPICE(): trace step 2\n")); // now load all symbol files described in /etc/pice.conf if(!LoadSymbolsFromConfig(FALSE)) { DPRINT((0,"InitPICE: LoadSymbolsFromConfig() failed\n")); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 3\n")); // init the output console // this might be one of the following depending setup // a) monochrome card // b) serial terminal (TODO) if(!ConsoleInit()) { DPRINT((0,"InitPICE: ConsoleInit() failed\n")); UnloadSymbols(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 4\n")); // print the initial screen template PrintTemplate(); /* DPRINT((0,"InitPICE(): trace step 5\n")); // ask the user if he wants to abort the debugger load if(!CheckLoadAbort()) { Print(OUTPUT_WINDOW,"pICE: ABORT (abort by user)\n"); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } */ DPRINT((0,"InitPICE(): trace step 6\n")); // load the file /boot/System.map. // !!! It must be consistent with the current kernel at all cost!!! if(!LoadExports()) { Print(OUTPUT_WINDOW,"pICE: failed to load exports\n"); Print(OUTPUT_WINDOW,"press any key to continue...\n"); while(!GetKeyPolled()); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 7\n")); ScanExports("_KernelAddressSpace", &ulAddr); my_init_mm = (PMADDRESS_SPACE) ulAddr; DPRINT((0,"init_mm %x @ %x\n",&my_init_mm,my_init_mm)); if(!my_init_mm) { Print(OUTPUT_WINDOW,"pICE: ABORT (initial memory map not found)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); DbgPrint("pICE: ABORT (initial memory map not found)\n"); DbgPrint("pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 7.1\n")); ScanExports("_ModuleListHead",&ulAddr); pModuleListHead = (LIST_ENTRY*)ulAddr; DPRINT((0,"pModuleListHead @ %X\n",pModuleListHead)); if(!pModuleListHead) { Print(OUTPUT_WINDOW,"pICE: ABORT (pModuleListHead not found)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 7.2\n")); ScanExports("_PsProcessListHead",&ulAddr); pPsProcessListHead = (LIST_ENTRY*)ulAddr; DPRINT((0,"pPsProcessListHead @ %X\n",pPsProcessListHead)); if(!pPsProcessListHead) { Print(OUTPUT_WINDOW,"pICE: ABORT (PsProcessListHead not found)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 8\n")); // end of the kernel /* ScanExports("_end",(PULONG)&kernel_end); if(!kernel_end) { Print(OUTPUT_WINDOW,"pICE: ABORT (kernel size is unknown)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadExports(); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } */ DPRINT((0,"InitPICE(): trace step 9\n")); // the loaded module list ScanExports("_NameSpaceRoot", &ulAddr); pNameSpaceRoot = (PDIRECTORY_OBJECT *)ulAddr; DPRINT((0,"pNameSpaceRoot @ %X\n",pNameSpaceRoot)); if(!pNameSpaceRoot) { Print(OUTPUT_WINDOW,"pICE: ABORT (couldn't retreive name space root)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadExports(); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 10\n")); // setup a linked list for use in module parsing routines. if(!InitModuleList(&pdebug_module_head, 100)) { Print(OUTPUT_WINDOW,"pICE: ABORT (couldn't initialize kernel module list)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); FreeModuleList( pdebug_module_head ); while(!GetKeyPolled()); UnloadExports(); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } pdebug_module_tail = pdebug_module_head; DPRINT((0,"InitPICE(): trace step 11\n")); // do a sanity check on exports if(!SanityCheckExports()) { Print(OUTPUT_WINDOW,"pICE: ABORT (exports are conflicting with kernel symbols)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadExports(); UnloadSymbols(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 12\n")); DPRINT((0,"InitPICE(): trace step 13\n")); // patch the keyboard driver if(!PatchKeyboardDriver()) { Print(OUTPUT_WINDOW,"pICE: ABORT (couldn't patch keyboard driver)\n"); Print(OUTPUT_WINDOW,"pICE: press any key to continue...\n"); while(!GetKeyPolled()); UnloadSymbols(); UnloadExports(); ConsoleShutdown(); LEAVE_FUNC(); return FALSE; } DPRINT((0,"InitPICE(): trace step 14\n")); // partial init of shadow registers CurrentCS = GLOBAL_CODE_SEGMENT; CurrentEIP = (ULONG)RealIsr; CurrentDS = CurrentSS = GLOBAL_DATA_SEGMENT; __asm__("\n\t \ mov %%esp,%%eax\n\t \ mov %%eax,_CurrentESP\n\t \ ":::"eax"); // display version and symbol information Ver(NULL); // disable HW breakpoints __asm__("\n\t \ xorl %%eax,%%eax\n\t \ mov %%eax,%%dr6\n\t \ mov %%eax,%%dr7\n\t \ mov %%dr0,%%eax\n\t \ mov %%dr1,%%eax\n\t \ mov %%dr2,%%eax\n\t \ mov %%dr3,%%eax" :::"eax" ); DPRINT((0,"InitPICE(): trace step 15\n")); TakeIdtSnapshot(); DPRINT((0,"InitPICE(): trace step 16\n")); // install all hooks InstallTraceHook(); InstallGlobalKeyboardHook(); InstallSyscallHook(); InstallInt3Hook(); InstallDblFltHook(); InstallGPFaultHook(); InstallIntEHook(); InstallPrintkHook(); DPRINT((0,"InitPICE(): trace step 16\n")); if(ulDoInitialBreak) { DPRINT((0,"about to do initial break...\n")); // simulate an initial break __asm__("\n\t \ pushfl\n\t \ pushl %cs\n\t \ pushl $initialreturnpoint\n\t \ pushl $" STR(REASON_CTRLF) "\n\t \ jmp NewInt31Handler\n\t \ initialreturnpoint:"); } else {