UpdraftPlus WordPress Backup Plugin - Version 1.12.2

Version Description

  • 30/Mar/2016 =

  • TWEAK: When testing Amazon S3 bucket accessibility, slightly improve one of the corner-case checks

  • TWEAK: When creating an encryption key for direct Migration, or UpdraftCentral, allow the user to choose their key size (this helps with PHP installs lacking both OpenSSL and GMP, in which case key creation can be really slow)

  • TWEAK: Detect another case and deal with an HTTP 413 response when sending chunked data on a direct site-to-site migration

Download this release

Release Info

Developer DavidAnderson
Plugin Icon 128x128 UpdraftPlus WordPress Backup Plugin
Version 1.12.2
Comparing to
See all releases

Code changes from version 1.12.1 to 1.12.2

central/bootstrap.php CHANGED
@@ -216,6 +216,10 @@ class UpdraftPlus_UpdraftCentral_Main {
216
  $extra_info['name'] = (string)$params['key_description'];
217
  }
218
 
 
 
 
 
219
  $created = $this->create_remote_control_key(false, $extra_info, $where_send);
220
 
221
  if (is_array($created)) {
@@ -268,7 +272,10 @@ class UpdraftPlus_UpdraftCentral_Main {
268
 
269
  @set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
270
 
271
- if (is_object($ud_rpc) && $ud_rpc->generate_new_keypair()) {
 
 
 
272
 
273
  if ($post_it && empty($extra_info['mothership_firewalled'])) {
274
 
@@ -412,7 +419,11 @@ class UpdraftPlus_UpdraftCentral_Main {
412
  $ret .= '<tr class="updraft_debugrow"><td style="vertical-align:top;">'.htmlspecialchars($name).' ('.htmlspecialchars($i).')</td><td>'.__("Access this site as user:", 'updraftplus')." ".htmlspecialchars($user_display)."<br>".__('Public key was sent to:', 'updraftplus').' '.htmlspecialchars($reconstructed_url).'<br>';
413
 
414
  if (!empty($key['created'])) {
415
- $ret .= __('Created:', 'updraftplus').' '.date_i18n(get_option('date_format').' '.get_option('time_format'), $key['created']).'<br>';
 
 
 
 
416
  }
417
 
418
  $ret .= '<a href="#" data-key_id="'.esc_attr($i).'" class="updraftcentral_key_delete">'.__('Delete...', 'updraftplus').'</a></td></tr>';
@@ -427,6 +438,13 @@ class UpdraftPlus_UpdraftCentral_Main {
427
 
428
  $ret .= '<tr class="updraft_debugrow"><th style="">'.__('Mothership', 'updraftplus').':</th><td style="width:80%;"><input checked="checked" type="radio" name="updraftcentral_mothership" id="updraftcentral_mothership_updraftpluscom"> <label for="updraftcentral_mothership_updraftpluscom">'.'UpdraftPlus.Com ('.__('i.e. you have an account there', 'updraftplus').')'.'</label><br><input type="radio" name="updraftcentral_mothership" id="updraftcentral_mothership_other"> <label for="updraftcentral_mothership_other">'.__('Other (please specify - i.e. the site where you have installed an UpdraftCentral dashboard)', 'updraftplus').'</label>:<br><input disabled="disabled" id="updraftcentral_keycreate_mothership" type="text" size="40" placeholder="'.__('URL of mothership', 'updraftplus').'" value=""><br><div style="display:none;" id="updraftcentral_keycreate_mothership_firewalled_container"><input id="updraftcentral_keycreate_mothership_firewalled" type="checkbox"><label for="updraftcentral_keycreate_mothership_firewalled">'.__('Use the alternative method for making a connection with the mothership. This is suitable if the mothership cannot be contacted with incoming traffic by this website (for example, this is the case if this website is hosted on the public Internet, but the UpdraftCentral mothership is on localhost, or on an Intranet), or if the mothership site does not have a SSL certificate.').'</label></div></td></tr>';
429
 
 
 
 
 
 
 
 
430
  $ret .= '<tr class="updraft_debugrow"><th style=""></th><td style="width:80%;"><button type="button" class="button button-primary" id="updraftcentral_keycreate_go">'.__('Create', 'updraftplus').'</button></td></tr>';
431
 
432
  $ret .= '</tbody></table>';
216
  $extra_info['name'] = (string)$params['key_description'];
217
  }
218
 
219
+ $key_size = (empty($params['key_size']) || !is_numeric($params['key_size']) || $params['key_size'] < 512) ? 2048 : (int)$params['key_size'];
220
+
221
+ $extra_info['key_size'] = $key_size;
222
+
223
  $created = $this->create_remote_control_key(false, $extra_info, $where_send);
224
 
225
  if (is_array($created)) {
272
 
273
  @set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
274
 
275
+ $key_size = (empty($extra_info['key_size']) || !is_numeric($extra_info['key_size']) || $extra_info['key_size'] < 512) ? 2048 : (int)$extra_info['key_size'];
276
+ // unset($extra_info['key_size']);
277
+
278
+ if (is_object($ud_rpc) && $ud_rpc->generate_new_keypair($key_size)) {
279
 
280
  if ($post_it && empty($extra_info['mothership_firewalled'])) {
281
 
419
  $ret .= '<tr class="updraft_debugrow"><td style="vertical-align:top;">'.htmlspecialchars($name).' ('.htmlspecialchars($i).')</td><td>'.__("Access this site as user:", 'updraftplus')." ".htmlspecialchars($user_display)."<br>".__('Public key was sent to:', 'updraftplus').' '.htmlspecialchars($reconstructed_url).'<br>';
420
 
421
  if (!empty($key['created'])) {
422
+ $ret .= __('Created:', 'updraftplus').' '.date_i18n(get_option('date_format').' '.get_option('time_format'), $key['created']).'.';
423
+ if (!empty($key['extra_info']['key_size'])) {
424
+ $ret .= ' '.sprintf(__('Key size: %d bits', 'updraftplus'), $key['extra_info']['key_size']).'.';
425
+ }
426
+ $ret .= '<br>';
427
  }
428
 
429
  $ret .= '<a href="#" data-key_id="'.esc_attr($i).'" class="updraftcentral_key_delete">'.__('Delete...', 'updraftplus').'</a></td></tr>';
438
 
439
  $ret .= '<tr class="updraft_debugrow"><th style="">'.__('Mothership', 'updraftplus').':</th><td style="width:80%;"><input checked="checked" type="radio" name="updraftcentral_mothership" id="updraftcentral_mothership_updraftpluscom"> <label for="updraftcentral_mothership_updraftpluscom">'.'UpdraftPlus.Com ('.__('i.e. you have an account there', 'updraftplus').')'.'</label><br><input type="radio" name="updraftcentral_mothership" id="updraftcentral_mothership_other"> <label for="updraftcentral_mothership_other">'.__('Other (please specify - i.e. the site where you have installed an UpdraftCentral dashboard)', 'updraftplus').'</label>:<br><input disabled="disabled" id="updraftcentral_keycreate_mothership" type="text" size="40" placeholder="'.__('URL of mothership', 'updraftplus').'" value=""><br><div style="display:none;" id="updraftcentral_keycreate_mothership_firewalled_container"><input id="updraftcentral_keycreate_mothership_firewalled" type="checkbox"><label for="updraftcentral_keycreate_mothership_firewalled">'.__('Use the alternative method for making a connection with the mothership. This is suitable if the mothership cannot be contacted with incoming traffic by this website (for example, this is the case if this website is hosted on the public Internet, but the UpdraftCentral mothership is on localhost, or on an Intranet), or if the mothership site does not have a SSL certificate.').'</label></div></td></tr>';
440
 
441
+ $ret .= '<tr class="updraft_debugrow"><th style=""></th><td style="width:80%;">'.__('Encryption key size:', 'updraftplus').' <select style="" id="updraftcentral_keycreate_keysize">
442
+ <option value="512">'.sprintf(__('%s bits', 'updraftplus').' - '.__('easy to break, fastest', 'updraftplus'), '512').'</option>
443
+ <option value="1024">'.sprintf(__('%s bits', 'updraftplus').' - '.__('faster (possibility for slow PHP installs)', 'updraftplus'), '1024').'</option>
444
+ <option value="2048" selected="selected">'.sprintf(__('%s bytes', 'updraftplus').' - '.__('recommended', 'updraftplus'), '2048').'</option>
445
+ <option value="4096">'.sprintf(__('%s bits', 'updraftplus').' - '.__('slower, strongest', 'updraftplus'), '4096').'</option>
446
+ </select></td></tr>';
447
+
448
  $ret .= '<tr class="updraft_debugrow"><th style=""></th><td style="width:80%;"><button type="button" class="button button-primary" id="updraftcentral_keycreate_go">'.__('Create', 'updraftplus').'</button></td></tr>';
449
 
450
  $ret .= '</tbody></table>';
central/listener.php CHANGED
@@ -37,9 +37,15 @@ class UpdraftPlus_UpdraftCentral_Listener {
37
  $ud_rpc->set_key_remote($key['publickey_remote']);
38
  // Create listener (which causes WP actions to be fired when messages are received)
39
  $ud_rpc->activate_replay_protection();
40
- if (!empty($key['extra_info']) && isset($key['extra_info']['mothership']) && false != ($parsed = parse_url($key['extra_info']['mothership'])) && is_array($parsed)) {
41
- $url = $parsed['scheme'].'://'.$parsed['host'];
42
- $ud_rpc->set_allow_cors_from(array($url));
 
 
 
 
 
 
43
  }
44
  $ud_rpc->create_listener();
45
  }
37
  $ud_rpc->set_key_remote($key['publickey_remote']);
38
  // Create listener (which causes WP actions to be fired when messages are received)
39
  $ud_rpc->activate_replay_protection();
40
+ if (!empty($key['extra_info']) && isset($key['extra_info']['mothership'])) {
41
+ $mothership = $key['extra_info']['mothership'];
42
+ unset($url);
43
+ if ('__updraftpluscom' == $mothership) {
44
+ $url = 'https://updraftplus.com';
45
+ } elseif (false != ($parsed = parse_url($key['extra_info']['mothership'])) && is_array($parsed)) {
46
+ $url = $parsed['scheme'].'://'.$parsed['host'];
47
+ }
48
+ if (!empty($url)) $ud_rpc->set_allow_cors_from(array($url));
49
  }
50
  $ud_rpc->create_listener();
51
  }
includes/class-udrpc.php CHANGED
@@ -59,7 +59,7 @@ if (!class_exists('UpdraftPlus_Remote_Communications')):
59
  class UpdraftPlus_Remote_Communications {
60
 
61
  // Version numbers relate to versions of this PHP library only (i.e. it's not a protocol support number, and version numbers of other compatible libraries (e.g. JavaScript) are not comparable)
62
- public $version = '1.4.1';
63
 
64
  private $key_name_indicator;
65
 
@@ -275,12 +275,12 @@ class UpdraftPlus_Remote_Communications {
275
  if ($this->key_option_name) update_site_option($this->key_option_name, $this->key_local);
276
  }
277
 
278
- public function generate_new_keypair() {
279
 
280
  $this->ensure_crypto_loaded();
281
 
282
  $rsa = new Crypt_RSA();
283
- $keys = $rsa->createKey(2048);
284
 
285
  if (empty($keys['privatekey'])) {
286
  $this->set_key_local(false);
59
  class UpdraftPlus_Remote_Communications {
60
 
61
  // Version numbers relate to versions of this PHP library only (i.e. it's not a protocol support number, and version numbers of other compatible libraries (e.g. JavaScript) are not comparable)
62
+ public $version = '1.4.2';
63
 
64
  private $key_name_indicator;
65
 
275
  if ($this->key_option_name) update_site_option($this->key_option_name, $this->key_local);
276
  }
277
 
278
+ public function generate_new_keypair($key_size = 2048) {
279
 
280
  $this->ensure_crypto_loaded();
281
 
282
  $rsa = new Crypt_RSA();
283
+ $keys = $rsa->createKey($key_size);
284
 
285
  if (empty($keys['privatekey'])) {
286
  $this->set_key_local(false);
includes/updraft-admin-ui.js CHANGED
@@ -1215,6 +1215,7 @@ jQuery(document).ready(function($){
1215
  var is_other = jQuery('#updraftcentral_mothership_other').is(':checked') ? true : false;
1216
 
1217
  var key_description = jQuery('#updraftcentral_keycreate_description').val();
 
1218
 
1219
  var where_send = '__updraftpluscom';
1220
 
@@ -1222,6 +1223,7 @@ jQuery(document).ready(function($){
1222
  action: 'updraft_ajax',
1223
  subaction: 'updraftcentral_create_key',
1224
  key_description: key_description,
 
1225
  nonce: updraft_credentialtest_nonce
1226
  };
1227
 
1215
  var is_other = jQuery('#updraftcentral_mothership_other').is(':checked') ? true : false;
1216
 
1217
  var key_description = jQuery('#updraftcentral_keycreate_description').val();
1218
+ var key_size = jQuery('#updraftcentral_keycreate_keysize').val();
1219
 
1220
  var where_send = '__updraftpluscom';
1221
 
1223
  action: 'updraft_ajax',
1224
  subaction: 'updraftcentral_create_key',
1225
  key_description: key_description,
1226
+ key_size: key_size,
1227
  nonce: updraft_credentialtest_nonce
1228
  };
1229
 
methods/s3.php CHANGED
@@ -267,7 +267,7 @@ class UpdraftPlus_BackupModule_s3 {
267
  $region = ($config['key'] == 's3' || $config['key'] == 'updraftvault') ? @$s3->getBucketLocation($bucket_name) : 'n/a';
268
 
269
  // See if we can detect the region (which implies the bucket exists and is ours), or if not create it
270
- if (!empty($region) || @$s3->putBucket($bucket_name, 'private') || ('s3' == $config['key'] && false !== ($s3 = $this->use_dns_bucket_name($s3, $bucket_name)) && false !== @$s3->getBucket($bucket_name, null, null, 1))) {
271
  if (empty($region) && ($config['key'] == 's3' || $config['key'] == 'updraftvault')) $region = $s3->getBucketLocation($bucket_name);
272
  if (!empty($region)) $this->set_region($s3, $region, $bucket_name);
273
 
@@ -419,7 +419,7 @@ class UpdraftPlus_BackupModule_s3 {
419
  $config = $this->get_config();
420
  $whoweare = $config['whoweare'];
421
  $whoweare_key = $config['key'];
422
- $sse = (empty($config['server_side_encryption'])) ? false : true;
423
 
424
  $s3 = $this->getS3(
425
  $config['accesskey'],
@@ -456,6 +456,34 @@ class UpdraftPlus_BackupModule_s3 {
456
  } else {
457
  sleep(4);
458
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
  }
460
 
461
  $region = ($config['key'] == 'dreamobjects' || $config['key'] == 's3generic') ? 'n/a' : @$s3->getBucketLocation($bucket_name);
@@ -464,7 +492,7 @@ class UpdraftPlus_BackupModule_s3 {
464
  } else {
465
  # Final thing to attempt - see if it was just the location request that failed
466
  $s3 = $this->use_dns_bucket_name($s3, $bucket_name);
467
- if (false === ($gb = @$s3->getBucket($bucket_name, null, null, 1))) {
468
  $updraftplus->log("$whoweare Error: Failed to access bucket $bucket_name. Check your permissions and credentials.");
469
  return new WP_Error('bucket_not_accessed', sprintf(__('%s Error: Failed to access bucket %s. Check your permissions and credentials.','updraftplus'),$whoweare, $bucket_name));
470
  }
@@ -528,6 +556,8 @@ class UpdraftPlus_BackupModule_s3 {
528
  if (preg_match("#^([^/]+)/(.*)$#",$bucket_name,$bmatches)) {
529
  $bucket_name = $bmatches[1];
530
  $bucket_path = $bmatches[2]."/";
 
 
531
  }
532
 
533
  $region = ($config['key'] == 'dreamobjects' || $config['key'] == 's3generic') ? 'n/a' : @$s3->getBucketLocation($bucket_name);
@@ -536,7 +566,7 @@ class UpdraftPlus_BackupModule_s3 {
536
  } else {
537
  # Final thing to attempt - see if it was just the location request that failed
538
  $s3 = $this->use_dns_bucket_name($s3, $bucket_name);
539
- if (false === ($gb = @$s3->getBucket($bucket_name, null, null, 1))) {
540
  $updraftplus->log("$whoweare Error: Failed to access bucket $bucket_name. Check your permissions and credentials.");
541
  $updraftplus->log(sprintf(__('%s Error: Failed to access bucket %s. Check your permissions and credentials.','updraftplus'),$whoweare, $bucket_name), 'error');
542
  return false;
@@ -609,7 +639,7 @@ class UpdraftPlus_BackupModule_s3 {
609
  if (empty($region) && 's3' == $config['key']) {
610
  # Final thing to attempt - see if it was just the location request that failed
611
  $s3 = $this->use_dns_bucket_name($s3, $bucket_name);
612
- if (false !== ($gb = @$s3->getBucket($bucket_name, null, null, 1))) {
613
  $keep_going = true;
614
  }
615
  }
@@ -811,7 +841,7 @@ class UpdraftPlus_BackupModule_s3 {
811
  # Feb 2015: after we moved to the new SDK which didn't support this, two more reports came in
812
  if (!isset($bucket_exists) && 's3' == $config['key']) {
813
  $s3 = $this->use_dns_bucket_name($s3, $bucket, true);
814
- $gb = @$s3->getBucket($bucket, null, null, 1);
815
  if ($gb !== false) {
816
  $bucket_exists = true;
817
  $location = '';
267
  $region = ($config['key'] == 's3' || $config['key'] == 'updraftvault') ? @$s3->getBucketLocation($bucket_name) : 'n/a';
268
 
269
  // See if we can detect the region (which implies the bucket exists and is ours), or if not create it
270
+ if (!empty($region) || @$s3->putBucket($bucket_name, 'private') || ('s3' == $config['key'] && false !== ($s3 = $this->use_dns_bucket_name($s3, $bucket_name)) && false !== @$s3->getBucket($bucket_name, $bucket_path, null, 1))) {
271
  if (empty($region) && ($config['key'] == 's3' || $config['key'] == 'updraftvault')) $region = $s3->getBucketLocation($bucket_name);
272
  if (!empty($region)) $this->set_region($s3, $region, $bucket_name);
273
 
419
  $config = $this->get_config();
420
  $whoweare = $config['whoweare'];
421
  $whoweare_key = $config['key'];
422
+ $sse = empty($config['server_side_encryption']) ? false : true;
423
 
424
  $s3 = $this->getS3(
425
  $config['accesskey'],
456
  } else {
457
  sleep(4);
458
  }
459
+ } elseif (!empty($config['is_new_user'])) {
460
+ // A crude waiter, because the AWS toolkit does not have one for IAM propagation - basically, loop around a few times whilst the access attempt still fails
461
+ $attempt_flag = 0;
462
+ while ($attempt_flag < 5) {
463
+
464
+ $attempt_flag++;
465
+ if (@$s3->getBucketLocation($bucket_name)) {
466
+ $attempt_flag = 100;
467
+ } else {
468
+
469
+ sleep($attempt_flag*1.5 + 1);
470
+
471
+ // Get the bucket object again... because, for some reason, the AWS PHP SDK (at least on the current version we're using, March 2016) calculates an incorrect signature on subsequent attempts
472
+ $this->s3_object = null;
473
+ $s3 = $this->getS3(
474
+ $config['accesskey'],
475
+ $config['secretkey'],
476
+ UpdraftPlus_Options::get_updraft_option('updraft_ssl_useservercerts'), UpdraftPlus_Options::get_updraft_option('updraft_ssl_disableverify'),
477
+ UpdraftPlus_Options::get_updraft_option('updraft_ssl_nossl'),
478
+ null,
479
+ $sse
480
+ );
481
+
482
+ if (is_wp_error($s3)) return $s3;
483
+ if (!is_a($s3, 'UpdraftPlus_S3') && !is_a($s3, 'UpdraftPlus_S3_Compat')) return new WP_Error('no_s3object', 'Failed to gain access to '.$config['whoweare']);
484
+
485
+ }
486
+ }
487
  }
488
 
489
  $region = ($config['key'] == 'dreamobjects' || $config['key'] == 's3generic') ? 'n/a' : @$s3->getBucketLocation($bucket_name);
492
  } else {
493
  # Final thing to attempt - see if it was just the location request that failed
494
  $s3 = $this->use_dns_bucket_name($s3, $bucket_name);
495
+ if (false === ($gb = @$s3->getBucket($bucket_name, $bucket_path, null, 1))) {
496
  $updraftplus->log("$whoweare Error: Failed to access bucket $bucket_name. Check your permissions and credentials.");
497
  return new WP_Error('bucket_not_accessed', sprintf(__('%s Error: Failed to access bucket %s. Check your permissions and credentials.','updraftplus'),$whoweare, $bucket_name));
498
  }
556
  if (preg_match("#^([^/]+)/(.*)$#",$bucket_name,$bmatches)) {
557
  $bucket_name = $bmatches[1];
558
  $bucket_path = $bmatches[2]."/";
559
+ } else {
560
+ $bucket_path = '';
561
  }
562
 
563
  $region = ($config['key'] == 'dreamobjects' || $config['key'] == 's3generic') ? 'n/a' : @$s3->getBucketLocation($bucket_name);
566
  } else {
567
  # Final thing to attempt - see if it was just the location request that failed
568
  $s3 = $this->use_dns_bucket_name($s3, $bucket_name);
569
+ if (false === ($gb = @$s3->getBucket($bucket_name, $bucket_path, null, 1))) {
570
  $updraftplus->log("$whoweare Error: Failed to access bucket $bucket_name. Check your permissions and credentials.");
571
  $updraftplus->log(sprintf(__('%s Error: Failed to access bucket %s. Check your permissions and credentials.','updraftplus'),$whoweare, $bucket_name), 'error');
572
  return false;
639
  if (empty($region) && 's3' == $config['key']) {
640
  # Final thing to attempt - see if it was just the location request that failed
641
  $s3 = $this->use_dns_bucket_name($s3, $bucket_name);
642
+ if (false !== ($gb = @$s3->getBucket($bucket_name, $bucket_path, null, 1))) {
643
  $keep_going = true;
644
  }
645
  }
841
  # Feb 2015: after we moved to the new SDK which didn't support this, two more reports came in
842
  if (!isset($bucket_exists) && 's3' == $config['key']) {
843
  $s3 = $this->use_dns_bucket_name($s3, $bucket, true);
844
+ $gb = @$s3->getBucket($bucket, $path, null, 1);
845
  if ($gb !== false) {
846
  $bucket_exists = true;
847
  $location = '';
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Backup with UpdraftPlus, DavidAnderson, DNutbourne
3
  Tags: backup, backups, restore, amazon backup, s3 backup, dropbox backup, google drive backup, rackspace cloud files, rackspace backup, dreamhost, dreamobjects backup, ftp backup, webdav backup, google cloud storage, onedrive, microsoft one drive, microsoft azure, azure, back up, multisite, restoration, sftp backup, ftps, scp backup, migrate, duplicate, copy, mysql backup, database backup, db backups, website backup, wordpress backup, full backup, openstack backup, sicherung
4
  Requires at least: 3.2
5
  Tested up to: 4.5
6
- Stable tag: 1.12.1
7
  Author URI: https://updraftplus.com
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
@@ -120,6 +120,12 @@ The <a href="https://updraftplus.com/news/">UpdraftPlus backup blog</a> is the b
120
 
121
  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.11.29 of the free version correspond to changes made in 2.11.29.x of the paid version.
122
 
 
 
 
 
 
 
123
  = 1.12.1 - 24/Mar/2016 =
124
 
125
  * TWEAK: Update the bundled remote communications library - needed for some UpdraftCentral users
@@ -1812,4 +1818,4 @@ We recognise and thank the following for code and/or libraries used and/or modif
1812
 
1813
 
1814
  == Upgrade Notice ==
1815
- * 1.12.1: Compatible with the forthcoming UpdraftCentral; various tweaks, fixes and small improvements.
3
  Tags: backup, backups, restore, amazon backup, s3 backup, dropbox backup, google drive backup, rackspace cloud files, rackspace backup, dreamhost, dreamobjects backup, ftp backup, webdav backup, google cloud storage, onedrive, microsoft one drive, microsoft azure, azure, back up, multisite, restoration, sftp backup, ftps, scp backup, migrate, duplicate, copy, mysql backup, database backup, db backups, website backup, wordpress backup, full backup, openstack backup, sicherung
4
  Requires at least: 3.2
5
  Tested up to: 4.5
6
+ Stable tag: 1.12.2
7
  Author URI: https://updraftplus.com
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
120
 
121
  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.11.29 of the free version correspond to changes made in 2.11.29.x of the paid version.
122
 
123
+ = 1.12.2 - 30/Mar/2016 =
124
+
125
+ * TWEAK: When testing Amazon S3 bucket accessibility, slightly improve one of the corner-case checks
126
+ * TWEAK: When creating an encryption key for direct Migration, or UpdraftCentral, allow the user to choose their key size (this helps with PHP installs lacking both OpenSSL and GMP, in which case key creation can be really slow)
127
+ * TWEAK: Detect another case and deal with an HTTP 413 response when sending chunked data on a direct site-to-site migration
128
+
129
  = 1.12.1 - 24/Mar/2016 =
130
 
131
  * TWEAK: Update the bundled remote communications library - needed for some UpdraftCentral users
1818
 
1819
 
1820
  == Upgrade Notice ==
1821
+ * 1.12.2: Compatible with the forthcoming UpdraftCentral; various minor tweaks
updraftplus.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: UpdraftPlus - Backup/Restore
4
  Plugin URI: https://updraftplus.com
5
  Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.
6
  Author: UpdraftPlus.Com, DavidAnderson
7
- Version: 1.12.1
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
10
  Text Domain: updraftplus
4
  Plugin URI: https://updraftplus.com
5
  Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.
6
  Author: UpdraftPlus.Com, DavidAnderson
7
+ Version: 1.12.2
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
10
  Text Domain: updraftplus