Merge commit '90e4325bcf' into QA_4_6-security

This commit is contained in:
Michal Čihař 2016-12-13 10:31:43 +01:00
commit be8eb4bf3e
20 changed files with 230 additions and 195 deletions

View File

@ -6,6 +6,7 @@
language: php
php:
- "7.1"
- "7.0"
- "5.6"
- "5.5"

View File

@ -15,6 +15,9 @@ phpMyAdmin - ChangeLog
- issue #12786 Fixed database searching
- issue #12792 Fixed javascript error on new version link
- issue #12785 Add information about required and suggested extensions to composer.json
- issue #12434 Improve documentation for servers running with Suhosin
- issue #12800 Updated embedded phpSecLib to 2.0.4
- issue #12800 Fixed various issues with PHP 7.1
4.6.5.2 (2016-12-05)
- issue #12765 Fixed SQL export with newlines

View File

@ -692,7 +692,7 @@ Server connection settings
For auto-upgrade functionality to work, your
``$cfg['Servers'][$i]['controluser']`` must have ALTER privilege on
``phpmyadmin`` database. See the `MySQL documentation for GRANT
<https://dev.mysql.com/doc/mysql/en/grant.html>`_ on how to
<https://dev.mysql.com/doc/refman/5.7/en/grant.html>`_ on how to
``GRANT`` privileges to a user.
.. _history:
@ -1577,7 +1577,7 @@ Cookie authentication options
:default: ``''``
The public key for the reCaptcha service that can be obtained from
https://www.google.com/recaptcha.
https://www.google.com/recaptcha/intro/.
reCaptcha will be then used in :ref:`cookie`.
@ -1587,7 +1587,7 @@ Cookie authentication options
:default: ``''``
The private key for the reCaptcha service that can be obtain from
https://www.google.com/recaptcha.
https://www.google.com/recaptcha/intro/.
reCaptcha will be then used in :ref:`cookie`.
@ -2228,7 +2228,7 @@ Languages
Defines the default connection collation to use, if not user-defined.
See the `MySQL documentation for charsets
<https://dev.mysql.com/doc/mysql/en/charset-charsets.html>`_
<https://dev.mysql.com/doc/refman/5.7/en/charset-charsets.html>`_
for list of possible values.
.. config:option:: $cfg['Lang']
@ -2927,7 +2927,7 @@ Developer
:default: false
Enable to let server present itself as demo server.
This is used for <https://demo.phpmyadmin.net/>.
This is used for `phpMyAdmin demo server <https://www.phpmyadmin.net/try/>`_.
Examples

View File

