Version Description
28/Jan/2019 =
FEATURE: If a restoration is interrupted (e.g. PHP timeout), then the "Continue" feature can now resume not just at the most recent zip file, but within the zip file at the point it had reached (https://updraftplus.com/auto-resuming-interrupted-restores-part-2/)
FEATURE: Added command in WP-CLI which gives a list of incremental backups restore points.
FIX: Regression: When a Dropbox upload failed to complete, UpdraftPlus would log this but fail to retry
FIX: Again update phpseclib to the latest version which should now fix the 'SSH2 Server Host Key Algorithm Mismatch' on all installs
TWEAK: Fix a wrong variable reference in an error message
TWEAK: Only add the JavaScript for the incremental schedule selection on the UD settings page
TWEAK: Replace incidental use of ipinfo.io now that it requires a paid API key
TWEAK: The print_delete_old_dirs_form method should have been public to allow painting if the user clicked through the previous message
Release Info
Developer | DavidAnderson |
Plugin | UpdraftPlus WordPress Backup Plugin |
Version | 1.16.5 |
Comparing to | |
See all releases |
Code changes from version 1.16.4 to 1.16.5
- admin.php +10 -4
- backup.php +24 -15
- class-updraftplus.php +16 -0
- includes/class-filesystem-functions.php +22 -6
- languages/updraftplus-nb_NO.mo +0 -0
- languages/updraftplus-nb_NO.po +8 -8
- languages/updraftplus.pot +343 -335
- methods/backup-module.php +1 -1
- methods/dropbox.php +2 -3
- readme.txt +14 -4
- restorer.php +112 -59
- updraftplus.php +1 -1
- vendor/composer/installed.json +6 -6
- vendor/phpseclib/phpseclib/CHANGELOG.md +22 -0
- vendor/phpseclib/phpseclib/README.md +2 -1
- vendor/phpseclib/phpseclib/appveyor.yml +27 -0
- vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php +4 -4
- vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php +78 -20
- vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php +12 -0
- vendor/phpseclib/phpseclib/phpseclib/File/X509.php +14 -8
- vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php +0 -1
- vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php +11 -1
- vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php +197 -30
- vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php +94 -19
- vendor/phpseclib/phpseclib/tests/Functional/Net/SFTPUserStoryTest.php +26 -0
- vendor/phpseclib/phpseclib/tests/Unit/File/ASN1Test.php +10 -0
- vendor/phpseclib/phpseclib/tests/Unit/File/X509/X509Test.php +27 -0
@@ -3151,7 +3151,13 @@ class UpdraftPlus_Admin {
|
|
3151 |
return $this->include_template('wp-admin/advanced/advanced-tools.php', $return_instead_of_echo, $pass_through);
|
3152 |
}
|
3153 |
|
3154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3155 |
if ($include_blurb) {
|
3156 |
if ($include_div) {
|
3157 |
echo '<div id="updraft_delete_old_dirs_pagediv" class="updated delete-old-directories">';
|
@@ -4476,7 +4482,7 @@ ENDHERE;
|
|
4476 |
* Carry out the restore process within the WP admin dashboard, using data from $_POST
|
4477 |
*
|
4478 |
* @param Array $timestamp Identifying the backup to be restored
|
4479 |
-
* @param Array|null $continuation_data For continuing a multi-stage restore; this is the saved jobdata for the job
|
4480 |
* @return Boolean|WP_Error - a WP_Error indicates a terminal failure; false indicates not-yet complete (not necessarily terminal); true indicates complete.
|
4481 |
*/
|
4482 |
private function restore_backup($timestamp, $continuation_data = null) {
|
@@ -4532,9 +4538,9 @@ ENDHERE;
|
|
4532 |
add_action('updraftplus_restoration_title', array($this, 'restoration_title'));
|
4533 |
|
4534 |
// We use a single object for each entity, because we want to store information about the backup set
|
4535 |
-
$updraftplus_restorer = new Updraft_Restorer(new Updraft_Restorer_Skin, $backup_set, false, $restore_options);
|
4536 |
|
4537 |
-
$restore_result = $updraftplus_restorer->perform_restore($entities_to_restore, $restore_options
|
4538 |
|
4539 |
$updraftplus_restorer->post_restore_clean_up($restore_result);
|
4540 |
|
3151 |
return $this->include_template('wp-admin/advanced/advanced-tools.php', $return_instead_of_echo, $pass_through);
|
3152 |
}
|
3153 |
|
3154 |
+
/**
|
3155 |
+
* Paint the HTML for the form for deleting old directories
|
3156 |
+
*
|
3157 |
+
* @param Boolean $include_blurb - whether to include explanatory text
|
3158 |
+
* @param Boolean $include_div - whether to wrap inside a div tag
|
3159 |
+
*/
|
3160 |
+
public function print_delete_old_dirs_form($include_blurb = true, $include_div = true) {
|
3161 |
if ($include_blurb) {
|
3162 |
if ($include_div) {
|
3163 |
echo '<div id="updraft_delete_old_dirs_pagediv" class="updated delete-old-directories">';
|
4482 |
* Carry out the restore process within the WP admin dashboard, using data from $_POST
|
4483 |
*
|
4484 |
* @param Array $timestamp Identifying the backup to be restored
|
4485 |
+
* @param Array|null $continuation_data For continuing a multi-stage restore; this is the saved jobdata for the job; in this method the keys used are second_loop_entities, restore_options; but it is also passed on to Updraft_Restorer::perform_restore()
|
4486 |
* @return Boolean|WP_Error - a WP_Error indicates a terminal failure; false indicates not-yet complete (not necessarily terminal); true indicates complete.
|
4487 |
*/
|
4488 |
private function restore_backup($timestamp, $continuation_data = null) {
|
4538 |
add_action('updraftplus_restoration_title', array($this, 'restoration_title'));
|
4539 |
|
4540 |
// We use a single object for each entity, because we want to store information about the backup set
|
4541 |
+
$updraftplus_restorer = new Updraft_Restorer(new Updraft_Restorer_Skin, $backup_set, false, $restore_options, $continuation_data);
|
4542 |
|
4543 |
+
$restore_result = $updraftplus_restorer->perform_restore($entities_to_restore, $restore_options);
|
4544 |
|
4545 |
$updraftplus_restorer->post_restore_clean_up($restore_result);
|
4546 |
|
@@ -55,7 +55,7 @@ class UpdraftPlus_Backup {
|
|
55 |
|
56 |
public $updraft_dir;
|
57 |
|
58 |
-
private $
|
59 |
|
60 |
private $wpdb_obj;
|
61 |
|
@@ -91,19 +91,7 @@ class UpdraftPlus_Backup {
|
|
91 |
|
92 |
global $updraftplus;
|
93 |
|
94 |
-
|
95 |
-
$blog_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', substr(get_bloginfo(), 0, 32))));
|
96 |
-
if (!$blog_name || preg_match('#^_+$#', $blog_name)) {
|
97 |
-
// Try again...
|
98 |
-
$parsed_url = parse_url(home_url(), PHP_URL_HOST);
|
99 |
-
$parsed_subdir = untrailingslashit(parse_url(home_url(), PHP_URL_PATH));
|
100 |
-
if ($parsed_subdir && '/' != $parsed_subdir) $parsed_url .= str_replace(array('/', '\\'), '_', $parsed_subdir);
|
101 |
-
$blog_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', substr($parsed_url, 0, 32))));
|
102 |
-
if (!$blog_name || preg_match('#^_+$#', $blog_name)) $blog_name = 'WordPress_Backup';
|
103 |
-
}
|
104 |
-
|
105 |
-
// Allow an over-ride. Careful about introducing characters not supported by your filesystem or cloud storage.
|
106 |
-
$this->blog_name = apply_filters('updraftplus_blog_name', $blog_name);
|
107 |
|
108 |
// Decide which zip engine to begin with
|
109 |
$this->debug = UpdraftPlus_Options::get_updraft_option('updraft_debug_mode');
|
@@ -160,6 +148,27 @@ class UpdraftPlus_Backup {
|
|
160 |
|
161 |
}
|
162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
/**
|
164 |
* Called by the WP action updraft_report_remotestorage_extrainfo
|
165 |
*
|
@@ -1303,7 +1312,7 @@ class UpdraftPlus_Backup {
|
|
1303 |
*/
|
1304 |
private function get_backup_file_basename_from_time($use_time) {
|
1305 |
global $updraftplus;
|
1306 |
-
return apply_filters('updraftplus_get_backup_file_basename_from_time', 'backup_'.get_date_from_gmt(gmdate('Y-m-d H:i:s', $use_time), 'Y-m-d-Hi').'_'.$this->
|
1307 |
}
|
1308 |
|
1309 |
private function find_existing_zips($dir, $match_nonce) {
|
55 |
|
56 |
public $updraft_dir;
|
57 |
|
58 |
+
private $site_name;
|
59 |
|
60 |
private $wpdb_obj;
|
61 |
|
91 |
|
92 |
global $updraftplus;
|
93 |
|
94 |
+
$this->site_name = $this->get_site_name();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
|
96 |
// Decide which zip engine to begin with
|
97 |
$this->debug = UpdraftPlus_Options::get_updraft_option('updraft_debug_mode');
|
148 |
|
149 |
}
|
150 |
|
151 |
+
/**
|
152 |
+
* Get a site name suitable for use in the backup filename
|
153 |
+
*
|
154 |
+
* @return String
|
155 |
+
*/
|
156 |
+
private function get_site_name() {
|
157 |
+
// Get the blog name and rip out known-problematic characters. Remember that we may need to be able to upload this to any FTP server or cloud storage, where filename support may be unknown
|
158 |
+
$site_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', substr(get_bloginfo(), 0, 32))));
|
159 |
+
if (!$site_name || preg_match('#^_+$#', $site_name)) {
|
160 |
+
// Try again...
|
161 |
+
$parsed_url = parse_url(home_url(), PHP_URL_HOST);
|
162 |
+
$parsed_subdir = untrailingslashit(parse_url(home_url(), PHP_URL_PATH));
|
163 |
+
if ($parsed_subdir && '/' != $parsed_subdir) $parsed_url .= str_replace(array('/', '\\'), '_', $parsed_subdir);
|
164 |
+
$site_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', substr($parsed_url, 0, 32))));
|
165 |
+
if (!$site_name || preg_match('#^_+$#', $site_name)) $site_name = 'WordPress_Backup';
|
166 |
+
}
|
167 |
+
|
168 |
+
// Allow an over-ride. Careful about introducing characters not supported by your filesystem or cloud storage.
|
169 |
+
return apply_filters('updraftplus_blog_name', $site_name);
|
170 |
+
}
|
171 |
+
|
172 |
/**
|
173 |
* Called by the WP action updraft_report_remotestorage_extrainfo
|
174 |
*
|
1312 |
*/
|
1313 |
private function get_backup_file_basename_from_time($use_time) {
|
1314 |
global $updraftplus;
|
1315 |
+
return apply_filters('updraftplus_get_backup_file_basename_from_time', 'backup_'.get_date_from_gmt(gmdate('Y-m-d H:i:s', $use_time), 'Y-m-d-Hi').'_'.$this->site_name.'_'.$updraftplus->file_nonce, $use_time, $this->site_name);
|
1316 |
}
|
1317 |
|
1318 |
private function find_existing_zips($dir, $match_nonce) {
|
@@ -4282,6 +4282,22 @@ class UpdraftPlus {
|
|
4282 |
return array($mess, $warn, $err, $info);
|
4283 |
}
|
4284 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4285 |
/**
|
4286 |
* Get default substitute similar collate related to charset
|
4287 |
*
|
4282 |
return array($mess, $warn, $err, $info);
|
4283 |
}
|
4284 |
|
4285 |
+
/**
|
4286 |
+
* Get the current outgoing IP address. Use this wisely; of course, it's not guaranteed to always be the same.
|
4287 |
+
*
|
4288 |
+
* @return String|Boolean - returns false upon failure
|
4289 |
+
*/
|
4290 |
+
public function get_outgoing_ip_address() {
|
4291 |
+
$ip_lookup = wp_remote_get('https://ipvigilante.com/json', array('timeout' => 6));
|
4292 |
+
if (200 == wp_remote_retrieve_response_code($ip_lookup)) {
|
4293 |
+
$info = json_decode(wp_remote_retrieve_body($ip_lookup), true);
|
4294 |
+
if (!empty($info['status']) && !empty($info['data']) && 'success' === $info['status']);
|
4295 |
+
if (!empty($info['data']['ipv4'])) return $info['data']['ipv4'];
|
4296 |
+
if (!empty($info['data']['ipv6'])) return $info['data']['ipv6'];
|
4297 |
+
}
|
4298 |
+
return false;
|
4299 |
+
}
|
4300 |
+
|
4301 |
/**
|
4302 |
* Get default substitute similar collate related to charset
|
4303 |
*
|
@@ -521,6 +521,8 @@ class UpdraftPlus_Filesystem_Functions {
|
|
521 |
static $last_logged_time;
|
522 |
static $last_saved_time;
|
523 |
|
|
|
|
|
524 |
// Detect a new zip file; reset state
|
525 |
if ($file !== $last_file_seen) {
|
526 |
$last_file_seen = $file;
|
@@ -530,10 +532,13 @@ class UpdraftPlus_Filesystem_Functions {
|
|
530 |
$last_saved_time = time();
|
531 |
}
|
532 |
|
|
|
|
|
|
|
533 |
// We always log the last one for clarity (the log/display looks odd if the last mention of something being unzipped isn't the last). Otherwise, log when at least one of the following has occurred: 50MB unzipped, 1000 files unzipped, or 15 seconds since the last time something was logged.
|
534 |
-
if ($i >= $num_files -1 || $size_written > $last_logged_bytes + 100 * 1048576 || $i > $last_logged_index +
|
535 |
|
536 |
-
$updraftplus->jobdata_set('
|
537 |
|
538 |
$updraftplus->log(sprintf(__('Unzip progress: %d out of %d files', 'updraftplus').' (%s, %s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice-restore');
|
539 |
$updraftplus->log(sprintf('Unzip progress: %d out of %d files (%s, %s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice');
|
@@ -547,11 +552,22 @@ class UpdraftPlus_Filesystem_Functions {
|
|
547 |
// Because a lot can happen in 5 seconds, we update the job data more often
|
548 |
if (time() > $last_saved_time + 5) {
|
549 |
// N.B. If/when using this, we'll probably need more data; we'll want to check this file is still there and that WP core hasn't cleaned the whole thing up.
|
550 |
-
$updraftplus->jobdata_set('
|
551 |
$last_saved_time = time();
|
552 |
}
|
553 |
}
|
554 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
555 |
/**
|
556 |
* Compatibility function (exists in WP 4.8+)
|
557 |
*/
|
@@ -575,14 +591,14 @@ class UpdraftPlus_Filesystem_Functions {
|
|
575 |
*
|
576 |
* @return Boolean|WP_Error True on success, WP_Error on failure.
|
577 |
*/
|
578 |
-
|
579 |
global $wp_filesystem, $updraftplus;
|
580 |
|
581 |
$class_to_use = ('ziparchive' == $method) ? 'UpdraftPlus_ZipArchive' : 'UpdraftPlus_PclZip';
|
582 |
|
583 |
if (!class_exists($class_to_use)) require_once(UPDRAFTPLUS_DIR.'/includes/class-zip.php');
|
584 |
|
585 |
-
$updraftplus->log('Unzipping '.basename($file).' to '.$to.' using '.$class_to_use);
|
586 |
|
587 |
$z = new $class_to_use;
|
588 |
|
@@ -596,7 +612,7 @@ class UpdraftPlus_Filesystem_Functions {
|
|
596 |
$zopen = $z->open($file, $flags);
|
597 |
|
598 |
if (true !== $zopen) {
|
599 |
-
return new WP_Error('incompatible_archive', __('Incompatible Archive.'), array($method.'_error' => $
|
600 |
}
|
601 |
|
602 |
$uncompressed_size = 0;
|
521 |
static $last_logged_time;
|
522 |
static $last_saved_time;
|
523 |
|
524 |
+
$jobdata_key = self::get_jobdata_progress_key($file);
|
525 |
+
|
526 |
// Detect a new zip file; reset state
|
527 |
if ($file !== $last_file_seen) {
|
528 |
$last_file_seen = $file;
|
532 |
$last_saved_time = time();
|
533 |
}
|
534 |
|
535 |
+
// Useful for debugging
|
536 |
+
$record_every_indexes = (defined('UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES') && UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES > 0) ? UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES : 1000;
|
537 |
+
|
538 |
// We always log the last one for clarity (the log/display looks odd if the last mention of something being unzipped isn't the last). Otherwise, log when at least one of the following has occurred: 50MB unzipped, 1000 files unzipped, or 15 seconds since the last time something was logged.
|
539 |
+
if ($i >= $num_files -1 || $size_written > $last_logged_bytes + 100 * 1048576 || $i > $last_logged_index + $record_every_indexes || time() > $last_logged_time + 15) {
|
540 |
|
541 |
+
$updraftplus->jobdata_set($jobdata_key, array('index' => $i, 'info' => $info, 'size_written' => $size_written));
|
542 |
|
543 |
$updraftplus->log(sprintf(__('Unzip progress: %d out of %d files', 'updraftplus').' (%s, %s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice-restore');
|
544 |
$updraftplus->log(sprintf('Unzip progress: %d out of %d files (%s, %s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice');
|
552 |
// Because a lot can happen in 5 seconds, we update the job data more often
|
553 |
if (time() > $last_saved_time + 5) {
|
554 |
// N.B. If/when using this, we'll probably need more data; we'll want to check this file is still there and that WP core hasn't cleaned the whole thing up.
|
555 |
+
$updraftplus->jobdata_set($jobdata_key, array('index' => $i, 'info' => $info, 'size_written' => $size_written));
|
556 |
$last_saved_time = time();
|
557 |
}
|
558 |
}
|
559 |
|
560 |
+
/**
|
561 |
+
* This method abstracts the calculation for a consistent jobdata key name for the indicated name
|
562 |
+
*
|
563 |
+
* @param String $file - the filename; only the basename will be used
|
564 |
+
*
|
565 |
+
* @return String
|
566 |
+
*/
|
567 |
+
public static function get_jobdata_progress_key($file) {
|
568 |
+
return 'last_index_'.md5(basename($file));
|
569 |
+
}
|
570 |
+
|
571 |
/**
|
572 |
* Compatibility function (exists in WP 4.8+)
|
573 |
*/
|
591 |
*
|
592 |
* @return Boolean|WP_Error True on success, WP_Error on failure.
|
593 |
*/
|
594 |
+
private static function unzip_file_go($file, $to, $needed_dirs = array(), $method = 'ziparchive', $starting_index = 0) {
|
595 |
global $wp_filesystem, $updraftplus;
|
596 |
|
597 |
$class_to_use = ('ziparchive' == $method) ? 'UpdraftPlus_ZipArchive' : 'UpdraftPlus_PclZip';
|
598 |
|
599 |
if (!class_exists($class_to_use)) require_once(UPDRAFTPLUS_DIR.'/includes/class-zip.php');
|
600 |
|
601 |
+
$updraftplus->log('Unzipping '.basename($file).' to '.$to.' using '.$class_to_use.', starting index '.$starting_index);
|
602 |
|
603 |
$z = new $class_to_use;
|
604 |
|
612 |
$zopen = $z->open($file, $flags);
|
613 |
|
614 |
if (true !== $zopen) {
|
615 |
+
return new WP_Error('incompatible_archive', __('Incompatible Archive.'), array($method.'_error' => $z->last_error));
|
616 |
}
|
617 |
|
618 |
$uncompressed_size = 0;
|
Binary file
|
@@ -2,7 +2,7 @@
|
|
2 |
# This file is distributed under the same license as the UpdraftPlus package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"PO-Revision-Date:
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -353,7 +353,7 @@ msgstr ""
|
|
353 |
|
354 |
#: src/templates/wp-admin/settings/existing-backups-table.php:158
|
355 |
msgid "Use ctrl / cmd + press to select several items"
|
356 |
-
msgstr ""
|
357 |
|
358 |
#: src/methods/dreamobjects.php:20
|
359 |
msgid "Closing 1st October 2018"
|
@@ -663,11 +663,11 @@ msgstr ""
|
|
663 |
|
664 |
#: src/admin.php:2798
|
665 |
msgid "Backup / Restore"
|
666 |
-
msgstr ""
|
667 |
|
668 |
#: src/admin.php:663
|
669 |
msgid "Backup"
|
670 |
-
msgstr ""
|
671 |
|
672 |
#: src/addons/wp-cli.php:408
|
673 |
msgid "Latest full backup found; identifier:"
|
@@ -739,7 +739,7 @@ msgstr ""
|
|
739 |
|
740 |
#: src/admin.php:671, src/admin.php:2799
|
741 |
msgid "Migrate / Clone"
|
742 |
-
msgstr ""
|
743 |
|
744 |
#: src/admin.php:3036, src/admin.php:3961,
|
745 |
#: src/templates/wp-admin/settings/existing-backups-table.php:73,
|
@@ -2882,7 +2882,7 @@ msgstr "Er du sikker på at du vil fjerne %s fra UpdraftPlus?"
|
|
2882 |
|
2883 |
#: src/templates/wp-admin/settings/existing-backups-table.php:157
|
2884 |
msgid "Deselect"
|
2885 |
-
msgstr "
|
2886 |
|
2887 |
#: src/templates/wp-admin/settings/existing-backups-table.php:156
|
2888 |
msgid "Select all"
|
@@ -7657,7 +7657,7 @@ msgstr "Klarte ikke å opprette filer i backup folderen. Backup avbrutt - sjekk
|
|
7657 |
|
7658 |
#: src/class-updraftplus.php:1796
|
7659 |
msgid "Others"
|
7660 |
-
msgstr "
|
7661 |
|
7662 |
#: src/addons/multisite.php:500, src/class-updraftplus.php:1781
|
7663 |
msgid "Uploads"
|
@@ -7688,4 +7688,4 @@ msgstr "Varsel:"
|
|
7688 |
#: src/addons/multisite.php:96, src/addons/multisite.php:736,
|
7689 |
#: src/options.php:74
|
7690 |
msgid "UpdraftPlus Backups"
|
7691 |
-
msgstr "
|
2 |
# This file is distributed under the same license as the UpdraftPlus package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"PO-Revision-Date: 2019-01-17 21:34:57+0000\n"
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
353 |
|
354 |
#: src/templates/wp-admin/settings/existing-backups-table.php:158
|
355 |
msgid "Use ctrl / cmd + press to select several items"
|
356 |
+
msgstr "Bruk Ctrl/Cmd + museklikk for å velge flere elementer"
|
357 |
|
358 |
#: src/methods/dreamobjects.php:20
|
359 |
msgid "Closing 1st October 2018"
|
663 |
|
664 |
#: src/admin.php:2798
|
665 |
msgid "Backup / Restore"
|
666 |
+
msgstr "Backup og gjenoppretting"
|
667 |
|
668 |
#: src/admin.php:663
|
669 |
msgid "Backup"
|
670 |
+
msgstr "Backup"
|
671 |
|
672 |
#: src/addons/wp-cli.php:408
|
673 |
msgid "Latest full backup found; identifier:"
|
739 |
|
740 |
#: src/admin.php:671, src/admin.php:2799
|
741 |
msgid "Migrate / Clone"
|
742 |
+
msgstr "Migrere og klone"
|
743 |
|
744 |
#: src/admin.php:3036, src/admin.php:3961,
|
745 |
#: src/templates/wp-admin/settings/existing-backups-table.php:73,
|
2882 |
|
2883 |
#: src/templates/wp-admin/settings/existing-backups-table.php:157
|
2884 |
msgid "Deselect"
|
2885 |
+
msgstr "Velg ingen"
|
2886 |
|
2887 |
#: src/templates/wp-admin/settings/existing-backups-table.php:156
|
2888 |
msgid "Select all"
|
7657 |
|
7658 |
#: src/class-updraftplus.php:1796
|
7659 |
msgid "Others"
|
7660 |
+
msgstr "Annet"
|
7661 |
|
7662 |
#: src/addons/multisite.php:500, src/class-updraftplus.php:1781
|
7663 |
msgid "Uploads"
|
7688 |
#: src/addons/multisite.php:96, src/addons/multisite.php:736,
|
7689 |
#: src/options.php:74
|
7690 |
msgid "UpdraftPlus Backups"
|
7691 |
+
msgstr "UpdraftPlus-backup"
|
@@ -145,11 +145,11 @@ msgstr ""
|
|
145 |
msgid "You must add the following as the authorised redirect URI in your Azure console (under \"API Settings\") when asked"
|
146 |
msgstr ""
|
147 |
|
148 |
-
#: src/addons/azure.php:601, src/addons/migrator.php:948, src/admin.php:1155, src/admin.php:1159, src/admin.php:1163, src/admin.php:1167, src/admin.php:1171, src/admin.php:1180, src/admin.php:
|
149 |
msgid "Warning"
|
150 |
msgstr ""
|
151 |
|
152 |
-
#: src/addons/azure.php:601, src/admin.php:
|
153 |
msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
|
154 |
msgstr ""
|
155 |
|
@@ -157,7 +157,7 @@ msgstr ""
|
|
157 |
msgid "Create Azure credentials in your Azure developer console."
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: src/addons/azure.php:605, src/addons/onedrive.php:
|
161 |
msgid "For longer help, including screenshots, follow this link."
|
162 |
msgstr ""
|
163 |
|
@@ -201,7 +201,7 @@ msgstr ""
|
|
201 |
msgid "You can enter the path of any %s virtual folder you wish to use here."
|
202 |
msgstr ""
|
203 |
|
204 |
-
#: src/addons/azure.php:638, src/addons/google-enhanced.php:76, src/addons/onedrive.php:
|
205 |
msgid "If you leave it blank, then the backup will be placed in the root of your %s"
|
206 |
msgstr ""
|
207 |
|
@@ -233,7 +233,7 @@ msgstr ""
|
|
233 |
msgid "Error: unexpected file read fail"
|
234 |
msgstr ""
|
235 |
|
236 |
-
#: src/addons/backblaze.php:225, src/addons/cloudfiles-enhanced.php:117, src/addons/migrator.php:893, src/addons/migrator.php:1190, src/addons/migrator.php:1271, src/addons/migrator.php:1320, src/addons/migrator.php:1558, src/addons/s3-enhanced.php:164, src/addons/s3-enhanced.php:169, src/addons/s3-enhanced.php:171, src/addons/sftp.php:911, src/addons/webdav.php:203, src/admin.php:91, src/admin.php:817, src/includes/class-remote-send.php:266, src/includes/class-remote-send.php:293, src/includes/class-remote-send.php:299, src/includes/class-remote-send.php:362, src/includes/class-remote-send.php:421, src/includes/class-remote-send.php:448, src/includes/class-remote-send.php:471, src/includes/class-remote-send.php:481, src/includes/class-remote-send.php:486, src/methods/remotesend.php:74, src/methods/remotesend.php:242, src/methods/remotesend.php:298, src/methods/updraftvault.php:532, src/restorer.php:
|
237 |
msgid "Error:"
|
238 |
msgstr ""
|
239 |
|
@@ -253,7 +253,7 @@ msgstr ""
|
|
253 |
msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
|
254 |
msgstr ""
|
255 |
|
256 |
-
#: src/addons/backblaze.php:580, src/methods/cloudfiles.php:234, src/methods/dropbox.php:
|
257 |
msgid "No settings were found"
|
258 |
msgstr ""
|
259 |
|
@@ -449,11 +449,11 @@ msgstr ""
|
|
449 |
msgid "Folder"
|
450 |
msgstr ""
|
451 |
|
452 |
-
#: src/addons/google-enhanced.php:76, src/addons/onedrive.php:
|
453 |
msgid "Enter the path of the %s folder you wish to use here."
|
454 |
msgstr ""
|
455 |
|
456 |
-
#: src/addons/google-enhanced.php:76, src/addons/googlecloud.php:1039, src/addons/onedrive.php:
|
457 |
msgid "e.g. %s"
|
458 |
msgstr ""
|
459 |
|
@@ -625,15 +625,15 @@ msgstr ""
|
|
625 |
msgid "But no %s settings were found. Please complete all fields in %s settings and save the settings."
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: src/addons/googlecloud.php:698, src/addons/onedrive.php:
|
629 |
msgid "However, subsequent access attempts failed:"
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: src/addons/googlecloud.php:718, src/addons/googlecloud.php:839, src/addons/onedrive.php:
|
633 |
msgid "Success"
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: src/addons/googlecloud.php:718, src/addons/onedrive.php:
|
637 |
msgid "you have authenticated your %s account."
|
638 |
msgstr ""
|
639 |
|
@@ -645,7 +645,7 @@ msgstr ""
|
|
645 |
msgid "You must save and authenticate before you can test your settings."
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: src/addons/googlecloud.php:776, src/addons/googlecloud.php:810, src/addons/googlecloud.php:816, src/addons/sftp.php:553, src/admin.php:
|
649 |
msgid "Failed"
|
650 |
msgstr ""
|
651 |
|
@@ -665,7 +665,7 @@ msgstr ""
|
|
665 |
msgid "You must enter a project ID in order to be able to create a new bucket."
|
666 |
msgstr ""
|
667 |
|
668 |
-
#: src/addons/googlecloud.php:984, src/methods/dropbox.php:
|
669 |
msgid "%s logo"
|
670 |
msgstr ""
|
671 |
|
@@ -693,7 +693,7 @@ msgstr ""
|
|
693 |
msgid "You must add the following as the authorized redirect URI (under \"More Options\") when asked"
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: src/addons/googlecloud.php:1019, src/addons/onedrive.php:
|
697 |
msgid "Client ID"
|
698 |
msgstr ""
|
699 |
|
@@ -701,7 +701,7 @@ msgstr ""
|
|
701 |
msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: src/addons/googlecloud.php:1027, src/addons/onedrive.php:
|
705 |
msgid "Client Secret"
|
706 |
msgstr ""
|
707 |
|
@@ -721,7 +721,7 @@ msgstr ""
|
|
721 |
msgid "Otherwise, you can leave it blank."
|
722 |
msgstr ""
|
723 |
|
724 |
-
#: src/addons/googlecloud.php:1034, src/addons/migrator.php:493, src/addons/migrator.php:496, src/addons/migrator.php:499, src/admin.php:1159, src/admin.php:2631, src/backup.php:
|
725 |
msgid "Go here for more information."
|
726 |
msgstr ""
|
727 |
|
@@ -765,7 +765,7 @@ msgstr ""
|
|
765 |
msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
|
766 |
msgstr ""
|
767 |
|
768 |
-
#: src/addons/googlecloud.php:1108, src/addons/onedrive.php:
|
769 |
msgid "Account holder's name: %s."
|
770 |
msgstr ""
|
771 |
|
@@ -777,63 +777,63 @@ msgstr ""
|
|
777 |
msgid "Supported backup plugins: %s"
|
778 |
msgstr ""
|
779 |
|
780 |
-
#: src/addons/importer.php:276, src/admin.php:
|
781 |
msgid "Backup created by: %s."
|
782 |
msgstr ""
|
783 |
|
784 |
-
#: src/addons/incremental.php:
|
785 |
msgid "(latest increment: %s)"
|
786 |
msgstr ""
|
787 |
|
788 |
-
#: src/addons/incremental.php:
|
789 |
msgid "Increments exist at: %s"
|
790 |
msgstr ""
|
791 |
|
792 |
-
#: src/addons/incremental.php:
|
793 |
msgid "Files changed since the last backup will be added as a new increment in that backup set."
|
794 |
msgstr ""
|
795 |
|
796 |
-
#: src/addons/incremental.php:
|
797 |
msgid "N.B. No backup of your database will be taken in an incremental backup; if you want a database backup as well, then take that separately."
|
798 |
msgstr ""
|
799 |
|
800 |
-
#: src/addons/incremental.php:
|
801 |
msgid "No incremental backup of your files is possible, as no suitable existing backup was found to add increments to."
|
802 |
msgstr ""
|
803 |
|
804 |
-
#: src/addons/incremental.php:
|
805 |
msgid "None"
|
806 |
msgstr ""
|
807 |
|
808 |
-
#: src/addons/incremental.php:
|
809 |
msgid "Every hour"
|
810 |
msgstr ""
|
811 |
|
812 |
-
#: src/addons/incremental.php:
|
813 |
msgid "Every %s hours"
|
814 |
msgstr ""
|
815 |
|
816 |
-
#: src/addons/incremental.php:
|
817 |
msgid "Daily"
|
818 |
msgstr ""
|
819 |
|
820 |
-
#: src/addons/incremental.php:
|
821 |
msgid "Weekly"
|
822 |
msgstr ""
|
823 |
|
824 |
-
#: src/addons/incremental.php:
|
825 |
msgid "Fortnightly"
|
826 |
msgstr ""
|
827 |
|
828 |
-
#: src/addons/incremental.php:
|
829 |
msgid "Monthly"
|
830 |
msgstr ""
|
831 |
|
832 |
-
#: src/addons/incremental.php:
|
833 |
msgid "And then add an incremental backup"
|
834 |
msgstr ""
|
835 |
|
836 |
-
#: src/addons/incremental.php:
|
837 |
msgid "Tell me more"
|
838 |
msgstr ""
|
839 |
|
@@ -949,7 +949,7 @@ msgstr ""
|
|
949 |
msgid "After pressing this button, you will be given the option to choose which components you wish to migrate"
|
950 |
msgstr ""
|
951 |
|
952 |
-
#: src/addons/migrator.php:274, src/admin.php:663, src/admin.php:850, src/admin.php:
|
953 |
msgid "Restore"
|
954 |
msgstr ""
|
955 |
|
@@ -981,7 +981,7 @@ msgstr ""
|
|
981 |
msgid "search term"
|
982 |
msgstr ""
|
983 |
|
984 |
-
#: src/addons/migrator.php:343, src/addons/migrator.php:358, src/admin.php:2549, src/admin.php:2559, src/admin.php:2568, src/admin.php:2610, src/admin.php:
|
985 |
msgid "Return to UpdraftPlus Configuration"
|
986 |
msgstr ""
|
987 |
|
@@ -1183,7 +1183,7 @@ msgstr ""
|
|
1183 |
msgid "Time taken (seconds):"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
-
#: src/addons/migrator.php:1320, src/restorer.php:
|
1187 |
msgid "the database query being run was:"
|
1188 |
msgstr ""
|
1189 |
|
@@ -1247,7 +1247,7 @@ msgstr ""
|
|
1247 |
msgid "Enter your chosen name"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
-
#: src/addons/migrator.php:1761, src/addons/sftp.php:467, src/admin.php:868, src/admin.php:
|
1251 |
msgid "Key"
|
1252 |
msgstr ""
|
1253 |
|
@@ -1307,7 +1307,7 @@ msgstr ""
|
|
1307 |
msgid "database connection attempt failed"
|
1308 |
msgstr ""
|
1309 |
|
1310 |
-
#: src/addons/moredatabase.php:112, src/backup.php:
|
1311 |
msgid "Connection failed: check your access details, that the database server is up, and that the network connection is not firewalled."
|
1312 |
msgstr ""
|
1313 |
|
@@ -1363,7 +1363,7 @@ msgstr ""
|
|
1363 |
msgid "Username"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
-
#: src/addons/moredatabase.php:242, src/addons/reporting.php:276, src/addons/wp-cli.php:432, src/admin.php:344, src/admin.php:
|
1367 |
msgid "Database"
|
1368 |
msgstr ""
|
1369 |
|
@@ -1516,7 +1516,7 @@ msgstr ""
|
|
1516 |
msgid "Exclude these:"
|
1517 |
msgstr ""
|
1518 |
|
1519 |
-
#: src/addons/morefiles.php:476, src/admin.php:
|
1520 |
msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
|
1521 |
msgstr ""
|
1522 |
|
@@ -1592,123 +1592,123 @@ msgstr ""
|
|
1592 |
msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: src/addons/onedrive.php:112, src/methods/dropbox.php:
|
1596 |
msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
-
#: src/addons/onedrive.php:
|
1600 |
msgid "An error response was received; HTTP code:"
|
1601 |
msgstr ""
|
1602 |
|
1603 |
-
#: src/addons/onedrive.php:
|
1604 |
msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
|
1605 |
msgstr ""
|
1606 |
|
1607 |
-
#: src/addons/onedrive.php:
|
1608 |
msgid "To remove any block, please go here."
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: src/addons/onedrive.php:
|
1612 |
msgid "Your IP address:"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
-
#: src/addons/onedrive.php:
|
1616 |
msgid "UpdraftPlus.com has responded with 'Access Denied'."
|
1617 |
msgstr ""
|
1618 |
|
1619 |
-
#: src/addons/onedrive.php:
|
1620 |
msgid "It appears that your web server's IP Address (%s) is blocked."
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: src/addons/onedrive.php:
|
1624 |
msgid "To remove the block, please go here."
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: src/addons/onedrive.php:
|
1628 |
msgid "Please re-authorize the connection to your %s account."
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: src/addons/onedrive.php:
|
1632 |
msgid "Account is not authorized (%s)."
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: src/addons/onedrive.php:
|
1636 |
msgid "%s error: %s"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
-
#: src/addons/onedrive.php:
|
1640 |
msgid "Authentication"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
-
#: src/addons/onedrive.php:
|
1644 |
msgid "Your %s quota usage: %s %% used, %s available"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
-
#: src/addons/onedrive.php:
|
1648 |
msgid "Your %s account name: %s"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: src/addons/onedrive.php:
|
1652 |
msgid "OneDrive"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: src/addons/onedrive.php:
|
1656 |
msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: src/addons/onedrive.php:
|
1660 |
msgid "authorization failed:"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: src/addons/onedrive.php:
|
1664 |
msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
|
1665 |
msgstr ""
|
1666 |
|
1667 |
-
#: src/addons/onedrive.php:
|
1668 |
msgid "You must add the following as the authorized redirect URI in your OneDrive console (under \"API Settings\") when asked"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
-
#: src/addons/onedrive.php:
|
1672 |
msgid "Create OneDrive credentials in your OneDrive developer console."
|
1673 |
msgstr ""
|
1674 |
|
1675 |
-
#: src/addons/onedrive.php:
|
1676 |
msgid "Please read %s for use of our %s authorization app (none of your backup data is sent to us)."
|
1677 |
msgstr ""
|
1678 |
|
1679 |
-
#: src/addons/onedrive.php:
|
1680 |
msgid "this privacy policy"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
-
#: src/addons/onedrive.php:
|
1684 |
msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
|
1685 |
msgstr ""
|
1686 |
|
1687 |
-
#: src/addons/onedrive.php:
|
1688 |
msgid "folder"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
-
#: src/addons/onedrive.php:
|
1692 |
msgid "N.B. %s is not case-sensitive."
|
1693 |
msgstr ""
|
1694 |
|
1695 |
-
#: src/addons/onedrive.php:
|
1696 |
msgid "Account type"
|
1697 |
msgstr ""
|
1698 |
|
1699 |
-
#: src/addons/onedrive.php:
|
1700 |
msgid "OneDrive International"
|
1701 |
msgstr ""
|
1702 |
|
1703 |
-
#: src/addons/onedrive.php:
|
1704 |
msgid "OneDrive Germany"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
-
#: src/addons/onedrive.php:
|
1708 |
msgid "Authenticate with %s"
|
1709 |
msgstr ""
|
1710 |
|
1711 |
-
#: src/addons/onedrive.php:
|
1712 |
msgid "(You appear to be already authenticated)."
|
1713 |
msgstr ""
|
1714 |
|
@@ -1716,7 +1716,7 @@ msgstr ""
|
|
1716 |
msgid "Your label for this backup (optional)"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
-
#: src/addons/reporting.php:86, src/addons/reporting.php:197, src/backup.php:
|
1720 |
msgid "Backup of:"
|
1721 |
msgstr ""
|
1722 |
|
@@ -1736,7 +1736,7 @@ msgstr ""
|
|
1736 |
msgid "Backup made by %s"
|
1737 |
msgstr ""
|
1738 |
|
1739 |
-
#: src/addons/reporting.php:198, src/backup.php:
|
1740 |
msgid "Latest status:"
|
1741 |
msgstr ""
|
1742 |
|
@@ -1764,11 +1764,11 @@ msgstr ""
|
|
1764 |
msgid "Time taken:"
|
1765 |
msgstr ""
|
1766 |
|
1767 |
-
#: src/addons/reporting.php:239, src/admin.php:
|
1768 |
msgid "Uploaded to:"
|
1769 |
msgstr ""
|
1770 |
|
1771 |
-
#: src/addons/reporting.php:281, src/backup.php:
|
1772 |
msgid "The log file has been attached to this email."
|
1773 |
msgstr ""
|
1774 |
|
@@ -2237,27 +2237,27 @@ msgstr ""
|
|
2237 |
msgid "Latest full backup found; identifier:"
|
2238 |
msgstr ""
|
2239 |
|
2240 |
-
#: src/addons/wp-cli.php:430, src/admin.php:
|
2241 |
msgid "unknown source"
|
2242 |
msgstr ""
|
2243 |
|
2244 |
-
#: src/addons/wp-cli.php:432, src/admin.php:
|
2245 |
msgid "Database (created by %s)"
|
2246 |
msgstr ""
|
2247 |
|
2248 |
-
#: src/addons/wp-cli.php:438, src/admin.php:
|
2249 |
msgid "External database"
|
2250 |
msgstr ""
|
2251 |
|
2252 |
-
#: src/addons/wp-cli.php:450, src/admin.php:
|
2253 |
msgid "Files and database WordPress backup (created by %s)"
|
2254 |
msgstr ""
|
2255 |
|
2256 |
-
#: src/addons/wp-cli.php:450, src/admin.php:
|
2257 |
msgid "Files backup (created by %s)"
|
2258 |
msgstr ""
|
2259 |
|
2260 |
-
#: src/addons/wp-cli.php:519, src/admin.php:818, src/class-updraftplus.php:1298, src/class-updraftplus.php:1342, src/includes/class-filesystem-functions.php:429, src/includes/class-storage-methods-interface.php:324, src/methods/addon-base-v2.php:93, src/methods/addon-base-v2.php:98, src/methods/addon-base-v2.php:205, src/methods/addon-base-v2.php:225, src/methods/stream-base.php:219, src/restorer.php:
|
2261 |
msgid "Error"
|
2262 |
msgstr ""
|
2263 |
|
@@ -2273,11 +2273,11 @@ msgstr ""
|
|
2273 |
msgid "No such backup set exists"
|
2274 |
msgstr ""
|
2275 |
|
2276 |
-
#: src/addons/wp-cli.php:648, src/admin.php:
|
2277 |
msgid "UpdraftPlus Restoration: Progress"
|
2278 |
msgstr ""
|
2279 |
|
2280 |
-
#: src/addons/wp-cli.php:662, src/admin.php:
|
2281 |
msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
|
2282 |
msgstr ""
|
2283 |
|
@@ -2297,6 +2297,14 @@ msgstr ""
|
|
2297 |
msgid "Why am I seeing this?"
|
2298 |
msgstr ""
|
2299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2300 |
#: src/admin.php:91
|
2301 |
msgid "template not found"
|
2302 |
msgstr ""
|
@@ -2309,11 +2317,11 @@ msgstr ""
|
|
2309 |
msgid "At the same time as the files backup"
|
2310 |
msgstr ""
|
2311 |
|
2312 |
-
#: src/admin.php:334, src/admin.php:
|
2313 |
msgid "Files"
|
2314 |
msgstr ""
|
2315 |
|
2316 |
-
#: src/admin.php:334, src/backup.php:
|
2317 |
msgid "Files and database"
|
2318 |
msgstr ""
|
2319 |
|
@@ -2417,7 +2425,7 @@ msgstr ""
|
|
2417 |
msgid "Error: the server sent us a response which we did not understand."
|
2418 |
msgstr ""
|
2419 |
|
2420 |
-
#: src/admin.php:816, src/restorer.php:
|
2421 |
msgid "Error data:"
|
2422 |
msgstr ""
|
2423 |
|
@@ -2429,7 +2437,7 @@ msgstr ""
|
|
2429 |
msgid "File ready."
|
2430 |
msgstr ""
|
2431 |
|
2432 |
-
#: src/admin.php:821, src/admin.php:2549, src/admin.php:2559, src/admin.php:2568, src/admin.php:2610, src/admin.php:
|
2433 |
msgid "Actions"
|
2434 |
msgstr ""
|
2435 |
|
@@ -2457,7 +2465,7 @@ msgstr ""
|
|
2457 |
msgid "PHP information"
|
2458 |
msgstr ""
|
2459 |
|
2460 |
-
#: src/admin.php:828, src/admin.php:
|
2461 |
msgid "Delete Old Directories"
|
2462 |
msgstr ""
|
2463 |
|
@@ -2517,7 +2525,7 @@ msgstr ""
|
|
2517 |
msgid "Backup Now"
|
2518 |
msgstr ""
|
2519 |
|
2520 |
-
#: src/admin.php:844, src/admin.php:
|
2521 |
msgid "Delete"
|
2522 |
msgstr ""
|
2523 |
|
@@ -2525,7 +2533,7 @@ msgstr ""
|
|
2525 |
msgid "Create"
|
2526 |
msgstr ""
|
2527 |
|
2528 |
-
#: src/admin.php:846, src/admin.php:
|
2529 |
msgid "Upload"
|
2530 |
msgstr ""
|
2531 |
|
@@ -2537,7 +2545,7 @@ msgstr ""
|
|
2537 |
msgid "Close"
|
2538 |
msgstr ""
|
2539 |
|
2540 |
-
#: src/admin.php:851, src/admin.php:
|
2541 |
msgid "Download log file"
|
2542 |
msgstr ""
|
2543 |
|
@@ -2713,7 +2721,7 @@ msgstr ""
|
|
2713 |
msgid "Complete"
|
2714 |
msgstr ""
|
2715 |
|
2716 |
-
#: src/admin.php:905, src/admin.php:
|
2717 |
msgid "The backup has finished running"
|
2718 |
msgstr ""
|
2719 |
|
@@ -3025,7 +3033,7 @@ msgstr ""
|
|
3025 |
msgid "No local copy present."
|
3026 |
msgstr ""
|
3027 |
|
3028 |
-
#: src/admin.php:2286, src/backup.php:
|
3029 |
msgid "Backup directory (%s) is not writable, or does not exist."
|
3030 |
msgstr ""
|
3031 |
|
@@ -3065,7 +3073,7 @@ msgstr ""
|
|
3065 |
msgid "Backup directory successfully created."
|
3066 |
msgstr ""
|
3067 |
|
3068 |
-
#: src/admin.php:2626, src/class-updraftplus.php:4046, src/restorer.php:
|
3069 |
msgid "Warning:"
|
3070 |
msgstr ""
|
3071 |
|
@@ -3173,538 +3181,538 @@ msgstr ""
|
|
3173 |
msgid "Download most recently modified log file"
|
3174 |
msgstr ""
|
3175 |
|
3176 |
-
#: src/admin.php:
|
3177 |
msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
|
3178 |
msgstr ""
|
3179 |
|
3180 |
-
#: src/admin.php:
|
3181 |
msgid "View Log"
|
3182 |
msgstr ""
|
3183 |
|
3184 |
-
#: src/admin.php:
|
3185 |
msgid "Backup begun"
|
3186 |
msgstr ""
|
3187 |
|
3188 |
-
#: src/admin.php:
|
3189 |
msgid "Creating file backup zips"
|
3190 |
msgstr ""
|
3191 |
|
3192 |
-
#: src/admin.php:
|
3193 |
msgid "Created file backup zips"
|
3194 |
msgstr ""
|
3195 |
|
3196 |
-
#: src/admin.php:
|
3197 |
msgid "Clone server being provisioned and booted (can take several minutes)"
|
3198 |
msgstr ""
|
3199 |
|
3200 |
-
#: src/admin.php:
|
3201 |
msgid "Uploading files to remote storage"
|
3202 |
msgstr ""
|
3203 |
|
3204 |
-
#: src/admin.php:
|
3205 |
msgid "Sending files to remote site"
|
3206 |
msgstr ""
|
3207 |
|
3208 |
-
#: src/admin.php:
|
3209 |
msgid "(%s%%, file %s of %s)"
|
3210 |
msgstr ""
|
3211 |
|
3212 |
-
#: src/admin.php:
|
3213 |
msgid "Pruning old backup sets"
|
3214 |
msgstr ""
|
3215 |
|
3216 |
-
#: src/admin.php:
|
3217 |
msgid "Waiting until scheduled time to retry because of errors"
|
3218 |
msgstr ""
|
3219 |
|
3220 |
-
#: src/admin.php:
|
3221 |
msgid "Backup finished"
|
3222 |
msgstr ""
|
3223 |
|
3224 |
-
#: src/admin.php:
|
3225 |
msgid "Created database backup"
|
3226 |
msgstr ""
|
3227 |
|
3228 |
-
#: src/admin.php:
|
3229 |
msgid "Creating database backup"
|
3230 |
msgstr ""
|
3231 |
|
3232 |
-
#: src/admin.php:
|
3233 |
msgid "table: %s"
|
3234 |
msgstr ""
|
3235 |
|
3236 |
-
#: src/admin.php:
|
3237 |
msgid "Encrypting database"
|
3238 |
msgstr ""
|
3239 |
|
3240 |
-
#: src/admin.php:
|
3241 |
msgid "Encrypted database"
|
3242 |
msgstr ""
|
3243 |
|
3244 |
-
#: src/admin.php:
|
3245 |
msgid "Unknown"
|
3246 |
msgstr ""
|
3247 |
|
3248 |
-
#: src/admin.php:
|
3249 |
msgid "next resumption: %d (after %ss)"
|
3250 |
msgstr ""
|
3251 |
|
3252 |
-
#: src/admin.php:
|
3253 |
msgid "last activity: %ss ago"
|
3254 |
msgstr ""
|
3255 |
|
3256 |
-
#: src/admin.php:
|
3257 |
msgid "Job ID: %s"
|
3258 |
msgstr ""
|
3259 |
|
3260 |
-
#: src/admin.php:
|
3261 |
msgid "Warning: %s"
|
3262 |
msgstr ""
|
3263 |
|
3264 |
-
#: src/admin.php:
|
3265 |
msgid "show log"
|
3266 |
msgstr ""
|
3267 |
|
3268 |
-
#: src/admin.php:
|
3269 |
msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
|
3270 |
msgstr ""
|
3271 |
|
3272 |
-
#: src/admin.php:
|
3273 |
msgid "stop"
|
3274 |
msgstr ""
|
3275 |
|
3276 |
-
#: src/admin.php:
|
3277 |
msgid "Remove old directories"
|
3278 |
msgstr ""
|
3279 |
|
3280 |
-
#: src/admin.php:
|
3281 |
msgid "Old directories successfully removed."
|
3282 |
msgstr ""
|
3283 |
|
3284 |
-
#: src/admin.php:
|
3285 |
msgid "Old directory removal failed for some reason. You may want to do this manually."
|
3286 |
msgstr ""
|
3287 |
|
3288 |
-
#: src/admin.php:
|
3289 |
msgid "OK"
|
3290 |
msgstr ""
|
3291 |
|
3292 |
-
#: src/admin.php:
|
3293 |
msgid "The request to the filesystem to create the directory failed."
|
3294 |
msgstr ""
|
3295 |
|
3296 |
-
#: src/admin.php:
|
3297 |
msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
|
3298 |
msgstr ""
|
3299 |
|
3300 |
-
#: src/admin.php:
|
3301 |
msgid "The folder exists, but your webserver does not have permission to write to it."
|
3302 |
msgstr ""
|
3303 |
|
3304 |
-
#: src/admin.php:
|
3305 |
msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
|
3306 |
msgstr ""
|
3307 |
|
3308 |
-
#: src/admin.php:
|
3309 |
msgid "incremental backup; base backup: %s"
|
3310 |
msgstr ""
|
3311 |
|
3312 |
-
#: src/admin.php:
|
3313 |
msgid "No backup has been completed"
|
3314 |
msgstr ""
|
3315 |
|
3316 |
-
#: src/admin.php:
|
3317 |
msgctxt "i.e. Non-automatic"
|
3318 |
msgid "Manual"
|
3319 |
msgstr ""
|
3320 |
|
3321 |
-
#: src/admin.php:
|
3322 |
msgid "Backup directory specified is writable, which is good."
|
3323 |
msgstr ""
|
3324 |
|
3325 |
-
#: src/admin.php:
|
3326 |
msgid "Backup directory specified does <b>not</b> exist."
|
3327 |
msgstr ""
|
3328 |
|
3329 |
-
#: src/admin.php:
|
3330 |
msgid "Backup directory specified exists, but is <b>not</b> writable."
|
3331 |
msgstr ""
|
3332 |
|
3333 |
-
#: src/admin.php:
|
3334 |
msgid "Follow this link to attempt to create the directory and set the permissions"
|
3335 |
msgstr ""
|
3336 |
|
3337 |
-
#: src/admin.php:
|
3338 |
msgid "or, to reset this option"
|
3339 |
msgstr ""
|
3340 |
|
3341 |
-
#: src/admin.php:
|
3342 |
msgid "press here"
|
3343 |
msgstr ""
|
3344 |
|
3345 |
-
#: src/admin.php:
|
3346 |
msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
|
3347 |
msgstr ""
|
3348 |
|
3349 |
-
#: src/admin.php:
|
3350 |
msgid "Your wp-content directory server path: %s"
|
3351 |
msgstr ""
|
3352 |
|
3353 |
-
#: src/admin.php:
|
3354 |
msgid "Any other directories found inside wp-content"
|
3355 |
msgstr ""
|
3356 |
|
3357 |
-
#: src/admin.php:
|
3358 |
msgid "Exclude these from"
|
3359 |
msgstr ""
|
3360 |
|
3361 |
-
#: src/admin.php:
|
3362 |
msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. Ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
|
3363 |
msgstr ""
|
3364 |
|
3365 |
-
#: src/admin.php:
|
3366 |
msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
|
3367 |
msgstr ""
|
3368 |
|
3369 |
-
#: src/admin.php:
|
3370 |
msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
|
3371 |
msgstr ""
|
3372 |
|
3373 |
-
#: src/admin.php:
|
3374 |
msgid "Only allow this backup to be deleted manually (i.e. keep it even if retention limits are hit)."
|
3375 |
msgstr ""
|
3376 |
|
3377 |
-
#: src/admin.php:
|
3378 |
msgid "Total backup size:"
|
3379 |
msgstr ""
|
3380 |
|
3381 |
-
#: src/admin.php:
|
3382 |
msgid "Backup created by unknown source (%s) - cannot be restored."
|
3383 |
msgstr ""
|
3384 |
|
3385 |
-
#: src/admin.php:
|
3386 |
msgid "Press here to download or browse"
|
3387 |
msgstr ""
|
3388 |
|
3389 |
-
#: src/admin.php:
|
3390 |
msgid "(%d archive(s) in set)."
|
3391 |
msgstr ""
|
3392 |
|
3393 |
-
#: src/admin.php:
|
3394 |
msgid "You appear to be missing one or more archives from this multi-archive set."
|
3395 |
msgstr ""
|
3396 |
|
3397 |
-
#: src/admin.php:
|
3398 |
msgid "(Not finished)"
|
3399 |
msgstr ""
|
3400 |
|
3401 |
-
#: src/admin.php:
|
3402 |
msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
|
3403 |
msgstr ""
|
3404 |
|
3405 |
-
#: src/admin.php:
|
3406 |
msgid "(backup set imported from remote location)"
|
3407 |
msgstr ""
|
3408 |
|
3409 |
-
#: src/admin.php:
|
3410 |
msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
|
3411 |
msgstr ""
|
3412 |
|
3413 |
-
#: src/admin.php:
|
3414 |
msgid "After pressing this button, you can select where to upload your backup from a list of your currently saved remote storage locations"
|
3415 |
msgstr ""
|
3416 |
|
3417 |
-
#: src/admin.php:
|
3418 |
msgid "Delete this backup set"
|
3419 |
msgstr ""
|
3420 |
|
3421 |
-
#: src/admin.php:
|
3422 |
msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
|
3423 |
msgstr ""
|
3424 |
|
3425 |
-
#: src/admin.php:
|
3426 |
msgid "Backup does not exist in the backup history"
|
3427 |
msgstr ""
|
3428 |
|
3429 |
-
#: src/admin.php:
|
3430 |
msgid "ABORT: Could not find the information on which entities to restore."
|
3431 |
msgstr ""
|
3432 |
|
3433 |
-
#: src/admin.php:
|
3434 |
msgid "If making a request for support, please include this information:"
|
3435 |
msgstr ""
|
3436 |
|
3437 |
-
#: src/admin.php:
|
3438 |
msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
|
3439 |
msgstr ""
|
3440 |
|
3441 |
-
#: src/admin.php:
|
3442 |
msgid "settings"
|
3443 |
msgstr ""
|
3444 |
|
3445 |
-
#: src/admin.php:
|
3446 |
msgid "Not got any remote storage?"
|
3447 |
msgstr ""
|
3448 |
|
3449 |
-
#: src/admin.php:
|
3450 |
msgid "Check out UpdraftPlus Vault."
|
3451 |
msgstr ""
|
3452 |
|
3453 |
-
#: src/admin.php:
|
3454 |
msgid "Send this backup to remote storage"
|
3455 |
msgstr ""
|
3456 |
|
3457 |
-
#: src/admin.php:
|
3458 |
msgid "UpdraftPlus seems to have been updated to version (%s), which is different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
|
3459 |
msgstr ""
|
3460 |
|
3461 |
-
#: src/admin.php:
|
3462 |
msgid "This button is disabled because your backup directory is not writable (see the settings)."
|
3463 |
msgstr ""
|
3464 |
|
3465 |
-
#: src/admin.php:
|
3466 |
msgid "Your settings have been saved."
|
3467 |
msgstr ""
|
3468 |
|
3469 |
-
#: src/admin.php:
|
3470 |
msgid "Your settings failed to save. Please refresh the settings page and try again"
|
3471 |
msgstr ""
|
3472 |
|
3473 |
-
#: src/admin.php:
|
3474 |
msgid "authentication error"
|
3475 |
msgstr ""
|
3476 |
|
3477 |
-
#: src/admin.php:
|
3478 |
msgid "Remote storage method and instance id are required for authentication."
|
3479 |
msgstr ""
|
3480 |
|
3481 |
-
#: src/admin.php:
|
3482 |
msgid "Your settings have been wiped."
|
3483 |
msgstr ""
|
3484 |
|
3485 |
-
#: src/admin.php:
|
3486 |
msgid "Known backups (raw)"
|
3487 |
msgstr ""
|
3488 |
|
3489 |
-
#: src/admin.php:
|
3490 |
msgid "Options (raw)"
|
3491 |
msgstr ""
|
3492 |
|
3493 |
-
#: src/admin.php:
|
3494 |
msgid "Value"
|
3495 |
msgstr ""
|
3496 |
|
3497 |
-
#: src/admin.php:
|
3498 |
msgid "The file %s has a \"byte order mark\" (BOM) at its beginning."
|
3499 |
msgid_plural "The files %s have a \"byte order mark\" (BOM) at their beginning."
|
3500 |
msgstr[0] ""
|
3501 |
msgstr[1] ""
|
3502 |
|
3503 |
-
#: src/admin.php:
|
3504 |
msgid "Follow this link for more information"
|
3505 |
msgstr ""
|
3506 |
|
3507 |
-
#: src/admin.php:
|
3508 |
msgid "%s version:"
|
3509 |
msgstr ""
|
3510 |
|
3511 |
-
#: src/admin.php:
|
3512 |
msgid "Clone region:"
|
3513 |
msgstr ""
|
3514 |
|
3515 |
-
#: src/admin.php:
|
3516 |
msgid "Forbid non-administrators to login to WordPress on your clone"
|
3517 |
msgstr ""
|
3518 |
|
3519 |
-
#: src/admin.php:
|
3520 |
msgid "(current version)"
|
3521 |
msgstr ""
|
3522 |
|
3523 |
-
#: src/admin.php:
|
3524 |
msgid "Your clone has started and will be available at the following URLs once it is ready."
|
3525 |
msgstr ""
|
3526 |
|
3527 |
-
#: src/admin.php:
|
3528 |
msgid "Front page:"
|
3529 |
msgstr ""
|
3530 |
|
3531 |
-
#: src/admin.php:
|
3532 |
msgid "Dashboard:"
|
3533 |
msgstr ""
|
3534 |
|
3535 |
-
#: src/admin.php:
|
3536 |
msgid "You can find your temporary clone information in your updraftplus.com account here."
|
3537 |
msgstr ""
|
3538 |
|
3539 |
-
#: src/admin.php:
|
3540 |
msgid "Your clone has started, network information is not yet available but will be displayed here and at your updraftplus.com account once it is ready."
|
3541 |
msgstr ""
|
3542 |
|
3543 |
-
#: src/backup.php:
|
3544 |
msgid "%s - could not back this entity up; the corresponding directory does not exist (%s)"
|
3545 |
msgstr ""
|
3546 |
|
3547 |
-
#: src/backup.php:
|
3548 |
msgid "Could not create %s zip. Consult the log file for more information."
|
3549 |
msgstr ""
|
3550 |
|
3551 |
-
#: src/backup.php:
|
3552 |
msgid "A PHP exception (%s) has occurred: %s"
|
3553 |
msgstr ""
|
3554 |
|
3555 |
-
#: src/backup.php:
|
3556 |
msgid "A PHP fatal error (%s) has occurred: %s"
|
3557 |
msgstr ""
|
3558 |
|
3559 |
-
#: src/backup.php:
|
3560 |
msgid "Full backup"
|
3561 |
msgstr ""
|
3562 |
|
3563 |
-
#: src/backup.php:
|
3564 |
msgid "Incremental"
|
3565 |
msgstr ""
|
3566 |
|
3567 |
-
#: src/backup.php:
|
3568 |
msgid "The backup was aborted by the user"
|
3569 |
msgstr ""
|
3570 |
|
3571 |
-
#: src/backup.php:
|
3572 |
msgid "Files (database backup has not completed)"
|
3573 |
msgstr ""
|
3574 |
|
3575 |
-
#: src/backup.php:
|
3576 |
msgid "Files only (database was not part of this particular schedule)"
|
3577 |
msgstr ""
|
3578 |
|
3579 |
-
#: src/backup.php:
|
3580 |
msgid "Database (files backup has not completed)"
|
3581 |
msgstr ""
|
3582 |
|
3583 |
-
#: src/backup.php:
|
3584 |
msgid "Database only (files were not part of this particular schedule)"
|
3585 |
msgstr ""
|
3586 |
|
3587 |
-
#: src/backup.php:
|
3588 |
msgid "Unknown/unexpected error - please raise a support request"
|
3589 |
msgstr ""
|
3590 |
|
3591 |
-
#: src/backup.php:
|
3592 |
msgid "Errors encountered:"
|
3593 |
msgstr ""
|
3594 |
|
3595 |
-
#: src/backup.php:
|
3596 |
msgid "Warnings encountered:"
|
3597 |
msgstr ""
|
3598 |
|
3599 |
-
#: src/backup.php:
|
3600 |
msgid "Backed up: %s"
|
3601 |
msgstr ""
|
3602 |
|
3603 |
-
#: src/backup.php:
|
3604 |
msgid "Email reports created by UpdraftPlus (free edition) bring you the latest UpdraftPlus.com news"
|
3605 |
msgstr ""
|
3606 |
|
3607 |
-
#: src/backup.php:
|
3608 |
msgid "read more at %s"
|
3609 |
msgstr ""
|
3610 |
|
3611 |
-
#: src/backup.php:
|
3612 |
msgid "WordPress backup is complete"
|
3613 |
msgstr ""
|
3614 |
|
3615 |
-
#: src/backup.php:
|
3616 |
msgid "Backup contains:"
|
3617 |
msgstr ""
|
3618 |
|
3619 |
-
#: src/backup.php:
|
3620 |
msgid "database connection attempt failed."
|
3621 |
msgstr ""
|
3622 |
|
3623 |
-
#: src/backup.php:
|
3624 |
msgid "please wait for the rescheduled attempt"
|
3625 |
msgstr ""
|
3626 |
|
3627 |
-
#: src/backup.php:
|
3628 |
msgid "No database tables found"
|
3629 |
msgstr ""
|
3630 |
|
3631 |
-
#: src/backup.php:
|
3632 |
msgid "The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail."
|
3633 |
msgstr ""
|
3634 |
|
3635 |
-
#: src/backup.php:
|
3636 |
msgid "Table %s has very many rows (%s) - we hope your web hosting company gives you enough resources to dump out that table in the backup"
|
3637 |
msgstr ""
|
3638 |
|
3639 |
-
#: src/backup.php:
|
3640 |
msgid "If not, you will need to either remove data from this table, or contact your hosting company to request more resources."
|
3641 |
msgstr ""
|
3642 |
|
3643 |
-
#: src/backup.php:
|
3644 |
msgid "The database backup appears to have failed"
|
3645 |
msgstr ""
|
3646 |
|
3647 |
-
#: src/backup.php:
|
3648 |
msgid "no options or sitemeta table was found"
|
3649 |
msgstr ""
|
3650 |
|
3651 |
-
#: src/backup.php:
|
3652 |
msgid "the options table was not found"
|
3653 |
msgstr ""
|
3654 |
|
3655 |
-
#: src/backup.php:
|
3656 |
msgid "Failed to open database file for reading:"
|
3657 |
msgstr ""
|
3658 |
|
3659 |
-
#: src/backup.php:
|
3660 |
msgid "An error occurred whilst closing the final database file"
|
3661 |
msgstr ""
|
3662 |
|
3663 |
-
#: src/backup.php:
|
3664 |
msgid "Could not open the backup file for writing"
|
3665 |
msgstr ""
|
3666 |
|
3667 |
-
#: src/backup.php:
|
3668 |
msgid "Infinite recursion: consult your log for more information"
|
3669 |
msgstr ""
|
3670 |
|
3671 |
-
#: src/backup.php:
|
3672 |
msgid "%s: unreadable file - could not be backed up (check the file permissions and ownership)"
|
3673 |
msgstr ""
|
3674 |
|
3675 |
-
#: src/backup.php:
|
3676 |
msgid "Failed to open directory (check the file permissions and ownership): %s"
|
3677 |
msgstr ""
|
3678 |
|
3679 |
-
#: src/backup.php:
|
3680 |
msgid "%s: unreadable file - could not be backed up"
|
3681 |
msgstr ""
|
3682 |
|
3683 |
-
#: src/backup.php:
|
3684 |
msgid "Failed to open the zip file (%s) - %s"
|
3685 |
msgstr ""
|
3686 |
|
3687 |
-
#: src/backup.php:
|
3688 |
msgid "A very large file was encountered: %s (size: %s Mb)"
|
3689 |
msgstr ""
|
3690 |
|
3691 |
-
#: src/backup.php:
|
3692 |
msgid "Your free space in your hosting account is very low - only %s Mb remain"
|
3693 |
msgstr ""
|
3694 |
|
3695 |
-
#: src/backup.php:
|
3696 |
msgid "The zip engine returned the message: %s."
|
3697 |
msgstr ""
|
3698 |
|
3699 |
-
#: src/backup.php:
|
3700 |
msgid "A zip error occurred"
|
3701 |
msgstr ""
|
3702 |
|
3703 |
-
#: src/backup.php:
|
3704 |
msgid "your web hosting account appears to be full; please see: %s"
|
3705 |
msgstr ""
|
3706 |
|
3707 |
-
#: src/backup.php:
|
3708 |
msgid "check your log for more details."
|
3709 |
msgstr ""
|
3710 |
|
@@ -3996,7 +4004,7 @@ msgstr ""
|
|
3996 |
msgid "Could not save backup history because we have no backup array. Backup probably failed."
|
3997 |
msgstr ""
|
3998 |
|
3999 |
-
#: src/class-updraftplus.php:3868, src/includes/class-updraftplus-encryption.php:336, src/restorer.php:
|
4000 |
msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
|
4001 |
msgstr ""
|
4002 |
|
@@ -4004,7 +4012,7 @@ msgstr ""
|
|
4004 |
msgid "Decryption failed. The database file is encrypted."
|
4005 |
msgstr ""
|
4006 |
|
4007 |
-
#: src/class-updraftplus.php:3880, src/includes/class-updraftplus-encryption.php:354, src/restorer.php:
|
4008 |
msgid "Decryption failed. The most likely cause is that you used the wrong key."
|
4009 |
msgstr ""
|
4010 |
|
@@ -4048,11 +4056,11 @@ msgstr ""
|
|
4048 |
msgid "You can search and replace your database (for migrating a website to a new location/URL) with the Migrator add-on - follow this link for more information"
|
4049 |
msgstr ""
|
4050 |
|
4051 |
-
#: src/class-updraftplus.php:3990, src/restorer.php:
|
4052 |
msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
|
4053 |
msgstr ""
|
4054 |
|
4055 |
-
#: src/class-updraftplus.php:3990, src/restorer.php:
|
4056 |
msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
|
4057 |
msgstr ""
|
4058 |
|
@@ -4080,7 +4088,7 @@ msgstr ""
|
|
4080 |
msgid "Any support requests to do with %s should be raised with your web hosting company."
|
4081 |
msgstr ""
|
4082 |
|
4083 |
-
#: src/class-updraftplus.php:4024, src/restorer.php:
|
4084 |
msgid "Old table prefix:"
|
4085 |
msgstr ""
|
4086 |
|
@@ -4088,7 +4096,7 @@ msgstr ""
|
|
4088 |
msgid "Backup label:"
|
4089 |
msgstr ""
|
4090 |
|
4091 |
-
#: src/class-updraftplus.php:4035, src/class-updraftplus.php:4038, src/restorer.php:
|
4092 |
msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
|
4093 |
msgstr ""
|
4094 |
|
@@ -4100,7 +4108,7 @@ msgstr ""
|
|
4100 |
msgid "Please read this link for important information on this process."
|
4101 |
msgstr ""
|
4102 |
|
4103 |
-
#: src/class-updraftplus.php:4042, src/restorer.php:
|
4104 |
msgid "To import an ordinary WordPress site into a multisite installation requires %s."
|
4105 |
msgstr ""
|
4106 |
|
@@ -4112,7 +4120,7 @@ msgstr ""
|
|
4112 |
msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
|
4113 |
msgstr ""
|
4114 |
|
4115 |
-
#: src/class-updraftplus.php:4053, src/restorer.php:
|
4116 |
msgid "Site information:"
|
4117 |
msgstr ""
|
4118 |
|
@@ -4228,11 +4236,11 @@ msgstr ""
|
|
4228 |
msgid "Your web server's PHP installation has these functions disabled: %s."
|
4229 |
msgstr ""
|
4230 |
|
4231 |
-
#: src/includes/class-filesystem-functions.php:294, src/methods/ftp.php:330, src/restorer.php:
|
4232 |
msgid "Your hosting company must enable these functions before %s can work."
|
4233 |
msgstr ""
|
4234 |
|
4235 |
-
#: src/includes/class-filesystem-functions.php:294, src/restorer.php:
|
4236 |
msgid "restoration"
|
4237 |
msgstr ""
|
4238 |
|
@@ -4248,7 +4256,7 @@ msgstr ""
|
|
4248 |
msgid "The attempt to undo the double-compression succeeded."
|
4249 |
msgstr ""
|
4250 |
|
4251 |
-
#: src/includes/class-filesystem-functions.php:
|
4252 |
msgid "Unzip progress: %d out of %d files"
|
4253 |
msgstr ""
|
4254 |
|
@@ -4492,7 +4500,7 @@ msgstr ""
|
|
4492 |
msgid "Allow only administrators to log in"
|
4493 |
msgstr ""
|
4494 |
|
4495 |
-
#: src/includes/updraftplus-login.php:58, src/methods/updraftvault.php:687, src/udaddons/updraftplus-addons.php:
|
4496 |
msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
|
4497 |
msgstr ""
|
4498 |
|
@@ -4983,15 +4991,15 @@ msgstr ""
|
|
4983 |
msgid "%s end-point"
|
4984 |
msgstr ""
|
4985 |
|
4986 |
-
#: src/methods/dropbox.php:
|
4987 |
msgid "You do not appear to be authenticated with Dropbox"
|
4988 |
msgstr ""
|
4989 |
|
4990 |
-
#: src/methods/dropbox.php:
|
4991 |
msgid "error: %s (see log file for more)"
|
4992 |
msgstr ""
|
4993 |
|
4994 |
-
#: src/methods/dropbox.php:
|
4995 |
msgid "error: failed to upload file to %s (see log file for more)"
|
4996 |
msgstr ""
|
4997 |
|
@@ -4999,67 +5007,67 @@ msgstr ""
|
|
4999 |
msgid "did not return the expected response - check your log file for more details"
|
5000 |
msgstr ""
|
5001 |
|
5002 |
-
#: src/methods/dropbox.php:305, src/methods/dropbox.php:
|
5003 |
msgid "failed to upload file to %s (see log file for more)"
|
5004 |
msgstr ""
|
5005 |
|
5006 |
-
#: src/methods/dropbox.php:
|
5007 |
msgid "%s returned an unexpected HTTP response: %s"
|
5008 |
msgstr ""
|
5009 |
|
5010 |
-
#: src/methods/dropbox.php:
|
5011 |
msgid "You do not appear to be authenticated with %s (whilst deleting)"
|
5012 |
msgstr ""
|
5013 |
|
5014 |
-
#: src/methods/dropbox.php:
|
5015 |
msgid "Failed to access %s when deleting (see log file for more)"
|
5016 |
msgstr ""
|
5017 |
|
5018 |
-
#: src/methods/dropbox.php:
|
5019 |
msgid "You do not appear to be authenticated with %s"
|
5020 |
msgstr ""
|
5021 |
|
5022 |
-
#: src/methods/dropbox.php:
|
5023 |
msgid "Need to use sub-folders?"
|
5024 |
msgstr ""
|
5025 |
|
5026 |
-
#: src/methods/dropbox.php:
|
5027 |
msgid "Backups are saved in"
|
5028 |
msgstr ""
|
5029 |
|
5030 |
-
#: src/methods/dropbox.php:
|
5031 |
msgid "If you backup several sites into the same Dropbox and want to organize with sub-folders, then "
|
5032 |
msgstr ""
|
5033 |
|
5034 |
-
#: src/methods/dropbox.php:
|
5035 |
msgid "there's an add-on for that."
|
5036 |
msgstr ""
|
5037 |
|
5038 |
-
#: src/methods/dropbox.php:
|
5039 |
msgid "Dropbox"
|
5040 |
msgstr ""
|
5041 |
|
5042 |
-
#: src/methods/dropbox.php:
|
5043 |
msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
|
5044 |
msgstr ""
|
5045 |
|
5046 |
-
#: src/methods/dropbox.php:
|
5047 |
msgid "%s authentication"
|
5048 |
msgstr ""
|
5049 |
|
5050 |
-
#: src/methods/dropbox.php:
|
5051 |
msgid "%s de-authentication"
|
5052 |
msgstr ""
|
5053 |
|
5054 |
-
#: src/methods/dropbox.php:
|
5055 |
msgid "Success:"
|
5056 |
msgstr ""
|
5057 |
|
5058 |
-
#: src/methods/dropbox.php:
|
5059 |
msgid "you have authenticated your %s account"
|
5060 |
msgstr ""
|
5061 |
|
5062 |
-
#: src/methods/dropbox.php:
|
5063 |
msgid "though part of the returned information was not as expected - your mileage may vary"
|
5064 |
msgstr ""
|
5065 |
|
@@ -5557,11 +5565,11 @@ msgstr ""
|
|
5557 |
msgid "You do not currently have any UpdraftPlus Vault quota"
|
5558 |
msgstr ""
|
5559 |
|
5560 |
-
#: src/methods/updraftvault.php:714, src/methods/updraftvault.php:729, src/udaddons/updraftplus-addons.php:
|
5561 |
msgid "UpdraftPlus.Com returned a response, but we could not understand it"
|
5562 |
msgstr ""
|
5563 |
|
5564 |
-
#: src/methods/updraftvault.php:720, src/udaddons/updraftplus-addons.php:
|
5565 |
msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
|
5566 |
msgstr ""
|
5567 |
|
@@ -5569,11 +5577,11 @@ msgstr ""
|
|
5569 |
msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
|
5570 |
msgstr ""
|
5571 |
|
5572 |
-
#: src/methods/updraftvault.php:723, src/udaddons/updraftplus-addons.php:
|
5573 |
msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
|
5574 |
msgstr ""
|
5575 |
|
5576 |
-
#: src/methods/updraftvault.php:726, src/udaddons/updraftplus-addons.php:
|
5577 |
msgid "Your email address and password were not recognised by UpdraftPlus.Com"
|
5578 |
msgstr ""
|
5579 |
|
@@ -5597,290 +5605,290 @@ msgstr ""
|
|
5597 |
msgid "(This applies to all WordPress backup plugins unless they have been explicitly coded for multisite compatibility)."
|
5598 |
msgstr ""
|
5599 |
|
5600 |
-
#: src/restorer.php:
|
5601 |
msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old)."
|
5602 |
msgstr ""
|
5603 |
|
5604 |
-
#: src/restorer.php:
|
5605 |
msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
|
5606 |
msgstr ""
|
5607 |
|
5608 |
-
#: src/restorer.php:
|
5609 |
msgid "Looking for %s archive: file name: %s"
|
5610 |
msgstr ""
|
5611 |
|
5612 |
-
#: src/restorer.php:
|
5613 |
msgid "Skipping: this archive was already restored."
|
5614 |
msgstr ""
|
5615 |
|
5616 |
-
#: src/restorer.php:
|
5617 |
msgid "Archive is expected to be size:"
|
5618 |
msgstr ""
|
5619 |
|
5620 |
-
#: src/restorer.php:
|
5621 |
msgid "file is size:"
|
5622 |
msgstr ""
|
5623 |
|
5624 |
-
#: src/restorer.php:
|
5625 |
msgid "The backup records do not contain information about the proper size of this file."
|
5626 |
msgstr ""
|
5627 |
|
5628 |
-
#: src/restorer.php:
|
5629 |
msgid "Could not find one of the files for restoration"
|
5630 |
msgstr ""
|
5631 |
|
5632 |
-
#: src/restorer.php:
|
5633 |
msgid "Final checks"
|
5634 |
msgstr ""
|
5635 |
|
5636 |
-
#: src/restorer.php:
|
5637 |
msgid "Error message"
|
5638 |
msgstr ""
|
5639 |
|
5640 |
-
#: src/restorer.php:
|
5641 |
msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
|
5642 |
msgstr ""
|
5643 |
|
5644 |
-
#: src/restorer.php:
|
5645 |
msgid "Backup file not available."
|
5646 |
msgstr ""
|
5647 |
|
5648 |
-
#: src/restorer.php:
|
5649 |
msgid "Copying this entity failed."
|
5650 |
msgstr ""
|
5651 |
|
5652 |
-
#: src/restorer.php:
|
5653 |
msgid "Unpacking backup..."
|
5654 |
msgstr ""
|
5655 |
|
5656 |
-
#: src/restorer.php:
|
5657 |
msgid "Decrypting database (can take a while)..."
|
5658 |
msgstr ""
|
5659 |
|
5660 |
-
#: src/restorer.php:
|
5661 |
msgid "Database successfully decrypted."
|
5662 |
msgstr ""
|
5663 |
|
5664 |
-
#: src/restorer.php:
|
5665 |
msgid "Moving old data out of the way..."
|
5666 |
msgstr ""
|
5667 |
|
5668 |
-
#: src/restorer.php:
|
5669 |
msgid "Moving unpacked backup into place..."
|
5670 |
msgstr ""
|
5671 |
|
5672 |
-
#: src/restorer.php:
|
5673 |
msgid "Restoring the database (on a large site this can take a long time - if it times out (which can happen if your web hosting company has configured your hosting to limit resources) then you should use a different method, such as phpMyAdmin)..."
|
5674 |
msgstr ""
|
5675 |
|
5676 |
-
#: src/restorer.php:
|
5677 |
msgid "Cleaning up rubbish..."
|
5678 |
msgstr ""
|
5679 |
|
5680 |
-
#: src/restorer.php:
|
5681 |
msgid "Could not move old files out of the way."
|
5682 |
msgstr ""
|
5683 |
|
5684 |
-
#: src/restorer.php:
|
5685 |
msgid "You should check the file ownerships and permissions in your WordPress installation"
|
5686 |
msgstr ""
|
5687 |
|
5688 |
-
#: src/restorer.php:
|
5689 |
msgid "Could not delete old directory."
|
5690 |
msgstr ""
|
5691 |
|
5692 |
-
#: src/restorer.php:
|
5693 |
msgid "Could not move new files into place. Check your wp-content/upgrade folder."
|
5694 |
msgstr ""
|
5695 |
|
5696 |
-
#: src/restorer.php:
|
5697 |
msgid "Could not move the files into place. Check your file permissions."
|
5698 |
msgstr ""
|
5699 |
|
5700 |
-
#: src/restorer.php:
|
5701 |
msgid "Failed to delete working directory after restoring."
|
5702 |
msgstr ""
|
5703 |
|
5704 |
-
#: src/restorer.php:
|
5705 |
msgid "Failed to unpack the archive"
|
5706 |
msgstr ""
|
5707 |
|
5708 |
-
#: src/restorer.php:
|
5709 |
msgid "Failed to read the manifest file from backup."
|
5710 |
msgstr ""
|
5711 |
|
5712 |
-
#: src/restorer.php:
|
5713 |
msgid "Failed to find a manifest file in the backup."
|
5714 |
msgstr ""
|
5715 |
|
5716 |
-
#: src/restorer.php:
|
5717 |
msgid "Failed to read from the working directory."
|
5718 |
msgstr ""
|
5719 |
|
5720 |
-
#: src/restorer.php:
|
5721 |
msgid "Failed to create a temporary directory"
|
5722 |
msgstr ""
|
5723 |
|
5724 |
-
#: src/restorer.php:
|
5725 |
msgid "Failed to write out the decrypted database to the filesystem"
|
5726 |
msgstr ""
|
5727 |
|
5728 |
-
#: src/restorer.php:
|
5729 |
msgid "The directory does not exist"
|
5730 |
msgstr ""
|
5731 |
|
5732 |
-
#: src/restorer.php:
|
5733 |
msgid "wp-config.php from backup: will restore as wp-config-backup.php"
|
5734 |
msgstr ""
|
5735 |
|
5736 |
-
#: src/restorer.php:
|
5737 |
msgid "wp-config.php from backup: restoring (as per user's request)"
|
5738 |
msgstr ""
|
5739 |
|
5740 |
-
#: src/restorer.php:
|
5741 |
msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
|
5742 |
msgstr ""
|
5743 |
|
5744 |
-
#: src/restorer.php:
|
5745 |
msgid "file"
|
5746 |
msgstr ""
|
5747 |
|
5748 |
-
#: src/restorer.php:
|
5749 |
msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
|
5750 |
msgstr ""
|
5751 |
|
5752 |
-
#: src/restorer.php:
|
5753 |
msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
|
5754 |
msgstr ""
|
5755 |
|
5756 |
-
#: src/restorer.php:
|
5757 |
msgid "Deferring..."
|
5758 |
msgstr ""
|
5759 |
|
5760 |
-
#: src/restorer.php:
|
5761 |
msgid "The WordPress content folder (wp-content) was not found in this zip file."
|
5762 |
msgstr ""
|
5763 |
|
5764 |
-
#: src/restorer.php:
|
5765 |
msgid "Files found:"
|
5766 |
msgstr ""
|
5767 |
|
5768 |
-
#: src/restorer.php:
|
5769 |
msgid "Please supply the requested information, and then continue."
|
5770 |
msgstr ""
|
5771 |
|
5772 |
-
#: src/restorer.php:
|
5773 |
msgid "Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method."
|
5774 |
msgstr ""
|
5775 |
|
5776 |
-
#: src/restorer.php:
|
5777 |
msgid "Failed to find database file"
|
5778 |
msgstr ""
|
5779 |
|
5780 |
-
#: src/restorer.php:
|
5781 |
msgid "Failed to open database file"
|
5782 |
msgstr ""
|
5783 |
|
5784 |
-
#: src/restorer.php:
|
5785 |
msgid "Your database user does not have permission to drop tables"
|
5786 |
msgstr ""
|
5787 |
|
5788 |
-
#: src/restorer.php:
|
5789 |
msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
|
5790 |
msgstr ""
|
5791 |
|
5792 |
-
#: src/restorer.php:
|
5793 |
msgid "Your database user does not have permission to drop tables. We will attempt to restore by simply emptying the tables; this should work as long as you are restoring from a WordPress version with the same database structure (%s)"
|
5794 |
msgstr ""
|
5795 |
|
5796 |
-
#: src/restorer.php:
|
5797 |
msgid "Backup of: %s"
|
5798 |
msgstr ""
|
5799 |
|
5800 |
-
#: src/restorer.php:
|
5801 |
msgid "Backup created by:"
|
5802 |
msgstr ""
|
5803 |
|
5804 |
-
#: src/restorer.php:
|
5805 |
msgid "Site home:"
|
5806 |
msgstr ""
|
5807 |
|
5808 |
-
#: src/restorer.php:
|
5809 |
msgid "Content URL:"
|
5810 |
msgstr ""
|
5811 |
|
5812 |
-
#: src/restorer.php:
|
5813 |
msgid "Uploads URL:"
|
5814 |
msgstr ""
|
5815 |
|
5816 |
-
#: src/restorer.php:
|
5817 |
msgid "Skipped tables:"
|
5818 |
msgstr ""
|
5819 |
|
5820 |
-
#: src/restorer.php:
|
5821 |
msgid "Split line to avoid exceeding maximum packet size"
|
5822 |
msgstr ""
|
5823 |
|
5824 |
-
#: src/restorer.php:
|
5825 |
msgid "An error occurred on the first %s command - aborting run"
|
5826 |
msgstr ""
|
5827 |
|
5828 |
-
#: src/restorer.php:
|
5829 |
msgid "Requested table engine (%s) is not present - changing to MyISAM."
|
5830 |
msgstr ""
|
5831 |
|
5832 |
-
#: src/restorer.php:
|
5833 |
msgid "Requested table character set (%s) is not present - changing to %s."
|
5834 |
msgstr ""
|
5835 |
|
5836 |
-
#: src/restorer.php:
|
5837 |
msgid "Requested table collation (%1$s) is not present - changing to %2$s."
|
5838 |
msgid_plural "Requested table collations (%1$s) are not present - changing to %2$s."
|
5839 |
msgstr[0] ""
|
5840 |
msgstr[1] ""
|
5841 |
|
5842 |
-
#: src/restorer.php:
|
5843 |
msgid "Processing table (%s)"
|
5844 |
msgstr ""
|
5845 |
|
5846 |
-
#: src/restorer.php:
|
5847 |
msgid "will restore as:"
|
5848 |
msgstr ""
|
5849 |
|
5850 |
-
#: src/restorer.php:
|
5851 |
msgid "Found SET NAMES %s, but changing to %s as suggested by WPDB::determine_charset()."
|
5852 |
msgstr ""
|
5853 |
|
5854 |
-
#: src/restorer.php:
|
5855 |
msgid "Requested character set (%s) is not present - changing to %s."
|
5856 |
msgstr ""
|
5857 |
|
5858 |
-
#: src/restorer.php:
|
5859 |
msgid "An SQL line that is larger than the maximum packet size and cannot be split was found; this line will not be processed, but will be dropped: %s"
|
5860 |
msgstr ""
|
5861 |
|
5862 |
-
#: src/restorer.php:
|
5863 |
msgctxt "The user is being told the number of times an error has happened, e.g. An error (27) occurred"
|
5864 |
msgid "An error (%s) occurred:"
|
5865 |
msgstr ""
|
5866 |
|
5867 |
-
#: src/restorer.php:
|
5868 |
msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
|
5869 |
msgstr ""
|
5870 |
|
5871 |
-
#: src/restorer.php:
|
5872 |
msgid "This database needs to be deployed on MySQL version %s or later."
|
5873 |
msgstr ""
|
5874 |
|
5875 |
-
#: src/restorer.php:
|
5876 |
msgid "To use this backup, your database server needs to support the %s character set."
|
5877 |
msgstr ""
|
5878 |
|
5879 |
-
#: src/restorer.php:
|
5880 |
msgid "Too many database errors have occurred - aborting"
|
5881 |
msgstr ""
|
5882 |
|
5883 |
-
#: src/restorer.php:
|
5884 |
msgid "Table prefix has changed: changing %s table field(s) accordingly:"
|
5885 |
msgstr ""
|
5886 |
|
@@ -7265,19 +7273,19 @@ msgstr ""
|
|
7265 |
msgid "UpdraftPlus.Com responded, but we did not understand the response"
|
7266 |
msgstr ""
|
7267 |
|
7268 |
-
#: src/udaddons/updraftplus-addons.php:
|
7269 |
msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
|
7270 |
msgstr ""
|
7271 |
|
7272 |
-
#: src/udaddons/updraftplus-addons.php:
|
7273 |
msgid "Go here to re-enter your password."
|
7274 |
msgstr ""
|
7275 |
|
7276 |
-
#: src/udaddons/updraftplus-addons.php:
|
7277 |
msgid "If you have forgotten your password "
|
7278 |
msgstr ""
|
7279 |
|
7280 |
-
#: src/udaddons/updraftplus-addons.php:
|
7281 |
msgid "go here to change your password on updraftplus.com."
|
7282 |
msgstr ""
|
7283 |
|
145 |
msgid "You must add the following as the authorised redirect URI in your Azure console (under \"API Settings\") when asked"
|
146 |
msgstr ""
|
147 |
|
148 |
+
#: src/addons/azure.php:601, src/addons/migrator.php:948, src/admin.php:1155, src/admin.php:1159, src/admin.php:1163, src/admin.php:1167, src/admin.php:1171, src/admin.php:1180, src/admin.php:3934, src/admin.php:3941, src/admin.php:3943, src/admin.php:5228, src/methods/cloudfiles-new.php:100, src/methods/cloudfiles.php:440, src/methods/ftp.php:330, src/methods/openstack-base.php:571, src/methods/s3.php:864, src/methods/s3.php:868, src/methods/updraftvault.php:311, src/templates/wp-admin/settings/downloading-and-restoring.php:27, src/templates/wp-admin/settings/tab-backups.php:27, src/udaddons/updraftplus-addons.php:259
|
149 |
msgid "Warning"
|
150 |
msgstr ""
|
151 |
|
152 |
+
#: src/addons/azure.php:601, src/admin.php:3934, src/methods/updraftvault.php:311
|
153 |
msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
|
154 |
msgstr ""
|
155 |
|
157 |
msgid "Create Azure credentials in your Azure developer console."
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: src/addons/azure.php:605, src/addons/onedrive.php:1142, src/includes/class-remote-send.php:314
|
161 |
msgid "For longer help, including screenshots, follow this link."
|
162 |
msgstr ""
|
163 |
|
201 |
msgid "You can enter the path of any %s virtual folder you wish to use here."
|
202 |
msgstr ""
|
203 |
|
204 |
+
#: src/addons/azure.php:638, src/addons/google-enhanced.php:76, src/addons/onedrive.php:1182
|
205 |
msgid "If you leave it blank, then the backup will be placed in the root of your %s"
|
206 |
msgstr ""
|
207 |
|
233 |
msgid "Error: unexpected file read fail"
|
234 |
msgstr ""
|
235 |
|
236 |
+
#: src/addons/backblaze.php:225, src/addons/cloudfiles-enhanced.php:117, src/addons/migrator.php:893, src/addons/migrator.php:1190, src/addons/migrator.php:1271, src/addons/migrator.php:1320, src/addons/migrator.php:1558, src/addons/s3-enhanced.php:164, src/addons/s3-enhanced.php:169, src/addons/s3-enhanced.php:171, src/addons/sftp.php:911, src/addons/webdav.php:203, src/admin.php:91, src/admin.php:817, src/includes/class-remote-send.php:266, src/includes/class-remote-send.php:293, src/includes/class-remote-send.php:299, src/includes/class-remote-send.php:362, src/includes/class-remote-send.php:421, src/includes/class-remote-send.php:448, src/includes/class-remote-send.php:471, src/includes/class-remote-send.php:481, src/includes/class-remote-send.php:486, src/methods/remotesend.php:74, src/methods/remotesend.php:242, src/methods/remotesend.php:298, src/methods/updraftvault.php:532, src/restorer.php:332, src/restorer.php:360, src/restorer.php:2093
|
237 |
msgid "Error:"
|
238 |
msgstr ""
|
239 |
|
253 |
msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: src/addons/backblaze.php:580, src/methods/cloudfiles.php:234, src/methods/dropbox.php:357, src/methods/openstack-base.php:118
|
257 |
msgid "No settings were found"
|
258 |
msgstr ""
|
259 |
|
449 |
msgid "Folder"
|
450 |
msgstr ""
|
451 |
|
452 |
+
#: src/addons/google-enhanced.php:76, src/addons/onedrive.php:1182
|
453 |
msgid "Enter the path of the %s folder you wish to use here."
|
454 |
msgstr ""
|
455 |
|
456 |
+
#: src/addons/google-enhanced.php:76, src/addons/googlecloud.php:1039, src/addons/onedrive.php:1182
|
457 |
msgid "e.g. %s"
|
458 |
msgstr ""
|
459 |
|
625 |
msgid "But no %s settings were found. Please complete all fields in %s settings and save the settings."
|
626 |
msgstr ""
|
627 |
|
628 |
+
#: src/addons/googlecloud.php:698, src/addons/onedrive.php:901, src/addons/onedrive.php:912, src/methods/googledrive.php:442, src/methods/googledrive.php:455
|
629 |
msgid "However, subsequent access attempts failed:"
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: src/addons/googlecloud.php:718, src/addons/googlecloud.php:839, src/addons/onedrive.php:933, src/addons/sftp.php:591, src/addons/sftp.php:595, src/addons/wp-cli.php:516, src/methods/addon-base-v2.php:327, src/methods/cloudfiles.php:575, src/methods/googledrive.php:475, src/methods/openstack-base.php:530, src/methods/s3.php:1202, src/methods/stream-base.php:372
|
633 |
msgid "Success"
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: src/addons/googlecloud.php:718, src/addons/onedrive.php:933, src/methods/googledrive.php:475
|
637 |
msgid "you have authenticated your %s account."
|
638 |
msgstr ""
|
639 |
|
645 |
msgid "You must save and authenticate before you can test your settings."
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: src/addons/googlecloud.php:776, src/addons/googlecloud.php:810, src/addons/googlecloud.php:816, src/addons/sftp.php:553, src/admin.php:3488, src/admin.php:3524, src/admin.php:3534, src/methods/addon-base-v2.php:313, src/methods/stream-base.php:356
|
649 |
msgid "Failed"
|
650 |
msgstr ""
|
651 |
|
665 |
msgid "You must enter a project ID in order to be able to create a new bucket."
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: src/addons/googlecloud.php:984, src/methods/dropbox.php:576
|
669 |
msgid "%s logo"
|
670 |
msgstr ""
|
671 |
|
693 |
msgid "You must add the following as the authorized redirect URI (under \"More Options\") when asked"
|
694 |
msgstr ""
|
695 |
|
696 |
+
#: src/addons/googlecloud.php:1019, src/addons/onedrive.php:1171, src/methods/googledrive.php:1233
|
697 |
msgid "Client ID"
|
698 |
msgstr ""
|
699 |
|
701 |
msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
|
702 |
msgstr ""
|
703 |
|
704 |
+
#: src/addons/googlecloud.php:1027, src/addons/onedrive.php:1175, src/methods/googledrive.php:1237
|
705 |
msgid "Client Secret"
|
706 |
msgstr ""
|
707 |
|
721 |
msgid "Otherwise, you can leave it blank."
|
722 |
msgstr ""
|
723 |
|
724 |
+
#: src/addons/googlecloud.php:1034, src/addons/migrator.php:493, src/addons/migrator.php:496, src/addons/migrator.php:499, src/admin.php:1159, src/admin.php:2631, src/backup.php:3474, src/class-updraftplus.php:4134, src/class-updraftplus.php:4134, src/updraftplus.php:157
|
725 |
msgid "Go here for more information."
|
726 |
msgstr ""
|
727 |
|
765 |
msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
|
766 |
msgstr ""
|
767 |
|
768 |
+
#: src/addons/googlecloud.php:1108, src/addons/onedrive.php:1242, src/methods/dropbox.php:667, src/methods/googledrive.php:1289
|
769 |
msgid "Account holder's name: %s."
|
770 |
msgstr ""
|
771 |
|
777 |
msgid "Supported backup plugins: %s"
|
778 |
msgstr ""
|
779 |
|
780 |
+
#: src/addons/importer.php:276, src/admin.php:4095, src/includes/class-backup-history.php:499
|
781 |
msgid "Backup created by: %s."
|
782 |
msgstr ""
|
783 |
|
784 |
+
#: src/addons/incremental.php:89, src/addons/incremental.php:91
|
785 |
msgid "(latest increment: %s)"
|
786 |
msgstr ""
|
787 |
|
788 |
+
#: src/addons/incremental.php:91
|
789 |
msgid "Increments exist at: %s"
|
790 |
msgstr ""
|
791 |
|
792 |
+
#: src/addons/incremental.php:295
|
793 |
msgid "Files changed since the last backup will be added as a new increment in that backup set."
|
794 |
msgstr ""
|
795 |
|
796 |
+
#: src/addons/incremental.php:295
|
797 |
msgid "N.B. No backup of your database will be taken in an incremental backup; if you want a database backup as well, then take that separately."
|
798 |
msgstr ""
|
799 |
|
800 |
+
#: src/addons/incremental.php:297
|
801 |
msgid "No incremental backup of your files is possible, as no suitable existing backup was found to add increments to."
|
802 |
msgstr ""
|
803 |
|
804 |
+
#: src/addons/incremental.php:342, src/addons/reporting.php:261, src/admin.php:4027
|
805 |
msgid "None"
|
806 |
msgstr ""
|
807 |
|
808 |
+
#: src/addons/incremental.php:343, src/updraftplus.php:99
|
809 |
msgid "Every hour"
|
810 |
msgstr ""
|
811 |
|
812 |
+
#: src/addons/incremental.php:344, src/addons/incremental.php:345, src/addons/incremental.php:346, src/addons/incremental.php:347, src/admin.php:3742, src/admin.php:3743, src/admin.php:3744, src/updraftplus.php:100, src/updraftplus.php:101, src/updraftplus.php:102
|
813 |
msgid "Every %s hours"
|
814 |
msgstr ""
|
815 |
|
816 |
+
#: src/addons/incremental.php:348, src/admin.php:3745
|
817 |
msgid "Daily"
|
818 |
msgstr ""
|
819 |
|
820 |
+
#: src/addons/incremental.php:349, src/admin.php:3746
|
821 |
msgid "Weekly"
|
822 |
msgstr ""
|
823 |
|
824 |
+
#: src/addons/incremental.php:350, src/admin.php:3747
|
825 |
msgid "Fortnightly"
|
826 |
msgstr ""
|
827 |
|
828 |
+
#: src/addons/incremental.php:351, src/admin.php:3748
|
829 |
msgid "Monthly"
|
830 |
msgstr ""
|
831 |
|
832 |
+
#: src/addons/incremental.php:365
|
833 |
msgid "And then add an incremental backup"
|
834 |
msgstr ""
|
835 |
|
836 |
+
#: src/addons/incremental.php:377
|
837 |
msgid "Tell me more"
|
838 |
msgstr ""
|
839 |
|
949 |
msgid "After pressing this button, you will be given the option to choose which components you wish to migrate"
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: src/addons/migrator.php:274, src/admin.php:663, src/admin.php:850, src/admin.php:4193
|
953 |
msgid "Restore"
|
954 |
msgstr ""
|
955 |
|
981 |
msgid "search term"
|
982 |
msgstr ""
|
983 |
|
984 |
+
#: src/addons/migrator.php:343, src/addons/migrator.php:358, src/admin.php:2549, src/admin.php:2559, src/admin.php:2568, src/admin.php:2610, src/admin.php:3457
|
985 |
msgid "Return to UpdraftPlus Configuration"
|
986 |
msgstr ""
|
987 |
|
1183 |
msgid "Time taken (seconds):"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
+
#: src/addons/migrator.php:1320, src/restorer.php:2977
|
1187 |
msgid "the database query being run was:"
|
1188 |
msgstr ""
|
1189 |
|
1247 |
msgid "Enter your chosen name"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
+
#: src/addons/migrator.php:1761, src/addons/sftp.php:467, src/admin.php:868, src/admin.php:5076, src/templates/wp-admin/settings/temporary-clone.php:63
|
1251 |
msgid "Key"
|
1252 |
msgstr ""
|
1253 |
|
1307 |
msgid "database connection attempt failed"
|
1308 |
msgstr ""
|
1309 |
|
1310 |
+
#: src/addons/moredatabase.php:112, src/backup.php:1645
|
1311 |
msgid "Connection failed: check your access details, that the database server is up, and that the network connection is not firewalled."
|
1312 |
msgstr ""
|
1313 |
|
1363 |
msgid "Username"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: src/addons/moredatabase.php:242, src/addons/reporting.php:276, src/addons/wp-cli.php:432, src/admin.php:344, src/admin.php:4002, src/admin.php:4055, src/includes/class-remote-send.php:331, src/includes/class-wpadmin-commands.php:157, src/includes/class-wpadmin-commands.php:521, src/restorer.php:466, src/templates/wp-admin/settings/delete-and-restore-modals.php:74, src/templates/wp-admin/settings/delete-and-restore-modals.php:75, src/templates/wp-admin/settings/take-backup.php:34
|
1367 |
msgid "Database"
|
1368 |
msgstr ""
|
1369 |
|
1516 |
msgid "Exclude these:"
|
1517 |
msgstr ""
|
1518 |
|
1519 |
+
#: src/addons/morefiles.php:476, src/admin.php:3856
|
1520 |
msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
|
1521 |
msgstr ""
|
1522 |
|
1592 |
msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
+
#: src/addons/onedrive.php:112, src/methods/dropbox.php:266
|
1596 |
msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
+
#: src/addons/onedrive.php:677, src/udaddons/updraftplus-addons.php:937
|
1600 |
msgid "An error response was received; HTTP code:"
|
1601 |
msgstr ""
|
1602 |
|
1603 |
+
#: src/addons/onedrive.php:690, src/addons/onedrive.php:710, src/includes/updraftplus-login.php:56, src/methods/updraftvault.php:685, src/udaddons/updraftplus-addons.php:950, src/udaddons/updraftplus-addons.php:963
|
1604 |
msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
|
1605 |
msgstr ""
|
1606 |
|
1607 |
+
#: src/addons/onedrive.php:690, src/udaddons/updraftplus-addons.php:950, src/udaddons/updraftplus-addons.php:963
|
1608 |
msgid "To remove any block, please go here."
|
1609 |
msgstr ""
|
1610 |
|
1611 |
+
#: src/addons/onedrive.php:690, src/udaddons/updraftplus-addons.php:950
|
1612 |
msgid "Your IP address:"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
+
#: src/addons/onedrive.php:710, src/includes/updraftplus-login.php:56, src/methods/updraftvault.php:685, src/udaddons/updraftplus-addons.php:963
|
1616 |
msgid "UpdraftPlus.com has responded with 'Access Denied'."
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: src/addons/onedrive.php:710, src/includes/updraftplus-login.php:56, src/methods/updraftvault.php:685, src/udaddons/updraftplus-addons.php:963
|
1620 |
msgid "It appears that your web server's IP Address (%s) is blocked."
|
1621 |
msgstr ""
|
1622 |
|
1623 |
+
#: src/addons/onedrive.php:710, src/includes/updraftplus-login.php:56, src/methods/updraftvault.php:685
|
1624 |
msgid "To remove the block, please go here."
|
1625 |
msgstr ""
|
1626 |
|
1627 |
+
#: src/addons/onedrive.php:717
|
1628 |
msgid "Please re-authorize the connection to your %s account."
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: src/addons/onedrive.php:726
|
1632 |
msgid "Account is not authorized (%s)."
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: src/addons/onedrive.php:858, src/class-updraftplus.php:532, src/methods/dropbox.php:239, src/methods/dropbox.php:752, src/methods/dropbox.php:774, src/methods/dropbox.php:789, src/methods/dropbox.php:802, src/methods/dropbox.php:945
|
1636 |
msgid "%s error: %s"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
+
#: src/addons/onedrive.php:858
|
1640 |
msgid "Authentication"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
+
#: src/addons/onedrive.php:887, src/methods/dropbox.php:843, src/methods/dropbox.php:852, src/methods/googledrive.php:439
|
1644 |
msgid "Your %s quota usage: %s %% used, %s available"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
+
#: src/addons/onedrive.php:895, src/methods/dropbox.php:820
|
1648 |
msgid "Your %s account name: %s"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
+
#: src/addons/onedrive.php:933, src/addons/onedrive.php:1171, src/addons/onedrive.php:1175
|
1652 |
msgid "OneDrive"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
+
#: src/addons/onedrive.php:1031, src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
|
1656 |
msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
|
1657 |
msgstr ""
|
1658 |
|
1659 |
+
#: src/addons/onedrive.php:1090, src/addons/onedrive.php:1092
|
1660 |
msgid "authorization failed:"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
+
#: src/addons/onedrive.php:1119
|
1664 |
msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: src/addons/onedrive.php:1127
|
1668 |
msgid "You must add the following as the authorized redirect URI in your OneDrive console (under \"API Settings\") when asked"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
+
#: src/addons/onedrive.php:1135
|
1672 |
msgid "Create OneDrive credentials in your OneDrive developer console."
|
1673 |
msgstr ""
|
1674 |
|
1675 |
+
#: src/addons/onedrive.php:1151, src/methods/dropbox.php:585, src/methods/googledrive.php:1214
|
1676 |
msgid "Please read %s for use of our %s authorization app (none of your backup data is sent to us)."
|
1677 |
msgstr ""
|
1678 |
|
1679 |
+
#: src/addons/onedrive.php:1151, src/methods/dropbox.php:585, src/methods/googledrive.php:1214
|
1680 |
msgid "this privacy policy"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
+
#: src/addons/onedrive.php:1172
|
1684 |
msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
|
1685 |
msgstr ""
|
1686 |
|
1687 |
+
#: src/addons/onedrive.php:1180, src/restorer.php:1244
|
1688 |
msgid "folder"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
+
#: src/addons/onedrive.php:1182
|
1692 |
msgid "N.B. %s is not case-sensitive."
|
1693 |
msgstr ""
|
1694 |
|
1695 |
+
#: src/addons/onedrive.php:1187
|
1696 |
msgid "Account type"
|
1697 |
msgstr ""
|
1698 |
|
1699 |
+
#: src/addons/onedrive.php:1190
|
1700 |
msgid "OneDrive International"
|
1701 |
msgstr ""
|
1702 |
|
1703 |
+
#: src/addons/onedrive.php:1191
|
1704 |
msgid "OneDrive Germany"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
+
#: src/addons/onedrive.php:1199, src/methods/dropbox.php:610
|
1708 |
msgid "Authenticate with %s"
|
1709 |
msgstr ""
|
1710 |
|
1711 |
+
#: src/addons/onedrive.php:1206, src/methods/dropbox.php:614
|
1712 |
msgid "(You appear to be already authenticated)."
|
1713 |
msgstr ""
|
1714 |
|
1716 |
msgid "Your label for this backup (optional)"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
+
#: src/addons/reporting.php:86, src/addons/reporting.php:197, src/backup.php:1177, src/class-updraftplus.php:3951
|
1720 |
msgid "Backup of:"
|
1721 |
msgstr ""
|
1722 |
|
1736 |
msgid "Backup made by %s"
|
1737 |
msgstr ""
|
1738 |
|
1739 |
+
#: src/addons/reporting.php:198, src/backup.php:1180
|
1740 |
msgid "Latest status:"
|
1741 |
msgstr ""
|
1742 |
|
1764 |
msgid "Time taken:"
|
1765 |
msgstr ""
|
1766 |
|
1767 |
+
#: src/addons/reporting.php:239, src/admin.php:4015
|
1768 |
msgid "Uploaded to:"
|
1769 |
msgstr ""
|
1770 |
|
1771 |
+
#: src/addons/reporting.php:281, src/backup.php:1130
|
1772 |
msgid "The log file has been attached to this email."
|
1773 |
msgstr ""
|
1774 |
|
2237 |
msgid "Latest full backup found; identifier:"
|
2238 |
msgstr ""
|
2239 |
|
2240 |
+
#: src/addons/wp-cli.php:430, src/admin.php:4049, src/admin.php:4097
|
2241 |
msgid "unknown source"
|
2242 |
msgstr ""
|
2243 |
|
2244 |
+
#: src/addons/wp-cli.php:432, src/admin.php:4055
|
2245 |
msgid "Database (created by %s)"
|
2246 |
msgstr ""
|
2247 |
|
2248 |
+
#: src/addons/wp-cli.php:438, src/admin.php:4057
|
2249 |
msgid "External database"
|
2250 |
msgstr ""
|
2251 |
|
2252 |
+
#: src/addons/wp-cli.php:450, src/admin.php:4101
|
2253 |
msgid "Files and database WordPress backup (created by %s)"
|
2254 |
msgstr ""
|
2255 |
|
2256 |
+
#: src/addons/wp-cli.php:450, src/admin.php:4101
|
2257 |
msgid "Files backup (created by %s)"
|
2258 |
msgstr ""
|
2259 |
|
2260 |
+
#: src/addons/wp-cli.php:519, src/admin.php:818, src/class-updraftplus.php:1298, src/class-updraftplus.php:1342, src/includes/class-filesystem-functions.php:429, src/includes/class-storage-methods-interface.php:324, src/methods/addon-base-v2.php:93, src/methods/addon-base-v2.php:98, src/methods/addon-base-v2.php:205, src/methods/addon-base-v2.php:225, src/methods/stream-base.php:219, src/restorer.php:3127, src/restorer.php:3152, src/restorer.php:3233, src/updraftplus.php:157
|
2261 |
msgid "Error"
|
2262 |
msgstr ""
|
2263 |
|
2273 |
msgid "No such backup set exists"
|
2274 |
msgstr ""
|
2275 |
|
2276 |
+
#: src/addons/wp-cli.php:648, src/admin.php:4510
|
2277 |
msgid "UpdraftPlus Restoration: Progress"
|
2278 |
msgstr ""
|
2279 |
|
2280 |
+
#: src/addons/wp-cli.php:662, src/admin.php:4513
|
2281 |
msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
|
2282 |
msgstr ""
|
2283 |
|
2297 |
msgid "Why am I seeing this?"
|
2298 |
msgstr ""
|
2299 |
|
2300 |
+
#: src/addons/wp-cli.php:907
|
2301 |
+
msgid "Timestamp"
|
2302 |
+
msgstr ""
|
2303 |
+
|
2304 |
+
#: src/addons/wp-cli.php:912
|
2305 |
+
msgid "There are no incremental backup restore points available."
|
2306 |
+
msgstr ""
|
2307 |
+
|
2308 |
#: src/admin.php:91
|
2309 |
msgid "template not found"
|
2310 |
msgstr ""
|
2317 |
msgid "At the same time as the files backup"
|
2318 |
msgstr ""
|
2319 |
|
2320 |
+
#: src/admin.php:334, src/admin.php:5045, src/templates/wp-admin/settings/take-backup.php:24
|
2321 |
msgid "Files"
|
2322 |
msgstr ""
|
2323 |
|
2324 |
+
#: src/admin.php:334, src/backup.php:1086
|
2325 |
msgid "Files and database"
|
2326 |
msgstr ""
|
2327 |
|
2425 |
msgid "Error: the server sent us a response which we did not understand."
|
2426 |
msgstr ""
|
2427 |
|
2428 |
+
#: src/admin.php:816, src/restorer.php:180
|
2429 |
msgid "Error data:"
|
2430 |
msgstr ""
|
2431 |
|
2437 |
msgid "File ready."
|
2438 |
msgstr ""
|
2439 |
|
2440 |
+
#: src/admin.php:821, src/admin.php:2549, src/admin.php:2559, src/admin.php:2568, src/admin.php:2610, src/admin.php:3457, src/templates/wp-admin/settings/existing-backups-table.php:19, src/templates/wp-admin/settings/existing-backups-table.php:137
|
2441 |
msgid "Actions"
|
2442 |
msgstr ""
|
2443 |
|
2465 |
msgid "PHP information"
|
2466 |
msgstr ""
|
2467 |
|
2468 |
+
#: src/admin.php:828, src/admin.php:3171
|
2469 |
msgid "Delete Old Directories"
|
2470 |
msgstr ""
|
2471 |
|
2525 |
msgid "Backup Now"
|
2526 |
msgstr ""
|
2527 |
|
2528 |
+
#: src/admin.php:844, src/admin.php:3485, src/admin.php:3519, src/admin.php:4292, src/includes/class-remote-send.php:553, src/templates/wp-admin/settings/existing-backups-table.php:153, src/templates/wp-admin/settings/file-backup-exclude.php:11
|
2529 |
msgid "Delete"
|
2530 |
msgstr ""
|
2531 |
|
2533 |
msgid "Create"
|
2534 |
msgstr ""
|
2535 |
|
2536 |
+
#: src/admin.php:846, src/admin.php:4272
|
2537 |
msgid "Upload"
|
2538 |
msgstr ""
|
2539 |
|
2545 |
msgid "Close"
|
2546 |
msgstr ""
|
2547 |
|
2548 |
+
#: src/admin.php:851, src/admin.php:3723
|
2549 |
msgid "Download log file"
|
2550 |
msgstr ""
|
2551 |
|
2721 |
msgid "Complete"
|
2722 |
msgstr ""
|
2723 |
|
2724 |
+
#: src/admin.php:905, src/admin.php:3230
|
2725 |
msgid "The backup has finished running"
|
2726 |
msgstr ""
|
2727 |
|
3033 |
msgid "No local copy present."
|
3034 |
msgstr ""
|
3035 |
|
3036 |
+
#: src/admin.php:2286, src/backup.php:1401
|
3037 |
msgid "Backup directory (%s) is not writable, or does not exist."
|
3038 |
msgstr ""
|
3039 |
|
3073 |
msgid "Backup directory successfully created."
|
3074 |
msgstr ""
|
3075 |
|
3076 |
+
#: src/admin.php:2626, src/class-updraftplus.php:4046, src/restorer.php:2840
|
3077 |
msgid "Warning:"
|
3078 |
msgstr ""
|
3079 |
|
3181 |
msgid "Download most recently modified log file"
|
3182 |
msgstr ""
|
3183 |
|
3184 |
+
#: src/admin.php:3165
|
3185 |
msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
|
3186 |
msgstr ""
|
3187 |
|
3188 |
+
#: src/admin.php:3230, src/admin.php:4302
|
3189 |
msgid "View Log"
|
3190 |
msgstr ""
|
3191 |
|
3192 |
+
#: src/admin.php:3269
|
3193 |
msgid "Backup begun"
|
3194 |
msgstr ""
|
3195 |
|
3196 |
+
#: src/admin.php:3274
|
3197 |
msgid "Creating file backup zips"
|
3198 |
msgstr ""
|
3199 |
|
3200 |
+
#: src/admin.php:3287
|
3201 |
msgid "Created file backup zips"
|
3202 |
msgstr ""
|
3203 |
|
3204 |
+
#: src/admin.php:3292
|
3205 |
msgid "Clone server being provisioned and booted (can take several minutes)"
|
3206 |
msgstr ""
|
3207 |
|
3208 |
+
#: src/admin.php:3296
|
3209 |
msgid "Uploading files to remote storage"
|
3210 |
msgstr ""
|
3211 |
|
3212 |
+
#: src/admin.php:3297
|
3213 |
msgid "Sending files to remote site"
|
3214 |
msgstr ""
|
3215 |
|
3216 |
+
#: src/admin.php:3304
|
3217 |
msgid "(%s%%, file %s of %s)"
|
3218 |
msgstr ""
|
3219 |
|
3220 |
+
#: src/admin.php:3309
|
3221 |
msgid "Pruning old backup sets"
|
3222 |
msgstr ""
|
3223 |
|
3224 |
+
#: src/admin.php:3313
|
3225 |
msgid "Waiting until scheduled time to retry because of errors"
|
3226 |
msgstr ""
|
3227 |
|
3228 |
+
#: src/admin.php:3318
|
3229 |
msgid "Backup finished"
|
3230 |
msgstr ""
|
3231 |
|
3232 |
+
#: src/admin.php:3331
|
3233 |
msgid "Created database backup"
|
3234 |
msgstr ""
|
3235 |
|
3236 |
+
#: src/admin.php:3342
|
3237 |
msgid "Creating database backup"
|
3238 |
msgstr ""
|
3239 |
|
3240 |
+
#: src/admin.php:3344
|
3241 |
msgid "table: %s"
|
3242 |
msgstr ""
|
3243 |
|
3244 |
+
#: src/admin.php:3357
|
3245 |
msgid "Encrypting database"
|
3246 |
msgstr ""
|
3247 |
|
3248 |
+
#: src/admin.php:3365
|
3249 |
msgid "Encrypted database"
|
3250 |
msgstr ""
|
3251 |
|
3252 |
+
#: src/admin.php:3367, src/central/bootstrap.php:444, src/central/bootstrap.php:451, src/methods/updraftvault.php:415, src/methods/updraftvault.php:449, src/methods/updraftvault.php:534
|
3253 |
msgid "Unknown"
|
3254 |
msgstr ""
|
3255 |
|
3256 |
+
#: src/admin.php:3384
|
3257 |
msgid "next resumption: %d (after %ss)"
|
3258 |
msgstr ""
|
3259 |
|
3260 |
+
#: src/admin.php:3385
|
3261 |
msgid "last activity: %ss ago"
|
3262 |
msgstr ""
|
3263 |
|
3264 |
+
#: src/admin.php:3405
|
3265 |
msgid "Job ID: %s"
|
3266 |
msgstr ""
|
3267 |
|
3268 |
+
#: src/admin.php:3419, src/admin.php:3709
|
3269 |
msgid "Warning: %s"
|
3270 |
msgstr ""
|
3271 |
|
3272 |
+
#: src/admin.php:3439
|
3273 |
msgid "show log"
|
3274 |
msgstr ""
|
3275 |
|
3276 |
+
#: src/admin.php:3440
|
3277 |
msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
|
3278 |
msgstr ""
|
3279 |
|
3280 |
+
#: src/admin.php:3440
|
3281 |
msgid "stop"
|
3282 |
msgstr ""
|
3283 |
|
3284 |
+
#: src/admin.php:3450, src/admin.php:3450
|
3285 |
msgid "Remove old directories"
|
3286 |
msgstr ""
|
3287 |
|
3288 |
+
#: src/admin.php:3453
|
3289 |
msgid "Old directories successfully removed."
|
3290 |
msgstr ""
|
3291 |
|
3292 |
+
#: src/admin.php:3455
|
3293 |
msgid "Old directory removal failed for some reason. You may want to do this manually."
|
3294 |
msgstr ""
|
3295 |
|
3296 |
+
#: src/admin.php:3492, src/admin.php:3527, src/admin.php:3531, src/includes/class-remote-send.php:327, src/includes/class-storage-methods-interface.php:315, src/restorer.php:330, src/restorer.php:3131, src/restorer.php:3236
|
3297 |
msgid "OK"
|
3298 |
msgstr ""
|
3299 |
|
3300 |
+
#: src/admin.php:3576
|
3301 |
msgid "The request to the filesystem to create the directory failed."
|
3302 |
msgstr ""
|
3303 |
|
3304 |
+
#: src/admin.php:3590
|
3305 |
msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
|
3306 |
msgstr ""
|
3307 |
|
3308 |
+
#: src/admin.php:3595
|
3309 |
msgid "The folder exists, but your webserver does not have permission to write to it."
|
3310 |
msgstr ""
|
3311 |
|
3312 |
+
#: src/admin.php:3595
|
3313 |
msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
|
3314 |
msgstr ""
|
3315 |
|
3316 |
+
#: src/admin.php:3697
|
3317 |
msgid "incremental backup; base backup: %s"
|
3318 |
msgstr ""
|
3319 |
|
3320 |
+
#: src/admin.php:3727
|
3321 |
msgid "No backup has been completed"
|
3322 |
msgstr ""
|
3323 |
|
3324 |
+
#: src/admin.php:3741
|
3325 |
msgctxt "i.e. Non-automatic"
|
3326 |
msgid "Manual"
|
3327 |
msgstr ""
|
3328 |
|
3329 |
+
#: src/admin.php:3754
|
3330 |
msgid "Backup directory specified is writable, which is good."
|
3331 |
msgstr ""
|
3332 |
|
3333 |
+
#: src/admin.php:3758
|
3334 |
msgid "Backup directory specified does <b>not</b> exist."
|
3335 |
msgstr ""
|
3336 |
|
3337 |
+
#: src/admin.php:3760
|
3338 |
msgid "Backup directory specified exists, but is <b>not</b> writable."
|
3339 |
msgstr ""
|
3340 |
|
3341 |
+
#: src/admin.php:3762
|
3342 |
msgid "Follow this link to attempt to create the directory and set the permissions"
|
3343 |
msgstr ""
|
3344 |
|
3345 |
+
#: src/admin.php:3762
|
3346 |
msgid "or, to reset this option"
|
3347 |
msgstr ""
|
3348 |
|
3349 |
+
#: src/admin.php:3762
|
3350 |
msgid "press here"
|
3351 |
msgstr ""
|
3352 |
|
3353 |
+
#: src/admin.php:3762
|
3354 |
msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
|
3355 |
msgstr ""
|
3356 |
|
3357 |
+
#: src/admin.php:3842
|
3358 |
msgid "Your wp-content directory server path: %s"
|
3359 |
msgstr ""
|
3360 |
|
3361 |
+
#: src/admin.php:3842
|
3362 |
msgid "Any other directories found inside wp-content"
|
3363 |
msgstr ""
|
3364 |
|
3365 |
+
#: src/admin.php:3853
|
3366 |
msgid "Exclude these from"
|
3367 |
msgstr ""
|
3368 |
|
3369 |
+
#: src/admin.php:3941
|
3370 |
msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. Ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
|
3371 |
msgstr ""
|
3372 |
|
3373 |
+
#: src/admin.php:3943
|
3374 |
msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
|
3375 |
msgstr ""
|
3376 |
|
3377 |
+
#: src/admin.php:3946
|
3378 |
msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
|
3379 |
msgstr ""
|
3380 |
|
3381 |
+
#: src/admin.php:3984, src/templates/wp-admin/settings/backupnow-modal.php:60, src/templates/wp-admin/settings/existing-backups-table.php:71, src/templates/wp-admin/settings/existing-backups-table.php:74
|
3382 |
msgid "Only allow this backup to be deleted manually (i.e. keep it even if retention limits are hit)."
|
3383 |
msgstr ""
|
3384 |
|
3385 |
+
#: src/admin.php:4032
|
3386 |
msgid "Total backup size:"
|
3387 |
msgstr ""
|
3388 |
|
3389 |
+
#: src/admin.php:4098, src/includes/class-wpadmin-commands.php:162, src/restorer.php:2168
|
3390 |
msgid "Backup created by unknown source (%s) - cannot be restored."
|
3391 |
msgstr ""
|
3392 |
|
3393 |
+
#: src/admin.php:4127
|
3394 |
msgid "Press here to download or browse"
|
3395 |
msgstr ""
|
3396 |
|
3397 |
+
#: src/admin.php:4132
|
3398 |
msgid "(%d archive(s) in set)."
|
3399 |
msgstr ""
|
3400 |
|
3401 |
+
#: src/admin.php:4135
|
3402 |
msgid "You appear to be missing one or more archives from this multi-archive set."
|
3403 |
msgstr ""
|
3404 |
|
3405 |
+
#: src/admin.php:4163, src/admin.php:4165
|
3406 |
msgid "(Not finished)"
|
3407 |
msgstr ""
|
3408 |
|
3409 |
+
#: src/admin.php:4165
|
3410 |
msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
|
3411 |
msgstr ""
|
3412 |
|
3413 |
+
#: src/admin.php:4190
|
3414 |
msgid "(backup set imported from remote location)"
|
3415 |
msgstr ""
|
3416 |
|
3417 |
+
#: src/admin.php:4193
|
3418 |
msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
|
3419 |
msgstr ""
|
3420 |
|
3421 |
+
#: src/admin.php:4272
|
3422 |
msgid "After pressing this button, you can select where to upload your backup from a list of your currently saved remote storage locations"
|
3423 |
msgstr ""
|
3424 |
|
3425 |
+
#: src/admin.php:4292
|
3426 |
msgid "Delete this backup set"
|
3427 |
msgstr ""
|
3428 |
|
3429 |
+
#: src/admin.php:4495
|
3430 |
msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
|
3431 |
msgstr ""
|
3432 |
|
3433 |
+
#: src/admin.php:4496
|
3434 |
msgid "Backup does not exist in the backup history"
|
3435 |
msgstr ""
|
3436 |
|
3437 |
+
#: src/admin.php:4519
|
3438 |
msgid "ABORT: Could not find the information on which entities to restore."
|
3439 |
msgstr ""
|
3440 |
|
3441 |
+
#: src/admin.php:4519
|
3442 |
msgid "If making a request for support, please include this information:"
|
3443 |
msgstr ""
|
3444 |
|
3445 |
+
#: src/admin.php:4685
|
3446 |
msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
|
3447 |
msgstr ""
|
3448 |
|
3449 |
+
#: src/admin.php:4685
|
3450 |
msgid "settings"
|
3451 |
msgstr ""
|
3452 |
|
3453 |
+
#: src/admin.php:4685
|
3454 |
msgid "Not got any remote storage?"
|
3455 |
msgstr ""
|
3456 |
|
3457 |
+
#: src/admin.php:4685
|
3458 |
msgid "Check out UpdraftPlus Vault."
|
3459 |
msgstr ""
|
3460 |
|
3461 |
+
#: src/admin.php:4687
|
3462 |
msgid "Send this backup to remote storage"
|
3463 |
msgstr ""
|
3464 |
|
3465 |
+
#: src/admin.php:4777
|
3466 |
msgid "UpdraftPlus seems to have been updated to version (%s), which is different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
|
3467 |
msgstr ""
|
3468 |
|
3469 |
+
#: src/admin.php:4784, src/templates/wp-admin/settings/take-backup.php:51
|
3470 |
msgid "This button is disabled because your backup directory is not writable (see the settings)."
|
3471 |
msgstr ""
|
3472 |
|
3473 |
+
#: src/admin.php:4813
|
3474 |
msgid "Your settings have been saved."
|
3475 |
msgstr ""
|
3476 |
|
3477 |
+
#: src/admin.php:4818
|
3478 |
msgid "Your settings failed to save. Please refresh the settings page and try again"
|
3479 |
msgstr ""
|
3480 |
|
3481 |
+
#: src/admin.php:4866
|
3482 |
msgid "authentication error"
|
3483 |
msgstr ""
|
3484 |
|
3485 |
+
#: src/admin.php:4870
|
3486 |
msgid "Remote storage method and instance id are required for authentication."
|
3487 |
msgstr ""
|
3488 |
|
3489 |
+
#: src/admin.php:4937
|
3490 |
msgid "Your settings have been wiped."
|
3491 |
msgstr ""
|
3492 |
|
3493 |
+
#: src/admin.php:5038
|
3494 |
msgid "Known backups (raw)"
|
3495 |
msgstr ""
|
3496 |
|
3497 |
+
#: src/admin.php:5073
|
3498 |
msgid "Options (raw)"
|
3499 |
msgstr ""
|
3500 |
|
3501 |
+
#: src/admin.php:5076
|
3502 |
msgid "Value"
|
3503 |
msgstr ""
|
3504 |
|
3505 |
+
#: src/admin.php:5228
|
3506 |
msgid "The file %s has a \"byte order mark\" (BOM) at its beginning."
|
3507 |
msgid_plural "The files %s have a \"byte order mark\" (BOM) at their beginning."
|
3508 |
msgstr[0] ""
|
3509 |
msgstr[1] ""
|
3510 |
|
3511 |
+
#: src/admin.php:5228, src/methods/openstack2.php:144, src/restorer.php:183, src/restorer.php:185, src/templates/wp-admin/settings/downloading-and-restoring.php:27, src/templates/wp-admin/settings/tab-backups.php:27, src/templates/wp-admin/settings/updraftcentral-connect.php:14
|
3512 |
msgid "Follow this link for more information"
|
3513 |
msgstr ""
|
3514 |
|
3515 |
+
#: src/admin.php:5250, src/admin.php:5254, src/templates/wp-admin/advanced/site-info.php:45, src/templates/wp-admin/advanced/site-info.php:51, src/templates/wp-admin/advanced/site-info.php:58, src/templates/wp-admin/advanced/site-info.php:59
|
3516 |
msgid "%s version:"
|
3517 |
msgstr ""
|
3518 |
|
3519 |
+
#: src/admin.php:5258
|
3520 |
msgid "Clone region:"
|
3521 |
msgstr ""
|
3522 |
|
3523 |
+
#: src/admin.php:5263
|
3524 |
msgid "Forbid non-administrators to login to WordPress on your clone"
|
3525 |
msgstr ""
|
3526 |
|
3527 |
+
#: src/admin.php:5286
|
3528 |
msgid "(current version)"
|
3529 |
msgstr ""
|
3530 |
|
3531 |
+
#: src/admin.php:5306
|
3532 |
msgid "Your clone has started and will be available at the following URLs once it is ready."
|
3533 |
msgstr ""
|
3534 |
|
3535 |
+
#: src/admin.php:5307
|
3536 |
msgid "Front page:"
|
3537 |
msgstr ""
|
3538 |
|
3539 |
+
#: src/admin.php:5308
|
3540 |
msgid "Dashboard:"
|
3541 |
msgstr ""
|
3542 |
|
3543 |
+
#: src/admin.php:5310, src/admin.php:5313
|
3544 |
msgid "You can find your temporary clone information in your updraftplus.com account here."
|
3545 |
msgstr ""
|
3546 |
|
3547 |
+
#: src/admin.php:5312
|
3548 |
msgid "Your clone has started, network information is not yet available but will be displayed here and at your updraftplus.com account once it is ready."
|
3549 |
msgstr ""
|
3550 |
|
3551 |
+
#: src/backup.php:220
|
3552 |
msgid "%s - could not back this entity up; the corresponding directory does not exist (%s)"
|
3553 |
msgstr ""
|
3554 |
|
3555 |
+
#: src/backup.php:292
|
3556 |
msgid "Could not create %s zip. Consult the log file for more information."
|
3557 |
msgstr ""
|
3558 |
|
3559 |
+
#: src/backup.php:486, src/backup.php:2173, src/class-updraftplus.php:2125, src/class-updraftplus.php:2192, src/includes/class-storage-methods-interface.php:364, src/restorer.php:485
|
3560 |
msgid "A PHP exception (%s) has occurred: %s"
|
3561 |
msgstr ""
|
3562 |
|
3563 |
+
#: src/backup.php:492, src/backup.php:2182, src/class-updraftplus.php:2134, src/class-updraftplus.php:2199, src/includes/class-storage-methods-interface.php:373, src/restorer.php:499
|
3564 |
msgid "A PHP fatal error (%s) has occurred: %s"
|
3565 |
msgstr ""
|
3566 |
|
3567 |
+
#: src/backup.php:1079
|
3568 |
msgid "Full backup"
|
3569 |
msgstr ""
|
3570 |
|
3571 |
+
#: src/backup.php:1079
|
3572 |
msgid "Incremental"
|
3573 |
msgstr ""
|
3574 |
|
3575 |
+
#: src/backup.php:1084, src/class-updraftplus.php:2996
|
3576 |
msgid "The backup was aborted by the user"
|
3577 |
msgstr ""
|
3578 |
|
3579 |
+
#: src/backup.php:1088
|
3580 |
msgid "Files (database backup has not completed)"
|
3581 |
msgstr ""
|
3582 |
|
3583 |
+
#: src/backup.php:1088
|
3584 |
msgid "Files only (database was not part of this particular schedule)"
|
3585 |
msgstr ""
|
3586 |
|
3587 |
+
#: src/backup.php:1091
|
3588 |
msgid "Database (files backup has not completed)"
|
3589 |
msgstr ""
|
3590 |
|
3591 |
+
#: src/backup.php:1091
|
3592 |
msgid "Database only (files were not part of this particular schedule)"
|
3593 |
msgstr ""
|
3594 |
|
3595 |
+
#: src/backup.php:1094
|
3596 |
msgid "Unknown/unexpected error - please raise a support request"
|
3597 |
msgstr ""
|
3598 |
|
3599 |
+
#: src/backup.php:1103
|
3600 |
msgid "Errors encountered:"
|
3601 |
msgstr ""
|
3602 |
|
3603 |
+
#: src/backup.php:1121
|
3604 |
msgid "Warnings encountered:"
|
3605 |
msgstr ""
|
3606 |
|
3607 |
+
#: src/backup.php:1136
|
3608 |
msgid "Backed up: %s"
|
3609 |
msgstr ""
|
3610 |
|
3611 |
+
#: src/backup.php:1145
|
3612 |
msgid "Email reports created by UpdraftPlus (free edition) bring you the latest UpdraftPlus.com news"
|
3613 |
msgstr ""
|
3614 |
|
3615 |
+
#: src/backup.php:1145
|
3616 |
msgid "read more at %s"
|
3617 |
msgstr ""
|
3618 |
|
3619 |
+
#: src/backup.php:1178
|
3620 |
msgid "WordPress backup is complete"
|
3621 |
msgstr ""
|
3622 |
|
3623 |
+
#: src/backup.php:1179
|
3624 |
msgid "Backup contains:"
|
3625 |
msgstr ""
|
3626 |
|
3627 |
+
#: src/backup.php:1645
|
3628 |
msgid "database connection attempt failed."
|
3629 |
msgstr ""
|
3630 |
|
3631 |
+
#: src/backup.php:1691
|
3632 |
msgid "please wait for the rescheduled attempt"
|
3633 |
msgstr ""
|
3634 |
|
3635 |
+
#: src/backup.php:1693
|
3636 |
msgid "No database tables found"
|
3637 |
msgstr ""
|
3638 |
|
3639 |
+
#: src/backup.php:1704
|
3640 |
msgid "The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail."
|
3641 |
msgstr ""
|
3642 |
|
3643 |
+
#: src/backup.php:1782
|
3644 |
msgid "Table %s has very many rows (%s) - we hope your web hosting company gives you enough resources to dump out that table in the backup"
|
3645 |
msgstr ""
|
3646 |
|
3647 |
+
#: src/backup.php:1782
|
3648 |
msgid "If not, you will need to either remove data from this table, or contact your hosting company to request more resources."
|
3649 |
msgstr ""
|
3650 |
|
3651 |
+
#: src/backup.php:1832, src/backup.php:1834
|
3652 |
msgid "The database backup appears to have failed"
|
3653 |
msgstr ""
|
3654 |
|
3655 |
+
#: src/backup.php:1832
|
3656 |
msgid "no options or sitemeta table was found"
|
3657 |
msgstr ""
|
3658 |
|
3659 |
+
#: src/backup.php:1834
|
3660 |
msgid "the options table was not found"
|
3661 |
msgstr ""
|
3662 |
|
3663 |
+
#: src/backup.php:1882
|
3664 |
msgid "Failed to open database file for reading:"
|
3665 |
msgstr ""
|
3666 |
|
3667 |
+
#: src/backup.php:1901
|
3668 |
msgid "An error occurred whilst closing the final database file"
|
3669 |
msgstr ""
|
3670 |
|
3671 |
+
#: src/backup.php:2214
|
3672 |
msgid "Could not open the backup file for writing"
|
3673 |
msgstr ""
|
3674 |
|
3675 |
+
#: src/backup.php:2340
|
3676 |
msgid "Infinite recursion: consult your log for more information"
|
3677 |
msgstr ""
|
3678 |
|
3679 |
+
#: src/backup.php:2373
|
3680 |
msgid "%s: unreadable file - could not be backed up (check the file permissions and ownership)"
|
3681 |
msgstr ""
|
3682 |
|
3683 |
+
#: src/backup.php:2395
|
3684 |
msgid "Failed to open directory (check the file permissions and ownership): %s"
|
3685 |
msgstr ""
|
3686 |
|
3687 |
+
#: src/backup.php:2460
|
3688 |
msgid "%s: unreadable file - could not be backed up"
|
3689 |
msgstr ""
|
3690 |
|
3691 |
+
#: src/backup.php:3140, src/backup.php:3423
|
3692 |
msgid "Failed to open the zip file (%s) - %s"
|
3693 |
msgstr ""
|
3694 |
|
3695 |
+
#: src/backup.php:3166
|
3696 |
msgid "A very large file was encountered: %s (size: %s Mb)"
|
3697 |
msgstr ""
|
3698 |
|
3699 |
+
#: src/backup.php:3467, src/class-updraftplus.php:861
|
3700 |
msgid "Your free space in your hosting account is very low - only %s Mb remain"
|
3701 |
msgstr ""
|
3702 |
|
3703 |
+
#: src/backup.php:3474
|
3704 |
msgid "The zip engine returned the message: %s."
|
3705 |
msgstr ""
|
3706 |
|
3707 |
+
#: src/backup.php:3476
|
3708 |
msgid "A zip error occurred"
|
3709 |
msgstr ""
|
3710 |
|
3711 |
+
#: src/backup.php:3478
|
3712 |
msgid "your web hosting account appears to be full; please see: %s"
|
3713 |
msgstr ""
|
3714 |
|
3715 |
+
#: src/backup.php:3480
|
3716 |
msgid "check your log for more details."
|
3717 |
msgstr ""
|
3718 |
|
4004 |
msgid "Could not save backup history because we have no backup array. Backup probably failed."
|
4005 |
msgstr ""
|
4006 |
|
4007 |
+
#: src/class-updraftplus.php:3868, src/includes/class-updraftplus-encryption.php:336, src/restorer.php:929
|
4008 |
msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
|
4009 |
msgstr ""
|
4010 |
|
4012 |
msgid "Decryption failed. The database file is encrypted."
|
4013 |
msgstr ""
|
4014 |
|
4015 |
+
#: src/class-updraftplus.php:3880, src/includes/class-updraftplus-encryption.php:354, src/restorer.php:942
|
4016 |
msgid "Decryption failed. The most likely cause is that you used the wrong key."
|
4017 |
msgstr ""
|
4018 |
|
4056 |
msgid "You can search and replace your database (for migrating a website to a new location/URL) with the Migrator add-on - follow this link for more information"
|
4057 |
msgstr ""
|
4058 |
|
4059 |
+
#: src/class-updraftplus.php:3990, src/restorer.php:1607
|
4060 |
msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
|
4061 |
msgstr ""
|
4062 |
|
4063 |
+
#: src/class-updraftplus.php:3990, src/restorer.php:1607
|
4064 |
msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
|
4065 |
msgstr ""
|
4066 |
|
4088 |
msgid "Any support requests to do with %s should be raised with your web hosting company."
|
4089 |
msgstr ""
|
4090 |
|
4091 |
+
#: src/class-updraftplus.php:4024, src/restorer.php:2408, src/restorer.php:2497, src/restorer.php:2523
|
4092 |
msgid "Old table prefix:"
|
4093 |
msgstr ""
|
4094 |
|
4096 |
msgid "Backup label:"
|
4097 |
msgstr ""
|
4098 |
|
4099 |
+
#: src/class-updraftplus.php:4035, src/class-updraftplus.php:4038, src/restorer.php:643
|
4100 |
msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
|
4101 |
msgstr ""
|
4102 |
|
4108 |
msgid "Please read this link for important information on this process."
|
4109 |
msgstr ""
|
4110 |
|
4111 |
+
#: src/class-updraftplus.php:4042, src/restorer.php:2420
|
4112 |
msgid "To import an ordinary WordPress site into a multisite installation requires %s."
|
4113 |
msgstr ""
|
4114 |
|
4120 |
msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
|
4121 |
msgstr ""
|
4122 |
|
4123 |
+
#: src/class-updraftplus.php:4053, src/restorer.php:2426
|
4124 |
msgid "Site information:"
|
4125 |
msgstr ""
|
4126 |
|
4236 |
msgid "Your web server's PHP installation has these functions disabled: %s."
|
4237 |
msgstr ""
|
4238 |
|
4239 |
+
#: src/includes/class-filesystem-functions.php:294, src/methods/ftp.php:330, src/restorer.php:2199
|
4240 |
msgid "Your hosting company must enable these functions before %s can work."
|
4241 |
msgstr ""
|
4242 |
|
4243 |
+
#: src/includes/class-filesystem-functions.php:294, src/restorer.php:2199
|
4244 |
msgid "restoration"
|
4245 |
msgstr ""
|
4246 |
|
4256 |
msgid "The attempt to undo the double-compression succeeded."
|
4257 |
msgstr ""
|
4258 |
|
4259 |
+
#: src/includes/class-filesystem-functions.php:543
|
4260 |
msgid "Unzip progress: %d out of %d files"
|
4261 |
msgstr ""
|
4262 |
|
4500 |
msgid "Allow only administrators to log in"
|
4501 |
msgstr ""
|
4502 |
|
4503 |
+
#: src/includes/updraftplus-login.php:58, src/methods/updraftvault.php:687, src/udaddons/updraftplus-addons.php:968
|
4504 |
msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
|
4505 |
msgstr ""
|
4506 |
|
4991 |
msgid "%s end-point"
|
4992 |
msgstr ""
|
4993 |
|
4994 |
+
#: src/methods/dropbox.php:172, src/methods/dropbox.php:189
|
4995 |
msgid "You do not appear to be authenticated with Dropbox"
|
4996 |
msgstr ""
|
4997 |
|
4998 |
+
#: src/methods/dropbox.php:194
|
4999 |
msgid "error: %s (see log file for more)"
|
5000 |
msgstr ""
|
5001 |
|
5002 |
+
#: src/methods/dropbox.php:283
|
5003 |
msgid "error: failed to upload file to %s (see log file for more)"
|
5004 |
msgstr ""
|
5005 |
|
5007 |
msgid "did not return the expected response - check your log file for more details"
|
5008 |
msgstr ""
|
5009 |
|
5010 |
+
#: src/methods/dropbox.php:305, src/methods/dropbox.php:320
|
5011 |
msgid "failed to upload file to %s (see log file for more)"
|
5012 |
msgstr ""
|
5013 |
|
5014 |
+
#: src/methods/dropbox.php:376
|
5015 |
msgid "%s returned an unexpected HTTP response: %s"
|
5016 |
msgstr ""
|
5017 |
|
5018 |
+
#: src/methods/dropbox.php:439
|
5019 |
msgid "You do not appear to be authenticated with %s (whilst deleting)"
|
5020 |
msgstr ""
|
5021 |
|
5022 |
+
#: src/methods/dropbox.php:447
|
5023 |
msgid "Failed to access %s when deleting (see log file for more)"
|
5024 |
msgstr ""
|
5025 |
|
5026 |
+
#: src/methods/dropbox.php:480
|
5027 |
msgid "You do not appear to be authenticated with %s"
|
5028 |
msgstr ""
|
5029 |
|
5030 |
+
#: src/methods/dropbox.php:602, src/methods/dropbox.php:604
|
5031 |
msgid "Need to use sub-folders?"
|
5032 |
msgstr ""
|
5033 |
|
5034 |
+
#: src/methods/dropbox.php:602, src/methods/dropbox.php:604
|
5035 |
msgid "Backups are saved in"
|
5036 |
msgstr ""
|
5037 |
|
5038 |
+
#: src/methods/dropbox.php:602, src/methods/dropbox.php:604
|
5039 |
msgid "If you backup several sites into the same Dropbox and want to organize with sub-folders, then "
|
5040 |
msgstr ""
|
5041 |
|
5042 |
+
#: src/methods/dropbox.php:602, src/methods/dropbox.php:604
|
5043 |
msgid "there's an add-on for that."
|
5044 |
msgstr ""
|
5045 |
|
5046 |
+
#: src/methods/dropbox.php:610
|
5047 |
msgid "Dropbox"
|
5048 |
msgstr ""
|
5049 |
|
5050 |
+
#: src/methods/dropbox.php:635
|
5051 |
msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
|
5052 |
msgstr ""
|
5053 |
|
5054 |
+
#: src/methods/dropbox.php:752, src/methods/dropbox.php:774
|
5055 |
msgid "%s authentication"
|
5056 |
msgstr ""
|
5057 |
|
5058 |
+
#: src/methods/dropbox.php:789
|
5059 |
msgid "%s de-authentication"
|
5060 |
msgstr ""
|
5061 |
|
5062 |
+
#: src/methods/dropbox.php:805, src/methods/dropbox.php:807
|
5063 |
msgid "Success:"
|
5064 |
msgstr ""
|
5065 |
|
5066 |
+
#: src/methods/dropbox.php:805, src/methods/dropbox.php:807
|
5067 |
msgid "you have authenticated your %s account"
|
5068 |
msgstr ""
|
5069 |
|
5070 |
+
#: src/methods/dropbox.php:810, src/methods/dropbox.php:832
|
5071 |
msgid "though part of the returned information was not as expected - your mileage may vary"
|
5072 |
msgstr ""
|
5073 |
|
5565 |
msgid "You do not currently have any UpdraftPlus Vault quota"
|
5566 |
msgstr ""
|
5567 |
|
5568 |
+
#: src/methods/updraftvault.php:714, src/methods/updraftvault.php:729, src/udaddons/updraftplus-addons.php:1009
|
5569 |
msgid "UpdraftPlus.Com returned a response, but we could not understand it"
|
5570 |
msgstr ""
|
5571 |
|
5572 |
+
#: src/methods/updraftvault.php:720, src/udaddons/updraftplus-addons.php:998
|
5573 |
msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
|
5574 |
msgstr ""
|
5575 |
|
5577 |
msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
|
5578 |
msgstr ""
|
5579 |
|
5580 |
+
#: src/methods/updraftvault.php:723, src/udaddons/updraftplus-addons.php:1002
|
5581 |
msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
|
5582 |
msgstr ""
|
5583 |
|
5584 |
+
#: src/methods/updraftvault.php:726, src/udaddons/updraftplus-addons.php:1005
|
5585 |
msgid "Your email address and password were not recognised by UpdraftPlus.Com"
|
5586 |
msgstr ""
|
5587 |
|
5605 |
msgid "(This applies to all WordPress backup plugins unless they have been explicitly coded for multisite compatibility)."
|
5606 |
msgstr ""
|
5607 |
|
5608 |
+
#: src/restorer.php:174
|
5609 |
msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old)."
|
5610 |
msgstr ""
|
5611 |
|
5612 |
+
#: src/restorer.php:301
|
5613 |
msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
|
5614 |
msgstr ""
|
5615 |
|
5616 |
+
#: src/restorer.php:312
|
5617 |
msgid "Looking for %s archive: file name: %s"
|
5618 |
msgstr ""
|
5619 |
|
5620 |
+
#: src/restorer.php:315
|
5621 |
msgid "Skipping: this archive was already restored."
|
5622 |
msgstr ""
|
5623 |
|
5624 |
+
#: src/restorer.php:327
|
5625 |
msgid "Archive is expected to be size:"
|
5626 |
msgstr ""
|
5627 |
|
5628 |
+
#: src/restorer.php:332
|
5629 |
msgid "file is size:"
|
5630 |
msgstr ""
|
5631 |
|
5632 |
+
#: src/restorer.php:335
|
5633 |
msgid "The backup records do not contain information about the proper size of this file."
|
5634 |
msgstr ""
|
5635 |
|
5636 |
+
#: src/restorer.php:338, src/restorer.php:339
|
5637 |
msgid "Could not find one of the files for restoration"
|
5638 |
msgstr ""
|
5639 |
|
5640 |
+
#: src/restorer.php:422
|
5641 |
msgid "Final checks"
|
5642 |
msgstr ""
|
5643 |
|
5644 |
+
#: src/restorer.php:511
|
5645 |
msgid "Error message"
|
5646 |
msgstr ""
|
5647 |
|
5648 |
+
#: src/restorer.php:628
|
5649 |
msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
|
5650 |
msgstr ""
|
5651 |
|
5652 |
+
#: src/restorer.php:629
|
5653 |
msgid "Backup file not available."
|
5654 |
msgstr ""
|
5655 |
|
5656 |
+
#: src/restorer.php:630
|
5657 |
msgid "Copying this entity failed."
|
5658 |
msgstr ""
|
5659 |
|
5660 |
+
#: src/restorer.php:631
|
5661 |
msgid "Unpacking backup..."
|
5662 |
msgstr ""
|
5663 |
|
5664 |
+
#: src/restorer.php:632
|
5665 |
msgid "Decrypting database (can take a while)..."
|
5666 |
msgstr ""
|
5667 |
|
5668 |
+
#: src/restorer.php:633
|
5669 |
msgid "Database successfully decrypted."
|
5670 |
msgstr ""
|
5671 |
|
5672 |
+
#: src/restorer.php:634
|
5673 |
msgid "Moving old data out of the way..."
|
5674 |
msgstr ""
|
5675 |
|
5676 |
+
#: src/restorer.php:635
|
5677 |
msgid "Moving unpacked backup into place..."
|
5678 |
msgstr ""
|
5679 |
|
5680 |
+
#: src/restorer.php:636
|
5681 |
msgid "Restoring the database (on a large site this can take a long time - if it times out (which can happen if your web hosting company has configured your hosting to limit resources) then you should use a different method, such as phpMyAdmin)..."
|
5682 |
msgstr ""
|
5683 |
|
5684 |
+
#: src/restorer.php:637
|
5685 |
msgid "Cleaning up rubbish..."
|
5686 |
msgstr ""
|
5687 |
|
5688 |
+
#: src/restorer.php:638
|
5689 |
msgid "Could not move old files out of the way."
|
5690 |
msgstr ""
|
5691 |
|
5692 |
+
#: src/restorer.php:638
|
5693 |
msgid "You should check the file ownerships and permissions in your WordPress installation"
|
5694 |
msgstr ""
|
5695 |
|
5696 |
+
#: src/restorer.php:639
|
5697 |
msgid "Could not delete old directory."
|
5698 |
msgstr ""
|
5699 |
|
5700 |
+
#: src/restorer.php:640
|
5701 |
msgid "Could not move new files into place. Check your wp-content/upgrade folder."
|
5702 |
msgstr ""
|
5703 |
|
5704 |
+
#: src/restorer.php:641
|
5705 |
msgid "Could not move the files into place. Check your file permissions."
|
5706 |
msgstr ""
|
5707 |
|
5708 |
+
#: src/restorer.php:642
|
5709 |
msgid "Failed to delete working directory after restoring."
|
5710 |
msgstr ""
|
5711 |
|
5712 |
+
#: src/restorer.php:644
|
5713 |
msgid "Failed to unpack the archive"
|
5714 |
msgstr ""
|
5715 |
|
5716 |
+
#: src/restorer.php:645
|
5717 |
msgid "Failed to read the manifest file from backup."
|
5718 |
msgstr ""
|
5719 |
|
5720 |
+
#: src/restorer.php:646
|
5721 |
msgid "Failed to find a manifest file in the backup."
|
5722 |
msgstr ""
|
5723 |
|
5724 |
+
#: src/restorer.php:647
|
5725 |
msgid "Failed to read from the working directory."
|
5726 |
msgstr ""
|
5727 |
|
5728 |
+
#: src/restorer.php:921
|
5729 |
msgid "Failed to create a temporary directory"
|
5730 |
msgstr ""
|
5731 |
|
5732 |
+
#: src/restorer.php:937
|
5733 |
msgid "Failed to write out the decrypted database to the filesystem"
|
5734 |
msgstr ""
|
5735 |
|
5736 |
+
#: src/restorer.php:1014
|
5737 |
msgid "The directory does not exist"
|
5738 |
msgstr ""
|
5739 |
|
5740 |
+
#: src/restorer.php:1054
|
5741 |
msgid "wp-config.php from backup: will restore as wp-config-backup.php"
|
5742 |
msgstr ""
|
5743 |
|
5744 |
+
#: src/restorer.php:1061
|
5745 |
msgid "wp-config.php from backup: restoring (as per user's request)"
|
5746 |
msgstr ""
|
5747 |
|
5748 |
+
#: src/restorer.php:1244, src/restorer.php:1252
|
5749 |
msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
|
5750 |
msgstr ""
|
5751 |
|
5752 |
+
#: src/restorer.php:1252
|
5753 |
msgid "file"
|
5754 |
msgstr ""
|
5755 |
|
5756 |
+
#: src/restorer.php:1267
|
5757 |
msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
|
5758 |
msgstr ""
|
5759 |
|
5760 |
+
#: src/restorer.php:1274
|
5761 |
msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
|
5762 |
msgstr ""
|
5763 |
|
5764 |
+
#: src/restorer.php:1377
|
5765 |
msgid "Deferring..."
|
5766 |
msgstr ""
|
5767 |
|
5768 |
+
#: src/restorer.php:1420, src/restorer.php:1468
|
5769 |
msgid "The WordPress content folder (wp-content) was not found in this zip file."
|
5770 |
msgstr ""
|
5771 |
|
5772 |
+
#: src/restorer.php:1561
|
5773 |
msgid "Files found:"
|
5774 |
msgstr ""
|
5775 |
|
5776 |
+
#: src/restorer.php:2088
|
5777 |
msgid "Please supply the requested information, and then continue."
|
5778 |
msgstr ""
|
5779 |
|
5780 |
+
#: src/restorer.php:2161
|
5781 |
msgid "Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method."
|
5782 |
msgstr ""
|
5783 |
|
5784 |
+
#: src/restorer.php:2184
|
5785 |
msgid "Failed to find database file"
|
5786 |
msgstr ""
|
5787 |
|
5788 |
+
#: src/restorer.php:2205
|
5789 |
msgid "Failed to open database file"
|
5790 |
msgstr ""
|
5791 |
|
5792 |
+
#: src/restorer.php:2285, src/restorer.php:2327
|
5793 |
msgid "Your database user does not have permission to drop tables"
|
5794 |
msgstr ""
|
5795 |
|
5796 |
+
#: src/restorer.php:2288
|
5797 |
msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
|
5798 |
msgstr ""
|
5799 |
|
5800 |
+
#: src/restorer.php:2332
|
5801 |
msgid "Your database user does not have permission to drop tables. We will attempt to restore by simply emptying the tables; this should work as long as you are restoring from a WordPress version with the same database structure (%s)"
|
5802 |
msgstr ""
|
5803 |
|
5804 |
+
#: src/restorer.php:2378
|
5805 |
msgid "Backup of: %s"
|
5806 |
msgstr ""
|
5807 |
|
5808 |
+
#: src/restorer.php:2385
|
5809 |
msgid "Backup created by:"
|
5810 |
msgstr ""
|
5811 |
|
5812 |
+
#: src/restorer.php:2390
|
5813 |
msgid "Site home:"
|
5814 |
msgstr ""
|
5815 |
|
5816 |
+
#: src/restorer.php:2396
|
5817 |
msgid "Content URL:"
|
5818 |
msgstr ""
|
5819 |
|
5820 |
+
#: src/restorer.php:2401
|
5821 |
msgid "Uploads URL:"
|
5822 |
msgstr ""
|
5823 |
|
5824 |
+
#: src/restorer.php:2412
|
5825 |
msgid "Skipped tables:"
|
5826 |
msgstr ""
|
5827 |
|
5828 |
+
#: src/restorer.php:2452
|
5829 |
msgid "Split line to avoid exceeding maximum packet size"
|
5830 |
msgstr ""
|
5831 |
|
5832 |
+
#: src/restorer.php:2477, src/restorer.php:2946, src/restorer.php:2987, src/restorer.php:3000
|
5833 |
msgid "An error occurred on the first %s command - aborting run"
|
5834 |
msgstr ""
|
5835 |
|
5836 |
+
#: src/restorer.php:2578
|
5837 |
msgid "Requested table engine (%s) is not present - changing to MyISAM."
|
5838 |
msgstr ""
|
5839 |
|
5840 |
+
#: src/restorer.php:2591
|
5841 |
msgid "Requested table character set (%s) is not present - changing to %s."
|
5842 |
msgstr ""
|
5843 |
|
5844 |
+
#: src/restorer.php:2641
|
5845 |
msgid "Requested table collation (%1$s) is not present - changing to %2$s."
|
5846 |
msgid_plural "Requested table collations (%1$s) are not present - changing to %2$s."
|
5847 |
msgstr[0] ""
|
5848 |
msgstr[1] ""
|
5849 |
|
5850 |
+
#: src/restorer.php:2643
|
5851 |
msgid "Processing table (%s)"
|
5852 |
msgstr ""
|
5853 |
|
5854 |
+
#: src/restorer.php:2647
|
5855 |
msgid "will restore as:"
|
5856 |
msgstr ""
|
5857 |
|
5858 |
+
#: src/restorer.php:2686
|
5859 |
msgid "Found SET NAMES %s, but changing to %s as suggested by WPDB::determine_charset()."
|
5860 |
msgstr ""
|
5861 |
|
5862 |
+
#: src/restorer.php:2692
|
5863 |
msgid "Requested character set (%s) is not present - changing to %s."
|
5864 |
msgstr ""
|
5865 |
|
5866 |
+
#: src/restorer.php:2840
|
5867 |
msgid "An SQL line that is larger than the maximum packet size and cannot be split was found; this line will not be processed, but will be dropped: %s"
|
5868 |
msgstr ""
|
5869 |
|
5870 |
+
#: src/restorer.php:2977
|
5871 |
msgctxt "The user is being told the number of times an error has happened, e.g. An error (27) occurred"
|
5872 |
msgid "An error (%s) occurred:"
|
5873 |
msgstr ""
|
5874 |
|
5875 |
+
#: src/restorer.php:2998
|
5876 |
msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
|
5877 |
msgstr ""
|
5878 |
|
5879 |
+
#: src/restorer.php:2998
|
5880 |
msgid "This database needs to be deployed on MySQL version %s or later."
|
5881 |
msgstr ""
|
5882 |
|
5883 |
+
#: src/restorer.php:3000
|
5884 |
msgid "To use this backup, your database server needs to support the %s character set."
|
5885 |
msgstr ""
|
5886 |
|
5887 |
+
#: src/restorer.php:3005
|
5888 |
msgid "Too many database errors have occurred - aborting"
|
5889 |
msgstr ""
|
5890 |
|
5891 |
+
#: src/restorer.php:3125, src/restorer.php:3200
|
5892 |
msgid "Table prefix has changed: changing %s table field(s) accordingly:"
|
5893 |
msgstr ""
|
5894 |
|
7273 |
msgid "UpdraftPlus.Com responded, but we did not understand the response"
|
7274 |
msgstr ""
|
7275 |
|
7276 |
+
#: src/udaddons/updraftplus-addons.php:966
|
7277 |
msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
|
7278 |
msgstr ""
|
7279 |
|
7280 |
+
#: src/udaddons/updraftplus-addons.php:998
|
7281 |
msgid "Go here to re-enter your password."
|
7282 |
msgstr ""
|
7283 |
|
7284 |
+
#: src/udaddons/updraftplus-addons.php:999
|
7285 |
msgid "If you have forgotten your password "
|
7286 |
msgstr ""
|
7287 |
|
7288 |
+
#: src/udaddons/updraftplus-addons.php:999
|
7289 |
msgid "go here to change your password on updraftplus.com."
|
7290 |
msgstr ""
|
7291 |
|
@@ -645,7 +645,7 @@ abstract class UpdraftPlus_BackupModule {
|
|
645 |
|
646 |
$prefix = $this->get_storage_label();
|
647 |
|
648 |
-
$updraftplus->log("$prefix: $line", $level
|
649 |
}
|
650 |
|
651 |
/**
|
645 |
|
646 |
$prefix = $this->get_storage_label();
|
647 |
|
648 |
+
$updraftplus->log("$prefix: $line", $level, $uniq_id = false, $skip_dblog = false);
|
649 |
}
|
650 |
|
651 |
/**
|
@@ -13,11 +13,10 @@ if (!class_exists('UpdraftPlus_BackupModule')) require_once(UPDRAFTPLUS_DIR.'/me
|
|
13 |
// Can be removed after a few months
|
14 |
$potential_options = UpdraftPlus_Options::get_updraft_option('updraft_dropbox');
|
15 |
if (is_array($potential_options) && isset($potential_options['version']) && isset($potential_options['settings']) && array() === $potential_options['settings']) {
|
16 |
-
// Wipe it, which
|
17 |
UpdraftPlus_Options::delete_updraft_option('updraft_dropbox');
|
18 |
}
|
19 |
|
20 |
-
|
21 |
class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
|
22 |
|
23 |
private $current_file_hash;
|
@@ -282,6 +281,7 @@ class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
|
|
282 |
$this->log('Unexpected HTTP code returned from Dropbox: '.$response['code']." (".serialize($response).")");
|
283 |
if ($response['code'] >= 400) {
|
284 |
$this->log(sprintf(__('error: failed to upload file to %s (see log file for more)', 'updraftplus'), $file), 'error');
|
|
|
285 |
} else {
|
286 |
$this->log(__('did not return the expected response - check your log file for more details', 'updraftplus'), 'warning');
|
287 |
}
|
@@ -317,7 +317,6 @@ class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
|
|
317 |
if (preg_match('/Upload with upload_id .* already completed/', $msg)) {
|
318 |
$this->log('returned an error, but apparently indicating previous success: '.$msg);
|
319 |
} else {
|
320 |
-
$this->log($msg);
|
321 |
$this->log(sprintf(__('failed to upload file to %s (see log file for more)', 'updraftplus'), $ufile), 'error');
|
322 |
$file_success = 0;
|
323 |
if (strpos($msg, 'select/poll returned error') !== false && $this->upload_tick > 0 && time() - $this->upload_tick > 800) {
|
13 |
// Can be removed after a few months
|
14 |
$potential_options = UpdraftPlus_Options::get_updraft_option('updraft_dropbox');
|
15 |
if (is_array($potential_options) && isset($potential_options['version']) && isset($potential_options['settings']) && array() === $potential_options['settings']) {
|
16 |
+
// Wipe it, which will force its re-creation in proper format
|
17 |
UpdraftPlus_Options::delete_updraft_option('updraft_dropbox');
|
18 |
}
|
19 |
|
|
|
20 |
class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
|
21 |
|
22 |
private $current_file_hash;
|
281 |
$this->log('Unexpected HTTP code returned from Dropbox: '.$response['code']." (".serialize($response).")");
|
282 |
if ($response['code'] >= 400) {
|
283 |
$this->log(sprintf(__('error: failed to upload file to %s (see log file for more)', 'updraftplus'), $file), 'error');
|
284 |
+
$file_success = 0;
|
285 |
} else {
|
286 |
$this->log(__('did not return the expected response - check your log file for more details', 'updraftplus'), 'warning');
|
287 |
}
|
317 |
if (preg_match('/Upload with upload_id .* already completed/', $msg)) {
|
318 |
$this->log('returned an error, but apparently indicating previous success: '.$msg);
|
319 |
} else {
|
|
|
320 |
$this->log(sprintf(__('failed to upload file to %s (see log file for more)', 'updraftplus'), $ufile), 'error');
|
321 |
$file_success = 0;
|
322 |
if (strpos($msg, 'select/poll returned error') !== false && $this->upload_tick > 0 && time() - $this->upload_tick > 800) {
|
@@ -3,7 +3,7 @@ Contributors: Backup with UpdraftPlus, DavidAnderson, DNutbourne, aporter, snigh
|
|
3 |
Tags: backup, restore, database backup, wordpress backup, cloud backup, s3, dropbox, google drive, onedrive, ftp, backups
|
4 |
Requires at least: 3.2
|
5 |
Tested up to: 5.0
|
6 |
-
Stable tag: 1.16.
|
7 |
Author URI: https://updraftplus.com
|
8 |
Donate link: https://david.dw-perspective.org.uk/donate
|
9 |
License: GPLv3 or later
|
@@ -12,7 +12,7 @@ Backup and restoration made easy. Complete backups; manual or scheduled (backup
|
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
-
<a href="https://updraftplus.com">UpdraftPlus</a> simplifies backups and restoration. It is the world's highest ranking and most popular scheduled backup plugin, with over
|
16 |
|
17 |
Backup into the cloud directly to Dropbox, Google Drive, Amazon S3 (or compatible), UpdraftVault, Rackspace Cloud, FTP, DreamObjects, Openstack Swift, and email. The paid version also backs up to Microsoft OneDrive, Microsoft Azure, Google Cloud Storage, Backblaze B2, SFTP, SCP, and WebDAV.
|
18 |
|
@@ -168,6 +168,17 @@ The <a href="https://updraftplus.com/news/">UpdraftPlus backup blog</a> is the b
|
|
168 |
|
169 |
N.B. Paid versions of UpdraftPlus Backup / Restore have a version number which is 1 higher in the first digit, and has an extra component on the end, but the changelog below still applies. i.e. changes listed for 1.16.4.x of the free version correspond to changes made in 2.16.4.x of the paid version.
|
170 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
171 |
= 1.16.4 - 17/Jan/2019 =
|
172 |
|
173 |
* FIX: Regression: Properly mark backups picked up via "Rescan remote storage" as non-native (preventing unwelcome side-effects such as being pruned by another site)
|
@@ -751,5 +762,4 @@ Furthermore, reliance upon any non-English translation is at your own risk. Updr
|
|
751 |
We recognise and thank the following for code and/or libraries used and/or modified under the terms of their open source licences; see: https://updraftplus.com/acknowledgements/
|
752 |
|
753 |
== Upgrade Notice ==
|
754 |
-
* 1.16.
|
755 |
-
|
3 |
Tags: backup, restore, database backup, wordpress backup, cloud backup, s3, dropbox, google drive, onedrive, ftp, backups
|
4 |
Requires at least: 3.2
|
5 |
Tested up to: 5.0
|
6 |
+
Stable tag: 1.16.5
|
7 |
Author URI: https://updraftplus.com
|
8 |
Donate link: https://david.dw-perspective.org.uk/donate
|
9 |
License: GPLv3 or later
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
+
<a href="https://updraftplus.com">UpdraftPlus</a> simplifies backups and restoration. It is the world's highest ranking and most popular scheduled backup plugin, with over two million currently-active installs. Backup your files and database backups into the cloud and restore with a single click!
|
16 |
|
17 |
Backup into the cloud directly to Dropbox, Google Drive, Amazon S3 (or compatible), UpdraftVault, Rackspace Cloud, FTP, DreamObjects, Openstack Swift, and email. The paid version also backs up to Microsoft OneDrive, Microsoft Azure, Google Cloud Storage, Backblaze B2, SFTP, SCP, and WebDAV.
|
18 |
|
168 |
|
169 |
N.B. Paid versions of UpdraftPlus Backup / Restore have a version number which is 1 higher in the first digit, and has an extra component on the end, but the changelog below still applies. i.e. changes listed for 1.16.4.x of the free version correspond to changes made in 2.16.4.x of the paid version.
|
170 |
|
171 |
+
= 1.16.5 - 28/Jan/2019 =
|
172 |
+
|
173 |
+
* FEATURE: If a restoration is interrupted (e.g. PHP timeout), then the "Continue" feature can now resume not just at the most recent zip file, but within the zip file at the point it had reached (https://updraftplus.com/auto-resuming-interrupted-restores-part-2/)
|
174 |
+
* FEATURE: Added command in WP-CLI which gives a list of incremental backups restore points.
|
175 |
+
* FIX: Regression: When a Dropbox upload failed to complete, UpdraftPlus would log this but fail to retry
|
176 |
+
* FIX: Again update phpseclib to the latest version which should now fix the 'SSH2 Server Host Key Algorithm Mismatch' on all installs
|
177 |
+
* TWEAK: Fix a wrong variable reference in an error message
|
178 |
+
* TWEAK: Only add the JavaScript for the incremental schedule selection on the UD settings page
|
179 |
+
* TWEAK: Replace incidental use of ipinfo.io now that it requires a paid API key
|
180 |
+
* TWEAK: The print_delete_old_dirs_form method should have been public to allow painting if the user clicked through the previous message
|
181 |
+
|
182 |
= 1.16.4 - 17/Jan/2019 =
|
183 |
|
184 |
* FIX: Regression: Properly mark backups picked up via "Rescan remote storage" as non-native (preventing unwelcome side-effects such as being pruned by another site)
|
762 |
We recognise and thank the following for code and/or libraries used and/or modified under the terms of their open source licences; see: https://updraftplus.com/acknowledgements/
|
763 |
|
764 |
== Upgrade Notice ==
|
765 |
+
* 1.16.5: More granularity in resumed restores; fix regression whereby a failed Dropbox upload could fail to be noticed; plus various other small tweaks and enhancements. A recommended update for all.
|
|
@@ -56,6 +56,8 @@ class Updraft_Restorer {
|
|
56 |
|
57 |
private $import_table_prefix = null;
|
58 |
|
|
|
|
|
59 |
// Constants for use with the move_backup_in method
|
60 |
// These can't be arbitrarily changed; there is legacy code doing bitwise operations and numerical comparisons, and possibly legacy code still using the values directly.
|
61 |
const MOVEIN_OVERWRITE_NO_BACKUP = 0;
|
@@ -72,16 +74,19 @@ class Updraft_Restorer {
|
|
72 |
/**
|
73 |
* Constructor
|
74 |
*
|
75 |
-
* @param WP_Upgrader_Skin|Null $skin
|
76 |
-
* @param Array|Null $backup_set
|
77 |
-
* @param Boolean $short_init
|
78 |
-
* @param Array $restore_options
|
|
|
79 |
*/
|
80 |
-
public function __construct($skin = null, $backup_set = null, $short_init = false, $restore_options = array()) {
|
81 |
|
82 |
global $wpdb, $updraftplus;
|
83 |
|
84 |
$this->our_siteurl = untrailingslashit(site_url());
|
|
|
|
|
85 |
|
86 |
// Line up a wpdb-like object
|
87 |
if (!$this->use_wpdb()) {
|
@@ -259,19 +264,18 @@ class Updraft_Restorer {
|
|
259 |
}
|
260 |
|
261 |
/**
|
262 |
-
* Ensure that needed files are present, and return data for the next step (plus do some internal configuration)
|
263 |
*
|
264 |
* @param Array $entities_to_restore - as returned by self::get_entities_to_restore()
|
265 |
* @param Array $backupable_entities - list of entities that can be backed u
|
266 |
-
* @param Array $continuation_data - continuation data
|
267 |
* @param Array $services - list of services that the backup can be found at
|
268 |
*
|
269 |
* @uses self::pre_restore_backup() (and some other internal properties)
|
270 |
* @uses UpdraftPlus::log()
|
271 |
*
|
272 |
-
* @return Boolean|Array|WP_Error
|
273 |
*/
|
274 |
-
private function ensure_restore_files_present($entities_to_restore, $backupable_entities, $
|
275 |
|
276 |
global $updraftplus;
|
277 |
|
@@ -307,7 +311,7 @@ class Updraft_Restorer {
|
|
307 |
$fullpath = $updraft_dir.'/'.$file;
|
308 |
$updraftplus->log(sprintf(__("Looking for %s archive: file name: %s", 'updraftplus'), $type, $file), 'notice-restore');
|
309 |
|
310 |
-
if (is_array($continuation_data) && isset($continuation_data['second_loop_entities'][$type]) && !in_array($file, $continuation_data['second_loop_entities'][$type])) {
|
311 |
$updraftplus->log(__('Skipping: this archive was already restored.', 'updraftplus'), 'notice-restore');
|
312 |
// Set the marker so that the existing directory isn't moved out of the way
|
313 |
$this->been_restored[$type] = true;
|
@@ -349,7 +353,7 @@ class Updraft_Restorer {
|
|
349 |
|
350 |
foreach ($types as $check_type) {
|
351 |
$info = isset($backupable_entities[$check_type]) ? $backupable_entities[$check_type] : array();
|
352 |
-
$val = $this->pre_restore_backup($files, $check_type, $info
|
353 |
if (is_wp_error($val)) {
|
354 |
$updraftplus->log_wp_error($val);
|
355 |
foreach ($val->get_error_messages() as $msg) {
|
@@ -385,9 +389,9 @@ class Updraft_Restorer {
|
|
385 |
uksort($second_loop, array('UpdraftPlus_Manipulation_Functions', 'sort_restoration_entities'));
|
386 |
|
387 |
// If continuing, then prune those already done
|
388 |
-
if (is_array($continuation_data)) {
|
389 |
foreach ($second_loop as $type => $files) {
|
390 |
-
if (isset($continuation_data['second_loop_entities'][$type])) $second_loop[$type] = $continuation_data['second_loop_entities'][$type];
|
391 |
}
|
392 |
}
|
393 |
|
@@ -397,15 +401,16 @@ class Updraft_Restorer {
|
|
397 |
/**
|
398 |
* Perform the restoration. No code here (or called) should assume anything about the method used to call it (e.g. wp-admin or WP-CLI); it should be independent of how it is being called.
|
399 |
*
|
400 |
-
*
|
401 |
-
*
|
402 |
-
* @param Array
|
|
|
403 |
*
|
404 |
* @uses the WordPress action updraftplus_restoration_title, allowing the title to be printed
|
405 |
*
|
406 |
* @return Boolean
|
407 |
*/
|
408 |
-
public function perform_restore($entities_to_restore, $restore_options
|
409 |
|
410 |
global $updraftplus;
|
411 |
|
@@ -440,7 +445,7 @@ class Updraft_Restorer {
|
|
440 |
|
441 |
// Get an ordered list of things to restore
|
442 |
// This requires the global $updraft_restorer to be set up
|
443 |
-
$second_loop = $this->ensure_restore_files_present($entities_to_download, $backupable_entities, $
|
444 |
|
445 |
if (!is_array($second_loop)) return $second_loop;
|
446 |
|
@@ -646,16 +651,21 @@ class Updraft_Restorer {
|
|
646 |
* This function is copied from class WP_Upgrader (WP 3.8 - no significant changes since 3.2 at least); we only had to fork it because it hard-codes using the basename of the zip file as its unpack directory; which can be long; and then combining that with long pathnames in the zip being unpacked can overflow a 256-character path limit (yes, they apparently still exist - amazing!)
|
647 |
* Subsequently, we have also added the ability to unpack tarballs
|
648 |
*
|
649 |
-
*
|
|
|
|
|
|
|
|
|
650 |
* @param Boolean $delete_package check to delete package
|
651 |
* @param String|Boolean $type type of archive e.g. db.
|
652 |
*
|
653 |
-
* @return String|WP_Error If successful, then this indicates the working directory that the archive was unpacked in
|
654 |
*/
|
655 |
private function unpack_package_archive($package, $delete_package = true, $type = false) {
|
656 |
|
657 |
global $wp_filesystem, $updraftplus;
|
658 |
|
|
|
659 |
if (!empty($this->ud_foreign) && !empty($this->ud_foreign_working_dir) && $package == $this->ud_foreign_package) {
|
660 |
if (is_dir($this->ud_foreign_working_dir)) {
|
661 |
return $this->ud_foreign_working_dir;
|
@@ -664,36 +674,60 @@ class Updraft_Restorer {
|
|
664 |
}
|
665 |
}
|
666 |
|
667 |
-
$
|
668 |
-
|
669 |
-
$this->skin->feedback($this->strings['unpack_package'].' ('.basename($package).', '.$packsize.')');
|
670 |
|
671 |
-
$upgrade_folder = $wp_filesystem->wp_content_dir()
|
672 |
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
680 |
}
|
681 |
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
686 |
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
|
|
691 |
}
|
692 |
}
|
693 |
|
694 |
// Unzip package to working directory
|
695 |
if ('.zip' == strtolower(substr($package, -4, 4))) {
|
696 |
-
|
|
|
|
|
697 |
} elseif ('.tar' == strtolower(substr($package, -4, 4)) || '.tar.gz' == strtolower(substr($package, -7, 7)) || '.tar.bz2' == strtolower(substr($package, -8, 8))) {
|
698 |
if (!class_exists('UpdraftPlus_Archive_Tar')) {
|
699 |
if (false === strpos(get_include_path(), UPDRAFTPLUS_DIR.'/includes/PEAR')) set_include_path(UPDRAFTPLUS_DIR.'/includes/PEAR'.PATH_SEPARATOR.get_include_path());
|
@@ -707,7 +741,7 @@ class Updraft_Restorer {
|
|
707 |
$p_compress = 'bz2';
|
708 |
}
|
709 |
|
710 |
-
// It's not pretty
|
711 |
if (is_a($wp_filesystem, 'WP_Filesystem_Direct')) {
|
712 |
$extract_dir = $working_dir;
|
713 |
} else {
|
@@ -721,6 +755,7 @@ class Updraft_Restorer {
|
|
721 |
$updraftplus->log("Using a temporary folder to extract before moving over WPFS: $extract_dir");
|
722 |
}
|
723 |
}
|
|
|
724 |
// Slightly hackish - rather than re-write Archive_Tar to use wp_filesystem, we instead unpack into the location that we already require to be directly writable for other reasons, and then move from there.
|
725 |
|
726 |
if (empty($result)) {
|
@@ -824,14 +859,33 @@ class Updraft_Restorer {
|
|
824 |
*/
|
825 |
public function unpack_package($package, $delete_package = true, $type = false) {
|
826 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
827 |
global $wp_filesystem, $updraftplus;
|
828 |
-
|
829 |
$updraft_dir = $updraftplus->backups_dir_location();
|
830 |
-
|
831 |
-
//
|
832 |
-
if (!preg_match('/-db(\.gz(\.crypt)?)?$/i', $package) && !preg_match('/\.sql(\.gz|\.bz2)?$/i', $package)) return $this->unpack_package_archive($updraft_dir.'/'.$package, $delete_package, $type);
|
833 |
-
|
834 |
-
// Unpack a database. The general shape of the following is copied from class-wp-upgrader.php
|
835 |
|
836 |
$backup_dir = $wp_filesystem->find_folder($updraft_dir);
|
837 |
|
@@ -847,16 +901,15 @@ class Updraft_Restorer {
|
|
847 |
// Clean up contents of upgrade directory beforehand.
|
848 |
$upgrade_files = $wp_filesystem->dirlist($upgrade_folder);
|
849 |
if (!empty($upgrade_files)) {
|
850 |
-
foreach ($upgrade_files as $file)
|
851 |
if (!$wp_filesystem->delete($upgrade_folder.$file['name'], true)) {
|
852 |
$this->restore_log_permission_failure_message($upgrade_folder, 'Delete '.$upgrade_folder.$file['name']);
|
853 |
}
|
854 |
-
|
855 |
}
|
856 |
|
857 |
// We need a working directory
|
858 |
$working_dir = $upgrade_folder . basename($package, '.crypt');
|
859 |
-
// $working_dir_localpath = WP_CONTENT_DIR.'/upgrade/'. basename($package, '.crypt');
|
860 |
|
861 |
// Clean up working directory
|
862 |
if ($wp_filesystem->is_dir($working_dir)) {
|
@@ -919,7 +972,7 @@ class Updraft_Restorer {
|
|
919 |
}
|
920 |
}
|
921 |
|
922 |
-
$updraftplus->log(
|
923 |
|
924 |
return $working_dir;
|
925 |
}
|
@@ -1157,19 +1210,19 @@ class Updraft_Restorer {
|
|
1157 |
/**
|
1158 |
* Pre-flight check: chance to complain and abort before anything at all is done
|
1159 |
*
|
1160 |
-
* @param
|
1161 |
-
* @param
|
1162 |
-
* @param
|
1163 |
-
*
|
1164 |
-
* @return
|
1165 |
*/
|
1166 |
-
|
1167 |
|
1168 |
if (is_string($backup_files)) $backup_files = array($backup_files);
|
1169 |
|
1170 |
if ('more' == $type) {
|
1171 |
$this->skin->feedback($this->strings['not_possible']);
|
1172 |
-
return;
|
1173 |
}
|
1174 |
|
1175 |
// Ensure access to the indicated directory - and to WP_CONTENT_DIR (in which we use upgrade/)
|
@@ -1209,7 +1262,7 @@ class Updraft_Restorer {
|
|
1209 |
$ret_val = true;
|
1210 |
$updraft_dir = $updraftplus->backups_dir_location();
|
1211 |
|
1212 |
-
if (!is_array($continuation_data) && (('plugins' == $type || 'uploads' == $type || 'themes' == $type) && (!is_multisite() || 0 !== $this->ud_backup_is_multisite || ('uploads' != $type || empty($updraftplus_addons_migrator->new_blogid))))) {
|
1213 |
if (file_exists($updraft_dir.'/'.basename($wp_filesystem_dir)."-old")) {
|
1214 |
$ret_val = new WP_Error('already_exists', sprintf(__('Existing unremoved folders from a previous restore exist (please use the "Delete Old Directories" button to delete them before trying again): %s', 'updraftplus'), $wp_filesystem_dir.'-old'));
|
1215 |
}
|
56 |
|
57 |
private $import_table_prefix = null;
|
58 |
|
59 |
+
private $continuation_data;
|
60 |
+
|
61 |
// Constants for use with the move_backup_in method
|
62 |
// These can't be arbitrarily changed; there is legacy code doing bitwise operations and numerical comparisons, and possibly legacy code still using the values directly.
|
63 |
const MOVEIN_OVERWRITE_NO_BACKUP = 0;
|
74 |
/**
|
75 |
* Constructor
|
76 |
*
|
77 |
+
* @param WP_Upgrader_Skin|Null $skin - an upgrader skin
|
78 |
+
* @param Array|Null $backup_set - the backup set to restore
|
79 |
+
* @param Boolean $short_init - whether just to do a minimal initialisation
|
80 |
+
* @param Array $restore_options - options to guide the restoration
|
81 |
+
* @param Array|Null $continuation_data - continuation data; the jobdata of the job thus far (but only a few properties are used - including second_loop_entities; $restore_options will have come from there too if relevant, but that is passed in here separately); the 'last_index_*' entries also indicate unzipping progress
|
82 |
*/
|
83 |
+
public function __construct($skin = null, $backup_set = null, $short_init = false, $restore_options = array(), $continuation_data = null) {
|
84 |
|
85 |
global $wpdb, $updraftplus;
|
86 |
|
87 |
$this->our_siteurl = untrailingslashit(site_url());
|
88 |
+
|
89 |
+
$this->continuation_data = $continuation_data;
|
90 |
|
91 |
// Line up a wpdb-like object
|
92 |
if (!$this->use_wpdb()) {
|
264 |
}
|
265 |
|
266 |
/**
|
267 |
+
* Ensure that needed files are present locally, and return data for the next step (plus do some internal configuration)
|
268 |
*
|
269 |
* @param Array $entities_to_restore - as returned by self::get_entities_to_restore()
|
270 |
* @param Array $backupable_entities - list of entities that can be backed u
|
|
|
271 |
* @param Array $services - list of services that the backup can be found at
|
272 |
*
|
273 |
* @uses self::pre_restore_backup() (and some other internal properties)
|
274 |
* @uses UpdraftPlus::log()
|
275 |
*
|
276 |
+
* @return Boolean|Array|WP_Error - a sorted array (of entity types and files for each entity type) or false or a WP_Error if there was an error
|
277 |
*/
|
278 |
+
private function ensure_restore_files_present($entities_to_restore, $backupable_entities, $services) {
|
279 |
|
280 |
global $updraftplus;
|
281 |
|
311 |
$fullpath = $updraft_dir.'/'.$file;
|
312 |
$updraftplus->log(sprintf(__("Looking for %s archive: file name: %s", 'updraftplus'), $type, $file), 'notice-restore');
|
313 |
|
314 |
+
if (is_array($this->continuation_data) && isset($this->continuation_data['second_loop_entities'][$type]) && !in_array($file, $this->continuation_data['second_loop_entities'][$type])) {
|
315 |
$updraftplus->log(__('Skipping: this archive was already restored.', 'updraftplus'), 'notice-restore');
|
316 |
// Set the marker so that the existing directory isn't moved out of the way
|
317 |
$this->been_restored[$type] = true;
|
353 |
|
354 |
foreach ($types as $check_type) {
|
355 |
$info = isset($backupable_entities[$check_type]) ? $backupable_entities[$check_type] : array();
|
356 |
+
$val = $this->pre_restore_backup($files, $check_type, $info);
|
357 |
if (is_wp_error($val)) {
|
358 |
$updraftplus->log_wp_error($val);
|
359 |
foreach ($val->get_error_messages() as $msg) {
|
389 |
uksort($second_loop, array('UpdraftPlus_Manipulation_Functions', 'sort_restoration_entities'));
|
390 |
|
391 |
// If continuing, then prune those already done
|
392 |
+
if (is_array($this->continuation_data)) {
|
393 |
foreach ($second_loop as $type => $files) {
|
394 |
+
if (isset($this->continuation_data['second_loop_entities'][$type])) $second_loop[$type] = $this->continuation_data['second_loop_entities'][$type];
|
395 |
}
|
396 |
}
|
397 |
|
401 |
/**
|
402 |
* Perform the restoration. No code here (or called) should assume anything about the method used to call it (e.g. wp-admin or WP-CLI); it should be independent of how it is being called.
|
403 |
*
|
404 |
+
* The path through this class is perform_restore() -> restore_backup() -> unpack_package() -> unpack_package_(archive|database) and then (for standard UD archives) UpdraftPlus_Filesystem_Functions::unzip_file()
|
405 |
+
*
|
406 |
+
* @param Array $entities_to_restore - entities to restore
|
407 |
+
* @param Array $restore_options - restoration options
|
408 |
*
|
409 |
* @uses the WordPress action updraftplus_restoration_title, allowing the title to be printed
|
410 |
*
|
411 |
* @return Boolean
|
412 |
*/
|
413 |
+
public function perform_restore($entities_to_restore, $restore_options) {
|
414 |
|
415 |
global $updraftplus;
|
416 |
|
445 |
|
446 |
// Get an ordered list of things to restore
|
447 |
// This requires the global $updraft_restorer to be set up
|
448 |
+
$second_loop = $this->ensure_restore_files_present($entities_to_download, $backupable_entities, $services);
|
449 |
|
450 |
if (!is_array($second_loop)) return $second_loop;
|
451 |
|
651 |
* This function is copied from class WP_Upgrader (WP 3.8 - no significant changes since 3.2 at least); we only had to fork it because it hard-codes using the basename of the zip file as its unpack directory; which can be long; and then combining that with long pathnames in the zip being unpacked can overflow a 256-character path limit (yes, they apparently still exist - amazing!)
|
652 |
* Subsequently, we have also added the ability to unpack tarballs
|
653 |
*
|
654 |
+
* In the 'ordinary' case of unzipping a UD zip backup, this method basically does some preparation, and then calls UpdraftPlus_Filesystem_Functions::unzip_file() for the actual unzipping
|
655 |
+
*
|
656 |
+
* @used-by self::unpack_package()
|
657 |
+
*
|
658 |
+
* @param String $package specify package - full filepath
|
659 |
* @param Boolean $delete_package check to delete package
|
660 |
* @param String|Boolean $type type of archive e.g. db.
|
661 |
*
|
662 |
+
* @return String|WP_Error If successful, then this indicates the working directory that the archive was unpacked in; a WP_Filesystem path
|
663 |
*/
|
664 |
private function unpack_package_archive($package, $delete_package = true, $type = false) {
|
665 |
|
666 |
global $wp_filesystem, $updraftplus;
|
667 |
|
668 |
+
// If it is a non-UD archive that is already unpacked, then don't re-run, but return the existing result
|
669 |
if (!empty($this->ud_foreign) && !empty($this->ud_foreign_working_dir) && $package == $this->ud_foreign_package) {
|
670 |
if (is_dir($this->ud_foreign_working_dir)) {
|
671 |
return $this->ud_foreign_working_dir;
|
674 |
}
|
675 |
}
|
676 |
|
677 |
+
$this->skin->feedback($this->strings['unpack_package'].' ('.basename($package).', '.round(filesize($package)/1048576, 1).' MB)');
|
|
|
|
|
678 |
|
679 |
+
$upgrade_folder = $wp_filesystem->wp_content_dir().'upgrade/';
|
680 |
|
681 |
+
$zip_starting_index = 0;
|
682 |
+
|
683 |
+
// We need a working directory. This has a change from the WP core version - minimise path length
|
684 |
+
// N.B. It is deterministic; the same package file will get the same working directory
|
685 |
+
// $working_dir = $upgrade_folder . basename($package, '.zip');
|
686 |
+
$working_dir = $upgrade_folder.substr(md5($package), 0, 8);
|
687 |
+
|
688 |
+
if ('.zip' == strtolower(substr($package, -4, 4))) {
|
689 |
+
|
690 |
+
$last_index_key = UpdraftPlus_Filesystem_Functions::get_jobdata_progress_key($package);
|
691 |
+
|
692 |
+
// Turn off the feature with define('UPDRAFTPLUS_UNZIP_RESUME_ENABLED', false);
|
693 |
+
if ((!defined('UPDRAFTPLUS_UNZIP_RESUME_ENABLED') || UPDRAFTPLUS_UNZIP_RESUME_ENABLED) && !empty($this->continuation_data[$last_index_key]) && !empty($this->continuation_data[$last_index_key]['info']['name'])) {
|
694 |
+
|
695 |
+
$reached = $this->continuation_data[$last_index_key];
|
696 |
+
|
697 |
+
$last_exists = $wp_filesystem->exists($working_dir.'/'.$reached['info']['name']);
|
698 |
+
$last_size = $last_exists ? $wp_filesystem->size($working_dir.'/'.$reached['info']['name']) : 'n/a';
|
699 |
+
|
700 |
+
if ($last_exists && $last_size == $reached['info']['size'] && isset($reached['index'])) $zip_starting_index = $reached['index'];
|
701 |
+
|
702 |
+
$updraftplus->log("Unpack resumption may be possible: zip_starting_index=$zip_starting_index, last_exists=$last_exists, last_size=$last_size, last_status=".serialize($this->continuation_data[$last_index_key]));
|
703 |
+
}
|
704 |
+
|
705 |
}
|
706 |
|
707 |
+
if (0 == $zip_starting_index) {
|
708 |
+
// Clean up contents of upgrade directory beforehand.
|
709 |
+
$upgrade_files = $wp_filesystem->dirlist($upgrade_folder);
|
710 |
+
if (!empty($upgrade_files)) {
|
711 |
+
foreach ($upgrade_files as $file) {
|
712 |
+
if (!$wp_filesystem->delete($upgrade_folder . $file['name'], true)) {
|
713 |
+
$this->restore_log_permission_failure_message($upgrade_folder, 'Delete '.$upgrade_folder.$file['name']);
|
714 |
+
}
|
715 |
+
}
|
716 |
+
}
|
717 |
|
718 |
+
// Clean up working directory - this is redundant, as we already cleared out the parent folder
|
719 |
+
if ($wp_filesystem->is_dir($working_dir)) {
|
720 |
+
if (!$wp_filesystem->delete($working_dir, true)) {
|
721 |
+
$this->restore_log_permission_failure_message(dirname($working_dir), 'Delete '.$working_dir);
|
722 |
+
}
|
723 |
}
|
724 |
}
|
725 |
|
726 |
// Unzip package to working directory
|
727 |
if ('.zip' == strtolower(substr($package, -4, 4))) {
|
728 |
+
|
729 |
+
$result = UpdraftPlus_Filesystem_Functions::unzip_file($package, $working_dir, $zip_starting_index);
|
730 |
+
|
731 |
} elseif ('.tar' == strtolower(substr($package, -4, 4)) || '.tar.gz' == strtolower(substr($package, -7, 7)) || '.tar.bz2' == strtolower(substr($package, -8, 8))) {
|
732 |
if (!class_exists('UpdraftPlus_Archive_Tar')) {
|
733 |
if (false === strpos(get_include_path(), UPDRAFTPLUS_DIR.'/includes/PEAR')) set_include_path(UPDRAFTPLUS_DIR.'/includes/PEAR'.PATH_SEPARATOR.get_include_path());
|
741 |
$p_compress = 'bz2';
|
742 |
}
|
743 |
|
744 |
+
// It's not pretty, but it works.
|
745 |
if (is_a($wp_filesystem, 'WP_Filesystem_Direct')) {
|
746 |
$extract_dir = $working_dir;
|
747 |
} else {
|
755 |
$updraftplus->log("Using a temporary folder to extract before moving over WPFS: $extract_dir");
|
756 |
}
|
757 |
}
|
758 |
+
|
759 |
// Slightly hackish - rather than re-write Archive_Tar to use wp_filesystem, we instead unpack into the location that we already require to be directly writable for other reasons, and then move from there.
|
760 |
|
761 |
if (empty($result)) {
|
859 |
*/
|
860 |
public function unpack_package($package, $delete_package = true, $type = false) {
|
861 |
|
862 |
+
if (preg_match('/-db(\.gz(\.crypt)?)?$/i', $package) || preg_match('/\.sql(\.gz|\.bz2)?$/i', $package)) {
|
863 |
+
return $this->unpack_package_database($package, $delete_package);
|
864 |
+
} else {
|
865 |
+
global $updraftplus;
|
866 |
+
// If not database, then it is a zip - unpack in the usual way
|
867 |
+
return $this->unpack_package_archive($updraftplus->backups_dir_location().'/'.$package, $delete_package, $type);
|
868 |
+
}
|
869 |
+
|
870 |
+
}
|
871 |
+
|
872 |
+
/**
|
873 |
+
* Unpack a database backup file
|
874 |
+
*
|
875 |
+
* @used-by self::unpack_package()
|
876 |
+
*
|
877 |
+
* @param String $package - file to unpack; relative filepath
|
878 |
+
* @param Boolean $delete_package - check to delete package
|
879 |
+
*
|
880 |
+
* @return String|WP_Error If successful, then this indicates the working directory that the archive was unpacked in (a WP_Filesystem path)
|
881 |
+
*/
|
882 |
+
private function unpack_package_database($package, $delete_package = true) {
|
883 |
+
|
884 |
global $wp_filesystem, $updraftplus;
|
885 |
+
|
886 |
$updraft_dir = $updraftplus->backups_dir_location();
|
887 |
+
|
888 |
+
// The general shape of the following comes from class-wp-upgrader.php
|
|
|
|
|
|
|
889 |
|
890 |
$backup_dir = $wp_filesystem->find_folder($updraft_dir);
|
891 |
|
901 |
// Clean up contents of upgrade directory beforehand.
|
902 |
$upgrade_files = $wp_filesystem->dirlist($upgrade_folder);
|
903 |
if (!empty($upgrade_files)) {
|
904 |
+
foreach ($upgrade_files as $file) {
|
905 |
if (!$wp_filesystem->delete($upgrade_folder.$file['name'], true)) {
|
906 |
$this->restore_log_permission_failure_message($upgrade_folder, 'Delete '.$upgrade_folder.$file['name']);
|
907 |
}
|
908 |
+
}
|
909 |
}
|
910 |
|
911 |
// We need a working directory
|
912 |
$working_dir = $upgrade_folder . basename($package, '.crypt');
|
|
|
913 |
|
914 |
// Clean up working directory
|
915 |
if ($wp_filesystem->is_dir($working_dir)) {
|
972 |
}
|
973 |
}
|
974 |
|
975 |
+
$updraftplus->log('Database successfully unpacked');
|
976 |
|
977 |
return $working_dir;
|
978 |
}
|
1210 |
/**
|
1211 |
* Pre-flight check: chance to complain and abort before anything at all is done
|
1212 |
*
|
1213 |
+
* @param Array $backup_files - An array of backup files
|
1214 |
+
* @param String $type - Type of file
|
1215 |
+
* @param Array $info - Information about the backup
|
1216 |
+
*
|
1217 |
+
* @return Boolean|WP_Error
|
1218 |
*/
|
1219 |
+
private function pre_restore_backup($backup_files, $type, $info) {
|
1220 |
|
1221 |
if (is_string($backup_files)) $backup_files = array($backup_files);
|
1222 |
|
1223 |
if ('more' == $type) {
|
1224 |
$this->skin->feedback($this->strings['not_possible']);
|
1225 |
+
return new WP_Error('not_possible', $this->strings['not_possible']);
|
1226 |
}
|
1227 |
|
1228 |
// Ensure access to the indicated directory - and to WP_CONTENT_DIR (in which we use upgrade/)
|
1262 |
$ret_val = true;
|
1263 |
$updraft_dir = $updraftplus->backups_dir_location();
|
1264 |
|
1265 |
+
if (!is_array($this->continuation_data) && (('plugins' == $type || 'uploads' == $type || 'themes' == $type) && (!is_multisite() || 0 !== $this->ud_backup_is_multisite || ('uploads' != $type || empty($updraftplus_addons_migrator->new_blogid))))) {
|
1266 |
if (file_exists($updraft_dir.'/'.basename($wp_filesystem_dir)."-old")) {
|
1267 |
$ret_val = new WP_Error('already_exists', sprintf(__('Existing unremoved folders from a previous restore exist (please use the "Delete Old Directories" button to delete them before trying again): %s', 'updraftplus'), $wp_filesystem_dir.'-old'));
|
1268 |
}
|
@@ -5,7 +5,7 @@ Plugin Name: UpdraftPlus - Backup/Restore
|
|
5 |
Plugin URI: https://updraftplus.com
|
6 |
Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.
|
7 |
Author: UpdraftPlus.Com, DavidAnderson
|
8 |
-
Version: 1.16.
|
9 |
Donate link: https://david.dw-perspective.org.uk/donate
|
10 |
License: GPLv3 or later
|
11 |
Text Domain: updraftplus
|
5 |
Plugin URI: https://updraftplus.com
|
6 |
Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.
|
7 |
Author: UpdraftPlus.Com, DavidAnderson
|
8 |
+
Version: 1.16.5
|
9 |
Donate link: https://david.dw-perspective.org.uk/donate
|
10 |
License: GPLv3 or later
|
11 |
Text Domain: updraftplus
|
@@ -379,17 +379,17 @@
|
|
379 |
},
|
380 |
{
|
381 |
"name": "phpseclib/phpseclib",
|
382 |
-
"version": "1.0.
|
383 |
-
"version_normalized": "1.0.
|
384 |
"source": {
|
385 |
"type": "git",
|
386 |
"url": "https://github.com/phpseclib/phpseclib.git",
|
387 |
-
"reference": "
|
388 |
},
|
389 |
"dist": {
|
390 |
"type": "zip",
|
391 |
-
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/
|
392 |
-
"reference": "
|
393 |
"shasum": ""
|
394 |
},
|
395 |
"require": {
|
@@ -406,7 +406,7 @@
|
|
406 |
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
|
407 |
"pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 5.0.0."
|
408 |
},
|
409 |
-
"time": "
|
410 |
"type": "library",
|
411 |
"installation-source": "source",
|
412 |
"autoload": {
|
379 |
},
|
380 |
{
|
381 |
"name": "phpseclib/phpseclib",
|
382 |
+
"version": "1.0.14",
|
383 |
+
"version_normalized": "1.0.14.0",
|
384 |
"source": {
|
385 |
"type": "git",
|
386 |
"url": "https://github.com/phpseclib/phpseclib.git",
|
387 |
+
"reference": "7432a6959afe98b9e93153d0034b0f62ad890d31"
|
388 |
},
|
389 |
"dist": {
|
390 |
"type": "zip",
|
391 |
+
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7432a6959afe98b9e93153d0034b0f62ad890d31",
|
392 |
+
"reference": "7432a6959afe98b9e93153d0034b0f62ad890d31",
|
393 |
"shasum": ""
|
394 |
},
|
395 |
"require": {
|
406 |
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
|
407 |
"pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 5.0.0."
|
408 |
},
|
409 |
+
"time": "2019-01-27T19:35:10+00:00",
|
410 |
"type": "library",
|
411 |
"installation-source": "source",
|
412 |
"autoload": {
|
@@ -1,5 +1,27 @@
|
|
1 |
# Changelog
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
## 1.0.11 - 2018-04-15
|
4 |
|
5 |
- X509: auto download intermediate certs
|
1 |
# Changelog
|
2 |
|
3 |
+
## 1.0.14 - 2019-01-27
|
4 |
+
|
5 |
+
- SSH2: ssh-rsa is sometimes incorrectly used instead of rsa-sha2-256 (#1331)
|
6 |
+
- SSH2: more strictly adhere to RFC8332 for rsa-sha2-256/512 (#1332)
|
7 |
+
|
8 |
+
## 1.0.13 - 2018-12-16
|
9 |
+
|
10 |
+
- SSH2: fix order of user_error() / bitmap reset (#1314)
|
11 |
+
- SSH2: setTimeout(0) didn't work as intended (#1116)
|
12 |
+
- Agent: add support for rsa-sha2-256 / rsa-sha2-512 (#1319)
|
13 |
+
- Agent: add parameter to constructor (#1319)
|
14 |
+
|
15 |
+
## 1.0.12 - 2018-11-04
|
16 |
+
|
17 |
+
- SSH2: fixes relating to delayed global requests (#1271)
|
18 |
+
- SSH2: setEngine -> setPreferredEngine (#1294)
|
19 |
+
- SSH2: reset $this->bitmap when the connection fails (#1298)
|
20 |
+
- SSH2: add ping() method (#1298)
|
21 |
+
- SSH2: add support for rsa-sha2-256 / rsa-sha2-512 (RFC8332)
|
22 |
+
- SFTP: make rawlist give same result regardless of stat cache (#1287)
|
23 |
+
- Hash: save hashed keys for re-use
|
24 |
+
|
25 |
## 1.0.11 - 2018-04-15
|
26 |
|
27 |
- X509: auto download intermediate certs
|
@@ -24,6 +24,7 @@ AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509
|
|
24 |
|
25 |
### 2.0
|
26 |
|
|
|
27 |
* Modernized version of 1.0
|
28 |
* Minimum PHP version: 5.3.3
|
29 |
* PSR-4 autoloading with namespace rooted at `\phpseclib`
|
@@ -36,7 +37,7 @@ AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509
|
|
36 |
* Composer compatible (PSR-0 autoloading)
|
37 |
* Install using Composer: `composer require phpseclib/phpseclib ~1.0`
|
38 |
* Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm)
|
39 |
-
* [Download 1.0.
|
40 |
|
41 |
## Support
|
42 |
|
24 |
|
25 |
### 2.0
|
26 |
|
27 |
+
* Long term support (LTS) release
|
28 |
* Modernized version of 1.0
|
29 |
* Minimum PHP version: 5.3.3
|
30 |
* PSR-4 autoloading with namespace rooted at `\phpseclib`
|
37 |
* Composer compatible (PSR-0 autoloading)
|
38 |
* Install using Composer: `composer require phpseclib/phpseclib ~1.0`
|
39 |
* Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm)
|
40 |
+
* [Download 1.0.14 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.14.zip/download)
|
41 |
|
42 |
## Support
|
43 |
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
build: false
|
2 |
+
shallow_clone: false
|
3 |
+
platform:
|
4 |
+
- x86
|
5 |
+
- x64
|
6 |
+
clone_folder: C:\projects\phpseclib
|
7 |
+
|
8 |
+
install:
|
9 |
+
- cinst -y OpenSSL.Light
|
10 |
+
- SET PATH=C:\Program Files\OpenSSL;%PATH%
|
11 |
+
- sc config wuauserv start= auto
|
12 |
+
- net start wuauserv
|
13 |
+
- cinst -y php --version 5.6.30
|
14 |
+
- cd c:\tools\php56
|
15 |
+
- copy php.ini-production php.ini
|
16 |
+
- echo date.timezone="UTC" >> php.ini
|
17 |
+
- echo extension_dir=ext >> php.ini
|
18 |
+
- echo extension=php_openssl.dll >> php.ini
|
19 |
+
- echo extension=php_gmp.dll >> php.ini
|
20 |
+
- cd C:\projects\phpseclib
|
21 |
+
- SET PATH=C:\tools\php56;%PATH%
|
22 |
+
- php.exe -r "readfile('http://getcomposer.org/installer');" | php.exe
|
23 |
+
- php.exe composer.phar install --prefer-source --no-interaction
|
24 |
+
|
25 |
+
test_script:
|
26 |
+
- cd C:\projects\phpseclib
|
27 |
+
- vendor\bin\phpunit.bat tests/Windows32Test.php
|
@@ -661,7 +661,7 @@ class Crypt_Base
|
|
661 |
$count = isset($func_args[4]) ? $func_args[4] : 1000;
|
662 |
|
663 |
// Keylength
|
664 |
-
if (isset($func_args[5])) {
|
665 |
$dkLen = $func_args[5];
|
666 |
} else {
|
667 |
$dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
|
@@ -696,10 +696,10 @@ class Crypt_Base
|
|
696 |
include_once 'Crypt/Hash.php';
|
697 |
}
|
698 |
$i = 1;
|
|
|
|
|
|
|
699 |
while (strlen($key) < $dkLen) {
|
700 |
-
$hmac = new Crypt_Hash();
|
701 |
-
$hmac->setHash($hash);
|
702 |
-
$hmac->setKey($password);
|
703 |
$f = $u = $hmac->hash($salt . pack('N', $i++));
|
704 |
for ($j = 2; $j <= $count; ++$j) {
|
705 |
$u = $hmac->hash($u);
|
661 |
$count = isset($func_args[4]) ? $func_args[4] : 1000;
|
662 |
|
663 |
// Keylength
|
664 |
+
if (isset($func_args[5]) && $func_args[5] > 0) {
|
665 |
$dkLen = $func_args[5];
|
666 |
} else {
|
667 |
$dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
|
696 |
include_once 'Crypt/Hash.php';
|
697 |
}
|
698 |
$i = 1;
|
699 |
+
$hmac = new Crypt_Hash();
|
700 |
+
$hmac->setHash($hash);
|
701 |
+
$hmac->setKey($password);
|
702 |
while (strlen($key) < $dkLen) {
|
|
|
|
|
|
|
703 |
$f = $u = $hmac->hash($salt . pack('N', $i++));
|
704 |
for ($j = 2; $j <= $count; ++$j) {
|
705 |
$u = $hmac->hash($u);
|
@@ -126,6 +126,15 @@ class Crypt_Hash
|
|
126 |
*/
|
127 |
var $key = false;
|
128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
/**
|
130 |
* Outer XOR (Internal HMAC)
|
131 |
*
|
@@ -192,6 +201,43 @@ class Crypt_Hash
|
|
192 |
function setKey($key = false)
|
193 |
{
|
194 |
$this->key = $key;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
}
|
196 |
|
197 |
/**
|
@@ -241,6 +287,25 @@ class Crypt_Hash
|
|
241 |
$this->l = 64;
|
242 |
}
|
243 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
switch ($hash) {
|
245 |
case 'md2':
|
246 |
$mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_HASH && in_array('md2', hash_algos()) ?
|
@@ -267,6 +332,7 @@ class Crypt_Hash
|
|
267 |
default:
|
268 |
$this->hash = MHASH_SHA1;
|
269 |
}
|
|
|
270 |
return;
|
271 |
case CRYPT_HASH_MODE_HASH:
|
272 |
switch ($hash) {
|
@@ -283,35 +349,33 @@ class Crypt_Hash
|
|
283 |
default:
|
284 |
$this->hash = 'sha1';
|
285 |
}
|
|
|
286 |
return;
|
287 |
}
|
288 |
|
289 |
switch ($hash) {
|
290 |
case 'md2':
|
291 |
-
$this->b = 16;
|
292 |
$this->hash = array($this, '_md2');
|
293 |
break;
|
294 |
case 'md5':
|
295 |
-
$this->b = 64;
|
296 |
$this->hash = array($this, '_md5');
|
297 |
break;
|
298 |
case 'sha256':
|
299 |
-
$this->b = 64;
|
300 |
$this->hash = array($this, '_sha256');
|
301 |
break;
|
302 |
case 'sha384':
|
303 |
case 'sha512':
|
304 |
-
$this->b = 128;
|
305 |
$this->hash = array($this, '_sha512');
|
306 |
break;
|
307 |
case 'sha1':
|
308 |
default:
|
309 |
-
$this->b = 64;
|
310 |
$this->hash = array($this, '_sha1');
|
311 |
}
|
312 |
|
313 |
$this->ipad = str_repeat(chr(0x36), $this->b);
|
314 |
$this->opad = str_repeat(chr(0x5C), $this->b);
|
|
|
|
|
315 |
}
|
316 |
|
317 |
/**
|
@@ -328,25 +392,19 @@ class Crypt_Hash
|
|
328 |
if (!empty($this->key) || is_string($this->key)) {
|
329 |
switch ($mode) {
|
330 |
case CRYPT_HASH_MODE_MHASH:
|
331 |
-
$output = mhash($this->hash, $text, $this->
|
332 |
break;
|
333 |
case CRYPT_HASH_MODE_HASH:
|
334 |
-
$output = hash_hmac($this->hash, $text, $this->
|
335 |
break;
|
336 |
case CRYPT_HASH_MODE_INTERNAL:
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
$
|
342 |
-
|
343 |
-
$
|
344 |
-
$temp = $this->ipad ^ $key; // step 2
|
345 |
-
$temp .= $text; // step 3
|
346 |
-
$temp = call_user_func($this->hash, $temp); // step 4
|
347 |
-
$output = $this->opad ^ $key; // step 5
|
348 |
-
$output.= $temp; // step 6
|
349 |
-
$output = call_user_func($this->hash, $output); // step 7
|
350 |
}
|
351 |
} else {
|
352 |
switch ($mode) {
|
126 |
*/
|
127 |
var $key = false;
|
128 |
|
129 |
+
/**
|
130 |
+
* Computed Key
|
131 |
+
*
|
132 |
+
* @see self::_computeKey()
|
133 |
+
* @var string
|
134 |
+
* @access private
|
135 |
+
*/
|
136 |
+
var $computedKey = false;
|
137 |
+
|
138 |
/**
|
139 |
* Outer XOR (Internal HMAC)
|
140 |
*
|
201 |
function setKey($key = false)
|
202 |
{
|
203 |
$this->key = $key;
|
204 |
+
$this->_computeKey();
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Pre-compute the key used by the HMAC
|
209 |
+
*
|
210 |
+
* Quoting http://tools.ietf.org/html/rfc2104#section-2, "Applications that use keys longer than B bytes
|
211 |
+
* will first hash the key using H and then use the resultant L byte string as the actual key to HMAC."
|
212 |
+
*
|
213 |
+
* As documented in https://www.reddit.com/r/PHP/comments/9nct2l/symfonypolyfill_hash_pbkdf2_correct_fix_for/
|
214 |
+
* when doing an HMAC multiple times it's faster to compute the hash once instead of computing it during
|
215 |
+
* every call
|
216 |
+
*
|
217 |
+
* @access private
|
218 |
+
*/
|
219 |
+
function _computeKey()
|
220 |
+
{
|
221 |
+
if ($this->key === false) {
|
222 |
+
$this->computedKey = false;
|
223 |
+
return;
|
224 |
+
}
|
225 |
+
|
226 |
+
if (strlen($this->key) <= $this->b) {
|
227 |
+
$this->computedKey = $this->key;
|
228 |
+
return;
|
229 |
+
}
|
230 |
+
|
231 |
+
switch ($mode) {
|
232 |
+
case CRYPT_HASH_MODE_MHASH:
|
233 |
+
$this->computedKey = mhash($this->hash, $this->key);
|
234 |
+
break;
|
235 |
+
case CRYPT_HASH_MODE_HASH:
|
236 |
+
$this->computedKey = hash($this->hash, $this->key, true);
|
237 |
+
break;
|
238 |
+
case CRYPT_HASH_MODE_INTERNAL:
|
239 |
+
$this->computedKey = call_user_func($this->hash, $this->key);
|
240 |
+
}
|
241 |
}
|
242 |
|
243 |
/**
|
287 |
$this->l = 64;
|
288 |
}
|
289 |
|
290 |
+
switch ($hash) {
|
291 |
+
case 'md2-96':
|
292 |
+
case 'md2':
|
293 |
+
$this->b = 16;
|
294 |
+
case 'md5-96':
|
295 |
+
case 'sha1-96':
|
296 |
+
case 'sha224-96':
|
297 |
+
case 'sha256-96':
|
298 |
+
case 'md2':
|
299 |
+
case 'md5':
|
300 |
+
case 'sha1':
|
301 |
+
case 'sha224':
|
302 |
+
case 'sha256':
|
303 |
+
$this->b = 64;
|
304 |
+
break;
|
305 |
+
default:
|
306 |
+
$this->b = 128;
|
307 |
+
}
|
308 |
+
|
309 |
switch ($hash) {
|
310 |
case 'md2':
|
311 |
$mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_HASH && in_array('md2', hash_algos()) ?
|
332 |
default:
|
333 |
$this->hash = MHASH_SHA1;
|
334 |
}
|
335 |
+
$this->_computeKey();
|
336 |
return;
|
337 |
case CRYPT_HASH_MODE_HASH:
|
338 |
switch ($hash) {
|
349 |
default:
|
350 |
$this->hash = 'sha1';
|
351 |
}
|
352 |
+
$this->_computeKey();
|
353 |
return;
|
354 |
}
|
355 |
|
356 |
switch ($hash) {
|
357 |
case 'md2':
|
|
|
358 |
$this->hash = array($this, '_md2');
|
359 |
break;
|
360 |
case 'md5':
|
|
|
361 |
$this->hash = array($this, '_md5');
|
362 |
break;
|
363 |
case 'sha256':
|
|
|
364 |
$this->hash = array($this, '_sha256');
|
365 |
break;
|
366 |
case 'sha384':
|
367 |
case 'sha512':
|
|
|
368 |
$this->hash = array($this, '_sha512');
|
369 |
break;
|
370 |
case 'sha1':
|
371 |
default:
|
|
|
372 |
$this->hash = array($this, '_sha1');
|
373 |
}
|
374 |
|
375 |
$this->ipad = str_repeat(chr(0x36), $this->b);
|
376 |
$this->opad = str_repeat(chr(0x5C), $this->b);
|
377 |
+
|
378 |
+
$this->_computeKey();
|
379 |
}
|
380 |
|
381 |
/**
|
392 |
if (!empty($this->key) || is_string($this->key)) {
|
393 |
switch ($mode) {
|
394 |
case CRYPT_HASH_MODE_MHASH:
|
395 |
+
$output = mhash($this->hash, $text, $this->computedKey);
|
396 |
break;
|
397 |
case CRYPT_HASH_MODE_HASH:
|
398 |
+
$output = hash_hmac($this->hash, $text, $this->computedKey, true);
|
399 |
break;
|
400 |
case CRYPT_HASH_MODE_INTERNAL:
|
401 |
+
$key = str_pad($this->computedKey, $this->b, chr(0)); // step 1
|
402 |
+
$temp = $this->ipad ^ $key; // step 2
|
403 |
+
$temp .= $text; // step 3
|
404 |
+
$temp = call_user_func($this->hash, $temp); // step 4
|
405 |
+
$output = $this->opad ^ $key; // step 5
|
406 |
+
$output.= $temp; // step 6
|
407 |
+
$output = call_user_func($this->hash, $output); // step 7
|
|
|
|
|
|
|
|
|
|
|
|
|
408 |
}
|
409 |
} else {
|
410 |
switch ($mode) {
|
@@ -390,6 +390,9 @@ class File_ASN1
|
|
390 |
$remainingLength = $length;
|
391 |
while ($remainingLength > 0) {
|
392 |
$temp = $this->_decode_ber($content, $start, $content_pos);
|
|
|
|
|
|
|
393 |
$length = $temp['length'];
|
394 |
// end-of-content octets - see paragraph 8.1.5
|
395 |
if (substr($content, $content_pos + $length, 2) == "\0\0") {
|
@@ -441,6 +444,9 @@ class File_ASN1
|
|
441 |
$current['content'] = substr($content, $content_pos);
|
442 |
} else {
|
443 |
$temp = $this->_decode_ber($content, $start, $content_pos);
|
|
|
|
|
|
|
444 |
$length-= (strlen($content) - $content_pos);
|
445 |
$last = count($temp) - 1;
|
446 |
for ($i = 0; $i < $last; $i++) {
|
@@ -465,6 +471,9 @@ class File_ASN1
|
|
465 |
$length = 0;
|
466 |
while (substr($content, $content_pos, 2) != "\0\0") {
|
467 |
$temp = $this->_decode_ber($content, $length + $start, $content_pos);
|
|
|
|
|
|
|
468 |
$content_pos += $temp['length'];
|
469 |
// all subtags should be octet strings
|
470 |
//if ($temp['type'] != FILE_ASN1_TYPE_OCTET_STRING) {
|
@@ -497,6 +506,9 @@ class File_ASN1
|
|
497 |
break 2;
|
498 |
}
|
499 |
$temp = $this->_decode_ber($content, $start + $offset, $content_pos);
|
|
|
|
|
|
|
500 |
$content_pos += $temp['length'];
|
501 |
$current['content'][] = $temp;
|
502 |
$offset+= $temp['length'];
|
390 |
$remainingLength = $length;
|
391 |
while ($remainingLength > 0) {
|
392 |
$temp = $this->_decode_ber($content, $start, $content_pos);
|
393 |
+
if ($temp === false) {
|
394 |
+
break;
|
395 |
+
}
|
396 |
$length = $temp['length'];
|
397 |
// end-of-content octets - see paragraph 8.1.5
|
398 |
if (substr($content, $content_pos + $length, 2) == "\0\0") {
|
444 |
$current['content'] = substr($content, $content_pos);
|
445 |
} else {
|
446 |
$temp = $this->_decode_ber($content, $start, $content_pos);
|
447 |
+
if ($temp === false) {
|
448 |
+
return false;
|
449 |
+
}
|
450 |
$length-= (strlen($content) - $content_pos);
|
451 |
$last = count($temp) - 1;
|
452 |
for ($i = 0; $i < $last; $i++) {
|
471 |
$length = 0;
|
472 |
while (substr($content, $content_pos, 2) != "\0\0") {
|
473 |
$temp = $this->_decode_ber($content, $length + $start, $content_pos);
|
474 |
+
if ($temp === false) {
|
475 |
+
return false;
|
476 |
+
}
|
477 |
$content_pos += $temp['length'];
|
478 |
// all subtags should be octet strings
|
479 |
//if ($temp['type'] != FILE_ASN1_TYPE_OCTET_STRING) {
|
506 |
break 2;
|
507 |
}
|
508 |
$temp = $this->_decode_ber($content, $start + $offset, $content_pos);
|
509 |
+
if ($temp === false) {
|
510 |
+
return false;
|
511 |
+
}
|
512 |
$content_pos += $temp['length'];
|
513 |
$current['content'][] = $temp;
|
514 |
$offset+= $temp['length'];
|
@@ -2122,7 +2122,7 @@ class File_X509
|
|
2122 |
*
|
2123 |
* If $date isn't defined it is assumed to be the current date.
|
2124 |
*
|
2125 |
-
* @param int $date optional
|
2126 |
* @access public
|
2127 |
*/
|
2128 |
function validateDate($date = null)
|
@@ -2133,7 +2133,7 @@ class File_X509
|
|
2133 |
|
2134 |
if (!isset($date)) {
|
2135 |
$date = class_exists('DateTime') ?
|
2136 |
-
new DateTime(
|
2137 |
time();
|
2138 |
}
|
2139 |
|
@@ -2143,12 +2143,18 @@ class File_X509
|
|
2143 |
$notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
|
2144 |
$notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];
|
2145 |
|
2146 |
-
|
2147 |
-
|
2148 |
-
|
2149 |
-
|
2150 |
-
|
2151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2152 |
}
|
2153 |
|
2154 |
switch (true) {
|
2122 |
*
|
2123 |
* If $date isn't defined it is assumed to be the current date.
|
2124 |
*
|
2125 |
+
* @param \DateTime|int|string $date optional
|
2126 |
* @access public
|
2127 |
*/
|
2128 |
function validateDate($date = null)
|
2133 |
|
2134 |
if (!isset($date)) {
|
2135 |
$date = class_exists('DateTime') ?
|
2136 |
+
new DateTime(null, new DateTimeZone(@date_default_timezone_get())) :
|
2137 |
time();
|
2138 |
}
|
2139 |
|
2143 |
$notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
|
2144 |
$notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];
|
2145 |
|
2146 |
+
switch (true) {
|
2147 |
+
case is_string($date) && class_exists('DateTime'):
|
2148 |
+
$date = new DateTime($date, new DateTimeZone(@date_default_timezone_get()));
|
2149 |
+
case is_object($date) && strtolower(get_class($date)) == 'datetime':
|
2150 |
+
$notBefore = new DateTime($notBefore, new DateTimeZone(@date_default_timezone_get()));
|
2151 |
+
$notAfter = new DateTime($notAfter, new DateTimeZone(@date_default_timezone_get()));
|
2152 |
+
break;
|
2153 |
+
case is_string($date):
|
2154 |
+
$date = @strtotime($date);
|
2155 |
+
default:
|
2156 |
+
$notBefore = @strtotime($notBefore);
|
2157 |
+
$notAfter = @strtotime($notAfter);
|
2158 |
}
|
2159 |
|
2160 |
switch (true) {
|
@@ -65,7 +65,6 @@
|
|
65 |
* @author Jim Wigginton <terrafrost@php.net>
|
66 |
* @copyright 2006 Jim Wigginton
|
67 |
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
68 |
-
* @link http://pear.php.net/package/Math_BigInteger
|
69 |
*/
|
70 |
|
71 |
/**#@+
|
65 |
* @author Jim Wigginton <terrafrost@php.net>
|
66 |
* @copyright 2006 Jim Wigginton
|
67 |
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
|
|
68 |
*/
|
69 |
|
70 |
/**#@+
|
@@ -919,7 +919,17 @@ class Net_SFTP extends Net_SSH2
|
|
919 |
unset($files[$key]);
|
920 |
continue;
|
921 |
}
|
922 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
923 |
$depth++;
|
924 |
$files[$key] = $this->rawlist($dir . '/' . $key, true);
|
925 |
$depth--;
|
919 |
unset($files[$key]);
|
920 |
continue;
|
921 |
}
|
922 |
+
$is_directory = false;
|
923 |
+
if ($key != '.' && $key != '..') {
|
924 |
+
if ($this->use_stat_cache) {
|
925 |
+
$is_directory = is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $key)));
|
926 |
+
} else {
|
927 |
+
$stat = $this->lstat($dir . '/' . $key);
|
928 |
+
$is_directory = $stat && $stat['type'] === NET_SFTP_TYPE_DIRECTORY;
|
929 |
+
}
|
930 |
+
}
|
931 |
+
|
932 |
+
if ($is_directory) {
|
933 |
$depth++;
|
934 |
$files[$key] = $this->rawlist($dir . '/' . $key, true);
|
935 |
$depth--;
|
@@ -96,10 +96,11 @@ define('NET_SSH2_MASK_WINDOW_ADJUST', 0x00000020);
|
|
96 |
* @see self::_get_channel_packet()
|
97 |
* @access private
|
98 |
*/
|
99 |
-
define('NET_SSH2_CHANNEL_EXEC',
|
100 |
-
define('NET_SSH2_CHANNEL_SHELL',
|
101 |
-
define('NET_SSH2_CHANNEL_SUBSYSTEM',
|
102 |
define('NET_SSH2_CHANNEL_AGENT_FORWARD', 4);
|
|
|
103 |
/**#@-*/
|
104 |
|
105 |
/**#@+
|
@@ -923,6 +924,22 @@ class Net_SSH2
|
|
923 |
*/
|
924 |
var $binary_packet_buffer = false;
|
925 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
926 |
/**
|
927 |
* Default Constructor.
|
928 |
*
|
@@ -1159,11 +1176,12 @@ class Net_SSH2
|
|
1159 |
}
|
1160 |
$elapsed = strtok(microtime(), ' ') + strtok('') - $start;
|
1161 |
|
1162 |
-
$this->curTimeout
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
|
|
1167 |
}
|
1168 |
}
|
1169 |
|
@@ -1212,6 +1230,7 @@ class Net_SSH2
|
|
1212 |
}
|
1213 |
|
1214 |
if (feof($this->fsock)) {
|
|
|
1215 |
user_error('Connection closed by server');
|
1216 |
return false;
|
1217 |
}
|
@@ -1223,7 +1242,7 @@ class Net_SSH2
|
|
1223 |
|
1224 |
$this->server_identifier = trim($temp, "\r\n");
|
1225 |
if (strlen($extra)) {
|
1226 |
-
$this->errors[] =
|
1227 |
}
|
1228 |
|
1229 |
if (version_compare($matches[1], '1.99', '<')) {
|
@@ -1238,6 +1257,7 @@ class Net_SSH2
|
|
1238 |
if (!$this->send_kex_first) {
|
1239 |
$response = $this->_get_binary_packet();
|
1240 |
if ($response === false) {
|
|
|
1241 |
user_error('Connection closed by server');
|
1242 |
return false;
|
1243 |
}
|
@@ -1309,6 +1329,8 @@ class Net_SSH2
|
|
1309 |
);
|
1310 |
|
1311 |
static $server_host_key_algorithms = array(
|
|
|
|
|
1312 |
'ssh-rsa', // RECOMMENDED sign Raw RSA Key
|
1313 |
'ssh-dss' // REQUIRED sign Raw DSS Key
|
1314 |
);
|
@@ -1468,6 +1490,7 @@ class Net_SSH2
|
|
1468 |
|
1469 |
$kexinit_payload_server = $this->_get_binary_packet();
|
1470 |
if ($kexinit_payload_server === false) {
|
|
|
1471 |
user_error('Connection closed by server');
|
1472 |
return false;
|
1473 |
}
|
@@ -1595,6 +1618,7 @@ class Net_SSH2
|
|
1595 |
|
1596 |
$response = $this->_get_binary_packet();
|
1597 |
if ($response === false) {
|
|
|
1598 |
user_error('Connection closed by server');
|
1599 |
return false;
|
1600 |
}
|
@@ -1690,12 +1714,14 @@ class Net_SSH2
|
|
1690 |
$data = pack('CNa*', $clientKexInitMessage, strlen($eBytes), $eBytes);
|
1691 |
|
1692 |
if (!$this->_send_binary_packet($data)) {
|
|
|
1693 |
user_error('Connection closed by server');
|
1694 |
return false;
|
1695 |
}
|
1696 |
|
1697 |
$response = $this->_get_binary_packet();
|
1698 |
if ($response === false) {
|
|
|
1699 |
user_error('Connection closed by server');
|
1700 |
return false;
|
1701 |
}
|
@@ -1776,9 +1802,25 @@ class Net_SSH2
|
|
1776 |
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
|
1777 |
}
|
1778 |
|
1779 |
-
|
1780 |
-
|
1781 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1782 |
}
|
1783 |
|
1784 |
$packet = pack(
|
@@ -1793,6 +1835,7 @@ class Net_SSH2
|
|
1793 |
$response = $this->_get_binary_packet();
|
1794 |
|
1795 |
if ($response === false) {
|
|
|
1796 |
user_error('Connection closed by server');
|
1797 |
return false;
|
1798 |
}
|
@@ -1967,7 +2010,7 @@ class Net_SSH2
|
|
1967 |
|
1968 |
if ($this->encrypt) {
|
1969 |
if ($this->crypto_engine) {
|
1970 |
-
$this->encrypt->
|
1971 |
}
|
1972 |
$this->encrypt->enableContinuousBuffer();
|
1973 |
$this->encrypt->disablePadding();
|
@@ -1987,7 +2030,7 @@ class Net_SSH2
|
|
1987 |
|
1988 |
if ($this->decrypt) {
|
1989 |
if ($this->crypto_engine) {
|
1990 |
-
$this->decrypt->
|
1991 |
}
|
1992 |
$this->decrypt->enableContinuousBuffer();
|
1993 |
$this->decrypt->disablePadding();
|
@@ -2191,6 +2234,7 @@ class Net_SSH2
|
|
2191 |
function login($username)
|
2192 |
{
|
2193 |
$args = func_get_args();
|
|
|
2194 |
return call_user_func_array(array(&$this, '_login'), $args);
|
2195 |
}
|
2196 |
|
@@ -2262,6 +2306,7 @@ class Net_SSH2
|
|
2262 |
}
|
2263 |
return $this->_login_helper($username, $password);
|
2264 |
}
|
|
|
2265 |
user_error('Connection closed by server');
|
2266 |
return false;
|
2267 |
}
|
@@ -2318,6 +2363,7 @@ class Net_SSH2
|
|
2318 |
|
2319 |
$response = $this->_get_binary_packet();
|
2320 |
if ($response === false) {
|
|
|
2321 |
user_error('Connection closed by server');
|
2322 |
return false;
|
2323 |
}
|
@@ -2376,6 +2422,7 @@ class Net_SSH2
|
|
2376 |
|
2377 |
$response = $this->_get_binary_packet();
|
2378 |
if ($response === false) {
|
|
|
2379 |
user_error('Connection closed by server');
|
2380 |
return false;
|
2381 |
}
|
@@ -2394,7 +2441,7 @@ class Net_SSH2
|
|
2394 |
return false;
|
2395 |
}
|
2396 |
extract(unpack('Nlength', $this->_string_shift($response, 4)));
|
2397 |
-
$this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' .
|
2398 |
return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
|
2399 |
case NET_SSH2_MSG_USERAUTH_FAILURE:
|
2400 |
// can we use keyboard-interactive authentication? if not then either the login is bad or the server employees
|
@@ -2476,6 +2523,7 @@ class Net_SSH2
|
|
2476 |
} else {
|
2477 |
$orig = $response = $this->_get_binary_packet();
|
2478 |
if ($response === false) {
|
|
|
2479 |
user_error('Connection closed by server');
|
2480 |
return false;
|
2481 |
}
|
@@ -2645,6 +2693,21 @@ class Net_SSH2
|
|
2645 |
$publickey['n']
|
2646 |
);
|
2647 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2648 |
$part1 = pack(
|
2649 |
'CNa*Na*Na*',
|
2650 |
NET_SSH2_MSG_USERAUTH_REQUEST,
|
@@ -2655,7 +2718,7 @@ class Net_SSH2
|
|
2655 |
strlen('publickey'),
|
2656 |
'publickey'
|
2657 |
);
|
2658 |
-
$part2 = pack('Na*Na*', strlen(
|
2659 |
|
2660 |
$packet = $part1 . chr(0) . $part2;
|
2661 |
if (!$this->_send_binary_packet($packet)) {
|
@@ -2664,6 +2727,7 @@ class Net_SSH2
|
|
2664 |
|
2665 |
$response = $this->_get_binary_packet();
|
2666 |
if ($response === false) {
|
|
|
2667 |
user_error('Connection closed by server');
|
2668 |
return false;
|
2669 |
}
|
@@ -2695,8 +2759,9 @@ class Net_SSH2
|
|
2695 |
|
2696 |
$packet = $part1 . chr(1) . $part2;
|
2697 |
$privatekey->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
|
|
2698 |
$signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
|
2699 |
-
$signature = pack('Na*Na*', strlen(
|
2700 |
$packet.= pack('Na*', strlen($signature), $signature);
|
2701 |
|
2702 |
if (!$this->_send_binary_packet($packet)) {
|
@@ -2705,6 +2770,7 @@ class Net_SSH2
|
|
2705 |
|
2706 |
$response = $this->_get_binary_packet();
|
2707 |
if ($response === false) {
|
|
|
2708 |
user_error('Connection closed by server');
|
2709 |
return false;
|
2710 |
}
|
@@ -2831,6 +2897,7 @@ class Net_SSH2
|
|
2831 |
|
2832 |
$response = $this->_get_binary_packet();
|
2833 |
if ($response === false) {
|
|
|
2834 |
user_error('Connection closed by server');
|
2835 |
return false;
|
2836 |
}
|
@@ -2971,6 +3038,7 @@ class Net_SSH2
|
|
2971 |
|
2972 |
$response = $this->_get_binary_packet();
|
2973 |
if ($response === false) {
|
|
|
2974 |
user_error('Connection closed by server');
|
2975 |
return false;
|
2976 |
}
|
@@ -3285,6 +3353,66 @@ class Net_SSH2
|
|
3285 |
return (bool) ($this->bitmap & NET_SSH2_MASK_LOGIN);
|
3286 |
}
|
3287 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3288 |
/**
|
3289 |
* Resets a connection for re-use
|
3290 |
*
|
@@ -3315,8 +3443,8 @@ class Net_SSH2
|
|
3315 |
function _get_binary_packet($skip_channel_filter = false)
|
3316 |
{
|
3317 |
if (!is_resource($this->fsock) || feof($this->fsock)) {
|
3318 |
-
user_error('Connection closed prematurely');
|
3319 |
$this->bitmap = 0;
|
|
|
3320 |
return false;
|
3321 |
}
|
3322 |
|
@@ -3359,8 +3487,8 @@ class Net_SSH2
|
|
3359 |
while ($remaining_length > 0) {
|
3360 |
$temp = fread($this->fsock, $remaining_length);
|
3361 |
if ($temp === false || feof($this->fsock)) {
|
3362 |
-
user_error('Error reading from socket');
|
3363 |
$this->bitmap = 0;
|
|
|
3364 |
return false;
|
3365 |
}
|
3366 |
$buffer.= $temp;
|
@@ -3378,8 +3506,8 @@ class Net_SSH2
|
|
3378 |
if ($this->hmac_check !== false) {
|
3379 |
$hmac = fread($this->fsock, $this->hmac_size);
|
3380 |
if ($hmac === false || strlen($hmac) != $this->hmac_size) {
|
3381 |
-
user_error('Error reading socket');
|
3382 |
$this->bitmap = 0;
|
|
|
3383 |
return false;
|
3384 |
} elseif ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
|
3385 |
user_error('Invalid HMAC');
|
@@ -3423,7 +3551,7 @@ class Net_SSH2
|
|
3423 |
return false;
|
3424 |
}
|
3425 |
extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
|
3426 |
-
$this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" .
|
3427 |
$this->bitmap = 0;
|
3428 |
return false;
|
3429 |
case NET_SSH2_MSG_IGNORE:
|
@@ -3435,7 +3563,7 @@ class Net_SSH2
|
|
3435 |
return false;
|
3436 |
}
|
3437 |
extract(unpack('Nlength', $this->_string_shift($payload, 4)));
|
3438 |
-
$this->errors[] = 'SSH_MSG_DEBUG: ' .
|
3439 |
$payload = $this->_get_binary_packet($skip_channel_filter);
|
3440 |
break;
|
3441 |
case NET_SSH2_MSG_UNIMPLEMENTED:
|
@@ -3458,7 +3586,7 @@ class Net_SSH2
|
|
3458 |
return false;
|
3459 |
}
|
3460 |
extract(unpack('Nlength', $this->_string_shift($payload, 4)));
|
3461 |
-
$this->banner_message =
|
3462 |
$payload = $this->_get_binary_packet();
|
3463 |
}
|
3464 |
|
@@ -3664,7 +3792,12 @@ class Net_SSH2
|
|
3664 |
$response = $this->binary_packet_buffer;
|
3665 |
$this->binary_packet_buffer = false;
|
3666 |
} else {
|
3667 |
-
|
|
|
|
|
|
|
|
|
|
|
3668 |
if ($this->curTimeout < 0) {
|
3669 |
$this->is_timeout = true;
|
3670 |
return true;
|
@@ -3687,6 +3820,7 @@ class Net_SSH2
|
|
3687 |
|
3688 |
$response = $this->_get_binary_packet(true);
|
3689 |
if ($response === false) {
|
|
|
3690 |
user_error('Connection closed by server');
|
3691 |
return false;
|
3692 |
}
|
@@ -3695,10 +3829,6 @@ class Net_SSH2
|
|
3695 |
if ($client_channel == -1 && $response === true) {
|
3696 |
return true;
|
3697 |
}
|
3698 |
-
if (!strlen($response)) {
|
3699 |
-
return '';
|
3700 |
-
}
|
3701 |
-
|
3702 |
if (!strlen($response)) {
|
3703 |
return false;
|
3704 |
}
|
@@ -3921,8 +4051,8 @@ class Net_SSH2
|
|
3921 |
function _send_binary_packet($data, $logged = null)
|
3922 |
{
|
3923 |
if (!is_resource($this->fsock) || feof($this->fsock)) {
|
3924 |
-
user_error('Connection closed prematurely');
|
3925 |
$this->bitmap = 0;
|
|
|
3926 |
return false;
|
3927 |
}
|
3928 |
|
@@ -4583,6 +4713,8 @@ class Net_SSH2
|
|
4583 |
|
4584 |
break;
|
4585 |
case 'ssh-rsa':
|
|
|
|
|
4586 |
if (strlen($server_public_host_key) < 4) {
|
4587 |
return false;
|
4588 |
}
|
@@ -4609,6 +4741,18 @@ class Net_SSH2
|
|
4609 |
}
|
4610 |
|
4611 |
$rsa = new Crypt_RSA();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4612 |
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
4613 |
$rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW);
|
4614 |
if (!$rsa->verify($this->exchange_hash, $signature)) {
|
@@ -4637,7 +4781,30 @@ class Net_SSH2
|
|
4637 |
$s = $s->modPow($e, $n);
|
4638 |
$s = $s->toBytes();
|
4639 |
|
4640 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4641 |
$h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 2 - strlen($h)) . $h;
|
4642 |
|
4643 |
if ($s != $h) {
|
96 |
* @see self::_get_channel_packet()
|
97 |
* @access private
|
98 |
*/
|
99 |
+
define('NET_SSH2_CHANNEL_EXEC', 1); // PuTTy uses 0x100
|
100 |
+
define('NET_SSH2_CHANNEL_SHELL', 2);
|
101 |
+
define('NET_SSH2_CHANNEL_SUBSYSTEM', 3);
|
102 |
define('NET_SSH2_CHANNEL_AGENT_FORWARD', 4);
|
103 |
+
define('NET_SSH2_CHANNEL_KEEP_ALIVE', 5);
|
104 |
/**#@-*/
|
105 |
|
106 |
/**#@+
|
924 |
*/
|
925 |
var $binary_packet_buffer = false;
|
926 |
|
927 |
+
/**
|
928 |
+
* Preferred Signature Format
|
929 |
+
*
|
930 |
+
* @var string|false
|
931 |
+
* @access private
|
932 |
+
*/
|
933 |
+
var $preferred_signature_format = false;
|
934 |
+
|
935 |
+
/**
|
936 |
+
* Authentication Credentials
|
937 |
+
*
|
938 |
+
* @var array
|
939 |
+
* @access private
|
940 |
+
*/
|
941 |
+
var $auth = array();
|
942 |
+
|
943 |
/**
|
944 |
* Default Constructor.
|
945 |
*
|
1176 |
}
|
1177 |
$elapsed = strtok(microtime(), ' ') + strtok('') - $start;
|
1178 |
|
1179 |
+
if ($this->curTimeout) {
|
1180 |
+
$this->curTimeout-= $elapsed;
|
1181 |
+
if ($this->curTimeout < 0) {
|
1182 |
+
$this->is_timeout = true;
|
1183 |
+
return false;
|
1184 |
+
}
|
1185 |
}
|
1186 |
}
|
1187 |
|
1230 |
}
|
1231 |
|
1232 |
if (feof($this->fsock)) {
|
1233 |
+
$this->bitmap = 0;
|
1234 |
user_error('Connection closed by server');
|
1235 |
return false;
|
1236 |
}
|
1242 |
|
1243 |
$this->server_identifier = trim($temp, "\r\n");
|
1244 |
if (strlen($extra)) {
|
1245 |
+
$this->errors[] = $extra;
|
1246 |
}
|
1247 |
|
1248 |
if (version_compare($matches[1], '1.99', '<')) {
|
1257 |
if (!$this->send_kex_first) {
|
1258 |
$response = $this->_get_binary_packet();
|
1259 |
if ($response === false) {
|
1260 |
+
$this->bitmap = 0;
|
1261 |
user_error('Connection closed by server');
|
1262 |
return false;
|
1263 |
}
|
1329 |
);
|
1330 |
|
1331 |
static $server_host_key_algorithms = array(
|
1332 |
+
'rsa-sha2-256', // RFC 8332
|
1333 |
+
'rsa-sha2-512', // RFC 8332
|
1334 |
'ssh-rsa', // RECOMMENDED sign Raw RSA Key
|
1335 |
'ssh-dss' // REQUIRED sign Raw DSS Key
|
1336 |
);
|
1490 |
|
1491 |
$kexinit_payload_server = $this->_get_binary_packet();
|
1492 |
if ($kexinit_payload_server === false) {
|
1493 |
+
$this->bitmap = 0;
|
1494 |
user_error('Connection closed by server');
|
1495 |
return false;
|
1496 |
}
|
1618 |
|
1619 |
$response = $this->_get_binary_packet();
|
1620 |
if ($response === false) {
|
1621 |
+
$this->bitmap = 0;
|
1622 |
user_error('Connection closed by server');
|
1623 |
return false;
|
1624 |
}
|
1714 |
$data = pack('CNa*', $clientKexInitMessage, strlen($eBytes), $eBytes);
|
1715 |
|
1716 |
if (!$this->_send_binary_packet($data)) {
|
1717 |
+
$this->bitmap = 0;
|
1718 |
user_error('Connection closed by server');
|
1719 |
return false;
|
1720 |
}
|
1721 |
|
1722 |
$response = $this->_get_binary_packet();
|
1723 |
if ($response === false) {
|
1724 |
+
$this->bitmap = 0;
|
1725 |
user_error('Connection closed by server');
|
1726 |
return false;
|
1727 |
}
|
1802 |
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
|
1803 |
}
|
1804 |
|
1805 |
+
switch ($server_host_key_algorithm) {
|
1806 |
+
case 'ssh-dss':
|
1807 |
+
$expected_key_format = 'ssh-dss';
|
1808 |
+
break;
|
1809 |
+
//case 'rsa-sha2-256':
|
1810 |
+
//case 'rsa-sha2-512':
|
1811 |
+
//case 'ssh-rsa':
|
1812 |
+
default:
|
1813 |
+
$expected_key_format = 'ssh-rsa';
|
1814 |
+
}
|
1815 |
+
|
1816 |
+
if ($public_key_format != $expected_key_format || $this->signature_format != $server_host_key_algorithm) {
|
1817 |
+
switch (true) {
|
1818 |
+
case $this->signature_format == $server_host_key_algorithm:
|
1819 |
+
case $server_host_key_algorithm != 'rsa-sha2-256' && $server_host_key_algorithm != 'rsa-sha2-512':
|
1820 |
+
case $this->signature_format != 'ssh-rsa':
|
1821 |
+
user_error('Server Host Key Algorithm Mismatch');
|
1822 |
+
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
|
1823 |
+
}
|
1824 |
}
|
1825 |
|
1826 |
$packet = pack(
|
1835 |
$response = $this->_get_binary_packet();
|
1836 |
|
1837 |
if ($response === false) {
|
1838 |
+
$this->bitmap = 0;
|
1839 |
user_error('Connection closed by server');
|
1840 |
return false;
|
1841 |
}
|
2010 |
|
2011 |
if ($this->encrypt) {
|
2012 |
if ($this->crypto_engine) {
|
2013 |
+
$this->encrypt->setPreferredEngine($this->crypto_engine);
|
2014 |
}
|
2015 |
$this->encrypt->enableContinuousBuffer();
|
2016 |
$this->encrypt->disablePadding();
|
2030 |
|
2031 |
if ($this->decrypt) {
|
2032 |
if ($this->crypto_engine) {
|
2033 |
+
$this->decrypt->setPreferredEngine($this->crypto_engine);
|
2034 |
}
|
2035 |
$this->decrypt->enableContinuousBuffer();
|
2036 |
$this->decrypt->disablePadding();
|
2234 |
function login($username)
|
2235 |
{
|
2236 |
$args = func_get_args();
|
2237 |
+
$this->auth[] = $args;
|
2238 |
return call_user_func_array(array(&$this, '_login'), $args);
|
2239 |
}
|
2240 |
|
2306 |
}
|
2307 |
return $this->_login_helper($username, $password);
|
2308 |
}
|
2309 |
+
$this->bitmap = 0;
|
2310 |
user_error('Connection closed by server');
|
2311 |
return false;
|
2312 |
}
|
2363 |
|
2364 |
$response = $this->_get_binary_packet();
|
2365 |
if ($response === false) {
|
2366 |
+
$this->bitmap = 0;
|
2367 |
user_error('Connection closed by server');
|
2368 |
return false;
|
2369 |
}
|
2422 |
|
2423 |
$response = $this->_get_binary_packet();
|
2424 |
if ($response === false) {
|
2425 |
+
$this->bitmap = 0;
|
2426 |
user_error('Connection closed by server');
|
2427 |
return false;
|
2428 |
}
|
2441 |
return false;
|
2442 |
}
|
2443 |
extract(unpack('Nlength', $this->_string_shift($response, 4)));
|
2444 |
+
$this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . $this->_string_shift($response, $length);
|
2445 |
return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
|
2446 |
case NET_SSH2_MSG_USERAUTH_FAILURE:
|
2447 |
// can we use keyboard-interactive authentication? if not then either the login is bad or the server employees
|
2523 |
} else {
|
2524 |
$orig = $response = $this->_get_binary_packet();
|
2525 |
if ($response === false) {
|
2526 |
+
$this->bitmap = 0;
|
2527 |
user_error('Connection closed by server');
|
2528 |
return false;
|
2529 |
}
|
2693 |
$publickey['n']
|
2694 |
);
|
2695 |
|
2696 |
+
switch ($this->signature_format) {
|
2697 |
+
case 'rsa-sha2-512':
|
2698 |
+
$hash = 'sha512';
|
2699 |
+
$signatureType = 'rsa-sha2-512';
|
2700 |
+
break;
|
2701 |
+
case 'rsa-sha2-256':
|
2702 |
+
$hash = 'sha256';
|
2703 |
+
$signatureType = 'rsa-sha2-256';
|
2704 |
+
break;
|
2705 |
+
//case 'ssh-rsa':
|
2706 |
+
default:
|
2707 |
+
$hash = 'sha1';
|
2708 |
+
$signatureType = 'ssh-rsa';
|
2709 |
+
}
|
2710 |
+
|
2711 |
$part1 = pack(
|
2712 |
'CNa*Na*Na*',
|
2713 |
NET_SSH2_MSG_USERAUTH_REQUEST,
|
2718 |
strlen('publickey'),
|
2719 |
'publickey'
|
2720 |
);
|
2721 |
+
$part2 = pack('Na*Na*', strlen($signatureType), $signatureType, strlen($publickey), $publickey);
|
2722 |
|
2723 |
$packet = $part1 . chr(0) . $part2;
|
2724 |
if (!$this->_send_binary_packet($packet)) {
|
2727 |
|
2728 |
$response = $this->_get_binary_packet();
|
2729 |
if ($response === false) {
|
2730 |
+
$this->bitmap = 0;
|
2731 |
user_error('Connection closed by server');
|
2732 |
return false;
|
2733 |
}
|
2759 |
|
2760 |
$packet = $part1 . chr(1) . $part2;
|
2761 |
$privatekey->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
2762 |
+
$privatekey->setHash($hash);
|
2763 |
$signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
|
2764 |
+
$signature = pack('Na*Na*', strlen($signatureType), $signatureType, strlen($signature), $signature);
|
2765 |
$packet.= pack('Na*', strlen($signature), $signature);
|
2766 |
|
2767 |
if (!$this->_send_binary_packet($packet)) {
|
2770 |
|
2771 |
$response = $this->_get_binary_packet();
|
2772 |
if ($response === false) {
|
2773 |
+
$this->bitmap = 0;
|
2774 |
user_error('Connection closed by server');
|
2775 |
return false;
|
2776 |
}
|
2897 |
|
2898 |
$response = $this->_get_binary_packet();
|
2899 |
if ($response === false) {
|
2900 |
+
$this->bitmap = 0;
|
2901 |
user_error('Connection closed by server');
|
2902 |
return false;
|
2903 |
}
|
3038 |
|
3039 |
$response = $this->_get_binary_packet();
|
3040 |
if ($response === false) {
|
3041 |
+
$this->bitmap = 0;
|
3042 |
user_error('Connection closed by server');
|
3043 |
return false;
|
3044 |
}
|
3353 |
return (bool) ($this->bitmap & NET_SSH2_MASK_LOGIN);
|
3354 |
}
|
3355 |
|
3356 |
+
/**
|
3357 |
+
* Pings a server connection, or tries to reconnect if the connection has gone down
|
3358 |
+
*
|
3359 |
+
* Inspired by http://php.net/manual/en/mysqli.ping.php
|
3360 |
+
*
|
3361 |
+
* @return bool
|
3362 |
+
* @access public
|
3363 |
+
*/
|
3364 |
+
function ping()
|
3365 |
+
{
|
3366 |
+
if (!$this->isAuthenticated()) {
|
3367 |
+
return false;
|
3368 |
+
}
|
3369 |
+
|
3370 |
+
$this->window_size_server_to_client[NET_SSH2_CHANNEL_KEEP_ALIVE] = $this->window_size;
|
3371 |
+
$packet_size = 0x4000;
|
3372 |
+
$packet = pack(
|
3373 |
+
'CNa*N3',
|
3374 |
+
NET_SSH2_MSG_CHANNEL_OPEN,
|
3375 |
+
strlen('session'),
|
3376 |
+
'session',
|
3377 |
+
NET_SSH2_CHANNEL_KEEP_ALIVE,
|
3378 |
+
$this->window_size_server_to_client[NET_SSH2_CHANNEL_KEEP_ALIVE],
|
3379 |
+
$packet_size
|
3380 |
+
);
|
3381 |
+
|
3382 |
+
if (!@$this->_send_binary_packet($packet)) {
|
3383 |
+
return $this->_reconnect();
|
3384 |
+
}
|
3385 |
+
|
3386 |
+
$this->channel_status[NET_SSH2_CHANNEL_KEEP_ALIVE] = NET_SSH2_MSG_CHANNEL_OPEN;
|
3387 |
+
|
3388 |
+
$response = @$this->_get_channel_packet(NET_SSH2_CHANNEL_KEEP_ALIVE);
|
3389 |
+
if ($response !== false) {
|
3390 |
+
$this->_close_channel(NET_SSH2_CHANNEL_KEEP_ALIVE);
|
3391 |
+
return true;
|
3392 |
+
}
|
3393 |
+
|
3394 |
+
return $this->_reconnect();
|
3395 |
+
}
|
3396 |
+
|
3397 |
+
/**
|
3398 |
+
* In situ reconnect method
|
3399 |
+
*
|
3400 |
+
* @return boolean
|
3401 |
+
* @access private
|
3402 |
+
*/
|
3403 |
+
function _reconnect()
|
3404 |
+
{
|
3405 |
+
$this->_reset_connection(NET_SSH2_DISCONNECT_CONNECTION_LOST);
|
3406 |
+
$this->retry_connect = true;
|
3407 |
+
if (!$this->_connect()) {
|
3408 |
+
return false;
|
3409 |
+
}
|
3410 |
+
foreach ($this->auth as $auth) {
|
3411 |
+
$result = call_user_func_array(array(&$this, 'parent::login'), $auth);
|
3412 |
+
}
|
3413 |
+
return $result;
|
3414 |
+
}
|
3415 |
+
|
3416 |
/**
|
3417 |
* Resets a connection for re-use
|
3418 |
*
|
3443 |
function _get_binary_packet($skip_channel_filter = false)
|
3444 |
{
|
3445 |
if (!is_resource($this->fsock) || feof($this->fsock)) {
|
|
|
3446 |
$this->bitmap = 0;
|
3447 |
+
user_error('Connection closed prematurely');
|
3448 |
return false;
|
3449 |
}
|
3450 |
|
3487 |
while ($remaining_length > 0) {
|
3488 |
$temp = fread($this->fsock, $remaining_length);
|
3489 |
if ($temp === false || feof($this->fsock)) {
|
|
|
3490 |
$this->bitmap = 0;
|
3491 |
+
user_error('Error reading from socket');
|
3492 |
return false;
|
3493 |
}
|
3494 |
$buffer.= $temp;
|
3506 |
if ($this->hmac_check !== false) {
|
3507 |
$hmac = fread($this->fsock, $this->hmac_size);
|
3508 |
if ($hmac === false || strlen($hmac) != $this->hmac_size) {
|
|
|
3509 |
$this->bitmap = 0;
|
3510 |
+
user_error('Error reading socket');
|
3511 |
return false;
|
3512 |
} elseif ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
|
3513 |
user_error('Invalid HMAC');
|
3551 |
return false;
|
3552 |
}
|
3553 |
extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
|
3554 |
+
$this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . $this->_string_shift($payload, $length);
|
3555 |
$this->bitmap = 0;
|
3556 |
return false;
|
3557 |
case NET_SSH2_MSG_IGNORE:
|
3563 |
return false;
|
3564 |
}
|
3565 |
extract(unpack('Nlength', $this->_string_shift($payload, 4)));
|
3566 |
+
$this->errors[] = 'SSH_MSG_DEBUG: ' . $this->_string_shift($payload, $length);
|
3567 |
$payload = $this->_get_binary_packet($skip_channel_filter);
|
3568 |
break;
|
3569 |
case NET_SSH2_MSG_UNIMPLEMENTED:
|
3586 |
return false;
|
3587 |
}
|
3588 |
extract(unpack('Nlength', $this->_string_shift($payload, 4)));
|
3589 |
+
$this->banner_message = $this->_string_shift($payload, $length);
|
3590 |
$payload = $this->_get_binary_packet();
|
3591 |
}
|
3592 |
|
3792 |
$response = $this->binary_packet_buffer;
|
3793 |
$this->binary_packet_buffer = false;
|
3794 |
} else {
|
3795 |
+
$read = array($this->fsock);
|
3796 |
+
$write = $except = null;
|
3797 |
+
|
3798 |
+
if (!$this->curTimeout) {
|
3799 |
+
@stream_select($read, $write, $except, null);
|
3800 |
+
} else {
|
3801 |
if ($this->curTimeout < 0) {
|
3802 |
$this->is_timeout = true;
|
3803 |
return true;
|
3820 |
|
3821 |
$response = $this->_get_binary_packet(true);
|
3822 |
if ($response === false) {
|
3823 |
+
$this->bitmap = 0;
|
3824 |
user_error('Connection closed by server');
|
3825 |
return false;
|
3826 |
}
|
3829 |
if ($client_channel == -1 && $response === true) {
|
3830 |
return true;
|
3831 |
}
|
|
|
|
|
|
|
|
|
3832 |
if (!strlen($response)) {
|
3833 |
return false;
|
3834 |
}
|
4051 |
function _send_binary_packet($data, $logged = null)
|
4052 |
{
|
4053 |
if (!is_resource($this->fsock) || feof($this->fsock)) {
|
|
|
4054 |
$this->bitmap = 0;
|
4055 |
+
user_error('Connection closed prematurely');
|
4056 |
return false;
|
4057 |
}
|
4058 |
|
4713 |
|
4714 |
break;
|
4715 |
case 'ssh-rsa':
|
4716 |
+
case 'rsa-sha2-256':
|
4717 |
+
case 'rsa-sha2-512':
|
4718 |
if (strlen($server_public_host_key) < 4) {
|
4719 |
return false;
|
4720 |
}
|
4741 |
}
|
4742 |
|
4743 |
$rsa = new Crypt_RSA();
|
4744 |
+
switch ($this->signature_format) {
|
4745 |
+
case 'rsa-sha2-512':
|
4746 |
+
$hash = 'sha512';
|
4747 |
+
break;
|
4748 |
+
case 'rsa-sha2-256':
|
4749 |
+
$hash = 'sha256';
|
4750 |
+
break;
|
4751 |
+
//case 'ssh-rsa':
|
4752 |
+
default:
|
4753 |
+
$hash = 'sha1';
|
4754 |
+
}
|
4755 |
+
$rsa->setHash($hash);
|
4756 |
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
4757 |
$rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW);
|
4758 |
if (!$rsa->verify($this->exchange_hash, $signature)) {
|
4781 |
$s = $s->modPow($e, $n);
|
4782 |
$s = $s->toBytes();
|
4783 |
|
4784 |
+
switch ($this->signature_format) {
|
4785 |
+
case 'rsa-sha2-512':
|
4786 |
+
$hash = 'sha512';
|
4787 |
+
break;
|
4788 |
+
case 'rsa-sha2-256':
|
4789 |
+
$hash = 'sha256';
|
4790 |
+
break;
|
4791 |
+
//case 'ssh-rsa':
|
4792 |
+
default:
|
4793 |
+
$hash = 'sha1';
|
4794 |
+
}
|
4795 |
+
$hashObj = new Crypt_Hash($hash);
|
4796 |
+
switch ($this->signature_format) {
|
4797 |
+
case 'rsa-sha2-512':
|
4798 |
+
$h = pack('N5a*', 0x00305130, 0x0D060960, 0x86480165, 0x03040203, 0x05000440, $hashObj->hash($this->exchange_hash));
|
4799 |
+
break;
|
4800 |
+
case 'rsa-sha2-256':
|
4801 |
+
$h = pack('N5a*', 0x00303130, 0x0D060960, 0x86480165, 0x03040201, 0x05000420, $hashObj->hash($this->exchange_hash));
|
4802 |
+
break;
|
4803 |
+
//case 'ssh-rsa':
|
4804 |
+
default:
|
4805 |
+
$hash = 'sha1';
|
4806 |
+
$h = pack('N4a*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, $hashObj->hash($this->exchange_hash));
|
4807 |
+
}
|
4808 |
$h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 2 - strlen($h)) . $h;
|
4809 |
|
4810 |
if ($s != $h) {
|
@@ -64,7 +64,7 @@ define('SYSTEM_SSH_AGENT_FAILURE', 5);
|
|
64 |
define('SYSTEM_SSH_AGENTC_SIGN_REQUEST', 13);
|
65 |
// the SSH1 response is SSH_AGENT_RSA_RESPONSE (4)
|
66 |
define('SYSTEM_SSH_AGENT_SIGN_RESPONSE', 14);
|
67 |
-
|
68 |
|
69 |
/**@+
|
70 |
* Agent forwarding status
|
@@ -77,7 +77,17 @@ define('SYSTEM_SSH_AGENT_FORWARD_NONE', 0);
|
|
77 |
define('SYSTEM_SSH_AGENT_FORWARD_REQUEST', 1);
|
78 |
// forwarding has been request and is active
|
79 |
define('SYSTEM_SSH_AGENT_FORWARD_ACTIVE', 2);
|
|
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
/**#@-*/
|
82 |
|
83 |
/**
|
@@ -123,6 +133,16 @@ class System_SSH_Agent_Identity
|
|
123 |
*/
|
124 |
var $fsock;
|
125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
/**
|
127 |
* Default Constructor.
|
128 |
*
|
@@ -202,6 +222,31 @@ class System_SSH_Agent_Identity
|
|
202 |
{
|
203 |
}
|
204 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
205 |
/**
|
206 |
* Create a signature
|
207 |
*
|
@@ -214,7 +259,7 @@ class System_SSH_Agent_Identity
|
|
214 |
function sign($message)
|
215 |
{
|
216 |
// the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
|
217 |
-
$packet = pack('CNa*Na*N', SYSTEM_SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message,
|
218 |
$packet = pack('Na*', strlen($packet), $packet);
|
219 |
if (strlen($packet) != fputs($this->fsock, $packet)) {
|
220 |
user_error('Connection closed during signing');
|
@@ -227,9 +272,35 @@ class System_SSH_Agent_Identity
|
|
227 |
}
|
228 |
|
229 |
$signature_blob = fread($this->fsock, $length - 1);
|
230 |
-
|
231 |
-
|
232 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
}
|
234 |
}
|
235 |
|
@@ -240,7 +311,7 @@ class System_SSH_Agent_Identity
|
|
240 |
*
|
241 |
* @package System_SSH_Agent
|
242 |
* @author Jim Wigginton <terrafrost@php.net>
|
243 |
-
* @access
|
244 |
*/
|
245 |
class System_SSH_Agent
|
246 |
{
|
@@ -281,18 +352,20 @@ class System_SSH_Agent
|
|
281 |
* @return System_SSH_Agent
|
282 |
* @access public
|
283 |
*/
|
284 |
-
function __construct()
|
285 |
{
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
|
|
|
|
296 |
}
|
297 |
|
298 |
$this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
|
@@ -307,9 +380,9 @@ class System_SSH_Agent
|
|
307 |
* @see self::__construct()
|
308 |
* @access public
|
309 |
*/
|
310 |
-
function System_SSH_Agent()
|
311 |
{
|
312 |
-
$this->__construct();
|
313 |
}
|
314 |
|
315 |
/**
|
@@ -330,12 +403,14 @@ class System_SSH_Agent
|
|
330 |
$packet = pack('NC', 1, SYSTEM_SSH_AGENTC_REQUEST_IDENTITIES);
|
331 |
if (strlen($packet) != fputs($this->fsock, $packet)) {
|
332 |
user_error('Connection closed while requesting identities');
|
|
|
333 |
}
|
334 |
|
335 |
$length = current(unpack('N', fread($this->fsock, 4)));
|
336 |
$type = ord(fread($this->fsock, 1));
|
337 |
if ($type != SYSTEM_SSH_AGENT_IDENTITIES_ANSWER) {
|
338 |
user_error('Unable to request identities');
|
|
|
339 |
}
|
340 |
|
341 |
$identities = array();
|
64 |
define('SYSTEM_SSH_AGENTC_SIGN_REQUEST', 13);
|
65 |
// the SSH1 response is SSH_AGENT_RSA_RESPONSE (4)
|
66 |
define('SYSTEM_SSH_AGENT_SIGN_RESPONSE', 14);
|
67 |
+
/**#@-*/
|
68 |
|
69 |
/**@+
|
70 |
* Agent forwarding status
|
77 |
define('SYSTEM_SSH_AGENT_FORWARD_REQUEST', 1);
|
78 |
// forwarding has been request and is active
|
79 |
define('SYSTEM_SSH_AGENT_FORWARD_ACTIVE', 2);
|
80 |
+
/**#@-*/
|
81 |
|
82 |
+
/**@+
|
83 |
+
* Signature Flags
|
84 |
+
*
|
85 |
+
* See https://tools.ietf.org/html/draft-miller-ssh-agent-00#section-5.3
|
86 |
+
*
|
87 |
+
* @access private
|
88 |
+
*/
|
89 |
+
define('SYSTEM_SSH_AGENT_RSA2_256', 2);
|
90 |
+
define('SYSTEM_SSH_AGENT_RSA2_512', 4);
|
91 |
/**#@-*/
|
92 |
|
93 |
/**
|
133 |
*/
|
134 |
var $fsock;
|
135 |
|
136 |
+
/**
|
137 |
+
* Signature flags
|
138 |
+
*
|
139 |
+
* @var int
|
140 |
+
* @access private
|
141 |
+
* @see self::sign()
|
142 |
+
* @see self::setHash()
|
143 |
+
*/
|
144 |
+
var $flags = 0;
|
145 |
+
|
146 |
/**
|
147 |
* Default Constructor.
|
148 |
*
|
222 |
{
|
223 |
}
|
224 |
|
225 |
+
/**
|
226 |
+
* Set Hash
|
227 |
+
*
|
228 |
+
* ssh-agent doesn't support using hashes for RSA other than SHA1
|
229 |
+
*
|
230 |
+
* @param string $hash
|
231 |
+
* @access public
|
232 |
+
*/
|
233 |
+
function setHash($hash)
|
234 |
+
{
|
235 |
+
$this->flags = 0;
|
236 |
+
switch ($hash) {
|
237 |
+
case 'sha1':
|
238 |
+
break;
|
239 |
+
case 'sha256':
|
240 |
+
$this->flags = SYSTEM_SSH_AGENT_RSA2_256;
|
241 |
+
break;
|
242 |
+
case 'sha512':
|
243 |
+
$this->flags = SYSTEM_SSH_AGENT_RSA2_512;
|
244 |
+
break;
|
245 |
+
default:
|
246 |
+
user_error('The only supported hashes for RSA are sha1, sha256 and sha512');
|
247 |
+
}
|
248 |
+
}
|
249 |
+
|
250 |
/**
|
251 |
* Create a signature
|
252 |
*
|
259 |
function sign($message)
|
260 |
{
|
261 |
// the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
|
262 |
+
$packet = pack('CNa*Na*N', SYSTEM_SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, $this->flags);
|
263 |
$packet = pack('Na*', strlen($packet), $packet);
|
264 |
if (strlen($packet) != fputs($this->fsock, $packet)) {
|
265 |
user_error('Connection closed during signing');
|
272 |
}
|
273 |
|
274 |
$signature_blob = fread($this->fsock, $length - 1);
|
275 |
+
$length = current(unpack('N', $this->_string_shift($signature_blob, 4)));
|
276 |
+
if ($length != strlen($signature_blob)) {
|
277 |
+
user_error('Malformed signature blob');
|
278 |
+
}
|
279 |
+
$length = current(unpack('N', $this->_string_shift($signature_blob, 4)));
|
280 |
+
if ($length > strlen($signature_blob) + 4) {
|
281 |
+
user_error('Malformed signature blob');
|
282 |
+
}
|
283 |
+
$type = $this->_string_shift($signature_blob, $length);
|
284 |
+
$this->_string_shift($signature_blob, 4);
|
285 |
+
|
286 |
+
return $signature_blob;
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
* String Shift
|
291 |
+
*
|
292 |
+
* Inspired by array_shift
|
293 |
+
*
|
294 |
+
* @param string $string
|
295 |
+
* @param int $index
|
296 |
+
* @return string
|
297 |
+
* @access private
|
298 |
+
*/
|
299 |
+
function _string_shift(&$string, $index = 1)
|
300 |
+
{
|
301 |
+
$substr = substr($string, 0, $index);
|
302 |
+
$string = substr($string, $index);
|
303 |
+
return $substr;
|
304 |
}
|
305 |
}
|
306 |
|
311 |
*
|
312 |
* @package System_SSH_Agent
|
313 |
* @author Jim Wigginton <terrafrost@php.net>
|
314 |
+
* @access public
|
315 |
*/
|
316 |
class System_SSH_Agent
|
317 |
{
|
352 |
* @return System_SSH_Agent
|
353 |
* @access public
|
354 |
*/
|
355 |
+
function __construct($address = null)
|
356 |
{
|
357 |
+
if (!$address) {
|
358 |
+
switch (true) {
|
359 |
+
case isset($_SERVER['SSH_AUTH_SOCK']):
|
360 |
+
$address = $_SERVER['SSH_AUTH_SOCK'];
|
361 |
+
break;
|
362 |
+
case isset($_ENV['SSH_AUTH_SOCK']):
|
363 |
+
$address = $_ENV['SSH_AUTH_SOCK'];
|
364 |
+
break;
|
365 |
+
default:
|
366 |
+
user_error('SSH_AUTH_SOCK not found');
|
367 |
+
return false;
|
368 |
+
}
|
369 |
}
|
370 |
|
371 |
$this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
|
380 |
* @see self::__construct()
|
381 |
* @access public
|
382 |
*/
|
383 |
+
function System_SSH_Agent($address = null)
|
384 |
{
|
385 |
+
$this->__construct($address);
|
386 |
}
|
387 |
|
388 |
/**
|
403 |
$packet = pack('NC', 1, SYSTEM_SSH_AGENTC_REQUEST_IDENTITIES);
|
404 |
if (strlen($packet) != fputs($this->fsock, $packet)) {
|
405 |
user_error('Connection closed while requesting identities');
|
406 |
+
return array();
|
407 |
}
|
408 |
|
409 |
$length = current(unpack('N', fread($this->fsock, 4)));
|
410 |
$type = ord(fread($this->fsock, 1));
|
411 |
if ($type != SYSTEM_SSH_AGENT_IDENTITIES_ANSWER) {
|
412 |
user_error('Unable to request identities');
|
413 |
+
return array();
|
414 |
}
|
415 |
|
416 |
$identities = array();
|
@@ -722,5 +722,31 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
|
|
722 |
$sftp->exec('ping google.com -c 5');
|
723 |
sleep(5);
|
724 |
$sftp->nlist();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
725 |
}
|
726 |
}
|
722 |
$sftp->exec('ping google.com -c 5');
|
723 |
sleep(5);
|
724 |
$sftp->nlist();
|
725 |
+
|
726 |
+
return $sftp;
|
727 |
+
}
|
728 |
+
|
729 |
+
/**
|
730 |
+
* @depends testExecNlist
|
731 |
+
*/
|
732 |
+
public function testRawlistDisabledStatCache($sftp)
|
733 |
+
{
|
734 |
+
$this->assertTrue($sftp->mkdir(self::$scratchDir));
|
735 |
+
$this->assertTrue($sftp->chdir(self::$scratchDir));
|
736 |
+
$this->assertTrue($sftp->put('text.txt', 'zzzzz'));
|
737 |
+
$this->assertTrue($sftp->mkdir('subdir'));
|
738 |
+
$this->assertTrue($sftp->chdir('subdir'));
|
739 |
+
$this->assertTrue($sftp->put('leaf.txt', 'yyyyy'));
|
740 |
+
$this->assertTrue($sftp->chdir('../../'));
|
741 |
+
|
742 |
+
$list_cache_enabled = $sftp->rawlist('.', true);
|
743 |
+
|
744 |
+
$sftp->clearStatCache();
|
745 |
+
|
746 |
+
$sftp->disableStatCache();
|
747 |
+
|
748 |
+
$list_cache_disabled = $sftp->rawlist('.', true);
|
749 |
+
|
750 |
+
$this->assertEquals($list_cache_enabled, $list_cache_disabled, 'The files should be the same regardless of stat cache', 0.0, 10, true);
|
751 |
}
|
752 |
}
|
@@ -331,4 +331,14 @@ class Unit_File_ASN1Test extends PhpseclibTestCase
|
|
331 |
|
332 |
$this->assertSame($data, $arr);
|
333 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
}
|
331 |
|
332 |
$this->assertSame($data, $arr);
|
333 |
}
|
334 |
+
|
335 |
+
/**
|
336 |
+
* @group github1296
|
337 |
+
*/
|
338 |
+
public function testInvalidCertificate()
|
339 |
+
{
|
340 |
+
$data = 'a' . base64_decode('MD6gJQYKKwYBBAGCNxQCA6AXDBVvZmZpY2VAY2VydGRpZ2l0YWwucm+BFW9mZmljZUBjZXJ0ZGlnaXRhbC5ybw==');
|
341 |
+
$asn1 = new File_ASN1();
|
342 |
+
$asn1->decodeBER($data);
|
343 |
+
}
|
344 |
}
|
@@ -645,4 +645,31 @@ M0qaEPsM2o3CSTfxSJQQIyEe+izV3UQqYSyWkNqCCFPN
|
|
645 |
$x509->setRecurLimit(5);
|
646 |
$this->assertTrue($x509->validateSignature());
|
647 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
648 |
}
|
645 |
$x509->setRecurLimit(5);
|
646 |
$this->assertTrue($x509->validateSignature());
|
647 |
}
|
648 |
+
|
649 |
+
public function testValidateDate()
|
650 |
+
{
|
651 |
+
$x509 = new File_X509();
|
652 |
+
$x509->loadX509('-----BEGIN CERTIFICATE-----
|
653 |
+
MIIDITCCAoqgAwIBAgIQT52W2WawmStUwpV8tBV9TTANBgkqhkiG9w0BAQUFADBM
|
654 |
+
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
|
655 |
+
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0xMTEwMjYwMDAwMDBaFw0x
|
656 |
+
MzA5MzAyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
|
657 |
+
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw
|
658 |
+
FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
|
659 |
+
gYEA3rcmQ6aZhc04pxUJuc8PycNVjIjujI0oJyRLKl6g2Bb6YRhLz21ggNM1QDJy
|
660 |
+
wI8S2OVOj7my9tkVXlqGMaO6hqpryNlxjMzNJxMenUJdOPanrO/6YvMYgdQkRn8B
|
661 |
+
d3zGKokUmbuYOR2oGfs5AER9G5RqeC1prcB6LPrQ2iASmNMCAwEAAaOB5zCB5DAM
|
662 |
+
BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl
|
663 |
+
LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF
|
664 |
+
BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw
|
665 |
+
Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0
|
666 |
+
ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF
|
667 |
+
AAOBgQAhrNWuyjSJWsKrUtKyNGadeqvu5nzVfsJcKLt0AMkQH0IT/GmKHiSgAgDp
|
668 |
+
ulvKGQSy068Bsn5fFNum21K5mvMSf3yinDtvmX3qUA12IxL/92ZzKbeVCq3Yi7Le
|
669 |
+
IOkKcGQRCMha8X2e7GmlpdWC1ycenlbN0nbVeSv3JUMcafC4+Q==
|
670 |
+
-----END CERTIFICATE-----');
|
671 |
+
|
672 |
+
$this->assertFalse($x509->validateDate('Nov 22, 2018'));
|
673 |
+
$this->assertTrue($x509->validateDate('Nov 22, 2012'));
|
674 |
+
}
|
675 |
}
|