CVE-2019-25098 (published 2023-01-05T08:15Z)

A vulnerability was found in soerennb eXtplorer up to 2.1.12. It has been classified as critical. This affects an unknown part of the file include/archive.php of the component Archive Handler. The manipulation leads to path traversal. Upgrading to version 2.1.13 is able to address this issue. The identifier of the patch is b8fcb888f4ff5e171c16797a4b075c6c6f50bf46. It is recommended to upgrade the affected component. The identifier VDB-217437 was assigned to this vulnerability.

CVSS v3 base score: 9.8, CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)

Weakness information:
cwe_id: CWE-22
cwe_name: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
description: The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.
extended_description: 
            Many file operations are intended to take place within a restricted directory. By using special elements such as ".." and "/" separators, attackers can escape outside of the restricted location to access files or directories that are elsewhere on the system. One of the most common special elements is the "../" sequence, which in most modern operating systems is interpreted as the parent directory of the current location. This is referred to as relative path traversal. Path traversal also covers the use of absolute pathnames such as "/usr/local/bin" to access unexpected files. This is referred to as absolute path traversal.
         
         

Fix information:
repo_url: https://github.com/soerennb/extplorer
commit_details: repo_url: https://github.com/soerennb/extplorer
author: Sören
author_date: 2019-05-15 10:53:07+02:00
msg: - fixed various security issues reported by Mario Korth:
  * potential XSS
  * Arbitrary file read
  * Path traversal in listing directory contents
  * Path traversal in archive feature
- added new turkish translations
repository: repo_url: https://github.com/soerennb/extplorer
repo_name: soerennb/extplorer
description: eXtplorer is a PHP-based File Manager
repo_language: PHP
owner: soerennb
file_changes: filename: CHANGELOG.txt
change_type: ModificationType.MODIFY
diff: @@ -2,6 +2,15 @@
 Changelog for eXtplorer
 Version $Id: CHANGELOG.txt 249 2016-12-11 16:11:03Z soeren $
 ****************************
+
+--- version 2.1.13 ---
+- fixed various security issues reported by Mario Korth:
+  * potential XSS 
+  * Arbitrary file read
+  * Path traversal in listing directory contents
+  * Path traversal in archive feature
+- added new turkish translations 
+
 --- version 2.1.12 ---
 - fixed wrong version display
 - fixed empty language selector