@ -182,8 +182,8 @@ Credits, in chronological order
* :term:`PDF` schema output, thanks also to
Olivier Plathey for the "FPDF" library (see <http://www.fpdf.org/>), Steven
Wittens for the "UFPDF" library and
Nicola Asuni for the "TCPDF" library (see <https://tcpdf.org/>).
Wittens for the "UFPDF" library (see <https://acko.net/blog/ufpdf-unicode-utf-8-extension-for-fpdf/>) and
Nicola Asuni for the "TCPDF" library (see <https://www.tcpdf.org/>).
* Olof Edlund <olof.edlund\_at\_upright.se>

View File

@ -129,7 +129,7 @@ and after execution of your :term:`SQL` commands, removed.
-------------------------------------------------------
The MySQL manual explains how to `reset the permissions
<https://dev.mysql.com/doc/mysql/en/resetting-permissions.html>`_.
<https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html>`_.
.. _faq1_13:
@ -210,7 +210,7 @@ The proper solution is to use the `mysqli extension
<https://www.php.net/mysqli>`_ with the proper client library to match
your MySQL installation. More
information (and several workarounds) are located in the `MySQL
Documentation <https://dev.mysql.com/doc/mysql/en/old-client.html>`_.
Documentation <https://dev.mysql.com/doc/refman/5.7/en/old-client.html>`_.
.. _faq1_18:
@ -316,7 +316,7 @@ should work.
1.27 I get empty page when I want to view huge page (eg. db\_structure.php with plenty of tables).
--------------------------------------------------------------------------------------------------
This was caused by a `PHP bug <https://bugs.php.net/21079>`_ that occur when
This was caused by a `PHP bug <https://bugs.php.net/bug.php?id=21079>`_ that occur when
GZIP output buffering is enabled. If you turn off it (by
:config:option:`$cfg['OBGzip']` in :file:`config.inc.php`), it should work.
This bug will has been fixed in PHP 5.0.0.
@ -493,34 +493,42 @@ The default values for most Suhosin configuration options will work in
most scenarios, however you might want to adjust at least following
parameters:
* `suhosin.request.max\_vars <http://www.hardened-
php.net/suhosin/configuration.html#suhosin.request.max_vars>`_ should
* `suhosin.request.max\_vars <https://suhosin.org/stories/configuration.html#suhosin-request-max-vars>`_ should
be increased (eg. 2048)
* `suhosin.post.max\_vars <http://www.hardened-
php.net/suhosin/configuration.html#suhosin.post.max_vars>`_ should be
* `suhosin.post.max\_vars <https://suhosin.org/stories/configuration.html#suhosin-post-max-vars>`_ should be
increased (eg. 2048)
* `suhosin.request.max\_array\_index\_length <http://www.hardened-php.ne
t/suhosin/configuration.html#suhosin.request.max_array_index_length>`_
* `suhosin.request.max\_array\_index\_length <https://suhosin.org/stories/configuration.html#suhosin-request-max-array-index-length>`_
should be increased (eg. 256)
* `suhosin.post.max\_array\_index\_length <http://www.hardened-php.net/s
uhosin/configuration.html#suhosin.post.max_array_index_length>`_
* `suhosin.post.max\_array\_index\_length <https://suhosin.org/stories/configuration.html#suhosin-post-max-array-index-length>`_
should be increased (eg. 256)
* `suhosin.request.max\_totalname\_length <http://www.hardened-php.net/s
uhosin/configuration.html#suhosin.request.max_totalname_length>`_
* `suhosin.request.max\_totalname\_length <https://suhosin.org/stories/configuration.html#suhosin-request-max-totalname-length>`_
should be increased (eg. 8192)
* `suhosin.post.max\_totalname\_length <http://www.hardened-php.net/suho
sin/configuration.html#suhosin.post.max_totalname_length>`_ should be
* `suhosin.post.max\_totalname\_length <https://suhosin.org/stories/configuration.html#suhosin-post-max-totalname-length>`_ should be
increased (eg. 8192)
* `suhosin.get.max\_value\_length <http://www.hardened-
php.net/suhosin/configuration.html#suhosin.get.max_value_length>`_
* `suhosin.get.max\_value\_length <https://suhosin.org/stories/configuration.html#suhosin-get-max-value-length>`_
should be increased (eg. 1024)
* `suhosin.sql.bailout\_on\_error <http://www.hardened-
php.net/suhosin/configuration.html#suhosin.sql.bailout_on_error>`_
* `suhosin.sql.bailout\_on\_error <https://suhosin.org/stories/configuration.html#suhosin-sql-bailout-on-error>`_
needs to be disabled (the default)
* `suhosin.log.\* <http://www.hardened-
php.net/suhosin/configuration.html#logging_configuration>`_ should not
* `suhosin.log.\* <https://suhosin.org/stories/configuration.html#logging-configuration>`_ should not
include :term:`SQL`, otherwise you get big
slowdown
* `suhosin.sql.union <https://suhosin.org/stories/configuration.html#suhosin-
sql-union>`_ must be disabled (which is the default).
* `suhosin.sql.multiselect <https://suhosin.org/stories/configuration.html#
suhosin-sql-multiselect>`_ must be disabled (which is the default).
* `suhosin.sql.comment <https://suhosin.org/stories/configuration.html#suhosin-
sql-comment>`_ must be disabled (which is the default).
To further improve security, we also recommend these modifications:
* `suhosin.executor.include.max\_traversal <https://suhosin.org/stories/
configuration.html#suhosin-executor-include-max-traversal>`_ should be
enabled as a mitigation against local file inclusion attacks. We suggest
setting this to 2 as ``../`` is used with the ReCaptcha library.
* `suhosin.cookie.encrypt <https://suhosin.org/stories/configuration.html#
suhosin-cookie-encrypt>`_ should be enabled.
* `suhosin.executor.disable_emodifier <https://suhosin.org/stories/config
uration.html#suhosin-executor-disable-emodifier>`_ should be enabled.
You can also disable the warning using the :config:option:`$cfg['SuhosinDisableWarning']`.

View File

@ -319,7 +319,7 @@ From Wikipedia, the free encyclopedia
socket
a form of inter-process communication.
.. seealso:: <https://www.wikipedia.org/wiki/Socket#Computer_sockets>
.. seealso:: <https://en.wikipedia.org/wiki/Unix_domain_socket>
SSL
Secure Sockets Layer is a cryptographic protocol which provides secure
@ -369,6 +369,8 @@ From Wikipedia, the free encyclopedia
UFPDF
Unicode/UTF-8 extension for :term:`FPDF`
.. seealso:: <https://acko.net/blog/ufpdf-unicode-utf-8-extension-for-fpdf/>
URL
Uniform Resource Locator is a sequence of characters, conforming to a
standardized format, that is used for referring to resources, such as

View File

@ -76,16 +76,16 @@ class SysInfoLinux extends \PMA\libraries\SysInfo
$mem = array_merge($defaults, $mem);
foreach ($mem as $idx => $value) {
$mem[$idx] = intval($value);
}
$mem['MemUsed'] = $mem['MemTotal']
- $mem['MemFree'] - $mem['Cached'] - $mem['Buffers'];
$mem['SwapUsed'] = $mem['SwapTotal']
- $mem['SwapFree'] - $mem['SwapCached'];
foreach ($mem as $idx => $value) {
$mem[$idx] = intval($value);
}
return $mem;
}
}

View File

@ -708,10 +708,13 @@ abstract class Base
return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
case self::MODE_CBC:
$result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
if (!defined('OPENSSL_RAW_DATA')) {
$result = substr($result, 0, -$this->block_size);
}
if ($this->continuousBuffer) {
$this->encryptIV = substr($result, -$this->block_size);
}
return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
return $result;
case self::MODE_CTR:
return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
case self::MODE_CFB:
@ -773,7 +776,7 @@ abstract class Base
$this->changed = false;
}
if ($this->enchanged) {
mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
@mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
$this->enchanged = false;
}
@ -806,15 +809,15 @@ abstract class Base
if ($len >= $block_size) {
if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
if ($this->enbuffer['enmcrypt_init'] === true) {
mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
@mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
$this->enbuffer['enmcrypt_init'] = false;
}
$ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
$ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
$iv = substr($ciphertext, -$block_size);
$len%= $block_size;
} else {
while ($len >= $block_size) {
$iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
$iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
$ciphertext.= $iv;
$len-= $block_size;
$i+= $block_size;
@ -823,7 +826,7 @@ abstract class Base
}
if ($len) {
$iv = mcrypt_generic($this->ecb, $iv);
$iv = @mcrypt_generic($this->ecb, $iv);
$block = $iv ^ substr($plaintext, -$len);
$iv = substr_replace($iv, $block, 0, $len);
$ciphertext.= $block;
@ -833,10 +836,10 @@ abstract class Base
return $ciphertext;
}
$ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
$ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext);
if (!$this->continuousBuffer) {
mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
@mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
}
return $ciphertext;
@ -1014,10 +1017,13 @@ abstract class Base
if (!defined('OPENSSL_RAW_DATA')) {
$padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
$ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
$offset = 2 * $this->block_size;
} else {
$offset = $this->block_size;
}
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
if ($this->continuousBuffer) {
$this->decryptIV = substr($ciphertext, -$this->block_size);
$this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
}
break;
case self::MODE_CTR:
@ -1082,7 +1088,7 @@ abstract class Base
$this->changed = false;
}
if ($this->dechanged) {
mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
@mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
$this->dechanged = false;
}
@ -1110,12 +1116,12 @@ abstract class Base
}
if ($len >= $block_size) {
$cb = substr($ciphertext, $i, $len - $len % $block_size);
$plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
$plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
$iv = substr($cb, -$block_size);
$len%= $block_size;
}
if ($len) {
$iv = mcrypt_generic($this->ecb, $iv);
$iv = @mcrypt_generic($this->ecb, $iv);
$plaintext.= $iv ^ substr($ciphertext, -$len);
$iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
$pos = $len;
@ -1124,10 +1130,10 @@ abstract class Base
return $plaintext;
}
$plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
$plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext);
if (!$this->continuousBuffer) {
mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
@mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
}
return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
@ -1270,7 +1276,7 @@ abstract class Base
* PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
* for CTR is the same for both encrypting and decrypting this function is re-used by both Base::encrypt()
* and Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
* function will emulate CTR with ECB when necesary.
* function will emulate CTR with ECB when necessary.
*
* @see self::encrypt()
* @see self::decrypt()
@ -1589,7 +1595,7 @@ abstract class Base
case self::ENGINE_MCRYPT:
return $this->cipher_name_mcrypt &&
extension_loaded('mcrypt') &&
in_array($this->cipher_name_mcrypt, mcrypt_list_algorithms());
in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms());
case self::ENGINE_INTERNAL:
return true;
}
@ -1668,13 +1674,13 @@ abstract class Base
if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) {
// Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
// (re)open them with the module named in $this->cipher_name_mcrypt
mcrypt_module_close($this->enmcrypt);
mcrypt_module_close($this->demcrypt);
@mcrypt_module_close($this->enmcrypt);
@mcrypt_module_close($this->demcrypt);
$this->enmcrypt = null;
$this->demcrypt = null;
if ($this->ecb) {
mcrypt_module_close($this->ecb);
@mcrypt_module_close($this->ecb);
$this->ecb = null;
}
}
@ -1788,19 +1794,19 @@ abstract class Base
self::MODE_STREAM => MCRYPT_MODE_STREAM,
);
$this->demcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
$this->enmcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
$this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
$this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
// we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
// to workaround mcrypt's broken ncfb implementation in buffered mode
// see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
if ($this->mode == self::MODE_CFB) {
$this->ecb = mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
$this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
}
} // else should mcrypt_generic_deinit be called?
if ($this->mode == self::MODE_CFB) {
mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
@mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
}
}
@ -2499,7 +2505,7 @@ abstract class Base
* is stored, classwide (!), here for reusing.
*
* The string-based index of $function is a classwide
* uniqe value representing, at least, the $mode of
* unique value representing, at least, the $mode of
* operation (or more... depends of the optimizing level)
* for which $mode the lambda function was created.
*

