Component* TextFileComp::Copy () { TextFileComp* comp = new TextFileComp(_pathname, _begstr, _endstr, _linewidth, GetGraphic()); if (attrlist()) comp->SetAttributeList(new AttributeList(attrlist())); return comp; }
Component* TextOvComp::Copy () { TextOvComp* comp = new TextOvComp((TextGraphic*) GetGraphic()->Copy()); if (attrlist()) comp->SetAttributeList(new AttributeList(attrlist())); return comp; }
int MailData::parse(const char *msg, size_t /* len */) { int ret = 0; unsigned int start = 0, end = 0; isMailPartial = false; // Get attributes read = checkFlag(msg, EMAIL_READ); forwarded = checkFlag(msg, EMAIL_FORW); replied = checkFlag(msg, EMAIL_REPL); deleted = checkFlag(msg, EMAIL_DELE); flagged = checkFlag(msg, EMAIL_FLAG); if( XMLProcessor::getElementContent (msg, EMAIL_TREC, NULL, &start, &end) ) { received = StringBuffer(msg+start, end-start); } else received = ""; if( XMLProcessor::getElementContent (msg, EMAIL_TCRE, NULL, &start, &end) ) { created = StringBuffer(msg+start, end-start); } else created = ""; if( XMLProcessor::getElementContent (msg, EMAIL_TMOD, NULL, &start, &end) ) { modified = StringBuffer(msg+start, end-start); } else modified = ""; // Get content StringBuffer itemtmp(msg); start = itemtmp.find(EMAIL_ITEM_START); end = itemtmp.rfind(EMAIL_ITEM_END); if (start != StringBuffer::npos && end != StringBuffer::npos) { totalEmailSize = itemtmp.length(); // the size of the current piece of mail itemtmp = NULL; //if( XMLProcessor::getElementContent(msg, EMAIL_ITEM, NULL, &start, &end) ) { StringBuffer item(msg+start, end-start); unsigned int startAttr=0, endAttr=0; //currently emailitem is not escaped so false!! if(XMLProcessor::getElementAttributes(msg, EMAIL_ITEM, &startAttr, &endAttr, false)) { StringBuffer attrlist(msg+startAttr, endAttr-startAttr); if(attrlist.ifind("quoted-printable") != StringBuffer::npos) { char *decoded = qp_decode(item); item = decoded; delete [] decoded; } } // item must start with CDATA size_t item_start = item.find("![CDATA"); if(item_start > 50){ // it could be <emailitem ENC="QUOTED-PRINTABLE"><![CDATA[ LOG.error("MailData: can't find inner CDATA section."); return -1; } size_t item_end = item.rfind("]]>"); // In emailitem the last > close the CDATA of emailitem tag and is escaped, so it is needed // to be found the follow. Usually the first is skipped // if(item.length() - item_end > 10){ item_end = item.rfind("]]>"); if(item.length() - item_end > 10){ LOG.error("MailData: can't find CDATA end tag."); return -2; } } // okay, move the start pointer to the end of item_start += strlen("![CDATA["); ret=emailItem.parse( item.c_str()+item_start, item_end - item_start ); } else { // LOG.info("MailData: no <emailitem> tag."); // It is not an error, just log it for info. } /* char tmpExt[] = "<Ext><XNam>x-funambol-body</XNam><XVal>15000</XVal></Ext> \ <Ext><XNam>x-funambol-attach-n</XNam><XVal>1</XVal></Ext> \ <Ext><XNam>x-funambol-attach</XNam><XVal>att1.txt</XVal><XVal>10000</XVal></Ext>"; */ //char tmpExt[] = ""; // find the Ext stuffs if (end != StringBuffer::npos) { unsigned int pos = end; unsigned int previous = end; start = 0, end = 0; char* ext = NULL; // for try //pos = 0; //while( (ext = XMLProcessor::copyElementContent(&tmpExt[pos], "Ext", &pos)) ) { // for try while( (ext = XMLProcessor::copyElementContent(&msg[pos], "Ext", &pos)) ) { char* xnam = XMLProcessor::copyElementContent(ext, "XNam", 0); if (!xnam) break; if (strcmp(xnam, "x-funambol-body") == 0) { char* val = XMLProcessor::copyElementContent(ext, "XVal", 0); if (val) { setRemainingBodySize(atol(val)); totalEmailSize += atol(val); delete [] val; val = NULL; isMailPartial = true; } } else if (strcmp(xnam, "x-funambol-attach-n") == 0) { char* val = XMLProcessor::copyElementContent(ext, "XVal", 0); if (val) { setRemainingAttachNumber(atol(val)); delete [] val; val = NULL; isMailPartial = true; } } else if (strcmp(xnam, "x-funambol-attach") == 0) { if (!remainingAttachments) { remainingAttachments = new ArrayList(); } extMailData = new ExtMailData(); unsigned int from = 0; int prev = 0; char* val = XMLProcessor::copyElementContent(ext, "XVal", &from); if (val) { extMailData->attachName = stringdup(MailMessage::decodeHeader(val).c_str()); delete [] val; val = NULL; } prev = from; val = XMLProcessor::copyElementContent(&ext[from], "XVal", &from); if (val) { extMailData->attachSize = atol(val); totalEmailSize += atol(val); delete [] val; val = NULL; } from += prev; prev = from; val = XMLProcessor::copyElementContent(&ext[from], "XVal", &from); if (val) { extMailData->attachMime = stringdup(MailMessage::decodeHeader(val).c_str()); delete [] val; val = NULL; } from += prev; prev = from; val = XMLProcessor::copyElementContent(&ext[from], "XVal", &from); if (val) { extMailData->attachURL = stringdup(MailMessage::decodeHeader(val).c_str()); delete [] val; val = NULL; } if (extMailData->attachName && extMailData->attachSize != 0) { remainingAttachments->add(*extMailData); isMailPartial = true; } else { setRemainingAttachNumber(getRemainingAttachNumber() == 0 ? 0 : (getRemainingAttachNumber() - 1)); } delete extMailData; extMailData = NULL; } pos += previous; previous = pos; if (xnam) { delete [] xnam; xnam = NULL; } if (ext) { delete [] ext; ext = NULL; } } } return ret; }
int _tmain(int argc, _TCHAR* argv[]) { bool parentprocess = false; DWORD createflags = 0; WCHAR* cmdline = nullptr; int pid = 0; int illevel = -1; if (!ParseArgs(argc, argv, &pid, &parentprocess, &createflags, &cmdline, &illevel)) { printf("NewProcessFromToken: [options] pid cmdline\n"); printf("Options:\n"); printf("-p : Use parent process technique to create the new process\n"); printf("-j : Try and break away from the current process job\n"); printf("-c : Create a new console for the process\n"); printf("-il level: Set the process IL level\n"); printf("* level:\n"); printf(" u - Untrusted\n"); printf(" l - Low\n"); printf(" m - Medium\n"); printf(" h - High\n"); printf(" s - System\n"); printf(" 0xXXXX - Arbitrary IL\n"); } else { if (pid == 0) { pid = GetCurrentProcessId(); } EnableDebugPrivilege(); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (hProcess) { if (!parentprocess) { HANDLE hToken; if (OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken)) { HANDLE hDupToken; if (DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, nullptr, SecurityImpersonation, TokenPrimary, &hDupToken)) { if (illevel >= 0) { SetTokenIL(hDupToken, illevel); } STARTUPINFO startInfo = { 0 }; PROCESS_INFORMATION procInfo = { 0 }; startInfo.cb = sizeof(startInfo); if (CreateProcessAsUserW(hDupToken, nullptr, cmdline, nullptr, nullptr, FALSE, createflags, nullptr, nullptr, &startInfo, &procInfo)) { printf("Created process %d\n", procInfo.dwProcessId); } else { printf("Error CreateProcessAsUser: %ls\n", GetErrorMessage().c_str()); if (CreateProcessWithTokenW(hDupToken, 0, nullptr, cmdline, createflags, nullptr, nullptr, &startInfo, &procInfo)) { printf("Created process %d\n", procInfo.dwProcessId); } else { printf("Error CreateProcessWithToken: %ls\n", GetErrorMessage().c_str()); } } } else { printf("Error Duplicating Token: %ls\n", GetErrorMessage().c_str()); } } else { printf("Error OpenProcessToken: %ls\n", GetErrorMessage().c_str()); } } else { SIZE_T size = 0; InitializeProcThreadAttributeList(nullptr, 1, 0, &size); std::vector<BYTE> attrlist(size); LPPROC_THREAD_ATTRIBUTE_LIST pattrlist = (LPPROC_THREAD_ATTRIBUTE_LIST)&attrlist[0]; InitializeProcThreadAttributeList(pattrlist, 1, 0, &size); if (UpdateProcThreadAttribute(pattrlist, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, &hProcess, sizeof(hProcess), nullptr, nullptr)) { STARTUPINFOEX startInfo = { 0 }; PROCESS_INFORMATION procInfo = { 0 }; startInfo.StartupInfo.cb = sizeof(startInfo); startInfo.lpAttributeList = pattrlist; if (CreateProcess(nullptr, cmdline, nullptr, nullptr, FALSE, CREATE_SUSPENDED | EXTENDED_STARTUPINFO_PRESENT | createflags, nullptr, nullptr, &startInfo.StartupInfo, &procInfo)) { printf("Created process %d\n", procInfo.dwProcessId); if (illevel >= 0) { HANDLE hToken; if (OpenProcessToken(procInfo.hProcess, TOKEN_ALL_ACCESS, &hToken)) { SetTokenIL(hToken, illevel); } } ResumeThread(procInfo.hThread); } else { printf("Error: CreateProcess %ls\n", GetErrorMessage().c_str()); } } DeleteProcThreadAttributeList(pattrlist); } } else { printf("Error OpenProcess: %ls\n", GetErrorMessage().c_str()); } } return 0; }