Project

General

Profile

« Previous | Next » 

Revision 9bfd8974

Added by Jim Pingle over 2 years ago

Improve handling of XMLRPC sync of empty sections. Fixes #14034

View differences:

src/usr/local/www/xmlrpc.php
228 228
		$syncd_full_sections = array();
229 229

  
230 230
		foreach ($sync_full_sections as $section) {
231
			if (!isset($sections[$section])) {
231
			/* Do not test for empty here or removing final entry
232
			 * from a section will not work */
233
			if (!array_key_exists($section, $sections)) {
232 234
				continue;
233 235
			}
234 236

  
235
			$config[$section] = $sections[$section];
236
			unset($sections[$section]);
237
			config_set_path($section, array_get_path($sections, $section));
238
			array_del_path($sections, $section);
237 239
			$syncd_full_sections[] = $section;
238 240
		}
239 241

  
......
395 397

  
396 398
		$vipbackup = array();
397 399
		$oldvips = array();
398
		if (isset($sections['virtualip']) &&
399
		    is_array($config['virtualip']['vip'])) {
400
			foreach ($config['virtualip']['vip'] as $vip) {
400
		if (array_key_exists('virtualip', $sections)) {
401
			foreach (config_get_path('virtualip/vip', []) as $vip) {
402
				if (empty($vip)) {
403
					continue;
404
				}
401 405
				if ($vip['mode'] == "carp") {
402 406
					$key = $vip['interface'] .
403 407
					    "_vip" . $vip['vhid'];
......
435 439
		/* For vip section, first keep items sent from the master */
436 440
		$config = array_merge_recursive_unique($config, $sections);
437 441

  
438

  
439 442
		/* Remove locally items removed remote */
440 443
		foreach ($voucher as $zone => $item) {
441 444
			/* No rolls on master, delete local ones */
......
504 507
		 * on the backup
505 508
		 */
506 509
		if (is_array($vipbackup) && !empty($vipbackup)) {
507
			if (!is_array($config['virtualip'])) {
508
				$config['virtualip'] = array();
509
			}
510
			if (!is_array($config['virtualip']['vip'])) {
511
				$config['virtualip']['vip'] = array();
512
			}
510
			$vips = config_get_path('virtualip/vip', []);
513 511
			foreach ($vipbackup as $vip) {
514
				array_unshift($config['virtualip']['vip'], $vip);
512
				array_unshift($vips, $vip);
515 513
			}
514
			config_set_path('virtualip/vip', $vips);
516 515
		}
517 516

  
518 517
		/* Log what happened */

Also available in: Unified diff