View File

@ -148,13 +148,13 @@ class Random
session_start();
$v = $seed = $_SESSION['seed'] = pack('H*', sha1(
serialize($_SERVER) .
serialize($_POST) .
serialize($_GET) .
serialize($_COOKIE) .
serialize($GLOBALS) .
serialize($_SESSION) .
serialize($_OLD_SESSION)
(isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') .
(isset($_POST) ? phpseclib_safe_serialize($_POST) : '') .
(isset($_GET) ? phpseclib_safe_serialize($_GET) : '') .
(isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') .
phpseclib_safe_serialize($GLOBALS) .
phpseclib_safe_serialize($_SESSION) .
phpseclib_safe_serialize($_OLD_SESSION)
));
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
@ -241,3 +241,38 @@ class Random
return substr($result, 0, $length);
}
}
if (!function_exists('phpseclib_safe_serialize')) {
/**
* Safely serialize variables
*
* If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier.
* PHP 5.3 will emit a warning.
*
* @param mixed $arr
* @access public
*/
function phpseclib_safe_serialize(&$arr)
{
if (is_object($arr)) {
return '';
}
if (!is_array($arr)) {
return serialize($arr);
}
// prevent circular array recursion
if (isset($arr['__phpseclib_marker'])) {
return '';
}
$safearr = array();
$arr['__phpseclib_marker'] = true;
foreach (array_keys($arr) as $key) {
// do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
if ($key !== '__phpseclib_marker') {
$safearr[$key] = phpseclib_safe_serialize($arr[$key]);
}
}
unset($arr['__phpseclib_marker']);
return serialize($safearr);
}
}

