MOON
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
System: Linux csr818.wilogic.com 2.6.18-419.el5xen #1 SMP Fri Feb 24 22:50:37 UTC 2017 x86_64
User: digitals (531)
PHP: 5.4.45
Disabled: NONE
Upload Files
File: //var/usr/webmin-1.941/zones/save_fs.cgi
#!/usr/bin/perl
# Update, add or delete a filesystem

require './zones-lib.pl';
do 'forms-lib.pl';
&ReadParse();
$zinfo = &get_zone($in{'zone'});
$zinfo || &error($text{'edit_egone'});
if (!$in{'new'}) {
	# Find the filesystem object
	($fs) = grep { $_->{'dir'} eq $in{'old'} } @{$zinfo->{'fs'}};
	$fs || &error($text{'fs_egone'});
	$mount = &get_active_mount($zinfo, $fs);
	}
else {
	$fs = { 'keytype' => 'fs',
		'type' => $in{'type'} };
	}

if ($in{'delete'}) {
	# Just remove this filesystem
	&delete_zone_object($zinfo, $fs);

	# Attempt to un-mount it (if mounted)
	if ($mount) {
		&error_setup($text{'fs_err3'});
		&mount::unmount_dir(@$mount);
		}
	}
else {
	# Validate inputs
	$form = &get_fs_form(\%in, $zinfo, $fs, $fs->{'type'});
	$form->validate_redirect("edit_fs.cgi");
	$fs->{'dir'} = $form->get_value("dir");
	if (&indexof($fs->{'type'}, &mount::list_fstypes()) >= 0) {
		# Parse friendly filesystem forms
		$fs->{'special'} = &mount::check_location($fs->{'type'});
		&mount::check_options($fs->{'type'});
		$fs->{'options'} = &mount::join_options($fs->{'type'});
		}
	else {
		# Just use user-entered device and options
		$fs->{'special'} = $form->get_value("special");
		$fs->{'options'} = $form->get_value("options");
		}
	if ($fs->{'special'} =~ /^\/dev\/dsk\/(.*)$/) {
		$fs->{'raw'} = "/dev/rdsk/$1";
		}
	&find_clash($zinfo, $fs) &&
		$form->validate_redirect("edit_fs.cgi",
			[ [ "dir", $text{'fs_eclash'} ] ]);

	# Save the filesystem settings
	$mp = &get_zone_root($zinfo).$fs->{'dir'};
	if ($in{'new'}) {
		&create_zone_object($zinfo, $fs);

		# Attempt to mount it
		if ($in{'mount'}) {
			&error_setup($text{'fs_err2'});
			&system_logged("mkdir -p ".quotemeta($mp));
			&mount::mount_dir($mp,
					  $fs->{'special'},
					  $fs->{'type'},
					  $fs->{'options'});
			}
		}
	else {
		&modify_zone_object($zinfo, $fs);

		# Attempt to re-mount it
		if ($mount) {
			&error_setup($text{'fs_err4'});
			&mount::unmount_dir(@$mount);
			if ($fs->{'dir'} ne $in{'old'}) {
				&system_logged("mkdir -p ".quotemeta($mp));
				}
			print STDERR "mounting $fs->{'special'} on $mp with type $fs->{'type'} and options $fs->{'options'}\n";
			&mount::mount_dir($mp,
					  $fs->{'special'},
					  $fs->{'type'},
					  $fs->{'options'});
			}
		}
	}

&webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "modify",
	    "fs", $in{'old'} || $fs->{'dir'}, $fs);
&redirect("edit_zone.cgi?zone=$in{'zone'}");