programming_language: Markdown
filename: admin.extplorer.php
change_type: ModificationType.MODIFY
diff: @@ -162,6 +162,10 @@ if( class_exists(strtolower($classname)) && is_callable(array($classname,'execac
 				$requestedDir = $dir;
 			}
 			
+			if (!down_home(get_abs_dir($requestedDir))) {
+			    ext_Result::sendResult('', false, $requestedDir.": ".$GLOBALS["error_msg"]["abovehome"]);
+			    $requestedDir = '';
+			}
 			send_dircontents( $requestedDir, extGetParam($_REQUEST,'sendWhat','files') );
 			break;
 	case 'get_dir_selects':

programming_language: PHP
filename: archive.php
change_type: ModificationType.MODIFY
diff: @@ -99,7 +99,7 @@ class ext_Archive extends ext_Action {
 			if( $startfrom == 0 ) {
 				for($i=0;$i<$cnt;$i++) {
 
-					$selitem=stripslashes($GLOBALS['__POST']["selitems"][$i]);
+					$selitem=basename(stripslashes($GLOBALS['__POST']["selitems"][$i]));
 					if( $selitem == 'ext_root') { 
 						$selitem = '';
 					}
@@ -193,7 +193,7 @@ class ext_Archive extends ext_Action {
 			"xtype": "textfield",
 			"fieldLabel": "<?php echo ext_Lang::msg('archive_name', true ) ?>",
 			"name": "name",
-			"value": "<?php echo $GLOBALS['item'] . '.'. $default_archive_type ?>",
+			"value": "<?php echo htmlspecialchars($GLOBALS['item'], ENT_QUOTES) . '.'. $default_archive_type ?>",
 			"width": "200"
 		},
 		{

programming_language: PHP
filename: chmod.php
change_type: ModificationType.MODIFY
diff: @@ -82,7 +82,7 @@ class ext_Chmod extends ext_Action {
 				} else {
 					$mode = bindec($bin);
 				}
-				$item = $GLOBALS['__POST']["selitems"][$i];
+				$item = html_entity_decode($GLOBALS['__POST']["selitems"][$i], ENT_QUOTES);
 				if( ext_isFTPMode() ) {
 					$abs_item = get_item_info( $dir,$item);
 				} else {
@@ -151,7 +151,7 @@ class ext_Chmod extends ext_Action {
 		"labelWidth": 125,
 		"url":"<?php echo basename( $GLOBALS['script_name']) ?>",
 		"dialogtitle": "<?php echo ext_Lang::msg('actperms') ?>",
-		"title" : "<?php echo $text  ?>",
+		"title" : "<?php echo htmlspecialchars($text,ENT_QUOTES)  ?>",
 		"frame": true,
 		"items": [{
 			"layout": "column",
@@ -212,8 +212,8 @@ class ext_Chmod extends ext_Action {
 				params: {
 					"option": "com_extplorer", 
 					"action": "chmod", 
-					"dir": "<?php echo stripslashes($GLOBALS['__POST']["dir"]) ?>", 
-					"selitems[]": ['<?php echo implode("','", $GLOBALS['__POST']["selitems"]) ?>'], 
+					"dir": "<?php echo stripslashes(htmlentities($GLOBALS['__POST']["dir"],ENT_QUOTES)) ?>", 
+					"selitems[]": ['<?php echo htmlentities(implode("','", $GLOBALS['__POST']["selitems"]),ENT_QUOTES) ?>'], 
 					confirm: 'true',
 					token: "<?php echo ext_getToken() ?>"
 				}

programming_language: PHP
filename: functions.php
change_type: ModificationType.MODIFY
diff: @@ -571,10 +571,13 @@ function down_home($abs_dir) {			// dir deeper than home?
 	}
 	$real_home = @realpath($GLOBALS["home_dir"]);
 	$real_dir = @realpath($abs_dir);
+	if( $real_dir == '' ) $real_dir = dirname( $abs_dir );
+	if( $real_home == '' ) $real_home = $_SERVER['DOCUMENT_ROOT'];
+	//echo 'NOW: $real_home = '.$real_home;
+	//echo ', $real_dir = '.$real_dir;
 
-	if($real_home===false || $real_dir===false) {
-		if(@stristr($abs_dir,"\\.\\.")) return false;
-	} else if(strcmp($real_home,@substr($real_dir,0,strlen($real_home)))) {
+	if(@stristr($abs_dir,"\\.\\.")) return false;
+	if(strcmp($real_home,@substr($real_dir,0,strlen($real_home)))) {
 		return false;
 	}
 	return true;

programming_language: PHP
filename: init.php
change_type: ModificationType.MODIFY
diff: @@ -236,6 +236,7 @@ if (ext_isFTPMode() && $dir != '') {
 	$GLOBALS['FTPCONNECTION']->cd( $dir );
 }
 
+//echo "Down home: ".down_home( "/etc/passwd" );exit;
 $abs_dir=get_abs_dir($GLOBALS["dir"]);
 
 if (!file_exists($GLOBALS["home_dir"])) {
@@ -257,7 +258,7 @@ if (!$GLOBALS['ext_conf']['symlink_allow_abovehome']) {
 }
 
 if (!get_is_dir(utf8_decode($abs_dir)) && !get_is_dir($abs_dir.$GLOBALS["separator"])) {
-	ext_Result::sendResult('', false, '"'.$abs_dir.'" - '.$GLOBALS["error_msg"]["direxist"]);
+	ext_Result::sendResult('', false, '"'.htmlspecialchars($abs_dir,ENT_QUOTES).'" - '.$GLOBALS["error_msg"]["direxist"]);
 	$dir = '';
 }
 

programming_language: PHP
filename: mkitem.php
change_type: ModificationType.MODIFY
diff: @@ -68,6 +68,9 @@ class ext_Mkitem extends ext_Action {
 				if( empty( $symlink_target )) {
 					ext_Result::sendResult( 'mkitem', false, 'Please provide a valid <strong>target</strong> for the symbolic link.');
 				}
+				if (!down_home(dirname($symlink_target))) {
+				    ext_Result::sendResult('', false, $symlink_target.": ".$GLOBALS["error_msg"]["abovehome"]);
+				}
 				if( !file_exists($symlink_target) || !is_readable($symlink_target)) {
 					ext_Result::sendResult( 'mkitem', false, 'The file you wanted to make a symbolic link to does not exist or is not accessible by PHP.');
 				}

programming_language: PHP
filename: result.class.php
change_type: ModificationType.MODIFY
diff: @@ -126,7 +126,7 @@ class ext_Result {
 
 				foreach ( $_SESSION['ext_message'] as $msgtype ) {
 					foreach ( $msgtype as $message ) {
-						$messagetxt .= $message .'<br/>';
+					    $messagetxt .= htmlspecialchars($message, ENT_QUOTES ) .'<br/>';
 					}
 					$messagetxt .= '<br /><hr /><br />';
 				}
@@ -143,7 +143,7 @@ class ext_Result {
 
 				foreach ( $_SESSION['ext_error'] as $errortype ) {
 					foreach ( $errortype as $error ) {
-						$messagetxt .= $error .'<br/>';
+					    $messagetxt .=  htmlspecialchars($error, ENT_QUOTES ) .'<br/>';
 					}
 					$messagetxt .= '<br /><hr /><br />';
 				}

programming_language: PHP
filename: search.php
change_type: ModificationType.MODIFY
diff: @@ -248,7 +248,7 @@ function get_result_array($list) {			// print table of found items
 		$array[$i]['file_id'] = md5($s_dir.$s_item);
 		$array[$i]['dir'] = str_ireplace($GLOBALS['home_dir'], '', $dir );
 		$array[$i]['s_dir'] = empty($s_dir) ? '' : $s_dir;
-		$array[$i]['file'] = $s_item;
+		$array[$i]['file'] = htmlentities($s_item, ENT_QUOTES );
 		$array[$i]['link'] = $link;
 		$array[$i]['icon'] = _EXT_URL."/images/$img";
 	}

programming_language: PHP
filename: turkish.php
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,6 @@
-﻿<?php
+<?php
 
-// Turkish Language for eXtplorer (Translated by Sinan Ata, Tolga'(cumla.blogspot.com))
+// Turkish Language for eXtplorer v2.1.12 (Translated by Mehmet Taş)
 global $_VERSION;
 
 $GLOBALS["charset"] = "UTF-8";
@@ -10,10 +10,10 @@ $GLOBALS["error_msg"] = array(
 	// error
 	"error"			=> "Hata(lar)",
 	"message"		=> "Mesaj(lar)",
-	"back"			=> "Geri Gel",
+	"back"			=> "Geri Al",
 	
 	// root
-	"home"			=> "Ana klasör oluşturulmamış ayarlarınızı kontrol edin.",
+	"home"			=> "Ana klasör oluşturulmamış. Ayarlarınızı kontrol edin.",
 	"abovehome"		=> "Bu klasör ana klasörün üstünde olmamalıdır.",
 	"targetabovehome"	=> "Hedef klasör ana klasörün üstünde olmamalıdır.",
 	
@@ -39,7 +39,7 @@ $GLOBALS["error_msg"] = array(
 	
 	// actions
 	"permread"		=> "İzin gösterimi başarısız.",
-	"permchange"		=> "İzin değiştirme başarısız. (sebebi dosya sahiplik sorunu olabilir)",
+	"permchange"		=> "İzin değiştirme başarısız. (Nedeni dosya sahiplik sorunu olabilir.)",
 	"openfile"		=> "Dosya açılması başarısız.",
 	"savefile"		=> "Dosya kaydı başarısız.",
 	"createfile"		=> "Dosya oluşturma başarısız.",
@@ -56,7 +56,7 @@ $GLOBALS["error_msg"] = array(
 	
 	// misc
 	"miscnofunc"		=> "Fonksiyon kullanılabilir.",
-	"miscfilesize"		=> "Dosya maksimum boyutu aştı.",
+	"miscfilesize"		=> "Dosya en büyük boyutu aştı.",
 	"miscfilepart"		=> "Dosyanın yalnızca bir kısmı yüklenebildi.",
 	"miscnoname"		=> "Bir isim girmelisiniz.",
 	"miscselitems"		=> "Hiçbir öğe(ler) seçmediniz.",
@@ -69,13 +69,13 @@ $GLOBALS["error_msg"] = array(
 	"miscselfremove"	=> "Kendinizi silemezsiniz.",
 	"miscuserexist"		=> "Kullanıcı zaten var.",
 	"miscnofinduser"	=> "Kullanıcı bulunamadı.",
-	"extract_noarchive" => "The File is no extractable Archive.",
+	"extract_noarchive" => "Dosya uygun arşivlenmemiş.",
 	"extract_unknowntype" => "Bilinmeyen arşiv türü",
 
-	'chmod_none_not_allowed' => 'Changing Permissions to <none> is not allowed',
-	'archive_dir_notexists' => 'The Save-To Directory you have specified does not exist.',
-	'archive_dir_unwritable' => 'Please specify a writable directory to save the archive to.',
-	'archive_creation_failed' => 'Failed saving the Archive File'
+	'chmod_none_not_allowed' => 'İzinleri <hiçbiri> olarak değiştirmek yasaktır',
+	'archive_dir_notexists' => 'Belirlediğiniz Kaydetme Dizini mevcut değil.',
+	'archive_dir_unwritable' => 'Arşiv kaydetmek için lütfen yazılabilir dizin belirtin.',
+	'archive_creation_failed' => 'Arşiv Dosyasını Kaydetme Başarısız'
 	
 );
 $GLOBALS["messages"] = array(
@@ -84,20 +84,20 @@ $GLOBALS["messages"] = array(
 	"editlink"		=> "Değiştir",
 	"downlink"		=> "İndir",
 	"uplink"		=> "Yukarı",
-	"homelink"		=> "Başa Dön",
+	"homelink"		=> "Anadizin",
 	"reloadlink"		=> "Yenile",
 	"copylink"		=> "Kopyala",
 	"movelink"		=> "Taşı",
 	"dellink"		=> "Sil",
-	"comprlink"		=> "Depola",
+	"comprlink"		=> "Sıkıştır",
 	"adminlink"		=> "Yönetici",
 	"logoutlink"		=> "Çıkış",
 	"uploadlink"		=> "Yükle",
 	"searchlink"		=> "Ara",
-	"extractlink"	=> "Extract Archive",
-	'chmodlink'		=> 'İzinleri (chmod) Değiştir (Klasör/Dosya(lar))', // new mic
+	"extractlink"	        => "Arşivi Çıkart",
+	'chmodlink'		=> 'İzinleri (Chmod) Değiştir', // new mic
 	'mossysinfolink'	=> 'eXtplorer Sistem Bilgisi (eXtplorer, Server, PHP, mySQL)', // new mic
-	'logolink'		=> 'eXtplorer Websitesine git (yeni pencerede)', // new mic
+	'logolink'		=> 'eXtplorer Websitesine Git (yeni pencerede)', // new mic
 	
 	// list
 	"nameheader"		=> "İsim",
@@ -127,7 +127,7 @@ $GLOBALS["messages"] = array(
 	
 	// user messages, new in eXtplorer 1.3.0
 	'renamelink'	=> 'Yeniden Adlandır',
-	'confirm_delete_file' => 'Bu dosyayı silmek istediğinize eminmisiniz? <br />%s',
+	'confirm_delete_file' => 'Bu dosyayı silmek istediğinizden emin misiniz? <br />%s',
 	'success_delete_file' => 'Öğe(ler) başarıyla silindi.',
 	'success_rename_file' => 'Dizin/dosya %s başarıyla yeniden adlandırıldı  %s.',
 	
@@ -155,29 +155,29 @@ $GLOBALS["messages"] = array(
 	"miscpassword"		=> "Şifre",
 	"miscoldpass"		=> "Eski Şifre",
 	"miscnewpass"		=> "Yeni Şifre",
-	"miscconfpass"		=> "Şifreyi Onayla",
-	"miscconfnewpass"	=> "Yeni Şifeyi Onayla",
+	"miscconfpass"		=> "Şifreyi Onaylayın",
+	"miscconfnewpass"	=> "Yeni Şifeyi Onaylayın",
 	"miscchpass"		=> "Şifre Değiştir",
 	"mischomedir"		=> "Ana Klasör",
 	"mischomeurl"		=> "Baş URL",
-	"miscshowhidden"	=> "Gizli öğeleri Göster",
+	"miscshowhidden"	=> "Gizli Öğeleri Gösterin",
 	"mischidepattern"	=> "Resim Gizle",
 	"miscperms"		=> "İzinler",
 	"miscuseritems"		=> "(isim, ana klasör, gizli öğeleri göster, izinler, Aktif)",
-	"miscadduser"		=> "Kullanıcı ekle",
-	"miscedituser"		=> "'%s' kullanıcısını değiştir",
+	"miscadduser"		=> "Kullanıcı ekleyin",
+	"miscedituser"		=> "'%s' kullanıcısını değiştirin",
 	"miscactive"		=> "Aktif",
 	"misclang"		=> "Dil",
 	"miscnoresult"		=> "Hiç sonuç yok.",
-	"miscsubdirs"		=> "Alt kategorileri de ara",
+	"miscsubdirs"		=> "Alt kategorileri de arayın",
 	"miscpermnames"		=> array("Sadece bakılabilir","Modifiye","Şifre değiştir","Modifiye & Şifre Değiştir",
 					"Yönetici"),
 	"miscyesno"		=> array("Evet","Hayır","E","H"),
-	"miscchmod"		=> array("Sahip", "Grup", "Halk"),
+	"miscchmod"		=> array("Sahip", "Grup", "Genel"),
 
 	// from here all new by mic
 	'miscowner'			=> 'Sahip',
-	'miscownerdesc'		=> '<strong>Açıklama:</strong><br />User (UID) /<br />Group (GID)<br />Current rights:<br /><strong> %s ( %s ) </strong>/<br /><strong> %s ( %s )</strong>',
+	'miscownerdesc'		=> '<strong>Açıklama:</strong><br />Kullanıcı (UID) /<br />Grup (GID)<br />Mevcut Haklar:<br /><strong> %s ( %s ) </strong>/<br /><strong> %s ( %s )</strong>',
 
 	// sysinfo (new by mic)
 	'simamsysinfo'		=> "eXtplorer Sistem Bilgisi",
@@ -185,44 +185,46 @@ $GLOBALS["messages"] = array(
 	'sibuilton'			=> 'İşletim Sistemi',
 	'sidbversion'		=> 'Veritabanı Sürümü (MySQL)',
 	'siphpversion'		=> 'PHP Sürümü',
-	'siphpupdate'		=> 'Bilgi: <span style="color: red;">The PHP version you use is <strong>not</strong> actual!</span><br />To guarantee all functions and features of '.$_VERSION->PRODUCT.' and addons,<br />you should use as minimum <strong>PHP.Version 4.3</strong>!',
-	'siwebserver'		=> 'Webserver',
+	'siphpupdate'		=> 'Bilgi: <span style="color: red;">Kullandığınız PHP sürümü <strong>güncel değil!</strong></span><br />'.$_VERSION->PRODUCT.' tüm ekleriyle fonksiyonlarını ve özelliklerini garantilemek için <br />en düşük <strong>PHP sürümü 4.3</strong> kullanmalısınız!',
+	'siwebserver'		=> 'Web Sunucu',
 	'siwebsphpif'		=> 'WebServer - PHP Interface',
 	'simamboversion'	=> 'eXtplorer Sürümü',
 	'siuseragent'		=> 'Tarayıcı Sürümü',
 	'sirelevantsettings' => 'Önemli PHP Ayarları',
-	'sisafemode'		=> 'Safe Mode',
+	'sisafemode'		=> 'Güvenli Mod',
 	'sibasedir'			=> 'Open basedir',
 	'sidisplayerrors'	=> 'PHP Hataları',
-	'sishortopentags'	=> 'Short Open Tags',
-	'sifileuploads'		=> 'File Uploads',
+	'sishortopentags'	=> 'Kısa Açık Etiketler',
+	'sifileuploads'		=> 'Dosya Yüklemeleri',
 	'simagicquotes'		=> 'Magic Quotes',
-	'siregglobals'		=> 'Register Globals',
+	'siregglobals'		=> 'Genel Kayıtlar',
 	'sioutputbuf'		=> 'Output Buffer',
 	'sisesssavepath'	=> 'Session Savepath',
 	'sisessautostart'	=> 'Session auto start',
-	'sixmlenabled'		=> 'XML enabled',
-	'sizlibenabled'		=> 'ZLIB enabled',
-	'sidisabledfuncs'	=> 'Non enabled functions',
-	'sieditor'			=> 'WYSIWYG Editor',
-	'siconfigfile'		=> 'Config file',
+	'sixmlenabled'		=> 'XML Etkin',
+	'sizlibenabled'		=> 'ZLIB Etkin',
+	'sidisabledfuncs'	=> 'Etkin Olmayan İşlevler',
+	'sieditor'			=> 'WYSIWYG Editör',
+	'siconfigfile'		=> 'Yapılandırma Dosyası',
 	'siphpinfo'			=> 'PHP Bilgisi',
 	'siphpinformation'	=> 'PHP Information',
 	'sipermissions'		=> 'İzinler',
 	'sidirperms'		=> 'Dizin izinleri',
-	'sidirpermsmess'	=> 'To be shure that all functions and features of '.$_VERSION->PRODUCT.' are working correct, following folders should have permission to write [chmod 0777]',
-	'sionoff'			=> array( 'On', 'Off' ),
+	'sidirpermsmess'	=> 'Şu uygulamanın '.$_VERSION->PRODUCT.' tüm işlevleri ve özelliklerinin doğru çalıştığından emin olmak için, aşağıdaki klasörlerin yazma izinleri [chmod 0777] olmalıdır',
+	'sionoff'		=> array( 'Açık', 'Kapalı' ),
 	
-	'extract_warning' => "Gerçekten bu dosyayı çıkartmak istiyormusunuz? Buraya?\\nThis will overwrite existing files when not used carefully!",
-	'extract_success' => "Extraction was successful",
-	'extract_failure' => "Extraction failed",
-	
-	'overwrite_files' => 'Varolan dosyanın üzerine yaz?',
+	'extract_warning'	=> "Gerçekten bu dosyayı buraya çıkartmak istiyor musunuz?<br />Dikkatli kullanılmadığında varolan dosyaların üzerine yazılacak!",
+	'extract_success'	=> "Arşiv Çıkartma Başarılı",
+	'extract_failure'	=> "Arşiv Çıkartma Başarısız",
+        
+
+
+'overwrite_files' => 'Varolan dosyanın üzerine yaz?',
 	"viewlink"		=> "Göster",
 	"actview"		=> "Kaynak dosyasını göster",
 	
 	// added by Paulino Michelazzo (paulino@michelazzo.com.br) to fun_chmod.php file
-	'recurse_subdirs'	=> 'Alt klasörlerede uygula?',
+	'recurse_subdirs'	=> 'Alt Klasörlere Uygulansın mı?',
 	
 	// added by Paulino Michelazzo (paulino@michelazzo.com.br) to footer.php file
 	'check_version'	=> 'Son sürümü kontrol et',
@@ -232,11 +234,11 @@ $GLOBALS["messages"] = array(
 	'newname'		=>	'Yeni İsim',
 	
 	// added by Paulino Michelazzo (paulino@michelazzo.com.br) to fun_edit.php file
-	'returndir'	=>	'Kaydettikten sonra dizine geri dön?',
-	'line'		=> 	'Line',
-	'column'	=>	'Column',
-	'wordwrap'	=>	'Wordwrap: (IE only)',
-	'copyfile'	=>	'Copy file into this filename',
+	'returndir'	=>	'Kaydettikten sonra dizine geri dönülsün mü?',
+	'line'		=> 	'Satır',
+	'column'	=>	'Sütun',
+	'wordwrap'	=>	'Sözcük Kaydırma: (yalnız IE)',
+	'copyfile'	=>	'Dosyayı, bu dosya adına kopyalayın',
 	
 	// Bookmarks
 	'quick_jump' => 'Hızlı Atlama',
@@ -244,34 +246,35 @@ $GLOBALS["messages"] = array(
 	'bookmark_was_added' => 'Bu dizin yer imleri listesine eklendi.',
 	'not_a_bookmark' => 'Bu dizin yer imlerinde değil.',
 	'bookmark_was_removed' => 'Bu dizin yer imleri listesinden çıkartıldı.',
-	'bookmarkfile_not_writable' => "Failed to %s the bookmark.\n The Bookmark File '%s' \nis not writable.",
+	'bookmarkfile_not_writable' => "Yer imi % s konumuna getirilemedi. \n Yer İmi Dosyası '%s' \nis yazılabilir değil.",
 	
 	'lbl_add_bookmark' => 'Bu dizini yerimlerine ekle',
-	'lbl_remove_bookmark' => 'Bu dizini yer imleri listesinden çıkart',
+	'lbl_remove_bookmark' => 'Bu dizini yer imleri listesinden çıkar',
 	
 	'enter_alias_name' => 'Lütfen bu yer imi için takma ad girin',
 	
 	'normal_compression' => 'normal sıkıştırma',
-	'good_compression' => 'iyi sıkıştırma',
-	'best_compression' => 'en iyi sıkıştırma',
+	'good_compression' => 'İyi Sıkıştırma',
+	'best_compression' => 'En İyi Sıkıştırma',
 	'no_compression' => 'sıkıştırma yok',
 	
 	'creating_archive' => 'Arşiv dosyası oluştur...',
 	'processed_x_files' => 'Processed %s of %s Files',
 	
-	'ftp_header' => 'Local FTP Authentication',
-	'ftp_login_lbl' => 'Please enter the login credentials for the FTP server',
+	'ftp_header' => 'Yerel FTP Kimlik Doğrulama',
+	'ftp_login_lbl' => 'FTP Sunucusu Oturum Açma Kimlik Bilgilerini Giriniz',
+	
 	'ftp_login_name' => 'FTP Kullanıcı Adı',
 	'ftp_login_pass' => 'FTP Şifresi',
-	'ftp_hostname_port' => 'FTP Server Hostname and Port <br />(Port is optional)',
+	'ftp_hostname_port' => 'FTP Sunucusu',
 	'ftp_login_check' => 'FTP bağlantısı Kontrol ediliyor...',
-	'ftp_connection_failed' => "FTP servera bağlanılamadı. \nPlease check that the FTP server is running on your server.",
+	'ftp_connection_failed' => "FTP sunucusuna bağlanılamadı. \nFTP sunucusunun çalışıp çalışmadığını kontrol edin.",
 	'ftp_login_failed' => "FTP girişinde hata. Lütfen kullanıcı adı ve şifrenizi kontrol ederek tekrar deneyin.",
 		
-	'switch_file_mode' => 'Şimdiki mod: <strong>%s</strong>. Dilerseniz %s moduna geçebilirsiniz.',
-	'symlink_target' => 'Target of the Symbolic Link',
+	'switch_file_mode' => 'Şimdiki Mod: <strong>%s</strong>. Dilerseniz %s moduna geçebilirsiniz. <br/> Türkçe Çeviri: <a href="https://durualan.com" target="_blank" rel="noopener"><b>Mehmet TAŞ</b></a>',
+	'symlink_target' => 'Sembolik Bağlantı Hedefi',
 	
-	"permchange"		=> "CHMOD Success:",
+	"permchange"		=> "Yazma İzinleri Başarılı:",
 	"savefile"		=> "Dosya kaydedildi.",
 	"moveitem"		=> "Taşıma Tamamlandı.",
 	"copyitem"		=> "Kopyalama Tamamlandı.",
@@ -286,8 +289,8 @@ $GLOBALS["messages"] = array(
 	'actlogin_success' => 'Giriş başarılı!',
 	'actlogin_failure' => 'Giriş hatalı, tekrar deneyin.',
 	'directory_tree' => 'Dizin Ağacı',
-	'browsing_directory' => 'Dizinlere Gözat',
-	'filter_grid' => 'Filtrele',
+	'browsing_directory' => 'Dizinlere Gözatın',
+	'filter_grid' => 'Filtreleyin',
 	'paging_page' => 'Sayfa',
 	'paging_of_X' => 'of {0}',
 	'paging_firstpage' => 'İlk Sayfa',
@@ -298,24 +301,24 @@ $GLOBALS["messages"] = array(
 	'paging_info' => 'Gösterilen Öğeler {0} - {1} of {2}',
 	'paging_noitems' => 'Gösterilecek öğe yok',
 	'aboutlink' => 'Hakkında...',
-	'password_warning_title' => 'Important - Change your Password!',
-	'password_warning_text' => 'The user account you are logged in with (admin with password admin) corresponds to the default eXtplorer priviliged account. Your eXtplorer installation is open to intrusion and you should immediately fix this security hole!',
-	'change_password_success' => 'Your Password has been changed!',
-	'success' => 'Basarili',
+	'password_warning_title' => 'Önemli - Şifrenizi değiştirin!',
+	'password_warning_text' => 'Giriş yapmış olduğunuz kullanıcı hesabı, varsayılan eXtplorer tarafından ayrılan hesaba karşılık gelir. EXtplorer kurulumunuz izinsiz girişe açık ve bu güvenlik açığını hemen düzeltmelisiniz!',
+	'change_password_success' => 'Şifreniz değiştirildi!',
+	'success' => 'Başarılı',
 	'failure' => 'Hata',
-	'dialog_title' => 'Website Dialog',
+	'dialog_title' => 'Website Uyarısı',
 	'upload_processing' => 'Yükleniyor, lütfen bekleyin...',
 	'upload_completed' => 'Yükleme Başarılı!',
-	'acttransfer' => 'Başka Sunucudan Transfer Et',
+	'acttransfer' => 'Başka Sunucudan Transfer Edin',
 	'transfer_processing' => 'Sunucudan sunucuya transfer sürüyor, lütfen bekleyin...',
 	'transfer_completed' => 'Transfer tamamlandı!',
-	'max_file_size' => 'Maksimum Dosya Boyutu',
-	'max_post_size' => 'Maksimum Yükleme Sınırı',
+	'max_file_size' => 'En Büyük Dosya Boyutu',
+	'max_post_size' => 'En Büyük Yükleme Sınırı',
 	'done' => 'Tamam.',
 	'permissions_processing' => 'İzinler uygulanıyor, lütfen bekleyin...',
-	'archive_created' => 'The Archive File has been created!',
-	'save_processing' => 'Saving File...',
-	'current_user' => 'This script currently runs with the permissions of the following user:',
+	'archive_created' => 'Arşiv Dosyası Oluşturuldu!',
+	'save_processing' => 'Dosya Kaydediliyor...',
+	'current_user' => 'Bu uygulama şu anda aşağıdaki kullanıcıların izinleriyle çalışır:',
 	'your_version' => 'Sizin Sürümünüz',
 	'search_processing' => 'Aranıyor, lütfen bekleyin...',
 	'url_to_file' => 'Dosya adresi',

programming_language: PHP
filename: turkish_mimes.php
change_type: ModificationType.MODIFY
diff: @@ -1,13 +1,13 @@
-﻿<?php
+<?php
 
-// Turkish Language for QuiX (Translated by Sinan Ata 'From Turkey'(cumla.blogspot.com))
+// Turkish Language for 2.1.12 (Translated by Mehmet Taş)
 
 $GLOBALS["mimes"]=array(
 	// dir, exe, file
 	"dir"	=> "Klasör",
 	"exe"	=> "Açılabilir Dosya",
 	"file"	=> "Dosya",
-	"symlink"	=> "Symbolic Link",
+	"symlink"=> "Simgesel Bağlantı",
 
 	// text
 	"text"	=> "Metin Dosyası",

programming_language: PHP