View File

@ -104,7 +104,7 @@ class Svg extends XMLWriter
/**
* Set document font size
*
* @param string $value sets the font size in pixels
* @param integer $value sets the font size in pixels
*
* @return void
*/
@ -116,7 +116,7 @@ class Svg extends XMLWriter
/**
* Get document font size
*
* @return string returns the font size
* @return integer returns the font size
*/
public function getFontSize()
{
@ -240,7 +240,7 @@ class Svg extends XMLWriter
$this->writeAttribute('style', $styles);
if (isset($text)) {
$this->writeAttribute('font-family', $this->font);
$this->writeAttribute('font-size', $this->fontSize);
$this->writeAttribute('font-size', $this->fontSize . 'px');
$this->text($text);
}
$this->endElement();

View File

@ -72,7 +72,7 @@ class SvgRelationSchema extends ExportRelationSchema
);
$this->diagram->SetAuthor('phpMyAdmin ' . PMA_VERSION);
$this->diagram->setFont('Arial');
$this->diagram->setFontSize('16px');
$this->diagram->setFontSize(16);
$alltables = $this->getTablesFromRequest();
@ -264,4 +264,4 @@ class SvgRelationSchema extends ExportRelationSchema
$table->tableDraw($this->showColor);
}
}
}
}

View File

@ -6,8 +6,8 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 4.6.5-dev\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2016-11-10 09:39+0100\n"
"PO-Revision-Date: 2016-11-24 13:35+0000\n"
"Last-Translator: ratajs <simonrataj@seznam.cz>\n"
"PO-Revision-Date: 2016-12-10 22:56+0000\n"
"Last-Translator: Lucie Procházková <lucieaprochazkova@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/phpmyadmin/4-6/cs/>"
"\n"
"Language: cs\n"
@ -2923,6 +2923,8 @@ msgstr "Selhalo formátování textu pro pravidlo „%s“."
#, php-format
msgid "Error in reading file: The file '%s' does not exist or is not readable!"
msgstr ""
"Chyba při čtení souboru: Soubor '%s' neexistuje, nebo se jej nepodařilo "
"přečíst"
#: libraries/Advisor.php:492
#, php-format
@ -3659,8 +3661,9 @@ msgid "Unknown error in file upload."
msgstr "Neznámá chyba při nahrávání souboru."
#: libraries/File.php:424
#, fuzzy
msgid "File is a symbolic link"
msgstr ""
msgstr "Soubor je symbolická linka."
#: libraries/File.php:470
msgid "Error moving the uploaded file, see [doc@faq1-11]FAQ 1.11[/doc]."
@ -3813,8 +3816,9 @@ msgid "Page number:"
msgstr "Strana číslo:"
#: libraries/LanguageManager.php:867
#, fuzzy
msgid "Ignoring unsupported language code."
msgstr ""
msgstr "Ignorován nepodporovaný jazykový kód."
#: libraries/Linter.php:99
msgid ""
@ -15756,7 +15760,7 @@ msgstr "Hašovací funkce pro heslo:"
#: view_create.php:44
msgid "View name can not be empty"
msgstr ""
msgstr "Název pohledu nemůže být prázdný."
#: view_create.php:247
msgid "VIEW name"

109
po/es.po
View File

@ -4,16 +4,16 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 4.6.5-dev\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2016-11-10 09:39+0100\n"
"PO-Revision-Date: 2016-07-27 00:30+0000\n"
"PO-Revision-Date: 2016-12-13 09:25+0000\n"
"Last-Translator: jorge jansen abreu <condecalifornia@hotmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/phpmyadmin/4-6/"
"es/>\n"
"Language-Team: Spanish "
"<https://hosted.weblate.org/projects/phpmyadmin/4-6/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.8-dev\n"
"X-Generator: Weblate 2.10-dev\n"
#: changelog.php:38 license.php:33
#, php-format
@ -792,6 +792,7 @@ msgstr ""
#: index.php:509
msgid "The secret passphrase in configuration (blowfish_secret) is too short."
msgstr ""
"La frase secreta en la configuración (blowfish_secret) es demasiado corta."
#: index.php:523
msgid ""
@ -1822,6 +1823,7 @@ msgstr "Exportar"
#: js/messages.php:389
msgid "No routine is exportable. Required privileges may be lacking."
msgstr ""
"No se puede exportar ninguna rutina. Quizá falten los privilegios necesarios."
#: js/messages.php:392 libraries/rte/rte_routines.lib.php:754
msgid "ENUM/SET editor"
@ -2182,12 +2184,16 @@ msgid ""
"MySQL accepts additional values not selectable by the slider; key in those "
"values directly if desired"
msgstr ""
"MySQL acepta valores adicionales que no se pueden seleccionar en el "
"deslizador; introduzca esos valores directamente si lo desea"
#: js/messages.php:528
msgid ""
"MySQL accepts additional values not selectable by the datepicker; key in "
"those values directly if desired"
msgstr ""
"MySQL acepta valores adicionales que no se pueden seleccionar en el "
"calendario; introduzca esos valores directamente si lo desea"
#: js/messages.php:534
msgid ""
@ -2966,6 +2972,7 @@ msgstr "No se pudo dar formato a una cadena para la regla '%s'."
#, php-format
msgid "Error in reading file: The file '%s' does not exist or is not readable!"
msgstr ""
"Error al leer el archivo: ¡El archivo '%s' no existe o no se puede leer!"
#: libraries/Advisor.php:492
#, php-format
@ -3704,7 +3711,7 @@ msgstr "Error desconocido al subir el archivo."
#: libraries/File.php:424
msgid "File is a symbolic link"
msgstr ""
msgstr "El archivo es un enlace simbólico"
#: libraries/File.php:470
msgid "Error moving the uploaded file, see [doc@faq1-11]FAQ 1.11[/doc]."
@ -5242,10 +5249,8 @@ msgid "You allow for connecting to the server without a password."
msgstr "Permite conectarse al servidor sin contraseña."
#: libraries/config/ServerConfigChecks.php:347
#, fuzzy
#| msgid "Key is too short, it should have at least 8 characters."
msgid "Key is too short, it should have at least 32 characters."
msgstr "La clave es muy corta, debe tener al menos 8 caracteres."
msgstr "La clave es muy corta, debe tener al menos 32 caracteres."
#: libraries/config/ServerConfigChecks.php:357
msgid "Key should contain letters, numbers [em]and[/em] special characters."
@ -5388,10 +5393,8 @@ msgid "Could not connect to the database server!"
msgstr "¡No se pudo conectar con el servidor de base de datos!"
#: libraries/config/Validator.php:243
#, fuzzy
#| msgid "Authentication type"
msgid "Invalid authentication type!"
msgstr "Tipo de autenticación"
msgstr "¡Tipo de autenticación inválida!"
#: libraries/config/Validator.php:250
msgid "Empty username while using [kbd]config[/kbd] authentication method!"
@ -9420,10 +9423,8 @@ msgid "Log out"
msgstr "Finalizar sesión"
#: libraries/navigation/NavigationHeader.php:170
#, fuzzy
#| msgid "Dumping data"
msgid "Empty session data"
msgstr "Volcado de datos"
msgstr "Datos de sesión vacíos"
#: libraries/navigation/NavigationHeader.php:186
msgid "phpMyAdmin documentation"
@ -9455,9 +9456,8 @@ msgstr[1] "Se encontró %s resultado adicional"
#: libraries/navigation/NavigationTree.php:1364
#: libraries/navigation/NavigationTree.php:1401
#, fuzzy
msgid "Type to filter these, Enter to search all"
msgstr "Escribe para filtrar estos, Introduce para buscar todo"
msgstr "Escribe para filtrar estos, «Intro» para buscar todo"
#: libraries/navigation/NavigationTree.php:1366
#: libraries/navigation/NavigationTree.php:1402
@ -12023,10 +12023,8 @@ msgid "routine"
msgstr "rutina"
#: libraries/rte/rte_words.lib.php:32
#, fuzzy
#| msgid "You do not have the necessary privileges to create a routine"
msgid "You do not have the necessary privileges to create a routine."
msgstr "No posee los privilegios necesarios para crear una rutina"
msgstr "No posee los privilegios necesarios para crear una rutina."
#: libraries/rte/rte_words.lib.php:35
#, php-format
@ -12034,6 +12032,8 @@ msgid ""
"No routine with name %1$s found in database %2$s. You might be lacking the "
"necessary privileges to edit this routine."
msgstr ""
"No se encuentran rutinas con nombre %1$s en la base de datos %2$s. Quizá "
"falten los privilegios necesarios para editar esta rutina."
#: libraries/rte/rte_words.lib.php:39
#, php-format
@ -12041,12 +12041,13 @@ msgid ""
"No routine with name %1$s found in database %2$s. You might be lacking the "
"necessary privileges to view/export this routine."
msgstr ""
"No se encuentran rutinas con nombre %1$s en la base de datos %2$s. Quizá "
"falten los privilegios necesarios para ver/exportar esta rutina."
#: libraries/rte/rte_words.lib.php:42
#, fuzzy, php-format
#| msgid "No routine with name %1$s found in database %2$s"
#, php-format
msgid "No routine with name %1$s found in database %2$s."
msgstr "No se encontró rutina con nombre %1$s en la base de datos %2$s"
msgstr "No se encontró rutina con nombre %1$s en la base de datos %2$s."
#: libraries/rte/rte_words.lib.php:43
msgid "There are no routines to display."
@ -12066,16 +12067,13 @@ msgid "trigger"
msgstr "disparador"
#: libraries/rte/rte_words.lib.php:54
#, fuzzy
#| msgid "You do not have the necessary privileges to create a trigger"
msgid "You do not have the necessary privileges to create a trigger."
msgstr "No posee los privilegios necesarios para crear un disparador"
msgstr "No posee los privilegios necesarios para crear un disparador."
#: libraries/rte/rte_words.lib.php:56
#, fuzzy, php-format
#| msgid "No trigger with name %1$s found in database %2$s"
#, php-format
msgid "No trigger with name %1$s found in database %2$s."
msgstr "No se encontró disparador con nombre %1$s en la base de datos %2$s"
msgstr "No se encontró disparador con nombre %1$s en la base de datos %2$s."
#: libraries/rte/rte_words.lib.php:57
msgid "There are no triggers to display."
@ -12095,16 +12093,13 @@ msgid "event"
msgstr "evento"
#: libraries/rte/rte_words.lib.php:68
#, fuzzy
#| msgid "You do not have the necessary privileges to create an event"
msgid "You do not have the necessary privileges to create an event."
msgstr "No posee los privilegios necesarios para crear un evento"
msgstr "No posee los privilegios necesarios para crear un evento."
#: libraries/rte/rte_words.lib.php:70
#, fuzzy, php-format
#| msgid "No event with name %1$s found in database %2$s"
#, php-format
msgid "No event with name %1$s found in database %2$s."
msgstr "No se encontró evento con nombre %1$s en la base de datos %2$s"
msgstr "No se encontró evento con nombre %1$s en la base de datos %2$s."
#: libraries/rte/rte_words.lib.php:71
msgid "There are no events to display."
@ -12382,6 +12377,8 @@ msgid ""
"Allows user to give to other users or remove from other users privileges "
"that user possess on this routine."
msgstr ""
"Permite al usuario dar o quitar a otros usuarios los permisos que el usuario "
"posee en esta rutina."
#: libraries/server_privileges.lib.php:1042
msgid "Allows altering and dropping this routine."
@ -12444,6 +12441,8 @@ msgid ""
"Allows user to give to other users or remove from other users the privileges "
"that user possess yourself."
msgstr ""
"Permite al usuario dar o quitar a otros usuarios los permisos que el usuario "
"posee."
#: libraries/server_privileges.lib.php:1552
msgid "Native MySQL authentication"
@ -13949,20 +13948,20 @@ msgstr "Se esperaba un corchete de apertura."
#: libraries/sql-parser/src/Statements/InsertStatement.php:227
#: libraries/sql-parser/src/Statements/ReplaceStatement.php:165
#: libraries/sql-parser/src/Statements/ReplaceStatement.php:193
#, fuzzy
#| msgid "Unexpected token."
msgid "Unexpected keyword."
msgstr "Símbolo (token) inesperado."
msgstr "Palabra clave inesperada."
#: libraries/sql-parser/src/Components/CaseExpression.php:202
msgid "Unexpected end of CASE expression"
msgstr ""
msgstr "Final inesperado de expresión CASE"
#: libraries/sql-parser/src/Components/CreateDefinition.php:227
msgid ""
"A symbol name was expected! A reserved keyword can not be used as a column "
"name without backquotes."
msgstr ""
"¡Se esperaba un nombre de símbolo! Una palabra reservada no puede usarse "
"como nombre de columna sin comillas."
#: libraries/sql-parser/src/Components/CreateDefinition.php:241
msgid "A symbol name was expected!"
@ -14010,10 +14009,9 @@ msgid "This option conflicts with \"%1$s\"."
msgstr "Esta opción tiene conflictos con \"%1$s\"."
#: libraries/sql-parser/src/Components/OptionsArray.php:260
#, fuzzy, php-format
#| msgid "Ending quote %1$s was expected."
#, php-format
msgid "Value/Expression for the option %1$s was expected"
msgstr "Se esperaba terminar la cita %1$s."
msgstr "Se esperaba una expresión/valor para la opción %1$s"
#: libraries/sql-parser/src/Components/RenameOperation.php:101
msgid "The old name of the table was expected."
@ -14083,20 +14081,16 @@ msgid "Unrecognized keyword."
msgstr "Palabra clave no reconocida."
#: libraries/sql-parser/src/Statement.php:457
#, fuzzy
#| msgid "Unexpected beginning of statement."
msgid "Unexpected ordering of clauses."
msgstr "Comienzo inesperado de declaración."
msgstr "Orden inesperado de condiciones."
#: libraries/sql-parser/src/Statements/CreateStatement.php:381
msgid "The name of the entity was expected."
msgstr "Se esperaba el nombre de la entidad."
#: libraries/sql-parser/src/Statements/CreateStatement.php:436
#, fuzzy
#| msgid "Variable name was expected."
msgid "A table name was expected."
msgstr "Se esperaba el nombre de la variable."
msgstr "Se esperaba un nombre de tabla."
#: libraries/sql-parser/src/Statements/CreateStatement.php:444
msgid "At least one column definition was expected."
@ -14107,10 +14101,8 @@ msgid "A \"RETURNS\" keyword was expected."
msgstr "Se esperaba una palabra \"RETURNS\"."
#: libraries/sql-parser/src/Statements/DeleteStatement.php:303
#, fuzzy
#| msgid "This type of clause was previously parsed."
msgid "This type of clause is not valid in Multi-table queries."
msgstr "Este tipo de cláusula se analizó previamente."
msgstr "Este tipo de cláusula no es válida en consultas multi-tabla."
#: libraries/sql.lib.php:231
msgid "Detailed profile"
@ -14672,10 +14664,8 @@ msgstr ""
"config para utilizarlo."
#: setup/frames/index.inc.php:132
#, fuzzy
#| msgid "Configuration saved."
msgid "Configuration not saved!"
msgstr "Configuración guardada."
msgstr "¡Configuración no guardada!"
#: setup/frames/index.inc.php:147 setup/frames/menu.inc.php:19
msgid "Overview"
@ -14797,7 +14787,7 @@ msgstr "Datos incorrectos"
#: setup/validate.php:30
#, php-format
msgid "Wrong data or no validation for %s"
msgstr ""
msgstr "Datos erróneos o sin validación para %s"
#: tbl_create.php:30 tbl_get_field.php:26
#, php-format
@ -14859,10 +14849,8 @@ msgid "Table name"
msgstr "Nombre de la tabla"
#: templates/columns_definitions/column_definitions_form.phtml:65
#, fuzzy
#| msgid "Columns"
msgid "column(s)"
msgstr "Columnas"
msgstr "columna(s)"
#: templates/columns_definitions/column_definitions_form.phtml:92
msgid "Collation:"
@ -15599,6 +15587,9 @@ msgid ""
"an index on it. Alternatively, you can define an index below, before "
"creating the foreign key."
msgstr ""
"Crear una clave foránea sobre una columna no indexada crearía "
"automáticamente un índice en ella. De manera alternativa, puede definir un "
"índice más abajo, antes de crear la clave foránea."
#: templates/table/relation/common_form.phtml:20
msgid ""
@ -15884,10 +15875,8 @@ msgid "Description"
msgstr "Descripción"
#: url.php:41
#, fuzzy
#| msgid "Taking you to next step…"
msgid "Taking you to the target site."
msgstr "Llevándolo al siguiente paso…"
msgstr "Llevándolo a la página web destino."
#: user_password.php:34
msgid "You don't have sufficient privileges to be here right now!"

View File

@ -66,30 +66,19 @@ if (!$config_writable || !$config_readable) {
);
}
//
// Check https connection
// Https connection warning (check done on the client side)
//
$is_https = !empty($_SERVER['HTTPS'])
&& mb_strtolower($_SERVER['HTTPS']) == 'on';
if (!$is_https) {
$text = __(
'You are not using a secure connection; all data (including potentially '
. 'sensitive information, like passwords) is transferred unencrypted!'
);
$text .= ' <a href="#" onclick="window.location.href = \'https:\' + window.location.href.substring(window.location.protocol.length);">';
// Temporary workaround to use tranlated message in older releases
$text .= str_replace(
array('[a@%s]', '[/a]'),
array('', ''),
__(
'If your server is also configured to accept HTTPS requests '
. 'follow [a@%s]this link[/a] to use a secure connection.'
)
);
$text .= '</a>';
PMA_messagesSet('notice', 'no_https', __('Insecure connection'), $text);
}
$text = __(
'You are not using a secure connection; all data (including potentially '
. 'sensitive information, like passwords) is transferred unencrypted!'
);
$text .= ' <a href="#">';
$text .= __(
'If your server is also configured to accept HTTPS requests '
. 'follow this link to use a secure connection.'
);
$text .= '</a>';
PMA_messagesSet('notice', 'no_https', __('Insecure connection'), $text);
echo '<form id="select_lang" method="post">';
echo PMA_URL_getHiddenInputs();

View File

@ -79,23 +79,18 @@ function PMA_messagesEnd()
*/
function PMA_messagesShowHtml()
{
$old_ids = array();
foreach ($_SESSION['messages'] as $type => $messages) {
foreach ($messages as $id => $msg) {
echo '<div class="' , $type , '" id="' , $id , '">'
if (! $msg['fresh'] && $type != 'error') {
$extra = ' hiddenmessage';
} else {
$extra = '';
}
echo '<div class="' , $type, $extra , '" id="' , $id , '">'
, '<h4>' , $msg['title'] , '</h4>'
, $msg['message'] , '</div>';
if (!$msg['fresh'] && $type != 'error') {
$old_ids[] = $id;
}
}
}
echo "\n" , '<script type="text/javascript">';
foreach ($old_ids as $id) {
echo "\nhiddenMessages.push('$id');";
}
echo "\n</script>\n";
}
/**

View File

@ -12,24 +12,29 @@ if (top != self) {
// Messages
//
// stores hidden message ids
var hiddenMessages = [];
$(function () {
var hidden = hiddenMessages.length;
for (var i = 0; i < hidden; i++) {
$('#' + hiddenMessages[i]).css('display', 'none');
if (window.location.protocol === 'https:') {
$('#no_https').remove();
} else {
$('#no_https a').click(function () {
var old_location = window.location;
window.location.href = 'https:' + old_location.href.substring(old_location.protocol.length);
return false;
});
}
if (hidden > 0) {
var hiddenmessages = $('.hiddenmessage');
if (hiddenmessages.length > 0) {
hiddenmessages.hide();
var link = $('#show_hidden_messages');
link.click(function (e) {
e.preventDefault();
for (var i = 0; i < hidden; i++) {
$('#' + hiddenMessages[i]).show(500);
}
hiddenmessages.show();
$(this).remove();
});
link.html(link.html().replace('#MSG_COUNT', hidden));
link.html(link.html().replace('#MSG_COUNT', hiddenmessages.length));
link.css('display', '');
}
});

View File

@ -6,7 +6,7 @@ if [ -n "$GATEWAY_INTERFACE" ] ; then
exit 1
fi
if [ "$TRAVIS_PHP_VERSION" = "nightly" -o "$TRAVIS_PHP_VERSION" = "hhvm" -o "$TRAVIS_PHP_VERSION" = "7.0" ] ; then
if [ "$TRAVIS_PHP_VERSION" = "nightly" -o "$TRAVIS_PHP_VERSION" = "hhvm" -o "$TRAVIS_PHP_VERSION" = "7.0" -o "$TRAVIS_PHP_VERSION" = "7.1" ] ; then
exit 0
fi

View File

@ -246,12 +246,12 @@ class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'#' => 11,
);
$value2 = array(
'sql_text' => 'update sql_text',
'#' => 'types2',
'#' => 10,
);
$dbi->expects($this->at(1))->method('fetchAssoc')
@ -269,10 +269,10 @@ class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
$ret = PMA_getJsonForLogDataTypeSlow($start, $end);
$result_rows = array(
array('sql_text' => 'insert sql_text', '#' => 'types'),
array('sql_text' => 'update sql_text', '#' => 'types2')
array('sql_text' => 'insert sql_text', '#' => 11),
array('sql_text' => 'update sql_text', '#' => 10)
);
$result_sum = array('insert' =>0, 'TOTAL' =>0, 'update' => 0);
$result_sum = array('insert' =>11, 'TOTAL' =>21, 'update' => 10);
$this->assertEquals(
2,
$ret['numRows']
@ -303,13 +303,13 @@ class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'#' => 10,
'argument' => 'argument argument2',
);
$value2 = array(
'sql_text' => 'update sql_text',
'#' => 'types2',
'#' => 11,
'argument' => 'argument3 argument4',
);
@ -331,7 +331,7 @@ class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
$value,
$value2,
);
$result_sum = array('argument' =>0, 'TOTAL' =>0, 'argument3' => 0);
$result_sum = array('argument' =>10, 'TOTAL' =>21, 'argument3' => 11);
$this->assertEquals(
2,
@ -363,7 +363,7 @@ class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'#' => 22,
'argument' => 'argument argument2',
);
@ -402,7 +402,7 @@ class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'#' => 33,
'argument' => 'argument argument2',
);

View File

@ -114,8 +114,7 @@ class PMA_ServerStatusQueries_Test extends PHPUnit_Framework_TestCase
$GLOBALS['dbi'] = $dbi;
$this->ServerStatusData = new ServerStatusData();
$upTime = "10h";
$this->ServerStatusData->status['Uptime'] = $upTime;
$this->ServerStatusData->status['Uptime'] = 36000;
$this->ServerStatusData->used_queries = array(
"Com_change_db" => "15",
"Com_select" => "12",

View File

@ -152,13 +152,12 @@ class PMA_ServerStatus_Test extends PHPUnit_Framework_TestCase
public function testPMAGetHtmlForServerStatus()
{
//parameters
$upTime = "10h";
$bytes_received = 100;
$bytes_sent = 200;
$max_used_conn = 500;
$aborted_conn = 200;
$conn = 1000;
$this->ServerStatusData->status['Uptime'] = $upTime;
$this->ServerStatusData->status['Uptime'] = 36000;
$this->ServerStatusData->status['Bytes_received'] = $bytes_received;
$this->ServerStatusData->status['Bytes_sent'] = $bytes_sent;
$this->ServerStatusData->status['Max_used_connections'] = $max_used_conn;
@ -178,7 +177,7 @@ class PMA_ServerStatus_Test extends PHPUnit_Framework_TestCase
);
//updatetime
$upTime_html = 'This MySQL server has been running for '
. '0 days, 0 hours, 0 minutes and 10h seconds';
. '0 days, 10 hours, 0 minutes and 0 seconds';
$this->assertContains(
$upTime_html,
$html